diff --git a/chaste_codegen/tests/numerical/CodegenRefCheck/CMakeLists.txt b/chaste_codegen/tests/numerical/CodegenRefCheck/CMakeLists.txt new file mode 100644 index 00000000..e9e10e8d --- /dev/null +++ b/chaste_codegen/tests/numerical/CodegenRefCheck/CMakeLists.txt @@ -0,0 +1,7 @@ +# This project has no generated cell-model sources of its own (see the sibling +# RefCheck___ projects, generated by chaste_codegen/tests/numerical/generate_refcheck_harness.py, +# for those); it only reads the .dat outputs they produce and numerically diffs them. + +find_package(Chaste COMPONENTS heart) + +chaste_do_project(CodegenRefCheck) diff --git a/chaste_codegen/tests/numerical/CodegenRefCheck/test/TestRefCheckCompareAll.hpp b/chaste_codegen/tests/numerical/CodegenRefCheck/test/TestRefCheckCompareAll.hpp new file mode 100644 index 00000000..fc32c395 --- /dev/null +++ b/chaste_codegen/tests/numerical/CodegenRefCheck/test/TestRefCheckCompareAll.hpp @@ -0,0 +1,95 @@ +#ifndef TESTREFCHECKCOMPAREALL_HPP_ +#define TESTREFCHECKCOMPAREALL_HPP_ + +#include + +#include +#include + +#include "RefCheckManifest.hpp" +#include "Exception.hpp" +#include "RunAndCheckIonicModels.hpp" + +// This test must run sequentially (never in parallel), like other codegen tests. +#include "FakePetscSetup.hpp" + +/** + * Numerically diffs every chaste_codegen reference-model "variant" rendering (the current + * branch's unsuffixed file, plus any --sympy_X_Y / --python_X_Y variant) against the frozen + * baseline (chaste-codegen's `master`-branch rendering of the same (scheme, model), see + * freeze_baseline.py), to verify that textually different but supposedly + * mathematically-equivalent generated code actually simulates to the same result. + * + * The manifest (which (scheme, model, variant) tuples exist, and whether a baseline was found for + * them) is generated by generate_refcheck_harness.py into RefCheckManifest.hpp. The .dat files + * being compared here are written by the per-tuple Test_RefCheck_*.hpp suites generated into the + * sibling RefCheck___ projects; this test's CMakeLists.txt declares an explicit + * ctest DEPENDS on all of them so they always run first. + */ +class TestRefCheckCompareAll : public CxxTest::TestSuite +{ +public: + void TestCompareAllVariantsAgainstBaseline() + { + const double tolerance = 1e-3; // mV; tight, since same-scheme variants are claimed + // to be exactly mathematically equivalent renderings. + std::vector entries = GetRefCheckManifest(); + + unsigned num_pass = 0; + unsigned num_fail = 0; + unsigned num_no_baseline = 0; + unsigned num_error = 0; + + std::cout << "\n=== CodegenRefCheck: comparing every current-branch variant against " + << "the frozen baseline ===\n"; + + for (unsigned i = 0; i < entries.size(); i++) + { + const RefCheckEntry& r_entry = entries[i]; + const std::string label = r_entry.scheme + "/" + r_entry.model + " [" + r_entry.variant + "]"; + + if (!r_entry.hasBaseline) + { + std::cout << "NO-BASELINE " << label << "\n"; + num_no_baseline++; + continue; + } + + const std::string folder = "CodegenRefCheck/" + r_entry.scheme + "/" + r_entry.model; + try + { + unsigned num_failed_before = CxxTest::tracker().testFailedAsserts(); + // r_entry.variant doubles as the .dat basename the matching RefCheck_* tuple project + // wrote into `folder` (see write_tuple_project() in generate_refcheck_harness.py) + // - here it picks out which rendering's .dat to diff against "baseline"'s. + CompareCellModelResults("baseline", r_entry.variant, tolerance, /*vOnly=*/true, folder); + if (CxxTest::tracker().testFailedAsserts() > num_failed_before) + { + std::cout << "FAIL " << label << "\n"; + num_fail++; + } + else + { + std::cout << "PASS " << label << "\n"; + num_pass++; + } + } + catch (Exception& e) + { + // Most commonly: no .dat file (e.g. a CVODE-only model on a build without + // CHASTE_CVODE, or a reference file that failed to compile) rather than a + // genuine numerical mismatch - report distinctly, don't fail the whole suite. + std::cout << "ERROR " << label << ": " << e.GetMessage() << "\n"; + num_error++; + } + } + + std::cout << "=== CodegenRefCheck summary: " << num_pass << " pass, " << num_fail + << " fail, " << num_no_baseline << " no-baseline, " << num_error << " error, " + << entries.size() << " total ===\n"; + + TS_ASSERT_EQUALS(num_fail, 0u); + } +}; + +#endif // TESTREFCHECKCOMPAREALL_HPP_ diff --git a/chaste_codegen/tests/numerical/README.md b/chaste_codegen/tests/numerical/README.md new file mode 100644 index 00000000..bb24906c --- /dev/null +++ b/chaste_codegen/tests/numerical/README.md @@ -0,0 +1,47 @@ +# CodegenRefCheck + +The rest of chaste_codegen's test suite checks generated model code textually +against the frozen reference files under `chaste_codegen/data/tests/chaste_reference_models/`. +When a sympy/Python version renders a model differently, a version-suffixed variant file +(e.g. `--sympy_1_14.cpp`) is added alongside the default file, on the assumption that the new +rendering is mathematically equivalent to before. This needs to be verified numerically. + +This suite compiles every reference model variant as a real Chaste `heart` +class, simulates it, and numerically compares the result to the corresponding +baseline model (a **fixed snapshot**) which is a stable basis to compare against. +A fixed snapshot is used as the baseline so that it does not silently drift when +new commits are merged in. If the baseline ever needs to be shifted forward, +`freeze_baseline.py --force` can be used to make a new snapshot into `baseline/`. + +This is a quick numerical check that supplements the `TestCodegenLong` Chaste +tests that perform more rigorous end-to-end testing. + +## Building and running the tests +`CodegenRefCheck` is a small Chaste user project. It contains `TestRefCheckCompareAll.hpp` +which reads the manifest the harness generator creates on the fly (`test/RefCheckManifest.hpp`) +and numerically diffs each variant's `.dat` against its baseline via Chaste's existing +`CompareCellModelResults` helper (`heart/src/fortests/RunAndCheckIonicModels.hpp`). + +`generate_refcheck_harness.py` is the test harness generator. For every +(scheme, model, variant) tuple, it creates **one standalone Chaste project** in +`/projects/RefCheck___/` +(`variant` is `Baseline`, `Default`, `Sympy111`, `Python311`, etc.), each holding +one variant consisting of a generated `src/
.hpp/.cpp` pair and a +generated CxxTest runner that constructs a cell, runs it, and writes a `.dat` file. +Every tuple gets its *own* project to avoid name collisions. If you want to inspect +what was generated, review the resulting content under `/projects/RefCheck_*`. +Check `/projects/CodegenRefCheck/generated_manifest.md` for +what was generated or skipped. + +To build and run this suite, checkout Chaste, point `CHASTE_SOURCE_DIR` at it, +build the `heart` module, and run `run_all.sh` to regenerate → configure → build → test, +end to end. + +```sh +CHASTE_SOURCE_DIR=/path/to/Chaste ./run_all.sh +``` + +`TestRefCheckCompareAll`'s output prints one PASS/FAIL/NO-BASELINE/ERROR +line per (scheme, model, variant) tuple plus a totals line. ERROR means a `.dat` +file was missing (e.g. a CVODE-only model on a build without `CHASTE_CVODE`, +or a reference `.cpp` failed to compile) rather than a genuine numerical mismatch. diff --git a/chaste_codegen/tests/numerical/baseline/BE/aslanidi_atrial_model_2009.cpp b/chaste_codegen/tests/numerical/baseline/BE/aslanidi_atrial_model_2009.cpp new file mode 100644 index 00000000..8cb3904a --- /dev/null +++ b/chaste_codegen/tests/numerical/baseline/BE/aslanidi_atrial_model_2009.cpp @@ -0,0 +1,1227 @@ +//! @file +//! +//! This source file was generated from CellML by chaste_codegen version (version omitted as unimportant) +//! +//! Model: aslanidi_atrial_model_2009 +//! +//! Processed by chaste_codegen: https://github.com/ModellingWebLab/chaste-codegen +//! (translator: chaste_codegen, model type: BackwardEuler) +//! on (date omitted as unimportant) +//! +//! + +#include "CardiacNewtonSolver.hpp" +#include "aslanidi_atrial_model_2009.hpp" +#include +#include +#include +#include +#include "Exception.hpp" +#include "OdeSystemInformation.hpp" +#include "RegularStimulus.hpp" +#include "HeartConfig.hpp" +#include "IsNan.hpp" +#include "MathsCustomFunctions.hpp" + + + + + + boost::shared_ptr Cellaslanidi_atrial_model_2009FromCellMLBackwardEuler::UseCellMLDefaultStimulus() + { + // Use the default stimulus specified by CellML metadata + const double var_membrane__Cm_converted = 0.001 * mParameters[4]; // uF + const double var_chaste_interface__membrane__stim_amplitude_converted = -3.9999999999999998e-6 * HeartConfig::Instance()->GetCapacitance() / var_membrane__Cm_converted; // uA_per_cm2 + const double var_chaste_interface__membrane__stim_duration_converted = 0.5; // millisecond + const double var_chaste_interface__membrane__stim_period_converted = 500; // millisecond + const double var_chaste_interface__membrane__stim_start_converted = 10; // millisecond + boost::shared_ptr p_cellml_stim(new RegularStimulus( + -fabs(var_chaste_interface__membrane__stim_amplitude_converted), + var_chaste_interface__membrane__stim_duration_converted, + var_chaste_interface__membrane__stim_period_converted, + var_chaste_interface__membrane__stim_start_converted + )); + mpIntracellularStimulus = p_cellml_stim; + return p_cellml_stim; + } + double Cellaslanidi_atrial_model_2009FromCellMLBackwardEuler::GetIntracellularCalciumConcentration() + { + return mStateVariables[1]; + } + Cellaslanidi_atrial_model_2009FromCellMLBackwardEuler::Cellaslanidi_atrial_model_2009FromCellMLBackwardEuler(boost::shared_ptr /* unused; should be empty */, boost::shared_ptr pIntracellularStimulus) + : AbstractBackwardEulerCardiacCell<14>( + 29, + 0, + pIntracellularStimulus) + { + // Time units: millisecond + // + this->mpSystemInfo = OdeSystemInformation::Instance(); + Init(); + + // We have a default stimulus specified in the CellML file metadata + this->mHasDefaultStimulusFromCellML = true; + + this->mParameters[0] = 200; // (var_Ca_handling_by_the_SR__alpha_rel) [picoA_per_millimolar] + this->mParameters[1] = 2.5; // (var_cleft_space_ion_concentrations__Ca_c) [millimolar] + this->mParameters[2] = 140; // (var_cleft_space_ion_concentrations__Na_c) [millimolar] + this->mParameters[3] = 0.0040000000000000001; // (var_L_type_Ca_channel__g_Ca_L) [nanoS] + this->mParameters[4] = 5.0000000000000002e-5; // (var_membrane__Cm) [nanoF] + this->mParameters[5] = 1.3999999999999999e-6; // (var_sodium_current__P_Na) [nanolitre_per_second] + this->mParameters[6] = 0.0050800000000000003; // (var_inward_rectifier__g_K1) [nanoS] + this->mParameters[7] = 0.0035000000000000001; // (var_delayed_rectifier_K_current__g_Kr) [nanoS] + this->mParameters[8] = 0.0025000000000000001; // (var_delayed_rectifier_K_current__g_Ks) [nanoS] + this->mParameters[9] = 2.0000000000000002e-5; // (var_Na_Ca_ion_exchanger_current__k_NaCa) [picoA_per_millimolar_4] + } + + Cellaslanidi_atrial_model_2009FromCellMLBackwardEuler::~Cellaslanidi_atrial_model_2009FromCellMLBackwardEuler() + { + } + + + void Cellaslanidi_atrial_model_2009FromCellMLBackwardEuler::VerifyStateVariables() + { + std::vector& rY = rGetStateVariables(); + std::string error_message = ""; + + for (unsigned i=0; i < 29; i++) + { + if(std::isnan(rY[i])) + { + error_message += "State variable " + this->rGetStateVariableNames()[i] + " is not a number\n"; + } + if(std::isinf(rY[i])) + { + error_message += "State variable " + this->rGetStateVariableNames()[i] + " has become INFINITE\n"; + } + if(this->is_concentration[i] && rY[i] < 0) + { + error_message += "Concentration " + this->rGetStateVariableNames()[i] + " below 0\n"; + } + if(this->is_probability[i] && rY[i] < 0) + { + error_message += "Probability " + this->rGetStateVariableNames()[i] + " below 0\n"; + } + if(this->is_probability[i] && rY[i] > 1) + { + error_message += "Probability " + this->rGetStateVariableNames()[i] + " above 1\n"; + } + } + if (error_message != ""){ + EXCEPTION(DumpState(error_message)); + } + } + + double Cellaslanidi_atrial_model_2009FromCellMLBackwardEuler::GetIIonic(const std::vector* pStateVariables) + { + // For state variable interpolation (SVI) we read in interpolated state variables, + // otherwise for ionic current interpolation (ICI) we use the state variables of this model (node). + if (!pStateVariables) pStateVariables = &rGetStateVariables(); + const std::vector& rY = *pStateVariables; + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -80.0 + double var_chaste_interface__intracellular_ion_concentrations__Ca_i = rY[1]; + // Units: millimolar; Initial value: 7.1e-05 + double var_chaste_interface__sodium_current_m_gate__m = rY[2]; + // Units: dimensionless; Initial value: 0.01309 + double var_chaste_interface__sodium_current_h1_gate__h1 = rY[3]; + // Units: dimensionless; Initial value: 0.706 + double var_chaste_interface__sodium_current_h2_gate__h2 = rY[4]; + // Units: dimensionless; Initial value: 0.61493 + double var_chaste_interface__L_type_Ca_channel_d_L_gate__d_L = rY[5]; + // Units: dimensionless; Initial value: 3e-05 + double var_chaste_interface__L_type_Ca_channel_f_L_gate__f_L = rY[6]; + // Units: dimensionless; Initial value: 0.99981 + double var_chaste_interface__T_type_Ca_channel_d_T_gate__d_T = rY[7]; + // Units: dimensionless; Initial value: 0.00046 + double var_chaste_interface__T_type_Ca_channel_f_T_gate__f_T = rY[8]; + // Units: dimensionless; Initial value: 0.30752 + double var_chaste_interface__Ca_independent_transient_outward_K_current_r_gate__r = rY[9]; + // Units: dimensionless; Initial value: 6e-05 + double var_chaste_interface__Ca_independent_transient_outward_K_current_s1_gate__s1 = rY[10]; + // Units: dimensionless; Initial value: 0.5753 + double var_chaste_interface__Ca_independent_transient_outward_K_current_s2_gate__s2 = rY[11]; + // Units: dimensionless; Initial value: 0.39871 + double var_chaste_interface__Ca_independent_transient_outward_K_current_s3_gate__s3 = rY[12]; + // Units: dimensionless; Initial value: 0.57363 + double var_chaste_interface__delayed_rectifier_K_current_z_gate__z = rY[13]; + // Units: dimensionless; Initial value: 0.02032 + double var_chaste_interface__delayed_rectifier_K_current_pa_gate__p_a = rY[14]; + // Units: dimensionless; Initial value: 0.00016 + double var_chaste_interface__delayed_rectifier_K_current_pi_gate__p_i = rY[15]; + // Units: dimensionless; Initial value: 0.76898 + double var_chaste_interface__intracellular_ion_concentrations__Na_i = rY[16]; + // Units: millimolar; Initial value: 8.4 + double var_chaste_interface__intracellular_ion_concentrations__K_i = rY[17]; + // Units: millimolar; Initial value: 100.0 + double var_chaste_interface__cleft_space_ion_concentrations__K_c = rY[22]; + // Units: millimolar; Initial value: 5.0 + + const double var_Ca_independent_transient_outward_K_current__g_to = 0.050001999999999998; // nanoS + const double var_L_type_Ca_channel__E_Ca_app = 50; // millivolt + const double var_Na_Ca_ion_exchanger_current__d_NaCa = 0.00029999999999999997; // per_millimolar_4 + const double var_Na_Ca_ion_exchanger_current__gamma = 0.45000000000000001; // dimensionless + const double var_T_type_Ca_channel__E_Ca_T = 38; // millivolt + const double var_T_type_Ca_channel__g_Ca_T = 0.0060000000000000001; // nanoS + const double var_background_currents__g_B_Ca = 3.1000000000000001e-5; // nanoS + const double var_background_currents__g_B_Na = 6.3999999999999997e-5; // nanoS + const double var_environment__CT = 1; // dimensionless + const double var_environment__PM = 0; // dimensionless + const double var_inward_rectifier__KmK1 = 0.58999999999999997; // millimolar + const double var_inward_rectifier__shiftK1 = -3.6000000000000001; // millivolt + const double var_inward_rectifier__steepK1 = 1.393; // dimensionless + const double var_membrane__Cm_converted = 0.001 * mParameters[4]; // uF + const double var_membrane__F = 96487; // coulomb_per_mole + const double var_membrane__R = 8314; // millijoule_per_mole_kelvin + const double var_membrane__T = 308; // kelvin + const double var_Ca_independent_transient_outward_K_current__E_K = var_membrane__R * var_membrane__T * log(var_chaste_interface__cleft_space_ion_concentrations__K_c / var_chaste_interface__intracellular_ion_concentrations__K_i) / var_membrane__F; // millivolt + const double var_background_currents__E_Ca = 0.5 * var_membrane__R * var_membrane__T * log(mParameters[1] / var_chaste_interface__intracellular_ion_concentrations__Ca_i) / var_membrane__F; // millivolt + const double var_Ca_independent_transient_outward_K_current__i_sus = (((var_environment__CT == 1) && (var_environment__PM == 0)) ? (0.098000000000000004 + 0.0014 * var_chaste_interface__membrane__V) : (((var_environment__PM == 1) && (var_environment__CT == 0)) ? (0.16799999999999998 + 0.0023999999999999998 * var_chaste_interface__membrane__V) : (0.070000000000000007 + 0.001 * var_chaste_interface__membrane__V))); // picoA + const double var_Ca_independent_transient_outward_K_current__i_to = (((var_environment__CT == 1) && (var_environment__PM == 0)) ? (0.20000000000000001 * (0.40000000000000002 + 0.59999999999999998 * pow(var_chaste_interface__Ca_independent_transient_outward_K_current_s3_gate__s3, 6)) * (-var_Ca_independent_transient_outward_K_current__E_K + var_chaste_interface__membrane__V) * (0.58999999999999997 * pow(var_chaste_interface__Ca_independent_transient_outward_K_current_s1_gate__s1, 3) + 0.40999999999999998 * pow(var_chaste_interface__Ca_independent_transient_outward_K_current_s2_gate__s2, 3)) * var_Ca_independent_transient_outward_K_current__g_to * var_chaste_interface__Ca_independent_transient_outward_K_current_r_gate__r) : (((var_environment__PM == 1) && (var_environment__CT == 0)) ? (0.34999999999999998 * (0.40000000000000002 + 0.59999999999999998 * pow(var_chaste_interface__Ca_independent_transient_outward_K_current_s3_gate__s3, 6)) * (-var_Ca_independent_transient_outward_K_current__E_K + var_chaste_interface__membrane__V) * (0.58999999999999997 * pow(var_chaste_interface__Ca_independent_transient_outward_K_current_s1_gate__s1, 3) + 0.40999999999999998 * pow(var_chaste_interface__Ca_independent_transient_outward_K_current_s2_gate__s2, 3)) * var_Ca_independent_transient_outward_K_current__g_to * var_chaste_interface__Ca_independent_transient_outward_K_current_r_gate__r) : ((0.40000000000000002 + 0.59999999999999998 * pow(var_chaste_interface__Ca_independent_transient_outward_K_current_s3_gate__s3, 6)) * (-var_Ca_independent_transient_outward_K_current__E_K + var_chaste_interface__membrane__V) * (0.58999999999999997 * pow(var_chaste_interface__Ca_independent_transient_outward_K_current_s1_gate__s1, 3) + 0.40999999999999998 * pow(var_chaste_interface__Ca_independent_transient_outward_K_current_s2_gate__s2, 3)) * var_Ca_independent_transient_outward_K_current__g_to * var_chaste_interface__Ca_independent_transient_outward_K_current_r_gate__r))); // picoA + const double var_L_type_Ca_channel__d_prime = 1 / (1 + exp(1.9166666666666667 - 0.083333333333333329 * var_chaste_interface__membrane__V)); // dimensionless + const double var_L_type_Ca_channel__i_Ca_L = (((var_environment__CT == 1) && (var_environment__PM == 0)) ? (1.8 * (-var_L_type_Ca_channel__E_Ca_app + var_chaste_interface__membrane__V) * (var_chaste_interface__L_type_Ca_channel_d_L_gate__d_L * var_chaste_interface__L_type_Ca_channel_f_L_gate__f_L + var_L_type_Ca_channel__d_prime) * mParameters[3]) : (((var_environment__PM == 1) && (var_environment__CT == 0)) ? (2.1000000000000001 * (-var_L_type_Ca_channel__E_Ca_app + var_chaste_interface__membrane__V) * (var_chaste_interface__L_type_Ca_channel_d_L_gate__d_L * var_chaste_interface__L_type_Ca_channel_f_L_gate__f_L + var_L_type_Ca_channel__d_prime) * mParameters[3]) : ((-var_L_type_Ca_channel__E_Ca_app + var_chaste_interface__membrane__V) * (var_chaste_interface__L_type_Ca_channel_d_L_gate__d_L * var_chaste_interface__L_type_Ca_channel_f_L_gate__f_L + var_L_type_Ca_channel__d_prime) * mParameters[3]))); // picoA + const double var_L_type_Ca_channel__i_Ca_L_converted = 9.9999999999999995e-7 * HeartConfig::Instance()->GetCapacitance() * var_L_type_Ca_channel__i_Ca_L / var_membrane__Cm_converted; // uA_per_cm2 + const double var_Na_Ca_ion_exchanger_current__i_NaCa = (pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, 3) * mParameters[1] * exp(var_Na_Ca_ion_exchanger_current__gamma * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T)) - pow(mParameters[2], 3) * var_chaste_interface__intracellular_ion_concentrations__Ca_i * exp((-1 + var_Na_Ca_ion_exchanger_current__gamma) * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * mParameters[9] / (1 + (pow(mParameters[2], 3) * var_chaste_interface__intracellular_ion_concentrations__Ca_i + pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, 3) * mParameters[1]) * var_Na_Ca_ion_exchanger_current__d_NaCa); // picoA + const double var_Na_Ca_ion_exchanger_current__i_NaCa_converted = 9.9999999999999995e-7 * HeartConfig::Instance()->GetCapacitance() * var_Na_Ca_ion_exchanger_current__i_NaCa / var_membrane__Cm_converted; // uA_per_cm2 + const double var_T_type_Ca_channel__i_Ca_T = (-var_T_type_Ca_channel__E_Ca_T + var_chaste_interface__membrane__V) * var_T_type_Ca_channel__g_Ca_T * var_chaste_interface__T_type_Ca_channel_d_T_gate__d_T * var_chaste_interface__T_type_Ca_channel_f_T_gate__f_T; // picoA + const double var_background_currents__i_B_Ca = (((var_environment__CT == 1) && (var_environment__PM == 0)) ? (2.0000000000000002e-5 * var_chaste_interface__membrane__V - 2.0000000000000002e-5 * var_background_currents__E_Ca) : (((var_environment__PM == 1) && (var_environment__CT == 0)) ? (3.0000000000000001e-5 * var_chaste_interface__membrane__V - 3.0000000000000001e-5 * var_background_currents__E_Ca) : ((-var_background_currents__E_Ca + var_chaste_interface__membrane__V) * var_background_currents__g_B_Ca))); // picoA + const double var_delayed_rectifier_K_current__i_Kr = (-var_Ca_independent_transient_outward_K_current__E_K + var_chaste_interface__membrane__V) * mParameters[7] * var_chaste_interface__delayed_rectifier_K_current_pa_gate__p_a * var_chaste_interface__delayed_rectifier_K_current_pi_gate__p_i; // picoA + const double var_delayed_rectifier_K_current__i_Kr_converted = 9.9999999999999995e-7 * HeartConfig::Instance()->GetCapacitance() * var_delayed_rectifier_K_current__i_Kr / var_membrane__Cm_converted; // uA_per_cm2 + const double var_delayed_rectifier_K_current__i_Ks = (-var_Ca_independent_transient_outward_K_current__E_K + var_chaste_interface__membrane__V) * mParameters[8] * var_chaste_interface__delayed_rectifier_K_current_z_gate__z; // picoA + const double var_delayed_rectifier_K_current__i_Ks_converted = 9.9999999999999995e-7 * HeartConfig::Instance()->GetCapacitance() * var_delayed_rectifier_K_current__i_Ks / var_membrane__Cm_converted; // uA_per_cm2 + const double var_inward_rectifier__i_K1 = (((var_environment__CT == 1) && (var_environment__PM == 0)) ? (2 * pow(var_chaste_interface__cleft_space_ion_concentrations__K_c, 3) * (-var_Ca_independent_transient_outward_K_current__E_K + var_chaste_interface__membrane__V) * mParameters[6] / ((1 + exp((-var_Ca_independent_transient_outward_K_current__E_K - var_inward_rectifier__shiftK1 + var_chaste_interface__membrane__V) * var_inward_rectifier__steepK1 * var_membrane__F / (var_membrane__R * var_membrane__T))) * pow((var_chaste_interface__cleft_space_ion_concentrations__K_c + var_inward_rectifier__KmK1), 3))) : (((var_environment__PM == 1) && (var_environment__CT == 0)) ? (2.5 * pow(var_chaste_interface__cleft_space_ion_concentrations__K_c, 3) * (-var_Ca_independent_transient_outward_K_current__E_K + var_chaste_interface__membrane__V) * mParameters[6] / ((1 + exp((-var_Ca_independent_transient_outward_K_current__E_K - var_inward_rectifier__shiftK1 + var_chaste_interface__membrane__V) * var_inward_rectifier__steepK1 * var_membrane__F / (var_membrane__R * var_membrane__T))) * pow((var_chaste_interface__cleft_space_ion_concentrations__K_c + var_inward_rectifier__KmK1), 3))) : (pow(var_chaste_interface__cleft_space_ion_concentrations__K_c, 3) * (-var_Ca_independent_transient_outward_K_current__E_K + var_chaste_interface__membrane__V) * mParameters[6] / ((1 + exp((-var_Ca_independent_transient_outward_K_current__E_K - var_inward_rectifier__shiftK1 + var_chaste_interface__membrane__V) * var_inward_rectifier__steepK1 * var_membrane__F / (var_membrane__R * var_membrane__T))) * pow((var_chaste_interface__cleft_space_ion_concentrations__K_c + var_inward_rectifier__KmK1), 3))))); // picoA + const double var_inward_rectifier__i_K1_converted = 9.9999999999999995e-7 * HeartConfig::Instance()->GetCapacitance() * var_inward_rectifier__i_K1 / var_membrane__Cm_converted; // uA_per_cm2 + const double var_sarcolemmal_calcium_pump_current__i_CaP_max = 0.0095090000000000001; // picoA + const double var_sarcolemmal_calcium_pump_current__k_CaP = 0.00020000000000000001; // millimolar + const double var_sarcolemmal_calcium_pump_current__i_CaP = var_chaste_interface__intracellular_ion_concentrations__Ca_i * var_sarcolemmal_calcium_pump_current__i_CaP_max / (var_chaste_interface__intracellular_ion_concentrations__Ca_i + var_sarcolemmal_calcium_pump_current__k_CaP); // picoA + const double var_sodium_current__E_Na = var_membrane__R * var_membrane__T * log(mParameters[2] / var_chaste_interface__intracellular_ion_concentrations__Na_i) / var_membrane__F; // millivolt + const double var_background_currents__i_B_Na = (((var_environment__CT == 1) && (var_environment__PM == 0)) ? (2.0000000000000002e-5 * var_chaste_interface__membrane__V - 2.0000000000000002e-5 * var_sodium_current__E_Na) : (((var_environment__PM == 1) && (var_environment__CT == 0)) ? (3.0000000000000001e-5 * var_chaste_interface__membrane__V - 3.0000000000000001e-5 * var_sodium_current__E_Na) : ((-var_sodium_current__E_Na + var_chaste_interface__membrane__V) * var_background_currents__g_B_Na))); // picoA + const double var_sodium_current__i_Na = (((var_chaste_interface__membrane__V >= -2.6539450910485349e-6) && (var_chaste_interface__membrane__V <= 2.6539450910485349e-6)) ? (188398.77346612973 * (2.6539450910485349e-6 + var_chaste_interface__membrane__V) * (0.0096486999999999996 * pow(var_chaste_interface__sodium_current_m_gate__m, 3) * (-1 + exp(9.9999999999999995e-8 - log(mParameters[2] / var_chaste_interface__intracellular_ion_concentrations__Na_i))) * (0.36499999999999999 * var_chaste_interface__sodium_current_h2_gate__h2 + 0.63500000000000001 * var_chaste_interface__sodium_current_h1_gate__h1) * mParameters[2] * mParameters[5] / (-1 + exp(9.9999999999999995e-8)) + 0.0096486999999999996 * pow(var_chaste_interface__sodium_current_m_gate__m, 3) * (-1 + exp(-9.9999999999999995e-8 - log(mParameters[2] / var_chaste_interface__intracellular_ion_concentrations__Na_i))) * (0.36499999999999999 * var_chaste_interface__sodium_current_h2_gate__h2 + 0.63500000000000001 * var_chaste_interface__sodium_current_h1_gate__h1) * mParameters[2] * mParameters[5] / (-1 + exp(-9.9999999999999995e-8))) - 0.0096486999999999996 * pow(var_chaste_interface__sodium_current_m_gate__m, 3) * (-1 + exp(-9.9999999999999995e-8 - log(mParameters[2] / var_chaste_interface__intracellular_ion_concentrations__Na_i))) * (0.36499999999999999 * var_chaste_interface__sodium_current_h2_gate__h2 + 0.63500000000000001 * var_chaste_interface__sodium_current_h1_gate__h1) * mParameters[2] * mParameters[5] / (-1 + exp(-9.9999999999999995e-8))) : (3635.606491085292 * pow(var_chaste_interface__sodium_current_m_gate__m, 3) * (-1 + exp(0.037679754693225945 * var_chaste_interface__membrane__V - log(mParameters[2] / var_chaste_interface__intracellular_ion_concentrations__Na_i))) * (0.36499999999999999 * var_chaste_interface__sodium_current_h2_gate__h2 + 0.63500000000000001 * var_chaste_interface__sodium_current_h1_gate__h1) * mParameters[2] * var_chaste_interface__membrane__V * mParameters[5] / (-1 + exp(0.037679754693225945 * var_chaste_interface__membrane__V)))); // picoA + const double var_sodium_current__i_Na_converted = 9.9999999999999995e-7 * HeartConfig::Instance()->GetCapacitance() * var_sodium_current__i_Na / var_membrane__Cm_converted; // uA_per_cm2 + const double var_sodium_potassium_pump__i_NaK_max = 0.064409999999999995; // picoA + const double var_sodium_potassium_pump__k_NaK_K = 1; // millimolar + const double var_sodium_potassium_pump__k_NaK_Na = 11; // millimolar + const double var_sodium_potassium_pump__i_p = 1.6000000000000001 * pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, 1.5) * var_chaste_interface__cleft_space_ion_concentrations__K_c * var_sodium_potassium_pump__i_NaK_max / ((1.5 + exp(-1.5 - 0.025000000000000001 * var_chaste_interface__membrane__V)) * (pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, 1.5) + pow(var_sodium_potassium_pump__k_NaK_Na, 1.5)) * (var_chaste_interface__cleft_space_ion_concentrations__K_c + var_sodium_potassium_pump__k_NaK_K)); // picoA + const double var_chaste_interface__i_ionic = ((var_L_type_Ca_channel__i_Ca_L_converted + var_Na_Ca_ion_exchanger_current__i_NaCa_converted + var_delayed_rectifier_K_current__i_Kr_converted + var_delayed_rectifier_K_current__i_Ks_converted + var_inward_rectifier__i_K1_converted + var_sodium_current__i_Na_converted) * var_membrane__Cm_converted + 9.9999999999999995e-7 * HeartConfig::Instance()->GetCapacitance() * var_Ca_independent_transient_outward_K_current__i_sus + 9.9999999999999995e-7 * HeartConfig::Instance()->GetCapacitance() * var_Ca_independent_transient_outward_K_current__i_to + 9.9999999999999995e-7 * HeartConfig::Instance()->GetCapacitance() * var_T_type_Ca_channel__i_Ca_T + 9.9999999999999995e-7 * HeartConfig::Instance()->GetCapacitance() * var_background_currents__i_B_Ca + 9.9999999999999995e-7 * HeartConfig::Instance()->GetCapacitance() * var_background_currents__i_B_Na + 9.9999999999999995e-7 * HeartConfig::Instance()->GetCapacitance() * var_sarcolemmal_calcium_pump_current__i_CaP + 9.9999999999999995e-7 * HeartConfig::Instance()->GetCapacitance() * var_sodium_potassium_pump__i_p) / var_membrane__Cm_converted; // uA_per_cm2 + + const double i_ionic = var_chaste_interface__i_ionic; + EXCEPT_IF_NOT(!std::isnan(i_ionic)); + return i_ionic; + } + + void Cellaslanidi_atrial_model_2009FromCellMLBackwardEuler::ComputeResidual(double var_chaste_interface__environment__time_converted, const double rCurrentGuess[14], double rResidual[14]) + { + std::vector& rY = rGetStateVariables(); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -80.0 + double var_chaste_interface__sodium_current_m_gate__m = rY[2]; + // Units: dimensionless; Initial value: 0.01309 + double var_chaste_interface__sodium_current_h1_gate__h1 = rY[3]; + // Units: dimensionless; Initial value: 0.706 + double var_chaste_interface__sodium_current_h2_gate__h2 = rY[4]; + // Units: dimensionless; Initial value: 0.61493 + double var_chaste_interface__L_type_Ca_channel_d_L_gate__d_L = rY[5]; + // Units: dimensionless; Initial value: 3e-05 + double var_chaste_interface__L_type_Ca_channel_f_L_gate__f_L = rY[6]; + // Units: dimensionless; Initial value: 0.99981 + double var_chaste_interface__T_type_Ca_channel_d_T_gate__d_T = rY[7]; + // Units: dimensionless; Initial value: 0.00046 + double var_chaste_interface__T_type_Ca_channel_f_T_gate__f_T = rY[8]; + // Units: dimensionless; Initial value: 0.30752 + double var_chaste_interface__Ca_independent_transient_outward_K_current_r_gate__r = rY[9]; + // Units: dimensionless; Initial value: 6e-05 + double var_chaste_interface__Ca_independent_transient_outward_K_current_s1_gate__s1 = rY[10]; + // Units: dimensionless; Initial value: 0.5753 + double var_chaste_interface__Ca_independent_transient_outward_K_current_s2_gate__s2 = rY[11]; + // Units: dimensionless; Initial value: 0.39871 + double var_chaste_interface__Ca_independent_transient_outward_K_current_s3_gate__s3 = rY[12]; + // Units: dimensionless; Initial value: 0.57363 + double var_chaste_interface__delayed_rectifier_K_current_z_gate__z = rY[13]; + // Units: dimensionless; Initial value: 0.02032 + double var_chaste_interface__delayed_rectifier_K_current_pa_gate__p_a = rY[14]; + // Units: dimensionless; Initial value: 0.00016 + double var_chaste_interface__delayed_rectifier_K_current_pi_gate__p_i = rY[15]; + // Units: dimensionless; Initial value: 0.76898 + + //output_nonlinear_state_assignments + double var_chaste_interface__Ca_handling_by_the_SR__Ca_rel = rCurrentGuess[0]; + double var_chaste_interface__Ca_handling_by_the_SR__Ca_up = rCurrentGuess[1]; + double var_chaste_interface__Ca_handling_by_the_SR__F1 = rCurrentGuess[2]; + double var_chaste_interface__Ca_handling_by_the_SR__F2 = rCurrentGuess[3]; + double var_chaste_interface__Ca_handling_by_the_SR__F3 = rCurrentGuess[4]; + double var_chaste_interface__Ca_handling_by_the_SR__O_Calse = rCurrentGuess[5]; + double var_chaste_interface__cleft_space_ion_concentrations__K_c = rCurrentGuess[6]; + double var_chaste_interface__intracellular_Ca_buffering__O_C = rCurrentGuess[7]; + double var_chaste_interface__intracellular_Ca_buffering__O_TC = rCurrentGuess[8]; + double var_chaste_interface__intracellular_Ca_buffering__O_TMgC = rCurrentGuess[9]; + double var_chaste_interface__intracellular_Ca_buffering__O_TMgMg = rCurrentGuess[10]; + double var_chaste_interface__intracellular_ion_concentrations__Ca_i = rCurrentGuess[11]; + double var_chaste_interface__intracellular_ion_concentrations__K_i = rCurrentGuess[12]; + double var_chaste_interface__intracellular_ion_concentrations__Na_i = rCurrentGuess[13]; + + //output_equations + const double var_Ca_handling_by_the_SR__I_up_max = 2.7999999999999998; // picoA + const double var_Ca_handling_by_the_SR__O_Calse_orig_deriv = -400 * var_chaste_interface__Ca_handling_by_the_SR__O_Calse + 480 * (1 - var_chaste_interface__Ca_handling_by_the_SR__O_Calse) * var_chaste_interface__Ca_handling_by_the_SR__Ca_rel; // 1 / second + const double var_Ca_handling_by_the_SR__Vol_rel = 4.3999999999999997e-8; // nanolitre + const double var_Ca_handling_by_the_SR__Vol_up = 3.9690000000000001e-7; // nanolitre + const double var_Ca_handling_by_the_SR__k_F3 = 0.81499999999999995; // per_second + const double var_Ca_handling_by_the_SR__k_cyca = 0.00029999999999999997; // millimolar + const double var_Ca_handling_by_the_SR__k_rel = 0.00029999999999999997; // millimolar + const double var_Ca_handling_by_the_SR__k_srca = 0.5; // millimolar + const double var_Ca_handling_by_the_SR__k_xcs = 0.40000000000000002; // dimensionless + const double var_Ca_handling_by_the_SR__tau_tr = 0.01; // second + const double var_Ca_independent_transient_outward_K_current__g_to = 0.050001999999999998; // nanoS + const double d_dt_chaste_interface_var_Ca_handling_by_the_SR__O_Calse = 0.001 * var_Ca_handling_by_the_SR__O_Calse_orig_deriv; // 1 / millisecond + const double var_L_type_Ca_channel__E_Ca_app = 50; // millivolt + const double var_Na_Ca_ion_exchanger_current__d_NaCa = 0.00029999999999999997; // per_millimolar_4 + const double var_Na_Ca_ion_exchanger_current__gamma = 0.45000000000000001; // dimensionless + const double var_T_type_Ca_channel__E_Ca_T = 38; // millivolt + const double var_T_type_Ca_channel__g_Ca_T = 0.0060000000000000001; // nanoS + const double var_background_currents__g_B_Ca = 3.1000000000000001e-5; // nanoS + const double var_background_currents__g_B_Na = 6.3999999999999997e-5; // nanoS + const double var_cleft_space_ion_concentrations__Vol_c = 2.5000000000000002e-6; // nanolitre + const double var_environment__CT = 1; // dimensionless + const double var_environment__PM = 0; // dimensionless + const double var_intracellular_Ca_buffering__Mg_i = 2.5; // millimolar + const double var_intracellular_Ca_buffering__O_TMgMg_orig_deriv = -666 * var_chaste_interface__intracellular_Ca_buffering__O_TMgMg + 2000 * (1 - var_chaste_interface__intracellular_Ca_buffering__O_TMgC - var_chaste_interface__intracellular_Ca_buffering__O_TMgMg) * var_intracellular_Ca_buffering__Mg_i; // 1 / second + const double d_dt_chaste_interface_var_intracellular_Ca_buffering__O_TMgMg = 0.001 * var_intracellular_Ca_buffering__O_TMgMg_orig_deriv; // 1 / millisecond + const double var_Ca_handling_by_the_SR__i_rel = pow(var_chaste_interface__Ca_handling_by_the_SR__F2, 2) * (-var_chaste_interface__intracellular_ion_concentrations__Ca_i + var_chaste_interface__Ca_handling_by_the_SR__Ca_rel) * mParameters[0] / pow((0.25 + var_chaste_interface__Ca_handling_by_the_SR__F2), 2); // picoA + const double var_Ca_handling_by_the_SR__i_up = (var_chaste_interface__intracellular_ion_concentrations__Ca_i / var_Ca_handling_by_the_SR__k_cyca - pow(var_Ca_handling_by_the_SR__k_xcs, 2) * var_chaste_interface__Ca_handling_by_the_SR__Ca_up / var_Ca_handling_by_the_SR__k_srca) * var_Ca_handling_by_the_SR__I_up_max / ((var_Ca_handling_by_the_SR__k_cyca + var_chaste_interface__intracellular_ion_concentrations__Ca_i) / var_Ca_handling_by_the_SR__k_cyca + (var_chaste_interface__Ca_handling_by_the_SR__Ca_up + var_Ca_handling_by_the_SR__k_srca) * var_Ca_handling_by_the_SR__k_xcs / var_Ca_handling_by_the_SR__k_srca); // picoA + const double var_Ca_handling_by_the_SR__r_inact = 33.960000000000001 + 339.60000000000002 * pow(var_chaste_interface__intracellular_ion_concentrations__Ca_i, 4) / pow((var_Ca_handling_by_the_SR__k_rel + var_chaste_interface__intracellular_ion_concentrations__Ca_i), 4); // per_second + const double var_Ca_handling_by_the_SR__F3_orig_deriv = var_chaste_interface__Ca_handling_by_the_SR__F2 * var_Ca_handling_by_the_SR__r_inact - var_chaste_interface__Ca_handling_by_the_SR__F3 * var_Ca_handling_by_the_SR__k_F3; // 1 / second + const double d_dt_chaste_interface_var_Ca_handling_by_the_SR__F3 = 0.001 * var_Ca_handling_by_the_SR__F3_orig_deriv; // 1 / millisecond + const double var_intracellular_Ca_buffering__dOCdt = -476 * var_chaste_interface__intracellular_Ca_buffering__O_C + 200000 * (1 - var_chaste_interface__intracellular_Ca_buffering__O_C) * var_chaste_interface__intracellular_ion_concentrations__Ca_i; // per_second + const double var_intracellular_Ca_buffering__O_C_orig_deriv = var_intracellular_Ca_buffering__dOCdt; // 1 / second + const double d_dt_chaste_interface_var_intracellular_Ca_buffering__O_C = 0.001 * var_intracellular_Ca_buffering__O_C_orig_deriv; // 1 / millisecond + const double var_intracellular_Ca_buffering__dOTCdt = -392 * var_chaste_interface__intracellular_Ca_buffering__O_TC + 78400 * (1 - var_chaste_interface__intracellular_Ca_buffering__O_TC) * var_chaste_interface__intracellular_ion_concentrations__Ca_i; // per_second + const double var_intracellular_Ca_buffering__O_TC_orig_deriv = var_intracellular_Ca_buffering__dOTCdt; // 1 / second + const double d_dt_chaste_interface_var_intracellular_Ca_buffering__O_TC = 0.001 * var_intracellular_Ca_buffering__O_TC_orig_deriv; // 1 / millisecond + const double var_intracellular_Ca_buffering__dOTMgCdt = -6.5999999999999996 * var_chaste_interface__intracellular_Ca_buffering__O_TMgC + 200000 * (1 - var_chaste_interface__intracellular_Ca_buffering__O_TMgC - var_chaste_interface__intracellular_Ca_buffering__O_TMgMg) * var_chaste_interface__intracellular_ion_concentrations__Ca_i; // per_second + const double var_intracellular_Ca_buffering__O_TMgC_orig_deriv = var_intracellular_Ca_buffering__dOTMgCdt; // 1 / second + const double d_dt_chaste_interface_var_intracellular_Ca_buffering__O_TMgC = 0.001 * var_intracellular_Ca_buffering__O_TMgC_orig_deriv; // 1 / millisecond + const double var_intracellular_ion_concentrations__Vol_Ca = 5.8839999999999999e-6; // nanolitre + const double var_intracellular_ion_concentrations__Vol_i = 1.26e-5; // nanolitre + const double var_inward_rectifier__KmK1 = 0.58999999999999997; // millimolar + const double var_inward_rectifier__shiftK1 = -3.6000000000000001; // millivolt + const double var_inward_rectifier__steepK1 = 1.393; // dimensionless + const double var_membrane__F = 96487; // coulomb_per_mole + const double var_Ca_handling_by_the_SR__i_tr = 2 * (-var_chaste_interface__Ca_handling_by_the_SR__Ca_rel + var_chaste_interface__Ca_handling_by_the_SR__Ca_up) * var_Ca_handling_by_the_SR__Vol_rel * var_membrane__F / var_Ca_handling_by_the_SR__tau_tr; // picoA + const double var_Ca_handling_by_the_SR__Ca_rel_orig_deriv = -31 * var_Ca_handling_by_the_SR__O_Calse_orig_deriv + 0.5 * (-var_Ca_handling_by_the_SR__i_rel + var_Ca_handling_by_the_SR__i_tr) / (var_Ca_handling_by_the_SR__Vol_rel * var_membrane__F); // millimolar / second + const double var_Ca_handling_by_the_SR__Ca_up_orig_deriv = 0.5 * (-var_Ca_handling_by_the_SR__i_tr + var_Ca_handling_by_the_SR__i_up) / (var_Ca_handling_by_the_SR__Vol_up * var_membrane__F); // millimolar / second + const double d_dt_chaste_interface_var_Ca_handling_by_the_SR__Ca_rel = 0.001 * var_Ca_handling_by_the_SR__Ca_rel_orig_deriv; // millimolar / millisecond + const double d_dt_chaste_interface_var_Ca_handling_by_the_SR__Ca_up = 0.001 * var_Ca_handling_by_the_SR__Ca_up_orig_deriv; // millimolar / millisecond + const double var_membrane__R = 8314; // millijoule_per_mole_kelvin + const double var_membrane__T = 308; // kelvin + const double var_Ca_independent_transient_outward_K_current__E_K = var_membrane__R * var_membrane__T * log(var_chaste_interface__cleft_space_ion_concentrations__K_c / var_chaste_interface__intracellular_ion_concentrations__K_i) / var_membrane__F; // millivolt + const double var_background_currents__E_Ca = 0.5 * var_membrane__R * var_membrane__T * log(mParameters[1] / var_chaste_interface__intracellular_ion_concentrations__Ca_i) / var_membrane__F; // millivolt + const double var_Ca_handling_by_the_SR__r_act = 240 * exp(-1.6000000000000001 + 0.080000000000000002 * var_chaste_interface__membrane__V) + 203.80000000000001 * pow(var_chaste_interface__intracellular_ion_concentrations__Ca_i, 4) / pow((var_Ca_handling_by_the_SR__k_rel + var_chaste_interface__intracellular_ion_concentrations__Ca_i), 4); // per_second + const double var_Ca_handling_by_the_SR__F1_orig_deriv = var_chaste_interface__Ca_handling_by_the_SR__F3 * var_Ca_handling_by_the_SR__k_F3 - var_chaste_interface__Ca_handling_by_the_SR__F1 * var_Ca_handling_by_the_SR__r_act; // 1 / second + const double var_Ca_handling_by_the_SR__F2_orig_deriv = var_chaste_interface__Ca_handling_by_the_SR__F1 * var_Ca_handling_by_the_SR__r_act - var_chaste_interface__Ca_handling_by_the_SR__F2 * var_Ca_handling_by_the_SR__r_inact; // 1 / second + const double var_Ca_independent_transient_outward_K_current__i_sus = (((var_environment__CT == 1) && (var_environment__PM == 0)) ? (0.098000000000000004 + 0.0014 * var_chaste_interface__membrane__V) : (((var_environment__PM == 1) && (var_environment__CT == 0)) ? (0.16799999999999998 + 0.0023999999999999998 * var_chaste_interface__membrane__V) : (0.070000000000000007 + 0.001 * var_chaste_interface__membrane__V))); // picoA + const double var_Ca_independent_transient_outward_K_current__i_to = (((var_environment__CT == 1) && (var_environment__PM == 0)) ? (0.20000000000000001 * (0.40000000000000002 + 0.59999999999999998 * pow(var_chaste_interface__Ca_independent_transient_outward_K_current_s3_gate__s3, 6)) * (-var_Ca_independent_transient_outward_K_current__E_K + var_chaste_interface__membrane__V) * (0.58999999999999997 * pow(var_chaste_interface__Ca_independent_transient_outward_K_current_s1_gate__s1, 3) + 0.40999999999999998 * pow(var_chaste_interface__Ca_independent_transient_outward_K_current_s2_gate__s2, 3)) * var_Ca_independent_transient_outward_K_current__g_to * var_chaste_interface__Ca_independent_transient_outward_K_current_r_gate__r) : (((var_environment__PM == 1) && (var_environment__CT == 0)) ? (0.34999999999999998 * (0.40000000000000002 + 0.59999999999999998 * pow(var_chaste_interface__Ca_independent_transient_outward_K_current_s3_gate__s3, 6)) * (-var_Ca_independent_transient_outward_K_current__E_K + var_chaste_interface__membrane__V) * (0.58999999999999997 * pow(var_chaste_interface__Ca_independent_transient_outward_K_current_s1_gate__s1, 3) + 0.40999999999999998 * pow(var_chaste_interface__Ca_independent_transient_outward_K_current_s2_gate__s2, 3)) * var_Ca_independent_transient_outward_K_current__g_to * var_chaste_interface__Ca_independent_transient_outward_K_current_r_gate__r) : ((0.40000000000000002 + 0.59999999999999998 * pow(var_chaste_interface__Ca_independent_transient_outward_K_current_s3_gate__s3, 6)) * (-var_Ca_independent_transient_outward_K_current__E_K + var_chaste_interface__membrane__V) * (0.58999999999999997 * pow(var_chaste_interface__Ca_independent_transient_outward_K_current_s1_gate__s1, 3) + 0.40999999999999998 * pow(var_chaste_interface__Ca_independent_transient_outward_K_current_s2_gate__s2, 3)) * var_Ca_independent_transient_outward_K_current__g_to * var_chaste_interface__Ca_independent_transient_outward_K_current_r_gate__r))); // picoA + const double d_dt_chaste_interface_var_Ca_handling_by_the_SR__F1 = 0.001 * var_Ca_handling_by_the_SR__F1_orig_deriv; // 1 / millisecond + const double d_dt_chaste_interface_var_Ca_handling_by_the_SR__F2 = 0.001 * var_Ca_handling_by_the_SR__F2_orig_deriv; // 1 / millisecond + const double var_L_type_Ca_channel__d_prime = 1 / (1 + exp(1.9166666666666667 - 0.083333333333333329 * var_chaste_interface__membrane__V)); // dimensionless + const double var_L_type_Ca_channel__i_Ca_L = (((var_environment__CT == 1) && (var_environment__PM == 0)) ? (1.8 * (-var_L_type_Ca_channel__E_Ca_app + var_chaste_interface__membrane__V) * (var_chaste_interface__L_type_Ca_channel_d_L_gate__d_L * var_chaste_interface__L_type_Ca_channel_f_L_gate__f_L + var_L_type_Ca_channel__d_prime) * mParameters[3]) : (((var_environment__PM == 1) && (var_environment__CT == 0)) ? (2.1000000000000001 * (-var_L_type_Ca_channel__E_Ca_app + var_chaste_interface__membrane__V) * (var_chaste_interface__L_type_Ca_channel_d_L_gate__d_L * var_chaste_interface__L_type_Ca_channel_f_L_gate__f_L + var_L_type_Ca_channel__d_prime) * mParameters[3]) : ((-var_L_type_Ca_channel__E_Ca_app + var_chaste_interface__membrane__V) * (var_chaste_interface__L_type_Ca_channel_d_L_gate__d_L * var_chaste_interface__L_type_Ca_channel_f_L_gate__f_L + var_L_type_Ca_channel__d_prime) * mParameters[3]))); // picoA + const double var_Na_Ca_ion_exchanger_current__i_NaCa = (pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, 3) * mParameters[1] * exp(var_Na_Ca_ion_exchanger_current__gamma * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T)) - pow(mParameters[2], 3) * var_chaste_interface__intracellular_ion_concentrations__Ca_i * exp((-1 + var_Na_Ca_ion_exchanger_current__gamma) * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * mParameters[9] / (1 + (pow(mParameters[2], 3) * var_chaste_interface__intracellular_ion_concentrations__Ca_i + pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, 3) * mParameters[1]) * var_Na_Ca_ion_exchanger_current__d_NaCa); // picoA + const double var_T_type_Ca_channel__i_Ca_T = (-var_T_type_Ca_channel__E_Ca_T + var_chaste_interface__membrane__V) * var_T_type_Ca_channel__g_Ca_T * var_chaste_interface__T_type_Ca_channel_d_T_gate__d_T * var_chaste_interface__T_type_Ca_channel_f_T_gate__f_T; // picoA + const double var_background_currents__i_B_Ca = (((var_environment__CT == 1) && (var_environment__PM == 0)) ? (2.0000000000000002e-5 * var_chaste_interface__membrane__V - 2.0000000000000002e-5 * var_background_currents__E_Ca) : (((var_environment__PM == 1) && (var_environment__CT == 0)) ? (3.0000000000000001e-5 * var_chaste_interface__membrane__V - 3.0000000000000001e-5 * var_background_currents__E_Ca) : ((-var_background_currents__E_Ca + var_chaste_interface__membrane__V) * var_background_currents__g_B_Ca))); // picoA + const double var_delayed_rectifier_K_current__i_Kr = (-var_Ca_independent_transient_outward_K_current__E_K + var_chaste_interface__membrane__V) * mParameters[7] * var_chaste_interface__delayed_rectifier_K_current_pa_gate__p_a * var_chaste_interface__delayed_rectifier_K_current_pi_gate__p_i; // picoA + const double var_delayed_rectifier_K_current__i_Ks = (-var_Ca_independent_transient_outward_K_current__E_K + var_chaste_interface__membrane__V) * mParameters[8] * var_chaste_interface__delayed_rectifier_K_current_z_gate__z; // picoA + const double var_inward_rectifier__i_K1 = (((var_environment__CT == 1) && (var_environment__PM == 0)) ? (2 * pow(var_chaste_interface__cleft_space_ion_concentrations__K_c, 3) * (-var_Ca_independent_transient_outward_K_current__E_K + var_chaste_interface__membrane__V) * mParameters[6] / ((1 + exp((-var_Ca_independent_transient_outward_K_current__E_K - var_inward_rectifier__shiftK1 + var_chaste_interface__membrane__V) * var_inward_rectifier__steepK1 * var_membrane__F / (var_membrane__R * var_membrane__T))) * pow((var_chaste_interface__cleft_space_ion_concentrations__K_c + var_inward_rectifier__KmK1), 3))) : (((var_environment__PM == 1) && (var_environment__CT == 0)) ? (2.5 * pow(var_chaste_interface__cleft_space_ion_concentrations__K_c, 3) * (-var_Ca_independent_transient_outward_K_current__E_K + var_chaste_interface__membrane__V) * mParameters[6] / ((1 + exp((-var_Ca_independent_transient_outward_K_current__E_K - var_inward_rectifier__shiftK1 + var_chaste_interface__membrane__V) * var_inward_rectifier__steepK1 * var_membrane__F / (var_membrane__R * var_membrane__T))) * pow((var_chaste_interface__cleft_space_ion_concentrations__K_c + var_inward_rectifier__KmK1), 3))) : (pow(var_chaste_interface__cleft_space_ion_concentrations__K_c, 3) * (-var_Ca_independent_transient_outward_K_current__E_K + var_chaste_interface__membrane__V) * mParameters[6] / ((1 + exp((-var_Ca_independent_transient_outward_K_current__E_K - var_inward_rectifier__shiftK1 + var_chaste_interface__membrane__V) * var_inward_rectifier__steepK1 * var_membrane__F / (var_membrane__R * var_membrane__T))) * pow((var_chaste_interface__cleft_space_ion_concentrations__K_c + var_inward_rectifier__KmK1), 3))))); // picoA + const double var_sarcolemmal_calcium_pump_current__i_CaP_max = 0.0095090000000000001; // picoA + const double var_sarcolemmal_calcium_pump_current__k_CaP = 0.00020000000000000001; // millimolar + const double var_sarcolemmal_calcium_pump_current__i_CaP = var_chaste_interface__intracellular_ion_concentrations__Ca_i * var_sarcolemmal_calcium_pump_current__i_CaP_max / (var_chaste_interface__intracellular_ion_concentrations__Ca_i + var_sarcolemmal_calcium_pump_current__k_CaP); // picoA + const double var_intracellular_ion_concentrations__Ca_i_orig_deriv = -0.044999999999999998 * var_intracellular_Ca_buffering__dOCdt - 0.080000000000000002 * var_intracellular_Ca_buffering__dOTCdt - 0.16 * var_intracellular_Ca_buffering__dOTMgCdt + 0.5 * (-var_Ca_handling_by_the_SR__i_up - var_L_type_Ca_channel__i_Ca_L - var_T_type_Ca_channel__i_Ca_T - var_background_currents__i_B_Ca - var_sarcolemmal_calcium_pump_current__i_CaP + 2 * var_Na_Ca_ion_exchanger_current__i_NaCa + var_Ca_handling_by_the_SR__i_rel) / (var_intracellular_ion_concentrations__Vol_Ca * var_membrane__F); // millimolar / second + const double d_dt_chaste_interface_var_intracellular_ion_concentrations__Ca_i = 0.001 * var_intracellular_ion_concentrations__Ca_i_orig_deriv; // millimolar / millisecond + const double var_sodium_current__E_Na = var_membrane__R * var_membrane__T * log(mParameters[2] / var_chaste_interface__intracellular_ion_concentrations__Na_i) / var_membrane__F; // millivolt + const double var_background_currents__i_B_Na = (((var_environment__CT == 1) && (var_environment__PM == 0)) ? (2.0000000000000002e-5 * var_chaste_interface__membrane__V - 2.0000000000000002e-5 * var_sodium_current__E_Na) : (((var_environment__PM == 1) && (var_environment__CT == 0)) ? (3.0000000000000001e-5 * var_chaste_interface__membrane__V - 3.0000000000000001e-5 * var_sodium_current__E_Na) : ((-var_sodium_current__E_Na + var_chaste_interface__membrane__V) * var_background_currents__g_B_Na))); // picoA + const double var_sodium_current__i_Na = (((var_chaste_interface__membrane__V >= -2.6539450910485349e-6) && (var_chaste_interface__membrane__V <= 2.6539450910485349e-6)) ? (188398.77346612973 * (2.6539450910485349e-6 + var_chaste_interface__membrane__V) * (0.0096486999999999996 * pow(var_chaste_interface__sodium_current_m_gate__m, 3) * (-1 + exp(9.9999999999999995e-8 - log(mParameters[2] / var_chaste_interface__intracellular_ion_concentrations__Na_i))) * (0.36499999999999999 * var_chaste_interface__sodium_current_h2_gate__h2 + 0.63500000000000001 * var_chaste_interface__sodium_current_h1_gate__h1) * mParameters[2] * mParameters[5] / (-1 + exp(9.9999999999999995e-8)) + 0.0096486999999999996 * pow(var_chaste_interface__sodium_current_m_gate__m, 3) * (-1 + exp(-9.9999999999999995e-8 - log(mParameters[2] / var_chaste_interface__intracellular_ion_concentrations__Na_i))) * (0.36499999999999999 * var_chaste_interface__sodium_current_h2_gate__h2 + 0.63500000000000001 * var_chaste_interface__sodium_current_h1_gate__h1) * mParameters[2] * mParameters[5] / (-1 + exp(-9.9999999999999995e-8))) - 0.0096486999999999996 * pow(var_chaste_interface__sodium_current_m_gate__m, 3) * (-1 + exp(-9.9999999999999995e-8 - log(mParameters[2] / var_chaste_interface__intracellular_ion_concentrations__Na_i))) * (0.36499999999999999 * var_chaste_interface__sodium_current_h2_gate__h2 + 0.63500000000000001 * var_chaste_interface__sodium_current_h1_gate__h1) * mParameters[2] * mParameters[5] / (-1 + exp(-9.9999999999999995e-8))) : (3635.606491085292 * pow(var_chaste_interface__sodium_current_m_gate__m, 3) * (-1 + exp(0.037679754693225945 * var_chaste_interface__membrane__V - log(mParameters[2] / var_chaste_interface__intracellular_ion_concentrations__Na_i))) * (0.36499999999999999 * var_chaste_interface__sodium_current_h2_gate__h2 + 0.63500000000000001 * var_chaste_interface__sodium_current_h1_gate__h1) * mParameters[2] * var_chaste_interface__membrane__V * mParameters[5] / (-1 + exp(0.037679754693225945 * var_chaste_interface__membrane__V)))); // picoA + const double var_sodium_potassium_pump__i_NaK_max = 0.064409999999999995; // picoA + const double var_sodium_potassium_pump__k_NaK_K = 1; // millimolar + const double var_sodium_potassium_pump__k_NaK_Na = 11; // millimolar + const double var_sodium_potassium_pump__i_p = 1.6000000000000001 * pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, 1.5) * var_chaste_interface__cleft_space_ion_concentrations__K_c * var_sodium_potassium_pump__i_NaK_max / ((1.5 + exp(-1.5 - 0.025000000000000001 * var_chaste_interface__membrane__V)) * (pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, 1.5) + pow(var_sodium_potassium_pump__k_NaK_Na, 1.5)) * (var_chaste_interface__cleft_space_ion_concentrations__K_c + var_sodium_potassium_pump__k_NaK_K)); // picoA + const double var_cleft_space_ion_concentrations__K_c_orig_deriv = (-2 * var_sodium_potassium_pump__i_p + var_Ca_independent_transient_outward_K_current__i_sus + var_Ca_independent_transient_outward_K_current__i_to + var_delayed_rectifier_K_current__i_Kr + var_delayed_rectifier_K_current__i_Ks + var_inward_rectifier__i_K1) / (var_cleft_space_ion_concentrations__Vol_c * var_membrane__F); // millimolar / second + const double d_dt_chaste_interface_var_cleft_space_ion_concentrations__K_c = 0.001 * var_cleft_space_ion_concentrations__K_c_orig_deriv; // millimolar / millisecond + const double var_intracellular_ion_concentrations__K_i_orig_deriv = (-var_Ca_independent_transient_outward_K_current__i_sus - var_Ca_independent_transient_outward_K_current__i_to - var_delayed_rectifier_K_current__i_Kr - var_delayed_rectifier_K_current__i_Ks - var_inward_rectifier__i_K1 + 2 * var_sodium_potassium_pump__i_p) / (var_intracellular_ion_concentrations__Vol_i * var_membrane__F); // millimolar / second + const double d_dt_chaste_interface_var_intracellular_ion_concentrations__K_i = 0.001 * var_intracellular_ion_concentrations__K_i_orig_deriv; // millimolar / millisecond + const double var_intracellular_ion_concentrations__Na_i_orig_deriv = (-var_background_currents__i_B_Na - var_sodium_current__i_Na - 3 * var_Na_Ca_ion_exchanger_current__i_NaCa - 3 * var_sodium_potassium_pump__i_p) / (var_intracellular_ion_concentrations__Vol_i * var_membrane__F); // millimolar / second + const double d_dt_chaste_interface_var_intracellular_ion_concentrations__Na_i = 0.001 * var_intracellular_ion_concentrations__Na_i_orig_deriv; // millimolar / millisecond + + rResidual[11] = rCurrentGuess[11] - rY[1] - mDt*d_dt_chaste_interface_var_intracellular_ion_concentrations__Ca_i; + rResidual[13] = rCurrentGuess[13] - rY[16] - mDt*d_dt_chaste_interface_var_intracellular_ion_concentrations__Na_i; + rResidual[12] = rCurrentGuess[12] - rY[17] - mDt*d_dt_chaste_interface_var_intracellular_ion_concentrations__K_i; + rResidual[7] = rCurrentGuess[7] - rY[18] - mDt*d_dt_chaste_interface_var_intracellular_Ca_buffering__O_C; + rResidual[8] = rCurrentGuess[8] - rY[19] - mDt*d_dt_chaste_interface_var_intracellular_Ca_buffering__O_TC; + rResidual[9] = rCurrentGuess[9] - rY[20] - mDt*d_dt_chaste_interface_var_intracellular_Ca_buffering__O_TMgC; + rResidual[10] = rCurrentGuess[10] - rY[21] - mDt*d_dt_chaste_interface_var_intracellular_Ca_buffering__O_TMgMg; + rResidual[6] = rCurrentGuess[6] - rY[22] - mDt*d_dt_chaste_interface_var_cleft_space_ion_concentrations__K_c; + rResidual[0] = rCurrentGuess[0] - rY[23] - mDt*d_dt_chaste_interface_var_Ca_handling_by_the_SR__Ca_rel; + rResidual[1] = rCurrentGuess[1] - rY[24] - mDt*d_dt_chaste_interface_var_Ca_handling_by_the_SR__Ca_up; + rResidual[5] = rCurrentGuess[5] - rY[25] - mDt*d_dt_chaste_interface_var_Ca_handling_by_the_SR__O_Calse; + rResidual[2] = rCurrentGuess[2] - rY[26] - mDt*d_dt_chaste_interface_var_Ca_handling_by_the_SR__F1; + rResidual[3] = rCurrentGuess[3] - rY[27] - mDt*d_dt_chaste_interface_var_Ca_handling_by_the_SR__F2; + rResidual[4] = rCurrentGuess[4] - rY[28] - mDt*d_dt_chaste_interface_var_Ca_handling_by_the_SR__F3; + } + + void Cellaslanidi_atrial_model_2009FromCellMLBackwardEuler::ComputeJacobian(double var_chaste_interface__environment__time_converted, const double rCurrentGuess[14], double rJacobian[14][14]) + { + std::vector& rY = rGetStateVariables(); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -80.0 + double var_chaste_interface__sodium_current_m_gate__m = rY[2]; + // Units: dimensionless; Initial value: 0.01309 + double var_chaste_interface__sodium_current_h1_gate__h1 = rY[3]; + // Units: dimensionless; Initial value: 0.706 + double var_chaste_interface__sodium_current_h2_gate__h2 = rY[4]; + // Units: dimensionless; Initial value: 0.61493 + double var_chaste_interface__Ca_independent_transient_outward_K_current_r_gate__r = rY[9]; + // Units: dimensionless; Initial value: 6e-05 + double var_chaste_interface__Ca_independent_transient_outward_K_current_s1_gate__s1 = rY[10]; + // Units: dimensionless; Initial value: 0.5753 + double var_chaste_interface__Ca_independent_transient_outward_K_current_s2_gate__s2 = rY[11]; + // Units: dimensionless; Initial value: 0.39871 + double var_chaste_interface__Ca_independent_transient_outward_K_current_s3_gate__s3 = rY[12]; + // Units: dimensionless; Initial value: 0.57363 + double var_chaste_interface__delayed_rectifier_K_current_z_gate__z = rY[13]; + // Units: dimensionless; Initial value: 0.02032 + double var_chaste_interface__delayed_rectifier_K_current_pa_gate__p_a = rY[14]; + // Units: dimensionless; Initial value: 0.00016 + double var_chaste_interface__delayed_rectifier_K_current_pi_gate__p_i = rY[15]; + // Units: dimensionless; Initial value: 0.76898 + + double var_chaste_interface__Ca_handling_by_the_SR__Ca_rel = rCurrentGuess[0]; + double var_chaste_interface__Ca_handling_by_the_SR__Ca_up = rCurrentGuess[1]; + double var_chaste_interface__Ca_handling_by_the_SR__F1 = rCurrentGuess[2]; + double var_chaste_interface__Ca_handling_by_the_SR__F2 = rCurrentGuess[3]; + double var_chaste_interface__Ca_handling_by_the_SR__O_Calse = rCurrentGuess[5]; + double var_chaste_interface__cleft_space_ion_concentrations__K_c = rCurrentGuess[6]; + double var_chaste_interface__intracellular_Ca_buffering__O_C = rCurrentGuess[7]; + double var_chaste_interface__intracellular_Ca_buffering__O_TC = rCurrentGuess[8]; + double var_chaste_interface__intracellular_Ca_buffering__O_TMgC = rCurrentGuess[9]; + double var_chaste_interface__intracellular_Ca_buffering__O_TMgMg = rCurrentGuess[10]; + double var_chaste_interface__intracellular_ion_concentrations__Ca_i = rCurrentGuess[11]; + double var_chaste_interface__intracellular_ion_concentrations__K_i = rCurrentGuess[12]; + double var_chaste_interface__intracellular_ion_concentrations__Na_i = rCurrentGuess[13]; + + const double var_x0 = 0.25 + var_chaste_interface__Ca_handling_by_the_SR__F2; + const double var_x1 = pow(var_x0, (-2)); + const double var_x2 = pow(var_chaste_interface__Ca_handling_by_the_SR__F2, 2) * mParameters[0]; + const double var_x3 = var_x1 * var_x2; + const double var_x4 = 0.11777375567316183 * var_x3; + const double var_x5 = -var_chaste_interface__intracellular_ion_concentrations__Ca_i + var_chaste_interface__Ca_handling_by_the_SR__Ca_rel; + const double var_x6 = 0.23554751134632365 * var_x5; + const double var_x7 = var_x2 / pow(var_x0, 3); + const double var_x8 = 1 / (1.3999999999999999 + 0.80000000000000004 * var_chaste_interface__Ca_handling_by_the_SR__Ca_up + 3333.3333333333335 * var_chaste_interface__intracellular_ion_concentrations__Ca_i); + const double var_x9 = pow((0.00041999999999999996 + 0.00023999999999999998 * var_chaste_interface__Ca_handling_by_the_SR__Ca_up + var_chaste_interface__intracellular_ion_concentrations__Ca_i), (-2)); + const double var_x10 = 3333.3333333333335 * var_chaste_interface__intracellular_ion_concentrations__Ca_i - 0.32000000000000006 * var_chaste_interface__Ca_handling_by_the_SR__Ca_up; + const double var_x11 = var_x10 * var_x9; + const double var_x12 = 0.00029999999999999997 + var_chaste_interface__intracellular_ion_concentrations__Ca_i; + const double var_x13 = pow(var_x12, (-4)); + const double var_x14 = pow(var_chaste_interface__intracellular_ion_concentrations__Ca_i, 4); + const double var_x15 = var_x13 * var_x14; + const double var_x16 = 0.20380000000000001 * var_x15 + 0.23999999999999999 * exp(-1.6000000000000001 + 0.080000000000000002 * var_chaste_interface__membrane__V); + const double var_x17 = var_x14 / pow(var_x12, 5); + const double var_x18 = var_x13 * pow(var_chaste_interface__intracellular_ion_concentrations__Ca_i, 3); + const double var_x19 = 0.81520000000000004 * var_x17 - 0.81520000000000004 * var_x18; + const double var_x20 = 0.033960000000000004 + 0.33960000000000001 * var_x15; + const double var_x21 = 1.3584000000000001 * var_x17 - 1.3584000000000001 * var_x18; + const double var_x22 = mParameters[8] * var_chaste_interface__delayed_rectifier_K_current_z_gate__z; + const double var_x23 = 1 / var_chaste_interface__cleft_space_ion_concentrations__K_c; + const double var_x24 = 0.11002290841454433 * var_x23; + const double var_x25 = pow(var_chaste_interface__Ca_independent_transient_outward_K_current_s3_gate__s3, 6); + const double var_x26 = 0.58999999999999997 * pow(var_chaste_interface__Ca_independent_transient_outward_K_current_s1_gate__s1, 3) + 0.40999999999999998 * pow(var_chaste_interface__Ca_independent_transient_outward_K_current_s2_gate__s2, 3); + const double var_x27 = 26.53945091048535 * var_x26 * var_chaste_interface__Ca_independent_transient_outward_K_current_r_gate__r; + const double var_x28 = var_x27 * (1.6583208100573134e-5 + 2.4874812150859699e-5 * var_x25); + const double var_x29 = pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, 1.5); + const double var_x30 = 1 / (36.4828726939094 + var_x29); + const double var_x31 = 1 + var_chaste_interface__cleft_space_ion_concentrations__K_c; + const double var_x32 = 1 / var_x31; + const double var_x33 = 1 / (1.5 + exp(-1.5 - 0.025000000000000001 * var_chaste_interface__membrane__V)); + const double var_x34 = var_x32 * var_x33; + const double var_x35 = var_x30 * var_x34; + const double var_x36 = var_x29 * var_x35; + const double var_x37 = mParameters[7] * var_chaste_interface__delayed_rectifier_K_current_pa_gate__p_a * var_chaste_interface__delayed_rectifier_K_current_pi_gate__p_i; + const double var_x38 = pow(var_chaste_interface__cleft_space_ion_concentrations__K_c, 2); + const double var_x39 = 0.58999999999999997 + var_chaste_interface__cleft_space_ion_concentrations__K_c; + const double var_x40 = pow(var_x39, (-3)); + const double var_x41 = 1 / var_chaste_interface__intracellular_ion_concentrations__K_i; + const double var_x42 = log(var_x41 * var_chaste_interface__cleft_space_ion_concentrations__K_c); + const double var_x43 = exp(0.18895643383558949 + 0.052487898287663745 * var_chaste_interface__membrane__V - 1.393 * var_x42); + const double var_x44 = 1 + var_x43; + const double var_x45 = 1 / var_x44; + const double var_x46 = var_x45 * mParameters[6]; + const double var_x47 = var_x40 * var_x46; + const double var_x48 = var_x38 * var_x47; + const double var_x49 = -26.53945091048535 * var_x42 + var_chaste_interface__membrane__V; + const double var_x50 = pow(var_chaste_interface__cleft_space_ion_concentrations__K_c, 3); + const double var_x51 = var_x46 * var_x50 / pow(var_x39, 4); + const double var_x52 = pow(var_x31, (-2)); + const double var_x53 = pow(var_x44, (-2)); + const double var_x54 = var_x22 * var_x41; + const double var_x55 = var_x37 * var_x41; + const double var_x56 = var_x41 * var_x50; + const double var_x57 = var_x47 * var_x56; + const double var_x58 = var_x40 * var_x43 * var_x49 * var_x53 * mParameters[6]; + const double var_x59 = var_x35 * sqrt(var_chaste_interface__intracellular_ion_concentrations__Na_i) * var_chaste_interface__cleft_space_ion_concentrations__K_c; + const double var_x60 = pow((1 + 0.027410122234342148 * var_x29), (-2)); + const double var_x61 = pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, 2); + const double var_x62 = 200 * var_chaste_interface__intracellular_ion_concentrations__Ca_i; + const double var_x63 = 0.00088070109612833447 * var_x3; + const double var_x64 = 32 * var_chaste_interface__intracellular_ion_concentrations__Ca_i; + const double var_x65 = 0.00020000000000000001 + var_chaste_interface__intracellular_ion_concentrations__Ca_i; + const double var_x66 = pow(mParameters[2], 3); + const double var_x67 = var_x66 * mParameters[9]; + const double var_x68 = var_x66 * var_chaste_interface__intracellular_ion_concentrations__Ca_i; + const double var_x69 = pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, 3) * mParameters[1]; + const double var_x70 = 1 + 0.00029999999999999997 * var_x68 + 0.00029999999999999997 * var_x69; + const double var_x71 = pow(var_x70, (-2)); + const double var_x72 = exp(0.016955889611951675 * var_chaste_interface__membrane__V); + const double var_x73 = exp(-0.02072386508127427 * var_chaste_interface__membrane__V); + const double var_x74 = var_x69 * var_x72 - var_x68 * var_x73; + const double var_x75 = var_x71 * var_x74; + const double var_x76 = var_x67 * var_x75; + const double var_x77 = 1 / var_x70; + const double var_x78 = var_x67 * var_x73 * var_x77; + const double var_x79 = pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, 2); + const double var_x80 = var_x79 * mParameters[9] * mParameters[1]; + const double var_x81 = 0.021829942145742926 * var_x23; + const double var_x82 = -3.290319067574035e-6 - 4.9354786013610522e-6 * var_x25; + const double var_x83 = 0.0049352811901134472 * var_x49; + const double var_x84 = var_x29 * var_x30 * var_x33 * var_x52 * var_chaste_interface__cleft_space_ion_concentrations__K_c; + const double var_x85 = 1 / var_chaste_interface__intracellular_ion_concentrations__Na_i; + const double var_x86 = var_x85 * mParameters[2]; + const double var_x87 = log(var_x86); + const double var_x88 = var_x86 * pow(var_chaste_interface__sodium_current_m_gate__m, 3) * (0.36499999999999999 * var_chaste_interface__sodium_current_h2_gate__h2 + 0.63500000000000001 * var_chaste_interface__sodium_current_h1_gate__h1) * mParameters[5]; + const double var_x89 = 0.0096486999999999996 * var_x88; + const double var_x90 = var_x89 * exp(-9.9999999999999995e-8 - var_x87) / (-1 + exp(-9.9999999999999995e-8)); + const double var_x91 = 0.037679754693225945 * var_chaste_interface__membrane__V; + + + rJacobian[0][0] = 1.0 - (mDt * (-14.98 - var_x4 + 14.880000000000001 * var_chaste_interface__Ca_handling_by_the_SR__O_Calse)); + rJacobian[0][1] = -(mDt * (0.099999999999999992)); + rJacobian[0][2] = 0.0; + rJacobian[0][3] = -(mDt * (var_x6 * var_x7 - var_x1 * var_x6 * var_chaste_interface__Ca_handling_by_the_SR__F2 * mParameters[0])); + rJacobian[0][4] = 0.0; + rJacobian[0][5] = -(mDt * (12.4 + 14.880000000000001 * var_chaste_interface__Ca_handling_by_the_SR__Ca_rel)); + rJacobian[0][6] = 0.0; + rJacobian[0][7] = 0.0; + rJacobian[0][8] = 0.0; + rJacobian[0][9] = 0.0; + rJacobian[0][10] = 0.0; + rJacobian[0][11] = -(mDt * (var_x4)); + rJacobian[0][12] = 0.0; + rJacobian[0][13] = 0.0; + rJacobian[1][0] = -(mDt * (0.011085915847820609)); + rJacobian[1][1] = 1.0 - (mDt * (-0.011085915847820609 - 2.6321499680605046e-9 * var_x11 - 0.011698444302491135 * var_x8)); + rJacobian[1][2] = 0.0; + rJacobian[1][3] = 0.0; + rJacobian[1][4] = 0.0; + rJacobian[1][5] = 0.0; + rJacobian[1][6] = 0.0; + rJacobian[1][7] = 0.0; + rJacobian[1][8] = 0.0; + rJacobian[1][9] = 0.0; + rJacobian[1][10] = 0.0; + rJacobian[1][11] = -(mDt * (121.85879481761599 * var_x8 - 1.0967291533585437e-5 * var_x11)); + rJacobian[1][12] = 0.0; + rJacobian[1][13] = 0.0; + rJacobian[2][0] = 0.0; + rJacobian[2][1] = 0.0; + rJacobian[2][2] = 1.0 - (mDt * (-var_x16)); + rJacobian[2][3] = 0.0; + rJacobian[2][4] = -(mDt * (0.00081499999999999997)); + rJacobian[2][5] = 0.0; + rJacobian[2][6] = 0.0; + rJacobian[2][7] = 0.0; + rJacobian[2][8] = 0.0; + rJacobian[2][9] = 0.0; + rJacobian[2][10] = 0.0; + rJacobian[2][11] = -(mDt * (var_x19 * var_chaste_interface__Ca_handling_by_the_SR__F1)); + rJacobian[2][12] = 0.0; + rJacobian[2][13] = 0.0; + rJacobian[3][0] = 0.0; + rJacobian[3][1] = 0.0; + rJacobian[3][2] = -(mDt * (var_x16)); + rJacobian[3][3] = 1.0 - (mDt * (-var_x20)); + rJacobian[3][4] = 0.0; + rJacobian[3][5] = 0.0; + rJacobian[3][6] = 0.0; + rJacobian[3][7] = 0.0; + rJacobian[3][8] = 0.0; + rJacobian[3][9] = 0.0; + rJacobian[3][10] = 0.0; + rJacobian[3][11] = -(mDt * (var_x21 * var_chaste_interface__Ca_handling_by_the_SR__F2 - var_x19 * var_chaste_interface__Ca_handling_by_the_SR__F1)); + rJacobian[3][12] = 0.0; + rJacobian[3][13] = 0.0; + rJacobian[4][0] = 0.0; + rJacobian[4][1] = 0.0; + rJacobian[4][2] = 0.0; + rJacobian[4][3] = -(mDt * (var_x20)); + rJacobian[4][4] = 1.0 - (mDt * (-0.00081499999999999997)); + rJacobian[4][5] = 0.0; + rJacobian[4][6] = 0.0; + rJacobian[4][7] = 0.0; + rJacobian[4][8] = 0.0; + rJacobian[4][9] = 0.0; + rJacobian[4][10] = 0.0; + rJacobian[4][11] = -(mDt * (-var_x21 * var_chaste_interface__Ca_handling_by_the_SR__F2)); + rJacobian[4][12] = 0.0; + rJacobian[4][13] = 0.0; + rJacobian[5][0] = -(mDt * (0.47999999999999998 - 0.47999999999999998 * var_chaste_interface__Ca_handling_by_the_SR__O_Calse)); + rJacobian[5][1] = 0.0; + rJacobian[5][2] = 0.0; + rJacobian[5][3] = 0.0; + rJacobian[5][4] = 0.0; + rJacobian[5][5] = 1.0 - (mDt * (-0.40000000000000002 - 0.47999999999999998 * var_chaste_interface__Ca_handling_by_the_SR__Ca_rel)); + rJacobian[5][6] = 0.0; + rJacobian[5][7] = 0.0; + rJacobian[5][8] = 0.0; + rJacobian[5][9] = 0.0; + rJacobian[5][10] = 0.0; + rJacobian[5][11] = 0.0; + rJacobian[5][12] = 0.0; + rJacobian[5][13] = 0.0; + rJacobian[6][0] = 0.0; + rJacobian[6][1] = 0.0; + rJacobian[6][2] = 0.0; + rJacobian[6][3] = 0.0; + rJacobian[6][4] = 0.0; + rJacobian[6][5] = 0.0; + rJacobian[6][6] = 1.0 - (mDt * (-0.00085446536839159674 * var_x36 - 0.22004581682908866 * var_x48 - var_x22 * var_x24 - var_x23 * var_x28 - var_x24 * var_x37 - 0.024873817198171774 * var_x49 * var_x51 + 0.024873817198171774 * var_x38 * var_x40 * var_x45 * var_x49 * mParameters[6] + 0.00085446536839159674 * var_x29 * var_x30 * var_x33 * var_x52 * var_chaste_interface__cleft_space_ion_concentrations__K_c + 0.011549742452351092 * var_x38 * var_x40 * var_x43 * var_x49 * var_x53 * mParameters[6])); + rJacobian[6][7] = 0.0; + rJacobian[6][8] = 0.0; + rJacobian[6][9] = 0.0; + rJacobian[6][10] = 0.0; + rJacobian[6][11] = 0.0; + rJacobian[6][12] = -(mDt * (0.11002290841454433 * var_x54 + 0.11002290841454433 * var_x55 + 0.22004581682908866 * var_x57 + var_x28 * var_x41 - 0.011549742452351092 * var_x56 * var_x58)); + rJacobian[6][13] = -(mDt * (-0.0012816980525873951 * var_x59 + 9.6295871719563877e-7 * var_x32 * var_x33 * var_x60 * var_x61 * var_chaste_interface__cleft_space_ion_concentrations__K_c)); + rJacobian[7][0] = 0.0; + rJacobian[7][1] = 0.0; + rJacobian[7][2] = 0.0; + rJacobian[7][3] = 0.0; + rJacobian[7][4] = 0.0; + rJacobian[7][5] = 0.0; + rJacobian[7][6] = 0.0; + rJacobian[7][7] = 1.0 - (mDt * (-0.47599999999999998 - var_x62)); + rJacobian[7][8] = 0.0; + rJacobian[7][9] = 0.0; + rJacobian[7][10] = 0.0; + rJacobian[7][11] = -(mDt * (200 - 200 * var_chaste_interface__intracellular_Ca_buffering__O_C)); + rJacobian[7][12] = 0.0; + rJacobian[7][13] = 0.0; + rJacobian[8][0] = 0.0; + rJacobian[8][1] = 0.0; + rJacobian[8][2] = 0.0; + rJacobian[8][3] = 0.0; + rJacobian[8][4] = 0.0; + rJacobian[8][5] = 0.0; + rJacobian[8][6] = 0.0; + rJacobian[8][7] = 0.0; + rJacobian[8][8] = 1.0 - (mDt * (-0.39200000000000002 - 78.400000000000006 * var_chaste_interface__intracellular_ion_concentrations__Ca_i)); + rJacobian[8][9] = 0.0; + rJacobian[8][10] = 0.0; + rJacobian[8][11] = -(mDt * (78.400000000000006 - 78.400000000000006 * var_chaste_interface__intracellular_Ca_buffering__O_TC)); + rJacobian[8][12] = 0.0; + rJacobian[8][13] = 0.0; + rJacobian[9][0] = 0.0; + rJacobian[9][1] = 0.0; + rJacobian[9][2] = 0.0; + rJacobian[9][3] = 0.0; + rJacobian[9][4] = 0.0; + rJacobian[9][5] = 0.0; + rJacobian[9][6] = 0.0; + rJacobian[9][7] = 0.0; + rJacobian[9][8] = 0.0; + rJacobian[9][9] = 1.0 - (mDt * (-0.0066 - var_x62)); + rJacobian[9][10] = -(mDt * (-var_x62)); + rJacobian[9][11] = -(mDt * (200 - 200 * var_chaste_interface__intracellular_Ca_buffering__O_TMgC - 200 * var_chaste_interface__intracellular_Ca_buffering__O_TMgMg)); + rJacobian[9][12] = 0.0; + rJacobian[9][13] = 0.0; + rJacobian[10][0] = 0.0; + rJacobian[10][1] = 0.0; + rJacobian[10][2] = 0.0; + rJacobian[10][3] = 0.0; + rJacobian[10][4] = 0.0; + rJacobian[10][5] = 0.0; + rJacobian[10][6] = 0.0; + rJacobian[10][7] = 0.0; + rJacobian[10][8] = 0.0; + rJacobian[10][9] = -(mDt * (-5)); + rJacobian[10][10] = 1.0 - (mDt * (-5.6660000000000004)); + rJacobian[10][11] = 0.0; + rJacobian[10][12] = 0.0; + rJacobian[10][13] = 0.0; + rJacobian[11][0] = -(mDt * (var_x63)); + rJacobian[11][1] = -(mDt * (1.7754934097947219e-10 * var_x11 + 0.00078910818213098765 * var_x8)); + rJacobian[11][2] = 0.0; + rJacobian[11][3] = -(mDt * (-0.0017614021922566689 * var_x5 * var_x7 + 0.0017614021922566689 * var_x1 * var_x5 * var_chaste_interface__Ca_handling_by_the_SR__F2 * mParameters[0])); + rJacobian[11][4] = 0.0; + rJacobian[11][5] = 0.0; + rJacobian[11][6] = 0.0; + rJacobian[11][7] = -(mDt * (0.021419999999999998 + 9 * var_chaste_interface__intracellular_ion_concentrations__Ca_i)); + rJacobian[11][8] = -(mDt * (0.031359999999999999 + 6.2720000000000002 * var_chaste_interface__intracellular_ion_concentrations__Ca_i)); + rJacobian[11][9] = -(mDt * (0.0010559999999999999 + var_x64)); + rJacobian[11][10] = -(mDt * (var_x64)); + rJacobian[11][11] = 1.0 - (mDt * (-47.271999999999998 - var_x63 + 6.2720000000000002 * var_chaste_interface__intracellular_Ca_buffering__O_TC + 32 * var_chaste_interface__intracellular_Ca_buffering__O_TMgC + 32 * var_chaste_interface__intracellular_Ca_buffering__O_TMgMg + 9 * var_chaste_interface__intracellular_Ca_buffering__O_C - 8.3745867230843319e-6 / var_x65 - 5.2842065767700058e-7 * var_x76 - 8.2198768971977874 * var_x8 - 0.0017614021922566689 * var_x78 - 2.3373323507508574e-7 / var_chaste_interface__intracellular_ion_concentrations__Ca_i + 8.3745867230843319e-6 * var_chaste_interface__intracellular_ion_concentrations__Ca_i / pow(var_x65, 2) + 7.3978892074780085e-7 * var_x10 * var_x9)); + rJacobian[11][12] = 0.0; + rJacobian[11][13] = -(mDt * (-1.5852619730310017e-6 * var_x75 * var_x80 + 0.0052842065767700064 * var_x72 * var_x77 * var_x79 * mParameters[9] * mParameters[1])); + rJacobian[12][0] = 0.0; + rJacobian[12][1] = 0.0; + rJacobian[12][2] = 0.0; + rJacobian[12][3] = 0.0; + rJacobian[12][4] = 0.0; + rJacobian[12][5] = 0.0; + rJacobian[12][6] = -(mDt * (0.043659884291485852 * var_x48 + 0.00016953677944277714 * var_x36 - 0.00016953677944277714 * var_x84 + var_x22 * var_x81 + var_x37 * var_x81 + var_x51 * var_x83 - var_x48 * var_x83 - 0.0022916155659426776 * var_x38 * var_x58 - var_x23 * var_x27 * var_x82)); + rJacobian[12][7] = 0.0; + rJacobian[12][8] = 0.0; + rJacobian[12][9] = 0.0; + rJacobian[12][10] = 0.0; + rJacobian[12][11] = 0.0; + rJacobian[12][12] = 1.0 - (mDt * (-0.021829942145742926 * var_x54 - 0.021829942145742926 * var_x55 - 0.043659884291485852 * var_x57 + 26.53945091048535 * var_x26 * var_x41 * var_x82 * var_chaste_interface__Ca_independent_transient_outward_K_current_r_gate__r + 0.0022916155659426776 * var_x40 * var_x41 * var_x43 * var_x49 * var_x50 * var_x53 * mParameters[6])); + rJacobian[12][13] = -(mDt * (0.00025430516916416572 * var_x59 - 1.9106323753881723e-7 * var_x34 * var_x60 * var_x61 * var_chaste_interface__cleft_space_ion_concentrations__K_c)); + rJacobian[13][0] = 0.0; + rJacobian[13][1] = 0.0; + rJacobian[13][2] = 0.0; + rJacobian[13][3] = 0.0; + rJacobian[13][4] = 0.0; + rJacobian[13][5] = 0.0; + rJacobian[13][6] = -(mDt * (0.00025430516916416572 * var_x84 - 0.00025430516916416572 * var_x36)); + rJacobian[13][7] = 0.0; + rJacobian[13][8] = 0.0; + rJacobian[13][9] = 0.0; + rJacobian[13][10] = 0.0; + rJacobian[13][11] = -(mDt * (0.0024676405950567236 * var_x78 + 7.4029217851701709e-7 * var_x76)); + rJacobian[13][12] = 0.0; + rJacobian[13][13] = 1.0 - (mDt * (-0.00038145775374624855 * var_x59 - 4.3659884291485854e-7 * var_x85 - 0.00082254686501890791 * (((var_chaste_interface__membrane__V >= -2.6539450910485349e-6) && (var_chaste_interface__membrane__V <= 2.6539450910485349e-6)) ? (-var_x90 + (0.5 + 188398.77346612973 * var_chaste_interface__membrane__V) * (var_x90 + var_x89 * exp(9.9999999999999995e-8 - var_x87) / (-1 + exp(9.9999999999999995e-8)))) : (3635.606491085292 * var_x88 * var_chaste_interface__membrane__V * exp(var_x91 - var_x87) / (-1 + exp(var_x91)))) - 0.0074029217851701709 * var_x72 * var_x77 * var_x80 + 2.2208765355510512e-6 * var_x71 * var_x74 * var_x79 * mParameters[9] * mParameters[1] + 2.8659485630822583e-7 * var_x32 * var_x33 * var_x60 * var_x61 * var_chaste_interface__cleft_space_ion_concentrations__K_c)); + } + + void Cellaslanidi_atrial_model_2009FromCellMLBackwardEuler::UpdateTransmembranePotential(double var_chaste_interface__environment__time_converted) + { + // Time units: millisecond + std::vector& rY = rGetStateVariables(); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -80.0 + double var_chaste_interface__intracellular_ion_concentrations__Ca_i = rY[1]; + // Units: millimolar; Initial value: 7.1e-05 + double var_chaste_interface__sodium_current_m_gate__m = rY[2]; + // Units: dimensionless; Initial value: 0.01309 + double var_chaste_interface__sodium_current_h1_gate__h1 = rY[3]; + // Units: dimensionless; Initial value: 0.706 + double var_chaste_interface__sodium_current_h2_gate__h2 = rY[4]; + // Units: dimensionless; Initial value: 0.61493 + double var_chaste_interface__L_type_Ca_channel_d_L_gate__d_L = rY[5]; + // Units: dimensionless; Initial value: 3e-05 + double var_chaste_interface__L_type_Ca_channel_f_L_gate__f_L = rY[6]; + // Units: dimensionless; Initial value: 0.99981 + double var_chaste_interface__T_type_Ca_channel_d_T_gate__d_T = rY[7]; + // Units: dimensionless; Initial value: 0.00046 + double var_chaste_interface__T_type_Ca_channel_f_T_gate__f_T = rY[8]; + // Units: dimensionless; Initial value: 0.30752 + double var_chaste_interface__Ca_independent_transient_outward_K_current_r_gate__r = rY[9]; + // Units: dimensionless; Initial value: 6e-05 + double var_chaste_interface__Ca_independent_transient_outward_K_current_s1_gate__s1 = rY[10]; + // Units: dimensionless; Initial value: 0.5753 + double var_chaste_interface__Ca_independent_transient_outward_K_current_s2_gate__s2 = rY[11]; + // Units: dimensionless; Initial value: 0.39871 + double var_chaste_interface__Ca_independent_transient_outward_K_current_s3_gate__s3 = rY[12]; + // Units: dimensionless; Initial value: 0.57363 + double var_chaste_interface__delayed_rectifier_K_current_z_gate__z = rY[13]; + // Units: dimensionless; Initial value: 0.02032 + double var_chaste_interface__delayed_rectifier_K_current_pa_gate__p_a = rY[14]; + // Units: dimensionless; Initial value: 0.00016 + double var_chaste_interface__delayed_rectifier_K_current_pi_gate__p_i = rY[15]; + // Units: dimensionless; Initial value: 0.76898 + double var_chaste_interface__intracellular_ion_concentrations__Na_i = rY[16]; + // Units: millimolar; Initial value: 8.4 + double var_chaste_interface__intracellular_ion_concentrations__K_i = rY[17]; + // Units: millimolar; Initial value: 100.0 + double var_chaste_interface__cleft_space_ion_concentrations__K_c = rY[22]; + // Units: millimolar; Initial value: 5.0 + + const double var_Ca_independent_transient_outward_K_current__g_to = 0.050001999999999998; // nanoS + const double var_L_type_Ca_channel__E_Ca_app = 50; // millivolt + const double var_Na_Ca_ion_exchanger_current__d_NaCa = 0.00029999999999999997; // per_millimolar_4 + const double var_Na_Ca_ion_exchanger_current__gamma = 0.45000000000000001; // dimensionless + const double var_T_type_Ca_channel__E_Ca_T = 38; // millivolt + const double var_T_type_Ca_channel__g_Ca_T = 0.0060000000000000001; // nanoS + const double var_background_currents__g_B_Ca = 3.1000000000000001e-5; // nanoS + const double var_background_currents__g_B_Na = 6.3999999999999997e-5; // nanoS + const double var_environment__CT = 1; // dimensionless + const double var_environment__PM = 0; // dimensionless + const double var_inward_rectifier__KmK1 = 0.58999999999999997; // millimolar + const double var_inward_rectifier__shiftK1 = -3.6000000000000001; // millivolt + const double var_inward_rectifier__steepK1 = 1.393; // dimensionless + const double var_membrane__Cm_converted = 0.001 * mParameters[4]; // uF + const double var_membrane__F = 96487; // coulomb_per_mole + const double var_membrane__R = 8314; // millijoule_per_mole_kelvin + const double var_membrane__T = 308; // kelvin + const double var_Ca_independent_transient_outward_K_current__E_K = var_membrane__R * var_membrane__T * log(var_chaste_interface__cleft_space_ion_concentrations__K_c / var_chaste_interface__intracellular_ion_concentrations__K_i) / var_membrane__F; // millivolt + const double var_background_currents__E_Ca = 0.5 * var_membrane__R * var_membrane__T * log(mParameters[1] / var_chaste_interface__intracellular_ion_concentrations__Ca_i) / var_membrane__F; // millivolt + const double var_Ca_independent_transient_outward_K_current__i_sus = (((var_environment__CT == 1) && (var_environment__PM == 0)) ? (0.098000000000000004 + 0.0014 * var_chaste_interface__membrane__V) : (((var_environment__PM == 1) && (var_environment__CT == 0)) ? (0.16799999999999998 + 0.0023999999999999998 * var_chaste_interface__membrane__V) : (0.070000000000000007 + 0.001 * var_chaste_interface__membrane__V))); // picoA + const double var_Ca_independent_transient_outward_K_current__i_to = (((var_environment__CT == 1) && (var_environment__PM == 0)) ? (0.20000000000000001 * (0.40000000000000002 + 0.59999999999999998 * pow(var_chaste_interface__Ca_independent_transient_outward_K_current_s3_gate__s3, 6)) * (-var_Ca_independent_transient_outward_K_current__E_K + var_chaste_interface__membrane__V) * (0.58999999999999997 * pow(var_chaste_interface__Ca_independent_transient_outward_K_current_s1_gate__s1, 3) + 0.40999999999999998 * pow(var_chaste_interface__Ca_independent_transient_outward_K_current_s2_gate__s2, 3)) * var_Ca_independent_transient_outward_K_current__g_to * var_chaste_interface__Ca_independent_transient_outward_K_current_r_gate__r) : (((var_environment__PM == 1) && (var_environment__CT == 0)) ? (0.34999999999999998 * (0.40000000000000002 + 0.59999999999999998 * pow(var_chaste_interface__Ca_independent_transient_outward_K_current_s3_gate__s3, 6)) * (-var_Ca_independent_transient_outward_K_current__E_K + var_chaste_interface__membrane__V) * (0.58999999999999997 * pow(var_chaste_interface__Ca_independent_transient_outward_K_current_s1_gate__s1, 3) + 0.40999999999999998 * pow(var_chaste_interface__Ca_independent_transient_outward_K_current_s2_gate__s2, 3)) * var_Ca_independent_transient_outward_K_current__g_to * var_chaste_interface__Ca_independent_transient_outward_K_current_r_gate__r) : ((0.40000000000000002 + 0.59999999999999998 * pow(var_chaste_interface__Ca_independent_transient_outward_K_current_s3_gate__s3, 6)) * (-var_Ca_independent_transient_outward_K_current__E_K + var_chaste_interface__membrane__V) * (0.58999999999999997 * pow(var_chaste_interface__Ca_independent_transient_outward_K_current_s1_gate__s1, 3) + 0.40999999999999998 * pow(var_chaste_interface__Ca_independent_transient_outward_K_current_s2_gate__s2, 3)) * var_Ca_independent_transient_outward_K_current__g_to * var_chaste_interface__Ca_independent_transient_outward_K_current_r_gate__r))); // picoA + const double var_L_type_Ca_channel__d_prime = 1 / (1 + exp(1.9166666666666667 - 0.083333333333333329 * var_chaste_interface__membrane__V)); // dimensionless + const double var_L_type_Ca_channel__i_Ca_L = (((var_environment__CT == 1) && (var_environment__PM == 0)) ? (1.8 * (-var_L_type_Ca_channel__E_Ca_app + var_chaste_interface__membrane__V) * (var_chaste_interface__L_type_Ca_channel_d_L_gate__d_L * var_chaste_interface__L_type_Ca_channel_f_L_gate__f_L + var_L_type_Ca_channel__d_prime) * mParameters[3]) : (((var_environment__PM == 1) && (var_environment__CT == 0)) ? (2.1000000000000001 * (-var_L_type_Ca_channel__E_Ca_app + var_chaste_interface__membrane__V) * (var_chaste_interface__L_type_Ca_channel_d_L_gate__d_L * var_chaste_interface__L_type_Ca_channel_f_L_gate__f_L + var_L_type_Ca_channel__d_prime) * mParameters[3]) : ((-var_L_type_Ca_channel__E_Ca_app + var_chaste_interface__membrane__V) * (var_chaste_interface__L_type_Ca_channel_d_L_gate__d_L * var_chaste_interface__L_type_Ca_channel_f_L_gate__f_L + var_L_type_Ca_channel__d_prime) * mParameters[3]))); // picoA + const double var_Na_Ca_ion_exchanger_current__i_NaCa = (pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, 3) * mParameters[1] * exp(var_Na_Ca_ion_exchanger_current__gamma * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T)) - pow(mParameters[2], 3) * var_chaste_interface__intracellular_ion_concentrations__Ca_i * exp((-1 + var_Na_Ca_ion_exchanger_current__gamma) * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * mParameters[9] / (1 + (pow(mParameters[2], 3) * var_chaste_interface__intracellular_ion_concentrations__Ca_i + pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, 3) * mParameters[1]) * var_Na_Ca_ion_exchanger_current__d_NaCa); // picoA + const double var_T_type_Ca_channel__i_Ca_T = (-var_T_type_Ca_channel__E_Ca_T + var_chaste_interface__membrane__V) * var_T_type_Ca_channel__g_Ca_T * var_chaste_interface__T_type_Ca_channel_d_T_gate__d_T * var_chaste_interface__T_type_Ca_channel_f_T_gate__f_T; // picoA + const double var_background_currents__i_B_Ca = (((var_environment__CT == 1) && (var_environment__PM == 0)) ? (2.0000000000000002e-5 * var_chaste_interface__membrane__V - 2.0000000000000002e-5 * var_background_currents__E_Ca) : (((var_environment__PM == 1) && (var_environment__CT == 0)) ? (3.0000000000000001e-5 * var_chaste_interface__membrane__V - 3.0000000000000001e-5 * var_background_currents__E_Ca) : ((-var_background_currents__E_Ca + var_chaste_interface__membrane__V) * var_background_currents__g_B_Ca))); // picoA + const double var_delayed_rectifier_K_current__i_Kr = (-var_Ca_independent_transient_outward_K_current__E_K + var_chaste_interface__membrane__V) * mParameters[7] * var_chaste_interface__delayed_rectifier_K_current_pa_gate__p_a * var_chaste_interface__delayed_rectifier_K_current_pi_gate__p_i; // picoA + const double var_delayed_rectifier_K_current__i_Ks = (-var_Ca_independent_transient_outward_K_current__E_K + var_chaste_interface__membrane__V) * mParameters[8] * var_chaste_interface__delayed_rectifier_K_current_z_gate__z; // picoA + const double var_inward_rectifier__i_K1 = (((var_environment__CT == 1) && (var_environment__PM == 0)) ? (2 * pow(var_chaste_interface__cleft_space_ion_concentrations__K_c, 3) * (-var_Ca_independent_transient_outward_K_current__E_K + var_chaste_interface__membrane__V) * mParameters[6] / ((1 + exp((-var_Ca_independent_transient_outward_K_current__E_K - var_inward_rectifier__shiftK1 + var_chaste_interface__membrane__V) * var_inward_rectifier__steepK1 * var_membrane__F / (var_membrane__R * var_membrane__T))) * pow((var_chaste_interface__cleft_space_ion_concentrations__K_c + var_inward_rectifier__KmK1), 3))) : (((var_environment__PM == 1) && (var_environment__CT == 0)) ? (2.5 * pow(var_chaste_interface__cleft_space_ion_concentrations__K_c, 3) * (-var_Ca_independent_transient_outward_K_current__E_K + var_chaste_interface__membrane__V) * mParameters[6] / ((1 + exp((-var_Ca_independent_transient_outward_K_current__E_K - var_inward_rectifier__shiftK1 + var_chaste_interface__membrane__V) * var_inward_rectifier__steepK1 * var_membrane__F / (var_membrane__R * var_membrane__T))) * pow((var_chaste_interface__cleft_space_ion_concentrations__K_c + var_inward_rectifier__KmK1), 3))) : (pow(var_chaste_interface__cleft_space_ion_concentrations__K_c, 3) * (-var_Ca_independent_transient_outward_K_current__E_K + var_chaste_interface__membrane__V) * mParameters[6] / ((1 + exp((-var_Ca_independent_transient_outward_K_current__E_K - var_inward_rectifier__shiftK1 + var_chaste_interface__membrane__V) * var_inward_rectifier__steepK1 * var_membrane__F / (var_membrane__R * var_membrane__T))) * pow((var_chaste_interface__cleft_space_ion_concentrations__K_c + var_inward_rectifier__KmK1), 3))))); // picoA + const double var_membrane__i_Stim_converted = GetIntracellularAreaStimulus(var_chaste_interface__environment__time_converted); // uA_per_cm2 + const double var_membrane__i_Stim = 1000000 * var_membrane__Cm_converted * var_membrane__i_Stim_converted / HeartConfig::Instance()->GetCapacitance(); // picoA + const double var_sarcolemmal_calcium_pump_current__i_CaP_max = 0.0095090000000000001; // picoA + const double var_sarcolemmal_calcium_pump_current__k_CaP = 0.00020000000000000001; // millimolar + const double var_sarcolemmal_calcium_pump_current__i_CaP = var_chaste_interface__intracellular_ion_concentrations__Ca_i * var_sarcolemmal_calcium_pump_current__i_CaP_max / (var_chaste_interface__intracellular_ion_concentrations__Ca_i + var_sarcolemmal_calcium_pump_current__k_CaP); // picoA + const double var_sodium_current__E_Na = var_membrane__R * var_membrane__T * log(mParameters[2] / var_chaste_interface__intracellular_ion_concentrations__Na_i) / var_membrane__F; // millivolt + const double var_background_currents__i_B_Na = (((var_environment__CT == 1) && (var_environment__PM == 0)) ? (2.0000000000000002e-5 * var_chaste_interface__membrane__V - 2.0000000000000002e-5 * var_sodium_current__E_Na) : (((var_environment__PM == 1) && (var_environment__CT == 0)) ? (3.0000000000000001e-5 * var_chaste_interface__membrane__V - 3.0000000000000001e-5 * var_sodium_current__E_Na) : ((-var_sodium_current__E_Na + var_chaste_interface__membrane__V) * var_background_currents__g_B_Na))); // picoA + const double var_sodium_current__i_Na = (((var_chaste_interface__membrane__V >= -2.6539450910485349e-6) && (var_chaste_interface__membrane__V <= 2.6539450910485349e-6)) ? (188398.77346612973 * (2.6539450910485349e-6 + var_chaste_interface__membrane__V) * (0.0096486999999999996 * pow(var_chaste_interface__sodium_current_m_gate__m, 3) * (-1 + exp(9.9999999999999995e-8 - log(mParameters[2] / var_chaste_interface__intracellular_ion_concentrations__Na_i))) * (0.36499999999999999 * var_chaste_interface__sodium_current_h2_gate__h2 + 0.63500000000000001 * var_chaste_interface__sodium_current_h1_gate__h1) * mParameters[2] * mParameters[5] / (-1 + exp(9.9999999999999995e-8)) + 0.0096486999999999996 * pow(var_chaste_interface__sodium_current_m_gate__m, 3) * (-1 + exp(-9.9999999999999995e-8 - log(mParameters[2] / var_chaste_interface__intracellular_ion_concentrations__Na_i))) * (0.36499999999999999 * var_chaste_interface__sodium_current_h2_gate__h2 + 0.63500000000000001 * var_chaste_interface__sodium_current_h1_gate__h1) * mParameters[2] * mParameters[5] / (-1 + exp(-9.9999999999999995e-8))) - 0.0096486999999999996 * pow(var_chaste_interface__sodium_current_m_gate__m, 3) * (-1 + exp(-9.9999999999999995e-8 - log(mParameters[2] / var_chaste_interface__intracellular_ion_concentrations__Na_i))) * (0.36499999999999999 * var_chaste_interface__sodium_current_h2_gate__h2 + 0.63500000000000001 * var_chaste_interface__sodium_current_h1_gate__h1) * mParameters[2] * mParameters[5] / (-1 + exp(-9.9999999999999995e-8))) : (3635.606491085292 * pow(var_chaste_interface__sodium_current_m_gate__m, 3) * (-1 + exp(0.037679754693225945 * var_chaste_interface__membrane__V - log(mParameters[2] / var_chaste_interface__intracellular_ion_concentrations__Na_i))) * (0.36499999999999999 * var_chaste_interface__sodium_current_h2_gate__h2 + 0.63500000000000001 * var_chaste_interface__sodium_current_h1_gate__h1) * mParameters[2] * var_chaste_interface__membrane__V * mParameters[5] / (-1 + exp(0.037679754693225945 * var_chaste_interface__membrane__V)))); // picoA + const double var_sodium_potassium_pump__i_NaK_max = 0.064409999999999995; // picoA + const double var_sodium_potassium_pump__k_NaK_K = 1; // millimolar + const double var_sodium_potassium_pump__k_NaK_Na = 11; // millimolar + const double var_sodium_potassium_pump__i_p = 1.6000000000000001 * pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, 1.5) * var_chaste_interface__cleft_space_ion_concentrations__K_c * var_sodium_potassium_pump__i_NaK_max / ((1.5 + exp(-1.5 - 0.025000000000000001 * var_chaste_interface__membrane__V)) * (pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, 1.5) + pow(var_sodium_potassium_pump__k_NaK_Na, 1.5)) * (var_chaste_interface__cleft_space_ion_concentrations__K_c + var_sodium_potassium_pump__k_NaK_K)); // picoA + const double var_membrane__V_orig_deriv = -(var_Ca_independent_transient_outward_K_current__i_sus + var_Ca_independent_transient_outward_K_current__i_to + var_L_type_Ca_channel__i_Ca_L + var_Na_Ca_ion_exchanger_current__i_NaCa + var_T_type_Ca_channel__i_Ca_T + var_background_currents__i_B_Ca + var_background_currents__i_B_Na + var_delayed_rectifier_K_current__i_Kr + var_delayed_rectifier_K_current__i_Ks + var_inward_rectifier__i_K1 + var_membrane__i_Stim + var_sarcolemmal_calcium_pump_current__i_CaP + var_sodium_current__i_Na + var_sodium_potassium_pump__i_p) / mParameters[4]; // millivolt / second + const double d_dt_chaste_interface_var_membrane__V = 0.001 * var_membrane__V_orig_deriv; // millivolt / millisecond + + rY[0] += mDt*d_dt_chaste_interface_var_membrane__V; + } + + void Cellaslanidi_atrial_model_2009FromCellMLBackwardEuler::ComputeOneStepExceptVoltage(double var_chaste_interface__environment__time_converted) + { + // Time units: millisecond + std::vector& rY = rGetStateVariables(); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -80.0 + double var_chaste_interface__sodium_current_m_gate__m = rY[2]; + // Units: dimensionless; Initial value: 0.01309 + double var_chaste_interface__sodium_current_h1_gate__h1 = rY[3]; + // Units: dimensionless; Initial value: 0.706 + double var_chaste_interface__sodium_current_h2_gate__h2 = rY[4]; + // Units: dimensionless; Initial value: 0.61493 + double var_chaste_interface__L_type_Ca_channel_d_L_gate__d_L = rY[5]; + // Units: dimensionless; Initial value: 3e-05 + double var_chaste_interface__L_type_Ca_channel_f_L_gate__f_L = rY[6]; + // Units: dimensionless; Initial value: 0.99981 + double var_chaste_interface__T_type_Ca_channel_d_T_gate__d_T = rY[7]; + // Units: dimensionless; Initial value: 0.00046 + double var_chaste_interface__T_type_Ca_channel_f_T_gate__f_T = rY[8]; + // Units: dimensionless; Initial value: 0.30752 + double var_chaste_interface__Ca_independent_transient_outward_K_current_r_gate__r = rY[9]; + // Units: dimensionless; Initial value: 6e-05 + double var_chaste_interface__Ca_independent_transient_outward_K_current_s1_gate__s1 = rY[10]; + // Units: dimensionless; Initial value: 0.5753 + double var_chaste_interface__Ca_independent_transient_outward_K_current_s2_gate__s2 = rY[11]; + // Units: dimensionless; Initial value: 0.39871 + double var_chaste_interface__Ca_independent_transient_outward_K_current_s3_gate__s3 = rY[12]; + // Units: dimensionless; Initial value: 0.57363 + double var_chaste_interface__delayed_rectifier_K_current_z_gate__z = rY[13]; + // Units: dimensionless; Initial value: 0.02032 + double var_chaste_interface__delayed_rectifier_K_current_pa_gate__p_a = rY[14]; + // Units: dimensionless; Initial value: 0.00016 + double var_chaste_interface__delayed_rectifier_K_current_pi_gate__p_i = rY[15]; + // Units: dimensionless; Initial value: 0.76898 + + const double var_Ca_independent_transient_outward_K_current_r_gate__alpha_r = 386.60000000000002 * exp(0.083333333333333329 * var_chaste_interface__membrane__V); + const double var_Ca_independent_transient_outward_K_current_r_gate__beta_r = 8.0109999999999992 * exp(-0.1388888888888889 * var_chaste_interface__membrane__V); + const double var_Ca_independent_transient_outward_K_current_r_gate__r_infinity = 1 / (1 + exp(-2.6628794603230959 - 0.17752529735487307 * var_chaste_interface__membrane__V)); + const double var_Ca_independent_transient_outward_K_current_r_gate__tau_r = 0.00040000000000000002 + 1 / (var_Ca_independent_transient_outward_K_current_r_gate__alpha_r + var_Ca_independent_transient_outward_K_current_r_gate__beta_r); + const double var_Ca_independent_transient_outward_K_current_s1_gate__s1_infinity = 1 / (1 + exp(4.0070821529745047 + 0.14164305949008499 * var_chaste_interface__membrane__V)); + const double var_Ca_independent_transient_outward_K_current_s1_gate__tau_s1 = 0.020400000000000001 + 0.54659999999999997 / (1 + exp(327.99999999999994 + 10 * var_chaste_interface__membrane__V)); + const double var_Ca_independent_transient_outward_K_current_s2_gate__s2_infinity = 1 / (1 + exp(4.0070821529745047 + 0.14164305949008499 * var_chaste_interface__membrane__V)); + const double var_Ca_independent_transient_outward_K_current_s2_gate__tau_s2 = 5.75 / (1 + exp(327.99999999999994 + 10 * var_chaste_interface__membrane__V)) + 0.45000000000000001 / (1 + exp(0.96921975662133131 - 0.071581961345740866 * var_chaste_interface__membrane__V)); + const double var_Ca_independent_transient_outward_K_current_s3_gate__s3_infinity = 0.39975990396158467 + 0.60024009603841544 / (1 + exp(1.8506208911614319 + 0.036523009495982472 * var_chaste_interface__membrane__V)); + const double var_Ca_independent_transient_outward_K_current_s3_gate__tau_s3 = 0.5 + 7.5 / (1 + exp(46 + 2 * var_chaste_interface__membrane__V)); + const double var_L_type_Ca_channel_d_L_gate__E10 = 10 + var_chaste_interface__membrane__V; + const double var_L_type_Ca_channel_d_L_gate__alpha_d_L = (((var_chaste_interface__membrane__V >= -10.000000480800001) && (var_chaste_interface__membrane__V <= -9.9999995191999993)) ? (2.4040000000391526e-5 / (-1 + exp(1.0000000000162864e-7)) + 1039933.4442576389 * (10.000000480800001 + var_chaste_interface__membrane__V) * (-2.4040000000391526e-5 / (-1 + exp(1.0000000000162864e-7)) - 2.4039999999697637e-5 / (-1 + exp(-9.9999999998742257e-8)))) : (-50 * (10 + var_chaste_interface__membrane__V) / (-1 + exp(-2.0798668885191347 - 0.20798668885191349 * var_chaste_interface__membrane__V)))) + (((var_chaste_interface__membrane__V >= -45.000000249999999) && (var_chaste_interface__membrane__V <= -44.999999750000001)) ? (4.1799999996561256e-6 / (-1 + exp(9.9999999991773334e-8)) + 1999999.9999424887 * (45.000000249999999 + var_chaste_interface__membrane__V) * (-4.1800000005842713e-6 / (-1 + exp(-1.000000000139778e-7)) - 4.1799999996561256e-6 / (-1 + exp(9.9999999991773334e-8)))) : (-16.719999999999999 * (45 + var_chaste_interface__membrane__V) / (-1 + exp(-18 - 0.40000000000000002 * var_chaste_interface__membrane__V)))); + const double var_L_type_Ca_channel_d_L_gate__beta_d_L = (((var_chaste_interface__membrane__V >= -5.0000002500000003) && (var_chaste_interface__membrane__V <= -4.9999997499999997)) ? (-1.1200000000011203e-6 / (-1 + exp(-1.0000000000010001e-7)) + 1999999.9999979998 * (5.0000002500000003 + var_chaste_interface__membrane__V) * (1.1200000000011203e-6 / (-1 + exp(1.0000000000010001e-7)) + 1.1200000000011203e-6 / (-1 + exp(-1.0000000000010001e-7)))) : (4.4800000000000004 * (5 + var_chaste_interface__membrane__V) / (-1 + exp(2 + 0.40000000000000002 * var_chaste_interface__membrane__V)))); + const double var_L_type_Ca_channel_d_L_gate__d_L_infinity = 1 / (1 + exp(-0.14393939393939395 - 0.15151515151515152 * var_L_type_Ca_channel_d_L_gate__E10)); + const double var_L_type_Ca_channel_d_L_gate__tau_d_L = 1 / (var_L_type_Ca_channel_d_L_gate__alpha_d_L + var_L_type_Ca_channel_d_L_gate__beta_d_L); + const double var_L_type_Ca_channel_f_L_gate__E0_f_L = 18 + var_chaste_interface__membrane__V; + const double var_L_type_Ca_channel_f_L_gate__alpha_f_L = (((var_chaste_interface__membrane__V >= -18.000000400000001) && (var_chaste_interface__membrane__V <= -17.999999599999999)) ? (-3.3960000000976542e-6 / (-1 + exp(-1.0000000000287557e-7)) + 1249999.9999640554 * (18.000000400000001 + var_chaste_interface__membrane__V) * (3.3960000000976542e-6 / (-1 + exp(1.0000000000287557e-7)) + 3.3960000000976542e-6 / (-1 + exp(-1.0000000000287557e-7)))) : (8.4900000000000002 * (18 + var_chaste_interface__membrane__V) / (-1 + exp(4.5 + 0.25 * var_chaste_interface__membrane__V)))); + const double var_L_type_Ca_channel_f_L_gate__beta_f_L = 67.921999999999997 / (1 + exp(-0.25 * var_L_type_Ca_channel_f_L_gate__E0_f_L)); + const double var_L_type_Ca_channel_f_L_gate__f_L_infinity = var_L_type_Ca_channel_f_L_gate__alpha_f_L / (var_L_type_Ca_channel_f_L_gate__alpha_f_L + var_L_type_Ca_channel_f_L_gate__beta_f_L); + const double var_L_type_Ca_channel_f_L_gate__tau_f_L = 1 / (var_L_type_Ca_channel_f_L_gate__alpha_f_L + var_L_type_Ca_channel_f_L_gate__beta_f_L); + const double var_T_type_Ca_channel_d_T_gate__E0_d_T = 23.300000000000001 + var_chaste_interface__membrane__V; + const double var_T_type_Ca_channel_d_T_gate__alpha_d_T = 674.173 * exp(0.033333333333333333 * var_T_type_Ca_channel_d_T_gate__E0_d_T); + const double var_T_type_Ca_channel_d_T_gate__beta_d_T = 674.173 * exp(-0.033333333333333333 * var_T_type_Ca_channel_d_T_gate__E0_d_T); + const double var_T_type_Ca_channel_d_T_gate__d_T_infinity = 1 / (1 + exp(0.049180327868852458 - 0.16393442622950821 * var_T_type_Ca_channel_d_T_gate__E0_d_T)); + const double var_T_type_Ca_channel_d_T_gate__tau_d_T = 1 / (var_T_type_Ca_channel_d_T_gate__alpha_d_T + var_T_type_Ca_channel_d_T_gate__beta_d_T); + const double var_T_type_Ca_channel_f_T_gate__E0_f_T = 75 + var_chaste_interface__membrane__V; + const double var_T_type_Ca_channel_f_T_gate__alpha_f_T = 9.6370000000000005 * exp(-0.012004801920768308 * var_T_type_Ca_channel_f_T_gate__E0_f_T); + const double var_T_type_Ca_channel_f_T_gate__beta_f_T = 9.6370000000000005 * exp(0.065019505851755519 * var_T_type_Ca_channel_f_T_gate__E0_f_T); + const double var_T_type_Ca_channel_f_T_gate__f_T_infinity = var_T_type_Ca_channel_f_T_gate__alpha_f_T / (var_T_type_Ca_channel_f_T_gate__alpha_f_T + var_T_type_Ca_channel_f_T_gate__beta_f_T); + const double var_T_type_Ca_channel_f_T_gate__tau_f_T = 1 / (var_T_type_Ca_channel_f_T_gate__alpha_f_T + var_T_type_Ca_channel_f_T_gate__beta_f_T); + const double var_delayed_rectifier_K_current_pa_gate__alpha_p_a = 9 * exp(0.03941508020968823 * var_chaste_interface__membrane__V); + const double var_delayed_rectifier_K_current_pa_gate__beta_p_a = 1.3 * exp(-0.076769537847382163 * var_chaste_interface__membrane__V); + const double var_delayed_rectifier_K_current_pa_gate__p_a_infinity = 1 / (1 + exp(-0.68918918918918914 - 0.13513513513513511 * var_chaste_interface__membrane__V)); + const double var_delayed_rectifier_K_current_pa_gate__tau_p_a = 1 / (var_delayed_rectifier_K_current_pa_gate__alpha_p_a + var_delayed_rectifier_K_current_pa_gate__beta_p_a); + const double var_delayed_rectifier_K_current_pi_gate__alpha_p_i = 100 * exp(-0.018299935950224173 * var_chaste_interface__membrane__V); + const double var_delayed_rectifier_K_current_pi_gate__beta_p_i = 656 * exp(0.009420009985210585 * var_chaste_interface__membrane__V); + const double var_delayed_rectifier_K_current_pi_gate__p_i_infinity = 1 / (1 + exp(2.539728728905752 + 0.05358970648917756 * var_chaste_interface__membrane__V)); + const double var_delayed_rectifier_K_current_pi_gate__tau_p_i = 1 / (var_delayed_rectifier_K_current_pi_gate__alpha_p_i + var_delayed_rectifier_K_current_pi_gate__beta_p_i); + const double var_delayed_rectifier_K_current_z_gate__alpha_z = 1.6599999999999999 * exp(0.014398433450440593 * var_chaste_interface__membrane__V); + const double var_delayed_rectifier_K_current_z_gate__beta_z = 0.29999999999999999 * exp(-0.045816915605241454 * var_chaste_interface__membrane__V); + const double var_delayed_rectifier_K_current_z_gate__tau_z = 0.059999999999999998 + 1 / (var_delayed_rectifier_K_current_z_gate__alpha_z + var_delayed_rectifier_K_current_z_gate__beta_z); + const double var_delayed_rectifier_K_current_z_gate__z_infinity = 1 / (1 + exp(0.065217391304347824 - 0.072463768115942032 * var_chaste_interface__membrane__V)); + const double var_sodium_current_h1_gate__alpha_h = 44.899999999999999 * exp(-12.010771992818672 - 0.17953321364452424 * var_chaste_interface__membrane__V); + const double var_sodium_current_h1_gate__beta_h = 1491 / (1 + 323.30000000000001 * exp(-7.333333333333333 - 0.077519379844961239 * var_chaste_interface__membrane__V)); + const double var_sodium_current_h1_gate__h_infinity = var_sodium_current_h1_gate__alpha_h / (var_sodium_current_h1_gate__alpha_h + var_sodium_current_h1_gate__beta_h); + const double var_sodium_current_h1_gate__tau_h1 = 0.00014999999999999999 + 0.029999999999999999 / (1 + exp(6.666666666666667 + 0.16666666666666666 * var_chaste_interface__membrane__V)); + const double var_sodium_current_h2_gate__tau_h2 = 0.00044999999999999999 + 0.12 / (1 + exp(30 + 0.5 * var_chaste_interface__membrane__V)); + const double var_sodium_current_m_gate__E0_m = 44.399999999999999 + var_chaste_interface__membrane__V; + const double var_sodium_current_m_gate__alpha_m = (((var_chaste_interface__membrane__V >= -44.400001267299999) && (var_chaste_interface__membrane__V <= -44.399998732699999)) ? (0.00058295799999830145 / (-1 + exp(9.9999999999708629e-8)) + 394539.57232025318 * (44.400001267299999 + var_chaste_interface__membrane__V) * (-0.00058295799999830145 / (-1 + exp(9.9999999999708629e-8)) - 0.00058295799999830145 / (-1 + exp(-9.9999999999708629e-8)))) : (-460 * (44.399999999999999 + var_chaste_interface__membrane__V) / (-1 + exp(-3.5035114021936398 - 0.078907914463820727 * var_chaste_interface__membrane__V)))); + const double var_sodium_current_m_gate__beta_m = 18400 * exp(-0.078907914463820727 * var_sodium_current_m_gate__E0_m); + + + rY[9] = (var_chaste_interface__Ca_independent_transient_outward_K_current_r_gate__r + ((0.001 * var_Ca_independent_transient_outward_K_current_r_gate__r_infinity / var_Ca_independent_transient_outward_K_current_r_gate__tau_r) * mDt)) / (1.0 - ((-0.001 / var_Ca_independent_transient_outward_K_current_r_gate__tau_r) * mDt)); + rY[10] = (var_chaste_interface__Ca_independent_transient_outward_K_current_s1_gate__s1 + ((0.001 * var_Ca_independent_transient_outward_K_current_s1_gate__s1_infinity / var_Ca_independent_transient_outward_K_current_s1_gate__tau_s1) * mDt)) / (1.0 - ((-0.001 / var_Ca_independent_transient_outward_K_current_s1_gate__tau_s1) * mDt)); + rY[11] = (var_chaste_interface__Ca_independent_transient_outward_K_current_s2_gate__s2 + ((0.001 * var_Ca_independent_transient_outward_K_current_s2_gate__s2_infinity / var_Ca_independent_transient_outward_K_current_s2_gate__tau_s2) * mDt)) / (1.0 - ((-0.001 / var_Ca_independent_transient_outward_K_current_s2_gate__tau_s2) * mDt)); + rY[12] = (var_chaste_interface__Ca_independent_transient_outward_K_current_s3_gate__s3 + ((0.001 * var_Ca_independent_transient_outward_K_current_s3_gate__s3_infinity / var_Ca_independent_transient_outward_K_current_s3_gate__tau_s3) * mDt)) / (1.0 - ((-0.001 / var_Ca_independent_transient_outward_K_current_s3_gate__tau_s3) * mDt)); + rY[5] = (var_chaste_interface__L_type_Ca_channel_d_L_gate__d_L + ((0.001 * var_L_type_Ca_channel_d_L_gate__d_L_infinity / var_L_type_Ca_channel_d_L_gate__tau_d_L) * mDt)) / (1.0 - ((-0.001 / var_L_type_Ca_channel_d_L_gate__tau_d_L) * mDt)); + rY[6] = (var_chaste_interface__L_type_Ca_channel_f_L_gate__f_L + ((0.001 * var_L_type_Ca_channel_f_L_gate__f_L_infinity / var_L_type_Ca_channel_f_L_gate__tau_f_L) * mDt)) / (1.0 - ((-0.001 / var_L_type_Ca_channel_f_L_gate__tau_f_L) * mDt)); + rY[7] = (var_chaste_interface__T_type_Ca_channel_d_T_gate__d_T + ((0.001 * var_T_type_Ca_channel_d_T_gate__d_T_infinity / var_T_type_Ca_channel_d_T_gate__tau_d_T) * mDt)) / (1.0 - ((-0.001 / var_T_type_Ca_channel_d_T_gate__tau_d_T) * mDt)); + rY[8] = (var_chaste_interface__T_type_Ca_channel_f_T_gate__f_T + ((0.001 * var_T_type_Ca_channel_f_T_gate__f_T_infinity / var_T_type_Ca_channel_f_T_gate__tau_f_T) * mDt)) / (1.0 - ((-0.001 / var_T_type_Ca_channel_f_T_gate__tau_f_T) * mDt)); + rY[14] = (var_chaste_interface__delayed_rectifier_K_current_pa_gate__p_a + ((0.001 * var_delayed_rectifier_K_current_pa_gate__p_a_infinity / var_delayed_rectifier_K_current_pa_gate__tau_p_a) * mDt)) / (1.0 - ((-0.001 / var_delayed_rectifier_K_current_pa_gate__tau_p_a) * mDt)); + rY[15] = (var_chaste_interface__delayed_rectifier_K_current_pi_gate__p_i + ((0.001 * var_delayed_rectifier_K_current_pi_gate__p_i_infinity / var_delayed_rectifier_K_current_pi_gate__tau_p_i) * mDt)) / (1.0 - ((-0.001 / var_delayed_rectifier_K_current_pi_gate__tau_p_i) * mDt)); + rY[13] = (var_chaste_interface__delayed_rectifier_K_current_z_gate__z + ((0.001 * var_delayed_rectifier_K_current_z_gate__z_infinity / var_delayed_rectifier_K_current_z_gate__tau_z) * mDt)) / (1.0 - ((-0.001 / var_delayed_rectifier_K_current_z_gate__tau_z) * mDt)); + rY[3] = (var_chaste_interface__sodium_current_h1_gate__h1 + ((0.001 * var_sodium_current_h1_gate__h_infinity / var_sodium_current_h1_gate__tau_h1) * mDt)) / (1.0 - ((-0.001 / var_sodium_current_h1_gate__tau_h1) * mDt)); + rY[4] = (var_chaste_interface__sodium_current_h2_gate__h2 + ((0.001 * var_sodium_current_h1_gate__h_infinity / var_sodium_current_h2_gate__tau_h2) * mDt)) / (1.0 - ((-0.001 / var_sodium_current_h2_gate__tau_h2) * mDt)); + rY[2] = (var_chaste_interface__sodium_current_m_gate__m + ((0.001 * var_sodium_current_m_gate__alpha_m) * mDt)) / (1.0 - ((-0.001 * var_sodium_current_m_gate__alpha_m - 0.001 * var_sodium_current_m_gate__beta_m) * mDt)); + + double _guess[14] = {rY[23],rY[24],rY[26],rY[27],rY[28],rY[25],rY[22],rY[18],rY[19],rY[20],rY[21],rY[1],rY[17],rY[16]}; + CardiacNewtonSolver<14,Cellaslanidi_atrial_model_2009FromCellMLBackwardEuler>* _p_solver = CardiacNewtonSolver<14,Cellaslanidi_atrial_model_2009FromCellMLBackwardEuler>::Instance(); + _p_solver->Solve(*this, var_chaste_interface__environment__time_converted, _guess); + rY[23] = _guess[0]; + rY[24] = _guess[1]; + rY[26] = _guess[2]; + rY[27] = _guess[3]; + rY[28] = _guess[4]; + rY[25] = _guess[5]; + rY[22] = _guess[6]; + rY[18] = _guess[7]; + rY[19] = _guess[8]; + rY[20] = _guess[9]; + rY[21] = _guess[10]; + rY[1] = _guess[11]; + rY[17] = _guess[12]; + rY[16] = _guess[13]; + } + + std::vector Cellaslanidi_atrial_model_2009FromCellMLBackwardEuler::ComputeDerivedQuantities(double var_chaste_interface__environment__time_converted, const std::vector & rY) + { + // Inputs: + // Time units: millisecond + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -80.0 + double var_chaste_interface__intracellular_ion_concentrations__Ca_i = rY[1]; + // Units: millimolar; Initial value: 7.1e-05 + double var_chaste_interface__sodium_current_m_gate__m = rY[2]; + // Units: dimensionless; Initial value: 0.01309 + double var_chaste_interface__sodium_current_h1_gate__h1 = rY[3]; + // Units: dimensionless; Initial value: 0.706 + double var_chaste_interface__sodium_current_h2_gate__h2 = rY[4]; + // Units: dimensionless; Initial value: 0.61493 + double var_chaste_interface__L_type_Ca_channel_d_L_gate__d_L = rY[5]; + // Units: dimensionless; Initial value: 3e-05 + double var_chaste_interface__L_type_Ca_channel_f_L_gate__f_L = rY[6]; + // Units: dimensionless; Initial value: 0.99981 + double var_chaste_interface__delayed_rectifier_K_current_z_gate__z = rY[13]; + // Units: dimensionless; Initial value: 0.02032 + double var_chaste_interface__delayed_rectifier_K_current_pa_gate__p_a = rY[14]; + // Units: dimensionless; Initial value: 0.00016 + double var_chaste_interface__delayed_rectifier_K_current_pi_gate__p_i = rY[15]; + // Units: dimensionless; Initial value: 0.76898 + double var_chaste_interface__intracellular_ion_concentrations__Na_i = rY[16]; + // Units: millimolar; Initial value: 8.4 + double var_chaste_interface__intracellular_ion_concentrations__K_i = rY[17]; + // Units: millimolar; Initial value: 100.0 + double var_chaste_interface__cleft_space_ion_concentrations__K_c = rY[22]; + // Units: millimolar; Initial value: 5.0 + double var_chaste_interface__Ca_handling_by_the_SR__Ca_rel = rY[23]; + // Units: millimolar; Initial value: 0.726776 + double var_chaste_interface__Ca_handling_by_the_SR__F2 = rY[27]; + // Units: dimensionless; Initial value: 0.002262 + + // Mathematics + const double var_L_type_Ca_channel__E_Ca_app = 50; // millivolt + const double var_Na_Ca_ion_exchanger_current__d_NaCa = 0.00029999999999999997; // per_millimolar_4 + const double var_Na_Ca_ion_exchanger_current__gamma = 0.45000000000000001; // dimensionless + const double var_environment__CT = 1; // dimensionless + const double var_environment__PM = 0; // dimensionless + const double var_Ca_handling_by_the_SR__i_rel = pow(var_chaste_interface__Ca_handling_by_the_SR__F2, 2) * (-var_chaste_interface__intracellular_ion_concentrations__Ca_i + var_chaste_interface__Ca_handling_by_the_SR__Ca_rel) * mParameters[0] / pow((0.25 + var_chaste_interface__Ca_handling_by_the_SR__F2), 2); // picoA + const double var_inward_rectifier__KmK1 = 0.58999999999999997; // millimolar + const double var_inward_rectifier__shiftK1 = -3.6000000000000001; // millivolt + const double var_inward_rectifier__steepK1 = 1.393; // dimensionless + const double var_membrane__Cm_converted = 0.001 * mParameters[4]; // uF + const double var_membrane__F = 96487; // coulomb_per_mole + const double var_membrane__R = 8314; // millijoule_per_mole_kelvin + const double var_membrane__T = 308; // kelvin + const double var_Ca_independent_transient_outward_K_current__E_K = var_membrane__R * var_membrane__T * log(var_chaste_interface__cleft_space_ion_concentrations__K_c / var_chaste_interface__intracellular_ion_concentrations__K_i) / var_membrane__F; // millivolt + const double var_L_type_Ca_channel__d_prime = 1 / (1 + exp(1.9166666666666667 - 0.083333333333333329 * var_chaste_interface__membrane__V)); // dimensionless + const double var_L_type_Ca_channel__i_Ca_L = (((var_environment__CT == 1) && (var_environment__PM == 0)) ? (1.8 * (-var_L_type_Ca_channel__E_Ca_app + var_chaste_interface__membrane__V) * (var_chaste_interface__L_type_Ca_channel_d_L_gate__d_L * var_chaste_interface__L_type_Ca_channel_f_L_gate__f_L + var_L_type_Ca_channel__d_prime) * mParameters[3]) : (((var_environment__PM == 1) && (var_environment__CT == 0)) ? (2.1000000000000001 * (-var_L_type_Ca_channel__E_Ca_app + var_chaste_interface__membrane__V) * (var_chaste_interface__L_type_Ca_channel_d_L_gate__d_L * var_chaste_interface__L_type_Ca_channel_f_L_gate__f_L + var_L_type_Ca_channel__d_prime) * mParameters[3]) : ((-var_L_type_Ca_channel__E_Ca_app + var_chaste_interface__membrane__V) * (var_chaste_interface__L_type_Ca_channel_d_L_gate__d_L * var_chaste_interface__L_type_Ca_channel_f_L_gate__f_L + var_L_type_Ca_channel__d_prime) * mParameters[3]))); // picoA + const double var_L_type_Ca_channel__i_Ca_L_converted = 9.9999999999999995e-7 * HeartConfig::Instance()->GetCapacitance() * var_L_type_Ca_channel__i_Ca_L / var_membrane__Cm_converted; // uA_per_cm2 + const double var_Na_Ca_ion_exchanger_current__i_NaCa = (pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, 3) * mParameters[1] * exp(var_Na_Ca_ion_exchanger_current__gamma * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T)) - pow(mParameters[2], 3) * var_chaste_interface__intracellular_ion_concentrations__Ca_i * exp((-1 + var_Na_Ca_ion_exchanger_current__gamma) * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * mParameters[9] / (1 + (pow(mParameters[2], 3) * var_chaste_interface__intracellular_ion_concentrations__Ca_i + pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, 3) * mParameters[1]) * var_Na_Ca_ion_exchanger_current__d_NaCa); // picoA + const double var_Na_Ca_ion_exchanger_current__i_NaCa_converted = 9.9999999999999995e-7 * HeartConfig::Instance()->GetCapacitance() * var_Na_Ca_ion_exchanger_current__i_NaCa / var_membrane__Cm_converted; // uA_per_cm2 + const double var_delayed_rectifier_K_current__i_Kr = (-var_Ca_independent_transient_outward_K_current__E_K + var_chaste_interface__membrane__V) * mParameters[7] * var_chaste_interface__delayed_rectifier_K_current_pa_gate__p_a * var_chaste_interface__delayed_rectifier_K_current_pi_gate__p_i; // picoA + const double var_delayed_rectifier_K_current__i_Kr_converted = 9.9999999999999995e-7 * HeartConfig::Instance()->GetCapacitance() * var_delayed_rectifier_K_current__i_Kr / var_membrane__Cm_converted; // uA_per_cm2 + const double var_delayed_rectifier_K_current__i_Ks = (-var_Ca_independent_transient_outward_K_current__E_K + var_chaste_interface__membrane__V) * mParameters[8] * var_chaste_interface__delayed_rectifier_K_current_z_gate__z; // picoA + const double var_delayed_rectifier_K_current__i_Ks_converted = 9.9999999999999995e-7 * HeartConfig::Instance()->GetCapacitance() * var_delayed_rectifier_K_current__i_Ks / var_membrane__Cm_converted; // uA_per_cm2 + const double var_inward_rectifier__i_K1 = (((var_environment__CT == 1) && (var_environment__PM == 0)) ? (2 * pow(var_chaste_interface__cleft_space_ion_concentrations__K_c, 3) * (-var_Ca_independent_transient_outward_K_current__E_K + var_chaste_interface__membrane__V) * mParameters[6] / ((1 + exp((-var_Ca_independent_transient_outward_K_current__E_K - var_inward_rectifier__shiftK1 + var_chaste_interface__membrane__V) * var_inward_rectifier__steepK1 * var_membrane__F / (var_membrane__R * var_membrane__T))) * pow((var_chaste_interface__cleft_space_ion_concentrations__K_c + var_inward_rectifier__KmK1), 3))) : (((var_environment__PM == 1) && (var_environment__CT == 0)) ? (2.5 * pow(var_chaste_interface__cleft_space_ion_concentrations__K_c, 3) * (-var_Ca_independent_transient_outward_K_current__E_K + var_chaste_interface__membrane__V) * mParameters[6] / ((1 + exp((-var_Ca_independent_transient_outward_K_current__E_K - var_inward_rectifier__shiftK1 + var_chaste_interface__membrane__V) * var_inward_rectifier__steepK1 * var_membrane__F / (var_membrane__R * var_membrane__T))) * pow((var_chaste_interface__cleft_space_ion_concentrations__K_c + var_inward_rectifier__KmK1), 3))) : (pow(var_chaste_interface__cleft_space_ion_concentrations__K_c, 3) * (-var_Ca_independent_transient_outward_K_current__E_K + var_chaste_interface__membrane__V) * mParameters[6] / ((1 + exp((-var_Ca_independent_transient_outward_K_current__E_K - var_inward_rectifier__shiftK1 + var_chaste_interface__membrane__V) * var_inward_rectifier__steepK1 * var_membrane__F / (var_membrane__R * var_membrane__T))) * pow((var_chaste_interface__cleft_space_ion_concentrations__K_c + var_inward_rectifier__KmK1), 3))))); // picoA + const double var_inward_rectifier__i_K1_converted = 9.9999999999999995e-7 * HeartConfig::Instance()->GetCapacitance() * var_inward_rectifier__i_K1 / var_membrane__Cm_converted; // uA_per_cm2 + const double var_membrane__i_Stim_converted = GetIntracellularAreaStimulus(var_chaste_interface__environment__time_converted); // uA_per_cm2 + const double var_sodium_current__i_Na = (((var_chaste_interface__membrane__V >= -2.6539450910485349e-6) && (var_chaste_interface__membrane__V <= 2.6539450910485349e-6)) ? (188398.77346612973 * (2.6539450910485349e-6 + var_chaste_interface__membrane__V) * (0.0096486999999999996 * pow(var_chaste_interface__sodium_current_m_gate__m, 3) * (-1 + exp(9.9999999999999995e-8 - log(mParameters[2] / var_chaste_interface__intracellular_ion_concentrations__Na_i))) * (0.36499999999999999 * var_chaste_interface__sodium_current_h2_gate__h2 + 0.63500000000000001 * var_chaste_interface__sodium_current_h1_gate__h1) * mParameters[2] * mParameters[5] / (-1 + exp(9.9999999999999995e-8)) + 0.0096486999999999996 * pow(var_chaste_interface__sodium_current_m_gate__m, 3) * (-1 + exp(-9.9999999999999995e-8 - log(mParameters[2] / var_chaste_interface__intracellular_ion_concentrations__Na_i))) * (0.36499999999999999 * var_chaste_interface__sodium_current_h2_gate__h2 + 0.63500000000000001 * var_chaste_interface__sodium_current_h1_gate__h1) * mParameters[2] * mParameters[5] / (-1 + exp(-9.9999999999999995e-8))) - 0.0096486999999999996 * pow(var_chaste_interface__sodium_current_m_gate__m, 3) * (-1 + exp(-9.9999999999999995e-8 - log(mParameters[2] / var_chaste_interface__intracellular_ion_concentrations__Na_i))) * (0.36499999999999999 * var_chaste_interface__sodium_current_h2_gate__h2 + 0.63500000000000001 * var_chaste_interface__sodium_current_h1_gate__h1) * mParameters[2] * mParameters[5] / (-1 + exp(-9.9999999999999995e-8))) : (3635.606491085292 * pow(var_chaste_interface__sodium_current_m_gate__m, 3) * (-1 + exp(0.037679754693225945 * var_chaste_interface__membrane__V - log(mParameters[2] / var_chaste_interface__intracellular_ion_concentrations__Na_i))) * (0.36499999999999999 * var_chaste_interface__sodium_current_h2_gate__h2 + 0.63500000000000001 * var_chaste_interface__sodium_current_h1_gate__h1) * mParameters[2] * var_chaste_interface__membrane__V * mParameters[5] / (-1 + exp(0.037679754693225945 * var_chaste_interface__membrane__V)))); // picoA + const double var_sodium_current__i_Na_converted = 9.9999999999999995e-7 * HeartConfig::Instance()->GetCapacitance() * var_sodium_current__i_Na / var_membrane__Cm_converted; // uA_per_cm2 + + std::vector dqs(10); + dqs[0] = var_Ca_handling_by_the_SR__i_rel; + dqs[1] = var_L_type_Ca_channel__i_Ca_L_converted; + dqs[2] = var_membrane__Cm_converted; + dqs[3] = var_sodium_current__i_Na_converted; + dqs[4] = var_inward_rectifier__i_K1_converted; + dqs[5] = var_delayed_rectifier_K_current__i_Kr_converted; + dqs[6] = var_delayed_rectifier_K_current__i_Ks_converted; + dqs[7] = var_Na_Ca_ion_exchanger_current__i_NaCa_converted; + dqs[8] = var_membrane__i_Stim_converted; + dqs[9] = var_chaste_interface__environment__time_converted; + return dqs; + } + +template<> +void OdeSystemInformation::Initialise(void) +{ + this->mSystemName = "aslanidi_atrial_model_2009"; + this->mFreeVariableName = "time"; + this->mFreeVariableUnits = "millisecond"; + + // rY[0]: + this->mVariableNames.push_back("membrane_voltage"); + this->mVariableUnits.push_back("millivolt"); + this->mInitialConditions.push_back(-80.0); + + // rY[1]: + this->mVariableNames.push_back("cytosolic_calcium_concentration"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(7.1e-05); + + // rY[2]: + this->mVariableNames.push_back("sodium_current_m_gate__m"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.01309); + + // rY[3]: + this->mVariableNames.push_back("sodium_current_h1_gate__h1"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.706); + + // rY[4]: + this->mVariableNames.push_back("sodium_current_h2_gate__h2"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.61493); + + // rY[5]: + this->mVariableNames.push_back("L_type_Ca_channel_d_L_gate__d_L"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(3e-05); + + // rY[6]: + this->mVariableNames.push_back("L_type_Ca_channel_f_L_gate__f_L"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.99981); + + // rY[7]: + this->mVariableNames.push_back("T_type_Ca_channel_d_T_gate__d_T"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.00046); + + // rY[8]: + this->mVariableNames.push_back("T_type_Ca_channel_f_T_gate__f_T"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.30752); + + // rY[9]: + this->mVariableNames.push_back("Ca_independent_transient_outward_K_current_r_gate__r"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(6e-05); + + // rY[10]: + this->mVariableNames.push_back("Ca_independent_transient_outward_K_current_s1_gate__s1"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.5753); + + // rY[11]: + this->mVariableNames.push_back("Ca_independent_transient_outward_K_current_s2_gate__s2"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.39871); + + // rY[12]: + this->mVariableNames.push_back("Ca_independent_transient_outward_K_current_s3_gate__s3"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.57363); + + // rY[13]: + this->mVariableNames.push_back("delayed_rectifier_K_current_z_gate__z"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.02032); + + // rY[14]: + this->mVariableNames.push_back("delayed_rectifier_K_current_pa_gate__p_a"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.00016); + + // rY[15]: + this->mVariableNames.push_back("delayed_rectifier_K_current_pi_gate__p_i"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.76898); + + // rY[16]: + this->mVariableNames.push_back("cytosolic_sodium_concentration"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(8.4); + + // rY[17]: + this->mVariableNames.push_back("cytosolic_potassium_concentration"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(100.0); + + // rY[18]: + this->mVariableNames.push_back("intracellular_Ca_buffering__O_C"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.029108); + + // rY[19]: + this->mVariableNames.push_back("intracellular_Ca_buffering__O_TC"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.014071); + + // rY[20]: + this->mVariableNames.push_back("intracellular_Ca_buffering__O_TMgC"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.214036); + + // rY[21]: + this->mVariableNames.push_back("intracellular_Ca_buffering__O_TMgMg"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.693565); + + // rY[22]: + this->mVariableNames.push_back("extracellular_potassium_concentration"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(5.0); + + // rY[23]: + this->mVariableNames.push_back("Ca_handling_by_the_SR__Ca_rel"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(0.726776); + + // rY[24]: + this->mVariableNames.push_back("Ca_handling_by_the_SR__Ca_up"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(0.730866); + + // rY[25]: + this->mVariableNames.push_back("Ca_handling_by_the_SR__O_Calse"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.465921); + + // rY[26]: + this->mVariableNames.push_back("Ca_handling_by_the_SR__F1"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.288039); + + // rY[27]: + this->mVariableNames.push_back("Ca_handling_by_the_SR__F2"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.002262); + + // rY[28]: + this->mVariableNames.push_back("Ca_handling_by_the_SR__F3"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.612697); + + // mParameters[0]: + this->mParameterNames.push_back("SR_release_current_max"); + this->mParameterUnits.push_back("picoA_per_millimolar"); + + // mParameters[1]: + this->mParameterNames.push_back("extracellular_calcium_concentration"); + this->mParameterUnits.push_back("millimolar"); + + // mParameters[2]: + this->mParameterNames.push_back("extracellular_sodium_concentration"); + this->mParameterUnits.push_back("millimolar"); + + // mParameters[3]: + this->mParameterNames.push_back("membrane_L_type_calcium_current_conductance"); + this->mParameterUnits.push_back("nanoS"); + + // mParameters[4]: + this->mParameterNames.push_back("membrane__Cm"); + this->mParameterUnits.push_back("nanoF"); + + // mParameters[5]: + this->mParameterNames.push_back("membrane_fast_sodium_current_conductance"); + this->mParameterUnits.push_back("nanolitre_per_second"); + + // mParameters[6]: + this->mParameterNames.push_back("membrane_inward_rectifier_potassium_current_conductance"); + this->mParameterUnits.push_back("nanoS"); + + // mParameters[7]: + this->mParameterNames.push_back("membrane_rapid_delayed_rectifier_potassium_current_conductance"); + this->mParameterUnits.push_back("nanoS"); + + // mParameters[8]: + this->mParameterNames.push_back("membrane_slow_delayed_rectifier_potassium_current_conductance"); + this->mParameterUnits.push_back("nanoS"); + + // mParameters[9]: + this->mParameterNames.push_back("membrane_sodium_calcium_exchanger_current_conductance"); + this->mParameterUnits.push_back("picoA_per_millimolar_4"); + + // Derived Quantity index [0]: + this->mDerivedQuantityNames.push_back("SR_release_current"); + this->mDerivedQuantityUnits.push_back("picoA"); + + // Derived Quantity index [1]: + this->mDerivedQuantityNames.push_back("membrane_L_type_calcium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [2]: + this->mDerivedQuantityNames.push_back("membrane_capacitance"); + this->mDerivedQuantityUnits.push_back("uF"); + + // Derived Quantity index [3]: + this->mDerivedQuantityNames.push_back("membrane_fast_sodium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [4]: + this->mDerivedQuantityNames.push_back("membrane_inward_rectifier_potassium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [5]: + this->mDerivedQuantityNames.push_back("membrane_rapid_delayed_rectifier_potassium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [6]: + this->mDerivedQuantityNames.push_back("membrane_slow_delayed_rectifier_potassium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [7]: + this->mDerivedQuantityNames.push_back("membrane_sodium_calcium_exchanger_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [8]: + this->mDerivedQuantityNames.push_back("membrane_stimulus_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [9]: + this->mDerivedQuantityNames.push_back("time"); + this->mDerivedQuantityUnits.push_back("millisecond"); + + this->mInitialised = true; +} + +// Serialization for Boost >= 1.36 +#include "SerializationExportWrapperForCpp.hpp" +CHASTE_CLASS_EXPORT(Cellaslanidi_atrial_model_2009FromCellMLBackwardEuler) + diff --git a/chaste_codegen/tests/numerical/baseline/BE/aslanidi_atrial_model_2009.hpp b/chaste_codegen/tests/numerical/baseline/BE/aslanidi_atrial_model_2009.hpp new file mode 100644 index 00000000..2e3fbe1d --- /dev/null +++ b/chaste_codegen/tests/numerical/baseline/BE/aslanidi_atrial_model_2009.hpp @@ -0,0 +1,87 @@ +#ifndef CELLASLANIDI_ATRIAL_MODEL_2009FROMCELLMLBACKWARDEULER_HPP_ +#define CELLASLANIDI_ATRIAL_MODEL_2009FROMCELLMLBACKWARDEULER_HPP_ + +//! @file +//! +//! This source file was generated from CellML by chaste_codegen version (version omitted as unimportant) +//! +//! Model: aslanidi_atrial_model_2009 +//! +//! Processed by chaste_codegen: https://github.com/ModellingWebLab/chaste-codegen +//! (translator: chaste_codegen, model type: BackwardEuler) +//! on (date omitted as unimportant) +//! +//! + +#include "ChasteSerialization.hpp" +#include +#include "AbstractStimulusFunction.hpp" +#include "AbstractBackwardEulerCardiacCell.hpp" + +class Cellaslanidi_atrial_model_2009FromCellMLBackwardEuler : public AbstractBackwardEulerCardiacCell<14> +{ + friend class boost::serialization::access; + template + void serialize(Archive & archive, const unsigned int version) + { + archive & boost::serialization::base_object >(*this); + + } + + // + // Settable parameters and readable variables + // + + +private: +const bool is_concentration[29] = {false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, true, false, false, false, false, true, false, false, false, false, false, false}; +const bool is_probability[29] = {false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false}; +public: + + boost::shared_ptr UseCellMLDefaultStimulus(); + double GetIntracellularCalciumConcentration(); + Cellaslanidi_atrial_model_2009FromCellMLBackwardEuler(boost::shared_ptr /* unused; should be empty */, boost::shared_ptr pIntracellularStimulus); + ~Cellaslanidi_atrial_model_2009FromCellMLBackwardEuler(); + void VerifyStateVariables(); + double GetIIonic(const std::vector* pStateVariables=NULL);void ComputeResidual(double var_chaste_interface__environment__time_converted, const double rCurrentGuess[14], double rResidual[14]); + void ComputeJacobian(double var_chaste_interface__environment__time_converted, const double rCurrentGuess[14], double rJacobian[14][14]);protected: + void UpdateTransmembranePotential(double var_chaste_interface__environment__time_converted); + void ComputeOneStepExceptVoltage(double var_chaste_interface__environment__time_converted); + + std::vector ComputeDerivedQuantities(double var_chaste_interface__environment__time_converted, const std::vector & rY); +}; + +// Needs to be included last +#include "SerializationExportWrapper.hpp" +CHASTE_CLASS_EXPORT(Cellaslanidi_atrial_model_2009FromCellMLBackwardEuler) + +namespace boost +{ + namespace serialization + { + template + inline void save_construct_data( + Archive & ar, const Cellaslanidi_atrial_model_2009FromCellMLBackwardEuler * t, const unsigned int fileVersion) + { + const boost::shared_ptr p_solver = t->GetSolver(); + const boost::shared_ptr p_stimulus = t->GetStimulusFunction(); + ar << p_solver; + ar << p_stimulus; + } + + template + inline void load_construct_data( + Archive & ar, Cellaslanidi_atrial_model_2009FromCellMLBackwardEuler * t, const unsigned int fileVersion) + { + boost::shared_ptr p_solver; + boost::shared_ptr p_stimulus; + ar >> p_solver; + ar >> p_stimulus; + ::new(t)Cellaslanidi_atrial_model_2009FromCellMLBackwardEuler(p_solver, p_stimulus); + } + + } + +} + +#endif // CELLASLANIDI_ATRIAL_MODEL_2009FROMCELLMLBACKWARDEULER_HPP_ \ No newline at end of file diff --git a/chaste_codegen/tests/numerical/baseline/BE/bondarenko_szigeti_bett_kim_rasmusson_2004_apical.cpp b/chaste_codegen/tests/numerical/baseline/BE/bondarenko_szigeti_bett_kim_rasmusson_2004_apical.cpp new file mode 100644 index 00000000..da9a18ac --- /dev/null +++ b/chaste_codegen/tests/numerical/baseline/BE/bondarenko_szigeti_bett_kim_rasmusson_2004_apical.cpp @@ -0,0 +1,2230 @@ +//! @file +//! +//! This source file was generated from CellML by chaste_codegen version (version omitted as unimportant) +//! +//! Model: bondarenko_2004_apical +//! +//! Processed by chaste_codegen: https://github.com/ModellingWebLab/chaste-codegen +//! (translator: chaste_codegen, model type: BackwardEuler) +//! on (date omitted as unimportant) +//! +//! + +#include "CardiacNewtonSolver.hpp" +#include "bondarenko_szigeti_bett_kim_rasmusson_2004_apical.hpp" +#include +#include +#include +#include +#include "Exception.hpp" +#include "OdeSystemInformation.hpp" +#include "RegularStimulus.hpp" +#include "HeartConfig.hpp" +#include "IsNan.hpp" +#include "MathsCustomFunctions.hpp" + + + + + + boost::shared_ptr Cellbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLBackwardEuler::UseCellMLDefaultStimulus() + { + // Use the default stimulus specified by CellML metadata + const double var_chaste_interface__membrane__stim_amplitude_converted = -80 * HeartConfig::Instance()->GetCapacitance(); // uA_per_cm2 + const double var_chaste_interface__membrane__stim_duration = 0.5; // millisecond + const double var_chaste_interface__membrane__stim_period = 71.430000000000007; // millisecond + const double var_chaste_interface__membrane__stim_start = 0; // millisecond + boost::shared_ptr p_cellml_stim(new RegularStimulus( + -fabs(var_chaste_interface__membrane__stim_amplitude_converted), + var_chaste_interface__membrane__stim_duration, + var_chaste_interface__membrane__stim_period, + var_chaste_interface__membrane__stim_start + )); + mpIntracellularStimulus = p_cellml_stim; + return p_cellml_stim; + } + double Cellbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLBackwardEuler::GetIntracellularCalciumConcentration() + { + return mStateVariables[1]; + } + Cellbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLBackwardEuler::Cellbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLBackwardEuler(boost::shared_ptr /* unused; should be empty */, boost::shared_ptr pIntracellularStimulus) + : AbstractBackwardEulerCardiacCell<32>( + 41, + 0, + pIntracellularStimulus) + { + // Time units: millisecond + // + this->mpSystemInfo = OdeSystemInformation::Instance(); + Init(); + + // We have a default stimulus specified in the CellML file metadata + this->mHasDefaultStimulusFromCellML = true; + + this->mParameters[0] = 1.7399999999999999e-5; // (var_calcium_fluxes__v2) [per_millisecond] + this->mParameters[1] = 4.5; // (var_calcium_fluxes__v1) [per_millisecond] + this->mParameters[2] = 0.45000000000000001; // (var_calcium_fluxes__v3) [micromolar_per_millisecond] + this->mParameters[3] = 1; // (var_sodium_concentration__conc_clamp) [dimensionless] + this->mParameters[4] = 1800; // (var_membrane__Cao) [micromolar] + this->mParameters[5] = 5400; // (var_membrane__Ko) [micromolar] + this->mParameters[6] = 140000; // (var_membrane__Nao) [micromolar] + this->mParameters[7] = 0.1729; // (var_L_type_calcium_current__g_CaL) [milliS_per_microF] + this->mParameters[8] = 1; // (var_membrane__Cm) [microF_per_cm2] + this->mParameters[9] = 13; // (var_fast_sodium_current__g_Na) [milliS_per_microF] + this->mParameters[10] = 0; // (var_fast_sodium_current__shift_INa_inact) [millivolt] + this->mParameters[11] = 0.29380000000000001; // (var_time_independent_potassium_current__g_K1) [milliS_per_microF] + this->mParameters[12] = 0.050000000000000003; // (var_non_inactivating_steady_state_potassium_current__g_Kss) [milliS_per_microF] + this->mParameters[13] = 0.078; // (var_rapid_delayed_rectifier_potassium_current__g_Kr) [milliS_per_microF] + this->mParameters[14] = 0.0057499999999999999; // (var_slow_delayed_rectifier_potassium_current__g_Ks) [milliS_per_microF] + this->mParameters[15] = 292.80000000000001; // (var_sodium_calcium_exchange_current__k_NaCa) [picoA_per_picoF] + this->mParameters[16] = 0.40670000000000001; // (var_fast_transient_outward_potassium_current__g_Kto_f) [milliS_per_microF] + } + + Cellbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLBackwardEuler::~Cellbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLBackwardEuler() + { + } + + + void Cellbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLBackwardEuler::VerifyStateVariables() + { + std::vector& rY = rGetStateVariables(); + std::string error_message = ""; + + for (unsigned i=0; i < 41; i++) + { + if(std::isnan(rY[i])) + { + error_message += "State variable " + this->rGetStateVariableNames()[i] + " is not a number\n"; + } + if(std::isinf(rY[i])) + { + error_message += "State variable " + this->rGetStateVariableNames()[i] + " has become INFINITE\n"; + } + if(this->is_concentration[i] && rY[i] < 0) + { + error_message += "Concentration " + this->rGetStateVariableNames()[i] + " below 0\n"; + } + if(this->is_probability[i] && rY[i] < 0) + { + error_message += "Probability " + this->rGetStateVariableNames()[i] + " below 0\n"; + } + if(this->is_probability[i] && rY[i] > 1) + { + error_message += "Probability " + this->rGetStateVariableNames()[i] + " above 1\n"; + } + } + if (error_message != ""){ + EXCEPTION(DumpState(error_message)); + } + } + + double Cellbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLBackwardEuler::GetIIonic(const std::vector* pStateVariables) + { + // For state variable interpolation (SVI) we read in interpolated state variables, + // otherwise for ionic current interpolation (ICI) we use the state variables of this model (node). + if (!pStateVariables) pStateVariables = &rGetStateVariables(); + const std::vector& rY = *pStateVariables; + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -82.4202 + double var_chaste_interface__calcium_concentration__Cai_converted = rY[1]; + // Units: millimolar; Initial value: 0.000115001 + double var_chaste_interface__L_type_calcium_current__O = rY[11]; + // Units: dimensionless; Initial value: 9.30308e-19 + double var_chaste_interface__sodium_concentration__Nai = rY[18]; + // Units: micromolar; Initial value: 14237.1 + double var_chaste_interface__fast_sodium_current__O_Na = rY[19]; + // Units: dimensionless; Initial value: 7.13483e-07 + double var_chaste_interface__potassium_concentration__Ki = rY[27]; + // Units: micromolar; Initial value: 143720.0 + double var_chaste_interface__fast_transient_outward_potassium_current__ato_f = rY[28]; + // Units: dimensionless; Initial value: 0.00265563 + double var_chaste_interface__fast_transient_outward_potassium_current__ito_f = rY[29]; + // Units: dimensionless; Initial value: 0.999977 + double var_chaste_interface__slow_transient_outward_potassium_current__ato_s = rY[30]; + // Units: dimensionless; Initial value: 0.000417069 + double var_chaste_interface__slow_transient_outward_potassium_current__ito_s = rY[31]; + // Units: dimensionless; Initial value: 0.998543 + double var_chaste_interface__slow_delayed_rectifier_potassium_current__nKs = rY[32]; + // Units: dimensionless; Initial value: 0.000262753 + double var_chaste_interface__ultra_rapidly_activating_delayed_rectifier_potassium_current__aur = rY[33]; + // Units: dimensionless; Initial value: 0.000417069 + double var_chaste_interface__ultra_rapidly_activating_delayed_rectifier_potassium_current__iur = rY[34]; + // Units: dimensionless; Initial value: 0.998543 + double var_chaste_interface__non_inactivating_steady_state_potassium_current__aKss = rY[35]; + // Units: dimensionless; Initial value: 0.000417069 + double var_chaste_interface__non_inactivating_steady_state_potassium_current__iKss = rY[36]; + // Units: dimensionless; Initial value: 1.0 + double var_chaste_interface__rapid_delayed_rectifier_potassium_current__O_K = rY[37]; + // Units: dimensionless; Initial value: 0.000175298 + + const double var_L_type_calcium_current__E_CaL = 63; // millivolt + const double var_calcium_activated_chloride_current__E_Cl = -40; // millivolt + const double var_calcium_activated_chloride_current__Km_Cl = 10; // micromolar + const double var_calcium_activated_chloride_current__g_ClCa = 10; // milliS_per_microF + const double var_calcium_background_current__g_Cab = 0.00036699999999999998; // milliS_per_microF + const double var_calcium_concentration__Cai = 1000 * var_chaste_interface__calcium_concentration__Cai_converted; // micromolar + const double var_calcium_pump_current__Km_pCa = 0.5; // micromolar + const double var_calcium_pump_current__i_pCa_max = 1; // picoA_per_picoF + const double var_calcium_pump_current__i_pCa = pow(var_calcium_concentration__Cai, 2) * var_calcium_pump_current__i_pCa_max / (pow(var_calcium_concentration__Cai, 2) + pow(var_calcium_pump_current__Km_pCa, 2)); // picoA_per_picoF + const double var_membrane__F = 96.5; // coulomb_per_millimole + const double var_membrane__R = 8.3140000000000001; // joule_per_mole_kelvin + const double var_membrane__T = 298; // kelvin + const double var_calcium_background_current__E_CaN = 0.5 * var_membrane__R * var_membrane__T * log(mParameters[4] / var_calcium_concentration__Cai) / var_membrane__F; // millivolt + const double var_L_type_calcium_current__i_CaL = (-var_L_type_calcium_current__E_CaL + var_chaste_interface__membrane__V) * var_chaste_interface__L_type_calcium_current__O * mParameters[7]; // picoA_per_picoF + const double var_L_type_calcium_current__i_CaL_converted = HeartConfig::Instance()->GetCapacitance() * var_L_type_calcium_current__i_CaL; // uA_per_cm2 + const double var_calcium_activated_chloride_current__O_ClCa = 0.20000000000000001 / (1 + exp(5.9871794871794881 - 0.12820512820512822 * var_chaste_interface__membrane__V)); // dimensionless + const double var_calcium_activated_chloride_current__i_ClCa = (-var_calcium_activated_chloride_current__E_Cl + var_chaste_interface__membrane__V) * var_calcium_activated_chloride_current__O_ClCa * var_calcium_activated_chloride_current__g_ClCa * var_calcium_concentration__Cai / (var_calcium_activated_chloride_current__Km_Cl + var_calcium_concentration__Cai); // picoA_per_picoF + const double var_calcium_background_current__i_Cab = (-var_calcium_background_current__E_CaN + var_chaste_interface__membrane__V) * var_calcium_background_current__g_Cab; // picoA_per_picoF + const double var_fast_transient_outward_potassium_current__E_K = var_membrane__R * var_membrane__T * log(mParameters[5] / var_chaste_interface__potassium_concentration__Ki) / var_membrane__F; // millivolt + const double var_fast_transient_outward_potassium_current__i_Kto_f = pow(var_chaste_interface__fast_transient_outward_potassium_current__ato_f, 3) * (-var_fast_transient_outward_potassium_current__E_K + var_chaste_interface__membrane__V) * mParameters[16] * var_chaste_interface__fast_transient_outward_potassium_current__ito_f; // picoA_per_picoF + const double var_fast_transient_outward_potassium_current__i_Kto_f_converted = HeartConfig::Instance()->GetCapacitance() * var_fast_transient_outward_potassium_current__i_Kto_f; // uA_per_cm2 + const double var_non_inactivating_steady_state_potassium_current__i_Kss = (-var_fast_transient_outward_potassium_current__E_K + var_chaste_interface__membrane__V) * var_chaste_interface__non_inactivating_steady_state_potassium_current__aKss * mParameters[12] * var_chaste_interface__non_inactivating_steady_state_potassium_current__iKss; // picoA_per_picoF + const double var_non_inactivating_steady_state_potassium_current__i_Kss_converted = HeartConfig::Instance()->GetCapacitance() * var_non_inactivating_steady_state_potassium_current__i_Kss; // uA_per_cm2 + const double var_slow_delayed_rectifier_potassium_current__i_Ks = pow(var_chaste_interface__slow_delayed_rectifier_potassium_current__nKs, 2) * (-var_fast_transient_outward_potassium_current__E_K + var_chaste_interface__membrane__V) * mParameters[14]; // picoA_per_picoF + const double var_slow_delayed_rectifier_potassium_current__i_Ks_converted = HeartConfig::Instance()->GetCapacitance() * var_slow_delayed_rectifier_potassium_current__i_Ks; // uA_per_cm2 + const double var_slow_transient_outward_potassium_current__g_Kto_s = 0; // milliS_per_microF + const double var_slow_transient_outward_potassium_current__i_Kto_s = (-var_fast_transient_outward_potassium_current__E_K + var_chaste_interface__membrane__V) * var_chaste_interface__slow_transient_outward_potassium_current__ato_s * var_slow_transient_outward_potassium_current__g_Kto_s * var_chaste_interface__slow_transient_outward_potassium_current__ito_s; // picoA_per_picoF + const double var_sodium_background_current__g_Nab = 0.0025999999999999999; // milliS_per_microF + const double var_sodium_calcium_exchange_current__K_mCa = 1380; // micromolar + const double var_sodium_calcium_exchange_current__K_mNa = 87500; // micromolar + const double var_sodium_calcium_exchange_current__eta = 0.34999999999999998; // dimensionless + const double var_sodium_calcium_exchange_current__k_sat = 0.10000000000000001; // dimensionless + const double var_fast_sodium_current__E_Na = var_membrane__R * var_membrane__T * log((mParameters[6] + 0.1111111111111111 * mParameters[5]) / (var_chaste_interface__sodium_concentration__Nai + 0.1111111111111111 * var_chaste_interface__potassium_concentration__Ki)) / var_membrane__F; // millivolt + const double var_fast_sodium_current__i_Na = (-var_fast_sodium_current__E_Na + var_chaste_interface__membrane__V) * var_chaste_interface__fast_sodium_current__O_Na * mParameters[9]; // picoA_per_picoF + const double var_fast_sodium_current__i_Na_converted = HeartConfig::Instance()->GetCapacitance() * var_fast_sodium_current__i_Na; // uA_per_cm2 + const double var_rapid_delayed_rectifier_potassium_current__i_Kr = (-var_membrane__R * var_membrane__T * log((mParameters[5] + 0.020408163265306124 * mParameters[6]) / (var_chaste_interface__potassium_concentration__Ki + 0.020408163265306124 * var_chaste_interface__sodium_concentration__Nai)) / var_membrane__F + var_chaste_interface__membrane__V) * var_chaste_interface__rapid_delayed_rectifier_potassium_current__O_K * mParameters[13]; // picoA_per_picoF + const double var_rapid_delayed_rectifier_potassium_current__i_Kr_converted = HeartConfig::Instance()->GetCapacitance() * var_rapid_delayed_rectifier_potassium_current__i_Kr; // uA_per_cm2 + const double var_sodium_background_current__i_Nab = (-var_fast_sodium_current__E_Na + var_chaste_interface__membrane__V) * var_sodium_background_current__g_Nab; // picoA_per_picoF + const double var_sodium_calcium_exchange_current__i_NaCa = (pow(var_chaste_interface__sodium_concentration__Nai, 3) * mParameters[4] * exp(var_membrane__F * var_chaste_interface__membrane__V * var_sodium_calcium_exchange_current__eta / (var_membrane__R * var_membrane__T)) - pow(mParameters[6], 3) * var_calcium_concentration__Cai * exp((-1 + var_sodium_calcium_exchange_current__eta) * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * mParameters[15] / ((1 + var_sodium_calcium_exchange_current__k_sat * exp((-1 + var_sodium_calcium_exchange_current__eta) * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * (pow(mParameters[6], 3) + pow(var_sodium_calcium_exchange_current__K_mNa, 3)) * (mParameters[4] + var_sodium_calcium_exchange_current__K_mCa)); // picoA_per_picoF + const double var_sodium_calcium_exchange_current__i_NaCa_converted = HeartConfig::Instance()->GetCapacitance() * var_sodium_calcium_exchange_current__i_NaCa; // uA_per_cm2 + const double var_sodium_potassium_pump_current__Km_Ko = 1500; // micromolar + const double var_sodium_potassium_pump_current__Km_Nai = 21000; // micromolar + const double var_sodium_potassium_pump_current__i_NaK_max = 0.88; // picoA_per_picoF + const double var_sodium_potassium_pump_current__sigma = -0.14285714285714285 + 0.14285714285714285 * exp(1.4858841010401188e-5 * mParameters[6]); // dimensionless + const double var_sodium_potassium_pump_current__f_NaK = 1 / (1 + 0.1245 * exp(-0.10000000000000001 * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T)) + 0.036499999999999998 * var_sodium_potassium_pump_current__sigma * exp(-var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))); // dimensionless + const double var_sodium_potassium_pump_current__i_NaK = mParameters[5] * var_sodium_potassium_pump_current__f_NaK * var_sodium_potassium_pump_current__i_NaK_max / ((1 + pow((var_sodium_potassium_pump_current__Km_Nai / var_chaste_interface__sodium_concentration__Nai), 1.5)) * (mParameters[5] + var_sodium_potassium_pump_current__Km_Ko)); // picoA_per_picoF + const double var_time_independent_potassium_current__i_K1 = (-var_fast_transient_outward_potassium_current__E_K + var_chaste_interface__membrane__V) * mParameters[5] * mParameters[11] / ((1 + exp(0.089599999999999999 * var_chaste_interface__membrane__V - 0.089599999999999999 * var_fast_transient_outward_potassium_current__E_K)) * (210 + mParameters[5])); // picoA_per_picoF + const double var_time_independent_potassium_current__i_K1_converted = HeartConfig::Instance()->GetCapacitance() * var_time_independent_potassium_current__i_K1; // uA_per_cm2 + const double var_ultra_rapidly_activating_delayed_rectifier_potassium_current__g_Kur = 0.16; // milliS_per_microF + const double var_ultra_rapidly_activating_delayed_rectifier_potassium_current__i_Kur = (-var_fast_transient_outward_potassium_current__E_K + var_chaste_interface__membrane__V) * var_chaste_interface__ultra_rapidly_activating_delayed_rectifier_potassium_current__aur * var_ultra_rapidly_activating_delayed_rectifier_potassium_current__g_Kur * var_chaste_interface__ultra_rapidly_activating_delayed_rectifier_potassium_current__iur; // picoA_per_picoF + const double var_chaste_interface__i_ionic = HeartConfig::Instance()->GetCapacitance() * var_calcium_activated_chloride_current__i_ClCa + HeartConfig::Instance()->GetCapacitance() * var_calcium_background_current__i_Cab + HeartConfig::Instance()->GetCapacitance() * var_calcium_pump_current__i_pCa + HeartConfig::Instance()->GetCapacitance() * var_slow_transient_outward_potassium_current__i_Kto_s + HeartConfig::Instance()->GetCapacitance() * var_sodium_background_current__i_Nab + HeartConfig::Instance()->GetCapacitance() * var_sodium_potassium_pump_current__i_NaK + HeartConfig::Instance()->GetCapacitance() * var_ultra_rapidly_activating_delayed_rectifier_potassium_current__i_Kur + var_L_type_calcium_current__i_CaL_converted + var_fast_sodium_current__i_Na_converted + var_fast_transient_outward_potassium_current__i_Kto_f_converted + var_non_inactivating_steady_state_potassium_current__i_Kss_converted + var_rapid_delayed_rectifier_potassium_current__i_Kr_converted + var_slow_delayed_rectifier_potassium_current__i_Ks_converted + var_sodium_calcium_exchange_current__i_NaCa_converted + var_time_independent_potassium_current__i_K1_converted; // uA_per_cm2 + + const double i_ionic = var_chaste_interface__i_ionic; + EXCEPT_IF_NOT(!std::isnan(i_ionic)); + return i_ionic; + } + + void Cellbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLBackwardEuler::ComputeResidual(double var_chaste_interface__environment__time, const double rCurrentGuess[32], double rResidual[32]) + { + std::vector& rY = rGetStateVariables(); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -82.4202 + double var_chaste_interface__fast_transient_outward_potassium_current__ato_f = rY[28]; + // Units: dimensionless; Initial value: 0.00265563 + double var_chaste_interface__fast_transient_outward_potassium_current__ito_f = rY[29]; + // Units: dimensionless; Initial value: 0.999977 + double var_chaste_interface__slow_transient_outward_potassium_current__ato_s = rY[30]; + // Units: dimensionless; Initial value: 0.000417069 + double var_chaste_interface__slow_transient_outward_potassium_current__ito_s = rY[31]; + // Units: dimensionless; Initial value: 0.998543 + double var_chaste_interface__slow_delayed_rectifier_potassium_current__nKs = rY[32]; + // Units: dimensionless; Initial value: 0.000262753 + double var_chaste_interface__ultra_rapidly_activating_delayed_rectifier_potassium_current__aur = rY[33]; + // Units: dimensionless; Initial value: 0.000417069 + double var_chaste_interface__ultra_rapidly_activating_delayed_rectifier_potassium_current__iur = rY[34]; + // Units: dimensionless; Initial value: 0.998543 + double var_chaste_interface__non_inactivating_steady_state_potassium_current__aKss = rY[35]; + // Units: dimensionless; Initial value: 0.000417069 + + //output_nonlinear_state_assignments + double var_chaste_interface__L_type_calcium_current__C2 = rCurrentGuess[0]; + double var_chaste_interface__L_type_calcium_current__C3 = rCurrentGuess[1]; + double var_chaste_interface__L_type_calcium_current__C4 = rCurrentGuess[2]; + double var_chaste_interface__L_type_calcium_current__I1 = rCurrentGuess[3]; + double var_chaste_interface__L_type_calcium_current__I2 = rCurrentGuess[4]; + double var_chaste_interface__L_type_calcium_current__I3 = rCurrentGuess[5]; + double var_chaste_interface__L_type_calcium_current__O = rCurrentGuess[6]; + double var_chaste_interface__calcium_buffering__HTRPN_Ca = rCurrentGuess[7]; + double var_chaste_interface__calcium_buffering__LTRPN_Ca = rCurrentGuess[8]; + double var_chaste_interface__calcium_concentration__CaJSR = rCurrentGuess[9]; + double var_chaste_interface__calcium_concentration__CaNSR = rCurrentGuess[10]; + double var_chaste_interface__calcium_concentration__Cai_converted = rCurrentGuess[11]; + double var_chaste_interface__calcium_concentration__Cass = rCurrentGuess[12]; + double var_chaste_interface__calcium_fluxes__P_RyR = rCurrentGuess[13]; + double var_chaste_interface__fast_sodium_current__C_Na1 = rCurrentGuess[14]; + double var_chaste_interface__fast_sodium_current__C_Na2 = rCurrentGuess[15]; + double var_chaste_interface__fast_sodium_current__I1_Na = rCurrentGuess[16]; + double var_chaste_interface__fast_sodium_current__I2_Na = rCurrentGuess[17]; + double var_chaste_interface__fast_sodium_current__IC_Na2 = rCurrentGuess[18]; + double var_chaste_interface__fast_sodium_current__IC_Na3 = rCurrentGuess[19]; + double var_chaste_interface__fast_sodium_current__IF_Na = rCurrentGuess[20]; + double var_chaste_interface__fast_sodium_current__O_Na = rCurrentGuess[21]; + double var_chaste_interface__non_inactivating_steady_state_potassium_current__iKss = rCurrentGuess[22]; + double var_chaste_interface__potassium_concentration__Ki = rCurrentGuess[23]; + double var_chaste_interface__rapid_delayed_rectifier_potassium_current__C_K1 = rCurrentGuess[24]; + double var_chaste_interface__rapid_delayed_rectifier_potassium_current__C_K2 = rCurrentGuess[25]; + double var_chaste_interface__rapid_delayed_rectifier_potassium_current__I_K = rCurrentGuess[26]; + double var_chaste_interface__rapid_delayed_rectifier_potassium_current__O_K = rCurrentGuess[27]; + double var_chaste_interface__ryanodine_receptors__P_C2 = rCurrentGuess[28]; + double var_chaste_interface__ryanodine_receptors__P_O1 = rCurrentGuess[29]; + double var_chaste_interface__ryanodine_receptors__P_O2 = rCurrentGuess[30]; + double var_chaste_interface__sodium_concentration__Nai = rCurrentGuess[31]; + + //output_equations + const double d_dt_chaste_interface_var_non_inactivating_steady_state_potassium_current__iKss = 0; // 1 / millisecond + const double var_L_type_calcium_current__E_CaL = 63; // millivolt + const double var_L_type_calcium_current__Kpc_half = 20; // micromolar + const double var_L_type_calcium_current__Kpc_max = 0.23324; // per_millisecond + const double var_L_type_calcium_current__Kpcb = 0.00050000000000000001; // per_millisecond + const double var_L_type_calcium_current__C1 = 1 - var_chaste_interface__L_type_calcium_current__C2 - var_chaste_interface__L_type_calcium_current__C3 - var_chaste_interface__L_type_calcium_current__C4 - var_chaste_interface__L_type_calcium_current__I1 - var_chaste_interface__L_type_calcium_current__I2 - var_chaste_interface__L_type_calcium_current__I3 - var_chaste_interface__L_type_calcium_current__O; // dimensionless + const double var_L_type_calcium_current__i_CaL_max = 7; // picoA_per_picoF + const double var_calcium_background_current__g_Cab = 0.00036699999999999998; // milliS_per_microF + const double var_calcium_buffering__HTRPN_tot = 140; // micromolar + const double var_calcium_buffering__LTRPN_tot = 70; // micromolar + const double var_calcium_concentration__CMDN_tot = 50; // micromolar + const double var_calcium_concentration__CSQN_tot = 15000; // micromolar + const double var_calcium_concentration__Cai = 1000 * var_chaste_interface__calcium_concentration__Cai_converted; // micromolar + const double var_L_type_calcium_current__gamma = var_L_type_calcium_current__Kpc_max * var_chaste_interface__calcium_concentration__Cass / (var_L_type_calcium_current__Kpc_half + var_chaste_interface__calcium_concentration__Cass); // per_millisecond + const double var_calcium_concentration__Km_CMDN = 0.23799999999999999; // micromolar + const double var_calcium_concentration__Bi = 1 / (1 + var_calcium_concentration__CMDN_tot * var_calcium_concentration__Km_CMDN / pow((var_calcium_concentration__Cai + var_calcium_concentration__Km_CMDN), 2)); // dimensionless + const double var_calcium_concentration__Bss = 1 / (1 + var_calcium_concentration__CMDN_tot * var_calcium_concentration__Km_CMDN / pow((var_chaste_interface__calcium_concentration__Cass + var_calcium_concentration__Km_CMDN), 2)); // dimensionless + const double var_calcium_concentration__Km_CSQN = 800; // micromolar + const double var_calcium_concentration__BJSR = 1 / (1 + var_calcium_concentration__CSQN_tot * var_calcium_concentration__Km_CSQN / pow((var_chaste_interface__calcium_concentration__CaJSR + var_calcium_concentration__Km_CSQN), 2)); // dimensionless + const double var_calcium_fluxes__Km_up = 0.5; // micromolar + const double var_calcium_fluxes__k_minus_htrpn = 3.1999999999999999e-5; // per_millisecond + const double var_calcium_fluxes__k_minus_ltrpn = 0.019599999999999999; // per_millisecond + const double var_calcium_fluxes__k_plus_htrpn = 0.0023700000000000001; // per_micromolar_millisecond + const double d_dt_chaste_interface_var_calcium_buffering__HTRPN_Ca = -var_chaste_interface__calcium_buffering__HTRPN_Ca * var_calcium_fluxes__k_minus_htrpn + (-var_chaste_interface__calcium_buffering__HTRPN_Ca + var_calcium_buffering__HTRPN_tot) * var_calcium_concentration__Cai * var_calcium_fluxes__k_plus_htrpn; // micromolar / millisecond + const double var_calcium_fluxes__k_plus_ltrpn = 0.0327; // per_micromolar_millisecond + const double d_dt_chaste_interface_var_calcium_buffering__LTRPN_Ca = -var_chaste_interface__calcium_buffering__LTRPN_Ca * var_calcium_fluxes__k_minus_ltrpn + (-var_chaste_interface__calcium_buffering__LTRPN_Ca + var_calcium_buffering__LTRPN_tot) * var_calcium_concentration__Cai * var_calcium_fluxes__k_plus_ltrpn; // micromolar / millisecond + const double var_calcium_fluxes__J_trpn = -var_chaste_interface__calcium_buffering__HTRPN_Ca * var_calcium_fluxes__k_minus_htrpn - var_chaste_interface__calcium_buffering__LTRPN_Ca * var_calcium_fluxes__k_minus_ltrpn + (-var_chaste_interface__calcium_buffering__HTRPN_Ca + var_calcium_buffering__HTRPN_tot) * var_calcium_concentration__Cai * var_calcium_fluxes__k_plus_htrpn + (-var_chaste_interface__calcium_buffering__LTRPN_Ca + var_calcium_buffering__LTRPN_tot) * var_calcium_concentration__Cai * var_calcium_fluxes__k_plus_ltrpn; // micromolar_per_millisecond + const double var_calcium_fluxes__tau_tr = 20; // millisecond + const double var_calcium_fluxes__J_tr = (-var_chaste_interface__calcium_concentration__CaJSR + var_chaste_interface__calcium_concentration__CaNSR) / var_calcium_fluxes__tau_tr; // micromolar_per_millisecond + const double var_calcium_fluxes__tau_xfer = 8; // millisecond + const double var_calcium_fluxes__J_xfer = (-var_calcium_concentration__Cai + var_chaste_interface__calcium_concentration__Cass) / var_calcium_fluxes__tau_xfer; // micromolar_per_millisecond + const double var_calcium_fluxes__J_leak = (-var_calcium_concentration__Cai + var_chaste_interface__calcium_concentration__CaNSR) * mParameters[0]; // micromolar_per_millisecond + const double var_calcium_fluxes__J_up = pow(var_calcium_concentration__Cai, 2) * mParameters[2] / (pow(var_calcium_concentration__Cai, 2) + pow(var_calcium_fluxes__Km_up, 2)); // micromolar_per_millisecond + const double var_calcium_pump_current__Km_pCa = 0.5; // micromolar + const double var_calcium_pump_current__i_pCa_max = 1; // picoA_per_picoF + const double var_calcium_pump_current__i_pCa = pow(var_calcium_concentration__Cai, 2) * var_calcium_pump_current__i_pCa_max / (pow(var_calcium_concentration__Cai, 2) + pow(var_calcium_pump_current__Km_pCa, 2)); // picoA_per_picoF + const double var_fast_sodium_current__C_Na3 = 1 - var_chaste_interface__fast_sodium_current__C_Na1 - var_chaste_interface__fast_sodium_current__C_Na2 - var_chaste_interface__fast_sodium_current__I1_Na - var_chaste_interface__fast_sodium_current__I2_Na - var_chaste_interface__fast_sodium_current__IC_Na2 - var_chaste_interface__fast_sodium_current__IC_Na3 - var_chaste_interface__fast_sodium_current__IF_Na - var_chaste_interface__fast_sodium_current__O_Na; // dimensionless + const double var_membrane__Acap = 0.00015339999999999999; // cm2 + const double var_membrane__F = 96.5; // coulomb_per_millimole + const double var_membrane__R = 8.3140000000000001; // joule_per_mole_kelvin + const double var_membrane__T = 298; // kelvin + const double var_calcium_background_current__E_CaN = 0.5 * var_membrane__R * var_membrane__T * log(mParameters[4] / var_calcium_concentration__Cai) / var_membrane__F; // millivolt + const double var_L_type_calcium_current__Kpcf = 13 - 13 * exp(-2.1025 * pow((1 + 0.068965517241379309 * var_chaste_interface__membrane__V), 2)); // per_millisecond + const double var_L_type_calcium_current__alpha = 0.40000000000000002 * (1 + 0.69999999999999996 * exp(-160 * pow((1 + 0.025000000000000001 * var_chaste_interface__membrane__V), 2)) - 0.75 * exp(-pow((1 + 0.050000000000000003 * var_chaste_interface__membrane__V), 2))) * exp(1.2 + 0.10000000000000001 * var_chaste_interface__membrane__V) / (1 + 0.12 * exp(1.2 + 0.10000000000000001 * var_chaste_interface__membrane__V)); // per_millisecond + const double var_L_type_calcium_current__beta = 0.050000000000000003 * exp(-0.92307692307692313 - 0.076923076923076927 * var_chaste_interface__membrane__V); // per_millisecond + const double d_dt_chaste_interface_var_L_type_calcium_current__C2 = -var_chaste_interface__L_type_calcium_current__C2 * var_L_type_calcium_current__beta + 2 * var_chaste_interface__L_type_calcium_current__C3 * var_L_type_calcium_current__beta + 4 * var_L_type_calcium_current__C1 * var_L_type_calcium_current__alpha - 3 * var_chaste_interface__L_type_calcium_current__C2 * var_L_type_calcium_current__alpha; // 1 / millisecond + const double d_dt_chaste_interface_var_L_type_calcium_current__C3 = 3 * var_chaste_interface__L_type_calcium_current__C2 * var_L_type_calcium_current__alpha + 3 * var_chaste_interface__L_type_calcium_current__C4 * var_L_type_calcium_current__beta - 2 * var_chaste_interface__L_type_calcium_current__C3 * var_L_type_calcium_current__alpha - 2 * var_chaste_interface__L_type_calcium_current__C3 * var_L_type_calcium_current__beta; // 1 / millisecond + const double d_dt_chaste_interface_var_L_type_calcium_current__C4 = -var_chaste_interface__L_type_calcium_current__C4 * var_L_type_calcium_current__alpha + 2 * var_chaste_interface__L_type_calcium_current__C3 * var_L_type_calcium_current__alpha + 4 * var_chaste_interface__L_type_calcium_current__O * var_L_type_calcium_current__beta + 0.0080000000000000002 * var_chaste_interface__L_type_calcium_current__I2 * var_L_type_calcium_current__beta - 3 * var_chaste_interface__L_type_calcium_current__C4 * var_L_type_calcium_current__beta - 0.002 * var_chaste_interface__L_type_calcium_current__C4 * var_L_type_calcium_current__Kpcf + 4 * var_chaste_interface__L_type_calcium_current__I3 * var_L_type_calcium_current__Kpcb * var_L_type_calcium_current__beta + 0.040000000000000001 * var_chaste_interface__L_type_calcium_current__I1 * var_L_type_calcium_current__Kpcb * var_L_type_calcium_current__beta - var_chaste_interface__L_type_calcium_current__C4 * var_L_type_calcium_current__Kpcf * var_L_type_calcium_current__gamma - 0.01 * var_chaste_interface__L_type_calcium_current__C4 * var_L_type_calcium_current__alpha * var_L_type_calcium_current__gamma; // 1 / millisecond + const double d_dt_chaste_interface_var_L_type_calcium_current__I1 = var_chaste_interface__L_type_calcium_current__O * var_L_type_calcium_current__gamma - var_chaste_interface__L_type_calcium_current__I1 * var_L_type_calcium_current__Kpcb + 0.001 * var_chaste_interface__L_type_calcium_current__I3 * var_L_type_calcium_current__alpha - 0.001 * var_chaste_interface__L_type_calcium_current__I1 * var_L_type_calcium_current__Kpcf + 0.01 * var_chaste_interface__L_type_calcium_current__C4 * var_L_type_calcium_current__alpha * var_L_type_calcium_current__gamma - 0.040000000000000001 * var_chaste_interface__L_type_calcium_current__I1 * var_L_type_calcium_current__Kpcf * var_L_type_calcium_current__beta; // 1 / millisecond + const double d_dt_chaste_interface_var_L_type_calcium_current__I2 = var_chaste_interface__L_type_calcium_current__I3 * var_L_type_calcium_current__Kpcb - var_chaste_interface__L_type_calcium_current__I2 * var_L_type_calcium_current__gamma + 0.001 * var_L_type_calcium_current__Kpcf * var_chaste_interface__L_type_calcium_current__O + 0.002 * var_chaste_interface__L_type_calcium_current__C4 * var_L_type_calcium_current__Kpcf - 0.001 * var_chaste_interface__L_type_calcium_current__I2 * var_L_type_calcium_current__alpha - 0.0080000000000000002 * var_chaste_interface__L_type_calcium_current__I2 * var_L_type_calcium_current__beta; // 1 / millisecond + const double d_dt_chaste_interface_var_L_type_calcium_current__I3 = var_chaste_interface__L_type_calcium_current__I2 * var_L_type_calcium_current__gamma - var_chaste_interface__L_type_calcium_current__I3 * var_L_type_calcium_current__Kpcb + 0.001 * var_chaste_interface__L_type_calcium_current__I1 * var_L_type_calcium_current__Kpcf - 0.001 * var_chaste_interface__L_type_calcium_current__I3 * var_L_type_calcium_current__alpha + var_chaste_interface__L_type_calcium_current__C4 * var_L_type_calcium_current__Kpcf * var_L_type_calcium_current__gamma - 4 * var_chaste_interface__L_type_calcium_current__I3 * var_L_type_calcium_current__Kpcb * var_L_type_calcium_current__beta; // 1 / millisecond + const double d_dt_chaste_interface_var_L_type_calcium_current__O = var_chaste_interface__L_type_calcium_current__C4 * var_L_type_calcium_current__alpha + var_chaste_interface__L_type_calcium_current__I1 * var_L_type_calcium_current__Kpcb - var_chaste_interface__L_type_calcium_current__O * var_L_type_calcium_current__gamma + 0.001 * var_chaste_interface__L_type_calcium_current__I2 * var_L_type_calcium_current__alpha - 4 * var_chaste_interface__L_type_calcium_current__O * var_L_type_calcium_current__beta - 0.001 * var_L_type_calcium_current__Kpcf * var_chaste_interface__L_type_calcium_current__O; // 1 / millisecond + const double var_L_type_calcium_current__i_CaL = (-var_L_type_calcium_current__E_CaL + var_chaste_interface__membrane__V) * var_chaste_interface__L_type_calcium_current__O * mParameters[7]; // picoA_per_picoF + const double d_dt_chaste_interface_var_calcium_fluxes__P_RyR = -0.040000000000000001 * var_chaste_interface__calcium_fluxes__P_RyR - 0.10000000000000001 * var_L_type_calcium_current__i_CaL * exp(-0.038580246913580245 * pow((-1 + 0.20000000000000001 * var_chaste_interface__membrane__V), 2)) / var_L_type_calcium_current__i_CaL_max; // 1 / millisecond + const double var_calcium_background_current__i_Cab = (-var_calcium_background_current__E_CaN + var_chaste_interface__membrane__V) * var_calcium_background_current__g_Cab; // picoA_per_picoF + const double var_fast_sodium_current__alpha_Na11 = 3.802 / (0.20000000000000001 * exp(-0.016666666666666666 - 0.0066666666666666671 * var_chaste_interface__membrane__V) + 0.1027 * exp(-0.14705882352941177 - 0.058823529411764705 * var_chaste_interface__membrane__V)); // per_millisecond + const double var_fast_sodium_current__alpha_Na12 = 3.802 / (0.1027 * exp(-0.16666666666666666 - 0.066666666666666666 * var_chaste_interface__membrane__V) + 0.23000000000000001 * exp(-0.016666666666666666 - 0.0066666666666666671 * var_chaste_interface__membrane__V)); // per_millisecond + const double var_fast_sodium_current__alpha_Na13 = 3.802 / (0.25 * exp(-0.016666666666666666 - 0.0066666666666666671 * var_chaste_interface__membrane__V) + 0.1027 * exp(-0.20833333333333334 - 0.083333333333333329 * var_chaste_interface__membrane__V)); // per_millisecond + const double var_fast_sodium_current__alpha_Na2 = 1 / (0.39395599999999997 + 0.188495 * exp(-0.42168674698795178 + 0.060240963855421679 * mParameters[10] - 0.060240963855421679 * var_chaste_interface__membrane__V)); // per_millisecond + const double var_fast_sodium_current__alpha_Na3 = 6.9999999999999997e-7 * exp(-0.90909090909090906 - 0.12987012987012986 * var_chaste_interface__membrane__V); // per_millisecond + const double var_fast_sodium_current__alpha_Na4 = 0.001 * var_fast_sodium_current__alpha_Na2; // per_millisecond + const double var_fast_sodium_current__alpha_Na5 = 1.0526315789473684e-5 * var_fast_sodium_current__alpha_Na2; // per_millisecond + const double var_fast_sodium_current__beta_Na11 = 0.19170000000000001 * exp(-0.12315270935960591 - 0.04926108374384236 * var_chaste_interface__membrane__V); // per_millisecond + const double var_fast_sodium_current__beta_Na12 = 0.20000000000000001 * exp(0.12315270935960591 - 0.04926108374384236 * var_chaste_interface__membrane__V); // per_millisecond + const double var_fast_sodium_current__beta_Na13 = 0.22 * exp(0.36945812807881773 - 0.04926108374384236 * var_chaste_interface__membrane__V); // per_millisecond + const double var_fast_sodium_current__beta_Na3 = 0.008539999999999999 + 2.0000000000000002e-5 * var_chaste_interface__membrane__V; // per_millisecond + const double d_dt_chaste_interface_var_fast_sodium_current__C_Na1 = var_chaste_interface__fast_sodium_current__C_Na2 * var_fast_sodium_current__alpha_Na12 + var_chaste_interface__fast_sodium_current__IF_Na * var_fast_sodium_current__alpha_Na3 + var_chaste_interface__fast_sodium_current__O_Na * var_fast_sodium_current__beta_Na13 - var_chaste_interface__fast_sodium_current__C_Na1 * var_fast_sodium_current__alpha_Na13 - var_chaste_interface__fast_sodium_current__C_Na1 * var_fast_sodium_current__beta_Na12 - var_chaste_interface__fast_sodium_current__C_Na1 * var_fast_sodium_current__beta_Na3; // 1 / millisecond + const double d_dt_chaste_interface_var_fast_sodium_current__C_Na2 = var_chaste_interface__fast_sodium_current__C_Na1 * var_fast_sodium_current__beta_Na12 + var_fast_sodium_current__C_Na3 * var_fast_sodium_current__alpha_Na11 + var_chaste_interface__fast_sodium_current__IC_Na2 * var_fast_sodium_current__alpha_Na3 - var_chaste_interface__fast_sodium_current__C_Na2 * var_fast_sodium_current__alpha_Na12 - var_chaste_interface__fast_sodium_current__C_Na2 * var_fast_sodium_current__beta_Na11 - var_chaste_interface__fast_sodium_current__C_Na2 * var_fast_sodium_current__beta_Na3; // 1 / millisecond + const double d_dt_chaste_interface_var_fast_sodium_current__IC_Na2 = var_chaste_interface__fast_sodium_current__C_Na2 * var_fast_sodium_current__beta_Na3 + var_chaste_interface__fast_sodium_current__IC_Na3 * var_fast_sodium_current__alpha_Na11 + var_chaste_interface__fast_sodium_current__IF_Na * var_fast_sodium_current__beta_Na12 - var_chaste_interface__fast_sodium_current__IC_Na2 * var_fast_sodium_current__alpha_Na12 - var_chaste_interface__fast_sodium_current__IC_Na2 * var_fast_sodium_current__alpha_Na3 - var_chaste_interface__fast_sodium_current__IC_Na2 * var_fast_sodium_current__beta_Na11; // 1 / millisecond + const double d_dt_chaste_interface_var_fast_sodium_current__IC_Na3 = var_fast_sodium_current__C_Na3 * var_fast_sodium_current__beta_Na3 + var_chaste_interface__fast_sodium_current__IC_Na2 * var_fast_sodium_current__beta_Na11 - var_chaste_interface__fast_sodium_current__IC_Na3 * var_fast_sodium_current__alpha_Na11 - var_chaste_interface__fast_sodium_current__IC_Na3 * var_fast_sodium_current__alpha_Na3; // 1 / millisecond + const double var_fast_sodium_current__beta_Na2 = var_fast_sodium_current__alpha_Na13 * var_fast_sodium_current__alpha_Na2 * var_fast_sodium_current__alpha_Na3 / (var_fast_sodium_current__beta_Na13 * var_fast_sodium_current__beta_Na3); // per_millisecond + const double d_dt_chaste_interface_var_fast_sodium_current__O_Na = var_chaste_interface__fast_sodium_current__C_Na1 * var_fast_sodium_current__alpha_Na13 + var_chaste_interface__fast_sodium_current__IF_Na * var_fast_sodium_current__beta_Na2 - var_chaste_interface__fast_sodium_current__O_Na * var_fast_sodium_current__alpha_Na2 - var_chaste_interface__fast_sodium_current__O_Na * var_fast_sodium_current__beta_Na13; // 1 / millisecond + const double var_fast_sodium_current__beta_Na4 = var_fast_sodium_current__alpha_Na3; // per_millisecond + const double d_dt_chaste_interface_var_fast_sodium_current__IF_Na = var_chaste_interface__fast_sodium_current__C_Na1 * var_fast_sodium_current__beta_Na3 + var_chaste_interface__fast_sodium_current__I1_Na * var_fast_sodium_current__beta_Na4 + var_chaste_interface__fast_sodium_current__IC_Na2 * var_fast_sodium_current__alpha_Na12 + var_chaste_interface__fast_sodium_current__O_Na * var_fast_sodium_current__alpha_Na2 - var_chaste_interface__fast_sodium_current__IF_Na * var_fast_sodium_current__alpha_Na3 - var_chaste_interface__fast_sodium_current__IF_Na * var_fast_sodium_current__alpha_Na4 - var_chaste_interface__fast_sodium_current__IF_Na * var_fast_sodium_current__beta_Na12 - var_chaste_interface__fast_sodium_current__IF_Na * var_fast_sodium_current__beta_Na2; // 1 / millisecond + const double var_fast_sodium_current__beta_Na5 = 0.02 * var_fast_sodium_current__alpha_Na3; // per_millisecond + const double d_dt_chaste_interface_var_fast_sodium_current__I1_Na = var_chaste_interface__fast_sodium_current__I2_Na * var_fast_sodium_current__beta_Na5 + var_chaste_interface__fast_sodium_current__IF_Na * var_fast_sodium_current__alpha_Na4 - var_chaste_interface__fast_sodium_current__I1_Na * var_fast_sodium_current__alpha_Na5 - var_chaste_interface__fast_sodium_current__I1_Na * var_fast_sodium_current__beta_Na4; // 1 / millisecond + const double d_dt_chaste_interface_var_fast_sodium_current__I2_Na = var_chaste_interface__fast_sodium_current__I1_Na * var_fast_sodium_current__alpha_Na5 - var_chaste_interface__fast_sodium_current__I2_Na * var_fast_sodium_current__beta_Na5; // 1 / millisecond + const double var_membrane__VJSR = 1.1999999999999999e-7; // microlitre + const double var_membrane__VNSR = 2.0980000000000001e-6; // microlitre + const double var_membrane__Vmyo = 2.584e-5; // microlitre + const double d_dt_chaste_interface_var_calcium_concentration__CaNSR = (-var_calcium_fluxes__J_leak + var_calcium_fluxes__J_up) * var_membrane__Vmyo / var_membrane__VNSR - var_calcium_fluxes__J_tr * var_membrane__VJSR / var_membrane__VNSR; // micromolar / millisecond + const double var_membrane__Vss = 1.4849999999999999e-9; // microlitre + const double var_fast_transient_outward_potassium_current__E_K = var_membrane__R * var_membrane__T * log(mParameters[5] / var_chaste_interface__potassium_concentration__Ki) / var_membrane__F; // millivolt + const double var_fast_transient_outward_potassium_current__i_Kto_f = pow(var_chaste_interface__fast_transient_outward_potassium_current__ato_f, 3) * (-var_fast_transient_outward_potassium_current__E_K + var_chaste_interface__membrane__V) * mParameters[16] * var_chaste_interface__fast_transient_outward_potassium_current__ito_f; // picoA_per_picoF + const double var_non_inactivating_steady_state_potassium_current__i_Kss = (-var_fast_transient_outward_potassium_current__E_K + var_chaste_interface__membrane__V) * var_chaste_interface__non_inactivating_steady_state_potassium_current__aKss * mParameters[12] * var_chaste_interface__non_inactivating_steady_state_potassium_current__iKss; // picoA_per_picoF + const double var_rapid_delayed_rectifier_potassium_current__C_K0 = 1 - var_chaste_interface__rapid_delayed_rectifier_potassium_current__C_K1 - var_chaste_interface__rapid_delayed_rectifier_potassium_current__C_K2 - var_chaste_interface__rapid_delayed_rectifier_potassium_current__I_K - var_chaste_interface__rapid_delayed_rectifier_potassium_current__O_K; // dimensionless + const double var_rapid_delayed_rectifier_potassium_current__alpha_a0 = 0.022348 * exp(0.01176 * var_chaste_interface__membrane__V); // per_millisecond + const double var_rapid_delayed_rectifier_potassium_current__alpha_a1 = 0.013733 * exp(0.038198000000000003 * var_chaste_interface__membrane__V); // per_millisecond + const double var_rapid_delayed_rectifier_potassium_current__alpha_i = 0.090820999999999999 * exp(0.11695499999999999 + 0.023390999999999999 * var_chaste_interface__membrane__V); // per_millisecond + const double var_rapid_delayed_rectifier_potassium_current__beta_a0 = 0.047002000000000002 * exp(-0.063100000000000003 * var_chaste_interface__membrane__V); // per_millisecond + const double var_rapid_delayed_rectifier_potassium_current__beta_a1 = 6.8899999999999994e-5 * exp(-0.041779999999999998 * var_chaste_interface__membrane__V); // per_millisecond + const double var_rapid_delayed_rectifier_potassium_current__beta_i = 0.0064970000000000002 * exp(-0.16339999999999999 - 0.032680000000000001 * var_chaste_interface__membrane__V); // per_millisecond + const double d_dt_chaste_interface_var_rapid_delayed_rectifier_potassium_current__I_K = var_chaste_interface__rapid_delayed_rectifier_potassium_current__O_K * var_rapid_delayed_rectifier_potassium_current__alpha_i - var_chaste_interface__rapid_delayed_rectifier_potassium_current__I_K * var_rapid_delayed_rectifier_potassium_current__beta_i; // 1 / millisecond + const double d_dt_chaste_interface_var_rapid_delayed_rectifier_potassium_current__O_K = var_chaste_interface__rapid_delayed_rectifier_potassium_current__C_K2 * var_rapid_delayed_rectifier_potassium_current__alpha_a1 + var_chaste_interface__rapid_delayed_rectifier_potassium_current__I_K * var_rapid_delayed_rectifier_potassium_current__beta_i - var_chaste_interface__rapid_delayed_rectifier_potassium_current__O_K * var_rapid_delayed_rectifier_potassium_current__alpha_i - var_chaste_interface__rapid_delayed_rectifier_potassium_current__O_K * var_rapid_delayed_rectifier_potassium_current__beta_a1; // 1 / millisecond + const double var_rapid_delayed_rectifier_potassium_current__kb = 0.036777999999999998; // per_millisecond + const double var_rapid_delayed_rectifier_potassium_current__kf = 0.023761000000000001; // per_millisecond + const double d_dt_chaste_interface_var_rapid_delayed_rectifier_potassium_current__C_K1 = var_rapid_delayed_rectifier_potassium_current__C_K0 * var_rapid_delayed_rectifier_potassium_current__alpha_a0 + var_chaste_interface__rapid_delayed_rectifier_potassium_current__C_K2 * var_rapid_delayed_rectifier_potassium_current__kb - var_chaste_interface__rapid_delayed_rectifier_potassium_current__C_K1 * var_rapid_delayed_rectifier_potassium_current__beta_a0 - var_chaste_interface__rapid_delayed_rectifier_potassium_current__C_K1 * var_rapid_delayed_rectifier_potassium_current__kf; // 1 / millisecond + const double d_dt_chaste_interface_var_rapid_delayed_rectifier_potassium_current__C_K2 = var_chaste_interface__rapid_delayed_rectifier_potassium_current__C_K1 * var_rapid_delayed_rectifier_potassium_current__kf + var_chaste_interface__rapid_delayed_rectifier_potassium_current__O_K * var_rapid_delayed_rectifier_potassium_current__beta_a1 - var_chaste_interface__rapid_delayed_rectifier_potassium_current__C_K2 * var_rapid_delayed_rectifier_potassium_current__alpha_a1 - var_chaste_interface__rapid_delayed_rectifier_potassium_current__C_K2 * var_rapid_delayed_rectifier_potassium_current__kb; // 1 / millisecond + const double var_calcium_fluxes__J_rel = (-var_chaste_interface__calcium_concentration__Cass + var_chaste_interface__calcium_concentration__CaJSR) * (var_chaste_interface__ryanodine_receptors__P_O1 + var_chaste_interface__ryanodine_receptors__P_O2) * var_chaste_interface__calcium_fluxes__P_RyR * mParameters[1]; // micromolar_per_millisecond + const double d_dt_chaste_interface_var_calcium_concentration__CaJSR = (-var_calcium_fluxes__J_rel + var_calcium_fluxes__J_tr) * var_calcium_concentration__BJSR; // micromolar / millisecond + const double d_dt_chaste_interface_var_calcium_concentration__Cass = (var_calcium_fluxes__J_rel * var_membrane__VJSR / var_membrane__Vss - var_calcium_fluxes__J_xfer * var_membrane__Vmyo / var_membrane__Vss - 0.5 * var_L_type_calcium_current__i_CaL * var_membrane__Acap * mParameters[8] / (var_membrane__F * var_membrane__Vss)) * var_calcium_concentration__Bss; // micromolar / millisecond + const double var_ryanodine_receptors__P_C1 = 1 - var_chaste_interface__ryanodine_receptors__P_C2 - var_chaste_interface__ryanodine_receptors__P_O1 - var_chaste_interface__ryanodine_receptors__P_O2; // dimensionless + const double var_ryanodine_receptors__k_minus_a = 0.071249999999999994; // per_millisecond + const double var_ryanodine_receptors__k_minus_b = 0.96499999999999997; // per_millisecond + const double var_ryanodine_receptors__k_minus_c = 0.00080000000000000004; // per_millisecond + const double var_ryanodine_receptors__k_plus_a = 0.0060749999999999997; // micromolar4_per_millisecond + const double var_ryanodine_receptors__k_plus_b = 0.0040499999999999998; // micromolar3_per_millisecond + const double var_ryanodine_receptors__k_plus_c = 0.0089999999999999993; // per_millisecond + const double d_dt_chaste_interface_var_ryanodine_receptors__P_C2 = var_chaste_interface__ryanodine_receptors__P_O1 * var_ryanodine_receptors__k_plus_c - var_chaste_interface__ryanodine_receptors__P_C2 * var_ryanodine_receptors__k_minus_c; // 1 / millisecond + const double var_ryanodine_receptors__m = 3; // dimensionless + const double d_dt_chaste_interface_var_ryanodine_receptors__P_O2 = -var_chaste_interface__ryanodine_receptors__P_O2 * var_ryanodine_receptors__k_minus_b + pow(var_chaste_interface__calcium_concentration__Cass, var_ryanodine_receptors__m) * var_chaste_interface__ryanodine_receptors__P_O1 * var_ryanodine_receptors__k_plus_b; // 1 / millisecond + const double var_ryanodine_receptors__n = 4; // dimensionless + const double d_dt_chaste_interface_var_ryanodine_receptors__P_O1 = var_chaste_interface__ryanodine_receptors__P_C2 * var_ryanodine_receptors__k_minus_c + var_chaste_interface__ryanodine_receptors__P_O2 * var_ryanodine_receptors__k_minus_b - var_chaste_interface__ryanodine_receptors__P_O1 * var_ryanodine_receptors__k_minus_a - var_chaste_interface__ryanodine_receptors__P_O1 * var_ryanodine_receptors__k_plus_c + pow(var_chaste_interface__calcium_concentration__Cass, var_ryanodine_receptors__n) * var_ryanodine_receptors__P_C1 * var_ryanodine_receptors__k_plus_a - pow(var_chaste_interface__calcium_concentration__Cass, var_ryanodine_receptors__m) * var_chaste_interface__ryanodine_receptors__P_O1 * var_ryanodine_receptors__k_plus_b; // 1 / millisecond + const double var_slow_delayed_rectifier_potassium_current__i_Ks = pow(var_chaste_interface__slow_delayed_rectifier_potassium_current__nKs, 2) * (-var_fast_transient_outward_potassium_current__E_K + var_chaste_interface__membrane__V) * mParameters[14]; // picoA_per_picoF + const double var_slow_transient_outward_potassium_current__g_Kto_s = 0; // milliS_per_microF + const double var_slow_transient_outward_potassium_current__i_Kto_s = (-var_fast_transient_outward_potassium_current__E_K + var_chaste_interface__membrane__V) * var_chaste_interface__slow_transient_outward_potassium_current__ato_s * var_slow_transient_outward_potassium_current__g_Kto_s * var_chaste_interface__slow_transient_outward_potassium_current__ito_s; // picoA_per_picoF + const double var_sodium_background_current__g_Nab = 0.0025999999999999999; // milliS_per_microF + const double var_sodium_calcium_exchange_current__K_mCa = 1380; // micromolar + const double var_sodium_calcium_exchange_current__K_mNa = 87500; // micromolar + const double var_sodium_calcium_exchange_current__eta = 0.34999999999999998; // dimensionless + const double var_sodium_calcium_exchange_current__k_sat = 0.10000000000000001; // dimensionless + const double var_fast_sodium_current__E_Na = var_membrane__R * var_membrane__T * log((mParameters[6] + 0.1111111111111111 * mParameters[5]) / (var_chaste_interface__sodium_concentration__Nai + 0.1111111111111111 * var_chaste_interface__potassium_concentration__Ki)) / var_membrane__F; // millivolt + const double var_fast_sodium_current__i_Na = (-var_fast_sodium_current__E_Na + var_chaste_interface__membrane__V) * var_chaste_interface__fast_sodium_current__O_Na * mParameters[9]; // picoA_per_picoF + const double var_rapid_delayed_rectifier_potassium_current__i_Kr = (-var_membrane__R * var_membrane__T * log((mParameters[5] + 0.020408163265306124 * mParameters[6]) / (var_chaste_interface__potassium_concentration__Ki + 0.020408163265306124 * var_chaste_interface__sodium_concentration__Nai)) / var_membrane__F + var_chaste_interface__membrane__V) * var_chaste_interface__rapid_delayed_rectifier_potassium_current__O_K * mParameters[13]; // picoA_per_picoF + const double var_sodium_background_current__i_Nab = (-var_fast_sodium_current__E_Na + var_chaste_interface__membrane__V) * var_sodium_background_current__g_Nab; // picoA_per_picoF + const double var_sodium_calcium_exchange_current__i_NaCa = (pow(var_chaste_interface__sodium_concentration__Nai, 3) * mParameters[4] * exp(var_membrane__F * var_chaste_interface__membrane__V * var_sodium_calcium_exchange_current__eta / (var_membrane__R * var_membrane__T)) - pow(mParameters[6], 3) * var_calcium_concentration__Cai * exp((-1 + var_sodium_calcium_exchange_current__eta) * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * mParameters[15] / ((1 + var_sodium_calcium_exchange_current__k_sat * exp((-1 + var_sodium_calcium_exchange_current__eta) * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * (pow(mParameters[6], 3) + pow(var_sodium_calcium_exchange_current__K_mNa, 3)) * (mParameters[4] + var_sodium_calcium_exchange_current__K_mCa)); // picoA_per_picoF + const double var_calcium_concentration__Cai_orig_deriv = (-var_calcium_fluxes__J_trpn - var_calcium_fluxes__J_up - 0.5 * (-2 * var_sodium_calcium_exchange_current__i_NaCa + var_calcium_background_current__i_Cab + var_calcium_pump_current__i_pCa) * var_membrane__Acap * mParameters[8] / (var_membrane__F * var_membrane__Vmyo) + var_calcium_fluxes__J_leak + var_calcium_fluxes__J_xfer) * var_calcium_concentration__Bi; // micromolar / millisecond + const double d_dt_chaste_interface_var_calcium_concentration__Cai_converted = 0.001 * var_calcium_concentration__Cai_orig_deriv; // millimolar / millisecond + const double var_sodium_potassium_pump_current__Km_Ko = 1500; // micromolar + const double var_sodium_potassium_pump_current__Km_Nai = 21000; // micromolar + const double var_sodium_potassium_pump_current__i_NaK_max = 0.88; // picoA_per_picoF + const double var_sodium_potassium_pump_current__sigma = -0.14285714285714285 + 0.14285714285714285 * exp(1.4858841010401188e-5 * mParameters[6]); // dimensionless + const double var_sodium_potassium_pump_current__f_NaK = 1 / (1 + 0.1245 * exp(-0.10000000000000001 * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T)) + 0.036499999999999998 * var_sodium_potassium_pump_current__sigma * exp(-var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))); // dimensionless + const double var_sodium_potassium_pump_current__i_NaK = mParameters[5] * var_sodium_potassium_pump_current__f_NaK * var_sodium_potassium_pump_current__i_NaK_max / ((1 + pow((var_sodium_potassium_pump_current__Km_Nai / var_chaste_interface__sodium_concentration__Nai), 1.5)) * (mParameters[5] + var_sodium_potassium_pump_current__Km_Ko)); // picoA_per_picoF + const double d_dt_chaste_interface_var_sodium_concentration__Nai = -(3 * var_sodium_calcium_exchange_current__i_NaCa + 3 * var_sodium_potassium_pump_current__i_NaK + var_fast_sodium_current__i_Na + var_sodium_background_current__i_Nab) * var_membrane__Acap * mParameters[8] * mParameters[3] / (var_membrane__F * var_membrane__Vmyo); // micromolar / millisecond + const double var_time_independent_potassium_current__i_K1 = (-var_fast_transient_outward_potassium_current__E_K + var_chaste_interface__membrane__V) * mParameters[5] * mParameters[11] / ((1 + exp(0.089599999999999999 * var_chaste_interface__membrane__V - 0.089599999999999999 * var_fast_transient_outward_potassium_current__E_K)) * (210 + mParameters[5])); // picoA_per_picoF + const double var_ultra_rapidly_activating_delayed_rectifier_potassium_current__g_Kur = 0.16; // milliS_per_microF + const double var_ultra_rapidly_activating_delayed_rectifier_potassium_current__i_Kur = (-var_fast_transient_outward_potassium_current__E_K + var_chaste_interface__membrane__V) * var_chaste_interface__ultra_rapidly_activating_delayed_rectifier_potassium_current__aur * var_ultra_rapidly_activating_delayed_rectifier_potassium_current__g_Kur * var_chaste_interface__ultra_rapidly_activating_delayed_rectifier_potassium_current__iur; // picoA_per_picoF + const double d_dt_chaste_interface_var_potassium_concentration__Ki = -(-2 * var_sodium_potassium_pump_current__i_NaK + var_fast_transient_outward_potassium_current__i_Kto_f + var_non_inactivating_steady_state_potassium_current__i_Kss + var_rapid_delayed_rectifier_potassium_current__i_Kr + var_slow_delayed_rectifier_potassium_current__i_Ks + var_slow_transient_outward_potassium_current__i_Kto_s + var_time_independent_potassium_current__i_K1 + var_ultra_rapidly_activating_delayed_rectifier_potassium_current__i_Kur) * var_membrane__Acap * mParameters[8] * mParameters[3] / (var_membrane__F * var_membrane__Vmyo); // micromolar / millisecond + + rResidual[11] = rCurrentGuess[11] - rY[1] - mDt*d_dt_chaste_interface_var_calcium_concentration__Cai_converted; + rResidual[12] = rCurrentGuess[12] - rY[2] - mDt*d_dt_chaste_interface_var_calcium_concentration__Cass; + rResidual[9] = rCurrentGuess[9] - rY[3] - mDt*d_dt_chaste_interface_var_calcium_concentration__CaJSR; + rResidual[10] = rCurrentGuess[10] - rY[4] - mDt*d_dt_chaste_interface_var_calcium_concentration__CaNSR; + rResidual[13] = rCurrentGuess[13] - rY[5] - mDt*d_dt_chaste_interface_var_calcium_fluxes__P_RyR; + rResidual[8] = rCurrentGuess[8] - rY[6] - mDt*d_dt_chaste_interface_var_calcium_buffering__LTRPN_Ca; + rResidual[7] = rCurrentGuess[7] - rY[7] - mDt*d_dt_chaste_interface_var_calcium_buffering__HTRPN_Ca; + rResidual[29] = rCurrentGuess[29] - rY[8] - mDt*d_dt_chaste_interface_var_ryanodine_receptors__P_O1; + rResidual[30] = rCurrentGuess[30] - rY[9] - mDt*d_dt_chaste_interface_var_ryanodine_receptors__P_O2; + rResidual[28] = rCurrentGuess[28] - rY[10] - mDt*d_dt_chaste_interface_var_ryanodine_receptors__P_C2; + rResidual[6] = rCurrentGuess[6] - rY[11] - mDt*d_dt_chaste_interface_var_L_type_calcium_current__O; + rResidual[0] = rCurrentGuess[0] - rY[12] - mDt*d_dt_chaste_interface_var_L_type_calcium_current__C2; + rResidual[1] = rCurrentGuess[1] - rY[13] - mDt*d_dt_chaste_interface_var_L_type_calcium_current__C3; + rResidual[2] = rCurrentGuess[2] - rY[14] - mDt*d_dt_chaste_interface_var_L_type_calcium_current__C4; + rResidual[3] = rCurrentGuess[3] - rY[15] - mDt*d_dt_chaste_interface_var_L_type_calcium_current__I1; + rResidual[4] = rCurrentGuess[4] - rY[16] - mDt*d_dt_chaste_interface_var_L_type_calcium_current__I2; + rResidual[5] = rCurrentGuess[5] - rY[17] - mDt*d_dt_chaste_interface_var_L_type_calcium_current__I3; + rResidual[31] = rCurrentGuess[31] - rY[18] - mDt*d_dt_chaste_interface_var_sodium_concentration__Nai; + rResidual[21] = rCurrentGuess[21] - rY[19] - mDt*d_dt_chaste_interface_var_fast_sodium_current__O_Na; + rResidual[14] = rCurrentGuess[14] - rY[20] - mDt*d_dt_chaste_interface_var_fast_sodium_current__C_Na1; + rResidual[15] = rCurrentGuess[15] - rY[21] - mDt*d_dt_chaste_interface_var_fast_sodium_current__C_Na2; + rResidual[16] = rCurrentGuess[16] - rY[22] - mDt*d_dt_chaste_interface_var_fast_sodium_current__I1_Na; + rResidual[17] = rCurrentGuess[17] - rY[23] - mDt*d_dt_chaste_interface_var_fast_sodium_current__I2_Na; + rResidual[20] = rCurrentGuess[20] - rY[24] - mDt*d_dt_chaste_interface_var_fast_sodium_current__IF_Na; + rResidual[18] = rCurrentGuess[18] - rY[25] - mDt*d_dt_chaste_interface_var_fast_sodium_current__IC_Na2; + rResidual[19] = rCurrentGuess[19] - rY[26] - mDt*d_dt_chaste_interface_var_fast_sodium_current__IC_Na3; + rResidual[23] = rCurrentGuess[23] - rY[27] - mDt*d_dt_chaste_interface_var_potassium_concentration__Ki; + rResidual[22] = rCurrentGuess[22] - rY[36] - mDt*d_dt_chaste_interface_var_non_inactivating_steady_state_potassium_current__iKss; + rResidual[27] = rCurrentGuess[27] - rY[37] - mDt*d_dt_chaste_interface_var_rapid_delayed_rectifier_potassium_current__O_K; + rResidual[24] = rCurrentGuess[24] - rY[38] - mDt*d_dt_chaste_interface_var_rapid_delayed_rectifier_potassium_current__C_K1; + rResidual[25] = rCurrentGuess[25] - rY[39] - mDt*d_dt_chaste_interface_var_rapid_delayed_rectifier_potassium_current__C_K2; + rResidual[26] = rCurrentGuess[26] - rY[40] - mDt*d_dt_chaste_interface_var_rapid_delayed_rectifier_potassium_current__I_K; + } + + void Cellbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLBackwardEuler::ComputeJacobian(double var_chaste_interface__environment__time, const double rCurrentGuess[32], double rJacobian[32][32]) + { + std::vector& rY = rGetStateVariables(); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -82.4202 + double var_chaste_interface__fast_transient_outward_potassium_current__ato_f = rY[28]; + // Units: dimensionless; Initial value: 0.00265563 + double var_chaste_interface__fast_transient_outward_potassium_current__ito_f = rY[29]; + // Units: dimensionless; Initial value: 0.999977 + double var_chaste_interface__slow_delayed_rectifier_potassium_current__nKs = rY[32]; + // Units: dimensionless; Initial value: 0.000262753 + double var_chaste_interface__ultra_rapidly_activating_delayed_rectifier_potassium_current__aur = rY[33]; + // Units: dimensionless; Initial value: 0.000417069 + double var_chaste_interface__ultra_rapidly_activating_delayed_rectifier_potassium_current__iur = rY[34]; + // Units: dimensionless; Initial value: 0.998543 + double var_chaste_interface__non_inactivating_steady_state_potassium_current__aKss = rY[35]; + // Units: dimensionless; Initial value: 0.000417069 + + double var_chaste_interface__L_type_calcium_current__C4 = rCurrentGuess[2]; + double var_chaste_interface__L_type_calcium_current__I2 = rCurrentGuess[4]; + double var_chaste_interface__L_type_calcium_current__O = rCurrentGuess[6]; + double var_chaste_interface__calcium_buffering__HTRPN_Ca = rCurrentGuess[7]; + double var_chaste_interface__calcium_buffering__LTRPN_Ca = rCurrentGuess[8]; + double var_chaste_interface__calcium_concentration__CaJSR = rCurrentGuess[9]; + double var_chaste_interface__calcium_concentration__CaNSR = rCurrentGuess[10]; + double var_chaste_interface__calcium_concentration__Cai_converted = rCurrentGuess[11]; + double var_chaste_interface__calcium_concentration__Cass = rCurrentGuess[12]; + double var_chaste_interface__calcium_fluxes__P_RyR = rCurrentGuess[13]; + double var_chaste_interface__fast_sodium_current__O_Na = rCurrentGuess[21]; + double var_chaste_interface__non_inactivating_steady_state_potassium_current__iKss = rCurrentGuess[22]; + double var_chaste_interface__potassium_concentration__Ki = rCurrentGuess[23]; + double var_chaste_interface__rapid_delayed_rectifier_potassium_current__O_K = rCurrentGuess[27]; + double var_chaste_interface__ryanodine_receptors__P_C2 = rCurrentGuess[28]; + double var_chaste_interface__ryanodine_receptors__P_O1 = rCurrentGuess[29]; + double var_chaste_interface__ryanodine_receptors__P_O2 = rCurrentGuess[30]; + double var_chaste_interface__sodium_concentration__Nai = rCurrentGuess[31]; + + const double var_x0 = exp(-0.92307692307692313 - 0.076923076923076927 * var_chaste_interface__membrane__V); + const double var_x1 = exp(1.2 + 0.10000000000000001 * var_chaste_interface__membrane__V); + const double var_x2 = var_x1 * (1 + 0.69999999999999996 * exp(-160 * pow((1 + 0.025000000000000001 * var_chaste_interface__membrane__V), 2)) - 0.75 * exp(-pow((1 + 0.050000000000000003 * var_chaste_interface__membrane__V), 2))) / (1 + 0.12 * var_x1); + const double var_x3 = 0.10000000000000001 * var_x0; + const double var_x4 = -1.6000000000000001 * var_x2; + const double var_x5 = 0.80000000000000004 * var_x2; + const double var_x6 = 0.15000000000000002 * var_x0; + const double var_x7 = exp(-2.1025 * pow((1 + 0.068965517241379309 * var_chaste_interface__membrane__V), 2)); + const double var_x8 = 0.026000000000000002 * var_x7; + const double var_x9 = 13 - 13 * var_x7; + const double var_x10 = 1 / (20 + var_chaste_interface__calcium_concentration__Cass); + const double var_x11 = 0.23324 * var_x10; + const double var_x12 = var_x11 * var_chaste_interface__calcium_concentration__Cass; + const double var_x13 = var_x12 * var_x9; + const double var_x14 = 0.40000000000000002 * var_x2; + const double var_x15 = 0.00093296000000000004 * var_x10 * var_x2; + const double var_x16 = var_x15 * var_chaste_interface__calcium_concentration__Cass; + const double var_x17 = 0.00040000000000000002 * var_x0; + const double var_x18 = 0.0001 * var_x0; + const double var_x19 = 0.20000000000000001 * var_x0; + const double var_x20 = var_chaste_interface__calcium_concentration__Cass / pow((1 + 0.050000000000000003 * var_chaste_interface__calcium_concentration__Cass), 2); + const double var_x21 = -var_x15 * var_chaste_interface__L_type_calcium_current__C4 + 2.3324000000000003e-6 * var_x2 * var_x20 * var_chaste_interface__L_type_calcium_current__C4; + const double var_x22 = var_x9 * var_chaste_interface__L_type_calcium_current__C4; + const double var_x23 = 0.00058310000000000002 * var_x20; + const double var_x24 = var_x22 * var_x23 - var_x11 * var_x22; + const double var_x25 = 0.013000000000000001 * var_x7; + const double var_x26 = 0.00040000000000000002 * var_x2; + const double var_x27 = var_x23 * var_chaste_interface__L_type_calcium_current__O - var_x11 * var_chaste_interface__L_type_calcium_current__O; + const double var_x28 = 0.013000000000000001 - var_x25; + const double var_x29 = var_x23 * var_chaste_interface__L_type_calcium_current__I2 - var_x11 * var_chaste_interface__L_type_calcium_current__I2; + const double var_x30 = 2.3700000000000001 * var_chaste_interface__calcium_concentration__Cai_converted; + const double var_x31 = 3.1999999999999999e-5 + var_x30; + const double var_x32 = 2.3700000000000001 * var_chaste_interface__calcium_buffering__HTRPN_Ca; + const double var_x33 = 32.699999999999996 * var_chaste_interface__calcium_concentration__Cai_converted; + const double var_x34 = 0.019599999999999999 + var_x33; + const double var_x35 = 32.699999999999996 * var_chaste_interface__calcium_buffering__LTRPN_Ca; + const double var_x36 = 1 + 0.00125 * var_chaste_interface__calcium_concentration__CaJSR; + const double var_x37 = pow(var_x36, (-2)); + const double var_x38 = 1 / (1 + 18.75 * var_x37); + const double var_x39 = var_chaste_interface__ryanodine_receptors__P_O1 + var_chaste_interface__ryanodine_receptors__P_O2; + const double var_x40 = var_chaste_interface__calcium_fluxes__P_RyR * mParameters[1]; + const double var_x41 = -var_chaste_interface__calcium_concentration__Cass + var_chaste_interface__calcium_concentration__CaJSR; + const double var_x42 = var_x39 * var_x40; + const double var_x43 = -var_x38 * var_x41; + const double var_x44 = var_x39 * mParameters[1]; + const double var_x45 = var_x40 * var_x43; + const double var_x46 = pow(var_chaste_interface__calcium_concentration__Cai_converted, 2); + const double var_x47 = 1000000 * var_x46; + const double var_x48 = 1 / (0.25 + var_x47); + const double var_x49 = var_x48 * var_chaste_interface__calcium_concentration__Cai_converted; + const double var_x50 = var_x49 * mParameters[2]; + const double var_x51 = pow((2.4999999999999999e-7 + var_x46), (-2)); + const double var_x52 = pow(var_chaste_interface__calcium_concentration__Cai_converted, 3); + const double var_x53 = var_x51 * var_x52 * mParameters[2]; + const double var_x54 = 0.00023799999999999998 + var_chaste_interface__calcium_concentration__Cai_converted; + const double var_x55 = 1 + 1.19e-5 / pow(var_x54, 2); + const double var_x56 = 1 / var_x55; + const double var_x57 = 0.001 * var_x56; + const double var_x58 = 1 / var_chaste_interface__calcium_concentration__Cai_converted; + const double var_x59 = exp(-0.025317124991725771 * var_chaste_interface__membrane__V); + const double var_x60 = pow(mParameters[6], 3); + const double var_x61 = var_x59 * var_x60; + const double var_x62 = mParameters[15] / ((1 + 0.10000000000000001 * var_x59) * (1380 + mParameters[4]) * (669921875000000.0 + var_x60)); + const double var_x63 = var_x61 * var_x62; + const double var_x64 = 1000 * var_chaste_interface__calcium_concentration__Cai_converted; + const double var_x65 = var_x47 * var_x48; + const double var_x66 = exp(0.013632298072467722 * var_chaste_interface__membrane__V); + const double var_x67 = var_x62 * var_x66 * pow(var_chaste_interface__sodium_concentration__Nai, 2) * mParameters[4]; + const double var_x68 = 0.23799999999999999 + var_chaste_interface__calcium_concentration__Cass; + const double var_x69 = pow(var_x68, (-2)); + const double var_x70 = 1 / (1 + 11.899999999999999 * var_x69); + const double var_x71 = mParameters[7] * mParameters[8]; + const double var_x72 = 80.808080808080803 * var_chaste_interface__ryanodine_receptors__P_O1 + 80.808080808080803 * var_chaste_interface__ryanodine_receptors__P_O2; + const double var_x73 = var_x40 * var_x70; + const double var_x74 = 80.808080808080803 * var_chaste_interface__calcium_concentration__CaJSR - 80.808080808080803 * var_chaste_interface__calcium_concentration__Cass; + const double var_x75 = var_x73 * var_x74; + const double var_x76 = 0.04926108374384236 * var_chaste_interface__membrane__V; + const double var_x77 = 0.20000000000000001 * exp(0.12315270935960591 - var_x76); + const double var_x78 = exp(-0.016666666666666666 - 0.0066666666666666671 * var_chaste_interface__membrane__V); + const double var_x79 = 1 / (0.25 * var_x78 + 0.1027 * exp(-0.20833333333333334 - 0.083333333333333329 * var_chaste_interface__membrane__V)); + const double var_x80 = 3.802 * var_x79; + const double var_x81 = 0.008539999999999999 + 2.0000000000000002e-5 * var_chaste_interface__membrane__V; + const double var_x82 = 3.802 / (0.1027 * exp(-0.16666666666666666 - 0.066666666666666666 * var_chaste_interface__membrane__V) + 0.23000000000000001 * var_x78); + const double var_x83 = exp(-0.90909090909090906 - 0.12987012987012986 * var_chaste_interface__membrane__V); + const double var_x84 = 6.9999999999999997e-7 * var_x83; + const double var_x85 = exp(0.36945812807881773 - var_x76); + const double var_x86 = 0.22 * var_x85; + const double var_x87 = 3.802 / (0.20000000000000001 * var_x78 + 0.1027 * exp(-0.14705882352941177 - 0.058823529411764705 * var_chaste_interface__membrane__V)); + const double var_x88 = -var_x87; + const double var_x89 = 0.19170000000000001 * exp(-0.12315270935960591 - var_x76); + const double var_x90 = var_x82 + var_x89; + const double var_x91 = var_x81 + var_x87; + const double var_x92 = 1 / (0.39395599999999997 + 0.188495 * exp(-0.42168674698795178 + 0.060240963855421679 * mParameters[10] - 0.060240963855421679 * var_chaste_interface__membrane__V)); + const double var_x93 = 1.0526315789473684e-5 * var_x92; + const double var_x94 = 1.4e-8 * var_x83; + const double var_x95 = 0.001 * var_x92; + const double var_x96 = -var_x81; + const double var_x97 = 1.2097272727272726e-5 * var_x79 * var_x83 * var_x92 / (var_x81 * var_x85); + const double var_x98 = var_x92; + const double var_x99 = 1 / var_chaste_interface__potassium_concentration__Ki; + const double var_x100 = var_x99 * mParameters[5]; + const double var_x101 = log(var_x100); + const double var_x102 = -25.674321243523316 * var_x101 + var_chaste_interface__membrane__V; + const double var_x103 = var_chaste_interface__non_inactivating_steady_state_potassium_current__aKss * mParameters[12]; + const double var_x104 = mParameters[8] * mParameters[3]; + const double var_x105 = 0.061518471582797281 * var_x104; + const double var_x106 = 1 / (var_chaste_interface__potassium_concentration__Ki + 0.020408163265306124 * var_chaste_interface__sodium_concentration__Nai); + const double var_x107 = var_x106 * var_chaste_interface__rapid_delayed_rectifier_potassium_current__O_K * mParameters[13]; + const double var_x108 = 1.5794450018272976 * var_x99; + const double var_x109 = exp(0.089599999999999999 * var_chaste_interface__membrane__V - 2.300419183419689 * var_x101); + const double var_x110 = 1 + var_x109; + const double var_x111 = 1 / (210 + mParameters[5]); + const double var_x112 = 1 / var_chaste_interface__sodium_concentration__Nai; + const double var_x113 = pow(var_x112, 1.5); + const double var_x114 = var_x112 * var_x113 * mParameters[5] / ((1500 + mParameters[5]) * pow((3.2860264730588296e-7 + var_x113), 2) * (1 + 0.1245 * exp(-0.0038949423064193493 * var_chaste_interface__membrane__V) + 0.036499999999999998 * (-0.14285714285714285 + 0.14285714285714285 * exp(1.4858841010401188e-5 * mParameters[6])) * exp(-0.038949423064193495 * var_chaste_interface__membrane__V))); + const double var_x115 = 0.022348 * exp(0.01176 * var_chaste_interface__membrane__V); + const double var_x116 = -var_x115; + const double var_x117 = 0.013733 * exp(0.038198000000000003 * var_chaste_interface__membrane__V); + const double var_x118 = 6.8899999999999994e-5 * exp(-0.041779999999999998 * var_chaste_interface__membrane__V); + const double var_x119 = 0.0064970000000000002 * exp(-0.16339999999999999 - 0.032680000000000001 * var_chaste_interface__membrane__V); + const double var_x120 = 0.090820999999999999 * exp(0.11695499999999999 + 0.023390999999999999 * var_chaste_interface__membrane__V); + const double var_x121 = 0.012149999999999999 * pow(var_chaste_interface__calcium_concentration__Cass, 2) * var_chaste_interface__ryanodine_receptors__P_O1; + const double var_x122 = pow(var_chaste_interface__calcium_concentration__Cass, 3); + const double var_x123 = 0.0060749999999999997 * pow(var_chaste_interface__calcium_concentration__Cass, 4); + const double var_x124 = 0.0040499999999999998 * var_x122; + const double var_x125 = 1 / (var_chaste_interface__sodium_concentration__Nai + 0.1111111111111111 * var_chaste_interface__potassium_concentration__Ki); + const double var_x126 = var_x125 * var_chaste_interface__fast_sodium_current__O_Na * mParameters[9]; + + + rJacobian[0][0] = 1.0 - (mDt * (-0.050000000000000003 * var_x0 - 2.8000000000000003 * var_x2)); + rJacobian[0][1] = -(mDt * (var_x3 + var_x4)); + rJacobian[0][2] = -(mDt * (var_x4)); + rJacobian[0][3] = -(mDt * (var_x4)); + rJacobian[0][4] = -(mDt * (var_x4)); + rJacobian[0][5] = -(mDt * (var_x4)); + rJacobian[0][6] = -(mDt * (var_x4)); + rJacobian[0][7] = 0.0; + rJacobian[0][8] = 0.0; + rJacobian[0][9] = 0.0; + rJacobian[0][10] = 0.0; + rJacobian[0][11] = 0.0; + rJacobian[0][12] = 0.0; + rJacobian[0][13] = 0.0; + rJacobian[0][14] = 0.0; + rJacobian[0][15] = 0.0; + rJacobian[0][16] = 0.0; + rJacobian[0][17] = 0.0; + rJacobian[0][18] = 0.0; + rJacobian[0][19] = 0.0; + rJacobian[0][20] = 0.0; + rJacobian[0][21] = 0.0; + rJacobian[0][22] = 0.0; + rJacobian[0][23] = 0.0; + rJacobian[0][24] = 0.0; + rJacobian[0][25] = 0.0; + rJacobian[0][26] = 0.0; + rJacobian[0][27] = 0.0; + rJacobian[0][28] = 0.0; + rJacobian[0][29] = 0.0; + rJacobian[0][30] = 0.0; + rJacobian[0][31] = 0.0; + rJacobian[1][0] = -(mDt * (1.2000000000000002 * var_x2)); + rJacobian[1][1] = 1.0 - (mDt * (-var_x3 - var_x5)); + rJacobian[1][2] = -(mDt * (var_x6)); + rJacobian[1][3] = 0.0; + rJacobian[1][4] = 0.0; + rJacobian[1][5] = 0.0; + rJacobian[1][6] = 0.0; + rJacobian[1][7] = 0.0; + rJacobian[1][8] = 0.0; + rJacobian[1][9] = 0.0; + rJacobian[1][10] = 0.0; + rJacobian[1][11] = 0.0; + rJacobian[1][12] = 0.0; + rJacobian[1][13] = 0.0; + rJacobian[1][14] = 0.0; + rJacobian[1][15] = 0.0; + rJacobian[1][16] = 0.0; + rJacobian[1][17] = 0.0; + rJacobian[1][18] = 0.0; + rJacobian[1][19] = 0.0; + rJacobian[1][20] = 0.0; + rJacobian[1][21] = 0.0; + rJacobian[1][22] = 0.0; + rJacobian[1][23] = 0.0; + rJacobian[1][24] = 0.0; + rJacobian[1][25] = 0.0; + rJacobian[1][26] = 0.0; + rJacobian[1][27] = 0.0; + rJacobian[1][28] = 0.0; + rJacobian[1][29] = 0.0; + rJacobian[1][30] = 0.0; + rJacobian[1][31] = 0.0; + rJacobian[2][0] = 0.0; + rJacobian[2][1] = -(mDt * (var_x5)); + rJacobian[2][2] = 1.0 - (mDt * (-0.026000000000000002 + var_x8 - var_x13 - var_x14 - var_x16 - var_x6)); + rJacobian[2][3] = -(mDt * (1.0000000000000002e-6 * var_x0)); + rJacobian[2][4] = -(mDt * (var_x17)); + rJacobian[2][5] = -(mDt * (var_x18)); + rJacobian[2][6] = -(mDt * (var_x19)); + rJacobian[2][7] = 0.0; + rJacobian[2][8] = 0.0; + rJacobian[2][9] = 0.0; + rJacobian[2][10] = 0.0; + rJacobian[2][11] = 0.0; + rJacobian[2][12] = -(mDt * (var_x21 + var_x24)); + rJacobian[2][13] = 0.0; + rJacobian[2][14] = 0.0; + rJacobian[2][15] = 0.0; + rJacobian[2][16] = 0.0; + rJacobian[2][17] = 0.0; + rJacobian[2][18] = 0.0; + rJacobian[2][19] = 0.0; + rJacobian[2][20] = 0.0; + rJacobian[2][21] = 0.0; + rJacobian[2][22] = 0.0; + rJacobian[2][23] = 0.0; + rJacobian[2][24] = 0.0; + rJacobian[2][25] = 0.0; + rJacobian[2][26] = 0.0; + rJacobian[2][27] = 0.0; + rJacobian[2][28] = 0.0; + rJacobian[2][29] = 0.0; + rJacobian[2][30] = 0.0; + rJacobian[2][31] = 0.0; + rJacobian[3][0] = 0.0; + rJacobian[3][1] = 0.0; + rJacobian[3][2] = -(mDt * (var_x16)); + rJacobian[3][3] = 1.0 - (mDt * (-0.0135 + var_x25 + var_x0 * (-0.026000000000000002 + 0.026000000000000002 * var_x7))); + rJacobian[3][4] = 0.0; + rJacobian[3][5] = -(mDt * (var_x26)); + rJacobian[3][6] = -(mDt * (var_x12)); + rJacobian[3][7] = 0.0; + rJacobian[3][8] = 0.0; + rJacobian[3][9] = 0.0; + rJacobian[3][10] = 0.0; + rJacobian[3][11] = 0.0; + rJacobian[3][12] = -(mDt * (-var_x21 - var_x27)); + rJacobian[3][13] = 0.0; + rJacobian[3][14] = 0.0; + rJacobian[3][15] = 0.0; + rJacobian[3][16] = 0.0; + rJacobian[3][17] = 0.0; + rJacobian[3][18] = 0.0; + rJacobian[3][19] = 0.0; + rJacobian[3][20] = 0.0; + rJacobian[3][21] = 0.0; + rJacobian[3][22] = 0.0; + rJacobian[3][23] = 0.0; + rJacobian[3][24] = 0.0; + rJacobian[3][25] = 0.0; + rJacobian[3][26] = 0.0; + rJacobian[3][27] = 0.0; + rJacobian[3][28] = 0.0; + rJacobian[3][29] = 0.0; + rJacobian[3][30] = 0.0; + rJacobian[3][31] = 0.0; + rJacobian[4][0] = 0.0; + rJacobian[4][1] = 0.0; + rJacobian[4][2] = -(mDt * (0.026000000000000002 - var_x8)); + rJacobian[4][3] = 0.0; + rJacobian[4][4] = 1.0 - (mDt * (-var_x12 - var_x17 - var_x26)); + rJacobian[4][5] = -(mDt * (0.00050000000000000001)); + rJacobian[4][6] = -(mDt * (var_x28)); + rJacobian[4][7] = 0.0; + rJacobian[4][8] = 0.0; + rJacobian[4][9] = 0.0; + rJacobian[4][10] = 0.0; + rJacobian[4][11] = 0.0; + rJacobian[4][12] = -(mDt * (var_x29)); + rJacobian[4][13] = 0.0; + rJacobian[4][14] = 0.0; + rJacobian[4][15] = 0.0; + rJacobian[4][16] = 0.0; + rJacobian[4][17] = 0.0; + rJacobian[4][18] = 0.0; + rJacobian[4][19] = 0.0; + rJacobian[4][20] = 0.0; + rJacobian[4][21] = 0.0; + rJacobian[4][22] = 0.0; + rJacobian[4][23] = 0.0; + rJacobian[4][24] = 0.0; + rJacobian[4][25] = 0.0; + rJacobian[4][26] = 0.0; + rJacobian[4][27] = 0.0; + rJacobian[4][28] = 0.0; + rJacobian[4][29] = 0.0; + rJacobian[4][30] = 0.0; + rJacobian[4][31] = 0.0; + rJacobian[5][0] = 0.0; + rJacobian[5][1] = 0.0; + rJacobian[5][2] = -(mDt * (var_x13)); + rJacobian[5][3] = -(mDt * (var_x28)); + rJacobian[5][4] = -(mDt * (var_x12)); + rJacobian[5][5] = 1.0 - (mDt * (-0.00050000000000000001 - var_x18 - var_x26)); + rJacobian[5][6] = 0.0; + rJacobian[5][7] = 0.0; + rJacobian[5][8] = 0.0; + rJacobian[5][9] = 0.0; + rJacobian[5][10] = 0.0; + rJacobian[5][11] = 0.0; + rJacobian[5][12] = -(mDt * (-var_x24 - var_x29)); + rJacobian[5][13] = 0.0; + rJacobian[5][14] = 0.0; + rJacobian[5][15] = 0.0; + rJacobian[5][16] = 0.0; + rJacobian[5][17] = 0.0; + rJacobian[5][18] = 0.0; + rJacobian[5][19] = 0.0; + rJacobian[5][20] = 0.0; + rJacobian[5][21] = 0.0; + rJacobian[5][22] = 0.0; + rJacobian[5][23] = 0.0; + rJacobian[5][24] = 0.0; + rJacobian[5][25] = 0.0; + rJacobian[5][26] = 0.0; + rJacobian[5][27] = 0.0; + rJacobian[5][28] = 0.0; + rJacobian[5][29] = 0.0; + rJacobian[5][30] = 0.0; + rJacobian[5][31] = 0.0; + rJacobian[6][0] = 0.0; + rJacobian[6][1] = 0.0; + rJacobian[6][2] = -(mDt * (var_x14)); + rJacobian[6][3] = -(mDt * (0.00050000000000000001)); + rJacobian[6][4] = -(mDt * (var_x26)); + rJacobian[6][5] = 0.0; + rJacobian[6][6] = 1.0 - (mDt * (-0.013000000000000001 + var_x25 - var_x12 - var_x19)); + rJacobian[6][7] = 0.0; + rJacobian[6][8] = 0.0; + rJacobian[6][9] = 0.0; + rJacobian[6][10] = 0.0; + rJacobian[6][11] = 0.0; + rJacobian[6][12] = -(mDt * (var_x27)); + rJacobian[6][13] = 0.0; + rJacobian[6][14] = 0.0; + rJacobian[6][15] = 0.0; + rJacobian[6][16] = 0.0; + rJacobian[6][17] = 0.0; + rJacobian[6][18] = 0.0; + rJacobian[6][19] = 0.0; + rJacobian[6][20] = 0.0; + rJacobian[6][21] = 0.0; + rJacobian[6][22] = 0.0; + rJacobian[6][23] = 0.0; + rJacobian[6][24] = 0.0; + rJacobian[6][25] = 0.0; + rJacobian[6][26] = 0.0; + rJacobian[6][27] = 0.0; + rJacobian[6][28] = 0.0; + rJacobian[6][29] = 0.0; + rJacobian[6][30] = 0.0; + rJacobian[6][31] = 0.0; + rJacobian[7][0] = 0.0; + rJacobian[7][1] = 0.0; + rJacobian[7][2] = 0.0; + rJacobian[7][3] = 0.0; + rJacobian[7][4] = 0.0; + rJacobian[7][5] = 0.0; + rJacobian[7][6] = 0.0; + rJacobian[7][7] = 1.0 - (mDt * (-var_x31)); + rJacobian[7][8] = 0.0; + rJacobian[7][9] = 0.0; + rJacobian[7][10] = 0.0; + rJacobian[7][11] = -(mDt * (331.80000000000001 - var_x32)); + rJacobian[7][12] = 0.0; + rJacobian[7][13] = 0.0; + rJacobian[7][14] = 0.0; + rJacobian[7][15] = 0.0; + rJacobian[7][16] = 0.0; + rJacobian[7][17] = 0.0; + rJacobian[7][18] = 0.0; + rJacobian[7][19] = 0.0; + rJacobian[7][20] = 0.0; + rJacobian[7][21] = 0.0; + rJacobian[7][22] = 0.0; + rJacobian[7][23] = 0.0; + rJacobian[7][24] = 0.0; + rJacobian[7][25] = 0.0; + rJacobian[7][26] = 0.0; + rJacobian[7][27] = 0.0; + rJacobian[7][28] = 0.0; + rJacobian[7][29] = 0.0; + rJacobian[7][30] = 0.0; + rJacobian[7][31] = 0.0; + rJacobian[8][0] = 0.0; + rJacobian[8][1] = 0.0; + rJacobian[8][2] = 0.0; + rJacobian[8][3] = 0.0; + rJacobian[8][4] = 0.0; + rJacobian[8][5] = 0.0; + rJacobian[8][6] = 0.0; + rJacobian[8][7] = 0.0; + rJacobian[8][8] = 1.0 - (mDt * (-var_x34)); + rJacobian[8][9] = 0.0; + rJacobian[8][10] = 0.0; + rJacobian[8][11] = -(mDt * (2289 - var_x35)); + rJacobian[8][12] = 0.0; + rJacobian[8][13] = 0.0; + rJacobian[8][14] = 0.0; + rJacobian[8][15] = 0.0; + rJacobian[8][16] = 0.0; + rJacobian[8][17] = 0.0; + rJacobian[8][18] = 0.0; + rJacobian[8][19] = 0.0; + rJacobian[8][20] = 0.0; + rJacobian[8][21] = 0.0; + rJacobian[8][22] = 0.0; + rJacobian[8][23] = 0.0; + rJacobian[8][24] = 0.0; + rJacobian[8][25] = 0.0; + rJacobian[8][26] = 0.0; + rJacobian[8][27] = 0.0; + rJacobian[8][28] = 0.0; + rJacobian[8][29] = 0.0; + rJacobian[8][30] = 0.0; + rJacobian[8][31] = 0.0; + rJacobian[9][0] = 0.0; + rJacobian[9][1] = 0.0; + rJacobian[9][2] = 0.0; + rJacobian[9][3] = 0.0; + rJacobian[9][4] = 0.0; + rJacobian[9][5] = 0.0; + rJacobian[9][6] = 0.0; + rJacobian[9][7] = 0.0; + rJacobian[9][8] = 0.0; + rJacobian[9][9] = 1.0 - (mDt * (var_x38 * (-0.050000000000000003 - var_x39 * var_x40) + 0.00013333333333333334 * (0.050000000000000003 * var_chaste_interface__calcium_concentration__CaNSR - 0.050000000000000003 * var_chaste_interface__calcium_concentration__CaJSR - var_x41 * var_x42) / (pow(var_x36, 3) * pow((0.053333333333333337 + var_x37), 2)))); + rJacobian[9][10] = -(mDt * (0.050000000000000003 * var_x38)); + rJacobian[9][11] = 0.0; + rJacobian[9][12] = -(mDt * (var_x38 * var_x42)); + rJacobian[9][13] = -(mDt * (var_x43 * var_x44)); + rJacobian[9][14] = 0.0; + rJacobian[9][15] = 0.0; + rJacobian[9][16] = 0.0; + rJacobian[9][17] = 0.0; + rJacobian[9][18] = 0.0; + rJacobian[9][19] = 0.0; + rJacobian[9][20] = 0.0; + rJacobian[9][21] = 0.0; + rJacobian[9][22] = 0.0; + rJacobian[9][23] = 0.0; + rJacobian[9][24] = 0.0; + rJacobian[9][25] = 0.0; + rJacobian[9][26] = 0.0; + rJacobian[9][27] = 0.0; + rJacobian[9][28] = 0.0; + rJacobian[9][29] = -(mDt * (var_x45)); + rJacobian[9][30] = -(mDt * (var_x45)); + rJacobian[9][31] = 0.0; + rJacobian[10][0] = 0.0; + rJacobian[10][1] = 0.0; + rJacobian[10][2] = 0.0; + rJacobian[10][3] = 0.0; + rJacobian[10][4] = 0.0; + rJacobian[10][5] = 0.0; + rJacobian[10][6] = 0.0; + rJacobian[10][7] = 0.0; + rJacobian[10][8] = 0.0; + rJacobian[10][9] = -(mDt * (0.0028598665395614866)); + rJacobian[10][10] = 1.0 - (mDt * (-0.0028598665395614866 - 12.316491897044804 * mParameters[0])); + rJacobian[10][11] = -(mDt * (12316.491897044803 * mParameters[0] + 24632983.794089608 * var_x50 - 24.632983794089608 * var_x53)); + rJacobian[10][12] = 0.0; + rJacobian[10][13] = 0.0; + rJacobian[10][14] = 0.0; + rJacobian[10][15] = 0.0; + rJacobian[10][16] = 0.0; + rJacobian[10][17] = 0.0; + rJacobian[10][18] = 0.0; + rJacobian[10][19] = 0.0; + rJacobian[10][20] = 0.0; + rJacobian[10][21] = 0.0; + rJacobian[10][22] = 0.0; + rJacobian[10][23] = 0.0; + rJacobian[10][24] = 0.0; + rJacobian[10][25] = 0.0; + rJacobian[10][26] = 0.0; + rJacobian[10][27] = 0.0; + rJacobian[10][28] = 0.0; + rJacobian[10][29] = 0.0; + rJacobian[10][30] = 0.0; + rJacobian[10][31] = 0.0; + rJacobian[11][0] = 0.0; + rJacobian[11][1] = 0.0; + rJacobian[11][2] = 0.0; + rJacobian[11][3] = 0.0; + rJacobian[11][4] = 0.0; + rJacobian[11][5] = 0.0; + rJacobian[11][6] = 0.0; + rJacobian[11][7] = -(mDt * (var_x31 * var_x57)); + rJacobian[11][8] = -(mDt * (var_x34 * var_x57)); + rJacobian[11][9] = 0.0; + rJacobian[11][10] = -(mDt * (var_x57 * mParameters[0])); + rJacobian[11][11] = 1.0 - (mDt * (var_x57 * (-2745.8000000000002 + var_x32 + var_x35 + 2 * var_x53 - 2000000 * var_x50 - 1000 * mParameters[0] + (-61518.471582797276 * var_x49 - 61.518471582797282 * var_x63 - 0.00014491407891765456 * var_x58 + 0.061518471582797281 * var_x51 * var_x52) * mParameters[8]) + 2.3800000000000001e-8 * (0.125 * var_chaste_interface__calcium_concentration__Cass + 0.019599999999999999 * var_chaste_interface__calcium_buffering__LTRPN_Ca + 3.1999999999999999e-5 * var_chaste_interface__calcium_buffering__HTRPN_Ca - 125 * var_chaste_interface__calcium_concentration__Cai_converted + (-var_x64 + var_chaste_interface__calcium_concentration__CaNSR) * mParameters[0] - var_x30 * (140 - var_chaste_interface__calcium_buffering__HTRPN_Ca) - var_x33 * (70 - var_chaste_interface__calcium_buffering__LTRPN_Ca) - var_x65 * mParameters[2] - 0.03075923579139864 * (var_x65 + 0.00036699999999999998 * var_chaste_interface__membrane__V - 0.0047112379481865285 * log(0.001 * var_x58 * mParameters[4]) - 2 * var_x62 * (-var_x61 * var_x64 + var_x66 * pow(var_chaste_interface__sodium_concentration__Nai, 3) * mParameters[4])) * mParameters[8]) / (pow(var_x54, 3) * pow(var_x55, 2)))); + rJacobian[11][12] = -(mDt * (0.000125 * var_x56)); + rJacobian[11][13] = 0.0; + rJacobian[11][14] = 0.0; + rJacobian[11][15] = 0.0; + rJacobian[11][16] = 0.0; + rJacobian[11][17] = 0.0; + rJacobian[11][18] = 0.0; + rJacobian[11][19] = 0.0; + rJacobian[11][20] = 0.0; + rJacobian[11][21] = 0.0; + rJacobian[11][22] = 0.0; + rJacobian[11][23] = 0.0; + rJacobian[11][24] = 0.0; + rJacobian[11][25] = 0.0; + rJacobian[11][26] = 0.0; + rJacobian[11][27] = 0.0; + rJacobian[11][28] = 0.0; + rJacobian[11][29] = 0.0; + rJacobian[11][30] = 0.0; + rJacobian[11][31] = -(mDt * (0.00018455541474839184 * var_x56 * var_x67 * mParameters[8])); + rJacobian[12][0] = 0.0; + rJacobian[12][1] = 0.0; + rJacobian[12][2] = 0.0; + rJacobian[12][3] = 0.0; + rJacobian[12][4] = 0.0; + rJacobian[12][5] = 0.0; + rJacobian[12][6] = -(mDt * (var_x70 * var_x71 * (33719.579211807191 - 535.23141606043157 * var_chaste_interface__membrane__V))); + rJacobian[12][7] = 0.0; + rJacobian[12][8] = 0.0; + rJacobian[12][9] = -(mDt * (var_x72 * var_x73)); + rJacobian[12][10] = 0.0; + rJacobian[12][11] = -(mDt * (2175084.1750841751 * var_x70)); + rJacobian[12][12] = 1.0 - (mDt * (var_x70 * (-2175.0841750841751 - var_x40 * var_x72) + 0.16806722689075632 * (2175084.1750841751 * var_chaste_interface__calcium_concentration__Cai_converted - 2175.0841750841751 * var_chaste_interface__calcium_concentration__Cass - 535.23141606043157 * var_x71 * (-63 + var_chaste_interface__membrane__V) * var_chaste_interface__L_type_calcium_current__O + 80.808080808080803 * var_x39 * var_x41 * var_chaste_interface__calcium_fluxes__P_RyR * mParameters[1]) / (pow(var_x68, 3) * pow((0.084033613445378158 + var_x69), 2)))); + rJacobian[12][13] = -(mDt * (var_x44 * var_x70 * var_x74)); + rJacobian[12][14] = 0.0; + rJacobian[12][15] = 0.0; + rJacobian[12][16] = 0.0; + rJacobian[12][17] = 0.0; + rJacobian[12][18] = 0.0; + rJacobian[12][19] = 0.0; + rJacobian[12][20] = 0.0; + rJacobian[12][21] = 0.0; + rJacobian[12][22] = 0.0; + rJacobian[12][23] = 0.0; + rJacobian[12][24] = 0.0; + rJacobian[12][25] = 0.0; + rJacobian[12][26] = 0.0; + rJacobian[12][27] = 0.0; + rJacobian[12][28] = 0.0; + rJacobian[12][29] = -(mDt * (var_x75)); + rJacobian[12][30] = -(mDt * (var_x75)); + rJacobian[12][31] = 0.0; + rJacobian[13][0] = 0.0; + rJacobian[13][1] = 0.0; + rJacobian[13][2] = 0.0; + rJacobian[13][3] = 0.0; + rJacobian[13][4] = 0.0; + rJacobian[13][5] = 0.0; + rJacobian[13][6] = -(mDt * ((0.90000000000000002 - 0.014285714285714287 * var_chaste_interface__membrane__V) * mParameters[7] * exp(-0.038580246913580245 * pow((-1 + 0.20000000000000001 * var_chaste_interface__membrane__V), 2)))); + rJacobian[13][7] = 0.0; + rJacobian[13][8] = 0.0; + rJacobian[13][9] = 0.0; + rJacobian[13][10] = 0.0; + rJacobian[13][11] = 0.0; + rJacobian[13][12] = 0.0; + rJacobian[13][13] = 1.0 - (mDt * (-0.040000000000000001)); + rJacobian[13][14] = 0.0; + rJacobian[13][15] = 0.0; + rJacobian[13][16] = 0.0; + rJacobian[13][17] = 0.0; + rJacobian[13][18] = 0.0; + rJacobian[13][19] = 0.0; + rJacobian[13][20] = 0.0; + rJacobian[13][21] = 0.0; + rJacobian[13][22] = 0.0; + rJacobian[13][23] = 0.0; + rJacobian[13][24] = 0.0; + rJacobian[13][25] = 0.0; + rJacobian[13][26] = 0.0; + rJacobian[13][27] = 0.0; + rJacobian[13][28] = 0.0; + rJacobian[13][29] = 0.0; + rJacobian[13][30] = 0.0; + rJacobian[13][31] = 0.0; + rJacobian[14][0] = 0.0; + rJacobian[14][1] = 0.0; + rJacobian[14][2] = 0.0; + rJacobian[14][3] = 0.0; + rJacobian[14][4] = 0.0; + rJacobian[14][5] = 0.0; + rJacobian[14][6] = 0.0; + rJacobian[14][7] = 0.0; + rJacobian[14][8] = 0.0; + rJacobian[14][9] = 0.0; + rJacobian[14][10] = 0.0; + rJacobian[14][11] = 0.0; + rJacobian[14][12] = 0.0; + rJacobian[14][13] = 0.0; + rJacobian[14][14] = 1.0 - (mDt * (-var_x77 - var_x80 - var_x81)); + rJacobian[14][15] = -(mDt * (var_x82)); + rJacobian[14][16] = 0.0; + rJacobian[14][17] = 0.0; + rJacobian[14][18] = 0.0; + rJacobian[14][19] = 0.0; + rJacobian[14][20] = -(mDt * (var_x84)); + rJacobian[14][21] = -(mDt * (var_x86)); + rJacobian[14][22] = 0.0; + rJacobian[14][23] = 0.0; + rJacobian[14][24] = 0.0; + rJacobian[14][25] = 0.0; + rJacobian[14][26] = 0.0; + rJacobian[14][27] = 0.0; + rJacobian[14][28] = 0.0; + rJacobian[14][29] = 0.0; + rJacobian[14][30] = 0.0; + rJacobian[14][31] = 0.0; + rJacobian[15][0] = 0.0; + rJacobian[15][1] = 0.0; + rJacobian[15][2] = 0.0; + rJacobian[15][3] = 0.0; + rJacobian[15][4] = 0.0; + rJacobian[15][5] = 0.0; + rJacobian[15][6] = 0.0; + rJacobian[15][7] = 0.0; + rJacobian[15][8] = 0.0; + rJacobian[15][9] = 0.0; + rJacobian[15][10] = 0.0; + rJacobian[15][11] = 0.0; + rJacobian[15][12] = 0.0; + rJacobian[15][13] = 0.0; + rJacobian[15][14] = -(mDt * (var_x77 + var_x88)); + rJacobian[15][15] = 1.0 - (mDt * (-var_x90 - var_x91)); + rJacobian[15][16] = -(mDt * (var_x88)); + rJacobian[15][17] = -(mDt * (var_x88)); + rJacobian[15][18] = -(mDt * (var_x84 + var_x88)); + rJacobian[15][19] = -(mDt * (var_x88)); + rJacobian[15][20] = -(mDt * (var_x88)); + rJacobian[15][21] = -(mDt * (var_x88)); + rJacobian[15][22] = 0.0; + rJacobian[15][23] = 0.0; + rJacobian[15][24] = 0.0; + rJacobian[15][25] = 0.0; + rJacobian[15][26] = 0.0; + rJacobian[15][27] = 0.0; + rJacobian[15][28] = 0.0; + rJacobian[15][29] = 0.0; + rJacobian[15][30] = 0.0; + rJacobian[15][31] = 0.0; + rJacobian[16][0] = 0.0; + rJacobian[16][1] = 0.0; + rJacobian[16][2] = 0.0; + rJacobian[16][3] = 0.0; + rJacobian[16][4] = 0.0; + rJacobian[16][5] = 0.0; + rJacobian[16][6] = 0.0; + rJacobian[16][7] = 0.0; + rJacobian[16][8] = 0.0; + rJacobian[16][9] = 0.0; + rJacobian[16][10] = 0.0; + rJacobian[16][11] = 0.0; + rJacobian[16][12] = 0.0; + rJacobian[16][13] = 0.0; + rJacobian[16][14] = 0.0; + rJacobian[16][15] = 0.0; + rJacobian[16][16] = 1.0 - (mDt * (-var_x84 - var_x93)); + rJacobian[16][17] = -(mDt * (var_x94)); + rJacobian[16][18] = 0.0; + rJacobian[16][19] = 0.0; + rJacobian[16][20] = -(mDt * (var_x95)); + rJacobian[16][21] = 0.0; + rJacobian[16][22] = 0.0; + rJacobian[16][23] = 0.0; + rJacobian[16][24] = 0.0; + rJacobian[16][25] = 0.0; + rJacobian[16][26] = 0.0; + rJacobian[16][27] = 0.0; + rJacobian[16][28] = 0.0; + rJacobian[16][29] = 0.0; + rJacobian[16][30] = 0.0; + rJacobian[16][31] = 0.0; + rJacobian[17][0] = 0.0; + rJacobian[17][1] = 0.0; + rJacobian[17][2] = 0.0; + rJacobian[17][3] = 0.0; + rJacobian[17][4] = 0.0; + rJacobian[17][5] = 0.0; + rJacobian[17][6] = 0.0; + rJacobian[17][7] = 0.0; + rJacobian[17][8] = 0.0; + rJacobian[17][9] = 0.0; + rJacobian[17][10] = 0.0; + rJacobian[17][11] = 0.0; + rJacobian[17][12] = 0.0; + rJacobian[17][13] = 0.0; + rJacobian[17][14] = 0.0; + rJacobian[17][15] = 0.0; + rJacobian[17][16] = -(mDt * (var_x93)); + rJacobian[17][17] = 1.0 - (mDt * (-var_x94)); + rJacobian[17][18] = 0.0; + rJacobian[17][19] = 0.0; + rJacobian[17][20] = 0.0; + rJacobian[17][21] = 0.0; + rJacobian[17][22] = 0.0; + rJacobian[17][23] = 0.0; + rJacobian[17][24] = 0.0; + rJacobian[17][25] = 0.0; + rJacobian[17][26] = 0.0; + rJacobian[17][27] = 0.0; + rJacobian[17][28] = 0.0; + rJacobian[17][29] = 0.0; + rJacobian[17][30] = 0.0; + rJacobian[17][31] = 0.0; + rJacobian[18][0] = 0.0; + rJacobian[18][1] = 0.0; + rJacobian[18][2] = 0.0; + rJacobian[18][3] = 0.0; + rJacobian[18][4] = 0.0; + rJacobian[18][5] = 0.0; + rJacobian[18][6] = 0.0; + rJacobian[18][7] = 0.0; + rJacobian[18][8] = 0.0; + rJacobian[18][9] = 0.0; + rJacobian[18][10] = 0.0; + rJacobian[18][11] = 0.0; + rJacobian[18][12] = 0.0; + rJacobian[18][13] = 0.0; + rJacobian[18][14] = 0.0; + rJacobian[18][15] = -(mDt * (var_x81)); + rJacobian[18][16] = 0.0; + rJacobian[18][17] = 0.0; + rJacobian[18][18] = 1.0 - (mDt * (-var_x84 - var_x90)); + rJacobian[18][19] = -(mDt * (var_x87)); + rJacobian[18][20] = -(mDt * (var_x77)); + rJacobian[18][21] = 0.0; + rJacobian[18][22] = 0.0; + rJacobian[18][23] = 0.0; + rJacobian[18][24] = 0.0; + rJacobian[18][25] = 0.0; + rJacobian[18][26] = 0.0; + rJacobian[18][27] = 0.0; + rJacobian[18][28] = 0.0; + rJacobian[18][29] = 0.0; + rJacobian[18][30] = 0.0; + rJacobian[18][31] = 0.0; + rJacobian[19][0] = 0.0; + rJacobian[19][1] = 0.0; + rJacobian[19][2] = 0.0; + rJacobian[19][3] = 0.0; + rJacobian[19][4] = 0.0; + rJacobian[19][5] = 0.0; + rJacobian[19][6] = 0.0; + rJacobian[19][7] = 0.0; + rJacobian[19][8] = 0.0; + rJacobian[19][9] = 0.0; + rJacobian[19][10] = 0.0; + rJacobian[19][11] = 0.0; + rJacobian[19][12] = 0.0; + rJacobian[19][13] = 0.0; + rJacobian[19][14] = -(mDt * (var_x96)); + rJacobian[19][15] = -(mDt * (var_x96)); + rJacobian[19][16] = -(mDt * (var_x96)); + rJacobian[19][17] = -(mDt * (var_x96)); + rJacobian[19][18] = -(mDt * (var_x89 - var_x81)); + rJacobian[19][19] = 1.0 - (mDt * (-var_x84 - var_x91)); + rJacobian[19][20] = -(mDt * (var_x96)); + rJacobian[19][21] = -(mDt * (var_x96)); + rJacobian[19][22] = 0.0; + rJacobian[19][23] = 0.0; + rJacobian[19][24] = 0.0; + rJacobian[19][25] = 0.0; + rJacobian[19][26] = 0.0; + rJacobian[19][27] = 0.0; + rJacobian[19][28] = 0.0; + rJacobian[19][29] = 0.0; + rJacobian[19][30] = 0.0; + rJacobian[19][31] = 0.0; + rJacobian[20][0] = 0.0; + rJacobian[20][1] = 0.0; + rJacobian[20][2] = 0.0; + rJacobian[20][3] = 0.0; + rJacobian[20][4] = 0.0; + rJacobian[20][5] = 0.0; + rJacobian[20][6] = 0.0; + rJacobian[20][7] = 0.0; + rJacobian[20][8] = 0.0; + rJacobian[20][9] = 0.0; + rJacobian[20][10] = 0.0; + rJacobian[20][11] = 0.0; + rJacobian[20][12] = 0.0; + rJacobian[20][13] = 0.0; + rJacobian[20][14] = -(mDt * (var_x81)); + rJacobian[20][15] = 0.0; + rJacobian[20][16] = -(mDt * (var_x84)); + rJacobian[20][17] = 0.0; + rJacobian[20][18] = -(mDt * (var_x82)); + rJacobian[20][19] = 0.0; + rJacobian[20][20] = 1.0 - (mDt * (-var_x77 - var_x84 - var_x95 - var_x97)); + rJacobian[20][21] = -(mDt * (var_x98)); + rJacobian[20][22] = 0.0; + rJacobian[20][23] = 0.0; + rJacobian[20][24] = 0.0; + rJacobian[20][25] = 0.0; + rJacobian[20][26] = 0.0; + rJacobian[20][27] = 0.0; + rJacobian[20][28] = 0.0; + rJacobian[20][29] = 0.0; + rJacobian[20][30] = 0.0; + rJacobian[20][31] = 0.0; + rJacobian[21][0] = 0.0; + rJacobian[21][1] = 0.0; + rJacobian[21][2] = 0.0; + rJacobian[21][3] = 0.0; + rJacobian[21][4] = 0.0; + rJacobian[21][5] = 0.0; + rJacobian[21][6] = 0.0; + rJacobian[21][7] = 0.0; + rJacobian[21][8] = 0.0; + rJacobian[21][9] = 0.0; + rJacobian[21][10] = 0.0; + rJacobian[21][11] = 0.0; + rJacobian[21][12] = 0.0; + rJacobian[21][13] = 0.0; + rJacobian[21][14] = -(mDt * (var_x80)); + rJacobian[21][15] = 0.0; + rJacobian[21][16] = 0.0; + rJacobian[21][17] = 0.0; + rJacobian[21][18] = 0.0; + rJacobian[21][19] = 0.0; + rJacobian[21][20] = -(mDt * (var_x97)); + rJacobian[21][21] = 1.0 - (mDt * (-var_x86 - var_x98)); + rJacobian[21][22] = 0.0; + rJacobian[21][23] = 0.0; + rJacobian[21][24] = 0.0; + rJacobian[21][25] = 0.0; + rJacobian[21][26] = 0.0; + rJacobian[21][27] = 0.0; + rJacobian[21][28] = 0.0; + rJacobian[21][29] = 0.0; + rJacobian[21][30] = 0.0; + rJacobian[21][31] = 0.0; + rJacobian[22][0] = 0.0; + rJacobian[22][1] = 0.0; + rJacobian[22][2] = 0.0; + rJacobian[22][3] = 0.0; + rJacobian[22][4] = 0.0; + rJacobian[22][5] = 0.0; + rJacobian[22][6] = 0.0; + rJacobian[22][7] = 0.0; + rJacobian[22][8] = 0.0; + rJacobian[22][9] = 0.0; + rJacobian[22][10] = 0.0; + rJacobian[22][11] = 0.0; + rJacobian[22][12] = 0.0; + rJacobian[22][13] = 0.0; + rJacobian[22][14] = 0.0; + rJacobian[22][15] = 0.0; + rJacobian[22][16] = 0.0; + rJacobian[22][17] = 0.0; + rJacobian[22][18] = 0.0; + rJacobian[22][19] = 0.0; + rJacobian[22][20] = 0.0; + rJacobian[22][21] = 0.0; + rJacobian[22][22] = 1.0; + rJacobian[22][23] = 0.0; + rJacobian[22][24] = 0.0; + rJacobian[22][25] = 0.0; + rJacobian[22][26] = 0.0; + rJacobian[22][27] = 0.0; + rJacobian[22][28] = 0.0; + rJacobian[22][29] = 0.0; + rJacobian[22][30] = 0.0; + rJacobian[22][31] = 0.0; + rJacobian[23][0] = 0.0; + rJacobian[23][1] = 0.0; + rJacobian[23][2] = 0.0; + rJacobian[23][3] = 0.0; + rJacobian[23][4] = 0.0; + rJacobian[23][5] = 0.0; + rJacobian[23][6] = 0.0; + rJacobian[23][7] = 0.0; + rJacobian[23][8] = 0.0; + rJacobian[23][9] = 0.0; + rJacobian[23][10] = 0.0; + rJacobian[23][11] = 0.0; + rJacobian[23][12] = 0.0; + rJacobian[23][13] = 0.0; + rJacobian[23][14] = 0.0; + rJacobian[23][15] = 0.0; + rJacobian[23][16] = 0.0; + rJacobian[23][17] = 0.0; + rJacobian[23][18] = 0.0; + rJacobian[23][19] = 0.0; + rJacobian[23][20] = 0.0; + rJacobian[23][21] = 0.0; + rJacobian[23][22] = -(mDt * (-var_x102 * var_x103 * var_x105)); + rJacobian[23][23] = 1.0 - (mDt * (var_x104 * (-1.5794450018272976 * var_x107 - var_x103 * var_x108 * var_chaste_interface__non_inactivating_steady_state_potassium_current__iKss - var_x108 * pow(var_chaste_interface__slow_delayed_rectifier_potassium_current__nKs, 2) * mParameters[14] - 0.25271120029236765 * var_x99 * var_chaste_interface__ultra_rapidly_activating_delayed_rectifier_potassium_current__aur * var_chaste_interface__ultra_rapidly_activating_delayed_rectifier_potassium_current__iur - var_x108 * pow(var_chaste_interface__fast_transient_outward_potassium_current__ato_f, 3) * mParameters[16] * var_chaste_interface__fast_transient_outward_potassium_current__ito_f - 1.5794450018272976 * var_x100 * var_x111 * mParameters[11] / var_x110 + 0.14151827216372587 * var_x102 * var_x109 * var_x111 * var_x99 * mParameters[5] * mParameters[11] / pow(var_x110, 2)))); + rJacobian[23][24] = 0.0; + rJacobian[23][25] = 0.0; + rJacobian[23][26] = 0.0; + rJacobian[23][27] = -(mDt * (-var_x105 * (-25.674321243523316 * log(var_x106 * (mParameters[5] + 0.020408163265306124 * mParameters[6])) + var_chaste_interface__membrane__V) * mParameters[13])); + rJacobian[23][28] = 0.0; + rJacobian[23][29] = 0.0; + rJacobian[23][30] = 0.0; + rJacobian[23][31] = -(mDt * (var_x104 * (5.3367950117641947e-8 * var_x114 - 0.032233571465863219 * var_x107))); + rJacobian[24][0] = 0.0; + rJacobian[24][1] = 0.0; + rJacobian[24][2] = 0.0; + rJacobian[24][3] = 0.0; + rJacobian[24][4] = 0.0; + rJacobian[24][5] = 0.0; + rJacobian[24][6] = 0.0; + rJacobian[24][7] = 0.0; + rJacobian[24][8] = 0.0; + rJacobian[24][9] = 0.0; + rJacobian[24][10] = 0.0; + rJacobian[24][11] = 0.0; + rJacobian[24][12] = 0.0; + rJacobian[24][13] = 0.0; + rJacobian[24][14] = 0.0; + rJacobian[24][15] = 0.0; + rJacobian[24][16] = 0.0; + rJacobian[24][17] = 0.0; + rJacobian[24][18] = 0.0; + rJacobian[24][19] = 0.0; + rJacobian[24][20] = 0.0; + rJacobian[24][21] = 0.0; + rJacobian[24][22] = 0.0; + rJacobian[24][23] = 0.0; + rJacobian[24][24] = 1.0 - (mDt * (-0.023761000000000001 - var_x115 - 0.047002000000000002 * exp(-0.063100000000000003 * var_chaste_interface__membrane__V))); + rJacobian[24][25] = -(mDt * (0.036777999999999998 - var_x115)); + rJacobian[24][26] = -(mDt * (var_x116)); + rJacobian[24][27] = -(mDt * (var_x116)); + rJacobian[24][28] = 0.0; + rJacobian[24][29] = 0.0; + rJacobian[24][30] = 0.0; + rJacobian[24][31] = 0.0; + rJacobian[25][0] = 0.0; + rJacobian[25][1] = 0.0; + rJacobian[25][2] = 0.0; + rJacobian[25][3] = 0.0; + rJacobian[25][4] = 0.0; + rJacobian[25][5] = 0.0; + rJacobian[25][6] = 0.0; + rJacobian[25][7] = 0.0; + rJacobian[25][8] = 0.0; + rJacobian[25][9] = 0.0; + rJacobian[25][10] = 0.0; + rJacobian[25][11] = 0.0; + rJacobian[25][12] = 0.0; + rJacobian[25][13] = 0.0; + rJacobian[25][14] = 0.0; + rJacobian[25][15] = 0.0; + rJacobian[25][16] = 0.0; + rJacobian[25][17] = 0.0; + rJacobian[25][18] = 0.0; + rJacobian[25][19] = 0.0; + rJacobian[25][20] = 0.0; + rJacobian[25][21] = 0.0; + rJacobian[25][22] = 0.0; + rJacobian[25][23] = 0.0; + rJacobian[25][24] = -(mDt * (0.023761000000000001)); + rJacobian[25][25] = 1.0 - (mDt * (-0.036777999999999998 - var_x117)); + rJacobian[25][26] = 0.0; + rJacobian[25][27] = -(mDt * (var_x118)); + rJacobian[25][28] = 0.0; + rJacobian[25][29] = 0.0; + rJacobian[25][30] = 0.0; + rJacobian[25][31] = 0.0; + rJacobian[26][0] = 0.0; + rJacobian[26][1] = 0.0; + rJacobian[26][2] = 0.0; + rJacobian[26][3] = 0.0; + rJacobian[26][4] = 0.0; + rJacobian[26][5] = 0.0; + rJacobian[26][6] = 0.0; + rJacobian[26][7] = 0.0; + rJacobian[26][8] = 0.0; + rJacobian[26][9] = 0.0; + rJacobian[26][10] = 0.0; + rJacobian[26][11] = 0.0; + rJacobian[26][12] = 0.0; + rJacobian[26][13] = 0.0; + rJacobian[26][14] = 0.0; + rJacobian[26][15] = 0.0; + rJacobian[26][16] = 0.0; + rJacobian[26][17] = 0.0; + rJacobian[26][18] = 0.0; + rJacobian[26][19] = 0.0; + rJacobian[26][20] = 0.0; + rJacobian[26][21] = 0.0; + rJacobian[26][22] = 0.0; + rJacobian[26][23] = 0.0; + rJacobian[26][24] = 0.0; + rJacobian[26][25] = 0.0; + rJacobian[26][26] = 1.0 - (mDt * (-var_x119)); + rJacobian[26][27] = -(mDt * (var_x120)); + rJacobian[26][28] = 0.0; + rJacobian[26][29] = 0.0; + rJacobian[26][30] = 0.0; + rJacobian[26][31] = 0.0; + rJacobian[27][0] = 0.0; + rJacobian[27][1] = 0.0; + rJacobian[27][2] = 0.0; + rJacobian[27][3] = 0.0; + rJacobian[27][4] = 0.0; + rJacobian[27][5] = 0.0; + rJacobian[27][6] = 0.0; + rJacobian[27][7] = 0.0; + rJacobian[27][8] = 0.0; + rJacobian[27][9] = 0.0; + rJacobian[27][10] = 0.0; + rJacobian[27][11] = 0.0; + rJacobian[27][12] = 0.0; + rJacobian[27][13] = 0.0; + rJacobian[27][14] = 0.0; + rJacobian[27][15] = 0.0; + rJacobian[27][16] = 0.0; + rJacobian[27][17] = 0.0; + rJacobian[27][18] = 0.0; + rJacobian[27][19] = 0.0; + rJacobian[27][20] = 0.0; + rJacobian[27][21] = 0.0; + rJacobian[27][22] = 0.0; + rJacobian[27][23] = 0.0; + rJacobian[27][24] = 0.0; + rJacobian[27][25] = -(mDt * (var_x117)); + rJacobian[27][26] = -(mDt * (var_x119)); + rJacobian[27][27] = 1.0 - (mDt * (-var_x118 - var_x120)); + rJacobian[27][28] = 0.0; + rJacobian[27][29] = 0.0; + rJacobian[27][30] = 0.0; + rJacobian[27][31] = 0.0; + rJacobian[28][0] = 0.0; + rJacobian[28][1] = 0.0; + rJacobian[28][2] = 0.0; + rJacobian[28][3] = 0.0; + rJacobian[28][4] = 0.0; + rJacobian[28][5] = 0.0; + rJacobian[28][6] = 0.0; + rJacobian[28][7] = 0.0; + rJacobian[28][8] = 0.0; + rJacobian[28][9] = 0.0; + rJacobian[28][10] = 0.0; + rJacobian[28][11] = 0.0; + rJacobian[28][12] = 0.0; + rJacobian[28][13] = 0.0; + rJacobian[28][14] = 0.0; + rJacobian[28][15] = 0.0; + rJacobian[28][16] = 0.0; + rJacobian[28][17] = 0.0; + rJacobian[28][18] = 0.0; + rJacobian[28][19] = 0.0; + rJacobian[28][20] = 0.0; + rJacobian[28][21] = 0.0; + rJacobian[28][22] = 0.0; + rJacobian[28][23] = 0.0; + rJacobian[28][24] = 0.0; + rJacobian[28][25] = 0.0; + rJacobian[28][26] = 0.0; + rJacobian[28][27] = 0.0; + rJacobian[28][28] = 1.0 - (mDt * (-0.00080000000000000004)); + rJacobian[28][29] = -(mDt * (0.0089999999999999993)); + rJacobian[28][30] = 0.0; + rJacobian[28][31] = 0.0; + rJacobian[29][0] = 0.0; + rJacobian[29][1] = 0.0; + rJacobian[29][2] = 0.0; + rJacobian[29][3] = 0.0; + rJacobian[29][4] = 0.0; + rJacobian[29][5] = 0.0; + rJacobian[29][6] = 0.0; + rJacobian[29][7] = 0.0; + rJacobian[29][8] = 0.0; + rJacobian[29][9] = 0.0; + rJacobian[29][10] = 0.0; + rJacobian[29][11] = 0.0; + rJacobian[29][12] = -(mDt * (-var_x121 + 0.024299999999999999 * var_x122 * (1 - var_x39 - var_chaste_interface__ryanodine_receptors__P_C2))); + rJacobian[29][13] = 0.0; + rJacobian[29][14] = 0.0; + rJacobian[29][15] = 0.0; + rJacobian[29][16] = 0.0; + rJacobian[29][17] = 0.0; + rJacobian[29][18] = 0.0; + rJacobian[29][19] = 0.0; + rJacobian[29][20] = 0.0; + rJacobian[29][21] = 0.0; + rJacobian[29][22] = 0.0; + rJacobian[29][23] = 0.0; + rJacobian[29][24] = 0.0; + rJacobian[29][25] = 0.0; + rJacobian[29][26] = 0.0; + rJacobian[29][27] = 0.0; + rJacobian[29][28] = -(mDt * (0.00080000000000000004 - var_x123)); + rJacobian[29][29] = 1.0 - (mDt * (-0.080249999999999988 - var_x123 - var_x124)); + rJacobian[29][30] = -(mDt * (0.96499999999999997 - var_x123)); + rJacobian[29][31] = 0.0; + rJacobian[30][0] = 0.0; + rJacobian[30][1] = 0.0; + rJacobian[30][2] = 0.0; + rJacobian[30][3] = 0.0; + rJacobian[30][4] = 0.0; + rJacobian[30][5] = 0.0; + rJacobian[30][6] = 0.0; + rJacobian[30][7] = 0.0; + rJacobian[30][8] = 0.0; + rJacobian[30][9] = 0.0; + rJacobian[30][10] = 0.0; + rJacobian[30][11] = 0.0; + rJacobian[30][12] = -(mDt * (var_x121)); + rJacobian[30][13] = 0.0; + rJacobian[30][14] = 0.0; + rJacobian[30][15] = 0.0; + rJacobian[30][16] = 0.0; + rJacobian[30][17] = 0.0; + rJacobian[30][18] = 0.0; + rJacobian[30][19] = 0.0; + rJacobian[30][20] = 0.0; + rJacobian[30][21] = 0.0; + rJacobian[30][22] = 0.0; + rJacobian[30][23] = 0.0; + rJacobian[30][24] = 0.0; + rJacobian[30][25] = 0.0; + rJacobian[30][26] = 0.0; + rJacobian[30][27] = 0.0; + rJacobian[30][28] = 0.0; + rJacobian[30][29] = -(mDt * (var_x124)); + rJacobian[30][30] = 1.0 - (mDt * (-0.96499999999999997)); + rJacobian[30][31] = 0.0; + rJacobian[31][0] = 0.0; + rJacobian[31][1] = 0.0; + rJacobian[31][2] = 0.0; + rJacobian[31][3] = 0.0; + rJacobian[31][4] = 0.0; + rJacobian[31][5] = 0.0; + rJacobian[31][6] = 0.0; + rJacobian[31][7] = 0.0; + rJacobian[31][8] = 0.0; + rJacobian[31][9] = 0.0; + rJacobian[31][10] = 0.0; + rJacobian[31][11] = -(mDt * (184.55541474839183 * var_x104 * var_x63)); + rJacobian[31][12] = 0.0; + rJacobian[31][13] = 0.0; + rJacobian[31][14] = 0.0; + rJacobian[31][15] = 0.0; + rJacobian[31][16] = 0.0; + rJacobian[31][17] = 0.0; + rJacobian[31][18] = 0.0; + rJacobian[31][19] = 0.0; + rJacobian[31][20] = 0.0; + rJacobian[31][21] = -(mDt * (-var_x105 * (-25.674321243523316 * log(var_x125 * (mParameters[6] + 0.1111111111111111 * mParameters[5])) + var_chaste_interface__membrane__V) * mParameters[9])); + rJacobian[31][22] = 0.0; + rJacobian[31][23] = -(mDt * (var_x104 * (-0.00045628411163899709 * var_x125 - 0.17549388909192196 * var_x126))); + rJacobian[31][24] = 0.0; + rJacobian[31][25] = 0.0; + rJacobian[31][26] = 0.0; + rJacobian[31][27] = 0.0; + rJacobian[31][28] = 0.0; + rJacobian[31][29] = 0.0; + rJacobian[31][30] = 0.0; + rJacobian[31][31] = 1.0 - (mDt * (var_x104 * (-1.5794450018272976 * var_x126 - 0.0041065570047509742 * var_x125 - 0.55366624424517552 * var_x67 - 8.0051925176462917e-8 * var_x114))); + } + + void Cellbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLBackwardEuler::UpdateTransmembranePotential(double var_chaste_interface__environment__time) + { + // Time units: millisecond + std::vector& rY = rGetStateVariables(); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -82.4202 + double var_chaste_interface__calcium_concentration__Cai_converted = rY[1]; + // Units: millimolar; Initial value: 0.000115001 + double var_chaste_interface__L_type_calcium_current__O = rY[11]; + // Units: dimensionless; Initial value: 9.30308e-19 + double var_chaste_interface__sodium_concentration__Nai = rY[18]; + // Units: micromolar; Initial value: 14237.1 + double var_chaste_interface__fast_sodium_current__O_Na = rY[19]; + // Units: dimensionless; Initial value: 7.13483e-07 + double var_chaste_interface__potassium_concentration__Ki = rY[27]; + // Units: micromolar; Initial value: 143720.0 + double var_chaste_interface__fast_transient_outward_potassium_current__ato_f = rY[28]; + // Units: dimensionless; Initial value: 0.00265563 + double var_chaste_interface__fast_transient_outward_potassium_current__ito_f = rY[29]; + // Units: dimensionless; Initial value: 0.999977 + double var_chaste_interface__slow_transient_outward_potassium_current__ato_s = rY[30]; + // Units: dimensionless; Initial value: 0.000417069 + double var_chaste_interface__slow_transient_outward_potassium_current__ito_s = rY[31]; + // Units: dimensionless; Initial value: 0.998543 + double var_chaste_interface__slow_delayed_rectifier_potassium_current__nKs = rY[32]; + // Units: dimensionless; Initial value: 0.000262753 + double var_chaste_interface__ultra_rapidly_activating_delayed_rectifier_potassium_current__aur = rY[33]; + // Units: dimensionless; Initial value: 0.000417069 + double var_chaste_interface__ultra_rapidly_activating_delayed_rectifier_potassium_current__iur = rY[34]; + // Units: dimensionless; Initial value: 0.998543 + double var_chaste_interface__non_inactivating_steady_state_potassium_current__aKss = rY[35]; + // Units: dimensionless; Initial value: 0.000417069 + double var_chaste_interface__non_inactivating_steady_state_potassium_current__iKss = rY[36]; + // Units: dimensionless; Initial value: 1.0 + double var_chaste_interface__rapid_delayed_rectifier_potassium_current__O_K = rY[37]; + // Units: dimensionless; Initial value: 0.000175298 + + const double var_L_type_calcium_current__E_CaL = 63; // millivolt + const double var_calcium_activated_chloride_current__E_Cl = -40; // millivolt + const double var_calcium_activated_chloride_current__Km_Cl = 10; // micromolar + const double var_calcium_activated_chloride_current__g_ClCa = 10; // milliS_per_microF + const double var_calcium_background_current__g_Cab = 0.00036699999999999998; // milliS_per_microF + const double var_calcium_concentration__Cai = 1000 * var_chaste_interface__calcium_concentration__Cai_converted; // micromolar + const double var_calcium_pump_current__Km_pCa = 0.5; // micromolar + const double var_calcium_pump_current__i_pCa_max = 1; // picoA_per_picoF + const double var_calcium_pump_current__i_pCa = pow(var_calcium_concentration__Cai, 2) * var_calcium_pump_current__i_pCa_max / (pow(var_calcium_concentration__Cai, 2) + pow(var_calcium_pump_current__Km_pCa, 2)); // picoA_per_picoF + const double var_membrane__F = 96.5; // coulomb_per_millimole + const double var_membrane__R = 8.3140000000000001; // joule_per_mole_kelvin + const double var_membrane__T = 298; // kelvin + const double var_calcium_background_current__E_CaN = 0.5 * var_membrane__R * var_membrane__T * log(mParameters[4] / var_calcium_concentration__Cai) / var_membrane__F; // millivolt + const double var_L_type_calcium_current__i_CaL = (-var_L_type_calcium_current__E_CaL + var_chaste_interface__membrane__V) * var_chaste_interface__L_type_calcium_current__O * mParameters[7]; // picoA_per_picoF + const double var_calcium_activated_chloride_current__O_ClCa = 0.20000000000000001 / (1 + exp(5.9871794871794881 - 0.12820512820512822 * var_chaste_interface__membrane__V)); // dimensionless + const double var_calcium_activated_chloride_current__i_ClCa = (-var_calcium_activated_chloride_current__E_Cl + var_chaste_interface__membrane__V) * var_calcium_activated_chloride_current__O_ClCa * var_calcium_activated_chloride_current__g_ClCa * var_calcium_concentration__Cai / (var_calcium_activated_chloride_current__Km_Cl + var_calcium_concentration__Cai); // picoA_per_picoF + const double var_calcium_background_current__i_Cab = (-var_calcium_background_current__E_CaN + var_chaste_interface__membrane__V) * var_calcium_background_current__g_Cab; // picoA_per_picoF + const double var_membrane__i_stim_converted = GetIntracellularAreaStimulus(var_chaste_interface__environment__time); // uA_per_cm2 + const double var_membrane__i_stim = var_membrane__i_stim_converted / HeartConfig::Instance()->GetCapacitance(); // picoA_per_picoF + const double var_fast_transient_outward_potassium_current__E_K = var_membrane__R * var_membrane__T * log(mParameters[5] / var_chaste_interface__potassium_concentration__Ki) / var_membrane__F; // millivolt + const double var_fast_transient_outward_potassium_current__i_Kto_f = pow(var_chaste_interface__fast_transient_outward_potassium_current__ato_f, 3) * (-var_fast_transient_outward_potassium_current__E_K + var_chaste_interface__membrane__V) * mParameters[16] * var_chaste_interface__fast_transient_outward_potassium_current__ito_f; // picoA_per_picoF + const double var_non_inactivating_steady_state_potassium_current__i_Kss = (-var_fast_transient_outward_potassium_current__E_K + var_chaste_interface__membrane__V) * var_chaste_interface__non_inactivating_steady_state_potassium_current__aKss * mParameters[12] * var_chaste_interface__non_inactivating_steady_state_potassium_current__iKss; // picoA_per_picoF + const double var_slow_delayed_rectifier_potassium_current__i_Ks = pow(var_chaste_interface__slow_delayed_rectifier_potassium_current__nKs, 2) * (-var_fast_transient_outward_potassium_current__E_K + var_chaste_interface__membrane__V) * mParameters[14]; // picoA_per_picoF + const double var_slow_transient_outward_potassium_current__g_Kto_s = 0; // milliS_per_microF + const double var_slow_transient_outward_potassium_current__i_Kto_s = (-var_fast_transient_outward_potassium_current__E_K + var_chaste_interface__membrane__V) * var_chaste_interface__slow_transient_outward_potassium_current__ato_s * var_slow_transient_outward_potassium_current__g_Kto_s * var_chaste_interface__slow_transient_outward_potassium_current__ito_s; // picoA_per_picoF + const double var_sodium_background_current__g_Nab = 0.0025999999999999999; // milliS_per_microF + const double var_sodium_calcium_exchange_current__K_mCa = 1380; // micromolar + const double var_sodium_calcium_exchange_current__K_mNa = 87500; // micromolar + const double var_sodium_calcium_exchange_current__eta = 0.34999999999999998; // dimensionless + const double var_sodium_calcium_exchange_current__k_sat = 0.10000000000000001; // dimensionless + const double var_fast_sodium_current__E_Na = var_membrane__R * var_membrane__T * log((mParameters[6] + 0.1111111111111111 * mParameters[5]) / (var_chaste_interface__sodium_concentration__Nai + 0.1111111111111111 * var_chaste_interface__potassium_concentration__Ki)) / var_membrane__F; // millivolt + const double var_fast_sodium_current__i_Na = (-var_fast_sodium_current__E_Na + var_chaste_interface__membrane__V) * var_chaste_interface__fast_sodium_current__O_Na * mParameters[9]; // picoA_per_picoF + const double var_rapid_delayed_rectifier_potassium_current__i_Kr = (-var_membrane__R * var_membrane__T * log((mParameters[5] + 0.020408163265306124 * mParameters[6]) / (var_chaste_interface__potassium_concentration__Ki + 0.020408163265306124 * var_chaste_interface__sodium_concentration__Nai)) / var_membrane__F + var_chaste_interface__membrane__V) * var_chaste_interface__rapid_delayed_rectifier_potassium_current__O_K * mParameters[13]; // picoA_per_picoF + const double var_sodium_background_current__i_Nab = (-var_fast_sodium_current__E_Na + var_chaste_interface__membrane__V) * var_sodium_background_current__g_Nab; // picoA_per_picoF + const double var_sodium_calcium_exchange_current__i_NaCa = (pow(var_chaste_interface__sodium_concentration__Nai, 3) * mParameters[4] * exp(var_membrane__F * var_chaste_interface__membrane__V * var_sodium_calcium_exchange_current__eta / (var_membrane__R * var_membrane__T)) - pow(mParameters[6], 3) * var_calcium_concentration__Cai * exp((-1 + var_sodium_calcium_exchange_current__eta) * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * mParameters[15] / ((1 + var_sodium_calcium_exchange_current__k_sat * exp((-1 + var_sodium_calcium_exchange_current__eta) * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * (pow(mParameters[6], 3) + pow(var_sodium_calcium_exchange_current__K_mNa, 3)) * (mParameters[4] + var_sodium_calcium_exchange_current__K_mCa)); // picoA_per_picoF + const double var_sodium_potassium_pump_current__Km_Ko = 1500; // micromolar + const double var_sodium_potassium_pump_current__Km_Nai = 21000; // micromolar + const double var_sodium_potassium_pump_current__i_NaK_max = 0.88; // picoA_per_picoF + const double var_sodium_potassium_pump_current__sigma = -0.14285714285714285 + 0.14285714285714285 * exp(1.4858841010401188e-5 * mParameters[6]); // dimensionless + const double var_sodium_potassium_pump_current__f_NaK = 1 / (1 + 0.1245 * exp(-0.10000000000000001 * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T)) + 0.036499999999999998 * var_sodium_potassium_pump_current__sigma * exp(-var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))); // dimensionless + const double var_sodium_potassium_pump_current__i_NaK = mParameters[5] * var_sodium_potassium_pump_current__f_NaK * var_sodium_potassium_pump_current__i_NaK_max / ((1 + pow((var_sodium_potassium_pump_current__Km_Nai / var_chaste_interface__sodium_concentration__Nai), 1.5)) * (mParameters[5] + var_sodium_potassium_pump_current__Km_Ko)); // picoA_per_picoF + const double var_time_independent_potassium_current__i_K1 = (-var_fast_transient_outward_potassium_current__E_K + var_chaste_interface__membrane__V) * mParameters[5] * mParameters[11] / ((1 + exp(0.089599999999999999 * var_chaste_interface__membrane__V - 0.089599999999999999 * var_fast_transient_outward_potassium_current__E_K)) * (210 + mParameters[5])); // picoA_per_picoF + const double var_ultra_rapidly_activating_delayed_rectifier_potassium_current__g_Kur = 0.16; // milliS_per_microF + const double var_ultra_rapidly_activating_delayed_rectifier_potassium_current__i_Kur = (-var_fast_transient_outward_potassium_current__E_K + var_chaste_interface__membrane__V) * var_chaste_interface__ultra_rapidly_activating_delayed_rectifier_potassium_current__aur * var_ultra_rapidly_activating_delayed_rectifier_potassium_current__g_Kur * var_chaste_interface__ultra_rapidly_activating_delayed_rectifier_potassium_current__iur; // picoA_per_picoF + const double d_dt_chaste_interface_var_membrane__V = -var_L_type_calcium_current__i_CaL - var_calcium_activated_chloride_current__i_ClCa - var_calcium_background_current__i_Cab - var_calcium_pump_current__i_pCa - var_fast_sodium_current__i_Na - var_fast_transient_outward_potassium_current__i_Kto_f - var_membrane__i_stim - var_non_inactivating_steady_state_potassium_current__i_Kss - var_rapid_delayed_rectifier_potassium_current__i_Kr - var_slow_delayed_rectifier_potassium_current__i_Ks - var_slow_transient_outward_potassium_current__i_Kto_s - var_sodium_background_current__i_Nab - var_sodium_calcium_exchange_current__i_NaCa - var_sodium_potassium_pump_current__i_NaK - var_time_independent_potassium_current__i_K1 - var_ultra_rapidly_activating_delayed_rectifier_potassium_current__i_Kur; // millivolt / millisecond + + rY[0] += mDt*d_dt_chaste_interface_var_membrane__V; + } + + void Cellbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLBackwardEuler::ComputeOneStepExceptVoltage(double var_chaste_interface__environment__time) + { + // Time units: millisecond + std::vector& rY = rGetStateVariables(); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -82.4202 + double var_chaste_interface__fast_transient_outward_potassium_current__ato_f = rY[28]; + // Units: dimensionless; Initial value: 0.00265563 + double var_chaste_interface__fast_transient_outward_potassium_current__ito_f = rY[29]; + // Units: dimensionless; Initial value: 0.999977 + double var_chaste_interface__slow_transient_outward_potassium_current__ato_s = rY[30]; + // Units: dimensionless; Initial value: 0.000417069 + double var_chaste_interface__slow_transient_outward_potassium_current__ito_s = rY[31]; + // Units: dimensionless; Initial value: 0.998543 + double var_chaste_interface__slow_delayed_rectifier_potassium_current__nKs = rY[32]; + // Units: dimensionless; Initial value: 0.000262753 + double var_chaste_interface__ultra_rapidly_activating_delayed_rectifier_potassium_current__aur = rY[33]; + // Units: dimensionless; Initial value: 0.000417069 + double var_chaste_interface__ultra_rapidly_activating_delayed_rectifier_potassium_current__iur = rY[34]; + // Units: dimensionless; Initial value: 0.998543 + double var_chaste_interface__non_inactivating_steady_state_potassium_current__aKss = rY[35]; + // Units: dimensionless; Initial value: 0.000417069 + + const double var_fast_transient_outward_potassium_current__alpha_a = 0.18064 * exp(1.0731000000000002 + 0.035770000000000003 * var_chaste_interface__membrane__V); + const double var_fast_transient_outward_potassium_current__alpha_i = 0.00015200000000000001 * exp(-1.9285714285714286 - 0.14285714285714285 * var_chaste_interface__membrane__V) / (1 + 0.0067083000000000004 * exp(-4.7857142857142856 - 0.14285714285714285 * var_chaste_interface__membrane__V)); + const double var_fast_transient_outward_potassium_current__beta_a = 0.39560000000000001 * exp(-1.8711 - 0.062370000000000002 * var_chaste_interface__membrane__V); + const double var_fast_transient_outward_potassium_current__beta_i = 0.00095 * exp(4.7857142857142856 + 0.14285714285714285 * var_chaste_interface__membrane__V) / (1 + 0.051334999999999999 * exp(4.7857142857142856 + 0.14285714285714285 * var_chaste_interface__membrane__V)); + const double var_non_inactivating_steady_state_potassium_current__tau_Kss = 13.17 + 39.299999999999997 * exp(-0.086199999999999999 * var_chaste_interface__membrane__V); + const double var_slow_delayed_rectifier_potassium_current__alpha_n = (((var_chaste_interface__membrane__V >= -26.500000781250002) && (var_chaste_interface__membrane__V <= -26.499999218749998)) ? (-3.7604140624912359e-12 / (1 - exp(9.9999999999766942e-8)) + 640000.00000149151 * (26.500000781250002 + var_chaste_interface__membrane__V) * (3.7604140624912359e-12 / (1 - exp(9.9999999999766942e-8)) + 3.7604140624912359e-12 / (1 - exp(-9.9999999999766942e-8)))) : (4.8133299999999997e-6 * (26.5 + var_chaste_interface__membrane__V) / (1 - exp(-3.3919999999999999 - 0.128 * var_chaste_interface__membrane__V)))); + const double var_slow_delayed_rectifier_potassium_current__beta_n = 9.5333299999999997e-5 * exp(-1.0069999999999999 - 0.037999999999999999 * var_chaste_interface__membrane__V); + const double var_slow_transient_outward_potassium_current__ass = 1 / (1 + exp(-2.9220779220779218 - 0.12987012987012986 * var_chaste_interface__membrane__V)); + const double var_slow_transient_outward_potassium_current__iss = 1 / (1 + exp(7.9298245614035094 + 0.17543859649122806 * var_chaste_interface__membrane__V)); + const double var_slow_transient_outward_potassium_current__tau_ta_s = 2.0579999999999998 + 0.49299999999999999 * exp(-0.062899999999999998 * var_chaste_interface__membrane__V); + const double var_slow_transient_outward_potassium_current__tau_ti_s = 270 + 1050 / (1 + exp(7.9298245614035094 + 0.17543859649122806 * var_chaste_interface__membrane__V)); + const double var_ultra_rapidly_activating_delayed_rectifier_potassium_current__tau_aur = 2.0579999999999998 + 0.49299999999999999 * exp(-0.062899999999999998 * var_chaste_interface__membrane__V); + const double var_ultra_rapidly_activating_delayed_rectifier_potassium_current__tau_iur = 1200 - 170 / (1 + exp(7.9298245614035094 + 0.17543859649122806 * var_chaste_interface__membrane__V)); + + + rY[28] = (var_chaste_interface__fast_transient_outward_potassium_current__ato_f + ((var_fast_transient_outward_potassium_current__alpha_a) * mDt)) / (1.0 - ((-var_fast_transient_outward_potassium_current__alpha_a - var_fast_transient_outward_potassium_current__beta_a) * mDt)); + rY[29] = (var_chaste_interface__fast_transient_outward_potassium_current__ito_f + ((var_fast_transient_outward_potassium_current__alpha_i) * mDt)) / (1.0 - ((-var_fast_transient_outward_potassium_current__alpha_i - var_fast_transient_outward_potassium_current__beta_i) * mDt)); + rY[35] = (var_chaste_interface__non_inactivating_steady_state_potassium_current__aKss + ((var_slow_transient_outward_potassium_current__ass / var_non_inactivating_steady_state_potassium_current__tau_Kss) * mDt)) / (1.0 - ((-1 / var_non_inactivating_steady_state_potassium_current__tau_Kss) * mDt)); + rY[32] = (var_chaste_interface__slow_delayed_rectifier_potassium_current__nKs + ((var_slow_delayed_rectifier_potassium_current__alpha_n) * mDt)) / (1.0 - ((-var_slow_delayed_rectifier_potassium_current__alpha_n - var_slow_delayed_rectifier_potassium_current__beta_n) * mDt)); + rY[30] = (var_chaste_interface__slow_transient_outward_potassium_current__ato_s + ((var_slow_transient_outward_potassium_current__ass / var_slow_transient_outward_potassium_current__tau_ta_s) * mDt)) / (1.0 - ((-1 / var_slow_transient_outward_potassium_current__tau_ta_s) * mDt)); + rY[31] = (var_chaste_interface__slow_transient_outward_potassium_current__ito_s + ((var_slow_transient_outward_potassium_current__iss / var_slow_transient_outward_potassium_current__tau_ti_s) * mDt)) / (1.0 - ((-1 / var_slow_transient_outward_potassium_current__tau_ti_s) * mDt)); + rY[33] = (var_chaste_interface__ultra_rapidly_activating_delayed_rectifier_potassium_current__aur + ((var_slow_transient_outward_potassium_current__ass / var_ultra_rapidly_activating_delayed_rectifier_potassium_current__tau_aur) * mDt)) / (1.0 - ((-1 / var_ultra_rapidly_activating_delayed_rectifier_potassium_current__tau_aur) * mDt)); + rY[34] = (var_chaste_interface__ultra_rapidly_activating_delayed_rectifier_potassium_current__iur + ((var_slow_transient_outward_potassium_current__iss / var_ultra_rapidly_activating_delayed_rectifier_potassium_current__tau_iur) * mDt)) / (1.0 - ((-1 / var_ultra_rapidly_activating_delayed_rectifier_potassium_current__tau_iur) * mDt)); + + double _guess[32] = {rY[12],rY[13],rY[14],rY[15],rY[16],rY[17],rY[11],rY[7],rY[6],rY[3],rY[4],rY[1],rY[2],rY[5],rY[20],rY[21],rY[22],rY[23],rY[25],rY[26],rY[24],rY[19],rY[36],rY[27],rY[38],rY[39],rY[40],rY[37],rY[10],rY[8],rY[9],rY[18]}; + CardiacNewtonSolver<32,Cellbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLBackwardEuler>* _p_solver = CardiacNewtonSolver<32,Cellbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLBackwardEuler>::Instance(); + _p_solver->Solve(*this, var_chaste_interface__environment__time, _guess); + rY[12] = _guess[0]; + rY[13] = _guess[1]; + rY[14] = _guess[2]; + rY[15] = _guess[3]; + rY[16] = _guess[4]; + rY[17] = _guess[5]; + rY[11] = _guess[6]; + rY[7] = _guess[7]; + rY[6] = _guess[8]; + rY[3] = _guess[9]; + rY[4] = _guess[10]; + rY[1] = _guess[11]; + rY[2] = _guess[12]; + rY[5] = _guess[13]; + rY[20] = _guess[14]; + rY[21] = _guess[15]; + rY[22] = _guess[16]; + rY[23] = _guess[17]; + rY[25] = _guess[18]; + rY[26] = _guess[19]; + rY[24] = _guess[20]; + rY[19] = _guess[21]; + rY[36] = _guess[22]; + rY[27] = _guess[23]; + rY[38] = _guess[24]; + rY[39] = _guess[25]; + rY[40] = _guess[26]; + rY[37] = _guess[27]; + rY[10] = _guess[28]; + rY[8] = _guess[29]; + rY[9] = _guess[30]; + rY[18] = _guess[31]; + } + + std::vector Cellbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLBackwardEuler::ComputeDerivedQuantities(double var_chaste_interface__environment__time, const std::vector & rY) + { + // Inputs: + // Time units: millisecond + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -82.4202 + double var_chaste_interface__calcium_concentration__Cai_converted = rY[1]; + // Units: millimolar; Initial value: 0.000115001 + double var_chaste_interface__calcium_concentration__Cass = rY[2]; + // Units: micromolar; Initial value: 0.115001 + double var_chaste_interface__calcium_concentration__CaJSR = rY[3]; + // Units: micromolar; Initial value: 1299.5 + double var_chaste_interface__calcium_fluxes__P_RyR = rY[5]; + // Units: dimensionless; Initial value: 0.0 + double var_chaste_interface__ryanodine_receptors__P_O1 = rY[8]; + // Units: dimensionless; Initial value: 1.49102e-05 + double var_chaste_interface__ryanodine_receptors__P_O2 = rY[9]; + // Units: dimensionless; Initial value: 9.51726e-11 + double var_chaste_interface__L_type_calcium_current__O = rY[11]; + // Units: dimensionless; Initial value: 9.30308e-19 + double var_chaste_interface__sodium_concentration__Nai = rY[18]; + // Units: micromolar; Initial value: 14237.1 + double var_chaste_interface__fast_sodium_current__O_Na = rY[19]; + // Units: dimensionless; Initial value: 7.13483e-07 + double var_chaste_interface__potassium_concentration__Ki = rY[27]; + // Units: micromolar; Initial value: 143720.0 + double var_chaste_interface__fast_transient_outward_potassium_current__ato_f = rY[28]; + // Units: dimensionless; Initial value: 0.00265563 + double var_chaste_interface__fast_transient_outward_potassium_current__ito_f = rY[29]; + // Units: dimensionless; Initial value: 0.999977 + double var_chaste_interface__slow_delayed_rectifier_potassium_current__nKs = rY[32]; + // Units: dimensionless; Initial value: 0.000262753 + double var_chaste_interface__non_inactivating_steady_state_potassium_current__aKss = rY[35]; + // Units: dimensionless; Initial value: 0.000417069 + double var_chaste_interface__non_inactivating_steady_state_potassium_current__iKss = rY[36]; + // Units: dimensionless; Initial value: 1.0 + double var_chaste_interface__rapid_delayed_rectifier_potassium_current__O_K = rY[37]; + // Units: dimensionless; Initial value: 0.000175298 + + // Mathematics + const double var_L_type_calcium_current__E_CaL = 63; // millivolt + const double var_calcium_concentration__Cai = 1000 * var_chaste_interface__calcium_concentration__Cai_converted; // micromolar + const double var_membrane__F = 96.5; // coulomb_per_millimole + const double var_membrane__R = 8.3140000000000001; // joule_per_mole_kelvin + const double var_membrane__T = 298; // kelvin + const double var_L_type_calcium_current__i_CaL = (-var_L_type_calcium_current__E_CaL + var_chaste_interface__membrane__V) * var_chaste_interface__L_type_calcium_current__O * mParameters[7]; // picoA_per_picoF + const double var_L_type_calcium_current__i_CaL_converted = HeartConfig::Instance()->GetCapacitance() * var_L_type_calcium_current__i_CaL; // uA_per_cm2 + const double var_membrane__i_stim_converted = GetIntracellularAreaStimulus(var_chaste_interface__environment__time); // uA_per_cm2 + const double var_fast_transient_outward_potassium_current__E_K = var_membrane__R * var_membrane__T * log(mParameters[5] / var_chaste_interface__potassium_concentration__Ki) / var_membrane__F; // millivolt + const double var_fast_transient_outward_potassium_current__i_Kto_f = pow(var_chaste_interface__fast_transient_outward_potassium_current__ato_f, 3) * (-var_fast_transient_outward_potassium_current__E_K + var_chaste_interface__membrane__V) * mParameters[16] * var_chaste_interface__fast_transient_outward_potassium_current__ito_f; // picoA_per_picoF + const double var_fast_transient_outward_potassium_current__i_Kto_f_converted = HeartConfig::Instance()->GetCapacitance() * var_fast_transient_outward_potassium_current__i_Kto_f; // uA_per_cm2 + const double var_non_inactivating_steady_state_potassium_current__i_Kss = (-var_fast_transient_outward_potassium_current__E_K + var_chaste_interface__membrane__V) * var_chaste_interface__non_inactivating_steady_state_potassium_current__aKss * mParameters[12] * var_chaste_interface__non_inactivating_steady_state_potassium_current__iKss; // picoA_per_picoF + const double var_non_inactivating_steady_state_potassium_current__i_Kss_converted = HeartConfig::Instance()->GetCapacitance() * var_non_inactivating_steady_state_potassium_current__i_Kss; // uA_per_cm2 + const double var_calcium_fluxes__J_rel = (-var_chaste_interface__calcium_concentration__Cass + var_chaste_interface__calcium_concentration__CaJSR) * (var_chaste_interface__ryanodine_receptors__P_O1 + var_chaste_interface__ryanodine_receptors__P_O2) * var_chaste_interface__calcium_fluxes__P_RyR * mParameters[1]; // micromolar_per_millisecond + const double var_slow_delayed_rectifier_potassium_current__i_Ks = pow(var_chaste_interface__slow_delayed_rectifier_potassium_current__nKs, 2) * (-var_fast_transient_outward_potassium_current__E_K + var_chaste_interface__membrane__V) * mParameters[14]; // picoA_per_picoF + const double var_slow_delayed_rectifier_potassium_current__i_Ks_converted = HeartConfig::Instance()->GetCapacitance() * var_slow_delayed_rectifier_potassium_current__i_Ks; // uA_per_cm2 + const double var_sodium_calcium_exchange_current__K_mCa = 1380; // micromolar + const double var_sodium_calcium_exchange_current__K_mNa = 87500; // micromolar + const double var_sodium_calcium_exchange_current__eta = 0.34999999999999998; // dimensionless + const double var_sodium_calcium_exchange_current__k_sat = 0.10000000000000001; // dimensionless + const double var_fast_sodium_current__E_Na = var_membrane__R * var_membrane__T * log((mParameters[6] + 0.1111111111111111 * mParameters[5]) / (var_chaste_interface__sodium_concentration__Nai + 0.1111111111111111 * var_chaste_interface__potassium_concentration__Ki)) / var_membrane__F; // millivolt + const double var_fast_sodium_current__i_Na = (-var_fast_sodium_current__E_Na + var_chaste_interface__membrane__V) * var_chaste_interface__fast_sodium_current__O_Na * mParameters[9]; // picoA_per_picoF + const double var_fast_sodium_current__i_Na_converted = HeartConfig::Instance()->GetCapacitance() * var_fast_sodium_current__i_Na; // uA_per_cm2 + const double var_rapid_delayed_rectifier_potassium_current__i_Kr = (-var_membrane__R * var_membrane__T * log((mParameters[5] + 0.020408163265306124 * mParameters[6]) / (var_chaste_interface__potassium_concentration__Ki + 0.020408163265306124 * var_chaste_interface__sodium_concentration__Nai)) / var_membrane__F + var_chaste_interface__membrane__V) * var_chaste_interface__rapid_delayed_rectifier_potassium_current__O_K * mParameters[13]; // picoA_per_picoF + const double var_rapid_delayed_rectifier_potassium_current__i_Kr_converted = HeartConfig::Instance()->GetCapacitance() * var_rapid_delayed_rectifier_potassium_current__i_Kr; // uA_per_cm2 + const double var_sodium_calcium_exchange_current__i_NaCa = (pow(var_chaste_interface__sodium_concentration__Nai, 3) * mParameters[4] * exp(var_membrane__F * var_chaste_interface__membrane__V * var_sodium_calcium_exchange_current__eta / (var_membrane__R * var_membrane__T)) - pow(mParameters[6], 3) * var_calcium_concentration__Cai * exp((-1 + var_sodium_calcium_exchange_current__eta) * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * mParameters[15] / ((1 + var_sodium_calcium_exchange_current__k_sat * exp((-1 + var_sodium_calcium_exchange_current__eta) * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * (pow(mParameters[6], 3) + pow(var_sodium_calcium_exchange_current__K_mNa, 3)) * (mParameters[4] + var_sodium_calcium_exchange_current__K_mCa)); // picoA_per_picoF + const double var_sodium_calcium_exchange_current__i_NaCa_converted = HeartConfig::Instance()->GetCapacitance() * var_sodium_calcium_exchange_current__i_NaCa; // uA_per_cm2 + const double var_time_independent_potassium_current__i_K1 = (-var_fast_transient_outward_potassium_current__E_K + var_chaste_interface__membrane__V) * mParameters[5] * mParameters[11] / ((1 + exp(0.089599999999999999 * var_chaste_interface__membrane__V - 0.089599999999999999 * var_fast_transient_outward_potassium_current__E_K)) * (210 + mParameters[5])); // picoA_per_picoF + const double var_time_independent_potassium_current__i_K1_converted = HeartConfig::Instance()->GetCapacitance() * var_time_independent_potassium_current__i_K1; // uA_per_cm2 + + std::vector dqs(12); + dqs[0] = var_calcium_fluxes__J_rel; + dqs[1] = var_chaste_interface__calcium_concentration__Cai_converted; + dqs[2] = var_L_type_calcium_current__i_CaL_converted; + dqs[3] = var_fast_sodium_current__i_Na_converted; + dqs[4] = var_time_independent_potassium_current__i_K1_converted; + dqs[5] = var_non_inactivating_steady_state_potassium_current__i_Kss_converted; + dqs[6] = var_rapid_delayed_rectifier_potassium_current__i_Kr_converted; + dqs[7] = var_slow_delayed_rectifier_potassium_current__i_Ks_converted; + dqs[8] = var_sodium_calcium_exchange_current__i_NaCa_converted; + dqs[9] = var_membrane__i_stim_converted; + dqs[10] = var_fast_transient_outward_potassium_current__i_Kto_f_converted; + dqs[11] = var_chaste_interface__environment__time; + return dqs; + } + +template<> +void OdeSystemInformation::Initialise(void) +{ + this->mSystemName = "bondarenko_2004_apical"; + this->mFreeVariableName = "time"; + this->mFreeVariableUnits = "millisecond"; + + // rY[0]: + this->mVariableNames.push_back("membrane_voltage"); + this->mVariableUnits.push_back("millivolt"); + this->mInitialConditions.push_back(-82.4202); + + // rY[1]: + this->mVariableNames.push_back("cytosolic_calcium_concentration"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(0.000115001); + + // rY[2]: + this->mVariableNames.push_back("dyadic_space_calcium_concentration"); + this->mVariableUnits.push_back("micromolar"); + this->mInitialConditions.push_back(0.115001); + + // rY[3]: + this->mVariableNames.push_back("JSR_calcium_concentration"); + this->mVariableUnits.push_back("micromolar"); + this->mInitialConditions.push_back(1299.5); + + // rY[4]: + this->mVariableNames.push_back("calcium_concentration__CaNSR"); + this->mVariableUnits.push_back("micromolar"); + this->mInitialConditions.push_back(1299.5); + + // rY[5]: + this->mVariableNames.push_back("calcium_fluxes__P_RyR"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.0); + + // rY[6]: + this->mVariableNames.push_back("calcium_buffering__LTRPN_Ca"); + this->mVariableUnits.push_back("micromolar"); + this->mInitialConditions.push_back(11.2684); + + // rY[7]: + this->mVariableNames.push_back("calcium_buffering__HTRPN_Ca"); + this->mVariableUnits.push_back("micromolar"); + this->mInitialConditions.push_back(125.29); + + // rY[8]: + this->mVariableNames.push_back("ryanodine_receptors__P_O1"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(1.49102e-05); + + // rY[9]: + this->mVariableNames.push_back("ryanodine_receptors__P_O2"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(9.51726e-11); + + // rY[10]: + this->mVariableNames.push_back("ryanodine_receptors__P_C2"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.00016774); + + // rY[11]: + this->mVariableNames.push_back("L_type_calcium_current__O"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(9.30308e-19); + + // rY[12]: + this->mVariableNames.push_back("L_type_calcium_current__C2"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.000124216); + + // rY[13]: + this->mVariableNames.push_back("L_type_calcium_current__C3"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(5.78679e-09); + + // rY[14]: + this->mVariableNames.push_back("L_type_calcium_current__C4"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(1.19816e-13); + + // rY[15]: + this->mVariableNames.push_back("L_type_calcium_current__I1"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(4.97923e-19); + + // rY[16]: + this->mVariableNames.push_back("L_type_calcium_current__I2"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(3.45847e-14); + + // rY[17]: + this->mVariableNames.push_back("L_type_calcium_current__I3"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(1.85106e-14); + + // rY[18]: + this->mVariableNames.push_back("cytosolic_sodium_concentration"); + this->mVariableUnits.push_back("micromolar"); + this->mInitialConditions.push_back(14237.1); + + // rY[19]: + this->mVariableNames.push_back("fast_sodium_current__O_Na"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(7.13483e-07); + + // rY[20]: + this->mVariableNames.push_back("fast_sodium_current__C_Na1"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.000279132); + + // rY[21]: + this->mVariableNames.push_back("fast_sodium_current__C_Na2"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.020752); + + // rY[22]: + this->mVariableNames.push_back("fast_sodium_current__I1_Na"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(6.73345e-07); + + // rY[23]: + this->mVariableNames.push_back("fast_sodium_current__I2_Na"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(1.55787e-09); + + // rY[24]: + this->mVariableNames.push_back("fast_sodium_current__IF_Na"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.000153176); + + // rY[25]: + this->mVariableNames.push_back("fast_sodium_current__IC_Na2"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.0113879); + + // rY[26]: + this->mVariableNames.push_back("fast_sodium_current__IC_Na3"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.34278); + + // rY[27]: + this->mVariableNames.push_back("cytosolic_potassium_concentration"); + this->mVariableUnits.push_back("micromolar"); + this->mInitialConditions.push_back(143720.0); + + // rY[28]: + this->mVariableNames.push_back("fast_transient_outward_potassium_current__ato_f"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.00265563); + + // rY[29]: + this->mVariableNames.push_back("fast_transient_outward_potassium_current__ito_f"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.999977); + + // rY[30]: + this->mVariableNames.push_back("slow_transient_outward_potassium_current__ato_s"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.000417069); + + // rY[31]: + this->mVariableNames.push_back("slow_transient_outward_potassium_current__ito_s"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.998543); + + // rY[32]: + this->mVariableNames.push_back("slow_delayed_rectifier_potassium_current__nKs"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.000262753); + + // rY[33]: + this->mVariableNames.push_back("ultra_rapidly_activating_delayed_rectifier_potassium_current__aur"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.000417069); + + // rY[34]: + this->mVariableNames.push_back("ultra_rapidly_activating_delayed_rectifier_potassium_current__iur"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.998543); + + // rY[35]: + this->mVariableNames.push_back("non_inactivating_steady_state_potassium_current__aKss"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.000417069); + + // rY[36]: + this->mVariableNames.push_back("non_inactivating_steady_state_potassium_current__iKss"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(1.0); + + // rY[37]: + this->mVariableNames.push_back("rapid_delayed_rectifier_potassium_current__O_K"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.000175298); + + // rY[38]: + this->mVariableNames.push_back("rapid_delayed_rectifier_potassium_current__C_K1"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.000992513); + + // rY[39]: + this->mVariableNames.push_back("rapid_delayed_rectifier_potassium_current__C_K2"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.000641229); + + // rY[40]: + this->mVariableNames.push_back("rapid_delayed_rectifier_potassium_current__I_K"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(3.19129e-05); + + // mParameters[0]: + this->mParameterNames.push_back("SR_leak_current_max"); + this->mParameterUnits.push_back("per_millisecond"); + + // mParameters[1]: + this->mParameterNames.push_back("SR_release_current_max"); + this->mParameterUnits.push_back("per_millisecond"); + + // mParameters[2]: + this->mParameterNames.push_back("SR_uptake_current_max"); + this->mParameterUnits.push_back("micromolar_per_millisecond"); + + // mParameters[3]: + this->mParameterNames.push_back("concentration_clamp_onoff"); + this->mParameterUnits.push_back("dimensionless"); + + // mParameters[4]: + this->mParameterNames.push_back("extracellular_calcium_concentration"); + this->mParameterUnits.push_back("micromolar"); + + // mParameters[5]: + this->mParameterNames.push_back("extracellular_potassium_concentration"); + this->mParameterUnits.push_back("micromolar"); + + // mParameters[6]: + this->mParameterNames.push_back("extracellular_sodium_concentration"); + this->mParameterUnits.push_back("micromolar"); + + // mParameters[7]: + this->mParameterNames.push_back("membrane_L_type_calcium_current_conductance"); + this->mParameterUnits.push_back("milliS_per_microF"); + + // mParameters[8]: + this->mParameterNames.push_back("membrane_capacitance"); + this->mParameterUnits.push_back("microF_per_cm2"); + + // mParameters[9]: + this->mParameterNames.push_back("membrane_fast_sodium_current_conductance"); + this->mParameterUnits.push_back("milliS_per_microF"); + + // mParameters[10]: + this->mParameterNames.push_back("membrane_fast_sodium_current_shift_inactivation"); + this->mParameterUnits.push_back("millivolt"); + + // mParameters[11]: + this->mParameterNames.push_back("membrane_inward_rectifier_potassium_current_conductance"); + this->mParameterUnits.push_back("milliS_per_microF"); + + // mParameters[12]: + this->mParameterNames.push_back("membrane_non_inactivating_steady_state_potassium_current_conductance"); + this->mParameterUnits.push_back("milliS_per_microF"); + + // mParameters[13]: + this->mParameterNames.push_back("membrane_rapid_delayed_rectifier_potassium_current_conductance"); + this->mParameterUnits.push_back("milliS_per_microF"); + + // mParameters[14]: + this->mParameterNames.push_back("membrane_slow_delayed_rectifier_potassium_current_conductance"); + this->mParameterUnits.push_back("milliS_per_microF"); + + // mParameters[15]: + this->mParameterNames.push_back("membrane_sodium_calcium_exchanger_current_conductance"); + this->mParameterUnits.push_back("picoA_per_picoF"); + + // mParameters[16]: + this->mParameterNames.push_back("membrane_transient_outward_current_conductance"); + this->mParameterUnits.push_back("milliS_per_microF"); + + // Derived Quantity index [0]: + this->mDerivedQuantityNames.push_back("SR_release_current"); + this->mDerivedQuantityUnits.push_back("micromolar_per_millisecond"); + + // Derived Quantity index [1]: + this->mDerivedQuantityNames.push_back("cytosolic_calcium_concentration"); + this->mDerivedQuantityUnits.push_back("millimolar"); + + // Derived Quantity index [2]: + this->mDerivedQuantityNames.push_back("membrane_L_type_calcium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [3]: + this->mDerivedQuantityNames.push_back("membrane_fast_sodium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [4]: + this->mDerivedQuantityNames.push_back("membrane_inward_rectifier_potassium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [5]: + this->mDerivedQuantityNames.push_back("membrane_non_inactivating_steady_state_potassium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [6]: + this->mDerivedQuantityNames.push_back("membrane_rapid_delayed_rectifier_potassium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [7]: + this->mDerivedQuantityNames.push_back("membrane_slow_delayed_rectifier_potassium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [8]: + this->mDerivedQuantityNames.push_back("membrane_sodium_calcium_exchanger_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [9]: + this->mDerivedQuantityNames.push_back("membrane_stimulus_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [10]: + this->mDerivedQuantityNames.push_back("membrane_transient_outward_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [11]: + this->mDerivedQuantityNames.push_back("time"); + this->mDerivedQuantityUnits.push_back("millisecond"); + + this->mInitialised = true; +} + +// Serialization for Boost >= 1.36 +#include "SerializationExportWrapperForCpp.hpp" +CHASTE_CLASS_EXPORT(Cellbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLBackwardEuler) + diff --git a/chaste_codegen/tests/numerical/baseline/BE/bondarenko_szigeti_bett_kim_rasmusson_2004_apical.hpp b/chaste_codegen/tests/numerical/baseline/BE/bondarenko_szigeti_bett_kim_rasmusson_2004_apical.hpp new file mode 100644 index 00000000..a8322259 --- /dev/null +++ b/chaste_codegen/tests/numerical/baseline/BE/bondarenko_szigeti_bett_kim_rasmusson_2004_apical.hpp @@ -0,0 +1,87 @@ +#ifndef CELLBONDARENKO_SZIGETI_BETT_KIM_RASMUSSON_2004_APICALFROMCELLMLBACKWARDEULER_HPP_ +#define CELLBONDARENKO_SZIGETI_BETT_KIM_RASMUSSON_2004_APICALFROMCELLMLBACKWARDEULER_HPP_ + +//! @file +//! +//! This source file was generated from CellML by chaste_codegen version (version omitted as unimportant) +//! +//! Model: bondarenko_2004_apical +//! +//! Processed by chaste_codegen: https://github.com/ModellingWebLab/chaste-codegen +//! (translator: chaste_codegen, model type: BackwardEuler) +//! on (date omitted as unimportant) +//! +//! + +#include "ChasteSerialization.hpp" +#include +#include "AbstractStimulusFunction.hpp" +#include "AbstractBackwardEulerCardiacCell.hpp" + +class Cellbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLBackwardEuler : public AbstractBackwardEulerCardiacCell<32> +{ + friend class boost::serialization::access; + template + void serialize(Archive & archive, const unsigned int version) + { + archive & boost::serialization::base_object >(*this); + + } + + // + // Settable parameters and readable variables + // + + +private: +const bool is_concentration[41] = {false, true, true, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, false, false, false, false, false, false, false, false, true, false, false, false, false, false, false, false, false, false, false, false, false, false}; +const bool is_probability[41] = {false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false}; +public: + + boost::shared_ptr UseCellMLDefaultStimulus(); + double GetIntracellularCalciumConcentration(); + Cellbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLBackwardEuler(boost::shared_ptr /* unused; should be empty */, boost::shared_ptr pIntracellularStimulus); + ~Cellbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLBackwardEuler(); + void VerifyStateVariables(); + double GetIIonic(const std::vector* pStateVariables=NULL);void ComputeResidual(double var_chaste_interface__environment__time, const double rCurrentGuess[32], double rResidual[32]); + void ComputeJacobian(double var_chaste_interface__environment__time, const double rCurrentGuess[32], double rJacobian[32][32]);protected: + void UpdateTransmembranePotential(double var_chaste_interface__environment__time); + void ComputeOneStepExceptVoltage(double var_chaste_interface__environment__time); + + std::vector ComputeDerivedQuantities(double var_chaste_interface__environment__time, const std::vector & rY); +}; + +// Needs to be included last +#include "SerializationExportWrapper.hpp" +CHASTE_CLASS_EXPORT(Cellbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLBackwardEuler) + +namespace boost +{ + namespace serialization + { + template + inline void save_construct_data( + Archive & ar, const Cellbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLBackwardEuler * t, const unsigned int fileVersion) + { + const boost::shared_ptr p_solver = t->GetSolver(); + const boost::shared_ptr p_stimulus = t->GetStimulusFunction(); + ar << p_solver; + ar << p_stimulus; + } + + template + inline void load_construct_data( + Archive & ar, Cellbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLBackwardEuler * t, const unsigned int fileVersion) + { + boost::shared_ptr p_solver; + boost::shared_ptr p_stimulus; + ar >> p_solver; + ar >> p_stimulus; + ::new(t)Cellbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLBackwardEuler(p_solver, p_stimulus); + } + + } + +} + +#endif // CELLBONDARENKO_SZIGETI_BETT_KIM_RASMUSSON_2004_APICALFROMCELLMLBACKWARDEULER_HPP_ \ No newline at end of file diff --git a/chaste_codegen/tests/numerical/baseline/BE/dynamic_courtemanche_ramirez_nattel_1998.cpp b/chaste_codegen/tests/numerical/baseline/BE/dynamic_courtemanche_ramirez_nattel_1998.cpp new file mode 100644 index 00000000..16981221 --- /dev/null +++ b/chaste_codegen/tests/numerical/baseline/BE/dynamic_courtemanche_ramirez_nattel_1998.cpp @@ -0,0 +1,1030 @@ +//! @file +//! +//! This source file was generated from CellML by chaste_codegen version (version omitted as unimportant) +//! +//! Model: courtemanche_1998 +//! +//! Processed by chaste_codegen: https://github.com/ModellingWebLab/chaste-codegen +//! (translator: chaste_codegen, model type: BackwardEuler) +//! on (date omitted as unimportant) +//! +//! + +#include "CardiacNewtonSolver.hpp" +#include "dynamic_courtemanche_ramirez_nattel_1998.hpp" +#include +#include +#include +#include +#include "Exception.hpp" +#include "OdeSystemInformation.hpp" +#include "RegularStimulus.hpp" +#include "HeartConfig.hpp" +#include "IsNan.hpp" +#include "MathsCustomFunctions.hpp" + +#include "ModelFactory.hpp" + +AbstractBackwardEulerCardiacCell<8>* Dynamiccourtemanche_ramirez_nattel_1998FromCellMLBackwardEuler::CreateMethod(boost::shared_ptr p_solver, boost::shared_ptr p_stimulus) { + return new Dynamiccourtemanche_ramirez_nattel_1998FromCellMLBackwardEuler(p_solver, p_stimulus); +} + +bool Dynamiccourtemanche_ramirez_nattel_1998FromCellMLBackwardEuler::registered = ModelFactory::Register("dynamic_courtemanche_ramirez_nattel_1998", "BackwardEuler", (ModelFactory::TCreateMethod)Dynamiccourtemanche_ramirez_nattel_1998FromCellMLBackwardEuler::CreateMethod); + + + + boost::shared_ptr Dynamiccourtemanche_ramirez_nattel_1998FromCellMLBackwardEuler::UseCellMLDefaultStimulus() + { + // Use the default stimulus specified by CellML metadata + const double var_membrane__Cm_converted = 9.9999999999999995e-7 * mParameters[9]; // uF + const double var_chaste_interface__membrane__stim_amplitude_converted = -0.002 * HeartConfig::Instance()->GetCapacitance() / var_membrane__Cm_converted; // uA_per_cm2 + const double var_chaste_interface__membrane__stim_duration = 2; // millisecond + const double var_chaste_interface__membrane__stim_period = 1000; // millisecond + const double var_chaste_interface__membrane__stim_start = 100; // millisecond + boost::shared_ptr p_cellml_stim(new RegularStimulus( + -fabs(var_chaste_interface__membrane__stim_amplitude_converted), + var_chaste_interface__membrane__stim_duration, + var_chaste_interface__membrane__stim_period, + var_chaste_interface__membrane__stim_start + )); + mpIntracellularStimulus = p_cellml_stim; + return p_cellml_stim; + } + double Dynamiccourtemanche_ramirez_nattel_1998FromCellMLBackwardEuler::GetIntracellularCalciumConcentration() + { + return mStateVariables[1]; + } + Dynamiccourtemanche_ramirez_nattel_1998FromCellMLBackwardEuler::Dynamiccourtemanche_ramirez_nattel_1998FromCellMLBackwardEuler(boost::shared_ptr /* unused; should be empty */, boost::shared_ptr pIntracellularStimulus) + : AbstractBackwardEulerCardiacCell<8>( + 21, + 0, + pIntracellularStimulus) + { + // Time units: millisecond + // + this->mpSystemInfo = OdeSystemInformation::Instance(); + Init(); + + // We have a default stimulus specified in the CellML file metadata + this->mHasDefaultStimulusFromCellML = true; + + this->mParameters[0] = 1; // (var_Ca_leak_current_by_the_NSR__leak_factor) [dimensionless] + this->mParameters[1] = 30; // (var_Ca_release_current_from_JSR__K_rel) [per_millisecond] + this->mParameters[2] = 0.0050000000000000001; // (var_Ca_uptake_current_by_the_NSR__I_up_max) [millimolar_per_millisecond] + this->mParameters[3] = 1; // (var_intracellular_ion_concentrations__conc_clamp) [dimensionless] + this->mParameters[4] = 1.8; // (var_standard_ionic_concentrations__Ca_o) [millimolar] + this->mParameters[5] = 5.4000000000000004; // (var_standard_ionic_concentrations__K_o) [millimolar] + this->mParameters[6] = 140; // (var_standard_ionic_concentrations__Na_o) [millimolar] + this->mParameters[7] = 0.12375; // (var_L_type_Ca_channel__g_Ca_L) [nanoS_per_picoF] + this->mParameters[8] = 2; // (var_L_type_Ca_channel_f_Ca_gate__tau_f_Ca) [millisecond] + this->mParameters[9] = 100; // (var_membrane__Cm) [picoF] + this->mParameters[10] = 7.7999999999999998; // (var_fast_sodium_current__g_Na) [nanoS_per_picoF] + this->mParameters[11] = 0; // (var_fast_sodium_current__perc_reduced_inact_for_IpNa) [dimensionless] + this->mParameters[12] = 0; // (var_fast_sodium_current__shift_INa_inact) [millivolt] + this->mParameters[13] = 0.089999999999999997; // (var_time_independent_potassium_current__g_K1) [nanoS_per_picoF] + this->mParameters[14] = 0.029411764999999999; // (var_rapid_delayed_rectifier_K_current__g_Kr) [nanoS_per_picoF] + this->mParameters[15] = 0.12941175999999999; // (var_slow_delayed_rectifier_K_current__g_Ks) [nanoS_per_picoF] + this->mParameters[16] = 1600; // (var_Na_Ca_exchanger_current__I_NaCa_max) [picoA_per_picoF] + this->mParameters[17] = 0.16520000000000001; // (var_transient_outward_K_current__g_to) [nanoS_per_picoF] + } + + Dynamiccourtemanche_ramirez_nattel_1998FromCellMLBackwardEuler::~Dynamiccourtemanche_ramirez_nattel_1998FromCellMLBackwardEuler() + { + } + + + void Dynamiccourtemanche_ramirez_nattel_1998FromCellMLBackwardEuler::VerifyStateVariables() + { + std::vector& rY = rGetStateVariables(); + std::string error_message = ""; + + for (unsigned i=0; i < 21; i++) + { + if(std::isnan(rY[i])) + { + error_message += "State variable " + this->rGetStateVariableNames()[i] + " is not a number\n"; + } + if(std::isinf(rY[i])) + { + error_message += "State variable " + this->rGetStateVariableNames()[i] + " has become INFINITE\n"; + } + if(this->is_concentration[i] && rY[i] < 0) + { + error_message += "Concentration " + this->rGetStateVariableNames()[i] + " below 0\n"; + } + if(this->is_probability[i] && rY[i] < 0) + { + error_message += "Probability " + this->rGetStateVariableNames()[i] + " below 0\n"; + } + if(this->is_probability[i] && rY[i] > 1) + { + error_message += "Probability " + this->rGetStateVariableNames()[i] + " above 1\n"; + } + } + if (error_message != ""){ + EXCEPTION(DumpState(error_message)); + } + } + + double Dynamiccourtemanche_ramirez_nattel_1998FromCellMLBackwardEuler::GetIIonic(const std::vector* pStateVariables) + { + // For state variable interpolation (SVI) we read in interpolated state variables, + // otherwise for ionic current interpolation (ICI) we use the state variables of this model (node). + if (!pStateVariables) pStateVariables = &rGetStateVariables(); + const std::vector& rY = *pStateVariables; + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -81.18 + double var_chaste_interface__intracellular_ion_concentrations__Ca_i = rY[1]; + // Units: millimolar; Initial value: 0.0001013 + double var_chaste_interface__fast_sodium_current_m_gate__m = rY[2]; + // Units: dimensionless; Initial value: 0.002908 + double var_chaste_interface__fast_sodium_current_h_gate__h = rY[3]; + // Units: dimensionless; Initial value: 0.9649 + double var_chaste_interface__fast_sodium_current_j_gate__j = rY[4]; + // Units: dimensionless; Initial value: 0.9775 + double var_chaste_interface__transient_outward_K_current_oa_gate__oa = rY[5]; + // Units: dimensionless; Initial value: 0.03043 + double var_chaste_interface__transient_outward_K_current_oi_gate__oi = rY[6]; + // Units: dimensionless; Initial value: 0.9992 + double var_chaste_interface__ultrarapid_delayed_rectifier_K_current_ua_gate__ua = rY[7]; + // Units: dimensionless; Initial value: 0.004966 + double var_chaste_interface__ultrarapid_delayed_rectifier_K_current_ui_gate__ui = rY[8]; + // Units: dimensionless; Initial value: 0.9986 + double var_chaste_interface__rapid_delayed_rectifier_K_current_xr_gate__xr = rY[9]; + // Units: dimensionless; Initial value: 3.296e-05 + double var_chaste_interface__slow_delayed_rectifier_K_current_xs_gate__xs = rY[10]; + // Units: dimensionless; Initial value: 0.01869 + double var_chaste_interface__L_type_Ca_channel_d_gate__d = rY[11]; + // Units: dimensionless; Initial value: 0.0001367 + double var_chaste_interface__L_type_Ca_channel_f_gate__f = rY[12]; + // Units: dimensionless; Initial value: 0.9996 + double var_chaste_interface__L_type_Ca_channel_f_Ca_gate__f_Ca = rY[13]; + // Units: dimensionless; Initial value: 0.7755 + double var_chaste_interface__intracellular_ion_concentrations__Na_i = rY[17]; + // Units: millimolar; Initial value: 11.17 + double var_chaste_interface__intracellular_ion_concentrations__K_i = rY[18]; + // Units: millimolar; Initial value: 139.0 + + const double var_Na_Ca_exchanger_current__K_mCa = 1.3799999999999999; // millimolar + const double var_Na_Ca_exchanger_current__K_mNa = 87.5; // millimolar + const double var_Na_Ca_exchanger_current__K_sat = 0.10000000000000001; // dimensionless + const double var_Na_Ca_exchanger_current__gamma = 0.34999999999999998; // dimensionless + const double var_background_currents__g_B_Ca = 0.0011310000000000001; // nanoS_per_picoF + const double var_background_currents__g_B_Na = 0.00067443750000000002; // nanoS_per_picoF + const double var_membrane__Cm_converted = 9.9999999999999995e-7 * mParameters[9]; // uF + const double var_membrane__F = 96.486699999999999; // coulomb_per_millimole + const double var_membrane__R = 8.3142999999999994; // joule_per_mole_kelvin + const double var_membrane__T = 310; // kelvin + const double var_L_type_Ca_channel__i_Ca_L = (-65 + var_chaste_interface__membrane__V) * mParameters[7] * var_chaste_interface__L_type_Ca_channel_d_gate__d * var_chaste_interface__L_type_Ca_channel_f_Ca_gate__f_Ca * var_chaste_interface__L_type_Ca_channel_f_gate__f * mParameters[9]; // picoA + const double var_L_type_Ca_channel__i_Ca_L_converted = 9.9999999999999995e-7 * HeartConfig::Instance()->GetCapacitance() * var_L_type_Ca_channel__i_Ca_L / var_membrane__Cm_converted; // uA_per_cm2 + const double var_sarcolemmal_calcium_pump_current__i_CaP_max = 0.27500000000000002; // picoA_per_picoF + const double var_sarcolemmal_calcium_pump_current__i_CaP = var_chaste_interface__intracellular_ion_concentrations__Ca_i * mParameters[9] * var_sarcolemmal_calcium_pump_current__i_CaP_max / (0.00050000000000000001 + var_chaste_interface__intracellular_ion_concentrations__Ca_i); // picoA + const double var_sodium_potassium_pump__Km_K_o = 1.5; // millimolar + const double var_sodium_potassium_pump__Km_Na_i = 10; // millimolar + const double var_sodium_potassium_pump__i_NaK_max = 0.59933873999999998; // picoA_per_picoF + const double var_background_currents__E_Ca = 0.5 * var_membrane__R * var_membrane__T * log(mParameters[4] / var_chaste_interface__intracellular_ion_concentrations__Ca_i) / var_membrane__F; // millivolt + const double var_background_currents__i_B_Ca = (-var_background_currents__E_Ca + var_chaste_interface__membrane__V) * var_background_currents__g_B_Ca * mParameters[9]; // picoA + const double var_Na_Ca_exchanger_current__i_NaCa = (pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, 3) * mParameters[4] * exp(var_Na_Ca_exchanger_current__gamma * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T)) - pow(mParameters[6], 3) * var_chaste_interface__intracellular_ion_concentrations__Ca_i * exp((-1 + var_Na_Ca_exchanger_current__gamma) * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * mParameters[16] * mParameters[9] / ((1 + var_Na_Ca_exchanger_current__K_sat * exp((-1 + var_Na_Ca_exchanger_current__gamma) * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * (pow(var_Na_Ca_exchanger_current__K_mNa, 3) + pow(mParameters[6], 3)) * (var_Na_Ca_exchanger_current__K_mCa + mParameters[4])); // picoA + const double var_Na_Ca_exchanger_current__i_NaCa_converted = 9.9999999999999995e-7 * HeartConfig::Instance()->GetCapacitance() * var_Na_Ca_exchanger_current__i_NaCa / var_membrane__Cm_converted; // uA_per_cm2 + const double var_fast_sodium_current__E_Na = var_membrane__R * var_membrane__T * log(mParameters[6] / var_chaste_interface__intracellular_ion_concentrations__Na_i) / var_membrane__F; // millivolt + const double var_background_currents__i_B_Na = (-var_fast_sodium_current__E_Na + var_chaste_interface__membrane__V) * var_background_currents__g_B_Na * mParameters[9]; // picoA + const double var_fast_sodium_current__i_Na = pow(var_chaste_interface__fast_sodium_current_m_gate__m, 3) * (-var_fast_sodium_current__E_Na + var_chaste_interface__membrane__V) * mParameters[10] * var_chaste_interface__fast_sodium_current_h_gate__h * var_chaste_interface__fast_sodium_current_j_gate__j * mParameters[9]; // picoA + const double var_fast_sodium_current__i_Na_converted = 9.9999999999999995e-7 * HeartConfig::Instance()->GetCapacitance() * var_fast_sodium_current__i_Na / var_membrane__Cm_converted; // uA_per_cm2 + const double var_sodium_potassium_pump__sigma = -0.14285714285714285 + 0.14285714285714285 * exp(0.01485884101040119 * mParameters[6]); // dimensionless + const double var_sodium_potassium_pump__f_NaK = 1 / (1 + 0.1245 * exp(-0.10000000000000001 * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T)) + 0.036499999999999998 * var_sodium_potassium_pump__sigma * exp(-var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))); // dimensionless + const double var_sodium_potassium_pump__i_NaK = mParameters[9] * var_sodium_potassium_pump__f_NaK * var_sodium_potassium_pump__i_NaK_max * mParameters[5] / ((1 + pow((var_sodium_potassium_pump__Km_Na_i / var_chaste_interface__intracellular_ion_concentrations__Na_i), 1.5)) * (var_sodium_potassium_pump__Km_K_o + mParameters[5])); // picoA + const double var_time_independent_potassium_current__E_K = var_membrane__R * var_membrane__T * log(mParameters[5] / var_chaste_interface__intracellular_ion_concentrations__K_i) / var_membrane__F; // millivolt + const double var_rapid_delayed_rectifier_K_current__i_Kr = (-var_time_independent_potassium_current__E_K + var_chaste_interface__membrane__V) * mParameters[9] * mParameters[14] * var_chaste_interface__rapid_delayed_rectifier_K_current_xr_gate__xr / (1 + exp(0.66964285714285721 + 0.044642857142857144 * var_chaste_interface__membrane__V)); // picoA + const double var_rapid_delayed_rectifier_K_current__i_Kr_converted = 9.9999999999999995e-7 * HeartConfig::Instance()->GetCapacitance() * var_rapid_delayed_rectifier_K_current__i_Kr / var_membrane__Cm_converted; // uA_per_cm2 + const double var_slow_delayed_rectifier_K_current__i_Ks = pow(var_chaste_interface__slow_delayed_rectifier_K_current_xs_gate__xs, 2) * (-var_time_independent_potassium_current__E_K + var_chaste_interface__membrane__V) * mParameters[9] * mParameters[15]; // picoA + const double var_slow_delayed_rectifier_K_current__i_Ks_converted = 9.9999999999999995e-7 * HeartConfig::Instance()->GetCapacitance() * var_slow_delayed_rectifier_K_current__i_Ks / var_membrane__Cm_converted; // uA_per_cm2 + const double var_time_independent_potassium_current__i_K1 = (-var_time_independent_potassium_current__E_K + var_chaste_interface__membrane__V) * mParameters[9] * mParameters[13] / (1 + exp(5.6000000000000005 + 0.070000000000000007 * var_chaste_interface__membrane__V)); // picoA + const double var_time_independent_potassium_current__i_K1_converted = 9.9999999999999995e-7 * HeartConfig::Instance()->GetCapacitance() * var_time_independent_potassium_current__i_K1 / var_membrane__Cm_converted; // uA_per_cm2 + const double var_transient_outward_K_current__i_to = pow(var_chaste_interface__transient_outward_K_current_oa_gate__oa, 3) * (-var_time_independent_potassium_current__E_K + var_chaste_interface__membrane__V) * mParameters[9] * mParameters[17] * var_chaste_interface__transient_outward_K_current_oi_gate__oi; // picoA + const double var_transient_outward_K_current__i_to_converted = 9.9999999999999995e-7 * HeartConfig::Instance()->GetCapacitance() * var_transient_outward_K_current__i_to / var_membrane__Cm_converted; // uA_per_cm2 + const double var_ultrarapid_delayed_rectifier_K_current__g_Kur = 0.0050000000000000001 + 0.050000000000000003 / (1 + exp(1.1538461538461537 - 0.076923076923076927 * var_chaste_interface__membrane__V)); // nanoS_per_picoF + const double var_ultrarapid_delayed_rectifier_K_current__i_Kur = pow(var_chaste_interface__ultrarapid_delayed_rectifier_K_current_ua_gate__ua, 3) * (-var_time_independent_potassium_current__E_K + var_chaste_interface__membrane__V) * mParameters[9] * var_ultrarapid_delayed_rectifier_K_current__g_Kur * var_chaste_interface__ultrarapid_delayed_rectifier_K_current_ui_gate__ui; // picoA + const double var_chaste_interface__i_ionic = ((var_L_type_Ca_channel__i_Ca_L_converted + var_Na_Ca_exchanger_current__i_NaCa_converted + var_fast_sodium_current__i_Na_converted + var_rapid_delayed_rectifier_K_current__i_Kr_converted + var_slow_delayed_rectifier_K_current__i_Ks_converted + var_time_independent_potassium_current__i_K1_converted + var_transient_outward_K_current__i_to_converted) * var_membrane__Cm_converted + 9.9999999999999995e-7 * HeartConfig::Instance()->GetCapacitance() * var_background_currents__i_B_Ca + 9.9999999999999995e-7 * HeartConfig::Instance()->GetCapacitance() * var_background_currents__i_B_Na + 9.9999999999999995e-7 * HeartConfig::Instance()->GetCapacitance() * var_sarcolemmal_calcium_pump_current__i_CaP + 9.9999999999999995e-7 * HeartConfig::Instance()->GetCapacitance() * var_sodium_potassium_pump__i_NaK + 9.9999999999999995e-7 * HeartConfig::Instance()->GetCapacitance() * var_ultrarapid_delayed_rectifier_K_current__i_Kur) / var_membrane__Cm_converted; // uA_per_cm2 + + const double i_ionic = var_chaste_interface__i_ionic; + EXCEPT_IF_NOT(!std::isnan(i_ionic)); + return i_ionic; + } + + void Dynamiccourtemanche_ramirez_nattel_1998FromCellMLBackwardEuler::ComputeResidual(double var_chaste_interface__environment__time, const double rCurrentGuess[8], double rResidual[8]) + { + std::vector& rY = rGetStateVariables(); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -81.18 + double var_chaste_interface__fast_sodium_current_m_gate__m = rY[2]; + // Units: dimensionless; Initial value: 0.002908 + double var_chaste_interface__fast_sodium_current_h_gate__h = rY[3]; + // Units: dimensionless; Initial value: 0.9649 + double var_chaste_interface__fast_sodium_current_j_gate__j = rY[4]; + // Units: dimensionless; Initial value: 0.9775 + double var_chaste_interface__transient_outward_K_current_oa_gate__oa = rY[5]; + // Units: dimensionless; Initial value: 0.03043 + double var_chaste_interface__transient_outward_K_current_oi_gate__oi = rY[6]; + // Units: dimensionless; Initial value: 0.9992 + double var_chaste_interface__ultrarapid_delayed_rectifier_K_current_ua_gate__ua = rY[7]; + // Units: dimensionless; Initial value: 0.004966 + double var_chaste_interface__ultrarapid_delayed_rectifier_K_current_ui_gate__ui = rY[8]; + // Units: dimensionless; Initial value: 0.9986 + double var_chaste_interface__rapid_delayed_rectifier_K_current_xr_gate__xr = rY[9]; + // Units: dimensionless; Initial value: 3.296e-05 + double var_chaste_interface__slow_delayed_rectifier_K_current_xs_gate__xs = rY[10]; + // Units: dimensionless; Initial value: 0.01869 + double var_chaste_interface__L_type_Ca_channel_d_gate__d = rY[11]; + // Units: dimensionless; Initial value: 0.0001367 + double var_chaste_interface__L_type_Ca_channel_f_gate__f = rY[12]; + // Units: dimensionless; Initial value: 0.9996 + double var_chaste_interface__Ca_release_current_from_JSR_w_gate__w = rY[16]; + // Units: dimensionless; Initial value: 0.9992 + + //output_nonlinear_state_assignments + double var_chaste_interface__Ca_release_current_from_JSR_u_gate__u = rCurrentGuess[0]; + double var_chaste_interface__Ca_release_current_from_JSR_v_gate__v = rCurrentGuess[1]; + double var_chaste_interface__L_type_Ca_channel_f_Ca_gate__f_Ca = rCurrentGuess[2]; + double var_chaste_interface__intracellular_ion_concentrations__Ca_i = rCurrentGuess[3]; + double var_chaste_interface__intracellular_ion_concentrations__Ca_rel = rCurrentGuess[4]; + double var_chaste_interface__intracellular_ion_concentrations__Ca_up = rCurrentGuess[5]; + double var_chaste_interface__intracellular_ion_concentrations__K_i = rCurrentGuess[6]; + double var_chaste_interface__intracellular_ion_concentrations__Na_i = rCurrentGuess[7]; + + //output_equations + const double var_Ca_buffers__CMDN_max = 0.050000000000000003; // millimolar + const double var_Ca_buffers__CSQN_max = 10; // millimolar + const double var_Ca_buffers__Km_CMDN = 0.0023800000000000002; // millimolar + const double var_Ca_buffers__Km_CSQN = 0.80000000000000004; // millimolar + const double var_Ca_buffers__Km_TRPN = 0.00050000000000000001; // millimolar + const double var_Ca_buffers__TRPN_max = 0.070000000000000007; // millimolar + const double var_Ca_leak_current_by_the_NSR__Ca_up_max = 15; // millimolar + const double var_Ca_release_current_from_JSR_u_gate__tau_u = 8; // millisecond + const double var_Ca_uptake_current_by_the_NSR__K_up = 0.00092000000000000003; // millimolar + const double var_Na_Ca_exchanger_current__K_mCa = 1.3799999999999999; // millimolar + const double var_Na_Ca_exchanger_current__K_mNa = 87.5; // millimolar + const double var_Na_Ca_exchanger_current__K_sat = 0.10000000000000001; // dimensionless + const double var_Na_Ca_exchanger_current__gamma = 0.34999999999999998; // dimensionless + const double var_background_currents__g_B_Ca = 0.0011310000000000001; // nanoS_per_picoF + const double var_background_currents__g_B_K = 0; // nanoS_per_picoF + const double var_background_currents__g_B_Na = 0.00067443750000000002; // nanoS_per_picoF + const double var_Ca_uptake_current_by_the_NSR__i_up = mParameters[2] / (1 + var_Ca_uptake_current_by_the_NSR__K_up / var_chaste_interface__intracellular_ion_concentrations__Ca_i); // millimolar_per_millisecond + const double var_L_type_Ca_channel_f_Ca_gate__f_Ca_infinity = 1 / (1 + 2857.1428571428573 * var_chaste_interface__intracellular_ion_concentrations__Ca_i); // dimensionless + const double d_dt_chaste_interface_var_L_type_Ca_channel_f_Ca_gate__f_Ca = (-var_chaste_interface__L_type_Ca_channel_f_Ca_gate__f_Ca + var_L_type_Ca_channel_f_Ca_gate__f_Ca_infinity) / mParameters[8]; // 1 / millisecond + const double var_intracellular_ion_concentrations__B2 = 1 + var_Ca_buffers__CMDN_max * var_Ca_buffers__Km_CMDN / pow((var_Ca_buffers__Km_CMDN + var_chaste_interface__intracellular_ion_concentrations__Ca_i), 2) + var_Ca_buffers__Km_TRPN * var_Ca_buffers__TRPN_max / pow((var_Ca_buffers__Km_TRPN + var_chaste_interface__intracellular_ion_concentrations__Ca_i), 2); // dimensionless + const double var_Ca_release_current_from_JSR__i_rel = pow(var_chaste_interface__Ca_release_current_from_JSR_u_gate__u, 2) * (-var_chaste_interface__intracellular_ion_concentrations__Ca_i + var_chaste_interface__intracellular_ion_concentrations__Ca_rel) * mParameters[1] * var_chaste_interface__Ca_release_current_from_JSR_v_gate__v * var_chaste_interface__Ca_release_current_from_JSR_w_gate__w; // millimolar_per_millisecond + const double var_Ca_leak_current_by_the_NSR__i_up_leak = mParameters[0] * mParameters[2] * var_chaste_interface__intracellular_ion_concentrations__Ca_up / var_Ca_leak_current_by_the_NSR__Ca_up_max; // millimolar_per_millisecond + const double var_intracellular_ion_concentrations__V_cell = 20100; // micrometre_3 + const double var_intracellular_ion_concentrations__V_i = 0.68000000000000005 * var_intracellular_ion_concentrations__V_cell; // micrometre_3 + const double var_intracellular_ion_concentrations__V_rel = 0.0047999999999999996 * var_intracellular_ion_concentrations__V_cell; // micrometre_3 + const double var_intracellular_ion_concentrations__V_up = 0.055199999999999999 * var_intracellular_ion_concentrations__V_cell; // micrometre_3 + const double var_membrane__F = 96.486699999999999; // coulomb_per_millimole + const double var_membrane__R = 8.3142999999999994; // joule_per_mole_kelvin + const double var_membrane__T = 310; // kelvin + const double var_L_type_Ca_channel__i_Ca_L = (-65 + var_chaste_interface__membrane__V) * mParameters[7] * var_chaste_interface__L_type_Ca_channel_d_gate__d * var_chaste_interface__L_type_Ca_channel_f_Ca_gate__f_Ca * var_chaste_interface__L_type_Ca_channel_f_gate__f * mParameters[9]; // picoA + const double var_sarcolemmal_calcium_pump_current__i_CaP_max = 0.27500000000000002; // picoA_per_picoF + const double var_sarcolemmal_calcium_pump_current__i_CaP = var_chaste_interface__intracellular_ion_concentrations__Ca_i * mParameters[9] * var_sarcolemmal_calcium_pump_current__i_CaP_max / (0.00050000000000000001 + var_chaste_interface__intracellular_ion_concentrations__Ca_i); // picoA + const double var_sodium_potassium_pump__Km_K_o = 1.5; // millimolar + const double var_sodium_potassium_pump__Km_Na_i = 10; // millimolar + const double var_sodium_potassium_pump__i_NaK_max = 0.59933873999999998; // picoA_per_picoF + const double var_background_currents__E_Ca = 0.5 * var_membrane__R * var_membrane__T * log(mParameters[4] / var_chaste_interface__intracellular_ion_concentrations__Ca_i) / var_membrane__F; // millivolt + const double var_background_currents__i_B_Ca = (-var_background_currents__E_Ca + var_chaste_interface__membrane__V) * var_background_currents__g_B_Ca * mParameters[9]; // picoA + const double var_Na_Ca_exchanger_current__i_NaCa = (pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, 3) * mParameters[4] * exp(var_Na_Ca_exchanger_current__gamma * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T)) - pow(mParameters[6], 3) * var_chaste_interface__intracellular_ion_concentrations__Ca_i * exp((-1 + var_Na_Ca_exchanger_current__gamma) * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * mParameters[16] * mParameters[9] / ((1 + var_Na_Ca_exchanger_current__K_sat * exp((-1 + var_Na_Ca_exchanger_current__gamma) * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * (pow(var_Na_Ca_exchanger_current__K_mNa, 3) + pow(mParameters[6], 3)) * (var_Na_Ca_exchanger_current__K_mCa + mParameters[4])); // picoA + const double var_Ca_release_current_from_JSR__Fn = 9.9999999999999998e-13 * var_Ca_release_current_from_JSR__i_rel * var_intracellular_ion_concentrations__V_rel - 4.9999999999999999e-13 * (0.5 * var_L_type_Ca_channel__i_Ca_L - 0.20000000000000001 * var_Na_Ca_exchanger_current__i_NaCa) / var_membrane__F; // dimensionless + const double var_Ca_release_current_from_JSR_u_gate__u_infinity = 1 / (1 + exp(250 - 731528895391368.0 * var_Ca_release_current_from_JSR__Fn)); // dimensionless + const double var_Ca_release_current_from_JSR_v_gate__tau_v = 1.9099999999999999 + 2.0899999999999999 / (1 + exp(250 - 731528895391368.0 * var_Ca_release_current_from_JSR__Fn)); // millisecond + const double var_Ca_release_current_from_JSR_v_gate__v_infinity = 1 - 1 / (1 + exp(50 - 731528895391368.0 * var_Ca_release_current_from_JSR__Fn)); // dimensionless + const double d_dt_chaste_interface_var_Ca_release_current_from_JSR_u_gate__u = (-var_chaste_interface__Ca_release_current_from_JSR_u_gate__u + var_Ca_release_current_from_JSR_u_gate__u_infinity) / var_Ca_release_current_from_JSR_u_gate__tau_u; // 1 / millisecond + const double d_dt_chaste_interface_var_Ca_release_current_from_JSR_v_gate__v = (-var_chaste_interface__Ca_release_current_from_JSR_v_gate__v + var_Ca_release_current_from_JSR_v_gate__v_infinity) / var_Ca_release_current_from_JSR_v_gate__tau_v; // 1 / millisecond + const double var_fast_sodium_current__E_Na = var_membrane__R * var_membrane__T * log(mParameters[6] / var_chaste_interface__intracellular_ion_concentrations__Na_i) / var_membrane__F; // millivolt + const double var_background_currents__i_B_Na = (-var_fast_sodium_current__E_Na + var_chaste_interface__membrane__V) * var_background_currents__g_B_Na * mParameters[9]; // picoA + const double var_fast_sodium_current__i_Na = pow(var_chaste_interface__fast_sodium_current_m_gate__m, 3) * (-var_fast_sodium_current__E_Na + var_chaste_interface__membrane__V) * mParameters[10] * var_chaste_interface__fast_sodium_current_h_gate__h * var_chaste_interface__fast_sodium_current_j_gate__j * mParameters[9]; // picoA + const double var_intracellular_ion_concentrations__B1 = ((-var_Ca_uptake_current_by_the_NSR__i_up + var_Ca_leak_current_by_the_NSR__i_up_leak) * var_intracellular_ion_concentrations__V_up + var_Ca_release_current_from_JSR__i_rel * var_intracellular_ion_concentrations__V_rel) / var_intracellular_ion_concentrations__V_i + 0.5 * (-var_L_type_Ca_channel__i_Ca_L - var_background_currents__i_B_Ca - var_sarcolemmal_calcium_pump_current__i_CaP + 2 * var_Na_Ca_exchanger_current__i_NaCa) / (var_intracellular_ion_concentrations__V_i * var_membrane__F); // millimolar_per_millisecond + const double d_dt_chaste_interface_var_intracellular_ion_concentrations__Ca_i = var_intracellular_ion_concentrations__B1 / var_intracellular_ion_concentrations__B2; // millimolar / millisecond + const double var_sodium_potassium_pump__sigma = -0.14285714285714285 + 0.14285714285714285 * exp(0.01485884101040119 * mParameters[6]); // dimensionless + const double var_sodium_potassium_pump__f_NaK = 1 / (1 + 0.1245 * exp(-0.10000000000000001 * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T)) + 0.036499999999999998 * var_sodium_potassium_pump__sigma * exp(-var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))); // dimensionless + const double var_sodium_potassium_pump__i_NaK = mParameters[9] * var_sodium_potassium_pump__f_NaK * var_sodium_potassium_pump__i_NaK_max * mParameters[5] / ((1 + pow((var_sodium_potassium_pump__Km_Na_i / var_chaste_interface__intracellular_ion_concentrations__Na_i), 1.5)) * (var_sodium_potassium_pump__Km_K_o + mParameters[5])); // picoA + const double d_dt_chaste_interface_var_intracellular_ion_concentrations__Na_i = (-var_background_currents__i_B_Na - var_fast_sodium_current__i_Na - 3 * var_Na_Ca_exchanger_current__i_NaCa - 3 * var_sodium_potassium_pump__i_NaK) * mParameters[3] / (var_intracellular_ion_concentrations__V_i * var_membrane__F); // millimolar / millisecond + const double var_time_independent_potassium_current__E_K = var_membrane__R * var_membrane__T * log(mParameters[5] / var_chaste_interface__intracellular_ion_concentrations__K_i) / var_membrane__F; // millivolt + const double var_background_currents__i_B_K = (-var_time_independent_potassium_current__E_K + var_chaste_interface__membrane__V) * var_background_currents__g_B_K * mParameters[9]; // picoA + const double var_rapid_delayed_rectifier_K_current__i_Kr = (-var_time_independent_potassium_current__E_K + var_chaste_interface__membrane__V) * mParameters[9] * mParameters[14] * var_chaste_interface__rapid_delayed_rectifier_K_current_xr_gate__xr / (1 + exp(0.66964285714285721 + 0.044642857142857144 * var_chaste_interface__membrane__V)); // picoA + const double var_slow_delayed_rectifier_K_current__i_Ks = pow(var_chaste_interface__slow_delayed_rectifier_K_current_xs_gate__xs, 2) * (-var_time_independent_potassium_current__E_K + var_chaste_interface__membrane__V) * mParameters[9] * mParameters[15]; // picoA + const double var_time_independent_potassium_current__i_K1 = (-var_time_independent_potassium_current__E_K + var_chaste_interface__membrane__V) * mParameters[9] * mParameters[13] / (1 + exp(5.6000000000000005 + 0.070000000000000007 * var_chaste_interface__membrane__V)); // picoA + const double var_transfer_current_from_NSR_to_JSR__tau_tr = 180; // millisecond + const double var_transfer_current_from_NSR_to_JSR__i_tr = (-var_chaste_interface__intracellular_ion_concentrations__Ca_rel + var_chaste_interface__intracellular_ion_concentrations__Ca_up) / var_transfer_current_from_NSR_to_JSR__tau_tr; // millimolar_per_millisecond + const double d_dt_chaste_interface_var_intracellular_ion_concentrations__Ca_rel = (-var_Ca_release_current_from_JSR__i_rel + var_transfer_current_from_NSR_to_JSR__i_tr) / (1 + var_Ca_buffers__CSQN_max * var_Ca_buffers__Km_CSQN / pow((var_Ca_buffers__Km_CSQN + var_chaste_interface__intracellular_ion_concentrations__Ca_rel), 2)); // millimolar / millisecond + const double d_dt_chaste_interface_var_intracellular_ion_concentrations__Ca_up = -var_Ca_leak_current_by_the_NSR__i_up_leak - var_intracellular_ion_concentrations__V_rel * var_transfer_current_from_NSR_to_JSR__i_tr / var_intracellular_ion_concentrations__V_up + var_Ca_uptake_current_by_the_NSR__i_up; // millimolar / millisecond + const double var_transient_outward_K_current__i_to = pow(var_chaste_interface__transient_outward_K_current_oa_gate__oa, 3) * (-var_time_independent_potassium_current__E_K + var_chaste_interface__membrane__V) * mParameters[9] * mParameters[17] * var_chaste_interface__transient_outward_K_current_oi_gate__oi; // picoA + const double var_ultrarapid_delayed_rectifier_K_current__g_Kur = 0.0050000000000000001 + 0.050000000000000003 / (1 + exp(1.1538461538461537 - 0.076923076923076927 * var_chaste_interface__membrane__V)); // nanoS_per_picoF + const double var_ultrarapid_delayed_rectifier_K_current__i_Kur = pow(var_chaste_interface__ultrarapid_delayed_rectifier_K_current_ua_gate__ua, 3) * (-var_time_independent_potassium_current__E_K + var_chaste_interface__membrane__V) * mParameters[9] * var_ultrarapid_delayed_rectifier_K_current__g_Kur * var_chaste_interface__ultrarapid_delayed_rectifier_K_current_ui_gate__ui; // picoA + const double d_dt_chaste_interface_var_intracellular_ion_concentrations__K_i = (-var_background_currents__i_B_K - var_rapid_delayed_rectifier_K_current__i_Kr - var_slow_delayed_rectifier_K_current__i_Ks - var_time_independent_potassium_current__i_K1 - var_transient_outward_K_current__i_to - var_ultrarapid_delayed_rectifier_K_current__i_Kur + 2 * var_sodium_potassium_pump__i_NaK) * mParameters[3] / (var_intracellular_ion_concentrations__V_i * var_membrane__F); // millimolar / millisecond + + rResidual[3] = rCurrentGuess[3] - rY[1] - mDt*d_dt_chaste_interface_var_intracellular_ion_concentrations__Ca_i; + rResidual[2] = rCurrentGuess[2] - rY[13] - mDt*d_dt_chaste_interface_var_L_type_Ca_channel_f_Ca_gate__f_Ca; + rResidual[0] = rCurrentGuess[0] - rY[14] - mDt*d_dt_chaste_interface_var_Ca_release_current_from_JSR_u_gate__u; + rResidual[1] = rCurrentGuess[1] - rY[15] - mDt*d_dt_chaste_interface_var_Ca_release_current_from_JSR_v_gate__v; + rResidual[7] = rCurrentGuess[7] - rY[17] - mDt*d_dt_chaste_interface_var_intracellular_ion_concentrations__Na_i; + rResidual[6] = rCurrentGuess[6] - rY[18] - mDt*d_dt_chaste_interface_var_intracellular_ion_concentrations__K_i; + rResidual[4] = rCurrentGuess[4] - rY[19] - mDt*d_dt_chaste_interface_var_intracellular_ion_concentrations__Ca_rel; + rResidual[5] = rCurrentGuess[5] - rY[20] - mDt*d_dt_chaste_interface_var_intracellular_ion_concentrations__Ca_up; + } + + void Dynamiccourtemanche_ramirez_nattel_1998FromCellMLBackwardEuler::ComputeJacobian(double var_chaste_interface__environment__time, const double rCurrentGuess[8], double rJacobian[8][8]) + { + std::vector& rY = rGetStateVariables(); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -81.18 + double var_chaste_interface__fast_sodium_current_m_gate__m = rY[2]; + // Units: dimensionless; Initial value: 0.002908 + double var_chaste_interface__fast_sodium_current_h_gate__h = rY[3]; + // Units: dimensionless; Initial value: 0.9649 + double var_chaste_interface__fast_sodium_current_j_gate__j = rY[4]; + // Units: dimensionless; Initial value: 0.9775 + double var_chaste_interface__transient_outward_K_current_oa_gate__oa = rY[5]; + // Units: dimensionless; Initial value: 0.03043 + double var_chaste_interface__transient_outward_K_current_oi_gate__oi = rY[6]; + // Units: dimensionless; Initial value: 0.9992 + double var_chaste_interface__ultrarapid_delayed_rectifier_K_current_ua_gate__ua = rY[7]; + // Units: dimensionless; Initial value: 0.004966 + double var_chaste_interface__ultrarapid_delayed_rectifier_K_current_ui_gate__ui = rY[8]; + // Units: dimensionless; Initial value: 0.9986 + double var_chaste_interface__rapid_delayed_rectifier_K_current_xr_gate__xr = rY[9]; + // Units: dimensionless; Initial value: 3.296e-05 + double var_chaste_interface__slow_delayed_rectifier_K_current_xs_gate__xs = rY[10]; + // Units: dimensionless; Initial value: 0.01869 + double var_chaste_interface__L_type_Ca_channel_d_gate__d = rY[11]; + // Units: dimensionless; Initial value: 0.0001367 + double var_chaste_interface__L_type_Ca_channel_f_gate__f = rY[12]; + // Units: dimensionless; Initial value: 0.9996 + double var_chaste_interface__Ca_release_current_from_JSR_w_gate__w = rY[16]; + // Units: dimensionless; Initial value: 0.9992 + + double var_chaste_interface__Ca_release_current_from_JSR_u_gate__u = rCurrentGuess[0]; + double var_chaste_interface__Ca_release_current_from_JSR_v_gate__v = rCurrentGuess[1]; + double var_chaste_interface__L_type_Ca_channel_f_Ca_gate__f_Ca = rCurrentGuess[2]; + double var_chaste_interface__intracellular_ion_concentrations__Ca_i = rCurrentGuess[3]; + double var_chaste_interface__intracellular_ion_concentrations__Ca_rel = rCurrentGuess[4]; + double var_chaste_interface__intracellular_ion_concentrations__Ca_up = rCurrentGuess[5]; + double var_chaste_interface__intracellular_ion_concentrations__K_i = rCurrentGuess[6]; + double var_chaste_interface__intracellular_ion_concentrations__Na_i = rCurrentGuess[7]; + + const double var_x0 = -var_chaste_interface__intracellular_ion_concentrations__Ca_i + var_chaste_interface__intracellular_ion_concentrations__Ca_rel; + const double var_x1 = pow(var_chaste_interface__Ca_release_current_from_JSR_u_gate__u, 2); + const double var_x2 = var_x1 * mParameters[1] * var_chaste_interface__Ca_release_current_from_JSR_w_gate__w; + const double var_x3 = var_x2 * var_chaste_interface__Ca_release_current_from_JSR_v_gate__v; + const double var_x4 = 70577.907827359188 * var_x3; + const double var_x5 = exp(-0.024332874996168673 * var_chaste_interface__membrane__V); + const double var_x6 = pow(mParameters[6], 3); + const double var_x7 = var_x5 * var_x6; + const double var_x8 = exp(0.013102317305629283 * var_chaste_interface__membrane__V); + const double var_x9 = -var_x7 * var_chaste_interface__intracellular_ion_concentrations__Ca_i + var_x8 * pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, 3) * mParameters[4]; + const double var_x10 = 1 / (1 + 0.10000000000000001 * var_x5); + const double var_x11 = 1 / (669921.875 + var_x6); + const double var_x12 = 1 / (1.3799999999999999 + mParameters[4]); + const double var_x13 = var_x10 * var_x11 * var_x12 * mParameters[16]; + const double var_x14 = var_x13 * mParameters[9]; + const double var_x15 = -65 + var_chaste_interface__membrane__V; + const double var_x16 = var_x0 * var_x4 + 0.75816552477322585 * var_x14 * var_x9 - 1.8954138119330646 * var_x15 * mParameters[7] * var_chaste_interface__L_type_Ca_channel_d_gate__d * var_chaste_interface__L_type_Ca_channel_f_Ca_gate__f_Ca * var_chaste_interface__L_type_Ca_channel_f_gate__f * mParameters[9]; + const double var_x17 = exp(250 - var_x16); + const double var_x18 = 1 + var_x17; + const double var_x19 = var_x17 / pow(var_x18, 2); + const double var_x20 = var_x0 * mParameters[1] * var_chaste_interface__Ca_release_current_from_JSR_u_gate__u * var_chaste_interface__Ca_release_current_from_JSR_v_gate__v * var_chaste_interface__Ca_release_current_from_JSR_w_gate__w; + const double var_x21 = var_x19 * var_x20; + const double var_x22 = var_x0 * var_x2; + const double var_x23 = 8822.2384784198985 * var_x19; + const double var_x24 = mParameters[7] * var_chaste_interface__L_type_Ca_channel_d_gate__d * var_chaste_interface__L_type_Ca_channel_f_gate__f; + const double var_x25 = var_x24 * mParameters[9]; + const double var_x26 = var_x25 * (-123.20189777564919 + 1.8954138119330646 * var_chaste_interface__membrane__V); + const double var_x27 = var_x19 * var_x26; + const double var_x28 = var_x14 * var_x7; + const double var_x29 = var_x4 + 0.75816552477322585 * var_x28; + const double var_x30 = var_x19 * var_x29; + const double var_x31 = var_x8 * pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, 2) * mParameters[4]; + const double var_x32 = var_x14 * var_x31; + const double var_x33 = 1 / var_x18; + const double var_x34 = 1 / (1.9099999999999999 + 2.0899999999999999 * var_x33); + const double var_x35 = exp(50 - var_x16); + const double var_x36 = 1 + var_x35; + const double var_x37 = var_x35 / pow(var_x36, 2); + const double var_x38 = var_x34 * var_x37; + const double var_x39 = (1 - 1 / var_x36 - var_chaste_interface__Ca_release_current_from_JSR_v_gate__v) / pow((0.9138755980861244 + var_x33), 2); + const double var_x40 = var_x19 * var_x39; + const double var_x41 = 33769.333888688605 * var_x40; + const double var_x42 = 0.47846889952153115 * var_x39; + const double var_x43 = 1 / mParameters[8]; + const double var_x44 = 0.0023800000000000002 + var_chaste_interface__intracellular_ion_concentrations__Ca_i; + const double var_x45 = 0.00050000000000000001 + var_chaste_interface__intracellular_ion_concentrations__Ca_i; + const double var_x46 = pow(var_x45, (-2)); + const double var_x47 = 1 + 0.00011900000000000002 / pow(var_x44, 2) + 3.5000000000000004e-5 * var_x46; + const double var_x48 = 1 / var_x47; + const double var_x49 = var_x48 * mParameters[9]; + const double var_x50 = 1 / var_chaste_interface__intracellular_ion_concentrations__Ca_i; + const double var_x51 = 1.0426301393780176e-7 * mParameters[9] / var_x45; + const double var_x52 = 1 + 0.00092000000000000003 * var_x50; + const double var_x53 = mParameters[2] / (pow(var_x52, 2) * pow(var_chaste_interface__intracellular_ion_concentrations__Ca_i, 2)); + const double var_x54 = 0.0070588235294117632 * var_x3; + const double var_x55 = mParameters[0] * mParameters[2]; + const double var_x56 = 0.80000000000000004 + var_chaste_interface__intracellular_ion_concentrations__Ca_rel; + const double var_x57 = pow(var_x56, (-2)); + const double var_x58 = 1 / (1 + 8 * var_x57); + const double var_x59 = 2.0255711761517402e-5 * mParameters[9] / var_chaste_interface__intracellular_ion_concentrations__K_i; + const double var_x60 = 1 / var_chaste_interface__intracellular_ion_concentrations__Na_i; + const double var_x61 = pow(var_x60, 1.5); + const double var_x62 = var_x60 * mParameters[9]; + const double var_x63 = var_x61 * var_x62 * mParameters[5] / ((1.5 + mParameters[5]) * pow((0.031622776601683791 + var_x61), 2) * (1 + 0.1245 * exp(-0.0037435192301797956 * var_chaste_interface__membrane__V) + 0.036499999999999998 * (-0.14285714285714285 + 0.14285714285714285 * exp(0.01485884101040119 * mParameters[6])) * exp(-0.037435192301797954 * var_chaste_interface__membrane__V))); + + + rJacobian[0][0] = 1.0 - (mDt * (-0.125 + 17644.476956839797 * var_x21)); + rJacobian[0][1] = -(mDt * (var_x22 * var_x23)); + rJacobian[0][2] = -(mDt * (-0.125 * var_x27)); + rJacobian[0][3] = -(mDt * (-0.125 * var_x30)); + rJacobian[0][4] = -(mDt * (var_x23 * var_x3)); + rJacobian[0][5] = 0.0; + rJacobian[0][6] = 0.0; + rJacobian[0][7] = -(mDt * (0.28431207178995971 * var_x19 * var_x32)); + rJacobian[1][0] = -(mDt * (-141155.81565471838 * var_x20 * var_x38 - 67538.66777737721 * var_x21 * var_x39)); + rJacobian[1][1] = 1.0 - (mDt * (var_x34 * (-1 - 70577.907827359188 * var_x22 * var_x37) - var_x22 * var_x41)); + rJacobian[1][2] = -(mDt * (var_x26 * var_x38 + var_x27 * var_x42)); + rJacobian[1][3] = -(mDt * (var_x29 * var_x38 + var_x30 * var_x42)); + rJacobian[1][4] = -(mDt * (-var_x3 * var_x41 - var_x38 * var_x4)); + rJacobian[1][5] = 0.0; + rJacobian[1][6] = 0.0; + rJacobian[1][7] = -(mDt * (-1.0882758728802286 * var_x32 * var_x40 - 2.2744965743196777 * var_x32 * var_x38)); + rJacobian[2][0] = 0.0; + rJacobian[2][1] = 0.0; + rJacobian[2][2] = 1.0 - (mDt * (-var_x43)); + rJacobian[2][3] = -(mDt * (-0.00035 * var_x43 / pow((0.00035 + var_chaste_interface__intracellular_ion_concentrations__Ca_i), 2))); + rJacobian[2][4] = 0.0; + rJacobian[2][5] = 0.0; + rJacobian[2][6] = 0.0; + rJacobian[2][7] = 0.0; + rJacobian[3][0] = -(mDt * (0.014117647058823526 * var_x20 * var_x48)); + rJacobian[3][1] = -(mDt * (0.0070588235294117632 * var_x22 * var_x48)); + rJacobian[3][2] = -(mDt * (var_x24 * var_x49 * (2.4643985112571321e-5 - 3.7913823250109726e-7 * var_chaste_interface__membrane__V))); + rJacobian[3][3] = 1.0 - (mDt * (var_x48 * (-var_x51 - var_x54 - 7.4682352941176462e-5 * var_x53 - 7.5827646500219453e-7 * var_x28 - 5.7273025005690459e-9 * var_x50 * mParameters[9] + 1.0426301393780176e-7 * var_x46 * var_chaste_interface__intracellular_ion_concentrations__Ca_i * mParameters[9]) + (0.00023800000000000004 / pow(var_x44, 3) + 7.0000000000000007e-5 / pow(var_x45, 3)) * (-var_x51 * var_chaste_interface__intracellular_ion_concentrations__Ca_i - 0.081176470588235281 * mParameters[2] / var_x52 - 4.2880534095874102e-10 * (-13.356415961992688 * log(var_x50 * mParameters[4]) + var_chaste_interface__membrane__V) * mParameters[9] + 0.0054117647058823529 * mParameters[0] * mParameters[2] * var_chaste_interface__intracellular_ion_concentrations__Ca_up - 3.7913823250109726e-7 * var_x15 * var_x25 * var_chaste_interface__L_type_Ca_channel_f_Ca_gate__f_Ca + 0.0070588235294117632 * var_x0 * var_x1 * mParameters[1] * var_chaste_interface__Ca_release_current_from_JSR_v_gate__v * var_chaste_interface__Ca_release_current_from_JSR_w_gate__w + 7.5827646500219453e-7 * var_x10 * var_x11 * var_x12 * var_x9 * mParameters[16] * mParameters[9]) / pow(var_x47, 2))); + rJacobian[3][4] = -(mDt * (var_x48 * var_x54)); + rJacobian[3][5] = -(mDt * (0.0054117647058823529 * var_x48 * var_x55)); + rJacobian[3][6] = 0.0; + rJacobian[3][7] = -(mDt * (2.2748293950065834e-6 * var_x13 * var_x31 * var_x49)); + rJacobian[4][0] = -(mDt * (-2 * var_x20 * var_x58)); + rJacobian[4][1] = -(mDt * (-var_x22 * var_x58)); + rJacobian[4][2] = 0.0; + rJacobian[4][3] = -(mDt * (var_x3 * var_x58)); + rJacobian[4][4] = 1.0 - (mDt * (var_x58 * (-0.0055555555555555558 - var_x3) + 0.25 * (0.0055555555555555558 * var_chaste_interface__intracellular_ion_concentrations__Ca_up - 0.0055555555555555558 * var_chaste_interface__intracellular_ion_concentrations__Ca_rel - var_x0 * var_x3) / (pow(var_x56, 3) * pow((0.125 + var_x57), 2)))); + rJacobian[4][5] = -(mDt * (0.0055555555555555558 * var_x58)); + rJacobian[4][6] = 0.0; + rJacobian[4][7] = 0.0; + rJacobian[5][0] = 0.0; + rJacobian[5][1] = 0.0; + rJacobian[5][2] = 0.0; + rJacobian[5][3] = -(mDt * (0.00092000000000000003 * var_x53)); + rJacobian[5][4] = -(mDt * (0.00048309178743961351)); + rJacobian[5][5] = 1.0 - (mDt * (-0.00048309178743961351 - 0.066666666666666666 * var_x55)); + rJacobian[5][6] = 0.0; + rJacobian[5][7] = 0.0; + rJacobian[6][0] = 0.0; + rJacobian[6][1] = 0.0; + rJacobian[6][2] = 0.0; + rJacobian[6][3] = 0.0; + rJacobian[6][4] = 0.0; + rJacobian[6][5] = 0.0; + rJacobian[6][6] = 1.0 - (mDt * ((-var_x59 * mParameters[13] / (1 + exp(5.6000000000000005 + 0.070000000000000007 * var_chaste_interface__membrane__V)) - var_x59 * pow(var_chaste_interface__slow_delayed_rectifier_K_current_xs_gate__xs, 2) * mParameters[15] - var_x59 * mParameters[14] * var_chaste_interface__rapid_delayed_rectifier_K_current_xr_gate__xr / (1 + exp(0.66964285714285721 + 0.044642857142857144 * var_chaste_interface__membrane__V)) - var_x59 * pow(var_chaste_interface__transient_outward_K_current_oa_gate__oa, 3) * mParameters[17] * var_chaste_interface__transient_outward_K_current_oi_gate__oi - var_x59 * pow(var_chaste_interface__ultrarapid_delayed_rectifier_K_current_ua_gate__ua, 3) * (0.0050000000000000001 + 0.050000000000000003 / (1 + exp(1.1538461538461537 - 0.076923076923076927 * var_chaste_interface__membrane__V))) * var_chaste_interface__ultrarapid_delayed_rectifier_K_current_ui_gate__ui) * mParameters[3])); + rJacobian[6][7] = -(mDt * (4.3114284380885533e-8 * var_x63 * mParameters[3])); + rJacobian[7][0] = 0.0; + rJacobian[7][1] = 0.0; + rJacobian[7][2] = 0.0; + rJacobian[7][3] = -(mDt * (2.2748293950065834e-6 * var_x28 * mParameters[3])); + rJacobian[7][4] = 0.0; + rJacobian[7][5] = 0.0; + rJacobian[7][6] = 0.0; + rJacobian[7][7] = 1.0 - (mDt * ((-6.4671426571328296e-8 * var_x63 - 6.8244881850197506e-6 * var_x32 - 1.3661211601158392e-8 * var_x62 - 2.0255711761517402e-5 * var_x62 * pow(var_chaste_interface__fast_sodium_current_m_gate__m, 3) * mParameters[10] * var_chaste_interface__fast_sodium_current_h_gate__h * var_chaste_interface__fast_sodium_current_j_gate__j) * mParameters[3])); + } + + void Dynamiccourtemanche_ramirez_nattel_1998FromCellMLBackwardEuler::UpdateTransmembranePotential(double var_chaste_interface__environment__time) + { + // Time units: millisecond + std::vector& rY = rGetStateVariables(); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -81.18 + double var_chaste_interface__intracellular_ion_concentrations__Ca_i = rY[1]; + // Units: millimolar; Initial value: 0.0001013 + double var_chaste_interface__fast_sodium_current_m_gate__m = rY[2]; + // Units: dimensionless; Initial value: 0.002908 + double var_chaste_interface__fast_sodium_current_h_gate__h = rY[3]; + // Units: dimensionless; Initial value: 0.9649 + double var_chaste_interface__fast_sodium_current_j_gate__j = rY[4]; + // Units: dimensionless; Initial value: 0.9775 + double var_chaste_interface__transient_outward_K_current_oa_gate__oa = rY[5]; + // Units: dimensionless; Initial value: 0.03043 + double var_chaste_interface__transient_outward_K_current_oi_gate__oi = rY[6]; + // Units: dimensionless; Initial value: 0.9992 + double var_chaste_interface__ultrarapid_delayed_rectifier_K_current_ua_gate__ua = rY[7]; + // Units: dimensionless; Initial value: 0.004966 + double var_chaste_interface__ultrarapid_delayed_rectifier_K_current_ui_gate__ui = rY[8]; + // Units: dimensionless; Initial value: 0.9986 + double var_chaste_interface__rapid_delayed_rectifier_K_current_xr_gate__xr = rY[9]; + // Units: dimensionless; Initial value: 3.296e-05 + double var_chaste_interface__slow_delayed_rectifier_K_current_xs_gate__xs = rY[10]; + // Units: dimensionless; Initial value: 0.01869 + double var_chaste_interface__L_type_Ca_channel_d_gate__d = rY[11]; + // Units: dimensionless; Initial value: 0.0001367 + double var_chaste_interface__L_type_Ca_channel_f_gate__f = rY[12]; + // Units: dimensionless; Initial value: 0.9996 + double var_chaste_interface__L_type_Ca_channel_f_Ca_gate__f_Ca = rY[13]; + // Units: dimensionless; Initial value: 0.7755 + double var_chaste_interface__intracellular_ion_concentrations__Na_i = rY[17]; + // Units: millimolar; Initial value: 11.17 + double var_chaste_interface__intracellular_ion_concentrations__K_i = rY[18]; + // Units: millimolar; Initial value: 139.0 + + const double var_Na_Ca_exchanger_current__K_mCa = 1.3799999999999999; // millimolar + const double var_Na_Ca_exchanger_current__K_mNa = 87.5; // millimolar + const double var_Na_Ca_exchanger_current__K_sat = 0.10000000000000001; // dimensionless + const double var_Na_Ca_exchanger_current__gamma = 0.34999999999999998; // dimensionless + const double var_background_currents__g_B_Ca = 0.0011310000000000001; // nanoS_per_picoF + const double var_background_currents__g_B_Na = 0.00067443750000000002; // nanoS_per_picoF + const double var_membrane__Cm_converted = 9.9999999999999995e-7 * mParameters[9]; // uF + const double var_membrane__F = 96.486699999999999; // coulomb_per_millimole + const double var_membrane__R = 8.3142999999999994; // joule_per_mole_kelvin + const double var_membrane__T = 310; // kelvin + const double var_L_type_Ca_channel__i_Ca_L = (-65 + var_chaste_interface__membrane__V) * mParameters[7] * var_chaste_interface__L_type_Ca_channel_d_gate__d * var_chaste_interface__L_type_Ca_channel_f_Ca_gate__f_Ca * var_chaste_interface__L_type_Ca_channel_f_gate__f * mParameters[9]; // picoA + const double var_membrane__i_st_converted = GetIntracellularAreaStimulus(var_chaste_interface__environment__time); // uA_per_cm2 + const double var_membrane__i_st = 1000000 * var_membrane__Cm_converted * var_membrane__i_st_converted / HeartConfig::Instance()->GetCapacitance(); // picoA + const double var_sarcolemmal_calcium_pump_current__i_CaP_max = 0.27500000000000002; // picoA_per_picoF + const double var_sarcolemmal_calcium_pump_current__i_CaP = var_chaste_interface__intracellular_ion_concentrations__Ca_i * mParameters[9] * var_sarcolemmal_calcium_pump_current__i_CaP_max / (0.00050000000000000001 + var_chaste_interface__intracellular_ion_concentrations__Ca_i); // picoA + const double var_sodium_potassium_pump__Km_K_o = 1.5; // millimolar + const double var_sodium_potassium_pump__Km_Na_i = 10; // millimolar + const double var_sodium_potassium_pump__i_NaK_max = 0.59933873999999998; // picoA_per_picoF + const double var_background_currents__E_Ca = 0.5 * var_membrane__R * var_membrane__T * log(mParameters[4] / var_chaste_interface__intracellular_ion_concentrations__Ca_i) / var_membrane__F; // millivolt + const double var_background_currents__i_B_Ca = (-var_background_currents__E_Ca + var_chaste_interface__membrane__V) * var_background_currents__g_B_Ca * mParameters[9]; // picoA + const double var_Na_Ca_exchanger_current__i_NaCa = (pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, 3) * mParameters[4] * exp(var_Na_Ca_exchanger_current__gamma * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T)) - pow(mParameters[6], 3) * var_chaste_interface__intracellular_ion_concentrations__Ca_i * exp((-1 + var_Na_Ca_exchanger_current__gamma) * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * mParameters[16] * mParameters[9] / ((1 + var_Na_Ca_exchanger_current__K_sat * exp((-1 + var_Na_Ca_exchanger_current__gamma) * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * (pow(var_Na_Ca_exchanger_current__K_mNa, 3) + pow(mParameters[6], 3)) * (var_Na_Ca_exchanger_current__K_mCa + mParameters[4])); // picoA + const double var_fast_sodium_current__E_Na = var_membrane__R * var_membrane__T * log(mParameters[6] / var_chaste_interface__intracellular_ion_concentrations__Na_i) / var_membrane__F; // millivolt + const double var_background_currents__i_B_Na = (-var_fast_sodium_current__E_Na + var_chaste_interface__membrane__V) * var_background_currents__g_B_Na * mParameters[9]; // picoA + const double var_fast_sodium_current__i_Na = pow(var_chaste_interface__fast_sodium_current_m_gate__m, 3) * (-var_fast_sodium_current__E_Na + var_chaste_interface__membrane__V) * mParameters[10] * var_chaste_interface__fast_sodium_current_h_gate__h * var_chaste_interface__fast_sodium_current_j_gate__j * mParameters[9]; // picoA + const double var_sodium_potassium_pump__sigma = -0.14285714285714285 + 0.14285714285714285 * exp(0.01485884101040119 * mParameters[6]); // dimensionless + const double var_sodium_potassium_pump__f_NaK = 1 / (1 + 0.1245 * exp(-0.10000000000000001 * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T)) + 0.036499999999999998 * var_sodium_potassium_pump__sigma * exp(-var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))); // dimensionless + const double var_sodium_potassium_pump__i_NaK = mParameters[9] * var_sodium_potassium_pump__f_NaK * var_sodium_potassium_pump__i_NaK_max * mParameters[5] / ((1 + pow((var_sodium_potassium_pump__Km_Na_i / var_chaste_interface__intracellular_ion_concentrations__Na_i), 1.5)) * (var_sodium_potassium_pump__Km_K_o + mParameters[5])); // picoA + const double var_time_independent_potassium_current__E_K = var_membrane__R * var_membrane__T * log(mParameters[5] / var_chaste_interface__intracellular_ion_concentrations__K_i) / var_membrane__F; // millivolt + const double var_rapid_delayed_rectifier_K_current__i_Kr = (-var_time_independent_potassium_current__E_K + var_chaste_interface__membrane__V) * mParameters[9] * mParameters[14] * var_chaste_interface__rapid_delayed_rectifier_K_current_xr_gate__xr / (1 + exp(0.66964285714285721 + 0.044642857142857144 * var_chaste_interface__membrane__V)); // picoA + const double var_slow_delayed_rectifier_K_current__i_Ks = pow(var_chaste_interface__slow_delayed_rectifier_K_current_xs_gate__xs, 2) * (-var_time_independent_potassium_current__E_K + var_chaste_interface__membrane__V) * mParameters[9] * mParameters[15]; // picoA + const double var_time_independent_potassium_current__i_K1 = (-var_time_independent_potassium_current__E_K + var_chaste_interface__membrane__V) * mParameters[9] * mParameters[13] / (1 + exp(5.6000000000000005 + 0.070000000000000007 * var_chaste_interface__membrane__V)); // picoA + const double var_transient_outward_K_current__i_to = pow(var_chaste_interface__transient_outward_K_current_oa_gate__oa, 3) * (-var_time_independent_potassium_current__E_K + var_chaste_interface__membrane__V) * mParameters[9] * mParameters[17] * var_chaste_interface__transient_outward_K_current_oi_gate__oi; // picoA + const double var_ultrarapid_delayed_rectifier_K_current__g_Kur = 0.0050000000000000001 + 0.050000000000000003 / (1 + exp(1.1538461538461537 - 0.076923076923076927 * var_chaste_interface__membrane__V)); // nanoS_per_picoF + const double var_ultrarapid_delayed_rectifier_K_current__i_Kur = pow(var_chaste_interface__ultrarapid_delayed_rectifier_K_current_ua_gate__ua, 3) * (-var_time_independent_potassium_current__E_K + var_chaste_interface__membrane__V) * mParameters[9] * var_ultrarapid_delayed_rectifier_K_current__g_Kur * var_chaste_interface__ultrarapid_delayed_rectifier_K_current_ui_gate__ui; // picoA + const double d_dt_chaste_interface_var_membrane__V = (-var_L_type_Ca_channel__i_Ca_L - var_Na_Ca_exchanger_current__i_NaCa - var_background_currents__i_B_Ca - var_background_currents__i_B_Na - var_fast_sodium_current__i_Na - var_membrane__i_st - var_rapid_delayed_rectifier_K_current__i_Kr - var_sarcolemmal_calcium_pump_current__i_CaP - var_slow_delayed_rectifier_K_current__i_Ks - var_sodium_potassium_pump__i_NaK - var_time_independent_potassium_current__i_K1 - var_transient_outward_K_current__i_to - var_ultrarapid_delayed_rectifier_K_current__i_Kur) / mParameters[9]; // millivolt / millisecond + + rY[0] += mDt*d_dt_chaste_interface_var_membrane__V; + } + + void Dynamiccourtemanche_ramirez_nattel_1998FromCellMLBackwardEuler::ComputeOneStepExceptVoltage(double var_chaste_interface__environment__time) + { + // Time units: millisecond + std::vector& rY = rGetStateVariables(); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -81.18 + double var_chaste_interface__fast_sodium_current_m_gate__m = rY[2]; + // Units: dimensionless; Initial value: 0.002908 + double var_chaste_interface__fast_sodium_current_h_gate__h = rY[3]; + // Units: dimensionless; Initial value: 0.9649 + double var_chaste_interface__fast_sodium_current_j_gate__j = rY[4]; + // Units: dimensionless; Initial value: 0.9775 + double var_chaste_interface__transient_outward_K_current_oa_gate__oa = rY[5]; + // Units: dimensionless; Initial value: 0.03043 + double var_chaste_interface__transient_outward_K_current_oi_gate__oi = rY[6]; + // Units: dimensionless; Initial value: 0.9992 + double var_chaste_interface__ultrarapid_delayed_rectifier_K_current_ua_gate__ua = rY[7]; + // Units: dimensionless; Initial value: 0.004966 + double var_chaste_interface__ultrarapid_delayed_rectifier_K_current_ui_gate__ui = rY[8]; + // Units: dimensionless; Initial value: 0.9986 + double var_chaste_interface__rapid_delayed_rectifier_K_current_xr_gate__xr = rY[9]; + // Units: dimensionless; Initial value: 3.296e-05 + double var_chaste_interface__slow_delayed_rectifier_K_current_xs_gate__xs = rY[10]; + // Units: dimensionless; Initial value: 0.01869 + double var_chaste_interface__L_type_Ca_channel_d_gate__d = rY[11]; + // Units: dimensionless; Initial value: 0.0001367 + double var_chaste_interface__L_type_Ca_channel_f_gate__f = rY[12]; + // Units: dimensionless; Initial value: 0.9996 + double var_chaste_interface__Ca_release_current_from_JSR_w_gate__w = rY[16]; + // Units: dimensionless; Initial value: 0.9992 + + const double var_Ca_release_current_from_JSR_w_gate__tau_w = ((fabs(-7.9000000000000004 + var_chaste_interface__membrane__V) < 1.0e-10) ? (0.92307692307692313) : (6 * (1 - exp(1.5800000000000001 - 0.20000000000000001 * var_chaste_interface__membrane__V)) / ((1 + 0.29999999999999999 * exp(1.5800000000000001 - 0.20000000000000001 * var_chaste_interface__membrane__V)) * (-7.9000000000000004 + var_chaste_interface__membrane__V)))); + const double var_Ca_release_current_from_JSR_w_gate__w_infinity = 1 - 1 / (1 + exp(2.3529411764705883 - 0.058823529411764705 * var_chaste_interface__membrane__V)); + const double var_L_type_Ca_channel_d_gate__d_infinity = 1 / (1 + exp(-1.25 - 0.125 * var_chaste_interface__membrane__V)); + const double var_L_type_Ca_channel_d_gate__tau_d = ((fabs(10 + var_chaste_interface__membrane__V) < 1.0e-10) ? (4.5789999999999997 / (1 + exp(-1.6025641025641024 - 0.16025641025641024 * var_chaste_interface__membrane__V))) : (28.571428571428569 * (1 - exp(-1.6025641025641024 - 0.16025641025641024 * var_chaste_interface__membrane__V)) / ((1 + exp(-1.6025641025641024 - 0.16025641025641024 * var_chaste_interface__membrane__V)) * (10 + var_chaste_interface__membrane__V)))); + const double var_L_type_Ca_channel_f_gate__f_infinity = exp(-4.057971014492753 - 0.14492753623188406 * var_chaste_interface__membrane__V) / (1 + exp(-4.057971014492753 - 0.14492753623188406 * var_chaste_interface__membrane__V)); + const double var_L_type_Ca_channel_f_gate__tau_f = 9 / (0.02 + 0.019699999999999999 * exp(-0.113569 * pow((1 + 0.10000000000000001 * var_chaste_interface__membrane__V), 2))); + const double var_fast_sodium_current_h_gate__alpha_h = ((var_chaste_interface__membrane__V < -40) ? (0.13500000000000001 * exp(-11.764705882352942 + 0.14705882352941177 * mParameters[12] - 0.14705882352941177 * var_chaste_interface__membrane__V)) : (0)); + const double var_fast_sodium_current_h_gate__beta_h = ((var_chaste_interface__membrane__V < -40) ? (310000 * exp(0.34999999999999998 * var_chaste_interface__membrane__V - 0.34999999999999998 * mParameters[12]) + 3.5600000000000001 * exp(0.079000000000000001 * var_chaste_interface__membrane__V - 0.079000000000000001 * mParameters[12])) : (7.6923076923076916 / (1 + exp(-0.96036036036036043 + 0.0900900900900901 * mParameters[12] - 0.0900900900900901 * var_chaste_interface__membrane__V)))); + const double var_fast_sodium_current_h_gate__h_inf = 0.01 * mParameters[11] + (1 - 0.01 * mParameters[11]) * var_fast_sodium_current_h_gate__alpha_h / (var_fast_sodium_current_h_gate__alpha_h + var_fast_sodium_current_h_gate__beta_h); + const double var_fast_sodium_current_h_gate__tau_h = 1 / (var_fast_sodium_current_h_gate__alpha_h + var_fast_sodium_current_h_gate__beta_h); + const double var_fast_sodium_current_j_gate__alpha_j = ((var_chaste_interface__membrane__V < -40) ? ((37.780000000000001 + var_chaste_interface__membrane__V) * (-127140 * exp(0.24440000000000001 * var_chaste_interface__membrane__V - 0.24440000000000001 * mParameters[12]) - 3.4740000000000003e-5 * exp(0.043909999999999998 * mParameters[12] - 0.043909999999999998 * var_chaste_interface__membrane__V)) / (1 + exp(24.640530000000002 + 0.311 * var_chaste_interface__membrane__V - 0.311 * mParameters[12]))) : (0)); + const double var_fast_sodium_current_j_gate__beta_j = ((var_chaste_interface__membrane__V < -40) ? (0.1212 * exp(0.01052 * mParameters[12] - 0.01052 * var_chaste_interface__membrane__V) / (1 + exp(-5.5312920000000005 + 0.13780000000000001 * mParameters[12] - 0.13780000000000001 * var_chaste_interface__membrane__V))) : (0.29999999999999999 * exp(2.5349999999999999e-7 * mParameters[12] - 2.5349999999999999e-7 * var_chaste_interface__membrane__V) / (1 + exp(-3.2000000000000002 + 0.10000000000000001 * mParameters[12] - 0.10000000000000001 * var_chaste_interface__membrane__V)))); + const double var_fast_sodium_current_j_gate__j_inf = 0.01 * mParameters[11] + (1 - 0.01 * mParameters[11]) * var_fast_sodium_current_j_gate__alpha_j / (var_fast_sodium_current_j_gate__alpha_j + var_fast_sodium_current_j_gate__beta_j); + const double var_fast_sodium_current_j_gate__tau_j = 1 / (var_fast_sodium_current_j_gate__alpha_j + var_fast_sodium_current_j_gate__beta_j); + const double var_fast_sodium_current_m_gate__alpha_m = ((var_chaste_interface__membrane__V == (-47.130000000000003)) ? (3.2000000000000002) : (0.32000000000000001 * (47.130000000000003 + var_chaste_interface__membrane__V) / (1 - exp(-4.7130000000000001 - 0.10000000000000001 * var_chaste_interface__membrane__V)))); + const double var_fast_sodium_current_m_gate__beta_m = 0.080000000000000002 * exp(-0.090909090909090912 * var_chaste_interface__membrane__V); + const double var_fast_sodium_current_m_gate__m_inf = var_fast_sodium_current_m_gate__alpha_m / (var_fast_sodium_current_m_gate__alpha_m + var_fast_sodium_current_m_gate__beta_m); + const double var_fast_sodium_current_m_gate__tau_m = 1 / (var_fast_sodium_current_m_gate__alpha_m + var_fast_sodium_current_m_gate__beta_m); + const double var_rapid_delayed_rectifier_K_current_xr_gate__alpha_xr = ((fabs(14.1 + var_chaste_interface__membrane__V) < 1.0e-10) ? (0.0015) : (0.00029999999999999997 * (14.1 + var_chaste_interface__membrane__V) / (1 - exp(-2.8199999999999998 - 0.20000000000000001 * var_chaste_interface__membrane__V)))); + const double var_rapid_delayed_rectifier_K_current_xr_gate__beta_xr = ((fabs(-3.3328000000000002 + var_chaste_interface__membrane__V) < 1.0e-10) ? (0.00037836118) : (7.3898000000000003e-5 * (-3.3328000000000002 + var_chaste_interface__membrane__V) / (-1 + exp(-0.65046743564221166 + 0.19517145812596365 * var_chaste_interface__membrane__V)))); + const double var_rapid_delayed_rectifier_K_current_xr_gate__tau_xr = 1 / (var_rapid_delayed_rectifier_K_current_xr_gate__alpha_xr + var_rapid_delayed_rectifier_K_current_xr_gate__beta_xr); + const double var_rapid_delayed_rectifier_K_current_xr_gate__xr_infinity = 1 / (1 + exp(-2.1692307692307691 - 0.15384615384615385 * var_chaste_interface__membrane__V)); + const double var_slow_delayed_rectifier_K_current_xs_gate__alpha_xs = ((fabs(-19.899999999999999 + var_chaste_interface__membrane__V) < 1.0e-10) ? (0.00068000000000000005) : (4.0000000000000003e-5 * (-19.899999999999999 + var_chaste_interface__membrane__V) / (1 - exp(1.1705882352941175 - 0.058823529411764705 * var_chaste_interface__membrane__V)))); + const double var_slow_delayed_rectifier_K_current_xs_gate__beta_xs = ((fabs(-19.899999999999999 + var_chaste_interface__membrane__V) < 1.0e-10) ? (0.00031500000000000001) : (3.4999999999999997e-5 * (-19.899999999999999 + var_chaste_interface__membrane__V) / (-1 + exp(-2.2111111111111108 + 0.1111111111111111 * var_chaste_interface__membrane__V)))); + const double var_slow_delayed_rectifier_K_current_xs_gate__tau_xs = 0.5 / (var_slow_delayed_rectifier_K_current_xs_gate__alpha_xs + var_slow_delayed_rectifier_K_current_xs_gate__beta_xs); + const double var_slow_delayed_rectifier_K_current_xs_gate__xs_infinity = pow((1 + exp(1.5669291338582676 - 0.07874015748031496 * var_chaste_interface__membrane__V)), (-0.5)); + const double var_transient_outward_K_current__K_Q10 = 3; + const double var_transient_outward_K_current_oa_gate__alpha_oa = 0.65000000000000002 / (exp(0.50847457627118642 - 0.016949152542372881 * var_chaste_interface__membrane__V) + exp(-1.1764705882352942 - 0.11764705882352941 * var_chaste_interface__membrane__V)); + const double var_transient_outward_K_current_oa_gate__beta_oa = 0.65000000000000002 / (2.5 + exp(4.8235294117647056 + 0.058823529411764705 * var_chaste_interface__membrane__V)); + const double var_transient_outward_K_current_oa_gate__oa_infinity = 1 / (1 + exp(-1.1670467502850628 - 0.057012542759407071 * var_chaste_interface__membrane__V)); + const double var_transient_outward_K_current_oa_gate__tau_oa = 1 / ((var_transient_outward_K_current_oa_gate__alpha_oa + var_transient_outward_K_current_oa_gate__beta_oa) * var_transient_outward_K_current__K_Q10); + const double var_transient_outward_K_current_oi_gate__alpha_oi = 1 / (18.530000000000001 + exp(10.383561643835618 + 0.091324200913242018 * var_chaste_interface__membrane__V)); + const double var_transient_outward_K_current_oi_gate__beta_oi = 1 / (35.560000000000002 + exp(-0.16935483870967738 - 0.13440860215053763 * var_chaste_interface__membrane__V)); + const double var_transient_outward_K_current_oi_gate__oi_infinity = 1 / (1 + exp(8.1320754716981138 + 0.18867924528301888 * var_chaste_interface__membrane__V)); + const double var_transient_outward_K_current_oi_gate__tau_oi = 1 / ((var_transient_outward_K_current_oi_gate__alpha_oi + var_transient_outward_K_current_oi_gate__beta_oi) * var_transient_outward_K_current__K_Q10); + const double var_ultrarapid_delayed_rectifier_K_current_ua_gate__alpha_ua = 0.65000000000000002 / (exp(0.50847457627118642 - 0.016949152542372881 * var_chaste_interface__membrane__V) + exp(-1.1764705882352942 - 0.11764705882352941 * var_chaste_interface__membrane__V)); + const double var_ultrarapid_delayed_rectifier_K_current_ua_gate__beta_ua = 0.65000000000000002 / (2.5 + exp(4.8235294117647056 + 0.058823529411764705 * var_chaste_interface__membrane__V)); + const double var_ultrarapid_delayed_rectifier_K_current_ua_gate__tau_ua = 1 / ((var_ultrarapid_delayed_rectifier_K_current_ua_gate__alpha_ua + var_ultrarapid_delayed_rectifier_K_current_ua_gate__beta_ua) * var_transient_outward_K_current__K_Q10); + const double var_ultrarapid_delayed_rectifier_K_current_ua_gate__ua_infinity = 1 / (1 + exp(-3.15625 - 0.10416666666666667 * var_chaste_interface__membrane__V)); + const double var_ultrarapid_delayed_rectifier_K_current_ui_gate__alpha_ui = 1 / (21 + exp(6.6071428571428568 - 0.035714285714285712 * var_chaste_interface__membrane__V)); + const double var_ultrarapid_delayed_rectifier_K_current_ui_gate__beta_ui = 1 / exp(9.875 - 0.0625 * var_chaste_interface__membrane__V); + const double var_ultrarapid_delayed_rectifier_K_current_ui_gate__tau_ui = 1 / ((var_ultrarapid_delayed_rectifier_K_current_ui_gate__alpha_ui + var_ultrarapid_delayed_rectifier_K_current_ui_gate__beta_ui) * var_transient_outward_K_current__K_Q10); + const double var_ultrarapid_delayed_rectifier_K_current_ui_gate__ui_infinity = 1 / (1 + exp(-3.6189956331877728 + 0.036390101892285295 * var_chaste_interface__membrane__V)); + + + rY[16] = (var_chaste_interface__Ca_release_current_from_JSR_w_gate__w + ((var_Ca_release_current_from_JSR_w_gate__w_infinity / var_Ca_release_current_from_JSR_w_gate__tau_w) * mDt)) / (1.0 - ((-1 / var_Ca_release_current_from_JSR_w_gate__tau_w) * mDt)); + rY[11] = (var_chaste_interface__L_type_Ca_channel_d_gate__d + ((var_L_type_Ca_channel_d_gate__d_infinity / var_L_type_Ca_channel_d_gate__tau_d) * mDt)) / (1.0 - ((-1 / var_L_type_Ca_channel_d_gate__tau_d) * mDt)); + rY[12] = (var_chaste_interface__L_type_Ca_channel_f_gate__f + ((var_L_type_Ca_channel_f_gate__f_infinity / var_L_type_Ca_channel_f_gate__tau_f) * mDt)) / (1.0 - ((-1 / var_L_type_Ca_channel_f_gate__tau_f) * mDt)); + rY[3] = (var_chaste_interface__fast_sodium_current_h_gate__h + ((var_fast_sodium_current_h_gate__h_inf / var_fast_sodium_current_h_gate__tau_h) * mDt)) / (1.0 - ((-1 / var_fast_sodium_current_h_gate__tau_h) * mDt)); + rY[4] = (var_chaste_interface__fast_sodium_current_j_gate__j + ((var_fast_sodium_current_j_gate__j_inf / var_fast_sodium_current_j_gate__tau_j) * mDt)) / (1.0 - ((-1 / var_fast_sodium_current_j_gate__tau_j) * mDt)); + rY[2] = (var_chaste_interface__fast_sodium_current_m_gate__m + ((var_fast_sodium_current_m_gate__m_inf / var_fast_sodium_current_m_gate__tau_m) * mDt)) / (1.0 - ((-1 / var_fast_sodium_current_m_gate__tau_m) * mDt)); + rY[9] = (var_chaste_interface__rapid_delayed_rectifier_K_current_xr_gate__xr + ((var_rapid_delayed_rectifier_K_current_xr_gate__xr_infinity / var_rapid_delayed_rectifier_K_current_xr_gate__tau_xr) * mDt)) / (1.0 - ((-1 / var_rapid_delayed_rectifier_K_current_xr_gate__tau_xr) * mDt)); + rY[10] = (var_chaste_interface__slow_delayed_rectifier_K_current_xs_gate__xs + ((var_slow_delayed_rectifier_K_current_xs_gate__xs_infinity / var_slow_delayed_rectifier_K_current_xs_gate__tau_xs) * mDt)) / (1.0 - ((-1 / var_slow_delayed_rectifier_K_current_xs_gate__tau_xs) * mDt)); + rY[5] = (var_chaste_interface__transient_outward_K_current_oa_gate__oa + ((var_transient_outward_K_current_oa_gate__oa_infinity / var_transient_outward_K_current_oa_gate__tau_oa) * mDt)) / (1.0 - ((-1 / var_transient_outward_K_current_oa_gate__tau_oa) * mDt)); + rY[6] = (var_chaste_interface__transient_outward_K_current_oi_gate__oi + ((var_transient_outward_K_current_oi_gate__oi_infinity / var_transient_outward_K_current_oi_gate__tau_oi) * mDt)) / (1.0 - ((-1 / var_transient_outward_K_current_oi_gate__tau_oi) * mDt)); + rY[7] = (var_chaste_interface__ultrarapid_delayed_rectifier_K_current_ua_gate__ua + ((var_ultrarapid_delayed_rectifier_K_current_ua_gate__ua_infinity / var_ultrarapid_delayed_rectifier_K_current_ua_gate__tau_ua) * mDt)) / (1.0 - ((-1 / var_ultrarapid_delayed_rectifier_K_current_ua_gate__tau_ua) * mDt)); + rY[8] = (var_chaste_interface__ultrarapid_delayed_rectifier_K_current_ui_gate__ui + ((var_ultrarapid_delayed_rectifier_K_current_ui_gate__ui_infinity / var_ultrarapid_delayed_rectifier_K_current_ui_gate__tau_ui) * mDt)) / (1.0 - ((-1 / var_ultrarapid_delayed_rectifier_K_current_ui_gate__tau_ui) * mDt)); + + double _guess[8] = {rY[14],rY[15],rY[13],rY[1],rY[19],rY[20],rY[18],rY[17]}; + CardiacNewtonSolver<8,Dynamiccourtemanche_ramirez_nattel_1998FromCellMLBackwardEuler>* _p_solver = CardiacNewtonSolver<8,Dynamiccourtemanche_ramirez_nattel_1998FromCellMLBackwardEuler>::Instance(); + _p_solver->Solve(*this, var_chaste_interface__environment__time, _guess); + rY[14] = _guess[0]; + rY[15] = _guess[1]; + rY[13] = _guess[2]; + rY[1] = _guess[3]; + rY[19] = _guess[4]; + rY[20] = _guess[5]; + rY[18] = _guess[6]; + rY[17] = _guess[7]; + } + + std::vector Dynamiccourtemanche_ramirez_nattel_1998FromCellMLBackwardEuler::ComputeDerivedQuantities(double var_chaste_interface__environment__time, const std::vector & rY) + { + // Inputs: + // Time units: millisecond + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -81.18 + double var_chaste_interface__intracellular_ion_concentrations__Ca_i = rY[1]; + // Units: millimolar; Initial value: 0.0001013 + double var_chaste_interface__fast_sodium_current_m_gate__m = rY[2]; + // Units: dimensionless; Initial value: 0.002908 + double var_chaste_interface__fast_sodium_current_h_gate__h = rY[3]; + // Units: dimensionless; Initial value: 0.9649 + double var_chaste_interface__fast_sodium_current_j_gate__j = rY[4]; + // Units: dimensionless; Initial value: 0.9775 + double var_chaste_interface__transient_outward_K_current_oa_gate__oa = rY[5]; + // Units: dimensionless; Initial value: 0.03043 + double var_chaste_interface__transient_outward_K_current_oi_gate__oi = rY[6]; + // Units: dimensionless; Initial value: 0.9992 + double var_chaste_interface__rapid_delayed_rectifier_K_current_xr_gate__xr = rY[9]; + // Units: dimensionless; Initial value: 3.296e-05 + double var_chaste_interface__slow_delayed_rectifier_K_current_xs_gate__xs = rY[10]; + // Units: dimensionless; Initial value: 0.01869 + double var_chaste_interface__L_type_Ca_channel_d_gate__d = rY[11]; + // Units: dimensionless; Initial value: 0.0001367 + double var_chaste_interface__L_type_Ca_channel_f_gate__f = rY[12]; + // Units: dimensionless; Initial value: 0.9996 + double var_chaste_interface__L_type_Ca_channel_f_Ca_gate__f_Ca = rY[13]; + // Units: dimensionless; Initial value: 0.7755 + double var_chaste_interface__Ca_release_current_from_JSR_u_gate__u = rY[14]; + // Units: dimensionless; Initial value: 2.35e-112 + double var_chaste_interface__Ca_release_current_from_JSR_v_gate__v = rY[15]; + // Units: dimensionless; Initial value: 1.0 + double var_chaste_interface__Ca_release_current_from_JSR_w_gate__w = rY[16]; + // Units: dimensionless; Initial value: 0.9992 + double var_chaste_interface__intracellular_ion_concentrations__Na_i = rY[17]; + // Units: millimolar; Initial value: 11.17 + double var_chaste_interface__intracellular_ion_concentrations__K_i = rY[18]; + // Units: millimolar; Initial value: 139.0 + double var_chaste_interface__intracellular_ion_concentrations__Ca_rel = rY[19]; + // Units: millimolar; Initial value: 1.488 + + // Mathematics + const double var_Na_Ca_exchanger_current__K_mCa = 1.3799999999999999; // millimolar + const double var_Na_Ca_exchanger_current__K_mNa = 87.5; // millimolar + const double var_Na_Ca_exchanger_current__K_sat = 0.10000000000000001; // dimensionless + const double var_Na_Ca_exchanger_current__gamma = 0.34999999999999998; // dimensionless + const double var_Ca_release_current_from_JSR__i_rel = pow(var_chaste_interface__Ca_release_current_from_JSR_u_gate__u, 2) * (-var_chaste_interface__intracellular_ion_concentrations__Ca_i + var_chaste_interface__intracellular_ion_concentrations__Ca_rel) * mParameters[1] * var_chaste_interface__Ca_release_current_from_JSR_v_gate__v * var_chaste_interface__Ca_release_current_from_JSR_w_gate__w; // millimolar_per_millisecond + const double var_membrane__Cm_converted = 9.9999999999999995e-7 * mParameters[9]; // uF + const double var_membrane__F = 96.486699999999999; // coulomb_per_millimole + const double var_membrane__R = 8.3142999999999994; // joule_per_mole_kelvin + const double var_membrane__T = 310; // kelvin + const double var_L_type_Ca_channel__i_Ca_L = (-65 + var_chaste_interface__membrane__V) * mParameters[7] * var_chaste_interface__L_type_Ca_channel_d_gate__d * var_chaste_interface__L_type_Ca_channel_f_Ca_gate__f_Ca * var_chaste_interface__L_type_Ca_channel_f_gate__f * mParameters[9]; // picoA + const double var_L_type_Ca_channel__i_Ca_L_converted = 9.9999999999999995e-7 * HeartConfig::Instance()->GetCapacitance() * var_L_type_Ca_channel__i_Ca_L / var_membrane__Cm_converted; // uA_per_cm2 + const double var_L_type_Ca_channel_f_gate__tau_f = 9 / (0.02 + 0.019699999999999999 * exp(-0.113569 * pow((1 + 0.10000000000000001 * var_chaste_interface__membrane__V), 2))); // millisecond + const double var_fast_sodium_current_h_gate__alpha_h = ((var_chaste_interface__membrane__V < -40) ? (0.13500000000000001 * exp(-11.764705882352942 + 0.14705882352941177 * mParameters[12] - 0.14705882352941177 * var_chaste_interface__membrane__V)) : (0)); // per_millisecond + const double var_fast_sodium_current_h_gate__beta_h = ((var_chaste_interface__membrane__V < -40) ? (310000 * exp(0.34999999999999998 * var_chaste_interface__membrane__V - 0.34999999999999998 * mParameters[12]) + 3.5600000000000001 * exp(0.079000000000000001 * var_chaste_interface__membrane__V - 0.079000000000000001 * mParameters[12])) : (7.6923076923076916 / (1 + exp(-0.96036036036036043 + 0.0900900900900901 * mParameters[12] - 0.0900900900900901 * var_chaste_interface__membrane__V)))); // per_millisecond + const double var_fast_sodium_current_h_gate__tau_h = 1 / (var_fast_sodium_current_h_gate__alpha_h + var_fast_sodium_current_h_gate__beta_h); // millisecond + const double var_fast_sodium_current_j_gate__alpha_j = ((var_chaste_interface__membrane__V < -40) ? ((37.780000000000001 + var_chaste_interface__membrane__V) * (-127140 * exp(0.24440000000000001 * var_chaste_interface__membrane__V - 0.24440000000000001 * mParameters[12]) - 3.4740000000000003e-5 * exp(0.043909999999999998 * mParameters[12] - 0.043909999999999998 * var_chaste_interface__membrane__V)) / (1 + exp(24.640530000000002 + 0.311 * var_chaste_interface__membrane__V - 0.311 * mParameters[12]))) : (0)); // per_millisecond + const double var_fast_sodium_current_j_gate__beta_j = ((var_chaste_interface__membrane__V < -40) ? (0.1212 * exp(0.01052 * mParameters[12] - 0.01052 * var_chaste_interface__membrane__V) / (1 + exp(-5.5312920000000005 + 0.13780000000000001 * mParameters[12] - 0.13780000000000001 * var_chaste_interface__membrane__V))) : (0.29999999999999999 * exp(2.5349999999999999e-7 * mParameters[12] - 2.5349999999999999e-7 * var_chaste_interface__membrane__V) / (1 + exp(-3.2000000000000002 + 0.10000000000000001 * mParameters[12] - 0.10000000000000001 * var_chaste_interface__membrane__V)))); // per_millisecond + const double var_fast_sodium_current_j_gate__tau_j = 1 / (var_fast_sodium_current_j_gate__alpha_j + var_fast_sodium_current_j_gate__beta_j); // millisecond + const double var_membrane__i_st_converted = GetIntracellularAreaStimulus(var_chaste_interface__environment__time); // uA_per_cm2 + const double var_Na_Ca_exchanger_current__i_NaCa = (pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, 3) * mParameters[4] * exp(var_Na_Ca_exchanger_current__gamma * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T)) - pow(mParameters[6], 3) * var_chaste_interface__intracellular_ion_concentrations__Ca_i * exp((-1 + var_Na_Ca_exchanger_current__gamma) * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * mParameters[16] * mParameters[9] / ((1 + var_Na_Ca_exchanger_current__K_sat * exp((-1 + var_Na_Ca_exchanger_current__gamma) * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * (pow(var_Na_Ca_exchanger_current__K_mNa, 3) + pow(mParameters[6], 3)) * (var_Na_Ca_exchanger_current__K_mCa + mParameters[4])); // picoA + const double var_Na_Ca_exchanger_current__i_NaCa_converted = 9.9999999999999995e-7 * HeartConfig::Instance()->GetCapacitance() * var_Na_Ca_exchanger_current__i_NaCa / var_membrane__Cm_converted; // uA_per_cm2 + const double var_fast_sodium_current__E_Na = var_membrane__R * var_membrane__T * log(mParameters[6] / var_chaste_interface__intracellular_ion_concentrations__Na_i) / var_membrane__F; // millivolt + const double var_fast_sodium_current__i_Na = pow(var_chaste_interface__fast_sodium_current_m_gate__m, 3) * (-var_fast_sodium_current__E_Na + var_chaste_interface__membrane__V) * mParameters[10] * var_chaste_interface__fast_sodium_current_h_gate__h * var_chaste_interface__fast_sodium_current_j_gate__j * mParameters[9]; // picoA + const double var_fast_sodium_current__i_Na_converted = 9.9999999999999995e-7 * HeartConfig::Instance()->GetCapacitance() * var_fast_sodium_current__i_Na / var_membrane__Cm_converted; // uA_per_cm2 + const double var_time_independent_potassium_current__E_K = var_membrane__R * var_membrane__T * log(mParameters[5] / var_chaste_interface__intracellular_ion_concentrations__K_i) / var_membrane__F; // millivolt + const double var_rapid_delayed_rectifier_K_current__i_Kr = (-var_time_independent_potassium_current__E_K + var_chaste_interface__membrane__V) * mParameters[9] * mParameters[14] * var_chaste_interface__rapid_delayed_rectifier_K_current_xr_gate__xr / (1 + exp(0.66964285714285721 + 0.044642857142857144 * var_chaste_interface__membrane__V)); // picoA + const double var_rapid_delayed_rectifier_K_current__i_Kr_converted = 9.9999999999999995e-7 * HeartConfig::Instance()->GetCapacitance() * var_rapid_delayed_rectifier_K_current__i_Kr / var_membrane__Cm_converted; // uA_per_cm2 + const double var_slow_delayed_rectifier_K_current__i_Ks = pow(var_chaste_interface__slow_delayed_rectifier_K_current_xs_gate__xs, 2) * (-var_time_independent_potassium_current__E_K + var_chaste_interface__membrane__V) * mParameters[9] * mParameters[15]; // picoA + const double var_slow_delayed_rectifier_K_current__i_Ks_converted = 9.9999999999999995e-7 * HeartConfig::Instance()->GetCapacitance() * var_slow_delayed_rectifier_K_current__i_Ks / var_membrane__Cm_converted; // uA_per_cm2 + const double var_time_independent_potassium_current__i_K1 = (-var_time_independent_potassium_current__E_K + var_chaste_interface__membrane__V) * mParameters[9] * mParameters[13] / (1 + exp(5.6000000000000005 + 0.070000000000000007 * var_chaste_interface__membrane__V)); // picoA + const double var_time_independent_potassium_current__i_K1_converted = 9.9999999999999995e-7 * HeartConfig::Instance()->GetCapacitance() * var_time_independent_potassium_current__i_K1 / var_membrane__Cm_converted; // uA_per_cm2 + const double var_transient_outward_K_current__i_to = pow(var_chaste_interface__transient_outward_K_current_oa_gate__oa, 3) * (-var_time_independent_potassium_current__E_K + var_chaste_interface__membrane__V) * mParameters[9] * mParameters[17] * var_chaste_interface__transient_outward_K_current_oi_gate__oi; // picoA + const double var_transient_outward_K_current__i_to_converted = 9.9999999999999995e-7 * HeartConfig::Instance()->GetCapacitance() * var_transient_outward_K_current__i_to / var_membrane__Cm_converted; // uA_per_cm2 + + std::vector dqs(14); + dqs[0] = var_Ca_release_current_from_JSR__i_rel; + dqs[1] = var_L_type_Ca_channel__i_Ca_L_converted; + dqs[2] = var_L_type_Ca_channel_f_gate__tau_f; + dqs[3] = var_membrane__Cm_converted; + dqs[4] = var_fast_sodium_current__i_Na_converted; + dqs[5] = var_fast_sodium_current_h_gate__tau_h; + dqs[6] = var_fast_sodium_current_j_gate__tau_j; + dqs[7] = var_time_independent_potassium_current__i_K1_converted; + dqs[8] = var_rapid_delayed_rectifier_K_current__i_Kr_converted; + dqs[9] = var_slow_delayed_rectifier_K_current__i_Ks_converted; + dqs[10] = var_Na_Ca_exchanger_current__i_NaCa_converted; + dqs[11] = var_membrane__i_st_converted; + dqs[12] = var_transient_outward_K_current__i_to_converted; + dqs[13] = var_chaste_interface__environment__time; + return dqs; + } + +template<> +void OdeSystemInformation::Initialise(void) +{ + this->mSystemName = "courtemanche_1998"; + this->mFreeVariableName = "time"; + this->mFreeVariableUnits = "millisecond"; + + // rY[0]: + this->mVariableNames.push_back("membrane_voltage"); + this->mVariableUnits.push_back("millivolt"); + this->mInitialConditions.push_back(-81.18); + + // rY[1]: + this->mVariableNames.push_back("cytosolic_calcium_concentration"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(0.0001013); + + // rY[2]: + this->mVariableNames.push_back("membrane_fast_sodium_current_m_gate"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.002908); + + // rY[3]: + this->mVariableNames.push_back("membrane_fast_sodium_current_h_gate"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.9649); + + // rY[4]: + this->mVariableNames.push_back("membrane_fast_sodium_current_j_gate"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.9775); + + // rY[5]: + this->mVariableNames.push_back("transient_outward_K_current_oa_gate__oa"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.03043); + + // rY[6]: + this->mVariableNames.push_back("transient_outward_K_current_oi_gate__oi"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.9992); + + // rY[7]: + this->mVariableNames.push_back("ultrarapid_delayed_rectifier_K_current_ua_gate__ua"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.004966); + + // rY[8]: + this->mVariableNames.push_back("ultrarapid_delayed_rectifier_K_current_ui_gate__ui"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.9986); + + // rY[9]: + this->mVariableNames.push_back("rapid_delayed_rectifier_K_current_xr_gate__xr"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(3.296e-05); + + // rY[10]: + this->mVariableNames.push_back("slow_delayed_rectifier_K_current_xs_gate__xs"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.01869); + + // rY[11]: + this->mVariableNames.push_back("membrane_L_type_calcium_current_d_gate"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.0001367); + + // rY[12]: + this->mVariableNames.push_back("membrane_L_type_calcium_current_f_gate"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.9996); + + // rY[13]: + this->mVariableNames.push_back("membrane_L_type_calcium_current_fCa_gate"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.7755); + + // rY[14]: + this->mVariableNames.push_back("Ca_release_current_from_JSR_u_gate__u"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(2.35e-112); + + // rY[15]: + this->mVariableNames.push_back("Ca_release_current_from_JSR_v_gate__v"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(1.0); + + // rY[16]: + this->mVariableNames.push_back("Ca_release_current_from_JSR_w_gate__w"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.9992); + + // rY[17]: + this->mVariableNames.push_back("cytosolic_sodium_concentration"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(11.17); + + // rY[18]: + this->mVariableNames.push_back("cytosolic_potassium_concentration"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(139.0); + + // rY[19]: + this->mVariableNames.push_back("JSR_calcium_concentration"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(1.488); + + // rY[20]: + this->mVariableNames.push_back("intracellular_ion_concentrations__Ca_up"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(1.488); + + // mParameters[0]: + this->mParameterNames.push_back("SR_leak_current_max"); + this->mParameterUnits.push_back("dimensionless"); + + // mParameters[1]: + this->mParameterNames.push_back("SR_release_current_max"); + this->mParameterUnits.push_back("per_millisecond"); + + // mParameters[2]: + this->mParameterNames.push_back("SR_uptake_current_max"); + this->mParameterUnits.push_back("millimolar_per_millisecond"); + + // mParameters[3]: + this->mParameterNames.push_back("concentration_clamp_onoff"); + this->mParameterUnits.push_back("dimensionless"); + + // mParameters[4]: + this->mParameterNames.push_back("extracellular_calcium_concentration"); + this->mParameterUnits.push_back("millimolar"); + + // mParameters[5]: + this->mParameterNames.push_back("extracellular_potassium_concentration"); + this->mParameterUnits.push_back("millimolar"); + + // mParameters[6]: + this->mParameterNames.push_back("extracellular_sodium_concentration"); + this->mParameterUnits.push_back("millimolar"); + + // mParameters[7]: + this->mParameterNames.push_back("membrane_L_type_calcium_current_conductance"); + this->mParameterUnits.push_back("nanoS_per_picoF"); + + // mParameters[8]: + this->mParameterNames.push_back("membrane_L_type_calcium_current_fCa_gate_tau"); + this->mParameterUnits.push_back("millisecond"); + + // mParameters[9]: + this->mParameterNames.push_back("membrane__Cm"); + this->mParameterUnits.push_back("picoF"); + + // mParameters[10]: + this->mParameterNames.push_back("membrane_fast_sodium_current_conductance"); + this->mParameterUnits.push_back("nanoS_per_picoF"); + + // mParameters[11]: + this->mParameterNames.push_back("membrane_fast_sodium_current_reduced_inactivation"); + this->mParameterUnits.push_back("dimensionless"); + + // mParameters[12]: + this->mParameterNames.push_back("membrane_fast_sodium_current_shift_inactivation"); + this->mParameterUnits.push_back("millivolt"); + + // mParameters[13]: + this->mParameterNames.push_back("membrane_inward_rectifier_potassium_current_conductance"); + this->mParameterUnits.push_back("nanoS_per_picoF"); + + // mParameters[14]: + this->mParameterNames.push_back("membrane_rapid_delayed_rectifier_potassium_current_conductance"); + this->mParameterUnits.push_back("nanoS_per_picoF"); + + // mParameters[15]: + this->mParameterNames.push_back("membrane_slow_delayed_rectifier_potassium_current_conductance"); + this->mParameterUnits.push_back("nanoS_per_picoF"); + + // mParameters[16]: + this->mParameterNames.push_back("membrane_sodium_calcium_exchanger_current_conductance"); + this->mParameterUnits.push_back("picoA_per_picoF"); + + // mParameters[17]: + this->mParameterNames.push_back("membrane_transient_outward_current_conductance"); + this->mParameterUnits.push_back("nanoS_per_picoF"); + + // Derived Quantity index [0]: + this->mDerivedQuantityNames.push_back("SR_release_current"); + this->mDerivedQuantityUnits.push_back("millimolar_per_millisecond"); + + // Derived Quantity index [1]: + this->mDerivedQuantityNames.push_back("membrane_L_type_calcium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [2]: + this->mDerivedQuantityNames.push_back("membrane_L_type_calcium_current_f_gate_tau"); + this->mDerivedQuantityUnits.push_back("millisecond"); + + // Derived Quantity index [3]: + this->mDerivedQuantityNames.push_back("membrane_capacitance"); + this->mDerivedQuantityUnits.push_back("uF"); + + // Derived Quantity index [4]: + this->mDerivedQuantityNames.push_back("membrane_fast_sodium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [5]: + this->mDerivedQuantityNames.push_back("membrane_fast_sodium_current_h_gate_tau"); + this->mDerivedQuantityUnits.push_back("millisecond"); + + // Derived Quantity index [6]: + this->mDerivedQuantityNames.push_back("membrane_fast_sodium_current_j_gate_tau"); + this->mDerivedQuantityUnits.push_back("millisecond"); + + // Derived Quantity index [7]: + this->mDerivedQuantityNames.push_back("membrane_inward_rectifier_potassium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [8]: + this->mDerivedQuantityNames.push_back("membrane_rapid_delayed_rectifier_potassium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [9]: + this->mDerivedQuantityNames.push_back("membrane_slow_delayed_rectifier_potassium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [10]: + this->mDerivedQuantityNames.push_back("membrane_sodium_calcium_exchanger_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [11]: + this->mDerivedQuantityNames.push_back("membrane_stimulus_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [12]: + this->mDerivedQuantityNames.push_back("membrane_transient_outward_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [13]: + this->mDerivedQuantityNames.push_back("time"); + this->mDerivedQuantityUnits.push_back("millisecond"); + + this->mInitialised = true; +} + +// Serialization for Boost >= 1.36 +#include "SerializationExportWrapperForCpp.hpp" +CHASTE_CLASS_EXPORT(Dynamiccourtemanche_ramirez_nattel_1998FromCellMLBackwardEuler) +extern "C" +{ + AbstractCardiacCellInterface* MakeCardiacCell( + boost::shared_ptr pSolver, + boost::shared_ptr pStimulus) + { + return new Dynamiccourtemanche_ramirez_nattel_1998FromCellMLBackwardEuler(pSolver, pStimulus); + } + +} diff --git a/chaste_codegen/tests/numerical/baseline/BE/dynamic_courtemanche_ramirez_nattel_1998.hpp b/chaste_codegen/tests/numerical/baseline/BE/dynamic_courtemanche_ramirez_nattel_1998.hpp new file mode 100644 index 00000000..40e71e17 --- /dev/null +++ b/chaste_codegen/tests/numerical/baseline/BE/dynamic_courtemanche_ramirez_nattel_1998.hpp @@ -0,0 +1,90 @@ +#ifndef DYNAMICCOURTEMANCHE_RAMIREZ_NATTEL_1998FROMCELLMLBACKWARDEULER_HPP_ +#define DYNAMICCOURTEMANCHE_RAMIREZ_NATTEL_1998FROMCELLMLBACKWARDEULER_HPP_ + +//! @file +//! +//! This source file was generated from CellML by chaste_codegen version (version omitted as unimportant) +//! +//! Model: courtemanche_1998 +//! +//! Processed by chaste_codegen: https://github.com/ModellingWebLab/chaste-codegen +//! (translator: chaste_codegen, model type: BackwardEuler) +//! on (date omitted as unimportant) +//! +//! + +#include "ChasteSerialization.hpp" +#include +#include "AbstractDynamicallyLoadableEntity.hpp" +#include "AbstractStimulusFunction.hpp" +#include "AbstractBackwardEulerCardiacCell.hpp" + +class Dynamiccourtemanche_ramirez_nattel_1998FromCellMLBackwardEuler : public AbstractBackwardEulerCardiacCell<8>, public AbstractDynamicallyLoadableEntity +{ + friend class boost::serialization::access; + template + void serialize(Archive & archive, const unsigned int version) + { + archive & boost::serialization::base_object >(*this); + archive & boost::serialization::base_object(*this); + } + + // + // Settable parameters and readable variables + // + +private: + static AbstractBackwardEulerCardiacCell<8>* CreateMethod(boost::shared_ptr p_solver, boost::shared_ptr p_stimulus); + static bool registered; +private: +const bool is_concentration[21] = {false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, true, true, false}; +const bool is_probability[21] = {false, false, true, true, true, false, false, false, false, false, false, true, true, true, false, false, false, false, false, false, false}; +public: + + boost::shared_ptr UseCellMLDefaultStimulus(); + double GetIntracellularCalciumConcentration(); + Dynamiccourtemanche_ramirez_nattel_1998FromCellMLBackwardEuler(boost::shared_ptr /* unused; should be empty */, boost::shared_ptr pIntracellularStimulus); + ~Dynamiccourtemanche_ramirez_nattel_1998FromCellMLBackwardEuler(); + void VerifyStateVariables(); + double GetIIonic(const std::vector* pStateVariables=NULL);void ComputeResidual(double var_chaste_interface__environment__time, const double rCurrentGuess[8], double rResidual[8]); + void ComputeJacobian(double var_chaste_interface__environment__time, const double rCurrentGuess[8], double rJacobian[8][8]);protected: + void UpdateTransmembranePotential(double var_chaste_interface__environment__time); + void ComputeOneStepExceptVoltage(double var_chaste_interface__environment__time); + + std::vector ComputeDerivedQuantities(double var_chaste_interface__environment__time, const std::vector & rY); +}; + +// Needs to be included last +#include "SerializationExportWrapper.hpp" +CHASTE_CLASS_EXPORT(Dynamiccourtemanche_ramirez_nattel_1998FromCellMLBackwardEuler) + +namespace boost +{ + namespace serialization + { + template + inline void save_construct_data( + Archive & ar, const Dynamiccourtemanche_ramirez_nattel_1998FromCellMLBackwardEuler * t, const unsigned int fileVersion) + { + const boost::shared_ptr p_solver = t->GetSolver(); + const boost::shared_ptr p_stimulus = t->GetStimulusFunction(); + ar << p_solver; + ar << p_stimulus; + } + + template + inline void load_construct_data( + Archive & ar, Dynamiccourtemanche_ramirez_nattel_1998FromCellMLBackwardEuler * t, const unsigned int fileVersion) + { + boost::shared_ptr p_solver; + boost::shared_ptr p_stimulus; + ar >> p_solver; + ar >> p_stimulus; + ::new(t)Dynamiccourtemanche_ramirez_nattel_1998FromCellMLBackwardEuler(p_solver, p_stimulus); + } + + } + +} + +#endif // DYNAMICCOURTEMANCHE_RAMIREZ_NATTEL_1998FROMCELLMLBACKWARDEULER_HPP_ \ No newline at end of file diff --git a/chaste_codegen/tests/numerical/baseline/BE/grandi_pasqualini_bers_2010_ssBackwardEuler.cpp b/chaste_codegen/tests/numerical/baseline/BE/grandi_pasqualini_bers_2010_ssBackwardEuler.cpp new file mode 100644 index 00000000..8bc5a297 --- /dev/null +++ b/chaste_codegen/tests/numerical/baseline/BE/grandi_pasqualini_bers_2010_ssBackwardEuler.cpp @@ -0,0 +1,2304 @@ +//! @file +//! +//! This source file was generated from CellML by chaste_codegen version (version omitted as unimportant) +//! +//! Model: grandi_pasqualini_bers_2010_epi +//! +//! Processed by chaste_codegen: https://github.com/ModellingWebLab/chaste-codegen +//! (translator: chaste_codegen, model type: BackwardEuler) +//! on (date omitted as unimportant) +//! +//! + +#include "CardiacNewtonSolver.hpp" +#include "grandi_pasqualini_bers_2010_ssBackwardEuler.hpp" +#include +#include +#include +#include +#include "Exception.hpp" +#include "OdeSystemInformation.hpp" +#include "RegularStimulus.hpp" +#include "HeartConfig.hpp" +#include "IsNan.hpp" +#include "MathsCustomFunctions.hpp" + +#include "ModelFactory.hpp" + +AbstractBackwardEulerCardiacCell<27>* Cellgrandi_pasqualini_bers_2010_ssFromCellMLBackwardEuler::CreateMethod(boost::shared_ptr p_solver, boost::shared_ptr p_stimulus) { + return new Cellgrandi_pasqualini_bers_2010_ssFromCellMLBackwardEuler(p_solver, p_stimulus); +} + +bool Cellgrandi_pasqualini_bers_2010_ssFromCellMLBackwardEuler::registered = ModelFactory::Register("grandi_pasqualini_bers_2010_ss", "BackwardEuler", (ModelFactory::TCreateMethod)Cellgrandi_pasqualini_bers_2010_ssFromCellMLBackwardEuler::CreateMethod); + + + + boost::shared_ptr Cellgrandi_pasqualini_bers_2010_ssFromCellMLBackwardEuler::UseCellMLDefaultStimulus() + { + // Use the default stimulus specified by CellML metadata + const double var_chaste_interface__membrane_potential__stim_amplitude_converted = -9.5 * HeartConfig::Instance()->GetCapacitance(); // uA_per_cm2 + const double var_chaste_interface__membrane_potential__stim_duration = 5; // msec + const double var_chaste_interface__membrane_potential__stim_period = 1000; // msec + const double var_chaste_interface__membrane_potential__stim_start = 100; // msec + boost::shared_ptr p_cellml_stim(new RegularStimulus( + -fabs(var_chaste_interface__membrane_potential__stim_amplitude_converted), + var_chaste_interface__membrane_potential__stim_duration, + var_chaste_interface__membrane_potential__stim_period, + var_chaste_interface__membrane_potential__stim_start + )); + mpIntracellularStimulus = p_cellml_stim; + return p_cellml_stim; + } + double Cellgrandi_pasqualini_bers_2010_ssFromCellMLBackwardEuler::GetIntracellularCalciumConcentration() + { + return mStateVariables[1]; + } + Cellgrandi_pasqualini_bers_2010_ssFromCellMLBackwardEuler::Cellgrandi_pasqualini_bers_2010_ssFromCellMLBackwardEuler(boost::shared_ptr /* unused; should be empty */, boost::shared_ptr pIntracellularStimulus) + : AbstractBackwardEulerCardiacCell<27>( + 39, + 0, + pIntracellularStimulus) + { + // Time units: millisecond + // + this->mpSystemInfo = OdeSystemInformation::Instance(); + Init(); + + // We have a default stimulus specified in the CellML file metadata + this->mHasDefaultStimulusFromCellML = true; + + this->mParameters[0] = 5.3480000000000003e-6; // (var_SR_Fluxes__SR_leak_max) [per_msec] + this->mParameters[1] = 25; // (var_parameters__ks) [per_msec] + this->mParameters[2] = 0.0053114; // (var_parameters__Vmax_SRCaP) [mM_per_msec] + this->mParameters[3] = 1; // (var_Na_Concentrations__conc_clamp) [dimensionless] + this->mParameters[4] = 15; // (var_parameters__Cli) [mM] + this->mParameters[5] = 1.8; // (var_parameters__Cao) [mM] + this->mParameters[6] = 150; // (var_parameters__Clo) [mM] + this->mParameters[7] = 5.4000000000000004; // (var_parameters__Ko) [mM] + this->mParameters[8] = 140; // (var_parameters__Nao) [mM] + this->mParameters[9] = 96485; // (var_parameters__Frdy) [coulomb_per_mole] + this->mParameters[10] = 8314; // (var_parameters__R) [joule_per_kelvin_per_kilomole] + this->mParameters[11] = 0.5; // (var_parameters__pCa_max) [cm_per_sec] + this->mParameters[12] = 23; // (var_parameters__GNa) [mS_per_uF] + this->mParameters[13] = 0; // (var_I_Na__perc_reduced_inact_for_IpNa) [dimensionless] + this->mParameters[14] = 0; // (var_I_Na__shift_INa_inact) [mV] + this->mParameters[15] = 1; // (var_I_to__GtoFast_factor) [dimensionless] + this->mParameters[16] = 0.34999999999999998; // (var_I_Ki__g_ki_factor) [mS_per_uF] + this->mParameters[17] = 0.035000000000000003; // (var_I_Kr__gkr_max) [mS_per_uF] + this->mParameters[18] = 1; // (var_I_Ks__GKs_factor) [dimensionless] + this->mParameters[19] = 1; // (var_I_to__GtoSlow_factor) [dimensionless] + this->mParameters[20] = 4.5; // (var_parameters__IbarNCX) [uA_per_uF] + this->mParameters[21] = 1.8; // (var_parameters__IbarNaK) [uA_per_uF] + this->mParameters[22] = 1.3809999999999999e-10; // (var_parameters__Cmem) [farad] + this->mParameters[23] = 310; // (var_parameters__Temp) [kelvin] + } + + Cellgrandi_pasqualini_bers_2010_ssFromCellMLBackwardEuler::~Cellgrandi_pasqualini_bers_2010_ssFromCellMLBackwardEuler() + { + } + + + void Cellgrandi_pasqualini_bers_2010_ssFromCellMLBackwardEuler::VerifyStateVariables() + { + std::vector& rY = rGetStateVariables(); + std::string error_message = ""; + + for (unsigned i=0; i < 39; i++) + { + if(std::isnan(rY[i])) + { + error_message += "State variable " + this->rGetStateVariableNames()[i] + " is not a number\n"; + } + if(std::isinf(rY[i])) + { + error_message += "State variable " + this->rGetStateVariableNames()[i] + " has become INFINITE\n"; + } + if(this->is_concentration[i] && rY[i] < 0) + { + error_message += "Concentration " + this->rGetStateVariableNames()[i] + " below 0\n"; + } + if(this->is_probability[i] && rY[i] < 0) + { + error_message += "Probability " + this->rGetStateVariableNames()[i] + " below 0\n"; + } + if(this->is_probability[i] && rY[i] > 1) + { + error_message += "Probability " + this->rGetStateVariableNames()[i] + " above 1\n"; + } + } + if (error_message != ""){ + EXCEPTION(DumpState(error_message)); + } + } + + double Cellgrandi_pasqualini_bers_2010_ssFromCellMLBackwardEuler::GetIIonic(const std::vector* pStateVariables) + { + // For state variable interpolation (SVI) we read in interpolated state variables, + // otherwise for ionic current interpolation (ICI) we use the state variables of this model (node). + if (!pStateVariables) pStateVariables = &rGetStateVariables(); + const std::vector& rY = *pStateVariables; + double var_chaste_interface__membrane_potential__V_m = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: mV; Initial value: -81.4229700631461 + double var_chaste_interface__I_Na__m = rY[2]; + // Units: dimensionless; Initial value: 0.00381858135062259 + double var_chaste_interface__I_Na__h = rY[3]; + // Units: dimensionless; Initial value: 0.625086621635645 + double var_chaste_interface__I_Na__j = rY[4]; + // Units: dimensionless; Initial value: 0.62332507235506 + double var_chaste_interface__I_Kr__x_kr = rY[5]; + // Units: dimensionless; Initial value: 0.021733554982663 + double var_chaste_interface__I_Ks__x_ks = rY[6]; + // Units: dimensionless; Initial value: 0.00428981903391989 + double var_chaste_interface__I_to__x_to_s = rY[7]; + // Units: dimensionless; Initial value: 0.000441539203559411 + double var_chaste_interface__I_to__y_to_s = rY[8]; + // Units: dimensionless; Initial value: 0.784875334693892 + double var_chaste_interface__I_to__x_to_f = rY[9]; + // Units: dimensionless; Initial value: 0.000441531250866821 + double var_chaste_interface__I_to__y_to_f = rY[10]; + // Units: dimensionless; Initial value: 0.999995817153572 + double var_chaste_interface__I_Ca__d = rY[11]; + // Units: dimensionless; Initial value: 2.93982287251302e-06 + double var_chaste_interface__I_Ca__f = rY[12]; + // Units: dimensionless; Initial value: 0.99511673495949 + double var_chaste_interface__I_Ca__f_Ca_Bj = rY[13]; + // Units: dimensionless; Initial value: 0.0246142436477748 + double var_chaste_interface__I_Ca__f_Ca_Bsl = rY[14]; + // Units: dimensionless; Initial value: 0.0152416826209301 + double var_chaste_interface__Na_Concentrations__Na_j = rY[33]; + // Units: mM; Initial value: 8.3215690202059 + double var_chaste_interface__Na_Concentrations__Na_sl = rY[34]; + // Units: mM; Initial value: 8.32094589677861 + double var_chaste_interface__Na_Concentrations__Na_i = rY[35]; + // Units: mM; Initial value: 8.32114502072456 + double var_chaste_interface__K_Concentration__K_i = rY[36]; + // Units: mM; Initial value: 120.0 + double var_chaste_interface__Ca_Concentrations__Ca_j = rY[37]; + // Units: mM; Initial value: 0.000175415190830688 + double var_chaste_interface__Ca_Concentrations__Ca_sl = rY[38]; + // Units: mM; Initial value: 0.000106544589194246 + + const double var_I_Ca__fcaCaMSL = 0; // dimensionless + const double var_I_Ca__fcaCaj = 0; // dimensionless + const double var_I_Ks__gks_junc = 0.0035000000000000001; // mS_per_uF + const double var_I_Ks__gks_sl = 0.0035000000000000001; // mS_per_uF + const double var_I_Kp__kp_kp = 1 / (1 + exp(7.4880000000000004 - 0.16722408026755853 * var_chaste_interface__membrane_potential__V_m)); // dimensionless + const double var_I_Kr__rkr = 1 / (1 + exp(3.0833333333333335 + 0.041666666666666664 * var_chaste_interface__membrane_potential__V_m)); // dimensionless + const double var_parameters__Fjunc = 0.11; // dimensionless + const double var_parameters__Fjunc_CaL = 0.90000000000000002; // dimensionless + const double var_parameters__Fsl = 1 - var_parameters__Fjunc; // dimensionless + const double var_I_Ks__GKs_total = (var_I_Ks__gks_junc * var_parameters__Fjunc + var_I_Ks__gks_sl * var_parameters__Fsl) * mParameters[18]; // mS_per_uF + const double var_parameters__Fsl_CaL = 1 - var_parameters__Fjunc_CaL; // dimensionless + const double var_parameters__GCaB = 0.00055130000000000001; // mS_per_uF + const double var_parameters__GClB = 0.0089999999999999993; // mS_per_uF + const double var_parameters__GClCa = 0.0548125; // mS_per_uF + const double var_parameters__GNaB = 0.00059699999999999998; // mS_per_uF + const double var_parameters__IbarSLCaP = 0.067299999999999999; // uA_per_uF + const double var_parameters__KdClCa = 0.10000000000000001; // mM + const double var_parameters__Kdact = 0.00014999999999999999; // mM + const double var_I_NCX__Ka_junc = 1 / (1 + pow(var_parameters__Kdact, 2) / pow(var_chaste_interface__Ca_Concentrations__Ca_j, 2)); // dimensionless + const double var_I_NCX__Ka_sl = 1 / (1 + pow(var_parameters__Kdact, 2) / pow(var_chaste_interface__Ca_Concentrations__Ca_sl, 2)); // dimensionless + const double var_parameters__KmCai = 0.0035899999999999999; // mM + const double var_parameters__KmCao = 1.3; // mM + const double var_parameters__KmKo = 1.5; // mM + const double var_parameters__KmNai = 12.289999999999999; // mM + const double var_parameters__KmNaip = 11; // mM + const double var_parameters__KmNao = 87.5; // mM + const double var_parameters__KmPCa = 0.00050000000000000001; // mM + const double var_I_Ki__g_K1 = 0.43033148291193518 * sqrt(mParameters[7]) * mParameters[16]; // mS_per_uF + const double var_I_Kr__gkr = 0.43033148291193518 * sqrt(mParameters[7]) * mParameters[17]; // mS_per_uF + const double var_I_NCX__s3_junc = pow(var_chaste_interface__Na_Concentrations__Na_j, 3) * mParameters[5] + pow(var_chaste_interface__Na_Concentrations__Na_j, 3) * var_parameters__KmCao + pow(mParameters[8], 3) * var_chaste_interface__Ca_Concentrations__Ca_j + pow(var_parameters__KmNao, 3) * (1 + var_chaste_interface__Ca_Concentrations__Ca_j / var_parameters__KmCai) * var_chaste_interface__Ca_Concentrations__Ca_j + pow(mParameters[8], 3) * (1 + pow(var_chaste_interface__Na_Concentrations__Na_j, 3) / pow(var_parameters__KmNai, 3)) * var_parameters__KmCai; // mM4 + const double var_I_NCX__s3_sl = pow(var_chaste_interface__Na_Concentrations__Na_sl, 3) * mParameters[5] + pow(var_chaste_interface__Na_Concentrations__Na_sl, 3) * var_parameters__KmCao + pow(mParameters[8], 3) * var_chaste_interface__Ca_Concentrations__Ca_sl + pow(var_parameters__KmNao, 3) * (1 + var_chaste_interface__Ca_Concentrations__Ca_sl / var_parameters__KmCai) * var_chaste_interface__Ca_Concentrations__Ca_sl + pow(mParameters[8], 3) * (1 + pow(var_chaste_interface__Na_Concentrations__Na_sl, 3) / pow(var_parameters__KmNai, 3)) * var_parameters__KmCai; // mM4 + const double var_I_NaK__sigma = -0.14285714285714285 + 0.14285714285714285 * exp(0.01485884101040119 * mParameters[8]); // dimensionless + const double var_parameters__Q10CaL = 1.8; // dimensionless + const double var_parameters__Q10NCX = 1.5700000000000001; // dimensionless + const double var_parameters__Q10SLCaP = 2.3500000000000001; // dimensionless + const double var_parameters__FoRT = mParameters[9] / (mParameters[10] * mParameters[23]); // per_mV + const double var_I_NaK__fnak = 1 / (1 + 0.1245 * exp(-0.10000000000000001 * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT) + 0.036499999999999998 * var_I_NaK__sigma * exp(-var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT)); // dimensionless + const double var_I_NaK__I_nak_junc = var_I_NaK__fnak * var_parameters__Fjunc * mParameters[21] * mParameters[7] / ((1 + pow(var_parameters__KmNaip, 4) / pow(var_chaste_interface__Na_Concentrations__Na_j, 4)) * (var_parameters__KmKo + mParameters[7])); // uA_per_uF + const double var_I_NaK__I_nak_sl = var_I_NaK__fnak * var_parameters__Fsl * mParameters[21] * mParameters[7] / ((1 + pow(var_parameters__KmNaip, 4) / pow(var_chaste_interface__Na_Concentrations__Na_sl, 4)) * (var_parameters__KmKo + mParameters[7])); // uA_per_uF + const double var_I_NaK__I_nak = var_I_NaK__I_nak_junc + var_I_NaK__I_nak_sl; // uA_per_uF + const double var_parameters__Qpow = -31 + 0.10000000000000001 * mParameters[23]; // dimensionless + const double var_I_PCa__I_pca_junc = pow(var_chaste_interface__Ca_Concentrations__Ca_j, 1.6000000000000001) * pow(var_parameters__Q10SLCaP, var_parameters__Qpow) * var_parameters__Fjunc * var_parameters__IbarSLCaP / (pow(var_chaste_interface__Ca_Concentrations__Ca_j, 1.6000000000000001) + pow(var_parameters__KmPCa, 1.6000000000000001)); // uA_per_uF + const double var_I_PCa__I_pca_sl = pow(var_chaste_interface__Ca_Concentrations__Ca_sl, 1.6000000000000001) * pow(var_parameters__Q10SLCaP, var_parameters__Qpow) * var_parameters__Fsl * var_parameters__IbarSLCaP / (pow(var_chaste_interface__Ca_Concentrations__Ca_sl, 1.6000000000000001) + pow(var_parameters__KmPCa, 1.6000000000000001)); // uA_per_uF + const double var_parameters__eca_junc = 0.5 * log(mParameters[5] / var_chaste_interface__Ca_Concentrations__Ca_j) / var_parameters__FoRT; // mV + const double var_I_CaBK__I_cabk_junc = (-var_parameters__eca_junc + var_chaste_interface__membrane_potential__V_m) * var_parameters__Fjunc * var_parameters__GCaB; // uA_per_uF + const double var_parameters__eca_sl = 0.5 * log(mParameters[5] / var_chaste_interface__Ca_Concentrations__Ca_sl) / var_parameters__FoRT; // mV + const double var_I_CaBK__I_cabk_sl = (-var_parameters__eca_sl + var_chaste_interface__membrane_potential__V_m) * var_parameters__Fsl * var_parameters__GCaB; // uA_per_uF + const double var_parameters__ecl = log(mParameters[4] / mParameters[6]) / var_parameters__FoRT; // mV + const double var_I_ClCa__I_ClCa_junc = (-var_parameters__ecl + var_chaste_interface__membrane_potential__V_m) * var_parameters__Fjunc * var_parameters__GClCa / (1 + var_parameters__KdClCa / var_chaste_interface__Ca_Concentrations__Ca_j); // uA_per_uF + const double var_I_ClCa__I_ClCa_sl = (-var_parameters__ecl + var_chaste_interface__membrane_potential__V_m) * var_parameters__Fsl * var_parameters__GClCa / (1 + var_parameters__KdClCa / var_chaste_interface__Ca_Concentrations__Ca_sl); // uA_per_uF + const double var_I_ClCa__I_ClCa = var_I_ClCa__I_ClCa_junc + var_I_ClCa__I_ClCa_sl; // uA_per_uF + const double var_I_ClCa__I_Clbk = (-var_parameters__ecl + var_chaste_interface__membrane_potential__V_m) * var_parameters__GClB; // uA_per_uF + const double var_membrane_potential__I_Cl_tot = var_I_ClCa__I_ClCa + var_I_ClCa__I_Clbk; // uA_per_uF + const double var_parameters__ek = log(mParameters[7] / var_chaste_interface__K_Concentration__K_i) / var_parameters__FoRT; // mV + const double var_I_Ki__aki = 1.02 / (1 + exp(-14.1227775 + 0.23849999999999999 * var_chaste_interface__membrane_potential__V_m - 0.23849999999999999 * var_parameters__ek)); // dimensionless + const double var_I_Ki__bki = (0.49124000000000001 * exp(0.43983232 + 0.080320000000000003 * var_chaste_interface__membrane_potential__V_m - 0.080320000000000003 * var_parameters__ek) + exp(-36.698642499999998 + 0.061749999999999999 * var_chaste_interface__membrane_potential__V_m - 0.061749999999999999 * var_parameters__ek)) / (1 + exp(-2.4444678999999998 + 0.51429999999999998 * var_parameters__ek - 0.51429999999999998 * var_chaste_interface__membrane_potential__V_m)); // dimensionless + const double var_I_Ki__kiss = var_I_Ki__aki / (var_I_Ki__aki + var_I_Ki__bki); // dimensionless + const double var_I_Ki__I_ki = (-var_parameters__ek + var_chaste_interface__membrane_potential__V_m) * var_I_Ki__g_K1 * var_I_Ki__kiss; // uA_per_uF + const double var_I_Kr__I_kr = (-var_parameters__ek + var_chaste_interface__membrane_potential__V_m) * var_I_Kr__gkr * var_I_Kr__rkr * var_chaste_interface__I_Kr__x_kr; // uA_per_uF + const double var_parameters__ena_junc = log(mParameters[8] / var_chaste_interface__Na_Concentrations__Na_j) / var_parameters__FoRT; // mV + const double var_I_Na__I_Na_junc = pow(var_chaste_interface__I_Na__m, 3) * (-var_parameters__ena_junc + var_chaste_interface__membrane_potential__V_m) * var_chaste_interface__I_Na__h * var_chaste_interface__I_Na__j * var_parameters__Fjunc * mParameters[12]; // uA_per_uF + const double var_I_NaBK__I_nabk_junc = (-var_parameters__ena_junc + var_chaste_interface__membrane_potential__V_m) * var_parameters__Fjunc * var_parameters__GNaB; // uA_per_uF + const double var_parameters__ena_sl = log(mParameters[8] / var_chaste_interface__Na_Concentrations__Na_sl) / var_parameters__FoRT; // mV + const double var_I_Na__I_Na_sl = pow(var_chaste_interface__I_Na__m, 3) * (-var_parameters__ena_sl + var_chaste_interface__membrane_potential__V_m) * var_chaste_interface__I_Na__h * var_chaste_interface__I_Na__j * var_parameters__Fsl * mParameters[12]; // uA_per_uF + const double var_I_NaBK__I_nabk_sl = (-var_parameters__ena_sl + var_chaste_interface__membrane_potential__V_m) * var_parameters__Fsl * var_parameters__GNaB; // uA_per_uF + const double var_parameters__epi = 1; // dimensionless + const double var_I_to__GtoFast = ((var_parameters__epi == 1) ? (0.1144 * mParameters[15]) : (0.0014039999999999999 * mParameters[15])); // mS_per_uF + const double var_I_to__GtoSlow = ((var_parameters__epi == 1) ? (0.015599999999999999 * mParameters[19]) : (0.037595999999999997 * mParameters[19])); // mS_per_uF + const double var_I_to__I_tof = (-var_parameters__ek + var_chaste_interface__membrane_potential__V_m) * var_I_to__GtoFast * var_chaste_interface__I_to__x_to_f * var_chaste_interface__I_to__y_to_f; // uA_per_uF + const double var_I_to__I_tos = (-var_parameters__ek + var_chaste_interface__membrane_potential__V_m) * var_I_to__GtoSlow * var_chaste_interface__I_to__x_to_s * var_chaste_interface__I_to__y_to_s; // uA_per_uF + const double var_I_to__I_to = var_I_to__I_tof + var_I_to__I_tos; // uA_per_uF + const double var_parameters__gkp = 0.002; // mS_per_uF + const double var_I_Kp__I_kp_junc = (-var_parameters__ek + var_chaste_interface__membrane_potential__V_m) * var_I_Kp__kp_kp * var_parameters__Fjunc * var_parameters__gkp; // uA_per_uF + const double var_I_Kp__I_kp_sl = (-var_parameters__ek + var_chaste_interface__membrane_potential__V_m) * var_I_Kp__kp_kp * var_parameters__Fsl * var_parameters__gkp; // uA_per_uF + const double var_I_Kp__I_kp = var_I_Kp__I_kp_junc + var_I_Kp__I_kp_sl; // uA_per_uF + const double var_parameters__ksat = 0.32000000000000001; // dimensionless + const double var_parameters__nu = 0.27000000000000002; // dimensionless + const double var_I_NCX__s1_junc = pow(var_chaste_interface__Na_Concentrations__Na_j, 3) * mParameters[5] * exp(var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT * var_parameters__nu); // mM4 + const double var_I_NCX__s1_sl = pow(var_chaste_interface__Na_Concentrations__Na_sl, 3) * mParameters[5] * exp(var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT * var_parameters__nu); // mM4 + const double var_I_NCX__s2_junc = pow(mParameters[8], 3) * var_chaste_interface__Ca_Concentrations__Ca_j * exp((-1 + var_parameters__nu) * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT); // mM4 + const double var_I_NCX__I_ncx_junc = pow(var_parameters__Q10NCX, var_parameters__Qpow) * (-var_I_NCX__s2_junc + var_I_NCX__s1_junc) * var_I_NCX__Ka_junc * var_parameters__Fjunc * mParameters[20] / ((1 + var_parameters__ksat * exp((-1 + var_parameters__nu) * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT)) * var_I_NCX__s3_junc); // uA_per_uF + const double var_I_NCX__s2_sl = pow(mParameters[8], 3) * var_chaste_interface__Ca_Concentrations__Ca_sl * exp((-1 + var_parameters__nu) * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT); // mM4 + const double var_I_NCX__I_ncx_sl = pow(var_parameters__Q10NCX, var_parameters__Qpow) * (-var_I_NCX__s2_sl + var_I_NCX__s1_sl) * var_I_NCX__Ka_sl * var_parameters__Fsl * mParameters[20] / ((1 + var_parameters__ksat * exp((-1 + var_parameters__nu) * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT)) * var_I_NCX__s3_sl); // uA_per_uF + const double var_parameters__pCa = 0.00054000000000000001 * mParameters[11]; // cm_per_sec + const double var_I_Ca__ibarca_j = 4 * (-0.34100000000000003 * mParameters[5] + 0.34100000000000003 * var_chaste_interface__Ca_Concentrations__Ca_j * exp(2 * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT)) * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT * mParameters[9] * var_parameters__pCa / (-1 + exp(2 * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT)); // uA_per_uF + const double var_I_Ca__I_Ca_junc = 0.45000000000000001 * pow(var_parameters__Q10CaL, var_parameters__Qpow) * (1 - var_chaste_interface__I_Ca__f_Ca_Bj + var_I_Ca__fcaCaj) * var_chaste_interface__I_Ca__d * var_chaste_interface__I_Ca__f * var_I_Ca__ibarca_j * var_parameters__Fjunc_CaL; // uA_per_uF + const double var_Ca_Concentrations__I_Ca_tot_junc = -2 * var_I_NCX__I_ncx_junc + var_I_Ca__I_Ca_junc + var_I_CaBK__I_cabk_junc + var_I_PCa__I_pca_junc; // uA_per_uF + const double var_I_Ca__ibarca_sl = 4 * (-0.34100000000000003 * mParameters[5] + 0.34100000000000003 * var_chaste_interface__Ca_Concentrations__Ca_sl * exp(2 * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT)) * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT * mParameters[9] * var_parameters__pCa / (-1 + exp(2 * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT)); // uA_per_uF + const double var_I_Ca__I_Ca_sl = 0.45000000000000001 * pow(var_parameters__Q10CaL, var_parameters__Qpow) * (1 - var_chaste_interface__I_Ca__f_Ca_Bsl + var_I_Ca__fcaCaMSL) * var_chaste_interface__I_Ca__d * var_chaste_interface__I_Ca__f * var_I_Ca__ibarca_sl * var_parameters__Fsl_CaL; // uA_per_uF + const double var_Ca_Concentrations__I_Ca_tot_sl = -2 * var_I_NCX__I_ncx_sl + var_I_Ca__I_Ca_sl + var_I_CaBK__I_cabk_sl + var_I_PCa__I_pca_sl; // uA_per_uF + const double var_membrane_potential__I_Ca_tot = var_Ca_Concentrations__I_Ca_tot_junc + var_Ca_Concentrations__I_Ca_tot_sl; // uA_per_uF + const double var_parameters__pK = 1.35e-7; // cm_per_sec + const double var_I_Ca__ibark = (-0.75 * mParameters[7] + 0.75 * var_chaste_interface__K_Concentration__K_i * exp(var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT)) * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT * mParameters[9] * var_parameters__pK / (-1 + exp(var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT)); // uA_per_uF + const double var_I_Ca__I_CaK = 0.45000000000000001 * pow(var_parameters__Q10CaL, var_parameters__Qpow) * ((1 - var_chaste_interface__I_Ca__f_Ca_Bj + var_I_Ca__fcaCaj) * var_parameters__Fjunc_CaL + (1 - var_chaste_interface__I_Ca__f_Ca_Bsl + var_I_Ca__fcaCaMSL) * var_parameters__Fsl_CaL) * var_chaste_interface__I_Ca__d * var_chaste_interface__I_Ca__f * var_I_Ca__ibark; // uA_per_uF + const double var_parameters__pNa = 7.4999999999999993e-9; // cm_per_sec + const double var_I_Ca__ibarna_j = (-0.75 * mParameters[8] + 0.75 * var_chaste_interface__Na_Concentrations__Na_j * exp(var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT)) * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT * mParameters[9] * var_parameters__pNa / (-1 + exp(var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT)); // uA_per_uF + const double var_I_Ca__I_CaNa_junc = 0.45000000000000001 * pow(var_parameters__Q10CaL, var_parameters__Qpow) * (1 - var_chaste_interface__I_Ca__f_Ca_Bj + var_I_Ca__fcaCaj) * var_chaste_interface__I_Ca__d * var_chaste_interface__I_Ca__f * var_I_Ca__ibarna_j * var_parameters__Fjunc_CaL; // uA_per_uF + const double var_I_Ca__ibarna_sl = (-0.75 * mParameters[8] + 0.75 * var_chaste_interface__Na_Concentrations__Na_sl * exp(var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT)) * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT * mParameters[9] * var_parameters__pNa / (-1 + exp(var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT)); // uA_per_uF + const double var_I_Ca__I_CaNa_sl = 0.45000000000000001 * pow(var_parameters__Q10CaL, var_parameters__Qpow) * (1 - var_chaste_interface__I_Ca__f_Ca_Bsl + var_I_Ca__fcaCaMSL) * var_chaste_interface__I_Ca__d * var_chaste_interface__I_Ca__f * var_I_Ca__ibarna_sl * var_parameters__Fsl_CaL; // uA_per_uF + const double var_Na_Concentrations__I_Na_tot_junc = 3 * var_I_NCX__I_ncx_junc + 3 * var_I_NaK__I_nak_junc + var_I_Ca__I_CaNa_junc + var_I_Na__I_Na_junc + var_I_NaBK__I_nabk_junc; // uA_per_uF + const double var_Na_Concentrations__I_Na_tot_sl = 3 * var_I_NCX__I_ncx_sl + 3 * var_I_NaK__I_nak_sl + var_I_Ca__I_CaNa_sl + var_I_Na__I_Na_sl + var_I_NaBK__I_nabk_sl; // uA_per_uF + const double var_membrane_potential__I_Na_tot = var_Na_Concentrations__I_Na_tot_junc + var_Na_Concentrations__I_Na_tot_sl; // uA_per_uF + const double var_parameters__pNaK = 0.018329999999999999; // dimensionless + const double var_I_Ks__eks = log((mParameters[8] * var_parameters__pNaK + mParameters[7]) / (var_chaste_interface__Na_Concentrations__Na_i * var_parameters__pNaK + var_chaste_interface__K_Concentration__K_i)) / var_parameters__FoRT; // mV + const double var_I_Ks__I_ks = pow(var_chaste_interface__I_Ks__x_ks, 2) * (-var_I_Ks__eks + var_chaste_interface__membrane_potential__V_m) * var_I_Ks__GKs_total; // uA_per_uF + const double var_K_Concentration__I_K_tot = -2 * var_I_NaK__I_nak + var_I_Ca__I_CaK + var_I_Ki__I_ki + var_I_Kp__I_kp + var_I_Kr__I_kr + var_I_Ks__I_ks + var_I_to__I_to; // uA_per_uF + const double var_membrane_potential__I_tot = var_K_Concentration__I_K_tot + var_membrane_potential__I_Ca_tot + var_membrane_potential__I_Cl_tot + var_membrane_potential__I_Na_tot; // uA_per_uF + const double var_chaste_interface__i_ionic = HeartConfig::Instance()->GetCapacitance() * var_membrane_potential__I_tot; // uA_per_cm2 + + const double i_ionic = var_chaste_interface__i_ionic; + EXCEPT_IF_NOT(!std::isnan(i_ionic)); + return i_ionic; + } + + void Cellgrandi_pasqualini_bers_2010_ssFromCellMLBackwardEuler::ComputeResidual(double var_chaste_interface__environment__time, const double rCurrentGuess[27], double rResidual[27]) + { + std::vector& rY = rGetStateVariables(); + double var_chaste_interface__membrane_potential__V_m = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: mV; Initial value: -81.4229700631461 + double var_chaste_interface__I_Na__m = rY[2]; + // Units: dimensionless; Initial value: 0.00381858135062259 + double var_chaste_interface__I_Na__h = rY[3]; + // Units: dimensionless; Initial value: 0.625086621635645 + double var_chaste_interface__I_Na__j = rY[4]; + // Units: dimensionless; Initial value: 0.62332507235506 + double var_chaste_interface__I_Ca__d = rY[11]; + // Units: dimensionless; Initial value: 2.93982287251302e-06 + double var_chaste_interface__I_Ca__f = rY[12]; + // Units: dimensionless; Initial value: 0.99511673495949 + + //output_nonlinear_state_assignments + double var_chaste_interface__Ca_Concentrations__Ca_i = rCurrentGuess[0]; + double var_chaste_interface__Ca_Concentrations__Ca_j = rCurrentGuess[1]; + double var_chaste_interface__Ca_Concentrations__Ca_sl = rCurrentGuess[2]; + double var_chaste_interface__Cytosolic_Ca_Buffers__CaM = rCurrentGuess[3]; + double var_chaste_interface__Cytosolic_Ca_Buffers__Myo_c = rCurrentGuess[4]; + double var_chaste_interface__Cytosolic_Ca_Buffers__Myo_m = rCurrentGuess[5]; + double var_chaste_interface__Cytosolic_Ca_Buffers__SRB = rCurrentGuess[6]; + double var_chaste_interface__Cytosolic_Ca_Buffers__Tn_CHc = rCurrentGuess[7]; + double var_chaste_interface__Cytosolic_Ca_Buffers__Tn_CHm = rCurrentGuess[8]; + double var_chaste_interface__Cytosolic_Ca_Buffers__Tn_CL = rCurrentGuess[9]; + double var_chaste_interface__I_Ca__f_Ca_Bj = rCurrentGuess[10]; + double var_chaste_interface__I_Ca__f_Ca_Bsl = rCurrentGuess[11]; + double var_chaste_interface__Junctional_and_SL_Ca_Buffers__SLH_j = rCurrentGuess[12]; + double var_chaste_interface__Junctional_and_SL_Ca_Buffers__SLH_sl = rCurrentGuess[13]; + double var_chaste_interface__Junctional_and_SL_Ca_Buffers__SLL_j = rCurrentGuess[14]; + double var_chaste_interface__Junctional_and_SL_Ca_Buffers__SLL_sl = rCurrentGuess[15]; + double var_chaste_interface__Na_Buffers__Na_Bj = rCurrentGuess[17]; + double var_chaste_interface__Na_Buffers__Na_Bsl = rCurrentGuess[18]; + double var_chaste_interface__Na_Concentrations__Na_i = rCurrentGuess[19]; + double var_chaste_interface__Na_Concentrations__Na_j = rCurrentGuess[20]; + double var_chaste_interface__Na_Concentrations__Na_sl = rCurrentGuess[21]; + double var_chaste_interface__SR_Ca_Concentrations__Ca_sr = rCurrentGuess[22]; + double var_chaste_interface__SR_Ca_Concentrations__Csqn_b = rCurrentGuess[23]; + double var_chaste_interface__SR_Fluxes__Ry_Ri = rCurrentGuess[24]; + double var_chaste_interface__SR_Fluxes__Ry_Ro = rCurrentGuess[25]; + double var_chaste_interface__SR_Fluxes__Ry_Rr = rCurrentGuess[26]; + + //output_equations + const double d_dt_chaste_interface_var_K_Concentration__K_i = 0; // mM / msec + const double d_dt_chaste_interface_var_I_Ca__f_Ca_Bj = -0.011900000000000001 * var_chaste_interface__I_Ca__f_Ca_Bj + 1.7 * (1 - var_chaste_interface__I_Ca__f_Ca_Bj) * var_chaste_interface__Ca_Concentrations__Ca_j; // 1 / msec + const double d_dt_chaste_interface_var_I_Ca__f_Ca_Bsl = -0.011900000000000001 * var_chaste_interface__I_Ca__f_Ca_Bsl + 1.7 * (1 - var_chaste_interface__I_Ca__f_Ca_Bsl) * var_chaste_interface__Ca_Concentrations__Ca_sl; // 1 / msec + const double var_I_Ca__fcaCaMSL = 0; // dimensionless + const double var_I_Ca__fcaCaj = 0; // dimensionless + const double var_SR_Fluxes__MaxSR = 15; // dimensionless + const double var_SR_Fluxes__MinSR = 1; // dimensionless + const double var_SR_Fluxes__RI = 1 - var_chaste_interface__SR_Fluxes__Ry_Ri - var_chaste_interface__SR_Fluxes__Ry_Ro - var_chaste_interface__SR_Fluxes__Ry_Rr; // mM + const double var_SR_Fluxes__J_SRleak = (-var_chaste_interface__Ca_Concentrations__Ca_j + var_chaste_interface__SR_Ca_Concentrations__Ca_sr) * mParameters[0]; // mM_per_msec + const double var_parameters__Bmax_CaM = 0.024; // mM + const double var_parameters__Bmax_Naj = 7.5609999999999999; // mM + const double var_parameters__Bmax_Nasl = 1.6499999999999999; // mM + const double var_parameters__Bmax_SR = 0.017100000000000001; // mM + const double var_parameters__Bmax_TnChigh = 0.14000000000000001; // mM + const double var_parameters__Bmax_TnClow = 0.070000000000000007; // mM + const double var_parameters__Bmax_myosin = 0.14000000000000001; // mM + const double var_parameters__Fjunc = 0.11; // dimensionless + const double var_parameters__Fjunc_CaL = 0.90000000000000002; // dimensionless + const double var_parameters__Fsl = 1 - var_parameters__Fjunc; // dimensionless + const double var_parameters__Fsl_CaL = 1 - var_parameters__Fjunc_CaL; // dimensionless + const double var_parameters__GCaB = 0.00055130000000000001; // mS_per_uF + const double var_parameters__GNaB = 0.00059699999999999998; // mS_per_uF + const double var_parameters__IbarSLCaP = 0.067299999999999999; // uA_per_uF + const double var_parameters__J_ca_juncsl = 8.2413000000000004e-13; // liters_per_msec + const double var_parameters__J_ca_slmyo = 3.2742999999999999e-12; // liters_per_msec + const double var_parameters__J_na_juncsl = 1.8312999999999999e-14; // liters_per_msec + const double var_parameters__J_na_slmyo = 1.6385999999999999e-12; // liters_per_msec + const double var_parameters__Kdact = 0.00014999999999999999; // mM + const double var_I_NCX__Ka_junc = 1 / (1 + pow(var_parameters__Kdact, 2) / pow(var_chaste_interface__Ca_Concentrations__Ca_j, 2)); // dimensionless + const double var_I_NCX__Ka_sl = 1 / (1 + pow(var_parameters__Kdact, 2) / pow(var_chaste_interface__Ca_Concentrations__Ca_sl, 2)); // dimensionless + const double var_parameters__KmCai = 0.0035899999999999999; // mM + const double var_parameters__KmCao = 1.3; // mM + const double var_parameters__KmKo = 1.5; // mM + const double var_parameters__KmNai = 12.289999999999999; // mM + const double var_parameters__KmNaip = 11; // mM + const double var_parameters__KmNao = 87.5; // mM + const double var_parameters__KmPCa = 0.00050000000000000001; // mM + const double var_parameters__Kmf = 0.00024600000000000002; // mM + const double var_parameters__Kmr = 1.7; // mM + const double var_parameters__Mgi = 1; // mM + const double var_I_NCX__s3_junc = pow(var_chaste_interface__Na_Concentrations__Na_j, 3) * mParameters[5] + pow(var_chaste_interface__Na_Concentrations__Na_j, 3) * var_parameters__KmCao + pow(mParameters[8], 3) * var_chaste_interface__Ca_Concentrations__Ca_j + pow(var_parameters__KmNao, 3) * (1 + var_chaste_interface__Ca_Concentrations__Ca_j / var_parameters__KmCai) * var_chaste_interface__Ca_Concentrations__Ca_j + pow(mParameters[8], 3) * (1 + pow(var_chaste_interface__Na_Concentrations__Na_j, 3) / pow(var_parameters__KmNai, 3)) * var_parameters__KmCai; // mM4 + const double var_I_NCX__s3_sl = pow(var_chaste_interface__Na_Concentrations__Na_sl, 3) * mParameters[5] + pow(var_chaste_interface__Na_Concentrations__Na_sl, 3) * var_parameters__KmCao + pow(mParameters[8], 3) * var_chaste_interface__Ca_Concentrations__Ca_sl + pow(var_parameters__KmNao, 3) * (1 + var_chaste_interface__Ca_Concentrations__Ca_sl / var_parameters__KmCai) * var_chaste_interface__Ca_Concentrations__Ca_sl + pow(mParameters[8], 3) * (1 + pow(var_chaste_interface__Na_Concentrations__Na_sl, 3) / pow(var_parameters__KmNai, 3)) * var_parameters__KmCai; // mM4 + const double var_I_NaK__sigma = -0.14285714285714285 + 0.14285714285714285 * exp(0.01485884101040119 * mParameters[8]); // dimensionless + const double var_parameters__Q10CaL = 1.8; // dimensionless + const double var_parameters__Q10NCX = 1.5700000000000001; // dimensionless + const double var_parameters__Q10SLCaP = 2.3500000000000001; // dimensionless + const double var_parameters__Q10SRCaP = 2.6000000000000001; // dimensionless + const double var_parameters__FoRT = mParameters[9] / (mParameters[10] * mParameters[23]); // per_mV + const double var_I_NaK__fnak = 1 / (1 + 0.1245 * exp(-0.10000000000000001 * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT) + 0.036499999999999998 * var_I_NaK__sigma * exp(-var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT)); // dimensionless + const double var_I_NaK__I_nak_junc = var_I_NaK__fnak * var_parameters__Fjunc * mParameters[21] * mParameters[7] / ((1 + pow(var_parameters__KmNaip, 4) / pow(var_chaste_interface__Na_Concentrations__Na_j, 4)) * (var_parameters__KmKo + mParameters[7])); // uA_per_uF + const double var_I_NaK__I_nak_sl = var_I_NaK__fnak * var_parameters__Fsl * mParameters[21] * mParameters[7] / ((1 + pow(var_parameters__KmNaip, 4) / pow(var_chaste_interface__Na_Concentrations__Na_sl, 4)) * (var_parameters__KmKo + mParameters[7])); // uA_per_uF + const double var_parameters__Qpow = -31 + 0.10000000000000001 * mParameters[23]; // dimensionless + const double var_I_PCa__I_pca_junc = pow(var_chaste_interface__Ca_Concentrations__Ca_j, 1.6000000000000001) * pow(var_parameters__Q10SLCaP, var_parameters__Qpow) * var_parameters__Fjunc * var_parameters__IbarSLCaP / (pow(var_chaste_interface__Ca_Concentrations__Ca_j, 1.6000000000000001) + pow(var_parameters__KmPCa, 1.6000000000000001)); // uA_per_uF + const double var_I_PCa__I_pca_sl = pow(var_chaste_interface__Ca_Concentrations__Ca_sl, 1.6000000000000001) * pow(var_parameters__Q10SLCaP, var_parameters__Qpow) * var_parameters__Fsl * var_parameters__IbarSLCaP / (pow(var_chaste_interface__Ca_Concentrations__Ca_sl, 1.6000000000000001) + pow(var_parameters__KmPCa, 1.6000000000000001)); // uA_per_uF + const double var_parameters__cellLength = 100; // um + const double var_parameters__cellRadius = 10.25; // um + const double var_parameters__Vcell = 1.0000000000000001e-15 * M_PI * pow(var_parameters__cellRadius, 2) * var_parameters__cellLength; // liter + const double var_parameters__Vjunc = 0.00053900000000000009 * var_parameters__Vcell; // liter + const double var_parameters__Vmyo = 0.65000000000000002 * var_parameters__Vcell; // liter + const double d_dt_chaste_interface_var_Na_Concentrations__Na_i = (-var_chaste_interface__Na_Concentrations__Na_i + var_chaste_interface__Na_Concentrations__Na_sl) * mParameters[3] * var_parameters__J_na_slmyo / var_parameters__Vmyo; // mM / msec + const double var_parameters__Bmax_SLhighj = 0.000165 * var_parameters__Vmyo / var_parameters__Vjunc; // mM + const double var_parameters__Bmax_SLlowj = 0.00046000000000000001 * var_parameters__Vmyo / var_parameters__Vjunc; // mM + const double var_parameters__Vsl = 0.02 * var_parameters__Vcell; // liter + const double var_parameters__Bmax_SLhighsl = 0.0134 * var_parameters__Vmyo / var_parameters__Vsl; // mM + const double var_parameters__Bmax_SLlowsl = 0.037400000000000003 * var_parameters__Vmyo / var_parameters__Vsl; // mM + const double var_parameters__Vsr = 0.035000000000000003 * var_parameters__Vcell; // liter + const double var_parameters__Bmax_Csqn = 0.14000000000000001 * var_parameters__Vmyo / var_parameters__Vsr; // mM + const double var_parameters__ec50SR = 0.45000000000000001; // mM + const double var_SR_Fluxes__kCaSR = -(-var_SR_Fluxes__MinSR + var_SR_Fluxes__MaxSR) / (1 + pow((var_parameters__ec50SR / var_chaste_interface__SR_Ca_Concentrations__Ca_sr), 2.5)) + var_SR_Fluxes__MaxSR; // dimensionless + const double var_parameters__eca_junc = 0.5 * log(mParameters[5] / var_chaste_interface__Ca_Concentrations__Ca_j) / var_parameters__FoRT; // mV + const double var_I_CaBK__I_cabk_junc = (-var_parameters__eca_junc + var_chaste_interface__membrane_potential__V_m) * var_parameters__Fjunc * var_parameters__GCaB; // uA_per_uF + const double var_parameters__eca_sl = 0.5 * log(mParameters[5] / var_chaste_interface__Ca_Concentrations__Ca_sl) / var_parameters__FoRT; // mV + const double var_I_CaBK__I_cabk_sl = (-var_parameters__eca_sl + var_chaste_interface__membrane_potential__V_m) * var_parameters__Fsl * var_parameters__GCaB; // uA_per_uF + const double var_parameters__ena_junc = log(mParameters[8] / var_chaste_interface__Na_Concentrations__Na_j) / var_parameters__FoRT; // mV + const double var_I_Na__I_Na_junc = pow(var_chaste_interface__I_Na__m, 3) * (-var_parameters__ena_junc + var_chaste_interface__membrane_potential__V_m) * var_chaste_interface__I_Na__h * var_chaste_interface__I_Na__j * var_parameters__Fjunc * mParameters[12]; // uA_per_uF + const double var_I_NaBK__I_nabk_junc = (-var_parameters__ena_junc + var_chaste_interface__membrane_potential__V_m) * var_parameters__Fjunc * var_parameters__GNaB; // uA_per_uF + const double var_parameters__ena_sl = log(mParameters[8] / var_chaste_interface__Na_Concentrations__Na_sl) / var_parameters__FoRT; // mV + const double var_I_Na__I_Na_sl = pow(var_chaste_interface__I_Na__m, 3) * (-var_parameters__ena_sl + var_chaste_interface__membrane_potential__V_m) * var_chaste_interface__I_Na__h * var_chaste_interface__I_Na__j * var_parameters__Fsl * mParameters[12]; // uA_per_uF + const double var_I_NaBK__I_nabk_sl = (-var_parameters__ena_sl + var_chaste_interface__membrane_potential__V_m) * var_parameters__Fsl * var_parameters__GNaB; // uA_per_uF + const double var_parameters__hillSRCaP = 1.7869999999999999; // dimensionless + const double var_SR_Fluxes__J_serca = pow(var_parameters__Q10SRCaP, var_parameters__Qpow) * (pow((var_chaste_interface__Ca_Concentrations__Ca_i / var_parameters__Kmf), var_parameters__hillSRCaP) - pow((var_chaste_interface__SR_Ca_Concentrations__Ca_sr / var_parameters__Kmr), var_parameters__hillSRCaP)) * mParameters[2] / (1 + pow((var_chaste_interface__Ca_Concentrations__Ca_i / var_parameters__Kmf), var_parameters__hillSRCaP) + pow((var_chaste_interface__SR_Ca_Concentrations__Ca_sr / var_parameters__Kmr), var_parameters__hillSRCaP)); // mM_per_msec + const double var_parameters__kiCa = 0.5; // per_mM_per_msec + const double var_SR_Fluxes__kiSRCa = var_SR_Fluxes__kCaSR * var_parameters__kiCa; // per_mM_per_msec + const double var_parameters__kim = 0.0050000000000000001; // per_msec + const double var_parameters__koCa = 10; // per_mM2_per_msec + const double var_SR_Fluxes__koSRCa = var_parameters__koCa / var_SR_Fluxes__kCaSR; // per_mM2_per_msec + const double var_parameters__koff_cam = 0.23799999999999999; // per_msec + const double var_parameters__koff_csqn = 65; // per_msec + const double var_parameters__koff_myoca = 0.00046000000000000001; // per_msec + const double var_parameters__koff_myomg = 5.7000000000000003e-5; // per_msec + const double var_parameters__koff_na = 0.001; // per_msec + const double var_parameters__koff_slh = 0.029999999999999999; // per_msec + const double var_parameters__koff_sll = 1.3; // per_msec + const double var_parameters__koff_sr = 0.059999999999999998; // per_msec + const double var_parameters__koff_tnchca = 3.1999999999999999e-5; // per_msec + const double var_parameters__koff_tnchmg = 0.0033300000000000001; // per_msec + const double var_parameters__koff_tncl = 0.019599999999999999; // per_msec + const double var_parameters__kom = 0.059999999999999998; // per_msec + const double d_dt_chaste_interface_var_SR_Fluxes__Ry_Ri = -var_chaste_interface__SR_Fluxes__Ry_Ri * var_parameters__kim - var_chaste_interface__SR_Fluxes__Ry_Ri * var_parameters__kom + pow(var_chaste_interface__Ca_Concentrations__Ca_j, 2) * var_SR_Fluxes__RI * var_SR_Fluxes__koSRCa + var_chaste_interface__Ca_Concentrations__Ca_j * var_chaste_interface__SR_Fluxes__Ry_Ro * var_SR_Fluxes__kiSRCa; // mM / msec + const double d_dt_chaste_interface_var_SR_Fluxes__Ry_Ro = var_chaste_interface__SR_Fluxes__Ry_Ri * var_parameters__kim - var_chaste_interface__SR_Fluxes__Ry_Ro * var_parameters__kom + pow(var_chaste_interface__Ca_Concentrations__Ca_j, 2) * var_chaste_interface__SR_Fluxes__Ry_Rr * var_SR_Fluxes__koSRCa - var_chaste_interface__Ca_Concentrations__Ca_j * var_chaste_interface__SR_Fluxes__Ry_Ro * var_SR_Fluxes__kiSRCa; // mM / msec + const double d_dt_chaste_interface_var_SR_Fluxes__Ry_Rr = var_SR_Fluxes__RI * var_parameters__kim + var_chaste_interface__SR_Fluxes__Ry_Ro * var_parameters__kom - pow(var_chaste_interface__Ca_Concentrations__Ca_j, 2) * var_chaste_interface__SR_Fluxes__Ry_Rr * var_SR_Fluxes__koSRCa - var_chaste_interface__Ca_Concentrations__Ca_j * var_chaste_interface__SR_Fluxes__Ry_Rr * var_SR_Fluxes__kiSRCa; // mM / msec + const double var_parameters__kon_cam = 34; // per_mM_per_msec + const double d_dt_chaste_interface_var_Cytosolic_Ca_Buffers__CaM = -var_chaste_interface__Cytosolic_Ca_Buffers__CaM * var_parameters__koff_cam + (-var_chaste_interface__Cytosolic_Ca_Buffers__CaM + var_parameters__Bmax_CaM) * var_chaste_interface__Ca_Concentrations__Ca_i * var_parameters__kon_cam; // mM / msec + const double var_parameters__kon_csqn = 100; // per_mM_per_msec + const double d_dt_chaste_interface_var_SR_Ca_Concentrations__Csqn_b = -var_chaste_interface__SR_Ca_Concentrations__Csqn_b * var_parameters__koff_csqn + (-var_chaste_interface__SR_Ca_Concentrations__Csqn_b + var_parameters__Bmax_Csqn) * var_chaste_interface__SR_Ca_Concentrations__Ca_sr * var_parameters__kon_csqn; // mM / msec + const double var_parameters__kon_myoca = 13.800000000000001; // per_mM_per_msec + const double d_dt_chaste_interface_var_Cytosolic_Ca_Buffers__Myo_c = -var_chaste_interface__Cytosolic_Ca_Buffers__Myo_c * var_parameters__koff_myoca + (-var_chaste_interface__Cytosolic_Ca_Buffers__Myo_c - var_chaste_interface__Cytosolic_Ca_Buffers__Myo_m + var_parameters__Bmax_myosin) * var_chaste_interface__Ca_Concentrations__Ca_i * var_parameters__kon_myoca; // mM / msec + const double var_parameters__kon_myomg = 0.015699999999999999; // per_mM_per_msec + const double d_dt_chaste_interface_var_Cytosolic_Ca_Buffers__Myo_m = -var_chaste_interface__Cytosolic_Ca_Buffers__Myo_m * var_parameters__koff_myomg + (-var_chaste_interface__Cytosolic_Ca_Buffers__Myo_c - var_chaste_interface__Cytosolic_Ca_Buffers__Myo_m + var_parameters__Bmax_myosin) * var_parameters__Mgi * var_parameters__kon_myomg; // mM / msec + const double var_parameters__kon_na = 0.0001; // per_mM_per_msec + const double var_Na_Buffers__dNa_Bj_dt = -var_chaste_interface__Na_Buffers__Na_Bj * var_parameters__koff_na + (-var_chaste_interface__Na_Buffers__Na_Bj + var_parameters__Bmax_Naj) * var_chaste_interface__Na_Concentrations__Na_j * var_parameters__kon_na; // mM_per_msec + const double d_dt_chaste_interface_var_Na_Buffers__Na_Bj = var_Na_Buffers__dNa_Bj_dt; // mM / msec + const double var_Na_Buffers__dNa_Bsl_dt = -var_chaste_interface__Na_Buffers__Na_Bsl * var_parameters__koff_na + (-var_chaste_interface__Na_Buffers__Na_Bsl + var_parameters__Bmax_Nasl) * var_chaste_interface__Na_Concentrations__Na_sl * var_parameters__kon_na; // mM_per_msec + const double d_dt_chaste_interface_var_Na_Buffers__Na_Bsl = var_Na_Buffers__dNa_Bsl_dt; // mM / msec + const double var_parameters__kon_slh = 100; // per_mM_per_msec + const double d_dt_chaste_interface_var_Junctional_and_SL_Ca_Buffers__SLH_j = -var_chaste_interface__Junctional_and_SL_Ca_Buffers__SLH_j * var_parameters__koff_slh + (-var_chaste_interface__Junctional_and_SL_Ca_Buffers__SLH_j + var_parameters__Bmax_SLhighj) * var_chaste_interface__Ca_Concentrations__Ca_j * var_parameters__kon_slh; // mM / msec + const double d_dt_chaste_interface_var_Junctional_and_SL_Ca_Buffers__SLH_sl = -var_chaste_interface__Junctional_and_SL_Ca_Buffers__SLH_sl * var_parameters__koff_slh + (-var_chaste_interface__Junctional_and_SL_Ca_Buffers__SLH_sl + var_parameters__Bmax_SLhighsl) * var_chaste_interface__Ca_Concentrations__Ca_sl * var_parameters__kon_slh; // mM / msec + const double var_parameters__kon_sll = 100; // per_mM_per_msec + const double d_dt_chaste_interface_var_Junctional_and_SL_Ca_Buffers__SLL_j = -var_chaste_interface__Junctional_and_SL_Ca_Buffers__SLL_j * var_parameters__koff_sll + (-var_chaste_interface__Junctional_and_SL_Ca_Buffers__SLL_j + var_parameters__Bmax_SLlowj) * var_chaste_interface__Ca_Concentrations__Ca_j * var_parameters__kon_sll; // mM / msec + const double d_dt_chaste_interface_var_Junctional_and_SL_Ca_Buffers__SLL_sl = -var_chaste_interface__Junctional_and_SL_Ca_Buffers__SLL_sl * var_parameters__koff_sll + (-var_chaste_interface__Junctional_and_SL_Ca_Buffers__SLL_sl + var_parameters__Bmax_SLlowsl) * var_chaste_interface__Ca_Concentrations__Ca_sl * var_parameters__kon_sll; // mM / msec + const double var_Junctional_and_SL_Ca_Buffers__J_CaB_junction = -var_chaste_interface__Junctional_and_SL_Ca_Buffers__SLH_j * var_parameters__koff_slh - var_chaste_interface__Junctional_and_SL_Ca_Buffers__SLL_j * var_parameters__koff_sll + (-var_chaste_interface__Junctional_and_SL_Ca_Buffers__SLH_j + var_parameters__Bmax_SLhighj) * var_chaste_interface__Ca_Concentrations__Ca_j * var_parameters__kon_slh + (-var_chaste_interface__Junctional_and_SL_Ca_Buffers__SLL_j + var_parameters__Bmax_SLlowj) * var_chaste_interface__Ca_Concentrations__Ca_j * var_parameters__kon_sll; // mM_per_msec + const double var_Junctional_and_SL_Ca_Buffers__J_CaB_sl = -var_chaste_interface__Junctional_and_SL_Ca_Buffers__SLH_sl * var_parameters__koff_slh - var_chaste_interface__Junctional_and_SL_Ca_Buffers__SLL_sl * var_parameters__koff_sll + (-var_chaste_interface__Junctional_and_SL_Ca_Buffers__SLH_sl + var_parameters__Bmax_SLhighsl) * var_chaste_interface__Ca_Concentrations__Ca_sl * var_parameters__kon_slh + (-var_chaste_interface__Junctional_and_SL_Ca_Buffers__SLL_sl + var_parameters__Bmax_SLlowsl) * var_chaste_interface__Ca_Concentrations__Ca_sl * var_parameters__kon_sll; // mM_per_msec + const double var_parameters__kon_sr = 100; // per_mM_per_msec + const double d_dt_chaste_interface_var_Cytosolic_Ca_Buffers__SRB = -var_chaste_interface__Cytosolic_Ca_Buffers__SRB * var_parameters__koff_sr + (-var_chaste_interface__Cytosolic_Ca_Buffers__SRB + var_parameters__Bmax_SR) * var_chaste_interface__Ca_Concentrations__Ca_i * var_parameters__kon_sr; // mM / msec + const double var_parameters__kon_tnchca = 2.3700000000000001; // per_mM_per_msec + const double d_dt_chaste_interface_var_Cytosolic_Ca_Buffers__Tn_CHc = -var_chaste_interface__Cytosolic_Ca_Buffers__Tn_CHc * var_parameters__koff_tnchca + (-var_chaste_interface__Cytosolic_Ca_Buffers__Tn_CHc - var_chaste_interface__Cytosolic_Ca_Buffers__Tn_CHm + var_parameters__Bmax_TnChigh) * var_chaste_interface__Ca_Concentrations__Ca_i * var_parameters__kon_tnchca; // mM / msec + const double var_parameters__kon_tnchmg = 0.0030000000000000001; // per_mM_per_msec + const double d_dt_chaste_interface_var_Cytosolic_Ca_Buffers__Tn_CHm = -var_chaste_interface__Cytosolic_Ca_Buffers__Tn_CHm * var_parameters__koff_tnchmg + (-var_chaste_interface__Cytosolic_Ca_Buffers__Tn_CHc - var_chaste_interface__Cytosolic_Ca_Buffers__Tn_CHm + var_parameters__Bmax_TnChigh) * var_parameters__Mgi * var_parameters__kon_tnchmg; // mM / msec + const double var_parameters__kon_tncl = 32.700000000000003; // per_mM_per_msec + const double var_Cytosolic_Ca_Buffers__J_CaB_cytosol = -var_chaste_interface__Cytosolic_Ca_Buffers__CaM * var_parameters__koff_cam - var_chaste_interface__Cytosolic_Ca_Buffers__Myo_c * var_parameters__koff_myoca - var_chaste_interface__Cytosolic_Ca_Buffers__Myo_m * var_parameters__koff_myomg - var_chaste_interface__Cytosolic_Ca_Buffers__SRB * var_parameters__koff_sr - var_chaste_interface__Cytosolic_Ca_Buffers__Tn_CHc * var_parameters__koff_tnchca - var_chaste_interface__Cytosolic_Ca_Buffers__Tn_CHm * var_parameters__koff_tnchmg - var_chaste_interface__Cytosolic_Ca_Buffers__Tn_CL * var_parameters__koff_tncl + (-var_chaste_interface__Cytosolic_Ca_Buffers__CaM + var_parameters__Bmax_CaM) * var_chaste_interface__Ca_Concentrations__Ca_i * var_parameters__kon_cam + (-var_chaste_interface__Cytosolic_Ca_Buffers__SRB + var_parameters__Bmax_SR) * var_chaste_interface__Ca_Concentrations__Ca_i * var_parameters__kon_sr + (-var_chaste_interface__Cytosolic_Ca_Buffers__Tn_CL + var_parameters__Bmax_TnClow) * var_chaste_interface__Ca_Concentrations__Ca_i * var_parameters__kon_tncl + (-var_chaste_interface__Cytosolic_Ca_Buffers__Myo_c - var_chaste_interface__Cytosolic_Ca_Buffers__Myo_m + var_parameters__Bmax_myosin) * var_chaste_interface__Ca_Concentrations__Ca_i * var_parameters__kon_myoca + (-var_chaste_interface__Cytosolic_Ca_Buffers__Myo_c - var_chaste_interface__Cytosolic_Ca_Buffers__Myo_m + var_parameters__Bmax_myosin) * var_parameters__Mgi * var_parameters__kon_myomg + (-var_chaste_interface__Cytosolic_Ca_Buffers__Tn_CHc - var_chaste_interface__Cytosolic_Ca_Buffers__Tn_CHm + var_parameters__Bmax_TnChigh) * var_chaste_interface__Ca_Concentrations__Ca_i * var_parameters__kon_tnchca + (-var_chaste_interface__Cytosolic_Ca_Buffers__Tn_CHc - var_chaste_interface__Cytosolic_Ca_Buffers__Tn_CHm + var_parameters__Bmax_TnChigh) * var_parameters__Mgi * var_parameters__kon_tnchmg; // mM_per_msec + const double d_dt_chaste_interface_var_Ca_Concentrations__Ca_i = -var_Cytosolic_Ca_Buffers__J_CaB_cytosol + (-var_chaste_interface__Ca_Concentrations__Ca_i + var_chaste_interface__Ca_Concentrations__Ca_sl) * var_parameters__J_ca_slmyo / var_parameters__Vmyo - var_SR_Fluxes__J_serca * var_parameters__Vsr / var_parameters__Vmyo; // mM / msec + const double d_dt_chaste_interface_var_Cytosolic_Ca_Buffers__Tn_CL = -var_chaste_interface__Cytosolic_Ca_Buffers__Tn_CL * var_parameters__koff_tncl + (-var_chaste_interface__Cytosolic_Ca_Buffers__Tn_CL + var_parameters__Bmax_TnClow) * var_chaste_interface__Ca_Concentrations__Ca_i * var_parameters__kon_tncl; // mM / msec + const double var_SR_Fluxes__J_SRCarel = (-var_chaste_interface__Ca_Concentrations__Ca_j + var_chaste_interface__SR_Ca_Concentrations__Ca_sr) * var_chaste_interface__SR_Fluxes__Ry_Ro * mParameters[1]; // mM_per_msec + const double d_dt_chaste_interface_var_SR_Ca_Concentrations__Ca_sr = -var_SR_Fluxes__J_SRCarel + var_chaste_interface__SR_Ca_Concentrations__Csqn_b * var_parameters__koff_csqn - var_SR_Fluxes__J_SRleak * var_parameters__Vmyo / var_parameters__Vsr - (-var_chaste_interface__SR_Ca_Concentrations__Csqn_b + var_parameters__Bmax_Csqn) * var_chaste_interface__SR_Ca_Concentrations__Ca_sr * var_parameters__kon_csqn + var_SR_Fluxes__J_serca; // mM / msec + const double var_parameters__ksat = 0.32000000000000001; // dimensionless + const double var_parameters__nu = 0.27000000000000002; // dimensionless + const double var_I_NCX__s1_junc = pow(var_chaste_interface__Na_Concentrations__Na_j, 3) * mParameters[5] * exp(var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT * var_parameters__nu); // mM4 + const double var_I_NCX__s1_sl = pow(var_chaste_interface__Na_Concentrations__Na_sl, 3) * mParameters[5] * exp(var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT * var_parameters__nu); // mM4 + const double var_I_NCX__s2_junc = pow(mParameters[8], 3) * var_chaste_interface__Ca_Concentrations__Ca_j * exp((-1 + var_parameters__nu) * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT); // mM4 + const double var_I_NCX__I_ncx_junc = pow(var_parameters__Q10NCX, var_parameters__Qpow) * (-var_I_NCX__s2_junc + var_I_NCX__s1_junc) * var_I_NCX__Ka_junc * var_parameters__Fjunc * mParameters[20] / ((1 + var_parameters__ksat * exp((-1 + var_parameters__nu) * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT)) * var_I_NCX__s3_junc); // uA_per_uF + const double var_I_NCX__s2_sl = pow(mParameters[8], 3) * var_chaste_interface__Ca_Concentrations__Ca_sl * exp((-1 + var_parameters__nu) * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT); // mM4 + const double var_I_NCX__I_ncx_sl = pow(var_parameters__Q10NCX, var_parameters__Qpow) * (-var_I_NCX__s2_sl + var_I_NCX__s1_sl) * var_I_NCX__Ka_sl * var_parameters__Fsl * mParameters[20] / ((1 + var_parameters__ksat * exp((-1 + var_parameters__nu) * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT)) * var_I_NCX__s3_sl); // uA_per_uF + const double var_parameters__pCa = 0.00054000000000000001 * mParameters[11]; // cm_per_sec + const double var_I_Ca__ibarca_j = 4 * (-0.34100000000000003 * mParameters[5] + 0.34100000000000003 * var_chaste_interface__Ca_Concentrations__Ca_j * exp(2 * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT)) * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT * mParameters[9] * var_parameters__pCa / (-1 + exp(2 * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT)); // uA_per_uF + const double var_I_Ca__I_Ca_junc = 0.45000000000000001 * pow(var_parameters__Q10CaL, var_parameters__Qpow) * (1 - var_chaste_interface__I_Ca__f_Ca_Bj + var_I_Ca__fcaCaj) * var_chaste_interface__I_Ca__d * var_chaste_interface__I_Ca__f * var_I_Ca__ibarca_j * var_parameters__Fjunc_CaL; // uA_per_uF + const double var_Ca_Concentrations__I_Ca_tot_junc = -2 * var_I_NCX__I_ncx_junc + var_I_Ca__I_Ca_junc + var_I_CaBK__I_cabk_junc + var_I_PCa__I_pca_junc; // uA_per_uF + const double d_dt_chaste_interface_var_Ca_Concentrations__Ca_j = -var_Junctional_and_SL_Ca_Buffers__J_CaB_junction + (-var_chaste_interface__Ca_Concentrations__Ca_j + var_chaste_interface__Ca_Concentrations__Ca_sl) * var_parameters__J_ca_juncsl / var_parameters__Vjunc + var_SR_Fluxes__J_SRCarel * var_parameters__Vsr / var_parameters__Vjunc + var_SR_Fluxes__J_SRleak * var_parameters__Vmyo / var_parameters__Vjunc - 0.5 * var_Ca_Concentrations__I_Ca_tot_junc * mParameters[22] / (mParameters[9] * var_parameters__Vjunc); // mM / msec + const double var_I_Ca__ibarca_sl = 4 * (-0.34100000000000003 * mParameters[5] + 0.34100000000000003 * var_chaste_interface__Ca_Concentrations__Ca_sl * exp(2 * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT)) * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT * mParameters[9] * var_parameters__pCa / (-1 + exp(2 * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT)); // uA_per_uF + const double var_I_Ca__I_Ca_sl = 0.45000000000000001 * pow(var_parameters__Q10CaL, var_parameters__Qpow) * (1 - var_chaste_interface__I_Ca__f_Ca_Bsl + var_I_Ca__fcaCaMSL) * var_chaste_interface__I_Ca__d * var_chaste_interface__I_Ca__f * var_I_Ca__ibarca_sl * var_parameters__Fsl_CaL; // uA_per_uF + const double var_Ca_Concentrations__I_Ca_tot_sl = -2 * var_I_NCX__I_ncx_sl + var_I_Ca__I_Ca_sl + var_I_CaBK__I_cabk_sl + var_I_PCa__I_pca_sl; // uA_per_uF + const double d_dt_chaste_interface_var_Ca_Concentrations__Ca_sl = -var_Junctional_and_SL_Ca_Buffers__J_CaB_sl + (-var_chaste_interface__Ca_Concentrations__Ca_sl + var_chaste_interface__Ca_Concentrations__Ca_i) * var_parameters__J_ca_slmyo / var_parameters__Vsl + (-var_chaste_interface__Ca_Concentrations__Ca_sl + var_chaste_interface__Ca_Concentrations__Ca_j) * var_parameters__J_ca_juncsl / var_parameters__Vsl - 0.5 * var_Ca_Concentrations__I_Ca_tot_sl * mParameters[22] / (mParameters[9] * var_parameters__Vsl); // mM / msec + const double var_parameters__pNa = 7.4999999999999993e-9; // cm_per_sec + const double var_I_Ca__ibarna_j = (-0.75 * mParameters[8] + 0.75 * var_chaste_interface__Na_Concentrations__Na_j * exp(var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT)) * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT * mParameters[9] * var_parameters__pNa / (-1 + exp(var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT)); // uA_per_uF + const double var_I_Ca__I_CaNa_junc = 0.45000000000000001 * pow(var_parameters__Q10CaL, var_parameters__Qpow) * (1 - var_chaste_interface__I_Ca__f_Ca_Bj + var_I_Ca__fcaCaj) * var_chaste_interface__I_Ca__d * var_chaste_interface__I_Ca__f * var_I_Ca__ibarna_j * var_parameters__Fjunc_CaL; // uA_per_uF + const double var_I_Ca__ibarna_sl = (-0.75 * mParameters[8] + 0.75 * var_chaste_interface__Na_Concentrations__Na_sl * exp(var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT)) * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT * mParameters[9] * var_parameters__pNa / (-1 + exp(var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT)); // uA_per_uF + const double var_I_Ca__I_CaNa_sl = 0.45000000000000001 * pow(var_parameters__Q10CaL, var_parameters__Qpow) * (1 - var_chaste_interface__I_Ca__f_Ca_Bsl + var_I_Ca__fcaCaMSL) * var_chaste_interface__I_Ca__d * var_chaste_interface__I_Ca__f * var_I_Ca__ibarna_sl * var_parameters__Fsl_CaL; // uA_per_uF + const double var_Na_Concentrations__I_Na_tot_junc = 3 * var_I_NCX__I_ncx_junc + 3 * var_I_NaK__I_nak_junc + var_I_Ca__I_CaNa_junc + var_I_Na__I_Na_junc + var_I_NaBK__I_nabk_junc; // uA_per_uF + const double d_dt_chaste_interface_var_Na_Concentrations__Na_j = (-var_Na_Buffers__dNa_Bj_dt + (-var_chaste_interface__Na_Concentrations__Na_j + var_chaste_interface__Na_Concentrations__Na_sl) * var_parameters__J_na_juncsl / var_parameters__Vjunc - var_Na_Concentrations__I_Na_tot_junc * mParameters[22] / (mParameters[9] * var_parameters__Vjunc)) * mParameters[3]; // mM / msec + const double var_Na_Concentrations__I_Na_tot_sl = 3 * var_I_NCX__I_ncx_sl + 3 * var_I_NaK__I_nak_sl + var_I_Ca__I_CaNa_sl + var_I_Na__I_Na_sl + var_I_NaBK__I_nabk_sl; // uA_per_uF + const double d_dt_chaste_interface_var_Na_Concentrations__Na_sl = (-var_Na_Buffers__dNa_Bsl_dt + (-var_chaste_interface__Na_Concentrations__Na_sl + var_chaste_interface__Na_Concentrations__Na_i) * var_parameters__J_na_slmyo / var_parameters__Vsl + (-var_chaste_interface__Na_Concentrations__Na_sl + var_chaste_interface__Na_Concentrations__Na_j) * var_parameters__J_na_juncsl / var_parameters__Vsl - var_Na_Concentrations__I_Na_tot_sl * mParameters[22] / (mParameters[9] * var_parameters__Vsl)) * mParameters[3]; // mM / msec + + rResidual[0] = rCurrentGuess[0] - rY[1] - mDt*d_dt_chaste_interface_var_Ca_Concentrations__Ca_i; + rResidual[10] = rCurrentGuess[10] - rY[13] - mDt*d_dt_chaste_interface_var_I_Ca__f_Ca_Bj; + rResidual[11] = rCurrentGuess[11] - rY[14] - mDt*d_dt_chaste_interface_var_I_Ca__f_Ca_Bsl; + rResidual[26] = rCurrentGuess[26] - rY[15] - mDt*d_dt_chaste_interface_var_SR_Fluxes__Ry_Rr; + rResidual[25] = rCurrentGuess[25] - rY[16] - mDt*d_dt_chaste_interface_var_SR_Fluxes__Ry_Ro; + rResidual[24] = rCurrentGuess[24] - rY[17] - mDt*d_dt_chaste_interface_var_SR_Fluxes__Ry_Ri; + rResidual[17] = rCurrentGuess[17] - rY[18] - mDt*d_dt_chaste_interface_var_Na_Buffers__Na_Bj; + rResidual[18] = rCurrentGuess[18] - rY[19] - mDt*d_dt_chaste_interface_var_Na_Buffers__Na_Bsl; + rResidual[9] = rCurrentGuess[9] - rY[20] - mDt*d_dt_chaste_interface_var_Cytosolic_Ca_Buffers__Tn_CL; + rResidual[7] = rCurrentGuess[7] - rY[21] - mDt*d_dt_chaste_interface_var_Cytosolic_Ca_Buffers__Tn_CHc; + rResidual[8] = rCurrentGuess[8] - rY[22] - mDt*d_dt_chaste_interface_var_Cytosolic_Ca_Buffers__Tn_CHm; + rResidual[3] = rCurrentGuess[3] - rY[23] - mDt*d_dt_chaste_interface_var_Cytosolic_Ca_Buffers__CaM; + rResidual[4] = rCurrentGuess[4] - rY[24] - mDt*d_dt_chaste_interface_var_Cytosolic_Ca_Buffers__Myo_c; + rResidual[5] = rCurrentGuess[5] - rY[25] - mDt*d_dt_chaste_interface_var_Cytosolic_Ca_Buffers__Myo_m; + rResidual[6] = rCurrentGuess[6] - rY[26] - mDt*d_dt_chaste_interface_var_Cytosolic_Ca_Buffers__SRB; + rResidual[14] = rCurrentGuess[14] - rY[27] - mDt*d_dt_chaste_interface_var_Junctional_and_SL_Ca_Buffers__SLL_j; + rResidual[15] = rCurrentGuess[15] - rY[28] - mDt*d_dt_chaste_interface_var_Junctional_and_SL_Ca_Buffers__SLL_sl; + rResidual[12] = rCurrentGuess[12] - rY[29] - mDt*d_dt_chaste_interface_var_Junctional_and_SL_Ca_Buffers__SLH_j; + rResidual[13] = rCurrentGuess[13] - rY[30] - mDt*d_dt_chaste_interface_var_Junctional_and_SL_Ca_Buffers__SLH_sl; + rResidual[23] = rCurrentGuess[23] - rY[31] - mDt*d_dt_chaste_interface_var_SR_Ca_Concentrations__Csqn_b; + rResidual[22] = rCurrentGuess[22] - rY[32] - mDt*d_dt_chaste_interface_var_SR_Ca_Concentrations__Ca_sr; + rResidual[20] = rCurrentGuess[20] - rY[33] - mDt*d_dt_chaste_interface_var_Na_Concentrations__Na_j; + rResidual[21] = rCurrentGuess[21] - rY[34] - mDt*d_dt_chaste_interface_var_Na_Concentrations__Na_sl; + rResidual[19] = rCurrentGuess[19] - rY[35] - mDt*d_dt_chaste_interface_var_Na_Concentrations__Na_i; + rResidual[16] = rCurrentGuess[16] - rY[36] - mDt*d_dt_chaste_interface_var_K_Concentration__K_i; + rResidual[1] = rCurrentGuess[1] - rY[37] - mDt*d_dt_chaste_interface_var_Ca_Concentrations__Ca_j; + rResidual[2] = rCurrentGuess[2] - rY[38] - mDt*d_dt_chaste_interface_var_Ca_Concentrations__Ca_sl; + } + + void Cellgrandi_pasqualini_bers_2010_ssFromCellMLBackwardEuler::ComputeJacobian(double var_chaste_interface__environment__time, const double rCurrentGuess[27], double rJacobian[27][27]) + { + std::vector& rY = rGetStateVariables(); + double var_chaste_interface__membrane_potential__V_m = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: mV; Initial value: -81.4229700631461 + double var_chaste_interface__I_Na__m = rY[2]; + // Units: dimensionless; Initial value: 0.00381858135062259 + double var_chaste_interface__I_Na__h = rY[3]; + // Units: dimensionless; Initial value: 0.625086621635645 + double var_chaste_interface__I_Na__j = rY[4]; + // Units: dimensionless; Initial value: 0.62332507235506 + double var_chaste_interface__I_Ca__d = rY[11]; + // Units: dimensionless; Initial value: 2.93982287251302e-06 + double var_chaste_interface__I_Ca__f = rY[12]; + // Units: dimensionless; Initial value: 0.99511673495949 + + double var_chaste_interface__Ca_Concentrations__Ca_i = rCurrentGuess[0]; + double var_chaste_interface__Ca_Concentrations__Ca_j = rCurrentGuess[1]; + double var_chaste_interface__Ca_Concentrations__Ca_sl = rCurrentGuess[2]; + double var_chaste_interface__Cytosolic_Ca_Buffers__CaM = rCurrentGuess[3]; + double var_chaste_interface__Cytosolic_Ca_Buffers__Myo_c = rCurrentGuess[4]; + double var_chaste_interface__Cytosolic_Ca_Buffers__Myo_m = rCurrentGuess[5]; + double var_chaste_interface__Cytosolic_Ca_Buffers__SRB = rCurrentGuess[6]; + double var_chaste_interface__Cytosolic_Ca_Buffers__Tn_CHc = rCurrentGuess[7]; + double var_chaste_interface__Cytosolic_Ca_Buffers__Tn_CHm = rCurrentGuess[8]; + double var_chaste_interface__Cytosolic_Ca_Buffers__Tn_CL = rCurrentGuess[9]; + double var_chaste_interface__I_Ca__f_Ca_Bj = rCurrentGuess[10]; + double var_chaste_interface__I_Ca__f_Ca_Bsl = rCurrentGuess[11]; + double var_chaste_interface__Junctional_and_SL_Ca_Buffers__SLH_j = rCurrentGuess[12]; + double var_chaste_interface__Junctional_and_SL_Ca_Buffers__SLH_sl = rCurrentGuess[13]; + double var_chaste_interface__Junctional_and_SL_Ca_Buffers__SLL_j = rCurrentGuess[14]; + double var_chaste_interface__Junctional_and_SL_Ca_Buffers__SLL_sl = rCurrentGuess[15]; + double var_chaste_interface__Na_Buffers__Na_Bj = rCurrentGuess[17]; + double var_chaste_interface__Na_Buffers__Na_Bsl = rCurrentGuess[18]; + double var_chaste_interface__Na_Concentrations__Na_j = rCurrentGuess[20]; + double var_chaste_interface__Na_Concentrations__Na_sl = rCurrentGuess[21]; + double var_chaste_interface__SR_Ca_Concentrations__Ca_sr = rCurrentGuess[22]; + double var_chaste_interface__SR_Ca_Concentrations__Csqn_b = rCurrentGuess[23]; + double var_chaste_interface__SR_Fluxes__Ry_Ri = rCurrentGuess[24]; + double var_chaste_interface__SR_Fluxes__Ry_Ro = rCurrentGuess[25]; + double var_chaste_interface__SR_Fluxes__Ry_Rr = rCurrentGuess[26]; + + const double var_x0 = 34 * var_chaste_interface__Cytosolic_Ca_Buffers__CaM; + const double var_x1 = 100 * var_chaste_interface__Cytosolic_Ca_Buffers__SRB; + const double var_x2 = 32.700000000000003 * var_chaste_interface__Cytosolic_Ca_Buffers__Tn_CL; + const double var_x3 = 1 / M_PI; + const double var_x4 = 0.4794655196082917 * var_x3; + const double var_x5 = pow(var_chaste_interface__Ca_Concentrations__Ca_i, 0.78699999999999992); + const double var_x6 = pow(var_chaste_interface__SR_Ca_Concentrations__Ca_sr, 1.7869999999999999); + const double var_x7 = 0.38742512113256738 * var_x6; + const double var_x8 = pow(var_chaste_interface__Ca_Concentrations__Ca_i, 1.7869999999999999); + const double var_x9 = 2814485.1633595936 * var_x8; + const double var_x10 = 1 / (1 + var_x7 + var_x9); + const double var_x11 = -31 + 0.10000000000000001 * mParameters[23]; + const double var_x12 = pow(2.6000000000000001, var_x11); + const double var_x13 = var_x12 * mParameters[2]; + const double var_x14 = var_x10 * var_x13; + const double var_x15 = var_x13 * (var_x9 - var_x7) / pow((3.5530476870814998e-7 + var_x8 + 1.3765399305573384e-7 * var_x6), 2); + const double var_x16 = var_x15 * var_x5; + const double var_x17 = 13.800000000000001 * var_chaste_interface__Cytosolic_Ca_Buffers__Myo_c + 13.800000000000001 * var_chaste_interface__Cytosolic_Ca_Buffers__Myo_m; + const double var_x18 = 2.3700000000000001 * var_chaste_interface__Cytosolic_Ca_Buffers__Tn_CHc + 2.3700000000000001 * var_chaste_interface__Cytosolic_Ca_Buffers__Tn_CHm; + const double var_x19 = 0.23799999999999999 + 34 * var_chaste_interface__Ca_Concentrations__Ca_i; + const double var_x20 = 13.800000000000001 * var_chaste_interface__Ca_Concentrations__Ca_i; + const double var_x21 = 0.059999999999999998 + 100 * var_chaste_interface__Ca_Concentrations__Ca_i; + const double var_x22 = 2.3700000000000001 * var_chaste_interface__Ca_Concentrations__Ca_i; + const double var_x23 = 0.019599999999999999 + 32.700000000000003 * var_chaste_interface__Ca_Concentrations__Ca_i; + const double var_x24 = pow(var_chaste_interface__SR_Ca_Concentrations__Ca_sr, 0.78699999999999992); + const double var_x25 = var_x14 * var_x24; + const double var_x26 = var_x15 * var_x24; + const double var_x27 = 145.53224458892851 * var_x3; + const double var_x28 = 100 * var_chaste_interface__Junctional_and_SL_Ca_Buffers__SLH_j; + const double var_x29 = 100 * var_chaste_interface__Junctional_and_SL_Ca_Buffers__SLL_j; + const double var_x30 = 5.2281977629563632e-6 + pow(var_chaste_interface__Ca_Concentrations__Ca_j, 1.6000000000000001); + const double var_x31 = pow(2.3500000000000001, var_x11); + const double var_x32 = 0.011844800000000001 * var_x31; + const double var_x33 = 1 / mParameters[9]; + const double var_x34 = var_x33 * mParameters[10] * mParameters[23]; + const double var_x35 = var_chaste_interface__membrane_potential__V_m / (mParameters[10] * mParameters[23]); + const double var_x36 = var_x35 * mParameters[9]; + const double var_x37 = exp(-0.72999999999999998 * var_x36); + const double var_x38 = pow(mParameters[8], 3); + const double var_x39 = var_x37 * var_x38; + const double var_x40 = pow(var_chaste_interface__Na_Concentrations__Na_j, 3); + const double var_x41 = var_x40 * mParameters[5]; + const double var_x42 = var_x38 * var_chaste_interface__Ca_Concentrations__Ca_j; + const double var_x43 = (1 + 278.55153203342621 * var_chaste_interface__Ca_Concentrations__Ca_j) * var_chaste_interface__Ca_Concentrations__Ca_j; + const double var_x44 = var_x38 * (1 + 0.00053869674493876331 * var_x40); + const double var_x45 = 1 / (var_x41 + var_x42 + 669921.875 * var_x43 + 1.3 * var_x40 + 0.0035899999999999999 * var_x44); + const double var_x46 = pow(var_chaste_interface__Ca_Concentrations__Ca_j, 2); + const double var_x47 = 1 + 2.2499999999999996e-8 / var_x46; + const double var_x48 = pow(1.5700000000000001, var_x11) * mParameters[20] / (1 + 0.32000000000000001 * var_x37); + const double var_x49 = var_x48 / var_x47; + const double var_x50 = var_x45 * var_x49; + const double var_x51 = var_x39 * var_x50; + const double var_x52 = 669921.875 + var_x38; + const double var_x53 = -var_x52 - 373215529.24791086 * var_chaste_interface__Ca_Concentrations__Ca_j; + const double var_x54 = exp(0.27000000000000002 * var_x36); + const double var_x55 = -var_x37 * var_x42 + var_x40 * var_x54 * mParameters[5]; + const double var_x56 = var_x49 * var_x55 / pow((var_x43 + 1.9405247813411081e-6 * var_x40 + 5.3588338192419823e-9 * var_x44 + 1.4927113702623908e-6 * var_x41 + 1.4927113702623908e-6 * var_x42), 2); + const double var_x57 = 4.9020119168033731e-13 * var_x56; + const double var_x58 = var_x45 * var_x48 * var_x55 / (pow(var_x47, 2) * pow(var_chaste_interface__Ca_Concentrations__Ca_j, 3)); + const double var_x59 = var_x35 * pow(mParameters[9], 2); + const double var_x60 = var_x59 * (1 - var_chaste_interface__I_Ca__f_Ca_Bj); + const double var_x61 = exp(2 * var_x36); + const double var_x62 = pow(1.8, var_x11) * var_chaste_interface__I_Ca__d * var_chaste_interface__I_Ca__f; + const double var_x63 = var_x62 * mParameters[11] / (-1 + var_x61); + const double var_x64 = var_x61 * var_x63; + const double var_x65 = var_x33 * mParameters[22]; + const double var_x66 = var_x3 * var_x65; + const double var_x67 = 88294470889864.781 * var_x66; + const double var_x68 = var_chaste_interface__SR_Fluxes__Ry_Ro * mParameters[1]; + const double var_x69 = 64.935064935064929 * var_x68 + 1205.9369202226344 * mParameters[0]; + const double var_x70 = -0.34100000000000003 * mParameters[5]; + const double var_x71 = 0.34100000000000003 * var_x61; + const double var_x72 = var_x36 * mParameters[22]; + const double var_x73 = var_x3 * var_x63 * var_x72; + const double var_x74 = 100 * var_chaste_interface__Ca_Concentrations__Ca_j; + const double var_x75 = 0.029999999999999999 + var_x74; + const double var_x76 = 1.3 + var_x74; + const double var_x77 = pow(var_chaste_interface__Na_Concentrations__Na_j, 2); + const double var_x78 = 3 * mParameters[5]; + const double var_x79 = 5.8017639429904805e-6 * var_x38; + const double var_x80 = -3.9000000000000004 * var_x77 - var_x77 * var_x78 - var_x77 * var_x79; + const double var_x81 = var_x54 * mParameters[5]; + const double var_x82 = var_x50 * var_x77 * var_x81; + const double var_x83 = 100 * var_chaste_interface__Junctional_and_SL_Ca_Buffers__SLH_sl; + const double var_x84 = 100 * var_chaste_interface__Junctional_and_SL_Ca_Buffers__SLL_sl; + const double var_x85 = 5.2281977629563632e-6 + pow(var_chaste_interface__Ca_Concentrations__Ca_sl, 1.6000000000000001); + const double var_x86 = 0.095835200000000009 * var_x31; + const double var_x87 = pow(var_chaste_interface__Na_Concentrations__Na_sl, 3); + const double var_x88 = var_x87 * mParameters[5]; + const double var_x89 = var_x38 * var_chaste_interface__Ca_Concentrations__Ca_sl; + const double var_x90 = (1 + 278.55153203342621 * var_chaste_interface__Ca_Concentrations__Ca_sl) * var_chaste_interface__Ca_Concentrations__Ca_sl; + const double var_x91 = var_x38 * (1 + 0.00053869674493876331 * var_x87); + const double var_x92 = 1 / (var_x88 + var_x89 + 669921.875 * var_x90 + 1.3 * var_x87 + 0.0035899999999999999 * var_x91); + const double var_x93 = 1 + 2.2499999999999996e-8 / pow(var_chaste_interface__Ca_Concentrations__Ca_sl, 2); + const double var_x94 = var_x48 / var_x93; + const double var_x95 = var_x92 * var_x94; + const double var_x96 = var_x39 * var_x95; + const double var_x97 = -var_x52 - 373215529.24791086 * var_chaste_interface__Ca_Concentrations__Ca_sl; + const double var_x98 = -var_x37 * var_x89 + var_x54 * var_x87 * mParameters[5]; + const double var_x99 = var_x94 * var_x98 / pow((var_x90 + 1.9405247813411081e-6 * var_x87 + 5.3588338192419823e-9 * var_x91 + 1.4927113702623908e-6 * var_x88 + 1.4927113702623908e-6 * var_x89), 2); + const double var_x100 = 3.9661732781409103e-12 * var_x99; + const double var_x101 = var_x48 * var_x92 * var_x98 / (pow(var_x93, 2) * pow(var_chaste_interface__Ca_Concentrations__Ca_sl, 3)); + const double var_x102 = var_x59 * (1 - var_chaste_interface__I_Ca__f_Ca_Bsl); + const double var_x103 = 2379535990481.856 * var_x66; + const double var_x104 = 100 * var_chaste_interface__Ca_Concentrations__Ca_sl; + const double var_x105 = 0.029999999999999999 + var_x104; + const double var_x106 = 1.3 + var_x104; + const double var_x107 = pow(var_chaste_interface__Na_Concentrations__Na_sl, 2); + const double var_x108 = -3.9000000000000004 * var_x107 - var_x107 * var_x78 - var_x107 * var_x79; + const double var_x109 = var_x107 * var_x81 * var_x95; + const double var_x110 = 0.001 + 0.0001 * var_chaste_interface__Na_Concentrations__Na_j; + const double var_x111 = 0.0001 * var_chaste_interface__Na_Buffers__Na_Bj; + const double var_x112 = 0.001 + 0.0001 * var_chaste_interface__Na_Concentrations__Na_sl; + const double var_x113 = 0.0001 * var_chaste_interface__Na_Buffers__Na_Bsl; + const double var_x114 = var_x3 * mParameters[3]; + const double var_x115 = 0.23994508763098885 * var_x114; + const double var_x116 = 7.3530178752050587e-13 * var_x56; + const double var_x117 = var_x114 * var_x65; + const double var_x118 = -0.75 * mParameters[8]; + const double var_x119 = exp(var_x36); + const double var_x120 = 0.75 * var_x119; + const double var_x121 = var_x62 / (-1 + var_x119); + const double var_x122 = var_x114 * var_x121 * var_x72; + const double var_x123 = 3.2338732908121872 * var_x3; + const double var_x124 = var_x34 / var_chaste_interface__Na_Concentrations__Na_j; + const double var_x125 = mParameters[21] * mParameters[7] / ((1.5 + mParameters[7]) * (1 + 0.1245 * exp(-0.10000000000000001 * var_x36) + 0.036499999999999998 * (-0.14285714285714285 + 0.14285714285714285 * exp(0.01485884101040119 * mParameters[8])) * exp(-var_x36))); + const double var_x126 = pow(var_chaste_interface__I_Na__m, 3) * var_chaste_interface__I_Na__h * var_chaste_interface__I_Na__j * mParameters[12]; + const double var_x127 = var_x119 * var_x121; + const double var_x128 = 5.9492599172113663e-12 * var_x99; + const double var_x129 = var_x34 / var_chaste_interface__Na_Concentrations__Na_sl; + const double var_x130 = var_x68 + 18.571428571428569 * mParameters[0]; + const double var_x131 = 100 * var_chaste_interface__SR_Ca_Concentrations__Csqn_b; + const double var_x132 = 65 + 100 * var_chaste_interface__SR_Ca_Concentrations__Ca_sr; + const double var_x133 = 1 / var_chaste_interface__SR_Ca_Concentrations__Ca_sr; + const double var_x134 = pow(var_x133, 2.5); + const double var_x135 = 1 + 0.13584112963311223 * var_x134; + const double var_x136 = 1 / var_x135; + const double var_x137 = 7.5 - 7 * var_x136; + const double var_x138 = 1 - var_chaste_interface__SR_Fluxes__Ry_Ri - var_chaste_interface__SR_Fluxes__Ry_Ro - var_chaste_interface__SR_Fluxes__Ry_Rr; + const double var_x139 = 1 / (15 - 14 * var_x136); + const double var_x140 = 20 * var_x139 * var_chaste_interface__Ca_Concentrations__Ca_j; + const double var_x141 = pow(var_x135, (-2)); + const double var_x142 = var_x133 * var_x134 * var_x141; + const double var_x143 = 2.3772197685794643 * var_x142 * var_chaste_interface__Ca_Concentrations__Ca_j * var_chaste_interface__SR_Fluxes__Ry_Ro; + const double var_x144 = 0.21130842387373014 * var_x142 * var_x46 / pow((1 - 0.93333333333333335 * var_x136), 2); + const double var_x145 = 10 * var_x139 * var_x46; + const double var_x146 = -var_x137; + const double var_x147 = var_x140 * var_chaste_interface__SR_Fluxes__Ry_Rr; + const double var_x148 = var_x144 * var_chaste_interface__SR_Fluxes__Ry_Rr; + + + rJacobian[0][0] = 1.0 - (mDt * (-7.0788000000000011 + var_x0 + var_x1 + var_x17 + var_x18 + var_x2 - var_x4 + 3.4188518090540365e-8 * var_x16 - 270818.42237280885 * var_x14 * var_x5)); + rJacobian[0][1] = 0.0; + rJacobian[0][2] = -(mDt * (var_x4)); + rJacobian[0][3] = -(mDt * (var_x19)); + rJacobian[0][4] = -(mDt * (0.016159999999999997 + var_x20)); + rJacobian[0][5] = -(mDt * (0.015757 + var_x20)); + rJacobian[0][6] = -(mDt * (var_x21)); + rJacobian[0][7] = -(mDt * (0.003032 + var_x22)); + rJacobian[0][8] = -(mDt * (0.0063300000000000006 + var_x22)); + rJacobian[0][9] = -(mDt * (var_x23)); + rJacobian[0][10] = 0.0; + rJacobian[0][11] = 0.0; + rJacobian[0][12] = 0.0; + rJacobian[0][13] = 0.0; + rJacobian[0][14] = 0.0; + rJacobian[0][15] = 0.0; + rJacobian[0][16] = 0.0; + rJacobian[0][17] = 0.0; + rJacobian[0][18] = 0.0; + rJacobian[0][19] = 0.0; + rJacobian[0][20] = 0.0; + rJacobian[0][21] = 0.0; + rJacobian[0][22] = -(mDt * (0.037279237232671424 * var_x25 + 4.7061860318210743e-15 * var_x26)); + rJacobian[0][23] = 0.0; + rJacobian[0][24] = 0.0; + rJacobian[0][25] = 0.0; + rJacobian[0][26] = 0.0; + rJacobian[1][0] = 0.0; + rJacobian[1][1] = 1.0 - (mDt * (-75.37105751391465 + var_x28 + var_x29 - var_x27 - var_x69 - var_x67 * (0.22 * var_x51 - 9.8999999999999977e-9 * var_x58 - var_x53 * var_x57 + 3.0321500000000001e-5 * var_x34 / var_chaste_interface__Ca_Concentrations__Ca_j + 0.00029830680000000003 * var_x60 * var_x64 + var_x32 * pow(var_chaste_interface__Ca_Concentrations__Ca_j, 0.60000000000000009) / var_x30 - var_x32 * pow(var_chaste_interface__Ca_Concentrations__Ca_j, 2.2000000000000002) / pow(var_x30, 2)))); + rJacobian[1][2] = -(mDt * (var_x27)); + rJacobian[1][3] = 0.0; + rJacobian[1][4] = 0.0; + rJacobian[1][5] = 0.0; + rJacobian[1][6] = 0.0; + rJacobian[1][7] = 0.0; + rJacobian[1][8] = 0.0; + rJacobian[1][9] = 0.0; + rJacobian[1][10] = -(mDt * (77240003134.453705 * var_x73 * (var_x70 + var_x71 * var_chaste_interface__Ca_Concentrations__Ca_j))); + rJacobian[1][11] = 0.0; + rJacobian[1][12] = -(mDt * (var_x75)); + rJacobian[1][13] = 0.0; + rJacobian[1][14] = -(mDt * (var_x76)); + rJacobian[1][15] = 0.0; + rJacobian[1][16] = 0.0; + rJacobian[1][17] = 0.0; + rJacobian[1][18] = 0.0; + rJacobian[1][19] = 0.0; + rJacobian[1][20] = -(mDt * (-var_x67 * (-0.66000000000000003 * var_x82 - var_x57 * var_x80))); + rJacobian[1][21] = 0.0; + rJacobian[1][22] = -(mDt * (var_x69)); + rJacobian[1][23] = 0.0; + rJacobian[1][24] = 0.0; + rJacobian[1][25] = -(mDt * ((64.935064935064929 * var_chaste_interface__SR_Ca_Concentrations__Ca_sr - 64.935064935064929 * var_chaste_interface__Ca_Concentrations__Ca_j) * mParameters[1])); + rJacobian[1][26] = 0.0; + rJacobian[2][0] = -(mDt * (15.582629387269481 * var_x3)); + rJacobian[2][1] = -(mDt * (3.9220939916716238 * var_x3)); + rJacobian[2][2] = 1.0 - (mDt * (-165.10000000000002 + var_x83 + var_x84 - 19.504723378941105 * var_x3 - var_x103 * (1.78 * var_x96 - 8.0099999999999983e-8 * var_x101 - var_x100 * var_x97 + 0.00024532850000000001 * var_x34 / var_chaste_interface__Ca_Concentrations__Ca_sl + 3.3145199999999996e-5 * var_x102 * var_x64 + var_x86 * pow(var_chaste_interface__Ca_Concentrations__Ca_sl, 0.60000000000000009) / var_x85 - var_x86 * pow(var_chaste_interface__Ca_Concentrations__Ca_sl, 2.2000000000000002) / pow(var_x85, 2)))); + rJacobian[2][3] = 0.0; + rJacobian[2][4] = 0.0; + rJacobian[2][5] = 0.0; + rJacobian[2][6] = 0.0; + rJacobian[2][7] = 0.0; + rJacobian[2][8] = 0.0; + rJacobian[2][9] = 0.0; + rJacobian[2][10] = 0.0; + rJacobian[2][11] = -(mDt * (231290898.27483633 * var_x73 * (var_x70 + var_x71 * var_chaste_interface__Ca_Concentrations__Ca_sl))); + rJacobian[2][12] = 0.0; + rJacobian[2][13] = -(mDt * (var_x105)); + rJacobian[2][14] = 0.0; + rJacobian[2][15] = -(mDt * (var_x106)); + rJacobian[2][16] = 0.0; + rJacobian[2][17] = 0.0; + rJacobian[2][18] = 0.0; + rJacobian[2][19] = 0.0; + rJacobian[2][20] = 0.0; + rJacobian[2][21] = -(mDt * (-var_x103 * (-5.3399999999999999 * var_x109 - var_x100 * var_x108))); + rJacobian[2][22] = 0.0; + rJacobian[2][23] = 0.0; + rJacobian[2][24] = 0.0; + rJacobian[2][25] = 0.0; + rJacobian[2][26] = 0.0; + rJacobian[3][0] = -(mDt * (0.81600000000000006 - var_x0)); + rJacobian[3][1] = 0.0; + rJacobian[3][2] = 0.0; + rJacobian[3][3] = 1.0 - (mDt * (-var_x19)); + rJacobian[3][4] = 0.0; + rJacobian[3][5] = 0.0; + rJacobian[3][6] = 0.0; + rJacobian[3][7] = 0.0; + rJacobian[3][8] = 0.0; + rJacobian[3][9] = 0.0; + rJacobian[3][10] = 0.0; + rJacobian[3][11] = 0.0; + rJacobian[3][12] = 0.0; + rJacobian[3][13] = 0.0; + rJacobian[3][14] = 0.0; + rJacobian[3][15] = 0.0; + rJacobian[3][16] = 0.0; + rJacobian[3][17] = 0.0; + rJacobian[3][18] = 0.0; + rJacobian[3][19] = 0.0; + rJacobian[3][20] = 0.0; + rJacobian[3][21] = 0.0; + rJacobian[3][22] = 0.0; + rJacobian[3][23] = 0.0; + rJacobian[3][24] = 0.0; + rJacobian[3][25] = 0.0; + rJacobian[3][26] = 0.0; + rJacobian[4][0] = -(mDt * (1.9320000000000004 - var_x17)); + rJacobian[4][1] = 0.0; + rJacobian[4][2] = 0.0; + rJacobian[4][3] = 0.0; + rJacobian[4][4] = 1.0 - (mDt * (-0.00046000000000000001 - var_x20)); + rJacobian[4][5] = -(mDt * (-var_x20)); + rJacobian[4][6] = 0.0; + rJacobian[4][7] = 0.0; + rJacobian[4][8] = 0.0; + rJacobian[4][9] = 0.0; + rJacobian[4][10] = 0.0; + rJacobian[4][11] = 0.0; + rJacobian[4][12] = 0.0; + rJacobian[4][13] = 0.0; + rJacobian[4][14] = 0.0; + rJacobian[4][15] = 0.0; + rJacobian[4][16] = 0.0; + rJacobian[4][17] = 0.0; + rJacobian[4][18] = 0.0; + rJacobian[4][19] = 0.0; + rJacobian[4][20] = 0.0; + rJacobian[4][21] = 0.0; + rJacobian[4][22] = 0.0; + rJacobian[4][23] = 0.0; + rJacobian[4][24] = 0.0; + rJacobian[4][25] = 0.0; + rJacobian[4][26] = 0.0; + rJacobian[5][0] = 0.0; + rJacobian[5][1] = 0.0; + rJacobian[5][2] = 0.0; + rJacobian[5][3] = 0.0; + rJacobian[5][4] = -(mDt * (-0.015699999999999999)); + rJacobian[5][5] = 1.0 - (mDt * (-0.015757)); + rJacobian[5][6] = 0.0; + rJacobian[5][7] = 0.0; + rJacobian[5][8] = 0.0; + rJacobian[5][9] = 0.0; + rJacobian[5][10] = 0.0; + rJacobian[5][11] = 0.0; + rJacobian[5][12] = 0.0; + rJacobian[5][13] = 0.0; + rJacobian[5][14] = 0.0; + rJacobian[5][15] = 0.0; + rJacobian[5][16] = 0.0; + rJacobian[5][17] = 0.0; + rJacobian[5][18] = 0.0; + rJacobian[5][19] = 0.0; + rJacobian[5][20] = 0.0; + rJacobian[5][21] = 0.0; + rJacobian[5][22] = 0.0; + rJacobian[5][23] = 0.0; + rJacobian[5][24] = 0.0; + rJacobian[5][25] = 0.0; + rJacobian[5][26] = 0.0; + rJacobian[6][0] = -(mDt * (1.71 - var_x1)); + rJacobian[6][1] = 0.0; + rJacobian[6][2] = 0.0; + rJacobian[6][3] = 0.0; + rJacobian[6][4] = 0.0; + rJacobian[6][5] = 0.0; + rJacobian[6][6] = 1.0 - (mDt * (-var_x21)); + rJacobian[6][7] = 0.0; + rJacobian[6][8] = 0.0; + rJacobian[6][9] = 0.0; + rJacobian[6][10] = 0.0; + rJacobian[6][11] = 0.0; + rJacobian[6][12] = 0.0; + rJacobian[6][13] = 0.0; + rJacobian[6][14] = 0.0; + rJacobian[6][15] = 0.0; + rJacobian[6][16] = 0.0; + rJacobian[6][17] = 0.0; + rJacobian[6][18] = 0.0; + rJacobian[6][19] = 0.0; + rJacobian[6][20] = 0.0; + rJacobian[6][21] = 0.0; + rJacobian[6][22] = 0.0; + rJacobian[6][23] = 0.0; + rJacobian[6][24] = 0.0; + rJacobian[6][25] = 0.0; + rJacobian[6][26] = 0.0; + rJacobian[7][0] = -(mDt * (0.33180000000000004 - var_x18)); + rJacobian[7][1] = 0.0; + rJacobian[7][2] = 0.0; + rJacobian[7][3] = 0.0; + rJacobian[7][4] = 0.0; + rJacobian[7][5] = 0.0; + rJacobian[7][6] = 0.0; + rJacobian[7][7] = 1.0 - (mDt * (-3.1999999999999999e-5 - var_x22)); + rJacobian[7][8] = -(mDt * (-var_x22)); + rJacobian[7][9] = 0.0; + rJacobian[7][10] = 0.0; + rJacobian[7][11] = 0.0; + rJacobian[7][12] = 0.0; + rJacobian[7][13] = 0.0; + rJacobian[7][14] = 0.0; + rJacobian[7][15] = 0.0; + rJacobian[7][16] = 0.0; + rJacobian[7][17] = 0.0; + rJacobian[7][18] = 0.0; + rJacobian[7][19] = 0.0; + rJacobian[7][20] = 0.0; + rJacobian[7][21] = 0.0; + rJacobian[7][22] = 0.0; + rJacobian[7][23] = 0.0; + rJacobian[7][24] = 0.0; + rJacobian[7][25] = 0.0; + rJacobian[7][26] = 0.0; + rJacobian[8][0] = 0.0; + rJacobian[8][1] = 0.0; + rJacobian[8][2] = 0.0; + rJacobian[8][3] = 0.0; + rJacobian[8][4] = 0.0; + rJacobian[8][5] = 0.0; + rJacobian[8][6] = 0.0; + rJacobian[8][7] = -(mDt * (-0.0030000000000000001)); + rJacobian[8][8] = 1.0 - (mDt * (-0.0063300000000000006)); + rJacobian[8][9] = 0.0; + rJacobian[8][10] = 0.0; + rJacobian[8][11] = 0.0; + rJacobian[8][12] = 0.0; + rJacobian[8][13] = 0.0; + rJacobian[8][14] = 0.0; + rJacobian[8][15] = 0.0; + rJacobian[8][16] = 0.0; + rJacobian[8][17] = 0.0; + rJacobian[8][18] = 0.0; + rJacobian[8][19] = 0.0; + rJacobian[8][20] = 0.0; + rJacobian[8][21] = 0.0; + rJacobian[8][22] = 0.0; + rJacobian[8][23] = 0.0; + rJacobian[8][24] = 0.0; + rJacobian[8][25] = 0.0; + rJacobian[8][26] = 0.0; + rJacobian[9][0] = -(mDt * (2.2890000000000006 - var_x2)); + rJacobian[9][1] = 0.0; + rJacobian[9][2] = 0.0; + rJacobian[9][3] = 0.0; + rJacobian[9][4] = 0.0; + rJacobian[9][5] = 0.0; + rJacobian[9][6] = 0.0; + rJacobian[9][7] = 0.0; + rJacobian[9][8] = 0.0; + rJacobian[9][9] = 1.0 - (mDt * (-var_x23)); + rJacobian[9][10] = 0.0; + rJacobian[9][11] = 0.0; + rJacobian[9][12] = 0.0; + rJacobian[9][13] = 0.0; + rJacobian[9][14] = 0.0; + rJacobian[9][15] = 0.0; + rJacobian[9][16] = 0.0; + rJacobian[9][17] = 0.0; + rJacobian[9][18] = 0.0; + rJacobian[9][19] = 0.0; + rJacobian[9][20] = 0.0; + rJacobian[9][21] = 0.0; + rJacobian[9][22] = 0.0; + rJacobian[9][23] = 0.0; + rJacobian[9][24] = 0.0; + rJacobian[9][25] = 0.0; + rJacobian[9][26] = 0.0; + rJacobian[10][0] = 0.0; + rJacobian[10][1] = -(mDt * (1.7 - 1.7 * var_chaste_interface__I_Ca__f_Ca_Bj)); + rJacobian[10][2] = 0.0; + rJacobian[10][3] = 0.0; + rJacobian[10][4] = 0.0; + rJacobian[10][5] = 0.0; + rJacobian[10][6] = 0.0; + rJacobian[10][7] = 0.0; + rJacobian[10][8] = 0.0; + rJacobian[10][9] = 0.0; + rJacobian[10][10] = 1.0 - (mDt * (-0.011900000000000001 - 1.7 * var_chaste_interface__Ca_Concentrations__Ca_j)); + rJacobian[10][11] = 0.0; + rJacobian[10][12] = 0.0; + rJacobian[10][13] = 0.0; + rJacobian[10][14] = 0.0; + rJacobian[10][15] = 0.0; + rJacobian[10][16] = 0.0; + rJacobian[10][17] = 0.0; + rJacobian[10][18] = 0.0; + rJacobian[10][19] = 0.0; + rJacobian[10][20] = 0.0; + rJacobian[10][21] = 0.0; + rJacobian[10][22] = 0.0; + rJacobian[10][23] = 0.0; + rJacobian[10][24] = 0.0; + rJacobian[10][25] = 0.0; + rJacobian[10][26] = 0.0; + rJacobian[11][0] = 0.0; + rJacobian[11][1] = 0.0; + rJacobian[11][2] = -(mDt * (1.7 - 1.7 * var_chaste_interface__I_Ca__f_Ca_Bsl)); + rJacobian[11][3] = 0.0; + rJacobian[11][4] = 0.0; + rJacobian[11][5] = 0.0; + rJacobian[11][6] = 0.0; + rJacobian[11][7] = 0.0; + rJacobian[11][8] = 0.0; + rJacobian[11][9] = 0.0; + rJacobian[11][10] = 0.0; + rJacobian[11][11] = 1.0 - (mDt * (-0.011900000000000001 - 1.7 * var_chaste_interface__Ca_Concentrations__Ca_sl)); + rJacobian[11][12] = 0.0; + rJacobian[11][13] = 0.0; + rJacobian[11][14] = 0.0; + rJacobian[11][15] = 0.0; + rJacobian[11][16] = 0.0; + rJacobian[11][17] = 0.0; + rJacobian[11][18] = 0.0; + rJacobian[11][19] = 0.0; + rJacobian[11][20] = 0.0; + rJacobian[11][21] = 0.0; + rJacobian[11][22] = 0.0; + rJacobian[11][23] = 0.0; + rJacobian[11][24] = 0.0; + rJacobian[11][25] = 0.0; + rJacobian[11][26] = 0.0; + rJacobian[12][0] = 0.0; + rJacobian[12][1] = -(mDt * (19.897959183673468 - var_x28)); + rJacobian[12][2] = 0.0; + rJacobian[12][3] = 0.0; + rJacobian[12][4] = 0.0; + rJacobian[12][5] = 0.0; + rJacobian[12][6] = 0.0; + rJacobian[12][7] = 0.0; + rJacobian[12][8] = 0.0; + rJacobian[12][9] = 0.0; + rJacobian[12][10] = 0.0; + rJacobian[12][11] = 0.0; + rJacobian[12][12] = 1.0 - (mDt * (-var_x75)); + rJacobian[12][13] = 0.0; + rJacobian[12][14] = 0.0; + rJacobian[12][15] = 0.0; + rJacobian[12][16] = 0.0; + rJacobian[12][17] = 0.0; + rJacobian[12][18] = 0.0; + rJacobian[12][19] = 0.0; + rJacobian[12][20] = 0.0; + rJacobian[12][21] = 0.0; + rJacobian[12][22] = 0.0; + rJacobian[12][23] = 0.0; + rJacobian[12][24] = 0.0; + rJacobian[12][25] = 0.0; + rJacobian[12][26] = 0.0; + rJacobian[13][0] = 0.0; + rJacobian[13][1] = 0.0; + rJacobian[13][2] = -(mDt * (43.550000000000004 - var_x83)); + rJacobian[13][3] = 0.0; + rJacobian[13][4] = 0.0; + rJacobian[13][5] = 0.0; + rJacobian[13][6] = 0.0; + rJacobian[13][7] = 0.0; + rJacobian[13][8] = 0.0; + rJacobian[13][9] = 0.0; + rJacobian[13][10] = 0.0; + rJacobian[13][11] = 0.0; + rJacobian[13][12] = 0.0; + rJacobian[13][13] = 1.0 - (mDt * (-var_x105)); + rJacobian[13][14] = 0.0; + rJacobian[13][15] = 0.0; + rJacobian[13][16] = 0.0; + rJacobian[13][17] = 0.0; + rJacobian[13][18] = 0.0; + rJacobian[13][19] = 0.0; + rJacobian[13][20] = 0.0; + rJacobian[13][21] = 0.0; + rJacobian[13][22] = 0.0; + rJacobian[13][23] = 0.0; + rJacobian[13][24] = 0.0; + rJacobian[13][25] = 0.0; + rJacobian[13][26] = 0.0; + rJacobian[14][0] = 0.0; + rJacobian[14][1] = -(mDt * (55.473098330241186 - var_x29)); + rJacobian[14][2] = 0.0; + rJacobian[14][3] = 0.0; + rJacobian[14][4] = 0.0; + rJacobian[14][5] = 0.0; + rJacobian[14][6] = 0.0; + rJacobian[14][7] = 0.0; + rJacobian[14][8] = 0.0; + rJacobian[14][9] = 0.0; + rJacobian[14][10] = 0.0; + rJacobian[14][11] = 0.0; + rJacobian[14][12] = 0.0; + rJacobian[14][13] = 0.0; + rJacobian[14][14] = 1.0 - (mDt * (-var_x76)); + rJacobian[14][15] = 0.0; + rJacobian[14][16] = 0.0; + rJacobian[14][17] = 0.0; + rJacobian[14][18] = 0.0; + rJacobian[14][19] = 0.0; + rJacobian[14][20] = 0.0; + rJacobian[14][21] = 0.0; + rJacobian[14][22] = 0.0; + rJacobian[14][23] = 0.0; + rJacobian[14][24] = 0.0; + rJacobian[14][25] = 0.0; + rJacobian[14][26] = 0.0; + rJacobian[15][0] = 0.0; + rJacobian[15][1] = 0.0; + rJacobian[15][2] = -(mDt * (121.55000000000001 - var_x84)); + rJacobian[15][3] = 0.0; + rJacobian[15][4] = 0.0; + rJacobian[15][5] = 0.0; + rJacobian[15][6] = 0.0; + rJacobian[15][7] = 0.0; + rJacobian[15][8] = 0.0; + rJacobian[15][9] = 0.0; + rJacobian[15][10] = 0.0; + rJacobian[15][11] = 0.0; + rJacobian[15][12] = 0.0; + rJacobian[15][13] = 0.0; + rJacobian[15][14] = 0.0; + rJacobian[15][15] = 1.0 - (mDt * (-var_x106)); + rJacobian[15][16] = 0.0; + rJacobian[15][17] = 0.0; + rJacobian[15][18] = 0.0; + rJacobian[15][19] = 0.0; + rJacobian[15][20] = 0.0; + rJacobian[15][21] = 0.0; + rJacobian[15][22] = 0.0; + rJacobian[15][23] = 0.0; + rJacobian[15][24] = 0.0; + rJacobian[15][25] = 0.0; + rJacobian[15][26] = 0.0; + rJacobian[16][0] = 0.0; + rJacobian[16][1] = 0.0; + rJacobian[16][2] = 0.0; + rJacobian[16][3] = 0.0; + rJacobian[16][4] = 0.0; + rJacobian[16][5] = 0.0; + rJacobian[16][6] = 0.0; + rJacobian[16][7] = 0.0; + rJacobian[16][8] = 0.0; + rJacobian[16][9] = 0.0; + rJacobian[16][10] = 0.0; + rJacobian[16][11] = 0.0; + rJacobian[16][12] = 0.0; + rJacobian[16][13] = 0.0; + rJacobian[16][14] = 0.0; + rJacobian[16][15] = 0.0; + rJacobian[16][16] = 1.0; + rJacobian[16][17] = 0.0; + rJacobian[16][18] = 0.0; + rJacobian[16][19] = 0.0; + rJacobian[16][20] = 0.0; + rJacobian[16][21] = 0.0; + rJacobian[16][22] = 0.0; + rJacobian[16][23] = 0.0; + rJacobian[16][24] = 0.0; + rJacobian[16][25] = 0.0; + rJacobian[16][26] = 0.0; + rJacobian[17][0] = 0.0; + rJacobian[17][1] = 0.0; + rJacobian[17][2] = 0.0; + rJacobian[17][3] = 0.0; + rJacobian[17][4] = 0.0; + rJacobian[17][5] = 0.0; + rJacobian[17][6] = 0.0; + rJacobian[17][7] = 0.0; + rJacobian[17][8] = 0.0; + rJacobian[17][9] = 0.0; + rJacobian[17][10] = 0.0; + rJacobian[17][11] = 0.0; + rJacobian[17][12] = 0.0; + rJacobian[17][13] = 0.0; + rJacobian[17][14] = 0.0; + rJacobian[17][15] = 0.0; + rJacobian[17][16] = 0.0; + rJacobian[17][17] = 1.0 - (mDt * (-var_x110)); + rJacobian[17][18] = 0.0; + rJacobian[17][19] = 0.0; + rJacobian[17][20] = -(mDt * (0.0007561 - var_x111)); + rJacobian[17][21] = 0.0; + rJacobian[17][22] = 0.0; + rJacobian[17][23] = 0.0; + rJacobian[17][24] = 0.0; + rJacobian[17][25] = 0.0; + rJacobian[17][26] = 0.0; + rJacobian[18][0] = 0.0; + rJacobian[18][1] = 0.0; + rJacobian[18][2] = 0.0; + rJacobian[18][3] = 0.0; + rJacobian[18][4] = 0.0; + rJacobian[18][5] = 0.0; + rJacobian[18][6] = 0.0; + rJacobian[18][7] = 0.0; + rJacobian[18][8] = 0.0; + rJacobian[18][9] = 0.0; + rJacobian[18][10] = 0.0; + rJacobian[18][11] = 0.0; + rJacobian[18][12] = 0.0; + rJacobian[18][13] = 0.0; + rJacobian[18][14] = 0.0; + rJacobian[18][15] = 0.0; + rJacobian[18][16] = 0.0; + rJacobian[18][17] = 0.0; + rJacobian[18][18] = 1.0 - (mDt * (-var_x112)); + rJacobian[18][19] = 0.0; + rJacobian[18][20] = 0.0; + rJacobian[18][21] = -(mDt * (0.000165 - var_x113)); + rJacobian[18][22] = 0.0; + rJacobian[18][23] = 0.0; + rJacobian[18][24] = 0.0; + rJacobian[18][25] = 0.0; + rJacobian[18][26] = 0.0; + rJacobian[19][0] = 0.0; + rJacobian[19][1] = 0.0; + rJacobian[19][2] = 0.0; + rJacobian[19][3] = 0.0; + rJacobian[19][4] = 0.0; + rJacobian[19][5] = 0.0; + rJacobian[19][6] = 0.0; + rJacobian[19][7] = 0.0; + rJacobian[19][8] = 0.0; + rJacobian[19][9] = 0.0; + rJacobian[19][10] = 0.0; + rJacobian[19][11] = 0.0; + rJacobian[19][12] = 0.0; + rJacobian[19][13] = 0.0; + rJacobian[19][14] = 0.0; + rJacobian[19][15] = 0.0; + rJacobian[19][16] = 0.0; + rJacobian[19][17] = 0.0; + rJacobian[19][18] = 0.0; + rJacobian[19][19] = 1.0 - (mDt * (-var_x115)); + rJacobian[19][20] = 0.0; + rJacobian[19][21] = -(mDt * (var_x115)); + rJacobian[19][22] = 0.0; + rJacobian[19][23] = 0.0; + rJacobian[19][24] = 0.0; + rJacobian[19][25] = 0.0; + rJacobian[19][26] = 0.0; + rJacobian[20][0] = 0.0; + rJacobian[20][1] = -(mDt * (-176588941779729.56 * var_x117 * (1.4849999999999997e-8 * var_x58 - 0.33000000000000002 * var_x51 + var_x116 * var_x53))); + rJacobian[20][2] = 0.0; + rJacobian[20][3] = 0.0; + rJacobian[20][4] = 0.0; + rJacobian[20][5] = 0.0; + rJacobian[20][6] = 0.0; + rJacobian[20][7] = 0.0; + rJacobian[20][8] = 0.0; + rJacobian[20][9] = 0.0; + rJacobian[20][10] = -(mDt * (536388.91065592843 * var_x122 * (var_x118 + var_x120 * var_chaste_interface__Na_Concentrations__Na_j))); + rJacobian[20][11] = 0.0; + rJacobian[20][12] = 0.0; + rJacobian[20][13] = 0.0; + rJacobian[20][14] = 0.0; + rJacobian[20][15] = 0.0; + rJacobian[20][16] = 0.0; + rJacobian[20][17] = -(mDt * (var_x110 * mParameters[3])); + rJacobian[20][18] = 0.0; + rJacobian[20][19] = 0.0; + rJacobian[20][20] = 1.0 - (mDt * ((-0.0007561 + var_x111 - var_x123 - 176588941779729.56 * var_x66 * (0.98999999999999999 * var_x82 + 6.567e-5 * var_x124 + var_x116 * var_x80 + 0.11 * var_x124 * var_x126 + 2.2781249999999999e-9 * var_x127 * var_x60 + 9.0157776108189337e-5 * var_x125 / (pow((6.8301345536507063e-5 + pow(var_chaste_interface__Na_Concentrations__Na_j, (-4))), 2) * pow(var_chaste_interface__Na_Concentrations__Na_j, 5)))) * mParameters[3])); + rJacobian[20][21] = -(mDt * (var_x123 * mParameters[3])); + rJacobian[20][22] = 0.0; + rJacobian[20][23] = 0.0; + rJacobian[20][24] = 0.0; + rJacobian[20][25] = 0.0; + rJacobian[20][26] = 0.0; + rJacobian[21][0] = 0.0; + rJacobian[21][1] = 0.0; + rJacobian[21][2] = -(mDt * (-4759071980963.7119 * var_x117 * (1.2014999999999997e-7 * var_x101 - 2.6699999999999999 * var_x96 + var_x128 * var_x97))); + rJacobian[21][3] = 0.0; + rJacobian[21][4] = 0.0; + rJacobian[21][5] = 0.0; + rJacobian[21][6] = 0.0; + rJacobian[21][7] = 0.0; + rJacobian[21][8] = 0.0; + rJacobian[21][9] = 0.0; + rJacobian[21][10] = 0.0; + rJacobian[21][11] = -(mDt * (1606.1867935752523 * var_x122 * (var_x118 + var_x120 * var_chaste_interface__Na_Concentrations__Na_sl))); + rJacobian[21][12] = 0.0; + rJacobian[21][13] = 0.0; + rJacobian[21][14] = 0.0; + rJacobian[21][15] = 0.0; + rJacobian[21][16] = 0.0; + rJacobian[21][17] = 0.0; + rJacobian[21][18] = -(mDt * (var_x112 * mParameters[3])); + rJacobian[21][19] = -(mDt * (7.7982153480071377 * var_x114)); + rJacobian[21][20] = -(mDt * (0.087152885187388451 * var_x114)); + rJacobian[21][21] = 1.0 - (mDt * ((-0.000165 + var_x113 - 7.8853682331945256 * var_x3 - 4759071980963.7119 * var_x66 * (0.00053133 * var_x129 + 8.0099999999999998 * var_x109 + var_x108 * var_x128 + 2.5312499999999994e-10 * var_x102 * var_x127 + 0.89000000000000001 * var_x126 * var_x129 + 0.00072945837032989554 * var_x125 / (pow((6.8301345536507063e-5 + pow(var_chaste_interface__Na_Concentrations__Na_sl, (-4))), 2) * pow(var_chaste_interface__Na_Concentrations__Na_sl, 5)))) * mParameters[3])); + rJacobian[21][22] = 0.0; + rJacobian[21][23] = 0.0; + rJacobian[21][24] = 0.0; + rJacobian[21][25] = 0.0; + rJacobian[21][26] = 0.0; + rJacobian[22][0] = -(mDt * (-6.3492962168146398e-7 * var_x16 + 5029484.9869235931 * var_x10 * var_x12 * var_x5 * mParameters[2])); + rJacobian[22][1] = -(mDt * (var_x130)); + rJacobian[22][2] = 0.0; + rJacobian[22][3] = 0.0; + rJacobian[22][4] = 0.0; + rJacobian[22][5] = 0.0; + rJacobian[22][6] = 0.0; + rJacobian[22][7] = 0.0; + rJacobian[22][8] = 0.0; + rJacobian[22][9] = 0.0; + rJacobian[22][10] = 0.0; + rJacobian[22][11] = 0.0; + rJacobian[22][12] = 0.0; + rJacobian[22][13] = 0.0; + rJacobian[22][14] = 0.0; + rJacobian[22][15] = 0.0; + rJacobian[22][16] = 0.0; + rJacobian[22][17] = 0.0; + rJacobian[22][18] = 0.0; + rJacobian[22][19] = 0.0; + rJacobian[22][20] = 0.0; + rJacobian[22][21] = 0.0; + rJacobian[22][22] = 1.0 - (mDt * (-260 + var_x131 - var_x130 - 0.69232869146389786 * var_x25 - 8.7400597733819945e-14 * var_x26)); + rJacobian[22][23] = -(mDt * (var_x132)); + rJacobian[22][24] = 0.0; + rJacobian[22][25] = -(mDt * ((var_chaste_interface__Ca_Concentrations__Ca_j - var_chaste_interface__SR_Ca_Concentrations__Ca_sr) * mParameters[1])); + rJacobian[22][26] = 0.0; + rJacobian[23][0] = 0.0; + rJacobian[23][1] = 0.0; + rJacobian[23][2] = 0.0; + rJacobian[23][3] = 0.0; + rJacobian[23][4] = 0.0; + rJacobian[23][5] = 0.0; + rJacobian[23][6] = 0.0; + rJacobian[23][7] = 0.0; + rJacobian[23][8] = 0.0; + rJacobian[23][9] = 0.0; + rJacobian[23][10] = 0.0; + rJacobian[23][11] = 0.0; + rJacobian[23][12] = 0.0; + rJacobian[23][13] = 0.0; + rJacobian[23][14] = 0.0; + rJacobian[23][15] = 0.0; + rJacobian[23][16] = 0.0; + rJacobian[23][17] = 0.0; + rJacobian[23][18] = 0.0; + rJacobian[23][19] = 0.0; + rJacobian[23][20] = 0.0; + rJacobian[23][21] = 0.0; + rJacobian[23][22] = -(mDt * (260 - var_x131)); + rJacobian[23][23] = 1.0 - (mDt * (-var_x132)); + rJacobian[23][24] = 0.0; + rJacobian[23][25] = 0.0; + rJacobian[23][26] = 0.0; + rJacobian[24][0] = 0.0; + rJacobian[24][1] = -(mDt * (var_x137 * var_chaste_interface__SR_Fluxes__Ry_Ro + var_x138 * var_x140)); + rJacobian[24][2] = 0.0; + rJacobian[24][3] = 0.0; + rJacobian[24][4] = 0.0; + rJacobian[24][5] = 0.0; + rJacobian[24][6] = 0.0; + rJacobian[24][7] = 0.0; + rJacobian[24][8] = 0.0; + rJacobian[24][9] = 0.0; + rJacobian[24][10] = 0.0; + rJacobian[24][11] = 0.0; + rJacobian[24][12] = 0.0; + rJacobian[24][13] = 0.0; + rJacobian[24][14] = 0.0; + rJacobian[24][15] = 0.0; + rJacobian[24][16] = 0.0; + rJacobian[24][17] = 0.0; + rJacobian[24][18] = 0.0; + rJacobian[24][19] = 0.0; + rJacobian[24][20] = 0.0; + rJacobian[24][21] = 0.0; + rJacobian[24][22] = -(mDt * (-var_x143 + var_x138 * var_x144)); + rJacobian[24][23] = 0.0; + rJacobian[24][24] = 1.0 - (mDt * (-0.065000000000000002 - var_x145)); + rJacobian[24][25] = -(mDt * (-var_x145 + var_x137 * var_chaste_interface__Ca_Concentrations__Ca_j)); + rJacobian[24][26] = -(mDt * (-var_x145)); + rJacobian[25][0] = 0.0; + rJacobian[25][1] = -(mDt * (var_x147 + var_x146 * var_chaste_interface__SR_Fluxes__Ry_Ro)); + rJacobian[25][2] = 0.0; + rJacobian[25][3] = 0.0; + rJacobian[25][4] = 0.0; + rJacobian[25][5] = 0.0; + rJacobian[25][6] = 0.0; + rJacobian[25][7] = 0.0; + rJacobian[25][8] = 0.0; + rJacobian[25][9] = 0.0; + rJacobian[25][10] = 0.0; + rJacobian[25][11] = 0.0; + rJacobian[25][12] = 0.0; + rJacobian[25][13] = 0.0; + rJacobian[25][14] = 0.0; + rJacobian[25][15] = 0.0; + rJacobian[25][16] = 0.0; + rJacobian[25][17] = 0.0; + rJacobian[25][18] = 0.0; + rJacobian[25][19] = 0.0; + rJacobian[25][20] = 0.0; + rJacobian[25][21] = 0.0; + rJacobian[25][22] = -(mDt * (var_x143 + var_x148)); + rJacobian[25][23] = 0.0; + rJacobian[25][24] = -(mDt * (0.0050000000000000001)); + rJacobian[25][25] = 1.0 - (mDt * (-0.059999999999999998 + var_x146 * var_chaste_interface__Ca_Concentrations__Ca_j)); + rJacobian[25][26] = -(mDt * (var_x145)); + rJacobian[26][0] = 0.0; + rJacobian[26][1] = -(mDt * (-var_x147 + var_x146 * var_chaste_interface__SR_Fluxes__Ry_Rr)); + rJacobian[26][2] = 0.0; + rJacobian[26][3] = 0.0; + rJacobian[26][4] = 0.0; + rJacobian[26][5] = 0.0; + rJacobian[26][6] = 0.0; + rJacobian[26][7] = 0.0; + rJacobian[26][8] = 0.0; + rJacobian[26][9] = 0.0; + rJacobian[26][10] = 0.0; + rJacobian[26][11] = 0.0; + rJacobian[26][12] = 0.0; + rJacobian[26][13] = 0.0; + rJacobian[26][14] = 0.0; + rJacobian[26][15] = 0.0; + rJacobian[26][16] = 0.0; + rJacobian[26][17] = 0.0; + rJacobian[26][18] = 0.0; + rJacobian[26][19] = 0.0; + rJacobian[26][20] = 0.0; + rJacobian[26][21] = 0.0; + rJacobian[26][22] = -(mDt * (-var_x148 + 2.3772197685794643 * var_x133 * var_x134 * var_x141 * var_chaste_interface__Ca_Concentrations__Ca_j * var_chaste_interface__SR_Fluxes__Ry_Rr)); + rJacobian[26][23] = 0.0; + rJacobian[26][24] = -(mDt * (-0.0050000000000000001)); + rJacobian[26][25] = -(mDt * (0.055)); + rJacobian[26][26] = 1.0 - (mDt * (-0.0050000000000000001 - var_x145 + var_x146 * var_chaste_interface__Ca_Concentrations__Ca_j)); + } + + void Cellgrandi_pasqualini_bers_2010_ssFromCellMLBackwardEuler::UpdateTransmembranePotential(double var_chaste_interface__environment__time) + { + // Time units: millisecond + std::vector& rY = rGetStateVariables(); + double var_chaste_interface__membrane_potential__V_m = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: mV; Initial value: -81.4229700631461 + double var_chaste_interface__I_Na__m = rY[2]; + // Units: dimensionless; Initial value: 0.00381858135062259 + double var_chaste_interface__I_Na__h = rY[3]; + // Units: dimensionless; Initial value: 0.625086621635645 + double var_chaste_interface__I_Na__j = rY[4]; + // Units: dimensionless; Initial value: 0.62332507235506 + double var_chaste_interface__I_Kr__x_kr = rY[5]; + // Units: dimensionless; Initial value: 0.021733554982663 + double var_chaste_interface__I_Ks__x_ks = rY[6]; + // Units: dimensionless; Initial value: 0.00428981903391989 + double var_chaste_interface__I_to__x_to_s = rY[7]; + // Units: dimensionless; Initial value: 0.000441539203559411 + double var_chaste_interface__I_to__y_to_s = rY[8]; + // Units: dimensionless; Initial value: 0.784875334693892 + double var_chaste_interface__I_to__x_to_f = rY[9]; + // Units: dimensionless; Initial value: 0.000441531250866821 + double var_chaste_interface__I_to__y_to_f = rY[10]; + // Units: dimensionless; Initial value: 0.999995817153572 + double var_chaste_interface__I_Ca__d = rY[11]; + // Units: dimensionless; Initial value: 2.93982287251302e-06 + double var_chaste_interface__I_Ca__f = rY[12]; + // Units: dimensionless; Initial value: 0.99511673495949 + double var_chaste_interface__I_Ca__f_Ca_Bj = rY[13]; + // Units: dimensionless; Initial value: 0.0246142436477748 + double var_chaste_interface__I_Ca__f_Ca_Bsl = rY[14]; + // Units: dimensionless; Initial value: 0.0152416826209301 + double var_chaste_interface__Na_Concentrations__Na_j = rY[33]; + // Units: mM; Initial value: 8.3215690202059 + double var_chaste_interface__Na_Concentrations__Na_sl = rY[34]; + // Units: mM; Initial value: 8.32094589677861 + double var_chaste_interface__Na_Concentrations__Na_i = rY[35]; + // Units: mM; Initial value: 8.32114502072456 + double var_chaste_interface__K_Concentration__K_i = rY[36]; + // Units: mM; Initial value: 120.0 + double var_chaste_interface__Ca_Concentrations__Ca_j = rY[37]; + // Units: mM; Initial value: 0.000175415190830688 + double var_chaste_interface__Ca_Concentrations__Ca_sl = rY[38]; + // Units: mM; Initial value: 0.000106544589194246 + + const double var_I_Ca__fcaCaMSL = 0; // dimensionless + const double var_I_Ca__fcaCaj = 0; // dimensionless + const double var_I_Ks__gks_junc = 0.0035000000000000001; // mS_per_uF + const double var_I_Ks__gks_sl = 0.0035000000000000001; // mS_per_uF + const double var_I_Kp__kp_kp = 1 / (1 + exp(7.4880000000000004 - 0.16722408026755853 * var_chaste_interface__membrane_potential__V_m)); // dimensionless + const double var_I_Kr__rkr = 1 / (1 + exp(3.0833333333333335 + 0.041666666666666664 * var_chaste_interface__membrane_potential__V_m)); // dimensionless + const double var_membrane_potential__i_Stim_converted = GetIntracellularAreaStimulus(var_chaste_interface__environment__time); // uA_per_cm2 + const double var_membrane_potential__i_Stim = var_membrane_potential__i_Stim_converted / HeartConfig::Instance()->GetCapacitance(); // uA_per_uF + const double var_parameters__Fjunc = 0.11; // dimensionless + const double var_parameters__Fjunc_CaL = 0.90000000000000002; // dimensionless + const double var_parameters__Fsl = 1 - var_parameters__Fjunc; // dimensionless + const double var_I_Ks__GKs_total = (var_I_Ks__gks_junc * var_parameters__Fjunc + var_I_Ks__gks_sl * var_parameters__Fsl) * mParameters[18]; // mS_per_uF + const double var_parameters__Fsl_CaL = 1 - var_parameters__Fjunc_CaL; // dimensionless + const double var_parameters__GCaB = 0.00055130000000000001; // mS_per_uF + const double var_parameters__GClB = 0.0089999999999999993; // mS_per_uF + const double var_parameters__GClCa = 0.0548125; // mS_per_uF + const double var_parameters__GNaB = 0.00059699999999999998; // mS_per_uF + const double var_parameters__IbarSLCaP = 0.067299999999999999; // uA_per_uF + const double var_parameters__KdClCa = 0.10000000000000001; // mM + const double var_parameters__Kdact = 0.00014999999999999999; // mM + const double var_I_NCX__Ka_junc = 1 / (1 + pow(var_parameters__Kdact, 2) / pow(var_chaste_interface__Ca_Concentrations__Ca_j, 2)); // dimensionless + const double var_I_NCX__Ka_sl = 1 / (1 + pow(var_parameters__Kdact, 2) / pow(var_chaste_interface__Ca_Concentrations__Ca_sl, 2)); // dimensionless + const double var_parameters__KmCai = 0.0035899999999999999; // mM + const double var_parameters__KmCao = 1.3; // mM + const double var_parameters__KmKo = 1.5; // mM + const double var_parameters__KmNai = 12.289999999999999; // mM + const double var_parameters__KmNaip = 11; // mM + const double var_parameters__KmNao = 87.5; // mM + const double var_parameters__KmPCa = 0.00050000000000000001; // mM + const double var_I_Ki__g_K1 = 0.43033148291193518 * sqrt(mParameters[7]) * mParameters[16]; // mS_per_uF + const double var_I_Kr__gkr = 0.43033148291193518 * sqrt(mParameters[7]) * mParameters[17]; // mS_per_uF + const double var_I_NCX__s3_junc = pow(var_chaste_interface__Na_Concentrations__Na_j, 3) * mParameters[5] + pow(var_chaste_interface__Na_Concentrations__Na_j, 3) * var_parameters__KmCao + pow(mParameters[8], 3) * var_chaste_interface__Ca_Concentrations__Ca_j + pow(var_parameters__KmNao, 3) * (1 + var_chaste_interface__Ca_Concentrations__Ca_j / var_parameters__KmCai) * var_chaste_interface__Ca_Concentrations__Ca_j + pow(mParameters[8], 3) * (1 + pow(var_chaste_interface__Na_Concentrations__Na_j, 3) / pow(var_parameters__KmNai, 3)) * var_parameters__KmCai; // mM4 + const double var_I_NCX__s3_sl = pow(var_chaste_interface__Na_Concentrations__Na_sl, 3) * mParameters[5] + pow(var_chaste_interface__Na_Concentrations__Na_sl, 3) * var_parameters__KmCao + pow(mParameters[8], 3) * var_chaste_interface__Ca_Concentrations__Ca_sl + pow(var_parameters__KmNao, 3) * (1 + var_chaste_interface__Ca_Concentrations__Ca_sl / var_parameters__KmCai) * var_chaste_interface__Ca_Concentrations__Ca_sl + pow(mParameters[8], 3) * (1 + pow(var_chaste_interface__Na_Concentrations__Na_sl, 3) / pow(var_parameters__KmNai, 3)) * var_parameters__KmCai; // mM4 + const double var_I_NaK__sigma = -0.14285714285714285 + 0.14285714285714285 * exp(0.01485884101040119 * mParameters[8]); // dimensionless + const double var_parameters__Q10CaL = 1.8; // dimensionless + const double var_parameters__Q10NCX = 1.5700000000000001; // dimensionless + const double var_parameters__Q10SLCaP = 2.3500000000000001; // dimensionless + const double var_parameters__FoRT = mParameters[9] / (mParameters[10] * mParameters[23]); // per_mV + const double var_I_NaK__fnak = 1 / (1 + 0.1245 * exp(-0.10000000000000001 * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT) + 0.036499999999999998 * var_I_NaK__sigma * exp(-var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT)); // dimensionless + const double var_I_NaK__I_nak_junc = var_I_NaK__fnak * var_parameters__Fjunc * mParameters[21] * mParameters[7] / ((1 + pow(var_parameters__KmNaip, 4) / pow(var_chaste_interface__Na_Concentrations__Na_j, 4)) * (var_parameters__KmKo + mParameters[7])); // uA_per_uF + const double var_I_NaK__I_nak_sl = var_I_NaK__fnak * var_parameters__Fsl * mParameters[21] * mParameters[7] / ((1 + pow(var_parameters__KmNaip, 4) / pow(var_chaste_interface__Na_Concentrations__Na_sl, 4)) * (var_parameters__KmKo + mParameters[7])); // uA_per_uF + const double var_I_NaK__I_nak = var_I_NaK__I_nak_junc + var_I_NaK__I_nak_sl; // uA_per_uF + const double var_parameters__Qpow = -31 + 0.10000000000000001 * mParameters[23]; // dimensionless + const double var_I_PCa__I_pca_junc = pow(var_chaste_interface__Ca_Concentrations__Ca_j, 1.6000000000000001) * pow(var_parameters__Q10SLCaP, var_parameters__Qpow) * var_parameters__Fjunc * var_parameters__IbarSLCaP / (pow(var_chaste_interface__Ca_Concentrations__Ca_j, 1.6000000000000001) + pow(var_parameters__KmPCa, 1.6000000000000001)); // uA_per_uF + const double var_I_PCa__I_pca_sl = pow(var_chaste_interface__Ca_Concentrations__Ca_sl, 1.6000000000000001) * pow(var_parameters__Q10SLCaP, var_parameters__Qpow) * var_parameters__Fsl * var_parameters__IbarSLCaP / (pow(var_chaste_interface__Ca_Concentrations__Ca_sl, 1.6000000000000001) + pow(var_parameters__KmPCa, 1.6000000000000001)); // uA_per_uF + const double var_parameters__eca_junc = 0.5 * log(mParameters[5] / var_chaste_interface__Ca_Concentrations__Ca_j) / var_parameters__FoRT; // mV + const double var_I_CaBK__I_cabk_junc = (-var_parameters__eca_junc + var_chaste_interface__membrane_potential__V_m) * var_parameters__Fjunc * var_parameters__GCaB; // uA_per_uF + const double var_parameters__eca_sl = 0.5 * log(mParameters[5] / var_chaste_interface__Ca_Concentrations__Ca_sl) / var_parameters__FoRT; // mV + const double var_I_CaBK__I_cabk_sl = (-var_parameters__eca_sl + var_chaste_interface__membrane_potential__V_m) * var_parameters__Fsl * var_parameters__GCaB; // uA_per_uF + const double var_parameters__ecl = log(mParameters[4] / mParameters[6]) / var_parameters__FoRT; // mV + const double var_I_ClCa__I_ClCa_junc = (-var_parameters__ecl + var_chaste_interface__membrane_potential__V_m) * var_parameters__Fjunc * var_parameters__GClCa / (1 + var_parameters__KdClCa / var_chaste_interface__Ca_Concentrations__Ca_j); // uA_per_uF + const double var_I_ClCa__I_ClCa_sl = (-var_parameters__ecl + var_chaste_interface__membrane_potential__V_m) * var_parameters__Fsl * var_parameters__GClCa / (1 + var_parameters__KdClCa / var_chaste_interface__Ca_Concentrations__Ca_sl); // uA_per_uF + const double var_I_ClCa__I_ClCa = var_I_ClCa__I_ClCa_junc + var_I_ClCa__I_ClCa_sl; // uA_per_uF + const double var_I_ClCa__I_Clbk = (-var_parameters__ecl + var_chaste_interface__membrane_potential__V_m) * var_parameters__GClB; // uA_per_uF + const double var_membrane_potential__I_Cl_tot = var_I_ClCa__I_ClCa + var_I_ClCa__I_Clbk; // uA_per_uF + const double var_parameters__ek = log(mParameters[7] / var_chaste_interface__K_Concentration__K_i) / var_parameters__FoRT; // mV + const double var_I_Ki__aki = 1.02 / (1 + exp(-14.1227775 + 0.23849999999999999 * var_chaste_interface__membrane_potential__V_m - 0.23849999999999999 * var_parameters__ek)); // dimensionless + const double var_I_Ki__bki = (0.49124000000000001 * exp(0.43983232 + 0.080320000000000003 * var_chaste_interface__membrane_potential__V_m - 0.080320000000000003 * var_parameters__ek) + exp(-36.698642499999998 + 0.061749999999999999 * var_chaste_interface__membrane_potential__V_m - 0.061749999999999999 * var_parameters__ek)) / (1 + exp(-2.4444678999999998 + 0.51429999999999998 * var_parameters__ek - 0.51429999999999998 * var_chaste_interface__membrane_potential__V_m)); // dimensionless + const double var_I_Ki__kiss = var_I_Ki__aki / (var_I_Ki__aki + var_I_Ki__bki); // dimensionless + const double var_I_Ki__I_ki = (-var_parameters__ek + var_chaste_interface__membrane_potential__V_m) * var_I_Ki__g_K1 * var_I_Ki__kiss; // uA_per_uF + const double var_I_Kr__I_kr = (-var_parameters__ek + var_chaste_interface__membrane_potential__V_m) * var_I_Kr__gkr * var_I_Kr__rkr * var_chaste_interface__I_Kr__x_kr; // uA_per_uF + const double var_parameters__ena_junc = log(mParameters[8] / var_chaste_interface__Na_Concentrations__Na_j) / var_parameters__FoRT; // mV + const double var_I_Na__I_Na_junc = pow(var_chaste_interface__I_Na__m, 3) * (-var_parameters__ena_junc + var_chaste_interface__membrane_potential__V_m) * var_chaste_interface__I_Na__h * var_chaste_interface__I_Na__j * var_parameters__Fjunc * mParameters[12]; // uA_per_uF + const double var_I_NaBK__I_nabk_junc = (-var_parameters__ena_junc + var_chaste_interface__membrane_potential__V_m) * var_parameters__Fjunc * var_parameters__GNaB; // uA_per_uF + const double var_parameters__ena_sl = log(mParameters[8] / var_chaste_interface__Na_Concentrations__Na_sl) / var_parameters__FoRT; // mV + const double var_I_Na__I_Na_sl = pow(var_chaste_interface__I_Na__m, 3) * (-var_parameters__ena_sl + var_chaste_interface__membrane_potential__V_m) * var_chaste_interface__I_Na__h * var_chaste_interface__I_Na__j * var_parameters__Fsl * mParameters[12]; // uA_per_uF + const double var_I_NaBK__I_nabk_sl = (-var_parameters__ena_sl + var_chaste_interface__membrane_potential__V_m) * var_parameters__Fsl * var_parameters__GNaB; // uA_per_uF + const double var_parameters__epi = 1; // dimensionless + const double var_I_to__GtoFast = ((var_parameters__epi == 1) ? (0.1144 * mParameters[15]) : (0.0014039999999999999 * mParameters[15])); // mS_per_uF + const double var_I_to__GtoSlow = ((var_parameters__epi == 1) ? (0.015599999999999999 * mParameters[19]) : (0.037595999999999997 * mParameters[19])); // mS_per_uF + const double var_I_to__I_tof = (-var_parameters__ek + var_chaste_interface__membrane_potential__V_m) * var_I_to__GtoFast * var_chaste_interface__I_to__x_to_f * var_chaste_interface__I_to__y_to_f; // uA_per_uF + const double var_I_to__I_tos = (-var_parameters__ek + var_chaste_interface__membrane_potential__V_m) * var_I_to__GtoSlow * var_chaste_interface__I_to__x_to_s * var_chaste_interface__I_to__y_to_s; // uA_per_uF + const double var_I_to__I_to = var_I_to__I_tof + var_I_to__I_tos; // uA_per_uF + const double var_parameters__gkp = 0.002; // mS_per_uF + const double var_I_Kp__I_kp_junc = (-var_parameters__ek + var_chaste_interface__membrane_potential__V_m) * var_I_Kp__kp_kp * var_parameters__Fjunc * var_parameters__gkp; // uA_per_uF + const double var_I_Kp__I_kp_sl = (-var_parameters__ek + var_chaste_interface__membrane_potential__V_m) * var_I_Kp__kp_kp * var_parameters__Fsl * var_parameters__gkp; // uA_per_uF + const double var_I_Kp__I_kp = var_I_Kp__I_kp_junc + var_I_Kp__I_kp_sl; // uA_per_uF + const double var_parameters__ksat = 0.32000000000000001; // dimensionless + const double var_parameters__nu = 0.27000000000000002; // dimensionless + const double var_I_NCX__s1_junc = pow(var_chaste_interface__Na_Concentrations__Na_j, 3) * mParameters[5] * exp(var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT * var_parameters__nu); // mM4 + const double var_I_NCX__s1_sl = pow(var_chaste_interface__Na_Concentrations__Na_sl, 3) * mParameters[5] * exp(var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT * var_parameters__nu); // mM4 + const double var_I_NCX__s2_junc = pow(mParameters[8], 3) * var_chaste_interface__Ca_Concentrations__Ca_j * exp((-1 + var_parameters__nu) * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT); // mM4 + const double var_I_NCX__I_ncx_junc = pow(var_parameters__Q10NCX, var_parameters__Qpow) * (-var_I_NCX__s2_junc + var_I_NCX__s1_junc) * var_I_NCX__Ka_junc * var_parameters__Fjunc * mParameters[20] / ((1 + var_parameters__ksat * exp((-1 + var_parameters__nu) * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT)) * var_I_NCX__s3_junc); // uA_per_uF + const double var_I_NCX__s2_sl = pow(mParameters[8], 3) * var_chaste_interface__Ca_Concentrations__Ca_sl * exp((-1 + var_parameters__nu) * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT); // mM4 + const double var_I_NCX__I_ncx_sl = pow(var_parameters__Q10NCX, var_parameters__Qpow) * (-var_I_NCX__s2_sl + var_I_NCX__s1_sl) * var_I_NCX__Ka_sl * var_parameters__Fsl * mParameters[20] / ((1 + var_parameters__ksat * exp((-1 + var_parameters__nu) * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT)) * var_I_NCX__s3_sl); // uA_per_uF + const double var_parameters__pCa = 0.00054000000000000001 * mParameters[11]; // cm_per_sec + const double var_I_Ca__ibarca_j = 4 * (-0.34100000000000003 * mParameters[5] + 0.34100000000000003 * var_chaste_interface__Ca_Concentrations__Ca_j * exp(2 * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT)) * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT * mParameters[9] * var_parameters__pCa / (-1 + exp(2 * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT)); // uA_per_uF + const double var_I_Ca__I_Ca_junc = 0.45000000000000001 * pow(var_parameters__Q10CaL, var_parameters__Qpow) * (1 - var_chaste_interface__I_Ca__f_Ca_Bj + var_I_Ca__fcaCaj) * var_chaste_interface__I_Ca__d * var_chaste_interface__I_Ca__f * var_I_Ca__ibarca_j * var_parameters__Fjunc_CaL; // uA_per_uF + const double var_Ca_Concentrations__I_Ca_tot_junc = -2 * var_I_NCX__I_ncx_junc + var_I_Ca__I_Ca_junc + var_I_CaBK__I_cabk_junc + var_I_PCa__I_pca_junc; // uA_per_uF + const double var_I_Ca__ibarca_sl = 4 * (-0.34100000000000003 * mParameters[5] + 0.34100000000000003 * var_chaste_interface__Ca_Concentrations__Ca_sl * exp(2 * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT)) * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT * mParameters[9] * var_parameters__pCa / (-1 + exp(2 * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT)); // uA_per_uF + const double var_I_Ca__I_Ca_sl = 0.45000000000000001 * pow(var_parameters__Q10CaL, var_parameters__Qpow) * (1 - var_chaste_interface__I_Ca__f_Ca_Bsl + var_I_Ca__fcaCaMSL) * var_chaste_interface__I_Ca__d * var_chaste_interface__I_Ca__f * var_I_Ca__ibarca_sl * var_parameters__Fsl_CaL; // uA_per_uF + const double var_Ca_Concentrations__I_Ca_tot_sl = -2 * var_I_NCX__I_ncx_sl + var_I_Ca__I_Ca_sl + var_I_CaBK__I_cabk_sl + var_I_PCa__I_pca_sl; // uA_per_uF + const double var_membrane_potential__I_Ca_tot = var_Ca_Concentrations__I_Ca_tot_junc + var_Ca_Concentrations__I_Ca_tot_sl; // uA_per_uF + const double var_parameters__pK = 1.35e-7; // cm_per_sec + const double var_I_Ca__ibark = (-0.75 * mParameters[7] + 0.75 * var_chaste_interface__K_Concentration__K_i * exp(var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT)) * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT * mParameters[9] * var_parameters__pK / (-1 + exp(var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT)); // uA_per_uF + const double var_I_Ca__I_CaK = 0.45000000000000001 * pow(var_parameters__Q10CaL, var_parameters__Qpow) * ((1 - var_chaste_interface__I_Ca__f_Ca_Bj + var_I_Ca__fcaCaj) * var_parameters__Fjunc_CaL + (1 - var_chaste_interface__I_Ca__f_Ca_Bsl + var_I_Ca__fcaCaMSL) * var_parameters__Fsl_CaL) * var_chaste_interface__I_Ca__d * var_chaste_interface__I_Ca__f * var_I_Ca__ibark; // uA_per_uF + const double var_parameters__pNa = 7.4999999999999993e-9; // cm_per_sec + const double var_I_Ca__ibarna_j = (-0.75 * mParameters[8] + 0.75 * var_chaste_interface__Na_Concentrations__Na_j * exp(var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT)) * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT * mParameters[9] * var_parameters__pNa / (-1 + exp(var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT)); // uA_per_uF + const double var_I_Ca__I_CaNa_junc = 0.45000000000000001 * pow(var_parameters__Q10CaL, var_parameters__Qpow) * (1 - var_chaste_interface__I_Ca__f_Ca_Bj + var_I_Ca__fcaCaj) * var_chaste_interface__I_Ca__d * var_chaste_interface__I_Ca__f * var_I_Ca__ibarna_j * var_parameters__Fjunc_CaL; // uA_per_uF + const double var_I_Ca__ibarna_sl = (-0.75 * mParameters[8] + 0.75 * var_chaste_interface__Na_Concentrations__Na_sl * exp(var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT)) * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT * mParameters[9] * var_parameters__pNa / (-1 + exp(var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT)); // uA_per_uF + const double var_I_Ca__I_CaNa_sl = 0.45000000000000001 * pow(var_parameters__Q10CaL, var_parameters__Qpow) * (1 - var_chaste_interface__I_Ca__f_Ca_Bsl + var_I_Ca__fcaCaMSL) * var_chaste_interface__I_Ca__d * var_chaste_interface__I_Ca__f * var_I_Ca__ibarna_sl * var_parameters__Fsl_CaL; // uA_per_uF + const double var_Na_Concentrations__I_Na_tot_junc = 3 * var_I_NCX__I_ncx_junc + 3 * var_I_NaK__I_nak_junc + var_I_Ca__I_CaNa_junc + var_I_Na__I_Na_junc + var_I_NaBK__I_nabk_junc; // uA_per_uF + const double var_Na_Concentrations__I_Na_tot_sl = 3 * var_I_NCX__I_ncx_sl + 3 * var_I_NaK__I_nak_sl + var_I_Ca__I_CaNa_sl + var_I_Na__I_Na_sl + var_I_NaBK__I_nabk_sl; // uA_per_uF + const double var_membrane_potential__I_Na_tot = var_Na_Concentrations__I_Na_tot_junc + var_Na_Concentrations__I_Na_tot_sl; // uA_per_uF + const double var_parameters__pNaK = 0.018329999999999999; // dimensionless + const double var_I_Ks__eks = log((mParameters[8] * var_parameters__pNaK + mParameters[7]) / (var_chaste_interface__Na_Concentrations__Na_i * var_parameters__pNaK + var_chaste_interface__K_Concentration__K_i)) / var_parameters__FoRT; // mV + const double var_I_Ks__I_ks = pow(var_chaste_interface__I_Ks__x_ks, 2) * (-var_I_Ks__eks + var_chaste_interface__membrane_potential__V_m) * var_I_Ks__GKs_total; // uA_per_uF + const double var_K_Concentration__I_K_tot = -2 * var_I_NaK__I_nak + var_I_Ca__I_CaK + var_I_Ki__I_ki + var_I_Kp__I_kp + var_I_Kr__I_kr + var_I_Ks__I_ks + var_I_to__I_to; // uA_per_uF + const double var_membrane_potential__I_tot = var_K_Concentration__I_K_tot + var_membrane_potential__I_Ca_tot + var_membrane_potential__I_Cl_tot + var_membrane_potential__I_Na_tot; // uA_per_uF + const double d_dt_chaste_interface_var_membrane_potential__V_m = -var_membrane_potential__I_tot - var_membrane_potential__i_Stim; // mV / msec + + rY[0] += mDt*d_dt_chaste_interface_var_membrane_potential__V_m; + } + + void Cellgrandi_pasqualini_bers_2010_ssFromCellMLBackwardEuler::ComputeOneStepExceptVoltage(double var_chaste_interface__environment__time) + { + // Time units: millisecond + std::vector& rY = rGetStateVariables(); + double var_chaste_interface__membrane_potential__V_m = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: mV; Initial value: -81.4229700631461 + double var_chaste_interface__I_Na__m = rY[2]; + // Units: dimensionless; Initial value: 0.00381858135062259 + double var_chaste_interface__I_Na__h = rY[3]; + // Units: dimensionless; Initial value: 0.625086621635645 + double var_chaste_interface__I_Na__j = rY[4]; + // Units: dimensionless; Initial value: 0.62332507235506 + double var_chaste_interface__I_Kr__x_kr = rY[5]; + // Units: dimensionless; Initial value: 0.021733554982663 + double var_chaste_interface__I_Ks__x_ks = rY[6]; + // Units: dimensionless; Initial value: 0.00428981903391989 + double var_chaste_interface__I_to__x_to_s = rY[7]; + // Units: dimensionless; Initial value: 0.000441539203559411 + double var_chaste_interface__I_to__y_to_s = rY[8]; + // Units: dimensionless; Initial value: 0.784875334693892 + double var_chaste_interface__I_to__x_to_f = rY[9]; + // Units: dimensionless; Initial value: 0.000441531250866821 + double var_chaste_interface__I_to__y_to_f = rY[10]; + // Units: dimensionless; Initial value: 0.999995817153572 + double var_chaste_interface__I_Ca__d = rY[11]; + // Units: dimensionless; Initial value: 2.93982287251302e-06 + double var_chaste_interface__I_Ca__f = rY[12]; + // Units: dimensionless; Initial value: 0.99511673495949 + + const double var_I_Ca__dss = 1 / (1 + exp(-0.83333333333333337 - 0.16666666666666666 * var_chaste_interface__membrane_potential__V_m)); + const double var_I_Ca__fss = 1 / (1 + exp(3.8888888888888888 + 0.1111111111111111 * var_chaste_interface__membrane_potential__V_m)) + 0.59999999999999998 / (1 + exp(2.5 - 0.050000000000000003 * var_chaste_interface__membrane_potential__V_m)); + const double var_I_Ca__taud = 28.571428571428569 * (1 - exp(-0.83333333333333337 - 0.16666666666666666 * var_chaste_interface__membrane_potential__V_m)) * var_I_Ca__dss / (5 + var_chaste_interface__membrane_potential__V_m); + const double var_I_Ca__tauf = 1 / (0.02 + 0.019699999999999999 * exp(-0.23877882250000002 * pow((1 + 0.068965517241379309 * var_chaste_interface__membrane_potential__V_m), 2))); + const double var_I_Kr__tauxr = 230 / (1 + exp(2 + 0.050000000000000003 * var_chaste_interface__membrane_potential__V_m)) + 3300 / ((1 + exp(1.2222222222222223 + 0.1111111111111111 * var_chaste_interface__membrane_potential__V_m)) * (1 + exp(-2.4444444444444446 - 0.1111111111111111 * var_chaste_interface__membrane_potential__V_m))); + const double var_I_Kr__xrss = 1 / (1 + exp(-2 - 0.20000000000000001 * var_chaste_interface__membrane_potential__V_m)); + const double var_I_Ks__tauxs = 990.10000000000002 / (1 + exp(-0.17252124645892353 - 0.070821529745042494 * var_chaste_interface__membrane_potential__V_m)); + const double var_I_Ks__xsss = 1 / (1 + exp(-0.26666666666666666 - 0.070175438596491224 * var_chaste_interface__membrane_potential__V_m)); + const double var_I_Na__ah = ((var_chaste_interface__membrane_potential__V_m >= -40) ? (0) : (0.057000000000000002 * exp(-11.764705882352942 + 0.14705882352941177 * mParameters[14] - 0.14705882352941177 * var_chaste_interface__membrane_potential__V_m))); + const double var_I_Na__aj = ((var_chaste_interface__membrane_potential__V_m >= -40) ? (0) : ((37.780000000000001 + var_chaste_interface__membrane_potential__V_m) * (-25428 * exp(0.24440000000000001 * var_chaste_interface__membrane_potential__V_m - 0.24440000000000001 * mParameters[14]) - 6.9480000000000002e-6 * exp(0.043909999999999998 * mParameters[14] - 0.043909999999999998 * var_chaste_interface__membrane_potential__V_m)) / (1 + exp(24.640530000000002 + 0.311 * var_chaste_interface__membrane_potential__V_m - 0.311 * mParameters[14])))); + const double var_I_Na__bh = ((var_chaste_interface__membrane_potential__V_m >= -40) ? (5.9230769230769234 / (1 + exp(-0.96036036036036043 + 0.0900900900900901 * mParameters[14] - 0.0900900900900901 * var_chaste_interface__membrane_potential__V_m))) : (310000 * exp(0.34849999999999998 * var_chaste_interface__membrane_potential__V_m - 0.34849999999999998 * mParameters[14]) + 2.7000000000000002 * exp(0.079000000000000001 * var_chaste_interface__membrane_potential__V_m - 0.079000000000000001 * mParameters[14]))); + const double var_I_Na__bj = ((var_chaste_interface__membrane_potential__V_m >= -40) ? (0.59999999999999998 * exp(0.057000000000000002 * var_chaste_interface__membrane_potential__V_m - 0.057000000000000002 * mParameters[14]) / (1 + exp(-3.2000000000000002 + 0.10000000000000001 * mParameters[14] - 0.10000000000000001 * var_chaste_interface__membrane_potential__V_m))) : (0.024240000000000001 * exp(0.01052 * mParameters[14] - 0.01052 * var_chaste_interface__membrane_potential__V_m) / (1 + exp(-5.5312920000000005 + 0.13780000000000001 * mParameters[14] - 0.13780000000000001 * var_chaste_interface__membrane_potential__V_m)))); + const double var_I_Na__hss = 0.01 * mParameters[13] + (1 - 0.01 * mParameters[13]) / pow((1 + exp(9.6298788694481825 + 0.13458950201884254 * var_chaste_interface__membrane_potential__V_m - 0.13458950201884254 * mParameters[14])), 2); + const double var_I_Na__jss = 0.01 * mParameters[13] + (1 - 0.01 * mParameters[13]) / pow((1 + exp(9.6298788694481825 + 0.13458950201884254 * var_chaste_interface__membrane_potential__V_m - 0.13458950201884254 * mParameters[14])), 2); + const double var_I_Na__mss = 1 / pow((1 + exp(-6.2967884828349945 - 0.11074197120708749 * var_chaste_interface__membrane_potential__V_m)), 2); + const double var_I_Na__tauh = 1 / (var_I_Na__ah + var_I_Na__bh); + const double var_I_Na__tauj = 1 / (var_I_Na__aj + var_I_Na__bj); + const double var_I_Na__taum = 0.12920000000000001 * exp(-8.682389366752302 * pow((1 + 0.021838829438742085 * var_chaste_interface__membrane_potential__V_m), 2)) + 0.064869999999999997 * exp(-0.0089012876052174655 * pow((-1 + 0.2073398299813394 * var_chaste_interface__membrane_potential__V_m), 2)); + const double var_I_to__tauxtof = 0.5 + 8.5 * exp(-0.81000000000000005 * pow((1 + 0.022222222222222223 * var_chaste_interface__membrane_potential__V_m), 2)); + const double var_I_to__tauxtos = 0.5 + 9 / (1 + exp(0.20000000000000001 + 0.066666666666666666 * var_chaste_interface__membrane_potential__V_m)); + const double var_I_to__tauytof = 7 + 85 * exp(-7.2727272727272725 * pow((1 + 0.025000000000000001 * var_chaste_interface__membrane_potential__V_m), 2)); + const double var_I_to__tauytos = 30 + 800 / (1 + exp(6 + 0.10000000000000001 * var_chaste_interface__membrane_potential__V_m)); + const double var_I_to__xtoss = 1 / (1 + exp(1.4615384615384615 - 0.076923076923076927 * var_chaste_interface__membrane_potential__V_m)); + const double var_I_to__ytoss = 1 / (1 + exp(3.8999999999999999 + 0.20000000000000001 * var_chaste_interface__membrane_potential__V_m)); + + + rY[5] = (var_chaste_interface__I_Kr__x_kr + ((var_I_Kr__xrss / var_I_Kr__tauxr) * mDt)) / (1.0 - ((-1 / var_I_Kr__tauxr) * mDt)); + rY[6] = (var_chaste_interface__I_Ks__x_ks + ((var_I_Ks__xsss / var_I_Ks__tauxs) * mDt)) / (1.0 - ((-1 / var_I_Ks__tauxs) * mDt)); + rY[9] = (var_chaste_interface__I_to__x_to_f + ((var_I_to__xtoss / var_I_to__tauxtof) * mDt)) / (1.0 - ((-1 / var_I_to__tauxtof) * mDt)); + rY[7] = (var_chaste_interface__I_to__x_to_s + ((var_I_to__xtoss / var_I_to__tauxtos) * mDt)) / (1.0 - ((-1 / var_I_to__tauxtos) * mDt)); + rY[10] = (var_chaste_interface__I_to__y_to_f + ((var_I_to__ytoss / var_I_to__tauytof) * mDt)) / (1.0 - ((-1 / var_I_to__tauytof) * mDt)); + rY[8] = (var_chaste_interface__I_to__y_to_s + ((var_I_to__ytoss / var_I_to__tauytos) * mDt)) / (1.0 - ((-1 / var_I_to__tauytos) * mDt)); + rY[11] = (var_chaste_interface__I_Ca__d + ((var_I_Ca__dss / var_I_Ca__taud) * mDt)) / (1.0 - ((-1 / var_I_Ca__taud) * mDt)); + rY[12] = (var_chaste_interface__I_Ca__f + ((var_I_Ca__fss / var_I_Ca__tauf) * mDt)) / (1.0 - ((-1 / var_I_Ca__tauf) * mDt)); + rY[3] = (var_chaste_interface__I_Na__h + ((var_I_Na__hss / var_I_Na__tauh) * mDt)) / (1.0 - ((-1 / var_I_Na__tauh) * mDt)); + rY[4] = (var_chaste_interface__I_Na__j + ((var_I_Na__jss / var_I_Na__tauj) * mDt)) / (1.0 - ((-1 / var_I_Na__tauj) * mDt)); + rY[2] = (var_chaste_interface__I_Na__m + ((var_I_Na__mss / var_I_Na__taum) * mDt)) / (1.0 - ((-1 / var_I_Na__taum) * mDt)); + + double _guess[27] = {rY[1],rY[37],rY[38],rY[23],rY[24],rY[25],rY[26],rY[21],rY[22],rY[20],rY[13],rY[14],rY[29],rY[30],rY[27],rY[28],rY[36],rY[18],rY[19],rY[35],rY[33],rY[34],rY[32],rY[31],rY[17],rY[16],rY[15]}; + CardiacNewtonSolver<27,Cellgrandi_pasqualini_bers_2010_ssFromCellMLBackwardEuler>* _p_solver = CardiacNewtonSolver<27,Cellgrandi_pasqualini_bers_2010_ssFromCellMLBackwardEuler>::Instance(); + _p_solver->Solve(*this, var_chaste_interface__environment__time, _guess); + rY[1] = _guess[0]; + rY[37] = _guess[1]; + rY[38] = _guess[2]; + rY[23] = _guess[3]; + rY[24] = _guess[4]; + rY[25] = _guess[5]; + rY[26] = _guess[6]; + rY[21] = _guess[7]; + rY[22] = _guess[8]; + rY[20] = _guess[9]; + rY[13] = _guess[10]; + rY[14] = _guess[11]; + rY[29] = _guess[12]; + rY[30] = _guess[13]; + rY[27] = _guess[14]; + rY[28] = _guess[15]; + rY[36] = _guess[16]; + rY[18] = _guess[17]; + rY[19] = _guess[18]; + rY[35] = _guess[19]; + rY[33] = _guess[20]; + rY[34] = _guess[21]; + rY[32] = _guess[22]; + rY[31] = _guess[23]; + rY[17] = _guess[24]; + rY[16] = _guess[25]; + rY[15] = _guess[26]; + } + + std::vector Cellgrandi_pasqualini_bers_2010_ssFromCellMLBackwardEuler::ComputeDerivedQuantities(double var_chaste_interface__environment__time, const std::vector & rY) + { + // Inputs: + // Time units: millisecond + double var_chaste_interface__membrane_potential__V_m = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: mV; Initial value: -81.4229700631461 + double var_chaste_interface__Ca_Concentrations__Ca_i = rY[1]; + // Units: mM; Initial value: 8.72745589849657e-05 + double var_chaste_interface__I_Na__m = rY[2]; + // Units: dimensionless; Initial value: 0.00381858135062259 + double var_chaste_interface__I_Na__h = rY[3]; + // Units: dimensionless; Initial value: 0.625086621635645 + double var_chaste_interface__I_Na__j = rY[4]; + // Units: dimensionless; Initial value: 0.62332507235506 + double var_chaste_interface__I_Kr__x_kr = rY[5]; + // Units: dimensionless; Initial value: 0.021733554982663 + double var_chaste_interface__I_Ks__x_ks = rY[6]; + // Units: dimensionless; Initial value: 0.00428981903391989 + double var_chaste_interface__I_to__x_to_s = rY[7]; + // Units: dimensionless; Initial value: 0.000441539203559411 + double var_chaste_interface__I_to__y_to_s = rY[8]; + // Units: dimensionless; Initial value: 0.784875334693892 + double var_chaste_interface__I_to__x_to_f = rY[9]; + // Units: dimensionless; Initial value: 0.000441531250866821 + double var_chaste_interface__I_to__y_to_f = rY[10]; + // Units: dimensionless; Initial value: 0.999995817153572 + double var_chaste_interface__I_Ca__d = rY[11]; + // Units: dimensionless; Initial value: 2.93982287251302e-06 + double var_chaste_interface__I_Ca__f = rY[12]; + // Units: dimensionless; Initial value: 0.99511673495949 + double var_chaste_interface__I_Ca__f_Ca_Bj = rY[13]; + // Units: dimensionless; Initial value: 0.0246142436477748 + double var_chaste_interface__I_Ca__f_Ca_Bsl = rY[14]; + // Units: dimensionless; Initial value: 0.0152416826209301 + double var_chaste_interface__SR_Fluxes__Ry_Ro = rY[16]; + // Units: mM; Initial value: 7.37484660389498e-07 + double var_chaste_interface__SR_Ca_Concentrations__Ca_sr = rY[32]; + // Units: mM; Initial value: 0.555180633859957 + double var_chaste_interface__Na_Concentrations__Na_j = rY[33]; + // Units: mM; Initial value: 8.3215690202059 + double var_chaste_interface__Na_Concentrations__Na_sl = rY[34]; + // Units: mM; Initial value: 8.32094589677861 + double var_chaste_interface__Na_Concentrations__Na_i = rY[35]; + // Units: mM; Initial value: 8.32114502072456 + double var_chaste_interface__K_Concentration__K_i = rY[36]; + // Units: mM; Initial value: 120.0 + double var_chaste_interface__Ca_Concentrations__Ca_j = rY[37]; + // Units: mM; Initial value: 0.000175415190830688 + double var_chaste_interface__Ca_Concentrations__Ca_sl = rY[38]; + // Units: mM; Initial value: 0.000106544589194246 + + // Mathematics + const double var_I_Ca__fcaCaMSL = 0; // dimensionless + const double var_I_Ca__fcaCaj = 0; // dimensionless + const double var_I_Ks__gks_junc = 0.0035000000000000001; // mS_per_uF + const double var_I_Ks__gks_sl = 0.0035000000000000001; // mS_per_uF + const double var_SR_Fluxes__J_SRleak = (-var_chaste_interface__Ca_Concentrations__Ca_j + var_chaste_interface__SR_Ca_Concentrations__Ca_sr) * mParameters[0]; // mM_per_msec + const double var_I_Ca__tauf = 1 / (0.02 + 0.019699999999999999 * exp(-0.23877882250000002 * pow((1 + 0.068965517241379309 * var_chaste_interface__membrane_potential__V_m), 2))); // msec + const double var_I_Kr__rkr = 1 / (1 + exp(3.0833333333333335 + 0.041666666666666664 * var_chaste_interface__membrane_potential__V_m)); // dimensionless + const double var_I_Na__ah = ((var_chaste_interface__membrane_potential__V_m >= -40) ? (0) : (0.057000000000000002 * exp(-11.764705882352942 + 0.14705882352941177 * mParameters[14] - 0.14705882352941177 * var_chaste_interface__membrane_potential__V_m))); // dimensionless + const double var_I_Na__aj = ((var_chaste_interface__membrane_potential__V_m >= -40) ? (0) : ((37.780000000000001 + var_chaste_interface__membrane_potential__V_m) * (-25428 * exp(0.24440000000000001 * var_chaste_interface__membrane_potential__V_m - 0.24440000000000001 * mParameters[14]) - 6.9480000000000002e-6 * exp(0.043909999999999998 * mParameters[14] - 0.043909999999999998 * var_chaste_interface__membrane_potential__V_m)) / (1 + exp(24.640530000000002 + 0.311 * var_chaste_interface__membrane_potential__V_m - 0.311 * mParameters[14])))); // dimensionless + const double var_I_Na__bh = ((var_chaste_interface__membrane_potential__V_m >= -40) ? (5.9230769230769234 / (1 + exp(-0.96036036036036043 + 0.0900900900900901 * mParameters[14] - 0.0900900900900901 * var_chaste_interface__membrane_potential__V_m))) : (310000 * exp(0.34849999999999998 * var_chaste_interface__membrane_potential__V_m - 0.34849999999999998 * mParameters[14]) + 2.7000000000000002 * exp(0.079000000000000001 * var_chaste_interface__membrane_potential__V_m - 0.079000000000000001 * mParameters[14]))); // dimensionless + const double var_I_Na__bj = ((var_chaste_interface__membrane_potential__V_m >= -40) ? (0.59999999999999998 * exp(0.057000000000000002 * var_chaste_interface__membrane_potential__V_m - 0.057000000000000002 * mParameters[14]) / (1 + exp(-3.2000000000000002 + 0.10000000000000001 * mParameters[14] - 0.10000000000000001 * var_chaste_interface__membrane_potential__V_m))) : (0.024240000000000001 * exp(0.01052 * mParameters[14] - 0.01052 * var_chaste_interface__membrane_potential__V_m) / (1 + exp(-5.5312920000000005 + 0.13780000000000001 * mParameters[14] - 0.13780000000000001 * var_chaste_interface__membrane_potential__V_m)))); // dimensionless + const double var_I_Na__tauh = 1 / (var_I_Na__ah + var_I_Na__bh); // msec + const double var_I_Na__tauj = 1 / (var_I_Na__aj + var_I_Na__bj); // msec + const double var_membrane_potential__i_Stim_converted = GetIntracellularAreaStimulus(var_chaste_interface__environment__time); // uA_per_cm2 + const double var_parameters__Cmem_converted = 1000000 * mParameters[22]; // uF + const double var_parameters__Fjunc = 0.11; // dimensionless + const double var_parameters__Fjunc_CaL = 0.90000000000000002; // dimensionless + const double var_parameters__Fsl = 1 - var_parameters__Fjunc; // dimensionless + const double var_I_Ks__GKs_total = (var_I_Ks__gks_junc * var_parameters__Fjunc + var_I_Ks__gks_sl * var_parameters__Fsl) * mParameters[18]; // mS_per_uF + const double var_parameters__Fsl_CaL = 1 - var_parameters__Fjunc_CaL; // dimensionless + const double var_parameters__IbarSLCaP = 0.067299999999999999; // uA_per_uF + const double var_parameters__Kdact = 0.00014999999999999999; // mM + const double var_I_NCX__Ka_junc = 1 / (1 + pow(var_parameters__Kdact, 2) / pow(var_chaste_interface__Ca_Concentrations__Ca_j, 2)); // dimensionless + const double var_I_NCX__Ka_sl = 1 / (1 + pow(var_parameters__Kdact, 2) / pow(var_chaste_interface__Ca_Concentrations__Ca_sl, 2)); // dimensionless + const double var_parameters__KmCai = 0.0035899999999999999; // mM + const double var_parameters__KmCao = 1.3; // mM + const double var_parameters__KmKo = 1.5; // mM + const double var_parameters__KmNai = 12.289999999999999; // mM + const double var_parameters__KmNaip = 11; // mM + const double var_parameters__KmNao = 87.5; // mM + const double var_parameters__KmPCa = 0.00050000000000000001; // mM + const double var_parameters__Kmf = 0.00024600000000000002; // mM + const double var_parameters__Kmr = 1.7; // mM + const double var_I_Ki__g_K1 = 0.43033148291193518 * sqrt(mParameters[7]) * mParameters[16]; // mS_per_uF + const double var_I_Kr__gkr = 0.43033148291193518 * sqrt(mParameters[7]) * mParameters[17]; // mS_per_uF + const double var_I_NCX__s3_junc = pow(var_chaste_interface__Na_Concentrations__Na_j, 3) * mParameters[5] + pow(var_chaste_interface__Na_Concentrations__Na_j, 3) * var_parameters__KmCao + pow(mParameters[8], 3) * var_chaste_interface__Ca_Concentrations__Ca_j + pow(var_parameters__KmNao, 3) * (1 + var_chaste_interface__Ca_Concentrations__Ca_j / var_parameters__KmCai) * var_chaste_interface__Ca_Concentrations__Ca_j + pow(mParameters[8], 3) * (1 + pow(var_chaste_interface__Na_Concentrations__Na_j, 3) / pow(var_parameters__KmNai, 3)) * var_parameters__KmCai; // mM4 + const double var_I_NCX__s3_sl = pow(var_chaste_interface__Na_Concentrations__Na_sl, 3) * mParameters[5] + pow(var_chaste_interface__Na_Concentrations__Na_sl, 3) * var_parameters__KmCao + pow(mParameters[8], 3) * var_chaste_interface__Ca_Concentrations__Ca_sl + pow(var_parameters__KmNao, 3) * (1 + var_chaste_interface__Ca_Concentrations__Ca_sl / var_parameters__KmCai) * var_chaste_interface__Ca_Concentrations__Ca_sl + pow(mParameters[8], 3) * (1 + pow(var_chaste_interface__Na_Concentrations__Na_sl, 3) / pow(var_parameters__KmNai, 3)) * var_parameters__KmCai; // mM4 + const double var_I_NaK__sigma = -0.14285714285714285 + 0.14285714285714285 * exp(0.01485884101040119 * mParameters[8]); // dimensionless + const double var_parameters__Q10CaL = 1.8; // dimensionless + const double var_parameters__Q10NCX = 1.5700000000000001; // dimensionless + const double var_parameters__Q10SLCaP = 2.3500000000000001; // dimensionless + const double var_parameters__Q10SRCaP = 2.6000000000000001; // dimensionless + const double var_parameters__FoRT = mParameters[9] / (mParameters[10] * mParameters[23]); // per_mV + const double var_I_NaK__fnak = 1 / (1 + 0.1245 * exp(-0.10000000000000001 * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT) + 0.036499999999999998 * var_I_NaK__sigma * exp(-var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT)); // dimensionless + const double var_I_NaK__I_nak_junc = var_I_NaK__fnak * var_parameters__Fjunc * mParameters[21] * mParameters[7] / ((1 + pow(var_parameters__KmNaip, 4) / pow(var_chaste_interface__Na_Concentrations__Na_j, 4)) * (var_parameters__KmKo + mParameters[7])); // uA_per_uF + const double var_I_NaK__I_nak_sl = var_I_NaK__fnak * var_parameters__Fsl * mParameters[21] * mParameters[7] / ((1 + pow(var_parameters__KmNaip, 4) / pow(var_chaste_interface__Na_Concentrations__Na_sl, 4)) * (var_parameters__KmKo + mParameters[7])); // uA_per_uF + const double var_I_NaK__I_nak = var_I_NaK__I_nak_junc + var_I_NaK__I_nak_sl; // uA_per_uF + const double var_I_NaK__I_nak_converted = HeartConfig::Instance()->GetCapacitance() * var_I_NaK__I_nak; // uA_per_cm2 + const double var_parameters__Qpow = -31 + 0.10000000000000001 * mParameters[23]; // dimensionless + const double var_I_PCa__I_pca_junc = pow(var_chaste_interface__Ca_Concentrations__Ca_j, 1.6000000000000001) * pow(var_parameters__Q10SLCaP, var_parameters__Qpow) * var_parameters__Fjunc * var_parameters__IbarSLCaP / (pow(var_chaste_interface__Ca_Concentrations__Ca_j, 1.6000000000000001) + pow(var_parameters__KmPCa, 1.6000000000000001)); // uA_per_uF + const double var_I_PCa__I_pca_sl = pow(var_chaste_interface__Ca_Concentrations__Ca_sl, 1.6000000000000001) * pow(var_parameters__Q10SLCaP, var_parameters__Qpow) * var_parameters__Fsl * var_parameters__IbarSLCaP / (pow(var_chaste_interface__Ca_Concentrations__Ca_sl, 1.6000000000000001) + pow(var_parameters__KmPCa, 1.6000000000000001)); // uA_per_uF + const double var_I_PCa__I_pca = var_I_PCa__I_pca_junc + var_I_PCa__I_pca_sl; // uA_per_uF + const double var_I_PCa__I_pca_converted = HeartConfig::Instance()->GetCapacitance() * var_I_PCa__I_pca; // uA_per_cm2 + const double var_parameters__ecl = log(mParameters[4] / mParameters[6]) / var_parameters__FoRT; // mV + const double var_parameters__ek = log(mParameters[7] / var_chaste_interface__K_Concentration__K_i) / var_parameters__FoRT; // mV + const double var_I_Ki__aki = 1.02 / (1 + exp(-14.1227775 + 0.23849999999999999 * var_chaste_interface__membrane_potential__V_m - 0.23849999999999999 * var_parameters__ek)); // dimensionless + const double var_I_Ki__bki = (0.49124000000000001 * exp(0.43983232 + 0.080320000000000003 * var_chaste_interface__membrane_potential__V_m - 0.080320000000000003 * var_parameters__ek) + exp(-36.698642499999998 + 0.061749999999999999 * var_chaste_interface__membrane_potential__V_m - 0.061749999999999999 * var_parameters__ek)) / (1 + exp(-2.4444678999999998 + 0.51429999999999998 * var_parameters__ek - 0.51429999999999998 * var_chaste_interface__membrane_potential__V_m)); // dimensionless + const double var_I_Ki__kiss = var_I_Ki__aki / (var_I_Ki__aki + var_I_Ki__bki); // dimensionless + const double var_I_Ki__I_ki = (-var_parameters__ek + var_chaste_interface__membrane_potential__V_m) * var_I_Ki__g_K1 * var_I_Ki__kiss; // uA_per_uF + const double var_I_Ki__I_ki_converted = HeartConfig::Instance()->GetCapacitance() * var_I_Ki__I_ki; // uA_per_cm2 + const double var_I_Kr__I_kr = (-var_parameters__ek + var_chaste_interface__membrane_potential__V_m) * var_I_Kr__gkr * var_I_Kr__rkr * var_chaste_interface__I_Kr__x_kr; // uA_per_uF + const double var_I_Kr__I_kr_converted = HeartConfig::Instance()->GetCapacitance() * var_I_Kr__I_kr; // uA_per_cm2 + const double var_parameters__ena_junc = log(mParameters[8] / var_chaste_interface__Na_Concentrations__Na_j) / var_parameters__FoRT; // mV + const double var_I_Na__I_Na_junc = pow(var_chaste_interface__I_Na__m, 3) * (-var_parameters__ena_junc + var_chaste_interface__membrane_potential__V_m) * var_chaste_interface__I_Na__h * var_chaste_interface__I_Na__j * var_parameters__Fjunc * mParameters[12]; // uA_per_uF + const double var_parameters__ena_sl = log(mParameters[8] / var_chaste_interface__Na_Concentrations__Na_sl) / var_parameters__FoRT; // mV + const double var_I_Na__I_Na_sl = pow(var_chaste_interface__I_Na__m, 3) * (-var_parameters__ena_sl + var_chaste_interface__membrane_potential__V_m) * var_chaste_interface__I_Na__h * var_chaste_interface__I_Na__j * var_parameters__Fsl * mParameters[12]; // uA_per_uF + const double var_I_Na__I_Na = var_I_Na__I_Na_junc + var_I_Na__I_Na_sl; // uA_per_uF + const double var_I_Na__I_Na_converted = HeartConfig::Instance()->GetCapacitance() * var_I_Na__I_Na; // uA_per_cm2 + const double var_parameters__epi = 1; // dimensionless + const double var_I_to__GtoFast = ((var_parameters__epi == 1) ? (0.1144 * mParameters[15]) : (0.0014039999999999999 * mParameters[15])); // mS_per_uF + const double var_I_to__GtoSlow = ((var_parameters__epi == 1) ? (0.015599999999999999 * mParameters[19]) : (0.037595999999999997 * mParameters[19])); // mS_per_uF + const double var_I_to__I_tof = (-var_parameters__ek + var_chaste_interface__membrane_potential__V_m) * var_I_to__GtoFast * var_chaste_interface__I_to__x_to_f * var_chaste_interface__I_to__y_to_f; // uA_per_uF + const double var_I_to__I_tof_converted = HeartConfig::Instance()->GetCapacitance() * var_I_to__I_tof; // uA_per_cm2 + const double var_I_to__I_tos = (-var_parameters__ek + var_chaste_interface__membrane_potential__V_m) * var_I_to__GtoSlow * var_chaste_interface__I_to__x_to_s * var_chaste_interface__I_to__y_to_s; // uA_per_uF + const double var_I_to__I_to = var_I_to__I_tof + var_I_to__I_tos; // uA_per_uF + const double var_I_to__I_to_converted = HeartConfig::Instance()->GetCapacitance() * var_I_to__I_to; // uA_per_cm2 + const double var_I_to__I_tos_converted = HeartConfig::Instance()->GetCapacitance() * var_I_to__I_tos; // uA_per_cm2 + const double var_parameters__hillSRCaP = 1.7869999999999999; // dimensionless + const double var_SR_Fluxes__J_serca = pow(var_parameters__Q10SRCaP, var_parameters__Qpow) * (pow((var_chaste_interface__Ca_Concentrations__Ca_i / var_parameters__Kmf), var_parameters__hillSRCaP) - pow((var_chaste_interface__SR_Ca_Concentrations__Ca_sr / var_parameters__Kmr), var_parameters__hillSRCaP)) * mParameters[2] / (1 + pow((var_chaste_interface__Ca_Concentrations__Ca_i / var_parameters__Kmf), var_parameters__hillSRCaP) + pow((var_chaste_interface__SR_Ca_Concentrations__Ca_sr / var_parameters__Kmr), var_parameters__hillSRCaP)); // mM_per_msec + const double var_SR_Fluxes__J_SRCarel = (-var_chaste_interface__Ca_Concentrations__Ca_j + var_chaste_interface__SR_Ca_Concentrations__Ca_sr) * var_chaste_interface__SR_Fluxes__Ry_Ro * mParameters[1]; // mM_per_msec + const double var_parameters__ksat = 0.32000000000000001; // dimensionless + const double var_parameters__nu = 0.27000000000000002; // dimensionless + const double var_I_NCX__s1_junc = pow(var_chaste_interface__Na_Concentrations__Na_j, 3) * mParameters[5] * exp(var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT * var_parameters__nu); // mM4 + const double var_I_NCX__s1_sl = pow(var_chaste_interface__Na_Concentrations__Na_sl, 3) * mParameters[5] * exp(var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT * var_parameters__nu); // mM4 + const double var_I_NCX__s2_junc = pow(mParameters[8], 3) * var_chaste_interface__Ca_Concentrations__Ca_j * exp((-1 + var_parameters__nu) * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT); // mM4 + const double var_I_NCX__I_ncx_junc = pow(var_parameters__Q10NCX, var_parameters__Qpow) * (-var_I_NCX__s2_junc + var_I_NCX__s1_junc) * var_I_NCX__Ka_junc * var_parameters__Fjunc * mParameters[20] / ((1 + var_parameters__ksat * exp((-1 + var_parameters__nu) * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT)) * var_I_NCX__s3_junc); // uA_per_uF + const double var_I_NCX__s2_sl = pow(mParameters[8], 3) * var_chaste_interface__Ca_Concentrations__Ca_sl * exp((-1 + var_parameters__nu) * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT); // mM4 + const double var_I_NCX__I_ncx_sl = pow(var_parameters__Q10NCX, var_parameters__Qpow) * (-var_I_NCX__s2_sl + var_I_NCX__s1_sl) * var_I_NCX__Ka_sl * var_parameters__Fsl * mParameters[20] / ((1 + var_parameters__ksat * exp((-1 + var_parameters__nu) * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT)) * var_I_NCX__s3_sl); // uA_per_uF + const double var_I_NCX__I_ncx = var_I_NCX__I_ncx_junc + var_I_NCX__I_ncx_sl; // uA_per_uF + const double var_I_NCX__I_ncx_converted = HeartConfig::Instance()->GetCapacitance() * var_I_NCX__I_ncx; // uA_per_cm2 + const double var_parameters__pCa = 0.00054000000000000001 * mParameters[11]; // cm_per_sec + const double var_I_Ca__ibarca_j = 4 * (-0.34100000000000003 * mParameters[5] + 0.34100000000000003 * var_chaste_interface__Ca_Concentrations__Ca_j * exp(2 * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT)) * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT * mParameters[9] * var_parameters__pCa / (-1 + exp(2 * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT)); // uA_per_uF + const double var_I_Ca__I_Ca_junc = 0.45000000000000001 * pow(var_parameters__Q10CaL, var_parameters__Qpow) * (1 - var_chaste_interface__I_Ca__f_Ca_Bj + var_I_Ca__fcaCaj) * var_chaste_interface__I_Ca__d * var_chaste_interface__I_Ca__f * var_I_Ca__ibarca_j * var_parameters__Fjunc_CaL; // uA_per_uF + const double var_I_Ca__ibarca_sl = 4 * (-0.34100000000000003 * mParameters[5] + 0.34100000000000003 * var_chaste_interface__Ca_Concentrations__Ca_sl * exp(2 * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT)) * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT * mParameters[9] * var_parameters__pCa / (-1 + exp(2 * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT)); // uA_per_uF + const double var_I_Ca__I_Ca_sl = 0.45000000000000001 * pow(var_parameters__Q10CaL, var_parameters__Qpow) * (1 - var_chaste_interface__I_Ca__f_Ca_Bsl + var_I_Ca__fcaCaMSL) * var_chaste_interface__I_Ca__d * var_chaste_interface__I_Ca__f * var_I_Ca__ibarca_sl * var_parameters__Fsl_CaL; // uA_per_uF + const double var_I_Ca__I_Ca = var_I_Ca__I_Ca_junc + var_I_Ca__I_Ca_sl; // uA_per_uF + const double var_I_Ca__I_Ca_converted = HeartConfig::Instance()->GetCapacitance() * var_I_Ca__I_Ca; // uA_per_cm2 + const double var_parameters__pNaK = 0.018329999999999999; // dimensionless + const double var_I_Ks__eks = log((mParameters[8] * var_parameters__pNaK + mParameters[7]) / (var_chaste_interface__Na_Concentrations__Na_i * var_parameters__pNaK + var_chaste_interface__K_Concentration__K_i)) / var_parameters__FoRT; // mV + const double var_I_Ks__I_ks = pow(var_chaste_interface__I_Ks__x_ks, 2) * (-var_I_Ks__eks + var_chaste_interface__membrane_potential__V_m) * var_I_Ks__GKs_total; // uA_per_uF + const double var_I_Ks__I_ks_converted = HeartConfig::Instance()->GetCapacitance() * var_I_Ks__I_ks; // uA_per_cm2 + + std::vector dqs(26); + dqs[0] = var_SR_Fluxes__J_SRleak; + dqs[1] = var_SR_Fluxes__J_SRCarel; + dqs[2] = var_SR_Fluxes__J_serca; + dqs[3] = var_parameters__ecl; + dqs[4] = var_I_Ca__I_Ca_converted; + dqs[5] = var_I_Ca__tauf; + dqs[6] = var_I_PCa__I_pca_converted; + dqs[7] = var_parameters__Cmem_converted; + dqs[8] = var_I_Na__I_Na_converted; + dqs[9] = var_I_Na__tauh; + dqs[10] = var_I_Na__tauj; + dqs[11] = var_I_to__I_tof_converted; + dqs[12] = var_I_to__GtoFast; + dqs[13] = var_I_Ki__I_ki_converted; + dqs[14] = var_I_Ki__g_K1; + dqs[15] = var_I_Kr__I_kr_converted; + dqs[16] = var_I_Ks__I_ks_converted; + dqs[17] = var_I_Ks__GKs_total; + dqs[18] = var_I_to__I_tos_converted; + dqs[19] = var_I_to__GtoSlow; + dqs[20] = var_I_NCX__I_ncx_converted; + dqs[21] = var_I_NaK__I_nak_converted; + dqs[22] = var_membrane_potential__i_Stim_converted; + dqs[23] = var_I_to__I_to_converted; + dqs[24] = var_parameters__ek; + dqs[25] = var_chaste_interface__environment__time; + return dqs; + } + +template<> +void OdeSystemInformation::Initialise(void) +{ + this->mSystemName = "grandi_pasqualini_bers_2010_epi"; + this->mFreeVariableName = "time"; + this->mFreeVariableUnits = "msec"; + + // rY[0]: + this->mVariableNames.push_back("membrane_voltage"); + this->mVariableUnits.push_back("mV"); + this->mInitialConditions.push_back(-81.4229700631461); + + // rY[1]: + this->mVariableNames.push_back("cytosolic_calcium_concentration"); + this->mVariableUnits.push_back("mM"); + this->mInitialConditions.push_back(8.72745589849657e-05); + + // rY[2]: + this->mVariableNames.push_back("membrane_fast_sodium_current_m_gate"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.00381858135062259); + + // rY[3]: + this->mVariableNames.push_back("membrane_fast_sodium_current_h_gate"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.625086621635645); + + // rY[4]: + this->mVariableNames.push_back("membrane_fast_sodium_current_j_gate"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.62332507235506); + + // rY[5]: + this->mVariableNames.push_back("I_Kr__x_kr"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.021733554982663); + + // rY[6]: + this->mVariableNames.push_back("I_Ks__x_ks"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.00428981903391989); + + // rY[7]: + this->mVariableNames.push_back("I_to__x_to_s"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.000441539203559411); + + // rY[8]: + this->mVariableNames.push_back("I_to__y_to_s"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.784875334693892); + + // rY[9]: + this->mVariableNames.push_back("I_to__x_to_f"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.000441531250866821); + + // rY[10]: + this->mVariableNames.push_back("I_to__y_to_f"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.999995817153572); + + // rY[11]: + this->mVariableNames.push_back("membrane_L_type_calcium_current_d_gate"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(2.93982287251302e-06); + + // rY[12]: + this->mVariableNames.push_back("membrane_L_type_calcium_current_f_gate"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.99511673495949); + + // rY[13]: + this->mVariableNames.push_back("I_Ca__f_Ca_Bj"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.0246142436477748); + + // rY[14]: + this->mVariableNames.push_back("membrane_L_type_calcium_current_fCa_gate"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.0152416826209301); + + // rY[15]: + this->mVariableNames.push_back("SR_Fluxes__Ry_Rr"); + this->mVariableUnits.push_back("mM"); + this->mInitialConditions.push_back(0.891022230597263); + + // rY[16]: + this->mVariableNames.push_back("SR_Fluxes__Ry_Ro"); + this->mVariableUnits.push_back("mM"); + this->mInitialConditions.push_back(7.37484660389498e-07); + + // rY[17]: + this->mVariableNames.push_back("SR_Fluxes__Ry_Ri"); + this->mVariableUnits.push_back("mM"); + this->mInitialConditions.push_back(9.01984485847386e-08); + + // rY[18]: + this->mVariableNames.push_back("Na_Buffers__Na_Bj"); + this->mVariableUnits.push_back("mM"); + this->mInitialConditions.push_back(3.43545459048316); + + // rY[19]: + this->mVariableNames.push_back("Na_Buffers__Na_Bsl"); + this->mVariableUnits.push_back("mM"); + this->mInitialConditions.push_back(0.749601264899653); + + // rY[20]: + this->mVariableNames.push_back("Cytosolic_Ca_Buffers__Tn_CL"); + this->mVariableUnits.push_back("mM"); + this->mInitialConditions.push_back(0.00893708435270205); + + // rY[21]: + this->mVariableNames.push_back("Cytosolic_Ca_Buffers__Tn_CHc"); + this->mVariableUnits.push_back("mM"); + this->mInitialConditions.push_back(0.117445983314504); + + // rY[22]: + this->mVariableNames.push_back("Cytosolic_Ca_Buffers__Tn_CHm"); + this->mVariableUnits.push_back("mM"); + this->mInitialConditions.push_back(0.0105996734077994); + + // rY[23]: + this->mVariableNames.push_back("Cytosolic_Ca_Buffers__CaM"); + this->mVariableUnits.push_back("mM"); + this->mInitialConditions.push_back(0.000295653619580701); + + // rY[24]: + this->mVariableNames.push_back("Cytosolic_Ca_Buffers__Myo_c"); + this->mVariableUnits.push_back("mM"); + this->mInitialConditions.push_back(0.00192645052472679); + + // rY[25]: + this->mVariableNames.push_back("Cytosolic_Ca_Buffers__Myo_m"); + this->mVariableUnits.push_back("mM"); + this->mInitialConditions.push_back(0.137557201546068); + + // rY[26]: + this->mVariableNames.push_back("Cytosolic_Ca_Buffers__SRB"); + this->mVariableUnits.push_back("mM"); + this->mInitialConditions.push_back(0.00217414510791738); + + // rY[27]: + this->mVariableNames.push_back("Junctional_and_SL_Ca_Buffers__SLL_j"); + this->mVariableUnits.push_back("mM"); + this->mInitialConditions.push_back(0.00738583890572642); + + // rY[28]: + this->mVariableNames.push_back("Junctional_and_SL_Ca_Buffers__SLL_sl"); + this->mVariableUnits.push_back("mM"); + this->mInitialConditions.push_back(0.00988178900584875); + + // rY[29]: + this->mVariableNames.push_back("Junctional_and_SL_Ca_Buffers__SLH_j"); + this->mVariableUnits.push_back("mM"); + this->mInitialConditions.push_back(0.0734662466011574); + + // rY[30]: + this->mVariableNames.push_back("Junctional_and_SL_Ca_Buffers__SLH_sl"); + this->mVariableUnits.push_back("mM"); + this->mInitialConditions.push_back(0.114400081504523); + + // rY[31]: + this->mVariableNames.push_back("SR_Ca_Concentrations__Csqn_b"); + this->mVariableUnits.push_back("mM"); + this->mInitialConditions.push_back(1.19772047585784); + + // rY[32]: + this->mVariableNames.push_back("JSR_calcium_concentration"); + this->mVariableUnits.push_back("mM"); + this->mInitialConditions.push_back(0.555180633859957); + + // rY[33]: + this->mVariableNames.push_back("dyadic_space_sodium_concentration"); + this->mVariableUnits.push_back("mM"); + this->mInitialConditions.push_back(8.3215690202059); + + // rY[34]: + this->mVariableNames.push_back("submembrane_space_sodium_concentration"); + this->mVariableUnits.push_back("mM"); + this->mInitialConditions.push_back(8.32094589677861); + + // rY[35]: + this->mVariableNames.push_back("cytosolic_sodium_concentration"); + this->mVariableUnits.push_back("mM"); + this->mInitialConditions.push_back(8.32114502072456); + + // rY[36]: + this->mVariableNames.push_back("cytosolic_potassium_concentration"); + this->mVariableUnits.push_back("mM"); + this->mInitialConditions.push_back(120.0); + + // rY[37]: + this->mVariableNames.push_back("dyadic_space_calcium_concentration"); + this->mVariableUnits.push_back("mM"); + this->mInitialConditions.push_back(0.000175415190830688); + + // rY[38]: + this->mVariableNames.push_back("submembrane_space_calcium_concentration"); + this->mVariableUnits.push_back("mM"); + this->mInitialConditions.push_back(0.000106544589194246); + + // mParameters[0]: + this->mParameterNames.push_back("SR_leak_current_max"); + this->mParameterUnits.push_back("per_msec"); + + // mParameters[1]: + this->mParameterNames.push_back("SR_release_current_max"); + this->mParameterUnits.push_back("per_msec"); + + // mParameters[2]: + this->mParameterNames.push_back("SR_uptake_current_max"); + this->mParameterUnits.push_back("mM_per_msec"); + + // mParameters[3]: + this->mParameterNames.push_back("concentration_clamp_onoff"); + this->mParameterUnits.push_back("dimensionless"); + + // mParameters[4]: + this->mParameterNames.push_back("cytosolic_chloride_concentration"); + this->mParameterUnits.push_back("mM"); + + // mParameters[5]: + this->mParameterNames.push_back("extracellular_calcium_concentration"); + this->mParameterUnits.push_back("mM"); + + // mParameters[6]: + this->mParameterNames.push_back("extracellular_chloride_concentration"); + this->mParameterUnits.push_back("mM"); + + // mParameters[7]: + this->mParameterNames.push_back("extracellular_potassium_concentration"); + this->mParameterUnits.push_back("mM"); + + // mParameters[8]: + this->mParameterNames.push_back("extracellular_sodium_concentration"); + this->mParameterUnits.push_back("mM"); + + // mParameters[9]: + this->mParameterNames.push_back("faraday_constant"); + this->mParameterUnits.push_back("coulomb_per_mole"); + + // mParameters[10]: + this->mParameterNames.push_back("gas_constant"); + this->mParameterUnits.push_back("joule_per_kelvin_per_kilomole"); + + // mParameters[11]: + this->mParameterNames.push_back("membrane_L_type_calcium_current_conductance"); + this->mParameterUnits.push_back("cm_per_sec"); + + // mParameters[12]: + this->mParameterNames.push_back("membrane_fast_sodium_current_conductance"); + this->mParameterUnits.push_back("mS_per_uF"); + + // mParameters[13]: + this->mParameterNames.push_back("membrane_fast_sodium_current_reduced_inactivation"); + this->mParameterUnits.push_back("dimensionless"); + + // mParameters[14]: + this->mParameterNames.push_back("membrane_fast_sodium_current_shift_inactivation"); + this->mParameterUnits.push_back("mV"); + + // mParameters[15]: + this->mParameterNames.push_back("membrane_fast_transient_outward_current_conductance_scaling_factor"); + this->mParameterUnits.push_back("dimensionless"); + + // mParameters[16]: + this->mParameterNames.push_back("membrane_inward_rectifier_potassium_current_conductance_scaling_factor"); + this->mParameterUnits.push_back("mS_per_uF"); + + // mParameters[17]: + this->mParameterNames.push_back("membrane_rapid_delayed_rectifier_potassium_current_conductance"); + this->mParameterUnits.push_back("mS_per_uF"); + + // mParameters[18]: + this->mParameterNames.push_back("membrane_slow_delayed_rectifier_potassium_current_conductance_scaling_factor"); + this->mParameterUnits.push_back("dimensionless"); + + // mParameters[19]: + this->mParameterNames.push_back("membrane_slow_transient_outward_current_conductance_scaling_factor"); + this->mParameterUnits.push_back("dimensionless"); + + // mParameters[20]: + this->mParameterNames.push_back("membrane_sodium_calcium_exchanger_current_conductance"); + this->mParameterUnits.push_back("uA_per_uF"); + + // mParameters[21]: + this->mParameterNames.push_back("membrane_sodium_potassium_pump_current_permeability"); + this->mParameterUnits.push_back("uA_per_uF"); + + // mParameters[22]: + this->mParameterNames.push_back("parameters__Cmem"); + this->mParameterUnits.push_back("farad"); + + // mParameters[23]: + this->mParameterNames.push_back("temperature"); + this->mParameterUnits.push_back("kelvin"); + + // Derived Quantity index [0]: + this->mDerivedQuantityNames.push_back("SR_leak_current"); + this->mDerivedQuantityUnits.push_back("mM_per_msec"); + + // Derived Quantity index [1]: + this->mDerivedQuantityNames.push_back("SR_release_current"); + this->mDerivedQuantityUnits.push_back("mM_per_msec"); + + // Derived Quantity index [2]: + this->mDerivedQuantityNames.push_back("SR_uptake_current"); + this->mDerivedQuantityUnits.push_back("mM_per_msec"); + + // Derived Quantity index [3]: + this->mDerivedQuantityNames.push_back("chloride_reversal_potential"); + this->mDerivedQuantityUnits.push_back("mV"); + + // Derived Quantity index [4]: + this->mDerivedQuantityNames.push_back("membrane_L_type_calcium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [5]: + this->mDerivedQuantityNames.push_back("membrane_L_type_calcium_current_f_gate_tau"); + this->mDerivedQuantityUnits.push_back("msec"); + + // Derived Quantity index [6]: + this->mDerivedQuantityNames.push_back("membrane_calcium_pump_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [7]: + this->mDerivedQuantityNames.push_back("membrane_capacitance"); + this->mDerivedQuantityUnits.push_back("uF"); + + // Derived Quantity index [8]: + this->mDerivedQuantityNames.push_back("membrane_fast_sodium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [9]: + this->mDerivedQuantityNames.push_back("membrane_fast_sodium_current_h_gate_tau"); + this->mDerivedQuantityUnits.push_back("msec"); + + // Derived Quantity index [10]: + this->mDerivedQuantityNames.push_back("membrane_fast_sodium_current_j_gate_tau"); + this->mDerivedQuantityUnits.push_back("msec"); + + // Derived Quantity index [11]: + this->mDerivedQuantityNames.push_back("membrane_fast_transient_outward_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [12]: + this->mDerivedQuantityNames.push_back("membrane_fast_transient_outward_current_conductance"); + this->mDerivedQuantityUnits.push_back("mS_per_uF"); + + // Derived Quantity index [13]: + this->mDerivedQuantityNames.push_back("membrane_inward_rectifier_potassium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [14]: + this->mDerivedQuantityNames.push_back("membrane_inward_rectifier_potassium_current_conductance"); + this->mDerivedQuantityUnits.push_back("mS_per_uF"); + + // Derived Quantity index [15]: + this->mDerivedQuantityNames.push_back("membrane_rapid_delayed_rectifier_potassium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [16]: + this->mDerivedQuantityNames.push_back("membrane_slow_delayed_rectifier_potassium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [17]: + this->mDerivedQuantityNames.push_back("membrane_slow_delayed_rectifier_potassium_current_conductance"); + this->mDerivedQuantityUnits.push_back("mS_per_uF"); + + // Derived Quantity index [18]: + this->mDerivedQuantityNames.push_back("membrane_slow_transient_outward_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [19]: + this->mDerivedQuantityNames.push_back("membrane_slow_transient_outward_current_conductance"); + this->mDerivedQuantityUnits.push_back("mS_per_uF"); + + // Derived Quantity index [20]: + this->mDerivedQuantityNames.push_back("membrane_sodium_calcium_exchanger_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [21]: + this->mDerivedQuantityNames.push_back("membrane_sodium_potassium_pump_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [22]: + this->mDerivedQuantityNames.push_back("membrane_stimulus_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [23]: + this->mDerivedQuantityNames.push_back("membrane_transient_outward_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [24]: + this->mDerivedQuantityNames.push_back("potassium_reversal_potential"); + this->mDerivedQuantityUnits.push_back("mV"); + + // Derived Quantity index [25]: + this->mDerivedQuantityNames.push_back("time"); + this->mDerivedQuantityUnits.push_back("msec"); + + this->mInitialised = true; +} + +// Serialization for Boost >= 1.36 +#include "SerializationExportWrapperForCpp.hpp" +CHASTE_CLASS_EXPORT(Cellgrandi_pasqualini_bers_2010_ssFromCellMLBackwardEuler) + diff --git a/chaste_codegen/tests/numerical/baseline/BE/grandi_pasqualini_bers_2010_ssBackwardEuler.hpp b/chaste_codegen/tests/numerical/baseline/BE/grandi_pasqualini_bers_2010_ssBackwardEuler.hpp new file mode 100644 index 00000000..ac5acca8 --- /dev/null +++ b/chaste_codegen/tests/numerical/baseline/BE/grandi_pasqualini_bers_2010_ssBackwardEuler.hpp @@ -0,0 +1,89 @@ +#ifndef CELLGRANDI_PASQUALINI_BERS_2010_SSFROMCELLMLBACKWARDEULER_HPP_ +#define CELLGRANDI_PASQUALINI_BERS_2010_SSFROMCELLMLBACKWARDEULER_HPP_ + +//! @file +//! +//! This source file was generated from CellML by chaste_codegen version (version omitted as unimportant) +//! +//! Model: grandi_pasqualini_bers_2010_epi +//! +//! Processed by chaste_codegen: https://github.com/ModellingWebLab/chaste-codegen +//! (translator: chaste_codegen, model type: BackwardEuler) +//! on (date omitted as unimportant) +//! +//! + +#include "ChasteSerialization.hpp" +#include +#include "AbstractStimulusFunction.hpp" +#include "AbstractBackwardEulerCardiacCell.hpp" + +class Cellgrandi_pasqualini_bers_2010_ssFromCellMLBackwardEuler : public AbstractBackwardEulerCardiacCell<27> +{ + friend class boost::serialization::access; + template + void serialize(Archive & archive, const unsigned int version) + { + archive & boost::serialization::base_object >(*this); + + } + + // + // Settable parameters and readable variables + // + +private: + static AbstractBackwardEulerCardiacCell<27>* CreateMethod(boost::shared_ptr p_solver, boost::shared_ptr p_stimulus); + static bool registered; +private: +const bool is_concentration[39] = {false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, true, true, true, true, true, true}; +const bool is_probability[39] = {false, false, true, true, true, false, false, false, false, false, false, true, true, false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false}; +public: + + boost::shared_ptr UseCellMLDefaultStimulus(); + double GetIntracellularCalciumConcentration(); + Cellgrandi_pasqualini_bers_2010_ssFromCellMLBackwardEuler(boost::shared_ptr /* unused; should be empty */, boost::shared_ptr pIntracellularStimulus); + ~Cellgrandi_pasqualini_bers_2010_ssFromCellMLBackwardEuler(); + void VerifyStateVariables(); + double GetIIonic(const std::vector* pStateVariables=NULL);void ComputeResidual(double var_chaste_interface__environment__time, const double rCurrentGuess[27], double rResidual[27]); + void ComputeJacobian(double var_chaste_interface__environment__time, const double rCurrentGuess[27], double rJacobian[27][27]);protected: + void UpdateTransmembranePotential(double var_chaste_interface__environment__time); + void ComputeOneStepExceptVoltage(double var_chaste_interface__environment__time); + + std::vector ComputeDerivedQuantities(double var_chaste_interface__environment__time, const std::vector & rY); +}; + +// Needs to be included last +#include "SerializationExportWrapper.hpp" +CHASTE_CLASS_EXPORT(Cellgrandi_pasqualini_bers_2010_ssFromCellMLBackwardEuler) + +namespace boost +{ + namespace serialization + { + template + inline void save_construct_data( + Archive & ar, const Cellgrandi_pasqualini_bers_2010_ssFromCellMLBackwardEuler * t, const unsigned int fileVersion) + { + const boost::shared_ptr p_solver = t->GetSolver(); + const boost::shared_ptr p_stimulus = t->GetStimulusFunction(); + ar << p_solver; + ar << p_stimulus; + } + + template + inline void load_construct_data( + Archive & ar, Cellgrandi_pasqualini_bers_2010_ssFromCellMLBackwardEuler * t, const unsigned int fileVersion) + { + boost::shared_ptr p_solver; + boost::shared_ptr p_stimulus; + ar >> p_solver; + ar >> p_stimulus; + ::new(t)Cellgrandi_pasqualini_bers_2010_ssFromCellMLBackwardEuler(p_solver, p_stimulus); + } + + } + +} + +#endif // CELLGRANDI_PASQUALINI_BERS_2010_SSFROMCELLMLBACKWARDEULER_HPP_ \ No newline at end of file diff --git a/chaste_codegen/tests/numerical/baseline/BE/li_mouse_2010.cpp b/chaste_codegen/tests/numerical/baseline/BE/li_mouse_2010.cpp new file mode 100644 index 00000000..6ac6a31a --- /dev/null +++ b/chaste_codegen/tests/numerical/baseline/BE/li_mouse_2010.cpp @@ -0,0 +1,1874 @@ +//! @file +//! +//! This source file was generated from CellML by chaste_codegen version (version omitted as unimportant) +//! +//! Model: Li_Mouse_2010 +//! +//! Processed by chaste_codegen: https://github.com/ModellingWebLab/chaste-codegen +//! (translator: chaste_codegen, model type: BackwardEuler) +//! on (date omitted as unimportant) +//! +//! + +#include "CardiacNewtonSolver.hpp" +#include "li_mouse_2010.hpp" +#include +#include +#include +#include +#include "Exception.hpp" +#include "OdeSystemInformation.hpp" +#include "RegularStimulus.hpp" +#include "HeartConfig.hpp" +#include "IsNan.hpp" +#include "MathsCustomFunctions.hpp" + + + + + + boost::shared_ptr Cellli_mouse_2010FromCellMLBackwardEuler::UseCellMLDefaultStimulus() + { + // Use the default stimulus specified by CellML metadata + const double var_chaste_interface__cell__stim_amplitude_converted = -15 * HeartConfig::Instance()->GetCapacitance(); // uA_per_cm2 + const double var_chaste_interface__cell__stim_duration = 3; // millisecond + const double var_chaste_interface__cell__stim_offset = 0; // millisecond + const double var_chaste_interface__cell__stim_period = 333.33300000000003; // millisecond + boost::shared_ptr p_cellml_stim(new RegularStimulus( + -fabs(var_chaste_interface__cell__stim_amplitude_converted), + var_chaste_interface__cell__stim_duration, + var_chaste_interface__cell__stim_period, + var_chaste_interface__cell__stim_offset + )); + mpIntracellularStimulus = p_cellml_stim; + return p_cellml_stim; + } + double Cellli_mouse_2010FromCellMLBackwardEuler::GetIntracellularCalciumConcentration() + { + return mStateVariables[1]; + } + Cellli_mouse_2010FromCellMLBackwardEuler::Cellli_mouse_2010FromCellMLBackwardEuler(boost::shared_ptr /* unused; should be empty */, boost::shared_ptr pIntracellularStimulus) + : AbstractBackwardEulerCardiacCell<26>( + 36, + 0, + pIntracellularStimulus) + { + // Time units: millisecond + // + this->mpSystemInfo = OdeSystemInformation::Instance(); + Init(); + + // We have a default stimulus specified in the CellML file metadata + this->mHasDefaultStimulusFromCellML = true; + + this->mParameters[0] = 4.5; // (var_calcium_fluxes__v1) [per_millisecond] + this->mParameters[1] = 1400; // (var_cell__Cao) [micromolar] + this->mParameters[2] = 5400; // (var_cell__Ko) [micromolar] + this->mParameters[3] = 134000; // (var_cell__Nao) [micromolar] + this->mParameters[4] = 2.5; // (var_L_type_calcium_current__P_CaL) [per_millisecond] + this->mParameters[5] = 1; // (var_cell__Cm) [microF_per_cm2] + this->mParameters[6] = 16; // (var_fast_sodium_current__g_Na) [milliS_per_microF] + this->mParameters[7] = 0.34999999999999998; // (var_time_independent_K_I__g_K1) [milliS_per_microF] + this->mParameters[8] = 0.059499999999999997; // (var_non_inactivating_steady_state_K_I__g_Kss) [milliS_per_microF] + this->mParameters[9] = 0.016500000000000001; // (var_rapid_delayed_rectifier_K_I__g_Kr) [milliS_per_microF] + this->mParameters[10] = 0.0057499999999999999; // (var_slow_delayed_rectifier_K_I__g_Ks) [milliS_per_microF] + this->mParameters[11] = 3.9390000000000001; // (var_sodium_calcium_exchange_current__V_max_NCX) [picoA_per_picoF] + } + + Cellli_mouse_2010FromCellMLBackwardEuler::~Cellli_mouse_2010FromCellMLBackwardEuler() + { + } + + + void Cellli_mouse_2010FromCellMLBackwardEuler::VerifyStateVariables() + { + std::vector& rY = rGetStateVariables(); + std::string error_message = ""; + + for (unsigned i=0; i < 36; i++) + { + if(std::isnan(rY[i])) + { + error_message += "State variable " + this->rGetStateVariableNames()[i] + " is not a number\n"; + } + if(std::isinf(rY[i])) + { + error_message += "State variable " + this->rGetStateVariableNames()[i] + " has become INFINITE\n"; + } + if(this->is_concentration[i] && rY[i] < 0) + { + error_message += "Concentration " + this->rGetStateVariableNames()[i] + " below 0\n"; + } + if(this->is_probability[i] && rY[i] < 0) + { + error_message += "Probability " + this->rGetStateVariableNames()[i] + " below 0\n"; + } + if(this->is_probability[i] && rY[i] > 1) + { + error_message += "Probability " + this->rGetStateVariableNames()[i] + " above 1\n"; + } + } + if (error_message != ""){ + EXCEPTION(DumpState(error_message)); + } + } + + double Cellli_mouse_2010FromCellMLBackwardEuler::GetIIonic(const std::vector* pStateVariables) + { + // For state variable interpolation (SVI) we read in interpolated state variables, + // otherwise for ionic current interpolation (ICI) we use the state variables of this model (node). + if (!pStateVariables) pStateVariables = &rGetStateVariables(); + const std::vector& rY = *pStateVariables; + double var_chaste_interface__cell__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -78.9452115785979 + double var_chaste_interface__calcium_concentration__Cai_converted = rY[1]; + // Units: millimolar; Initial value: 9.499150681398009e-05 + double var_chaste_interface__calcium_concentration__Cass = rY[2]; + // Units: micromolar; Initial value: 0.0954184301907784 + double var_chaste_interface__L_type_calcium_current__O = rY[10]; + // Units: dimensionless; Initial value: 1.23713515513533e-06 + double var_chaste_interface__L_type_calcium_current__y_gate = rY[12]; + // Units: dimensionless; Initial value: 0.845044436980163 + double var_chaste_interface__sodium_concentration__Nai = rY[13]; + // Units: micromolar; Initial value: 12364.7482121793 + double var_chaste_interface__fast_sodium_current__O_Na = rY[14]; + // Units: dimensionless; Initial value: 1.46826771436314e-06 + double var_chaste_interface__potassium_concentration__Ki = rY[22]; + // Units: micromolar; Initial value: 115599.50642567 + double var_chaste_interface__ultra_rapidly_activating_delayed_rectifier_K_I__aur = rY[23]; + // Units: dimensionless; Initial value: 0.00346258606821817 + double var_chaste_interface__ultra_rapidly_activating_delayed_rectifier_K_I__iur = rY[24]; + // Units: dimensionless; Initial value: 0.955684946168062 + double var_chaste_interface__non_inactivating_steady_state_K_I__aKss = rY[25]; + // Units: dimensionless; Initial value: 0.287585636847048 + double var_chaste_interface__non_inactivating_steady_state_K_I__iKss = rY[26]; + // Units: dimensionless; Initial value: 1.0 + double var_chaste_interface__rapid_delayed_rectifier_K_I__O_K = rY[27]; + // Units: dimensionless; Initial value: 0.0131742086125972 + double var_chaste_interface__slow_delayed_rectifier_K_I__nKs = rY[31]; + // Units: dimensionless; Initial value: 0.00336735013094628 + double var_chaste_interface__fast_transient_outward_K_I__ato_f = rY[32]; + // Units: dimensionless; Initial value: 0.0142335908879204 + double var_chaste_interface__fast_transient_outward_K_I__ito_f = rY[33]; + // Units: dimensionless; Initial value: 0.996989882138174 + double var_chaste_interface__slow_transient_outward_K_I__ato_s = rY[34]; + // Units: dimensionless; Initial value: 0.0443263407760382 + double var_chaste_interface__slow_transient_outward_K_I__ito_s = rY[35]; + // Units: dimensionless; Initial value: 0.887568880831388 + + const double var_calcium_activated_chloride_current__E_Cl = -40; // millivolt + const double var_calcium_activated_chloride_current__Km_Cl = 10; // micromolar + const double var_calcium_activated_chloride_current__g_ClCa = 10; // milliS_per_microF + const double var_calcium_background_current__g_Cab = 0.00069999999999999999; // milliS_per_microF + const double var_calcium_concentration__Cai = 1000 * var_chaste_interface__calcium_concentration__Cai_converted; // micromolar + const double var_calcium_pump_current__Km_pCa = 0.28849999999999998; // micromolar + const double var_calcium_pump_current__i_pCa_max = 0.095500000000000002; // picoA_per_picoF + const double var_calcium_pump_current__i_pCa = pow(var_calcium_concentration__Cai, 2) * var_calcium_pump_current__i_pCa_max / (pow(var_calcium_concentration__Cai, 2) + pow(var_calcium_pump_current__Km_pCa, 2)); // picoA_per_picoF + const double var_cell__Acap = 0.00013866; // cm2 + const double var_cell__F = 96.5; // coulomb_per_millimole + const double var_cell__R = 8.3140000000000001; // joule_per_mole_kelvin + const double var_cell__T = 308; // kelvin + const double var_calcium_background_current__E_CaN = 0.5 * var_cell__R * var_cell__T * log(mParameters[1] / var_calcium_concentration__Cai) / var_cell__F; // millivolt + const double var_L_type_calcium_current__FVRT = var_cell__F * var_chaste_interface__cell__V / (var_cell__R * var_cell__T); // dimensionless + const double var_L_type_calcium_current__FVRT_Ca = 2 * var_L_type_calcium_current__FVRT; // dimensionless + const double var_calcium_activated_chloride_current__O_ClCa = 0.20000000000000001 / (1 + exp(5.9871794871794881 - 0.12820512820512822 * var_chaste_interface__cell__V)); // dimensionless + const double var_calcium_activated_chloride_current__i_ClCa = (-var_calcium_activated_chloride_current__E_Cl + var_chaste_interface__cell__V) * var_calcium_activated_chloride_current__O_ClCa * var_calcium_activated_chloride_current__g_ClCa * var_calcium_concentration__Cai / (var_calcium_activated_chloride_current__Km_Cl + var_calcium_concentration__Cai); // picoA_per_picoF + const double var_calcium_background_current__i_Cab = (-var_calcium_background_current__E_CaN + var_chaste_interface__cell__V) * var_calcium_background_current__g_Cab; // picoA_per_picoF + const double var_cell__Vss = 2.1999999999999998e-8; // microlitre + const double var_L_type_calcium_current__i_CaL = ((fabs(var_L_type_calcium_current__FVRT_Ca) > 1.0000000000000001e-5) ? (-2 * (-var_chaste_interface__calcium_concentration__Cass + mParameters[1] * exp(-var_L_type_calcium_current__FVRT_Ca)) * var_L_type_calcium_current__FVRT_Ca * var_chaste_interface__L_type_calcium_current__O * mParameters[4] * var_chaste_interface__L_type_calcium_current__y_gate * var_cell__F * var_cell__Vss / ((1 - exp(-var_L_type_calcium_current__FVRT_Ca)) * var_cell__Acap * mParameters[5])) : (-2.0000000000000002e-5 * (-var_chaste_interface__calcium_concentration__Cass + mParameters[1] * exp(-1.0000000000000001e-5)) * var_chaste_interface__L_type_calcium_current__O * mParameters[4] * var_chaste_interface__L_type_calcium_current__y_gate * var_cell__F * var_cell__Vss / ((1 - exp(-1.0000000000000001e-5)) * var_cell__Acap * mParameters[5]))); // picoA_per_picoF + const double var_L_type_calcium_current__i_CaL_converted = HeartConfig::Instance()->GetCapacitance() * var_L_type_calcium_current__i_CaL; // uA_per_cm2 + const double var_fast_transient_outward_K_I__g_Kto_f = 0.53469999999999995; // milliS_per_microF + const double var_fast_transient_outward_K_I__E_K = var_cell__R * var_cell__T * log(mParameters[2] / var_chaste_interface__potassium_concentration__Ki) / var_cell__F; // millivolt + const double var_fast_transient_outward_K_I__i_Kto_f = pow(var_chaste_interface__fast_transient_outward_K_I__ato_f, 3) * (-var_fast_transient_outward_K_I__E_K + var_chaste_interface__cell__V) * var_fast_transient_outward_K_I__g_Kto_f * var_chaste_interface__fast_transient_outward_K_I__ito_f; // picoA_per_picoF + const double var_non_inactivating_steady_state_K_I__i_Kss = (-var_fast_transient_outward_K_I__E_K + var_chaste_interface__cell__V) * var_chaste_interface__non_inactivating_steady_state_K_I__aKss * mParameters[8] * var_chaste_interface__non_inactivating_steady_state_K_I__iKss; // picoA_per_picoF + const double var_non_inactivating_steady_state_K_I__i_Kss_converted = HeartConfig::Instance()->GetCapacitance() * var_non_inactivating_steady_state_K_I__i_Kss; // uA_per_cm2 + const double var_slow_delayed_rectifier_K_I__i_Ks = pow(var_chaste_interface__slow_delayed_rectifier_K_I__nKs, 2) * (-var_fast_transient_outward_K_I__E_K + var_chaste_interface__cell__V) * mParameters[10]; // picoA_per_picoF + const double var_slow_delayed_rectifier_K_I__i_Ks_converted = HeartConfig::Instance()->GetCapacitance() * var_slow_delayed_rectifier_K_I__i_Ks; // uA_per_cm2 + const double var_slow_transient_outward_K_I__g_Kto_s = 0; // milliS_per_microF + const double var_slow_transient_outward_K_I__i_Kto_s = (-var_fast_transient_outward_K_I__E_K + var_chaste_interface__cell__V) * var_chaste_interface__slow_transient_outward_K_I__ato_s * var_slow_transient_outward_K_I__g_Kto_s * var_chaste_interface__slow_transient_outward_K_I__ito_s; // picoA_per_picoF + const double var_sodium_background_current__g_Nab = 0.0025999999999999999; // milliS_per_microF + const double var_sodium_calcium_exchange_current__K_mAllo = 0; // micromolar + const double var_sodium_calcium_exchange_current__K_mCai = 3.6000000000000001; // micromolar + const double var_sodium_calcium_exchange_current__K_mCao = 1400; // micromolar + const double var_sodium_calcium_exchange_current__K_mNai = 12000; // micromolar + const double var_sodium_calcium_exchange_current__K_mNao = 88000; // micromolar + const double var_sodium_calcium_exchange_current__eta = 0.34999999999999998; // dimensionless + const double var_sodium_calcium_exchange_current__k_sat = 0.27000000000000002; // dimensionless + const double var_fast_sodium_current__E_Na = var_cell__R * var_cell__T * log((mParameters[3] + 0.1111111111111111 * mParameters[2]) / (var_chaste_interface__sodium_concentration__Nai + 0.1111111111111111 * var_chaste_interface__potassium_concentration__Ki)) / var_cell__F; // millivolt + const double var_fast_sodium_current__i_Na = (-var_fast_sodium_current__E_Na + var_chaste_interface__cell__V) * var_chaste_interface__fast_sodium_current__O_Na * mParameters[6]; // picoA_per_picoF + const double var_fast_sodium_current__i_Na_converted = HeartConfig::Instance()->GetCapacitance() * var_fast_sodium_current__i_Na; // uA_per_cm2 + const double var_rapid_delayed_rectifier_K_I__i_Kr = (-var_cell__R * var_cell__T * log((mParameters[2] + 0.020408163265306124 * mParameters[3]) / (var_chaste_interface__potassium_concentration__Ki + 0.020408163265306124 * var_chaste_interface__sodium_concentration__Nai)) / var_cell__F + var_chaste_interface__cell__V) * var_chaste_interface__rapid_delayed_rectifier_K_I__O_K * mParameters[9]; // picoA_per_picoF + const double var_rapid_delayed_rectifier_K_I__i_Kr_converted = HeartConfig::Instance()->GetCapacitance() * var_rapid_delayed_rectifier_K_I__i_Kr; // uA_per_cm2 + const double var_sodium_background_current__i_Nab = (-var_fast_sodium_current__E_Na + var_chaste_interface__cell__V) * var_sodium_background_current__g_Nab; // picoA_per_picoF + const double var_sodium_calcium_exchange_current__i_NCX = (pow(var_chaste_interface__sodium_concentration__Nai, 3) * mParameters[1] * exp(var_cell__F * var_chaste_interface__cell__V * var_sodium_calcium_exchange_current__eta / (var_cell__R * var_cell__T)) - pow(mParameters[3], 3) * var_calcium_concentration__Cai * exp((-1 + var_sodium_calcium_exchange_current__eta) * var_cell__F * var_chaste_interface__cell__V / (var_cell__R * var_cell__T))) * mParameters[11] / ((1 + pow(var_sodium_calcium_exchange_current__K_mAllo, 2) / pow(var_calcium_concentration__Cai, 2)) * (1 + var_sodium_calcium_exchange_current__k_sat * exp((-1 + var_sodium_calcium_exchange_current__eta) * var_cell__F * var_chaste_interface__cell__V / (var_cell__R * var_cell__T))) * (pow(mParameters[3], 3) * var_calcium_concentration__Cai + pow(var_sodium_calcium_exchange_current__K_mNao, 3) * var_calcium_concentration__Cai + pow(var_chaste_interface__sodium_concentration__Nai, 3) * mParameters[1] + pow(var_chaste_interface__sodium_concentration__Nai, 3) * var_sodium_calcium_exchange_current__K_mCao + pow(mParameters[3], 3) * (1 + pow(var_chaste_interface__sodium_concentration__Nai, 3) / pow(var_sodium_calcium_exchange_current__K_mNai, 3)) * var_sodium_calcium_exchange_current__K_mCai + pow(var_sodium_calcium_exchange_current__K_mNai, 3) * (1 + var_calcium_concentration__Cai / var_sodium_calcium_exchange_current__K_mCai) * mParameters[1])); // picoA_per_picoF + const double var_sodium_calcium_exchange_current__i_NCX_converted = HeartConfig::Instance()->GetCapacitance() * var_sodium_calcium_exchange_current__i_NCX; // uA_per_cm2 + const double var_sodium_potassium_pump_current__Km_Ko = 1500; // micromolar + const double var_sodium_potassium_pump_current__Km_Nai = 16600; // micromolar + const double var_sodium_potassium_pump_current__i_NaK_max = 2.4860000000000002; // picoA_per_picoF + const double var_sodium_potassium_pump_current__sigma = -0.14285714285714285 + 0.14285714285714285 * exp(1.4858841010401188e-5 * mParameters[3]); // dimensionless + const double var_sodium_potassium_pump_current__f_NaK = 1 / (1 + 0.1245 * exp(-0.10000000000000001 * var_cell__F * var_chaste_interface__cell__V / (var_cell__R * var_cell__T)) + 0.036499999999999998 * var_sodium_potassium_pump_current__sigma * exp(-var_cell__F * var_chaste_interface__cell__V / (var_cell__R * var_cell__T))); // dimensionless + const double var_sodium_potassium_pump_current__i_NaK = mParameters[2] * var_sodium_potassium_pump_current__f_NaK * var_sodium_potassium_pump_current__i_NaK_max / ((1 + pow((var_sodium_potassium_pump_current__Km_Nai / var_chaste_interface__sodium_concentration__Nai), 2.3999999999999999)) * (mParameters[2] + var_sodium_potassium_pump_current__Km_Ko)); // picoA_per_picoF + const double var_time_independent_K_I__i_K1 = (-var_fast_transient_outward_K_I__E_K + var_chaste_interface__cell__V) * mParameters[2] * mParameters[7] / ((1 + exp(0.089599999999999999 * var_chaste_interface__cell__V - 0.089599999999999999 * var_fast_transient_outward_K_I__E_K)) * (210 + mParameters[2])); // picoA_per_picoF + const double var_time_independent_K_I__i_K1_converted = HeartConfig::Instance()->GetCapacitance() * var_time_independent_K_I__i_K1; // uA_per_cm2 + const double var_ultra_rapidly_activating_delayed_rectifier_K_I__g_Kur = 0.25; // milliS_per_microF + const double var_ultra_rapidly_activating_delayed_rectifier_K_I__i_Kur = (-var_fast_transient_outward_K_I__E_K + var_chaste_interface__cell__V) * var_chaste_interface__ultra_rapidly_activating_delayed_rectifier_K_I__aur * var_ultra_rapidly_activating_delayed_rectifier_K_I__g_Kur * var_chaste_interface__ultra_rapidly_activating_delayed_rectifier_K_I__iur; // picoA_per_picoF + const double var_chaste_interface__i_ionic = HeartConfig::Instance()->GetCapacitance() * var_calcium_activated_chloride_current__i_ClCa + HeartConfig::Instance()->GetCapacitance() * var_calcium_background_current__i_Cab + HeartConfig::Instance()->GetCapacitance() * var_calcium_pump_current__i_pCa + HeartConfig::Instance()->GetCapacitance() * var_fast_transient_outward_K_I__i_Kto_f + HeartConfig::Instance()->GetCapacitance() * var_slow_transient_outward_K_I__i_Kto_s + HeartConfig::Instance()->GetCapacitance() * var_sodium_background_current__i_Nab + HeartConfig::Instance()->GetCapacitance() * var_sodium_potassium_pump_current__i_NaK + HeartConfig::Instance()->GetCapacitance() * var_ultra_rapidly_activating_delayed_rectifier_K_I__i_Kur + var_L_type_calcium_current__i_CaL_converted + var_fast_sodium_current__i_Na_converted + var_non_inactivating_steady_state_K_I__i_Kss_converted + var_rapid_delayed_rectifier_K_I__i_Kr_converted + var_slow_delayed_rectifier_K_I__i_Ks_converted + var_sodium_calcium_exchange_current__i_NCX_converted + var_time_independent_K_I__i_K1_converted; // uA_per_cm2 + + const double i_ionic = var_chaste_interface__i_ionic; + EXCEPT_IF_NOT(!std::isnan(i_ionic)); + return i_ionic; + } + + void Cellli_mouse_2010FromCellMLBackwardEuler::ComputeResidual(double var_chaste_interface__environment__time, const double rCurrentGuess[26], double rResidual[26]) + { + std::vector& rY = rGetStateVariables(); + double var_chaste_interface__cell__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -78.9452115785979 + double var_chaste_interface__L_type_calcium_current__y_gate = rY[12]; + // Units: dimensionless; Initial value: 0.845044436980163 + double var_chaste_interface__ultra_rapidly_activating_delayed_rectifier_K_I__aur = rY[23]; + // Units: dimensionless; Initial value: 0.00346258606821817 + double var_chaste_interface__ultra_rapidly_activating_delayed_rectifier_K_I__iur = rY[24]; + // Units: dimensionless; Initial value: 0.955684946168062 + double var_chaste_interface__non_inactivating_steady_state_K_I__aKss = rY[25]; + // Units: dimensionless; Initial value: 0.287585636847048 + double var_chaste_interface__slow_delayed_rectifier_K_I__nKs = rY[31]; + // Units: dimensionless; Initial value: 0.00336735013094628 + double var_chaste_interface__fast_transient_outward_K_I__ato_f = rY[32]; + // Units: dimensionless; Initial value: 0.0142335908879204 + double var_chaste_interface__fast_transient_outward_K_I__ito_f = rY[33]; + // Units: dimensionless; Initial value: 0.996989882138174 + double var_chaste_interface__slow_transient_outward_K_I__ato_s = rY[34]; + // Units: dimensionless; Initial value: 0.0443263407760382 + double var_chaste_interface__slow_transient_outward_K_I__ito_s = rY[35]; + // Units: dimensionless; Initial value: 0.887568880831388 + + //output_nonlinear_state_assignments + double var_chaste_interface__L_type_calcium_current__I = rCurrentGuess[0]; + double var_chaste_interface__L_type_calcium_current__O = rCurrentGuess[1]; + double var_chaste_interface__calcium_concentration__CaJSR = rCurrentGuess[2]; + double var_chaste_interface__calcium_concentration__CaNSR = rCurrentGuess[3]; + double var_chaste_interface__calcium_concentration__Cai_converted = rCurrentGuess[4]; + double var_chaste_interface__calcium_concentration__Cass = rCurrentGuess[5]; + double var_chaste_interface__calcium_fluxes__CaMKt = rCurrentGuess[6]; + double var_chaste_interface__calcium_fluxes__P_RyR = rCurrentGuess[7]; + double var_chaste_interface__fast_sodium_current__C_Na1 = rCurrentGuess[8]; + double var_chaste_interface__fast_sodium_current__C_Na2 = rCurrentGuess[9]; + double var_chaste_interface__fast_sodium_current__I1_Na = rCurrentGuess[10]; + double var_chaste_interface__fast_sodium_current__I2_Na = rCurrentGuess[11]; + double var_chaste_interface__fast_sodium_current__IC_Na2 = rCurrentGuess[12]; + double var_chaste_interface__fast_sodium_current__IC_Na3 = rCurrentGuess[13]; + double var_chaste_interface__fast_sodium_current__IF_Na = rCurrentGuess[14]; + double var_chaste_interface__fast_sodium_current__O_Na = rCurrentGuess[15]; + double var_chaste_interface__non_inactivating_steady_state_K_I__iKss = rCurrentGuess[16]; + double var_chaste_interface__potassium_concentration__Ki = rCurrentGuess[17]; + double var_chaste_interface__rapid_delayed_rectifier_K_I__C_K1 = rCurrentGuess[18]; + double var_chaste_interface__rapid_delayed_rectifier_K_I__C_K2 = rCurrentGuess[19]; + double var_chaste_interface__rapid_delayed_rectifier_K_I__I_K = rCurrentGuess[20]; + double var_chaste_interface__rapid_delayed_rectifier_K_I__O_K = rCurrentGuess[21]; + double var_chaste_interface__ryanodine_receptors__P_C2 = rCurrentGuess[22]; + double var_chaste_interface__ryanodine_receptors__P_O1 = rCurrentGuess[23]; + double var_chaste_interface__ryanodine_receptors__P_O2 = rCurrentGuess[24]; + double var_chaste_interface__sodium_concentration__Nai = rCurrentGuess[25]; + + //output_equations + const double d_dt_chaste_interface_var_non_inactivating_steady_state_K_I__iKss = 0; // 1 / millisecond + const double var_L_type_calcium_current__K_L = 0.29999999999999999; // micromolar + const double var_L_type_calcium_current__C = 1 - var_chaste_interface__L_type_calcium_current__I - var_chaste_interface__L_type_calcium_current__O; // dimensionless + const double var_L_type_calcium_current__V_L = 0; // millivolt + const double var_L_type_calcium_current__a = 0.0625; // dimensionless + const double var_L_type_calcium_current__b = 0.40000000000000002; // dimensionless + const double var_L_type_calcium_current__delta_V_L = 6.4489000000000001; // millivolt + const double var_L_type_calcium_current__i_CaL_max = 7; // picoA_per_picoF + const double var_L_type_calcium_current__phi_L = 1.798; // dimensionless + const double var_L_type_calcium_current__t_L = 1.5; // millisecond + const double var_L_type_calcium_current__alpha_m = var_L_type_calcium_current__phi_L / var_L_type_calcium_current__t_L; // per_millisecond + const double var_L_type_calcium_current__tau_L = 1150; // millisecond + const double var_calcium_background_current__g_Cab = 0.00069999999999999999; // milliS_per_microF + const double var_calcium_concentration__Bmax = 109; // micromolar + const double var_calcium_concentration__CSQN_tot = 50000; // micromolar + const double var_calcium_concentration__Cai = 1000 * var_chaste_interface__calcium_concentration__Cai_converted; // micromolar + const double var_calcium_concentration__Kd = 0.59999999999999998; // micromolar + const double var_calcium_concentration__Bi = 1 / (1 + var_calcium_concentration__Bmax * var_calcium_concentration__Kd / pow((var_calcium_concentration__Cai + var_calcium_concentration__Kd), 2)); // dimensionless + const double var_calcium_concentration__Bss = 1 / (1 + var_calcium_concentration__Bmax * var_calcium_concentration__Kd / pow((var_chaste_interface__calcium_concentration__Cass + var_calcium_concentration__Kd), 2)); // dimensionless + const double var_calcium_concentration__Km_CSQN = 630; // micromolar + const double var_calcium_concentration__BJSR = 1 / (1 + var_calcium_concentration__CSQN_tot * var_calcium_concentration__Km_CSQN / pow((var_chaste_interface__calcium_concentration__CaJSR + var_calcium_concentration__Km_CSQN), 2)); // dimensionless + const double var_calcium_fluxes__CaMKb = 0.050000000000000003 * (1 - var_chaste_interface__calcium_fluxes__CaMKt) / (1 + 0.69999999999999996 / var_chaste_interface__calcium_concentration__Cass); // dimensionless + const double var_calcium_fluxes__CaMKa = var_calcium_fluxes__CaMKb + var_chaste_interface__calcium_fluxes__CaMKt; // dimensionless + const double var_calcium_fluxes__Km_up = 0.41199999999999998; // micromolar + const double var_calcium_fluxes__P_ryr_const1 = -0.01; // per_millisecond + const double var_calcium_fluxes__P_ryr_const2 = -2; // per_millisecond + const double var_calcium_fluxes__off_rate = 0.00020000000000000001; // per_millisecond + const double var_calcium_fluxes__on_rate = 0.050000000000000003; // per_millisecond + const double d_dt_chaste_interface_var_calcium_fluxes__CaMKt = -var_chaste_interface__calcium_fluxes__CaMKt * var_calcium_fluxes__off_rate + (var_calcium_fluxes__CaMKb + var_chaste_interface__calcium_fluxes__CaMKt) * var_calcium_fluxes__CaMKb * var_calcium_fluxes__on_rate; // 1 / millisecond + const double var_calcium_fluxes__tau_tr = 20; // millisecond + const double var_calcium_fluxes__J_tr = (-var_chaste_interface__calcium_concentration__CaJSR + var_chaste_interface__calcium_concentration__CaNSR) / var_calcium_fluxes__tau_tr; // micromolar_per_millisecond + const double var_calcium_fluxes__tau_xfer = 8; // millisecond + const double var_calcium_fluxes__J_xfer = (-var_calcium_concentration__Cai + var_chaste_interface__calcium_concentration__Cass) / var_calcium_fluxes__tau_xfer; // micromolar_per_millisecond + const double var_calcium_fluxes__v1_caff = 10; // per_millisecond + const double var_calcium_fluxes__v2 = 3.0000000000000001e-5; // per_millisecond + const double var_calcium_fluxes__v2_caff = 0.10000000000000001; // per_millisecond + const double var_calcium_fluxes__vmup_init = 0.50590000000000002; // micromolar_per_millisecond + const double var_calcium_fluxes__vmup = (1 + 2.9982000000000002 * pow(var_calcium_fluxes__CaMKa, 2.5830000000000002) / (1.7590641847756086 + pow(var_calcium_fluxes__CaMKa, 2.5830000000000002))) * var_calcium_fluxes__vmup_init; // micromolar_per_millisecond + const double var_calcium_fluxes__J_serca = pow(var_calcium_concentration__Cai, 2) * var_calcium_fluxes__vmup / (pow(var_calcium_concentration__Cai, 2) + pow(var_calcium_fluxes__Km_up, 2)); // micromolar_per_millisecond + const double var_calcium_pump_current__Km_pCa = 0.28849999999999998; // micromolar + const double var_calcium_pump_current__i_pCa_max = 0.095500000000000002; // picoA_per_picoF + const double var_calcium_pump_current__i_pCa = pow(var_calcium_concentration__Cai, 2) * var_calcium_pump_current__i_pCa_max / (pow(var_calcium_concentration__Cai, 2) + pow(var_calcium_pump_current__Km_pCa, 2)); // picoA_per_picoF + const double var_cell__Acap = 0.00013866; // cm2 + const double var_cell__F = 96.5; // coulomb_per_millimole + const double var_cell__R = 8.3140000000000001; // joule_per_mole_kelvin + const double var_cell__T = 308; // kelvin + const double var_calcium_background_current__E_CaN = 0.5 * var_cell__R * var_cell__T * log(mParameters[1] / var_calcium_concentration__Cai) / var_cell__F; // millivolt + const double var_L_type_calcium_current__FVRT = var_cell__F * var_chaste_interface__cell__V / (var_cell__R * var_cell__T); // dimensionless + const double var_L_type_calcium_current__FVRT_Ca = 2 * var_L_type_calcium_current__FVRT; // dimensionless + const double var_L_type_calcium_current__expVL = exp((-var_L_type_calcium_current__V_L + var_chaste_interface__cell__V) / var_L_type_calcium_current__delta_V_L); // dimensionless + const double var_L_type_calcium_current__alpha_p = var_L_type_calcium_current__expVL / ((1 + var_L_type_calcium_current__expVL) * var_L_type_calcium_current__t_L); // per_millisecond + const double d_dt_chaste_interface_var_L_type_calcium_current__O = var_L_type_calcium_current__C * var_L_type_calcium_current__alpha_p - var_chaste_interface__L_type_calcium_current__O * var_L_type_calcium_current__alpha_m; // 1 / millisecond + const double var_L_type_calcium_current__epsilon_m = (var_L_type_calcium_current__a + var_L_type_calcium_current__expVL) * var_L_type_calcium_current__b / ((var_L_type_calcium_current__b * var_L_type_calcium_current__expVL + var_L_type_calcium_current__a) * var_L_type_calcium_current__tau_L); // per_millisecond + const double var_L_type_calcium_current__epsilon_p = (var_L_type_calcium_current__a + var_L_type_calcium_current__expVL) / ((1 + var_L_type_calcium_current__expVL) * var_L_type_calcium_current__K_L * var_L_type_calcium_current__tau_L); // per_micromolar_millisecond + const double d_dt_chaste_interface_var_L_type_calcium_current__I = -var_chaste_interface__L_type_calcium_current__I * var_L_type_calcium_current__epsilon_m + var_L_type_calcium_current__C * var_L_type_calcium_current__epsilon_p * var_chaste_interface__calcium_concentration__Cass; // 1 / millisecond + const double var_calcium_background_current__i_Cab = (-var_calcium_background_current__E_CaN + var_chaste_interface__cell__V) * var_calcium_background_current__g_Cab; // picoA_per_picoF + const double var_cell__VJSR = 7.7000000000000001e-8; // microlitre + const double var_cell__VNSR = 2.3099999999999999e-7; // microlitre + const double var_cell__Vmyo = 2.1999999999999999e-5; // microlitre + const double var_cell__Vss = 2.1999999999999998e-8; // microlitre + const double var_L_type_calcium_current__i_CaL = ((fabs(var_L_type_calcium_current__FVRT_Ca) > 1.0000000000000001e-5) ? (-2 * (-var_chaste_interface__calcium_concentration__Cass + mParameters[1] * exp(-var_L_type_calcium_current__FVRT_Ca)) * var_L_type_calcium_current__FVRT_Ca * var_chaste_interface__L_type_calcium_current__O * mParameters[4] * var_chaste_interface__L_type_calcium_current__y_gate * var_cell__F * var_cell__Vss / ((1 - exp(-var_L_type_calcium_current__FVRT_Ca)) * var_cell__Acap * mParameters[5])) : (-2.0000000000000002e-5 * (-var_chaste_interface__calcium_concentration__Cass + mParameters[1] * exp(-1.0000000000000001e-5)) * var_chaste_interface__L_type_calcium_current__O * mParameters[4] * var_chaste_interface__L_type_calcium_current__y_gate * var_cell__F * var_cell__Vss / ((1 - exp(-1.0000000000000001e-5)) * var_cell__Acap * mParameters[5]))); // picoA_per_picoF + const double d_dt_chaste_interface_var_calcium_fluxes__P_RyR = var_chaste_interface__calcium_fluxes__P_RyR * var_calcium_fluxes__P_ryr_const1 + var_L_type_calcium_current__i_CaL * var_calcium_fluxes__P_ryr_const2 * exp(-0.038580246913580245 * pow((-1 + 0.20000000000000001 * var_chaste_interface__cell__V), 2)) / var_L_type_calcium_current__i_CaL_max; // 1 / millisecond + const double var_cell__prepulses_number = 10000000000.0; // dimensionless + const double var_chaste_interface__cell__stim_period = 333.33300000000003; // millisecond + const double var_calcium_fluxes__J_leak = ((var_chaste_interface__environment__time < var_cell__prepulses_number * var_chaste_interface__cell__stim_period) ? ((-var_calcium_concentration__Cai + var_chaste_interface__calcium_concentration__CaNSR) * var_calcium_fluxes__v2) : ((-var_calcium_concentration__Cai + var_chaste_interface__calcium_concentration__CaNSR) * var_calcium_fluxes__v2_caff)); // micromolar_per_millisecond + const double d_dt_chaste_interface_var_calcium_concentration__CaNSR = (-var_calcium_fluxes__J_leak + var_calcium_fluxes__J_serca) * var_cell__Vmyo / var_cell__VNSR - var_calcium_fluxes__J_tr * var_cell__VJSR / var_cell__VNSR; // micromolar / millisecond + const double var_cell__i_Stim_converted = GetIntracellularAreaStimulus(var_chaste_interface__environment__time); // uA_per_cm2 + const double var_cell__i_Stim = var_cell__i_Stim_converted / HeartConfig::Instance()->GetCapacitance(); // picoA_per_picoF + const double var_fast_sodium_current__C_Na3 = 1 - var_chaste_interface__fast_sodium_current__C_Na1 - var_chaste_interface__fast_sodium_current__C_Na2 - var_chaste_interface__fast_sodium_current__I1_Na - var_chaste_interface__fast_sodium_current__I2_Na - var_chaste_interface__fast_sodium_current__IC_Na2 - var_chaste_interface__fast_sodium_current__IC_Na3 - var_chaste_interface__fast_sodium_current__IF_Na - var_chaste_interface__fast_sodium_current__O_Na; // dimensionless + const double var_fast_sodium_current__alpha_Na11 = 3.802 / (0.20000000000000001 * exp(-0.016666666666666666 - 0.0066666666666666671 * var_chaste_interface__cell__V) + 0.1027 * exp(-0.14705882352941177 - 0.058823529411764705 * var_chaste_interface__cell__V)); // per_millisecond + const double var_fast_sodium_current__alpha_Na12 = 3.802 / (0.1027 * exp(-0.16666666666666666 - 0.066666666666666666 * var_chaste_interface__cell__V) + 0.23000000000000001 * exp(-0.016666666666666666 - 0.0066666666666666671 * var_chaste_interface__cell__V)); // per_millisecond + const double var_fast_sodium_current__alpha_Na13 = 3.802 / (0.25 * exp(-0.016666666666666666 - 0.0066666666666666671 * var_chaste_interface__cell__V) + 0.1027 * exp(-0.20833333333333334 - 0.083333333333333329 * var_chaste_interface__cell__V)); // per_millisecond + const double var_fast_sodium_current__alpha_Na2 = 1 / (0.39395599999999997 + 0.188495 * exp(-0.42168674698795178 - 0.060240963855421679 * var_chaste_interface__cell__V)); // per_millisecond + const double var_fast_sodium_current__alpha_Na3 = 6.9999999999999997e-7 * exp(-0.90909090909090906 - 0.12987012987012986 * var_chaste_interface__cell__V); // per_millisecond + const double var_fast_sodium_current__alpha_Na4 = 0.001 * var_fast_sodium_current__alpha_Na2; // per_millisecond + const double var_fast_sodium_current__alpha_Na5 = 1.0526315789473684e-5 * var_fast_sodium_current__alpha_Na2; // per_millisecond + const double var_fast_sodium_current__beta_Na11 = 0.19170000000000001 * exp(-0.12315270935960591 - 0.04926108374384236 * var_chaste_interface__cell__V); // per_millisecond + const double var_fast_sodium_current__beta_Na12 = 0.20000000000000001 * exp(0.12315270935960591 - 0.04926108374384236 * var_chaste_interface__cell__V); // per_millisecond + const double var_fast_sodium_current__beta_Na13 = 0.22 * exp(0.36945812807881773 - 0.04926108374384236 * var_chaste_interface__cell__V); // per_millisecond + const double var_fast_sodium_current__beta_Na3 = 0.008539999999999999 + 2.0000000000000002e-5 * var_chaste_interface__cell__V; // per_millisecond + const double d_dt_chaste_interface_var_fast_sodium_current__C_Na1 = var_chaste_interface__fast_sodium_current__C_Na2 * var_fast_sodium_current__alpha_Na12 + var_chaste_interface__fast_sodium_current__IF_Na * var_fast_sodium_current__alpha_Na3 + var_chaste_interface__fast_sodium_current__O_Na * var_fast_sodium_current__beta_Na13 - var_chaste_interface__fast_sodium_current__C_Na1 * var_fast_sodium_current__alpha_Na13 - var_chaste_interface__fast_sodium_current__C_Na1 * var_fast_sodium_current__beta_Na12 - var_chaste_interface__fast_sodium_current__C_Na1 * var_fast_sodium_current__beta_Na3; // 1 / millisecond + const double d_dt_chaste_interface_var_fast_sodium_current__C_Na2 = var_chaste_interface__fast_sodium_current__C_Na1 * var_fast_sodium_current__beta_Na12 + var_fast_sodium_current__C_Na3 * var_fast_sodium_current__alpha_Na11 + var_chaste_interface__fast_sodium_current__IC_Na2 * var_fast_sodium_current__alpha_Na3 - var_chaste_interface__fast_sodium_current__C_Na2 * var_fast_sodium_current__alpha_Na12 - var_chaste_interface__fast_sodium_current__C_Na2 * var_fast_sodium_current__beta_Na11 - var_chaste_interface__fast_sodium_current__C_Na2 * var_fast_sodium_current__beta_Na3; // 1 / millisecond + const double d_dt_chaste_interface_var_fast_sodium_current__IC_Na2 = var_chaste_interface__fast_sodium_current__C_Na2 * var_fast_sodium_current__beta_Na3 + var_chaste_interface__fast_sodium_current__IC_Na3 * var_fast_sodium_current__alpha_Na11 + var_chaste_interface__fast_sodium_current__IF_Na * var_fast_sodium_current__beta_Na12 - var_chaste_interface__fast_sodium_current__IC_Na2 * var_fast_sodium_current__alpha_Na12 - var_chaste_interface__fast_sodium_current__IC_Na2 * var_fast_sodium_current__alpha_Na3 - var_chaste_interface__fast_sodium_current__IC_Na2 * var_fast_sodium_current__beta_Na11; // 1 / millisecond + const double d_dt_chaste_interface_var_fast_sodium_current__IC_Na3 = var_fast_sodium_current__C_Na3 * var_fast_sodium_current__beta_Na3 + var_chaste_interface__fast_sodium_current__IC_Na2 * var_fast_sodium_current__beta_Na11 - var_chaste_interface__fast_sodium_current__IC_Na3 * var_fast_sodium_current__alpha_Na11 - var_chaste_interface__fast_sodium_current__IC_Na3 * var_fast_sodium_current__alpha_Na3; // 1 / millisecond + const double var_fast_sodium_current__beta_Na2 = var_fast_sodium_current__alpha_Na13 * var_fast_sodium_current__alpha_Na2 * var_fast_sodium_current__alpha_Na3 / (var_fast_sodium_current__beta_Na13 * var_fast_sodium_current__beta_Na3); // per_millisecond + const double d_dt_chaste_interface_var_fast_sodium_current__O_Na = var_chaste_interface__fast_sodium_current__C_Na1 * var_fast_sodium_current__alpha_Na13 + var_chaste_interface__fast_sodium_current__IF_Na * var_fast_sodium_current__beta_Na2 - var_chaste_interface__fast_sodium_current__O_Na * var_fast_sodium_current__alpha_Na2 - var_chaste_interface__fast_sodium_current__O_Na * var_fast_sodium_current__beta_Na13; // 1 / millisecond + const double var_fast_sodium_current__beta_Na4 = var_fast_sodium_current__alpha_Na3; // per_millisecond + const double d_dt_chaste_interface_var_fast_sodium_current__IF_Na = var_chaste_interface__fast_sodium_current__C_Na1 * var_fast_sodium_current__beta_Na3 + var_chaste_interface__fast_sodium_current__I1_Na * var_fast_sodium_current__beta_Na4 + var_chaste_interface__fast_sodium_current__IC_Na2 * var_fast_sodium_current__alpha_Na12 + var_chaste_interface__fast_sodium_current__O_Na * var_fast_sodium_current__alpha_Na2 - var_chaste_interface__fast_sodium_current__IF_Na * var_fast_sodium_current__alpha_Na3 - var_chaste_interface__fast_sodium_current__IF_Na * var_fast_sodium_current__alpha_Na4 - var_chaste_interface__fast_sodium_current__IF_Na * var_fast_sodium_current__beta_Na12 - var_chaste_interface__fast_sodium_current__IF_Na * var_fast_sodium_current__beta_Na2; // 1 / millisecond + const double var_fast_sodium_current__beta_Na5 = 0.02 * var_fast_sodium_current__alpha_Na3; // per_millisecond + const double d_dt_chaste_interface_var_fast_sodium_current__I1_Na = var_chaste_interface__fast_sodium_current__I2_Na * var_fast_sodium_current__beta_Na5 + var_chaste_interface__fast_sodium_current__IF_Na * var_fast_sodium_current__alpha_Na4 - var_chaste_interface__fast_sodium_current__I1_Na * var_fast_sodium_current__alpha_Na5 - var_chaste_interface__fast_sodium_current__I1_Na * var_fast_sodium_current__beta_Na4; // 1 / millisecond + const double d_dt_chaste_interface_var_fast_sodium_current__I2_Na = var_chaste_interface__fast_sodium_current__I1_Na * var_fast_sodium_current__alpha_Na5 - var_chaste_interface__fast_sodium_current__I2_Na * var_fast_sodium_current__beta_Na5; // 1 / millisecond + const double var_fast_transient_outward_K_I__g_Kto_f = 0.53469999999999995; // milliS_per_microF + const double var_fast_transient_outward_K_I__E_K = var_cell__R * var_cell__T * log(mParameters[2] / var_chaste_interface__potassium_concentration__Ki) / var_cell__F; // millivolt + const double var_fast_transient_outward_K_I__i_Kto_f = pow(var_chaste_interface__fast_transient_outward_K_I__ato_f, 3) * (-var_fast_transient_outward_K_I__E_K + var_chaste_interface__cell__V) * var_fast_transient_outward_K_I__g_Kto_f * var_chaste_interface__fast_transient_outward_K_I__ito_f; // picoA_per_picoF + const double var_non_inactivating_steady_state_K_I__i_Kss = (-var_fast_transient_outward_K_I__E_K + var_chaste_interface__cell__V) * var_chaste_interface__non_inactivating_steady_state_K_I__aKss * mParameters[8] * var_chaste_interface__non_inactivating_steady_state_K_I__iKss; // picoA_per_picoF + const double var_rapid_delayed_rectifier_K_I__C_K0 = 1 - var_chaste_interface__rapid_delayed_rectifier_K_I__C_K1 - var_chaste_interface__rapid_delayed_rectifier_K_I__C_K2 - var_chaste_interface__rapid_delayed_rectifier_K_I__I_K - var_chaste_interface__rapid_delayed_rectifier_K_I__O_K; // dimensionless + const double var_rapid_delayed_rectifier_K_I__alpha_a0 = 0.022348 * exp(0.01176 * var_chaste_interface__cell__V); // per_millisecond + const double var_rapid_delayed_rectifier_K_I__alpha_a1 = 0.033500000000000002 * exp(0.0109 * var_chaste_interface__cell__V); // per_millisecond + const double var_rapid_delayed_rectifier_K_I__alpha_i = 0.070300000000000001 * exp(0.14349999999999999 + 0.0287 * var_chaste_interface__cell__V); // per_millisecond + const double var_rapid_delayed_rectifier_K_I__beta_a0 = 0.047002000000000002 * exp(-0.063100000000000003 * var_chaste_interface__cell__V); // per_millisecond + const double var_rapid_delayed_rectifier_K_I__beta_a1 = 6.8899999999999994e-5 * exp(-0.041779999999999998 * var_chaste_interface__cell__V); // per_millisecond + const double var_rapid_delayed_rectifier_K_I__beta_i = 0.0064970000000000002 * exp(-0.16339999999999999 - 0.032680000000000001 * var_chaste_interface__cell__V); // per_millisecond + const double d_dt_chaste_interface_var_rapid_delayed_rectifier_K_I__I_K = var_chaste_interface__rapid_delayed_rectifier_K_I__O_K * var_rapid_delayed_rectifier_K_I__alpha_i - var_chaste_interface__rapid_delayed_rectifier_K_I__I_K * var_rapid_delayed_rectifier_K_I__beta_i; // 1 / millisecond + const double d_dt_chaste_interface_var_rapid_delayed_rectifier_K_I__O_K = var_chaste_interface__rapid_delayed_rectifier_K_I__C_K2 * var_rapid_delayed_rectifier_K_I__alpha_a1 + var_chaste_interface__rapid_delayed_rectifier_K_I__I_K * var_rapid_delayed_rectifier_K_I__beta_i - var_chaste_interface__rapid_delayed_rectifier_K_I__O_K * var_rapid_delayed_rectifier_K_I__alpha_i - var_chaste_interface__rapid_delayed_rectifier_K_I__O_K * var_rapid_delayed_rectifier_K_I__beta_a1; // 1 / millisecond + const double var_rapid_delayed_rectifier_K_I__kb = 0.036777999999999998; // per_millisecond + const double var_rapid_delayed_rectifier_K_I__kf = 0.023761000000000001; // per_millisecond + const double d_dt_chaste_interface_var_rapid_delayed_rectifier_K_I__C_K1 = var_rapid_delayed_rectifier_K_I__C_K0 * var_rapid_delayed_rectifier_K_I__alpha_a0 + var_chaste_interface__rapid_delayed_rectifier_K_I__C_K2 * var_rapid_delayed_rectifier_K_I__kb - var_chaste_interface__rapid_delayed_rectifier_K_I__C_K1 * var_rapid_delayed_rectifier_K_I__beta_a0 - var_chaste_interface__rapid_delayed_rectifier_K_I__C_K1 * var_rapid_delayed_rectifier_K_I__kf; // 1 / millisecond + const double d_dt_chaste_interface_var_rapid_delayed_rectifier_K_I__C_K2 = var_chaste_interface__rapid_delayed_rectifier_K_I__C_K1 * var_rapid_delayed_rectifier_K_I__kf + var_chaste_interface__rapid_delayed_rectifier_K_I__O_K * var_rapid_delayed_rectifier_K_I__beta_a1 - var_chaste_interface__rapid_delayed_rectifier_K_I__C_K2 * var_rapid_delayed_rectifier_K_I__alpha_a1 - var_chaste_interface__rapid_delayed_rectifier_K_I__C_K2 * var_rapid_delayed_rectifier_K_I__kb; // 1 / millisecond + const double var_calcium_fluxes__J_rel = ((var_chaste_interface__environment__time < var_cell__prepulses_number * var_chaste_interface__cell__stim_period) ? ((-var_chaste_interface__calcium_concentration__Cass + var_chaste_interface__calcium_concentration__CaJSR) * (var_chaste_interface__ryanodine_receptors__P_O1 + var_chaste_interface__ryanodine_receptors__P_O2) * var_chaste_interface__calcium_fluxes__P_RyR * mParameters[0]) : ((-var_chaste_interface__calcium_concentration__Cass + var_chaste_interface__calcium_concentration__CaJSR) * var_calcium_fluxes__v1_caff)); // micromolar_per_millisecond + const double d_dt_chaste_interface_var_calcium_concentration__CaJSR = (-var_calcium_fluxes__J_rel + var_calcium_fluxes__J_tr) * var_calcium_concentration__BJSR; // micromolar / millisecond + const double d_dt_chaste_interface_var_calcium_concentration__Cass = (var_calcium_fluxes__J_rel * var_cell__VJSR / var_cell__Vss - var_calcium_fluxes__J_xfer * var_cell__Vmyo / var_cell__Vss - 0.5 * var_L_type_calcium_current__i_CaL * var_cell__Acap * mParameters[5] / (var_cell__F * var_cell__Vss)) * var_calcium_concentration__Bss; // micromolar / millisecond + const double var_ryanodine_receptors__P_C1 = 1 - var_chaste_interface__ryanodine_receptors__P_C2 - var_chaste_interface__ryanodine_receptors__P_O1 - var_chaste_interface__ryanodine_receptors__P_O2; // dimensionless + const double var_ryanodine_receptors__k_minus_a = 0.071249999999999994; // per_millisecond + const double var_ryanodine_receptors__k_minus_b = 0.96499999999999997; // per_millisecond + const double var_ryanodine_receptors__k_minus_c = 0.00080000000000000004; // per_millisecond + const double var_ryanodine_receptors__k_plus_a = 0.0060749999999999997; // micromolar4_per_millisecond + const double var_ryanodine_receptors__k_plus_b = 0.0040499999999999998; // micromolar3_per_millisecond + const double var_ryanodine_receptors__k_plus_c = 0.0089999999999999993; // per_millisecond + const double d_dt_chaste_interface_var_ryanodine_receptors__P_C2 = var_chaste_interface__ryanodine_receptors__P_O1 * var_ryanodine_receptors__k_plus_c - var_chaste_interface__ryanodine_receptors__P_C2 * var_ryanodine_receptors__k_minus_c; // 1 / millisecond + const double var_ryanodine_receptors__m = 3; // dimensionless + const double d_dt_chaste_interface_var_ryanodine_receptors__P_O2 = -var_chaste_interface__ryanodine_receptors__P_O2 * var_ryanodine_receptors__k_minus_b + pow(var_chaste_interface__calcium_concentration__Cass, var_ryanodine_receptors__m) * var_chaste_interface__ryanodine_receptors__P_O1 * var_ryanodine_receptors__k_plus_b; // 1 / millisecond + const double var_ryanodine_receptors__n = 4; // dimensionless + const double d_dt_chaste_interface_var_ryanodine_receptors__P_O1 = var_chaste_interface__ryanodine_receptors__P_C2 * var_ryanodine_receptors__k_minus_c + var_chaste_interface__ryanodine_receptors__P_O2 * var_ryanodine_receptors__k_minus_b - var_chaste_interface__ryanodine_receptors__P_O1 * var_ryanodine_receptors__k_minus_a - var_chaste_interface__ryanodine_receptors__P_O1 * var_ryanodine_receptors__k_plus_c + pow(var_chaste_interface__calcium_concentration__Cass, var_ryanodine_receptors__n) * var_ryanodine_receptors__P_C1 * var_ryanodine_receptors__k_plus_a - pow(var_chaste_interface__calcium_concentration__Cass, var_ryanodine_receptors__m) * var_chaste_interface__ryanodine_receptors__P_O1 * var_ryanodine_receptors__k_plus_b; // 1 / millisecond + const double var_slow_delayed_rectifier_K_I__i_Ks = pow(var_chaste_interface__slow_delayed_rectifier_K_I__nKs, 2) * (-var_fast_transient_outward_K_I__E_K + var_chaste_interface__cell__V) * mParameters[10]; // picoA_per_picoF + const double var_slow_transient_outward_K_I__g_Kto_s = 0; // milliS_per_microF + const double var_slow_transient_outward_K_I__i_Kto_s = (-var_fast_transient_outward_K_I__E_K + var_chaste_interface__cell__V) * var_chaste_interface__slow_transient_outward_K_I__ato_s * var_slow_transient_outward_K_I__g_Kto_s * var_chaste_interface__slow_transient_outward_K_I__ito_s; // picoA_per_picoF + const double var_sodium_background_current__g_Nab = 0.0025999999999999999; // milliS_per_microF + const double var_sodium_calcium_exchange_current__K_mAllo = 0; // micromolar + const double var_sodium_calcium_exchange_current__K_mCai = 3.6000000000000001; // micromolar + const double var_sodium_calcium_exchange_current__K_mCao = 1400; // micromolar + const double var_sodium_calcium_exchange_current__K_mNai = 12000; // micromolar + const double var_sodium_calcium_exchange_current__K_mNao = 88000; // micromolar + const double var_sodium_calcium_exchange_current__eta = 0.34999999999999998; // dimensionless + const double var_sodium_calcium_exchange_current__k_sat = 0.27000000000000002; // dimensionless + const double var_fast_sodium_current__E_Na = var_cell__R * var_cell__T * log((mParameters[3] + 0.1111111111111111 * mParameters[2]) / (var_chaste_interface__sodium_concentration__Nai + 0.1111111111111111 * var_chaste_interface__potassium_concentration__Ki)) / var_cell__F; // millivolt + const double var_fast_sodium_current__i_Na = (-var_fast_sodium_current__E_Na + var_chaste_interface__cell__V) * var_chaste_interface__fast_sodium_current__O_Na * mParameters[6]; // picoA_per_picoF + const double var_rapid_delayed_rectifier_K_I__i_Kr = (-var_cell__R * var_cell__T * log((mParameters[2] + 0.020408163265306124 * mParameters[3]) / (var_chaste_interface__potassium_concentration__Ki + 0.020408163265306124 * var_chaste_interface__sodium_concentration__Nai)) / var_cell__F + var_chaste_interface__cell__V) * var_chaste_interface__rapid_delayed_rectifier_K_I__O_K * mParameters[9]; // picoA_per_picoF + const double var_sodium_background_current__i_Nab = (-var_fast_sodium_current__E_Na + var_chaste_interface__cell__V) * var_sodium_background_current__g_Nab; // picoA_per_picoF + const double var_sodium_calcium_exchange_current__i_NCX = (pow(var_chaste_interface__sodium_concentration__Nai, 3) * mParameters[1] * exp(var_cell__F * var_chaste_interface__cell__V * var_sodium_calcium_exchange_current__eta / (var_cell__R * var_cell__T)) - pow(mParameters[3], 3) * var_calcium_concentration__Cai * exp((-1 + var_sodium_calcium_exchange_current__eta) * var_cell__F * var_chaste_interface__cell__V / (var_cell__R * var_cell__T))) * mParameters[11] / ((1 + pow(var_sodium_calcium_exchange_current__K_mAllo, 2) / pow(var_calcium_concentration__Cai, 2)) * (1 + var_sodium_calcium_exchange_current__k_sat * exp((-1 + var_sodium_calcium_exchange_current__eta) * var_cell__F * var_chaste_interface__cell__V / (var_cell__R * var_cell__T))) * (pow(mParameters[3], 3) * var_calcium_concentration__Cai + pow(var_sodium_calcium_exchange_current__K_mNao, 3) * var_calcium_concentration__Cai + pow(var_chaste_interface__sodium_concentration__Nai, 3) * mParameters[1] + pow(var_chaste_interface__sodium_concentration__Nai, 3) * var_sodium_calcium_exchange_current__K_mCao + pow(mParameters[3], 3) * (1 + pow(var_chaste_interface__sodium_concentration__Nai, 3) / pow(var_sodium_calcium_exchange_current__K_mNai, 3)) * var_sodium_calcium_exchange_current__K_mCai + pow(var_sodium_calcium_exchange_current__K_mNai, 3) * (1 + var_calcium_concentration__Cai / var_sodium_calcium_exchange_current__K_mCai) * mParameters[1])); // picoA_per_picoF + const double var_calcium_concentration__Cai_orig_deriv = (-var_calcium_fluxes__J_serca - 0.5 * (-2 * var_sodium_calcium_exchange_current__i_NCX + var_calcium_background_current__i_Cab + var_calcium_pump_current__i_pCa) * var_cell__Acap * mParameters[5] / (var_cell__F * var_cell__Vmyo) + var_calcium_fluxes__J_leak + var_calcium_fluxes__J_xfer) * var_calcium_concentration__Bi; // micromolar / millisecond + const double d_dt_chaste_interface_var_calcium_concentration__Cai_converted = 0.001 * var_calcium_concentration__Cai_orig_deriv; // millimolar / millisecond + const double var_sodium_potassium_pump_current__Km_Ko = 1500; // micromolar + const double var_sodium_potassium_pump_current__Km_Nai = 16600; // micromolar + const double var_sodium_potassium_pump_current__i_NaK_max = 2.4860000000000002; // picoA_per_picoF + const double var_sodium_potassium_pump_current__sigma = -0.14285714285714285 + 0.14285714285714285 * exp(1.4858841010401188e-5 * mParameters[3]); // dimensionless + const double var_sodium_potassium_pump_current__f_NaK = 1 / (1 + 0.1245 * exp(-0.10000000000000001 * var_cell__F * var_chaste_interface__cell__V / (var_cell__R * var_cell__T)) + 0.036499999999999998 * var_sodium_potassium_pump_current__sigma * exp(-var_cell__F * var_chaste_interface__cell__V / (var_cell__R * var_cell__T))); // dimensionless + const double var_sodium_potassium_pump_current__i_NaK = mParameters[2] * var_sodium_potassium_pump_current__f_NaK * var_sodium_potassium_pump_current__i_NaK_max / ((1 + pow((var_sodium_potassium_pump_current__Km_Nai / var_chaste_interface__sodium_concentration__Nai), 2.3999999999999999)) * (mParameters[2] + var_sodium_potassium_pump_current__Km_Ko)); // picoA_per_picoF + const double d_dt_chaste_interface_var_sodium_concentration__Nai = (-var_fast_sodium_current__i_Na - var_sodium_background_current__i_Nab - 3 * var_sodium_calcium_exchange_current__i_NCX - 3 * var_sodium_potassium_pump_current__i_NaK) * var_cell__Acap * mParameters[5] / (var_cell__F * var_cell__Vmyo); // micromolar / millisecond + const double var_time_independent_K_I__i_K1 = (-var_fast_transient_outward_K_I__E_K + var_chaste_interface__cell__V) * mParameters[2] * mParameters[7] / ((1 + exp(0.089599999999999999 * var_chaste_interface__cell__V - 0.089599999999999999 * var_fast_transient_outward_K_I__E_K)) * (210 + mParameters[2])); // picoA_per_picoF + const double var_ultra_rapidly_activating_delayed_rectifier_K_I__g_Kur = 0.25; // milliS_per_microF + const double var_ultra_rapidly_activating_delayed_rectifier_K_I__i_Kur = (-var_fast_transient_outward_K_I__E_K + var_chaste_interface__cell__V) * var_chaste_interface__ultra_rapidly_activating_delayed_rectifier_K_I__aur * var_ultra_rapidly_activating_delayed_rectifier_K_I__g_Kur * var_chaste_interface__ultra_rapidly_activating_delayed_rectifier_K_I__iur; // picoA_per_picoF + const double d_dt_chaste_interface_var_potassium_concentration__Ki = (-var_cell__i_Stim - var_fast_transient_outward_K_I__i_Kto_f - var_non_inactivating_steady_state_K_I__i_Kss - var_rapid_delayed_rectifier_K_I__i_Kr - var_slow_delayed_rectifier_K_I__i_Ks - var_slow_transient_outward_K_I__i_Kto_s - var_time_independent_K_I__i_K1 - var_ultra_rapidly_activating_delayed_rectifier_K_I__i_Kur + 2 * var_sodium_potassium_pump_current__i_NaK) * var_cell__Acap * mParameters[5] / (var_cell__F * var_cell__Vmyo); // micromolar / millisecond + + rResidual[4] = rCurrentGuess[4] - rY[1] - mDt*d_dt_chaste_interface_var_calcium_concentration__Cai_converted; + rResidual[5] = rCurrentGuess[5] - rY[2] - mDt*d_dt_chaste_interface_var_calcium_concentration__Cass; + rResidual[2] = rCurrentGuess[2] - rY[3] - mDt*d_dt_chaste_interface_var_calcium_concentration__CaJSR; + rResidual[3] = rCurrentGuess[3] - rY[4] - mDt*d_dt_chaste_interface_var_calcium_concentration__CaNSR; + rResidual[7] = rCurrentGuess[7] - rY[5] - mDt*d_dt_chaste_interface_var_calcium_fluxes__P_RyR; + rResidual[6] = rCurrentGuess[6] - rY[6] - mDt*d_dt_chaste_interface_var_calcium_fluxes__CaMKt; + rResidual[23] = rCurrentGuess[23] - rY[7] - mDt*d_dt_chaste_interface_var_ryanodine_receptors__P_O1; + rResidual[24] = rCurrentGuess[24] - rY[8] - mDt*d_dt_chaste_interface_var_ryanodine_receptors__P_O2; + rResidual[22] = rCurrentGuess[22] - rY[9] - mDt*d_dt_chaste_interface_var_ryanodine_receptors__P_C2; + rResidual[1] = rCurrentGuess[1] - rY[10] - mDt*d_dt_chaste_interface_var_L_type_calcium_current__O; + rResidual[0] = rCurrentGuess[0] - rY[11] - mDt*d_dt_chaste_interface_var_L_type_calcium_current__I; + rResidual[25] = rCurrentGuess[25] - rY[13] - mDt*d_dt_chaste_interface_var_sodium_concentration__Nai; + rResidual[15] = rCurrentGuess[15] - rY[14] - mDt*d_dt_chaste_interface_var_fast_sodium_current__O_Na; + rResidual[8] = rCurrentGuess[8] - rY[15] - mDt*d_dt_chaste_interface_var_fast_sodium_current__C_Na1; + rResidual[9] = rCurrentGuess[9] - rY[16] - mDt*d_dt_chaste_interface_var_fast_sodium_current__C_Na2; + rResidual[10] = rCurrentGuess[10] - rY[17] - mDt*d_dt_chaste_interface_var_fast_sodium_current__I1_Na; + rResidual[11] = rCurrentGuess[11] - rY[18] - mDt*d_dt_chaste_interface_var_fast_sodium_current__I2_Na; + rResidual[14] = rCurrentGuess[14] - rY[19] - mDt*d_dt_chaste_interface_var_fast_sodium_current__IF_Na; + rResidual[12] = rCurrentGuess[12] - rY[20] - mDt*d_dt_chaste_interface_var_fast_sodium_current__IC_Na2; + rResidual[13] = rCurrentGuess[13] - rY[21] - mDt*d_dt_chaste_interface_var_fast_sodium_current__IC_Na3; + rResidual[17] = rCurrentGuess[17] - rY[22] - mDt*d_dt_chaste_interface_var_potassium_concentration__Ki; + rResidual[16] = rCurrentGuess[16] - rY[26] - mDt*d_dt_chaste_interface_var_non_inactivating_steady_state_K_I__iKss; + rResidual[21] = rCurrentGuess[21] - rY[27] - mDt*d_dt_chaste_interface_var_rapid_delayed_rectifier_K_I__O_K; + rResidual[18] = rCurrentGuess[18] - rY[28] - mDt*d_dt_chaste_interface_var_rapid_delayed_rectifier_K_I__C_K1; + rResidual[19] = rCurrentGuess[19] - rY[29] - mDt*d_dt_chaste_interface_var_rapid_delayed_rectifier_K_I__C_K2; + rResidual[20] = rCurrentGuess[20] - rY[30] - mDt*d_dt_chaste_interface_var_rapid_delayed_rectifier_K_I__I_K; + } + + void Cellli_mouse_2010FromCellMLBackwardEuler::ComputeJacobian(double var_chaste_interface__environment__time, const double rCurrentGuess[26], double rJacobian[26][26]) + { + std::vector& rY = rGetStateVariables(); + double var_chaste_interface__cell__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -78.9452115785979 + double var_chaste_interface__L_type_calcium_current__y_gate = rY[12]; + // Units: dimensionless; Initial value: 0.845044436980163 + double var_chaste_interface__ultra_rapidly_activating_delayed_rectifier_K_I__aur = rY[23]; + // Units: dimensionless; Initial value: 0.00346258606821817 + double var_chaste_interface__ultra_rapidly_activating_delayed_rectifier_K_I__iur = rY[24]; + // Units: dimensionless; Initial value: 0.955684946168062 + double var_chaste_interface__non_inactivating_steady_state_K_I__aKss = rY[25]; + // Units: dimensionless; Initial value: 0.287585636847048 + double var_chaste_interface__slow_delayed_rectifier_K_I__nKs = rY[31]; + // Units: dimensionless; Initial value: 0.00336735013094628 + double var_chaste_interface__fast_transient_outward_K_I__ato_f = rY[32]; + // Units: dimensionless; Initial value: 0.0142335908879204 + double var_chaste_interface__fast_transient_outward_K_I__ito_f = rY[33]; + // Units: dimensionless; Initial value: 0.996989882138174 + + double var_chaste_interface__L_type_calcium_current__I = rCurrentGuess[0]; + double var_chaste_interface__L_type_calcium_current__O = rCurrentGuess[1]; + double var_chaste_interface__calcium_concentration__CaJSR = rCurrentGuess[2]; + double var_chaste_interface__calcium_concentration__CaNSR = rCurrentGuess[3]; + double var_chaste_interface__calcium_concentration__Cai_converted = rCurrentGuess[4]; + double var_chaste_interface__calcium_concentration__Cass = rCurrentGuess[5]; + double var_chaste_interface__calcium_fluxes__CaMKt = rCurrentGuess[6]; + double var_chaste_interface__calcium_fluxes__P_RyR = rCurrentGuess[7]; + double var_chaste_interface__fast_sodium_current__O_Na = rCurrentGuess[15]; + double var_chaste_interface__non_inactivating_steady_state_K_I__iKss = rCurrentGuess[16]; + double var_chaste_interface__potassium_concentration__Ki = rCurrentGuess[17]; + double var_chaste_interface__rapid_delayed_rectifier_K_I__O_K = rCurrentGuess[21]; + double var_chaste_interface__ryanodine_receptors__P_C2 = rCurrentGuess[22]; + double var_chaste_interface__ryanodine_receptors__P_O1 = rCurrentGuess[23]; + double var_chaste_interface__ryanodine_receptors__P_O2 = rCurrentGuess[24]; + double var_chaste_interface__sodium_concentration__Nai = rCurrentGuess[25]; + + const double var_x0 = exp(0.15506520491866829 * var_chaste_interface__cell__V); + const double var_x1 = 0.0625 + var_x0; + const double var_x2 = 1 / (1 + var_x0); + const double var_x3 = 0.0028985507246376812 * var_x1 * var_x2; + const double var_x4 = var_x3 * var_chaste_interface__calcium_concentration__Cass; + const double var_x5 = 0.66666666666666663 * var_x0 * var_x2; + const double var_x6 = 1 + 0.0015873015873015873 * var_chaste_interface__calcium_concentration__CaJSR; + const double var_x7 = pow(var_x6, (-2)); + const double var_x8 = 1 / (1 + 79.365079365079367 * var_x7); + const double var_x9 = var_chaste_interface__ryanodine_receptors__P_O1 + var_chaste_interface__ryanodine_receptors__P_O2; + const double var_x10 = var_chaste_interface__calcium_fluxes__P_RyR * mParameters[0]; + const double var_x11 = var_x10 * var_x9; + const double var_x12 = var_chaste_interface__environment__time < 3333330000000.0005; + const double var_x13 = ((var_x12) ? (var_x11) : (10)); + const double var_x14 = -var_chaste_interface__calcium_concentration__Cass + var_chaste_interface__calcium_concentration__CaJSR; + const double var_x15 = ((var_x12) ? (var_x11 * var_x14) : (10 * var_chaste_interface__calcium_concentration__CaJSR - 10 * var_chaste_interface__calcium_concentration__Cass)); + const double var_x16 = ((var_x12) ? (-var_x10 * var_x9) : (-10)); + const double var_x17 = ((var_x12) ? (var_x14 * var_x9 * mParameters[0]) : (0)); + const double var_x18 = ((var_x12) ? (var_x10 * var_x14) : (0)); + const double var_x19 = -var_x18 * var_x8; + const double var_x20 = ((var_x12) ? (3.0000000000000001e-5) : (0.10000000000000001)); + const double var_x21 = ((var_x12) ? (-0.029999999999999999) : (-100)); + const double var_x22 = pow(var_chaste_interface__calcium_concentration__Cai_converted, 3); + const double var_x23 = 1 - var_chaste_interface__calcium_fluxes__CaMKt; + const double var_x24 = 1 + 0.69999999999999996 / var_chaste_interface__calcium_concentration__Cass; + const double var_x25 = 1 / var_x24; + const double var_x26 = 0.050000000000000003 * var_x25; + const double var_x27 = var_x23 * var_x26 + var_chaste_interface__calcium_fluxes__CaMKt; + const double var_x28 = pow(var_x27, 2.5830000000000002); + const double var_x29 = 1 / (1.7590641847756086 + var_x28); + const double var_x30 = 1.5167893800000001 * var_x29; + const double var_x31 = 0.50590000000000002 + var_x28 * var_x30; + const double var_x32 = pow(var_chaste_interface__calcium_concentration__Cai_converted, 2); + const double var_x33 = var_x22 * var_x31 / pow((1.6974399999999999e-7 + var_x32), 2); + const double var_x34 = 1000000 * var_x32; + const double var_x35 = 1 / (0.16974399999999998 + var_x34); + const double var_x36 = pow(var_x27, 1.5830000000000002); + const double var_x37 = pow(var_chaste_interface__calcium_concentration__Cass, (-2)); + const double var_x38 = var_x23 * var_x37 / pow(var_x24, 2); + const double var_x39 = pow(var_x27, 4.1660000000000004) / pow((1 + 0.56848408867329814 * var_x28), 2); + const double var_x40 = var_x35 * (-0.044315367702357472 * var_x38 * var_x39 + 0.13712534389890002 * var_x29 * var_x36 * var_x38); + const double var_x41 = 95238095.238095239 * var_x32; + const double var_x42 = 2.5830000000000002 - 0.12915000000000001 * var_x25; + const double var_x43 = var_x35 * (-0.49018713237495126 * var_x39 * var_x42 + var_x30 * var_x36 * var_x42); + const double var_x44 = 0.00059999999999999995 + var_chaste_interface__calcium_concentration__Cai_converted; + const double var_x45 = 1 + 6.5400000000000004e-5 / pow(var_x44, 2); + const double var_x46 = 1 / var_x45; + const double var_x47 = 0.001 * var_x46; + const double var_x48 = 1 / var_chaste_interface__calcium_concentration__Cai_converted; + const double var_x49 = 1 / (0.083232249999999994 + var_x34); + const double var_x50 = exp(-0.024495140414072337 * var_chaste_interface__cell__V); + const double var_x51 = pow(mParameters[3], 3); + const double var_x52 = 1 / (1 + 0.27000000000000002 * var_x50); + const double var_x53 = pow(var_chaste_interface__sodium_concentration__Nai, 3); + const double var_x54 = var_x53 * mParameters[1]; + const double var_x55 = (1 + 277.77777777777777 * var_chaste_interface__calcium_concentration__Cai_converted) * mParameters[1]; + const double var_x56 = var_x51 * (1 + 5.7870370370370368e-13 * var_x53); + const double var_x57 = 1000 * var_x51; + const double var_x58 = var_x57 * var_chaste_interface__calcium_concentration__Cai_converted; + const double var_x59 = 1 / (var_x54 + var_x58 + 1400 * var_x53 + 1728000000000.0 * var_x55 + 3.6000000000000001 * var_x56 + 6.81472e+17 * var_chaste_interface__calcium_concentration__Cai_converted); + const double var_x60 = var_x52 * var_x59 * mParameters[11]; + const double var_x61 = var_x50 * var_x51 * var_x60; + const double var_x62 = pow((2.0543764087152516e-15 * var_x53 + 5.282682193839219e-18 * var_x56 + 2.535687453042825e-6 * var_x55 + 1.4674117205108941e-18 * var_x54 + 1.4674117205108941e-15 * var_x51 * var_chaste_interface__calcium_concentration__Cai_converted + var_chaste_interface__calcium_concentration__Cai_converted), (-2)); + const double var_x63 = exp(0.013189690992192795 * var_chaste_interface__cell__V); + const double var_x64 = -var_x50 * var_x58 + var_x53 * var_x63 * mParameters[1]; + const double var_x65 = -6.81472e+17 - var_x57 - 480000000000000.0 * mParameters[1]; + const double var_x66 = var_x31 * var_x35; + const double var_x67 = var_x52 * var_x64 * mParameters[11]; + const double var_x68 = pow(var_chaste_interface__sodium_concentration__Nai, 2); + const double var_x69 = var_x68 * mParameters[1]; + const double var_x70 = -3 * var_x69 - 4200 * var_x68 - 6.2500000000000002e-12 * var_x51 * var_x68; + const double var_x71 = var_x62 * var_x67; + const double var_x72 = var_x60 * var_x63 * var_x69; + const double var_x73 = 0.59999999999999998 + var_chaste_interface__calcium_concentration__Cass; + const double var_x74 = pow(var_x73, (-2)); + const double var_x75 = 1 / (1 + 65.399999999999991 * var_x74); + const double var_x76 = 0.075369662812530269 * var_chaste_interface__cell__V; + const double var_x77 = exp(-var_x76); + const double var_x78 = mParameters[4] * var_chaste_interface__L_type_calcium_current__y_gate / mParameters[5]; + const double var_x79 = 0.0023079445283571576 * var_x78 * var_chaste_interface__cell__V / (1 - var_x77); + const double var_x80 = var_x79 * (-var_chaste_interface__calcium_concentration__Cass + var_x77 * mParameters[1]); + const double var_x81 = fabs(var_x76) > 1.0000000000000001e-5; + const double var_x82 = exp(-1.0000000000000001e-5); + const double var_x83 = 3.062166450310111e-7 * var_x78 / (1 - var_x82); + const double var_x84 = var_x83 * (-var_chaste_interface__calcium_concentration__Cass + var_x82 * mParameters[1]); + const double var_x85 = ((var_x81) ? (-var_x80) : (-var_x84)); + const double var_x86 = 32.656617993405561 * mParameters[5]; + const double var_x87 = 3.5000000000000004 * var_x75; + const double var_x88 = ((var_x81) ? (var_x79 * var_chaste_interface__L_type_calcium_current__O) : (var_x83 * var_chaste_interface__L_type_calcium_current__O)); + const double var_x89 = var_x18 * var_x87; + const double var_x90 = 0.2857142857142857 * exp(-0.038580246913580245 * pow((-1 + 0.20000000000000001 * var_chaste_interface__cell__V), 2)); + const double var_x91 = 0.04926108374384236 * var_chaste_interface__cell__V; + const double var_x92 = 0.20000000000000001 * exp(0.12315270935960591 - var_x91); + const double var_x93 = exp(-0.016666666666666666 - 0.0066666666666666671 * var_chaste_interface__cell__V); + const double var_x94 = 1 / (0.25 * var_x93 + 0.1027 * exp(-0.20833333333333334 - 0.083333333333333329 * var_chaste_interface__cell__V)); + const double var_x95 = 3.802 * var_x94; + const double var_x96 = 0.008539999999999999 + 2.0000000000000002e-5 * var_chaste_interface__cell__V; + const double var_x97 = 3.802 / (0.1027 * exp(-0.16666666666666666 - 0.066666666666666666 * var_chaste_interface__cell__V) + 0.23000000000000001 * var_x93); + const double var_x98 = exp(-0.90909090909090906 - 0.12987012987012986 * var_chaste_interface__cell__V); + const double var_x99 = 6.9999999999999997e-7 * var_x98; + const double var_x100 = exp(0.36945812807881773 - var_x91); + const double var_x101 = 0.22 * var_x100; + const double var_x102 = 3.802 / (0.20000000000000001 * var_x93 + 0.1027 * exp(-0.14705882352941177 - 0.058823529411764705 * var_chaste_interface__cell__V)); + const double var_x103 = -var_x102; + const double var_x104 = 0.19170000000000001 * exp(-0.12315270935960591 - var_x91); + const double var_x105 = var_x104 + var_x97; + const double var_x106 = var_x102 + var_x96; + const double var_x107 = 1 / (0.39395599999999997 + 0.188495 * exp(-0.42168674698795178 - 0.060240963855421679 * var_chaste_interface__cell__V)); + const double var_x108 = 1.0526315789473684e-5 * var_x107; + const double var_x109 = 1.4e-8 * var_x98; + const double var_x110 = 0.001 * var_x107; + const double var_x111 = -var_x96; + const double var_x112 = 1.2097272727272726e-5 * var_x107 * var_x94 * var_x98 / (var_x100 * var_x96); + const double var_x113 = var_x107; + const double var_x114 = 1 / var_chaste_interface__potassium_concentration__Ki; + const double var_x115 = var_x114 * mParameters[2]; + const double var_x116 = log(var_x115); + const double var_x117 = -26.535875647668394 * var_x116 + var_chaste_interface__cell__V; + const double var_x118 = 0.065313235986811116 * mParameters[5]; + const double var_x119 = var_chaste_interface__non_inactivating_steady_state_K_I__aKss * mParameters[8]; + const double var_x120 = 1 / (var_chaste_interface__potassium_concentration__Ki + 0.020408163265306124 * var_chaste_interface__sodium_concentration__Nai); + const double var_x121 = var_x120 * var_chaste_interface__rapid_delayed_rectifier_K_I__O_K * mParameters[9]; + const double var_x122 = 1.7331439082928402 * var_x114; + const double var_x123 = exp(0.089599999999999999 * var_chaste_interface__cell__V - 2.3776144580310881 * var_x116); + const double var_x124 = 1 + var_x123; + const double var_x125 = 1 / (210 + mParameters[2]); + const double var_x126 = 1 / var_chaste_interface__sodium_concentration__Nai; + const double var_x127 = pow(var_x126, 2.3999999999999999); + const double var_x128 = var_x126 * var_x127 * mParameters[2] / ((1500 + mParameters[2]) * pow((7.44287265976699e-11 + var_x127), 2) * (1 + 0.1245 * exp(-0.0037684831406265135 * var_chaste_interface__cell__V) + 0.036499999999999998 * (-0.14285714285714285 + 0.14285714285714285 * exp(1.4858841010401188e-5 * mParameters[3])) * exp(-0.037684831406265135 * var_chaste_interface__cell__V))); + const double var_x129 = 0.022348 * exp(0.01176 * var_chaste_interface__cell__V); + const double var_x130 = -var_x129; + const double var_x131 = 0.033500000000000002 * exp(0.0109 * var_chaste_interface__cell__V); + const double var_x132 = 6.8899999999999994e-5 * exp(-0.041779999999999998 * var_chaste_interface__cell__V); + const double var_x133 = 0.0064970000000000002 * exp(-0.16339999999999999 - 0.032680000000000001 * var_chaste_interface__cell__V); + const double var_x134 = 0.070300000000000001 * exp(0.14349999999999999 + 0.0287 * var_chaste_interface__cell__V); + const double var_x135 = 0.012149999999999999 * pow(var_chaste_interface__calcium_concentration__Cass, 2) * var_chaste_interface__ryanodine_receptors__P_O1; + const double var_x136 = pow(var_chaste_interface__calcium_concentration__Cass, 3); + const double var_x137 = 0.0060749999999999997 * pow(var_chaste_interface__calcium_concentration__Cass, 4); + const double var_x138 = 0.0040499999999999998 * var_x136; + const double var_x139 = 4.2191641619115923e-37 * var_x71; + const double var_x140 = 1 / (var_chaste_interface__sodium_concentration__Nai + 0.1111111111111111 * var_chaste_interface__potassium_concentration__Ki); + const double var_x141 = var_x140 * var_chaste_interface__fast_sodium_current__O_Na * mParameters[6]; + + + rJacobian[0][0] = 1.0 - (mDt * (-var_x4 - 0.00034782608695652176 * var_x1 / (0.0625 + 0.40000000000000002 * var_x0))); + rJacobian[0][1] = -(mDt * (-var_x4)); + rJacobian[0][2] = 0.0; + rJacobian[0][3] = 0.0; + rJacobian[0][4] = 0.0; + rJacobian[0][5] = -(mDt * (var_x3 * (1 - var_chaste_interface__L_type_calcium_current__I - var_chaste_interface__L_type_calcium_current__O))); + rJacobian[0][6] = 0.0; + rJacobian[0][7] = 0.0; + rJacobian[0][8] = 0.0; + rJacobian[0][9] = 0.0; + rJacobian[0][10] = 0.0; + rJacobian[0][11] = 0.0; + rJacobian[0][12] = 0.0; + rJacobian[0][13] = 0.0; + rJacobian[0][14] = 0.0; + rJacobian[0][15] = 0.0; + rJacobian[0][16] = 0.0; + rJacobian[0][17] = 0.0; + rJacobian[0][18] = 0.0; + rJacobian[0][19] = 0.0; + rJacobian[0][20] = 0.0; + rJacobian[0][21] = 0.0; + rJacobian[0][22] = 0.0; + rJacobian[0][23] = 0.0; + rJacobian[0][24] = 0.0; + rJacobian[0][25] = 0.0; + rJacobian[1][0] = -(mDt * (-var_x5)); + rJacobian[1][1] = 1.0 - (mDt * (-1.1986666666666668 - var_x5)); + rJacobian[1][2] = 0.0; + rJacobian[1][3] = 0.0; + rJacobian[1][4] = 0.0; + rJacobian[1][5] = 0.0; + rJacobian[1][6] = 0.0; + rJacobian[1][7] = 0.0; + rJacobian[1][8] = 0.0; + rJacobian[1][9] = 0.0; + rJacobian[1][10] = 0.0; + rJacobian[1][11] = 0.0; + rJacobian[1][12] = 0.0; + rJacobian[1][13] = 0.0; + rJacobian[1][14] = 0.0; + rJacobian[1][15] = 0.0; + rJacobian[1][16] = 0.0; + rJacobian[1][17] = 0.0; + rJacobian[1][18] = 0.0; + rJacobian[1][19] = 0.0; + rJacobian[1][20] = 0.0; + rJacobian[1][21] = 0.0; + rJacobian[1][22] = 0.0; + rJacobian[1][23] = 0.0; + rJacobian[1][24] = 0.0; + rJacobian[1][25] = 0.0; + rJacobian[2][0] = 0.0; + rJacobian[2][1] = 0.0; + rJacobian[2][2] = 1.0 - (mDt * (var_x8 * (-0.050000000000000003 - var_x13) + 4.0000000000000003e-5 * (-var_x15 + 0.050000000000000003 * var_chaste_interface__calcium_concentration__CaNSR - 0.050000000000000003 * var_chaste_interface__calcium_concentration__CaJSR) / (pow(var_x6, 3) * pow((0.0126 + var_x7), 2)))); + rJacobian[2][3] = -(mDt * (0.050000000000000003 * var_x8)); + rJacobian[2][4] = 0.0; + rJacobian[2][5] = -(mDt * (-var_x16 * var_x8)); + rJacobian[2][6] = 0.0; + rJacobian[2][7] = -(mDt * (-var_x17 * var_x8)); + rJacobian[2][8] = 0.0; + rJacobian[2][9] = 0.0; + rJacobian[2][10] = 0.0; + rJacobian[2][11] = 0.0; + rJacobian[2][12] = 0.0; + rJacobian[2][13] = 0.0; + rJacobian[2][14] = 0.0; + rJacobian[2][15] = 0.0; + rJacobian[2][16] = 0.0; + rJacobian[2][17] = 0.0; + rJacobian[2][18] = 0.0; + rJacobian[2][19] = 0.0; + rJacobian[2][20] = 0.0; + rJacobian[2][21] = 0.0; + rJacobian[2][22] = 0.0; + rJacobian[2][23] = -(mDt * (var_x19)); + rJacobian[2][24] = -(mDt * (var_x19)); + rJacobian[2][25] = 0.0; + rJacobian[3][0] = 0.0; + rJacobian[3][1] = 0.0; + rJacobian[3][2] = -(mDt * (0.016666666666666666)); + rJacobian[3][3] = 1.0 - (mDt * (-0.016666666666666666 - 95.238095238095241 * var_x20)); + rJacobian[3][4] = -(mDt * (-95.238095238095241 * var_x21 - 190.47619047619048 * var_x33 + 190476190.47619048 * var_x31 * var_x35 * var_chaste_interface__calcium_concentration__Cai_converted)); + rJacobian[3][5] = -(mDt * (var_x40 * var_x41)); + rJacobian[3][6] = -(mDt * (var_x41 * var_x43)); + rJacobian[3][7] = 0.0; + rJacobian[3][8] = 0.0; + rJacobian[3][9] = 0.0; + rJacobian[3][10] = 0.0; + rJacobian[3][11] = 0.0; + rJacobian[3][12] = 0.0; + rJacobian[3][13] = 0.0; + rJacobian[3][14] = 0.0; + rJacobian[3][15] = 0.0; + rJacobian[3][16] = 0.0; + rJacobian[3][17] = 0.0; + rJacobian[3][18] = 0.0; + rJacobian[3][19] = 0.0; + rJacobian[3][20] = 0.0; + rJacobian[3][21] = 0.0; + rJacobian[3][22] = 0.0; + rJacobian[3][23] = 0.0; + rJacobian[3][24] = 0.0; + rJacobian[3][25] = 0.0; + rJacobian[4][0] = 0.0; + rJacobian[4][1] = 0.0; + rJacobian[4][2] = 0.0; + rJacobian[4][3] = -(mDt * (var_x20 * var_x47)); + rJacobian[4][4] = 1.0 - (mDt * (var_x47 * (-125 + var_x21 + 2 * var_x33 + (-65.313235986811122 * var_x61 - 0.00030330018395124703 * var_x48 + 0.0062374140367404624 * var_x22 / pow((8.3232249999999994e-8 + var_x32), 2) - 6237.4140367404616 * var_x49 * var_chaste_interface__calcium_concentration__Cai_converted + 1.4063880539705308e-37 * var_x52 * var_x62 * var_x64 * var_x65 * mParameters[11]) * mParameters[5] - 2000000 * var_x66 * var_chaste_interface__calcium_concentration__Cai_converted) + 1.3080000000000001e-7 * (0.125 * var_chaste_interface__calcium_concentration__Cass - 125 * var_chaste_interface__calcium_concentration__Cai_converted - var_x34 * var_x66 - 0.032656617993405558 * (0.00069999999999999999 * var_chaste_interface__cell__V - 0.0092875564766839377 * log(0.001 * var_x48 * mParameters[1]) + 95500 * var_x32 * var_x49 - 2 * var_x59 * var_x67) * mParameters[5] + ((var_x12) ? (3.0000000000000001e-5 * var_chaste_interface__calcium_concentration__CaNSR - 0.029999999999999999 * var_chaste_interface__calcium_concentration__Cai_converted) : (0.10000000000000001 * var_chaste_interface__calcium_concentration__CaNSR - 100 * var_chaste_interface__calcium_concentration__Cai_converted))) / (pow(var_x44, 3) * pow(var_x45, 2)))); + rJacobian[4][5] = -(mDt * (var_x47 * (0.125 - var_x34 * var_x40))); + rJacobian[4][6] = -(mDt * (-1000 * var_x32 * var_x43 * var_x46)); + rJacobian[4][7] = 0.0; + rJacobian[4][8] = 0.0; + rJacobian[4][9] = 0.0; + rJacobian[4][10] = 0.0; + rJacobian[4][11] = 0.0; + rJacobian[4][12] = 0.0; + rJacobian[4][13] = 0.0; + rJacobian[4][14] = 0.0; + rJacobian[4][15] = 0.0; + rJacobian[4][16] = 0.0; + rJacobian[4][17] = 0.0; + rJacobian[4][18] = 0.0; + rJacobian[4][19] = 0.0; + rJacobian[4][20] = 0.0; + rJacobian[4][21] = 0.0; + rJacobian[4][22] = 0.0; + rJacobian[4][23] = 0.0; + rJacobian[4][24] = 0.0; + rJacobian[4][25] = -(mDt * (var_x47 * (0.19593970796043336 * var_x72 + 1.4063880539705308e-37 * var_x70 * var_x71) * mParameters[5])); + rJacobian[5][0] = 0.0; + rJacobian[5][1] = -(mDt * (-var_x75 * var_x85 * var_x86)); + rJacobian[5][2] = -(mDt * (var_x13 * var_x87)); + rJacobian[5][3] = 0.0; + rJacobian[5][4] = -(mDt * (125000 * var_x75)); + rJacobian[5][5] = 1.0 - (mDt * (var_x75 * (-125 + 3.5000000000000004 * var_x16 - var_x86 * var_x88) + 0.030581039755351685 * (125000 * var_chaste_interface__calcium_concentration__Cai_converted + 3.5000000000000004 * var_x15 - 125 * var_chaste_interface__calcium_concentration__Cass - var_x86 * ((var_x81) ? (-var_x80 * var_chaste_interface__L_type_calcium_current__O) : (-var_x84 * var_chaste_interface__L_type_calcium_current__O))) / (pow(var_x73, 3) * pow((0.015290519877675841 + var_x74), 2)))); + rJacobian[5][6] = 0.0; + rJacobian[5][7] = -(mDt * (var_x17 * var_x87)); + rJacobian[5][8] = 0.0; + rJacobian[5][9] = 0.0; + rJacobian[5][10] = 0.0; + rJacobian[5][11] = 0.0; + rJacobian[5][12] = 0.0; + rJacobian[5][13] = 0.0; + rJacobian[5][14] = 0.0; + rJacobian[5][15] = 0.0; + rJacobian[5][16] = 0.0; + rJacobian[5][17] = 0.0; + rJacobian[5][18] = 0.0; + rJacobian[5][19] = 0.0; + rJacobian[5][20] = 0.0; + rJacobian[5][21] = 0.0; + rJacobian[5][22] = 0.0; + rJacobian[5][23] = -(mDt * (var_x89)); + rJacobian[5][24] = -(mDt * (var_x89)); + rJacobian[5][25] = 0.0; + rJacobian[6][0] = 0.0; + rJacobian[6][1] = 0.0; + rJacobian[6][2] = 0.0; + rJacobian[6][3] = 0.0; + rJacobian[6][4] = 0.0; + rJacobian[6][5] = -(mDt * (0.00175 * var_x27 * var_x38 + 8.7500000000000013e-5 * var_x37 * pow(var_x23, 2) / pow(var_x24, 3))); + rJacobian[6][6] = 1.0 - (mDt * (-0.00020000000000000001 - 0.0025000000000000005 * var_x25 * var_x27 + 0.0025000000000000005 * var_x23 * var_x25 * (1 - var_x26))); + rJacobian[6][7] = 0.0; + rJacobian[6][8] = 0.0; + rJacobian[6][9] = 0.0; + rJacobian[6][10] = 0.0; + rJacobian[6][11] = 0.0; + rJacobian[6][12] = 0.0; + rJacobian[6][13] = 0.0; + rJacobian[6][14] = 0.0; + rJacobian[6][15] = 0.0; + rJacobian[6][16] = 0.0; + rJacobian[6][17] = 0.0; + rJacobian[6][18] = 0.0; + rJacobian[6][19] = 0.0; + rJacobian[6][20] = 0.0; + rJacobian[6][21] = 0.0; + rJacobian[6][22] = 0.0; + rJacobian[6][23] = 0.0; + rJacobian[6][24] = 0.0; + rJacobian[6][25] = 0.0; + rJacobian[7][0] = 0.0; + rJacobian[7][1] = -(mDt * (-var_x85 * var_x90)); + rJacobian[7][2] = 0.0; + rJacobian[7][3] = 0.0; + rJacobian[7][4] = 0.0; + rJacobian[7][5] = -(mDt * (-var_x88 * var_x90)); + rJacobian[7][6] = 0.0; + rJacobian[7][7] = 1.0 - (mDt * (-0.01)); + rJacobian[7][8] = 0.0; + rJacobian[7][9] = 0.0; + rJacobian[7][10] = 0.0; + rJacobian[7][11] = 0.0; + rJacobian[7][12] = 0.0; + rJacobian[7][13] = 0.0; + rJacobian[7][14] = 0.0; + rJacobian[7][15] = 0.0; + rJacobian[7][16] = 0.0; + rJacobian[7][17] = 0.0; + rJacobian[7][18] = 0.0; + rJacobian[7][19] = 0.0; + rJacobian[7][20] = 0.0; + rJacobian[7][21] = 0.0; + rJacobian[7][22] = 0.0; + rJacobian[7][23] = 0.0; + rJacobian[7][24] = 0.0; + rJacobian[7][25] = 0.0; + rJacobian[8][0] = 0.0; + rJacobian[8][1] = 0.0; + rJacobian[8][2] = 0.0; + rJacobian[8][3] = 0.0; + rJacobian[8][4] = 0.0; + rJacobian[8][5] = 0.0; + rJacobian[8][6] = 0.0; + rJacobian[8][7] = 0.0; + rJacobian[8][8] = 1.0 - (mDt * (-var_x92 - var_x95 - var_x96)); + rJacobian[8][9] = -(mDt * (var_x97)); + rJacobian[8][10] = 0.0; + rJacobian[8][11] = 0.0; + rJacobian[8][12] = 0.0; + rJacobian[8][13] = 0.0; + rJacobian[8][14] = -(mDt * (var_x99)); + rJacobian[8][15] = -(mDt * (var_x101)); + rJacobian[8][16] = 0.0; + rJacobian[8][17] = 0.0; + rJacobian[8][18] = 0.0; + rJacobian[8][19] = 0.0; + rJacobian[8][20] = 0.0; + rJacobian[8][21] = 0.0; + rJacobian[8][22] = 0.0; + rJacobian[8][23] = 0.0; + rJacobian[8][24] = 0.0; + rJacobian[8][25] = 0.0; + rJacobian[9][0] = 0.0; + rJacobian[9][1] = 0.0; + rJacobian[9][2] = 0.0; + rJacobian[9][3] = 0.0; + rJacobian[9][4] = 0.0; + rJacobian[9][5] = 0.0; + rJacobian[9][6] = 0.0; + rJacobian[9][7] = 0.0; + rJacobian[9][8] = -(mDt * (var_x103 + var_x92)); + rJacobian[9][9] = 1.0 - (mDt * (-var_x105 - var_x106)); + rJacobian[9][10] = -(mDt * (var_x103)); + rJacobian[9][11] = -(mDt * (var_x103)); + rJacobian[9][12] = -(mDt * (var_x103 + var_x99)); + rJacobian[9][13] = -(mDt * (var_x103)); + rJacobian[9][14] = -(mDt * (var_x103)); + rJacobian[9][15] = -(mDt * (var_x103)); + rJacobian[9][16] = 0.0; + rJacobian[9][17] = 0.0; + rJacobian[9][18] = 0.0; + rJacobian[9][19] = 0.0; + rJacobian[9][20] = 0.0; + rJacobian[9][21] = 0.0; + rJacobian[9][22] = 0.0; + rJacobian[9][23] = 0.0; + rJacobian[9][24] = 0.0; + rJacobian[9][25] = 0.0; + rJacobian[10][0] = 0.0; + rJacobian[10][1] = 0.0; + rJacobian[10][2] = 0.0; + rJacobian[10][3] = 0.0; + rJacobian[10][4] = 0.0; + rJacobian[10][5] = 0.0; + rJacobian[10][6] = 0.0; + rJacobian[10][7] = 0.0; + rJacobian[10][8] = 0.0; + rJacobian[10][9] = 0.0; + rJacobian[10][10] = 1.0 - (mDt * (-var_x108 - var_x99)); + rJacobian[10][11] = -(mDt * (var_x109)); + rJacobian[10][12] = 0.0; + rJacobian[10][13] = 0.0; + rJacobian[10][14] = -(mDt * (var_x110)); + rJacobian[10][15] = 0.0; + rJacobian[10][16] = 0.0; + rJacobian[10][17] = 0.0; + rJacobian[10][18] = 0.0; + rJacobian[10][19] = 0.0; + rJacobian[10][20] = 0.0; + rJacobian[10][21] = 0.0; + rJacobian[10][22] = 0.0; + rJacobian[10][23] = 0.0; + rJacobian[10][24] = 0.0; + rJacobian[10][25] = 0.0; + rJacobian[11][0] = 0.0; + rJacobian[11][1] = 0.0; + rJacobian[11][2] = 0.0; + rJacobian[11][3] = 0.0; + rJacobian[11][4] = 0.0; + rJacobian[11][5] = 0.0; + rJacobian[11][6] = 0.0; + rJacobian[11][7] = 0.0; + rJacobian[11][8] = 0.0; + rJacobian[11][9] = 0.0; + rJacobian[11][10] = -(mDt * (var_x108)); + rJacobian[11][11] = 1.0 - (mDt * (-var_x109)); + rJacobian[11][12] = 0.0; + rJacobian[11][13] = 0.0; + rJacobian[11][14] = 0.0; + rJacobian[11][15] = 0.0; + rJacobian[11][16] = 0.0; + rJacobian[11][17] = 0.0; + rJacobian[11][18] = 0.0; + rJacobian[11][19] = 0.0; + rJacobian[11][20] = 0.0; + rJacobian[11][21] = 0.0; + rJacobian[11][22] = 0.0; + rJacobian[11][23] = 0.0; + rJacobian[11][24] = 0.0; + rJacobian[11][25] = 0.0; + rJacobian[12][0] = 0.0; + rJacobian[12][1] = 0.0; + rJacobian[12][2] = 0.0; + rJacobian[12][3] = 0.0; + rJacobian[12][4] = 0.0; + rJacobian[12][5] = 0.0; + rJacobian[12][6] = 0.0; + rJacobian[12][7] = 0.0; + rJacobian[12][8] = 0.0; + rJacobian[12][9] = -(mDt * (var_x96)); + rJacobian[12][10] = 0.0; + rJacobian[12][11] = 0.0; + rJacobian[12][12] = 1.0 - (mDt * (-var_x105 - var_x99)); + rJacobian[12][13] = -(mDt * (var_x102)); + rJacobian[12][14] = -(mDt * (var_x92)); + rJacobian[12][15] = 0.0; + rJacobian[12][16] = 0.0; + rJacobian[12][17] = 0.0; + rJacobian[12][18] = 0.0; + rJacobian[12][19] = 0.0; + rJacobian[12][20] = 0.0; + rJacobian[12][21] = 0.0; + rJacobian[12][22] = 0.0; + rJacobian[12][23] = 0.0; + rJacobian[12][24] = 0.0; + rJacobian[12][25] = 0.0; + rJacobian[13][0] = 0.0; + rJacobian[13][1] = 0.0; + rJacobian[13][2] = 0.0; + rJacobian[13][3] = 0.0; + rJacobian[13][4] = 0.0; + rJacobian[13][5] = 0.0; + rJacobian[13][6] = 0.0; + rJacobian[13][7] = 0.0; + rJacobian[13][8] = -(mDt * (var_x111)); + rJacobian[13][9] = -(mDt * (var_x111)); + rJacobian[13][10] = -(mDt * (var_x111)); + rJacobian[13][11] = -(mDt * (var_x111)); + rJacobian[13][12] = -(mDt * (var_x104 - var_x96)); + rJacobian[13][13] = 1.0 - (mDt * (-var_x106 - var_x99)); + rJacobian[13][14] = -(mDt * (var_x111)); + rJacobian[13][15] = -(mDt * (var_x111)); + rJacobian[13][16] = 0.0; + rJacobian[13][17] = 0.0; + rJacobian[13][18] = 0.0; + rJacobian[13][19] = 0.0; + rJacobian[13][20] = 0.0; + rJacobian[13][21] = 0.0; + rJacobian[13][22] = 0.0; + rJacobian[13][23] = 0.0; + rJacobian[13][24] = 0.0; + rJacobian[13][25] = 0.0; + rJacobian[14][0] = 0.0; + rJacobian[14][1] = 0.0; + rJacobian[14][2] = 0.0; + rJacobian[14][3] = 0.0; + rJacobian[14][4] = 0.0; + rJacobian[14][5] = 0.0; + rJacobian[14][6] = 0.0; + rJacobian[14][7] = 0.0; + rJacobian[14][8] = -(mDt * (var_x96)); + rJacobian[14][9] = 0.0; + rJacobian[14][10] = -(mDt * (var_x99)); + rJacobian[14][11] = 0.0; + rJacobian[14][12] = -(mDt * (var_x97)); + rJacobian[14][13] = 0.0; + rJacobian[14][14] = 1.0 - (mDt * (-var_x110 - var_x112 - var_x92 - var_x99)); + rJacobian[14][15] = -(mDt * (var_x113)); + rJacobian[14][16] = 0.0; + rJacobian[14][17] = 0.0; + rJacobian[14][18] = 0.0; + rJacobian[14][19] = 0.0; + rJacobian[14][20] = 0.0; + rJacobian[14][21] = 0.0; + rJacobian[14][22] = 0.0; + rJacobian[14][23] = 0.0; + rJacobian[14][24] = 0.0; + rJacobian[14][25] = 0.0; + rJacobian[15][0] = 0.0; + rJacobian[15][1] = 0.0; + rJacobian[15][2] = 0.0; + rJacobian[15][3] = 0.0; + rJacobian[15][4] = 0.0; + rJacobian[15][5] = 0.0; + rJacobian[15][6] = 0.0; + rJacobian[15][7] = 0.0; + rJacobian[15][8] = -(mDt * (var_x95)); + rJacobian[15][9] = 0.0; + rJacobian[15][10] = 0.0; + rJacobian[15][11] = 0.0; + rJacobian[15][12] = 0.0; + rJacobian[15][13] = 0.0; + rJacobian[15][14] = -(mDt * (var_x112)); + rJacobian[15][15] = 1.0 - (mDt * (-var_x101 - var_x113)); + rJacobian[15][16] = 0.0; + rJacobian[15][17] = 0.0; + rJacobian[15][18] = 0.0; + rJacobian[15][19] = 0.0; + rJacobian[15][20] = 0.0; + rJacobian[15][21] = 0.0; + rJacobian[15][22] = 0.0; + rJacobian[15][23] = 0.0; + rJacobian[15][24] = 0.0; + rJacobian[15][25] = 0.0; + rJacobian[16][0] = 0.0; + rJacobian[16][1] = 0.0; + rJacobian[16][2] = 0.0; + rJacobian[16][3] = 0.0; + rJacobian[16][4] = 0.0; + rJacobian[16][5] = 0.0; + rJacobian[16][6] = 0.0; + rJacobian[16][7] = 0.0; + rJacobian[16][8] = 0.0; + rJacobian[16][9] = 0.0; + rJacobian[16][10] = 0.0; + rJacobian[16][11] = 0.0; + rJacobian[16][12] = 0.0; + rJacobian[16][13] = 0.0; + rJacobian[16][14] = 0.0; + rJacobian[16][15] = 0.0; + rJacobian[16][16] = 1.0; + rJacobian[16][17] = 0.0; + rJacobian[16][18] = 0.0; + rJacobian[16][19] = 0.0; + rJacobian[16][20] = 0.0; + rJacobian[16][21] = 0.0; + rJacobian[16][22] = 0.0; + rJacobian[16][23] = 0.0; + rJacobian[16][24] = 0.0; + rJacobian[16][25] = 0.0; + rJacobian[17][0] = 0.0; + rJacobian[17][1] = 0.0; + rJacobian[17][2] = 0.0; + rJacobian[17][3] = 0.0; + rJacobian[17][4] = 0.0; + rJacobian[17][5] = 0.0; + rJacobian[17][6] = 0.0; + rJacobian[17][7] = 0.0; + rJacobian[17][8] = 0.0; + rJacobian[17][9] = 0.0; + rJacobian[17][10] = 0.0; + rJacobian[17][11] = 0.0; + rJacobian[17][12] = 0.0; + rJacobian[17][13] = 0.0; + rJacobian[17][14] = 0.0; + rJacobian[17][15] = 0.0; + rJacobian[17][16] = -(mDt * (-var_x117 * var_x118 * var_x119)); + rJacobian[17][17] = 1.0 - (mDt * ((-1.7331439082928402 * var_x121 - var_x119 * var_x122 * var_chaste_interface__non_inactivating_steady_state_K_I__iKss - var_x122 * pow(var_chaste_interface__slow_delayed_rectifier_K_I__nKs, 2) * mParameters[10] - 0.43328597707321004 * var_x114 * var_chaste_interface__ultra_rapidly_activating_delayed_rectifier_K_I__aur * var_chaste_interface__ultra_rapidly_activating_delayed_rectifier_K_I__iur - 0.92671204776418159 * var_x114 * pow(var_chaste_interface__fast_transient_outward_K_I__ato_f, 3) * var_chaste_interface__fast_transient_outward_K_I__ito_f - 1.7331439082928402 * var_x115 * var_x125 * mParameters[7] / var_x124 + 0.15528969418303848 * var_x114 * var_x117 * var_x123 * var_x125 * mParameters[2] * mParameters[7] / pow(var_x124, 2)) * mParameters[5])); + rJacobian[17][18] = 0.0; + rJacobian[17][19] = 0.0; + rJacobian[17][20] = 0.0; + rJacobian[17][21] = -(mDt * (var_x118 * (-var_chaste_interface__cell__V + 26.535875647668394 * log(var_x120 * (mParameters[2] + 0.020408163265306124 * mParameters[3]))) * mParameters[9])); + rJacobian[17][22] = 0.0; + rJacobian[17][23] = 0.0; + rJacobian[17][24] = 0.0; + rJacobian[17][25] = -(mDt * ((5.8007500451501034e-11 * var_x128 - 0.035370283842711021 * var_x121) * mParameters[5])); + rJacobian[18][0] = 0.0; + rJacobian[18][1] = 0.0; + rJacobian[18][2] = 0.0; + rJacobian[18][3] = 0.0; + rJacobian[18][4] = 0.0; + rJacobian[18][5] = 0.0; + rJacobian[18][6] = 0.0; + rJacobian[18][7] = 0.0; + rJacobian[18][8] = 0.0; + rJacobian[18][9] = 0.0; + rJacobian[18][10] = 0.0; + rJacobian[18][11] = 0.0; + rJacobian[18][12] = 0.0; + rJacobian[18][13] = 0.0; + rJacobian[18][14] = 0.0; + rJacobian[18][15] = 0.0; + rJacobian[18][16] = 0.0; + rJacobian[18][17] = 0.0; + rJacobian[18][18] = 1.0 - (mDt * (-0.023761000000000001 - var_x129 - 0.047002000000000002 * exp(-0.063100000000000003 * var_chaste_interface__cell__V))); + rJacobian[18][19] = -(mDt * (0.036777999999999998 - var_x129)); + rJacobian[18][20] = -(mDt * (var_x130)); + rJacobian[18][21] = -(mDt * (var_x130)); + rJacobian[18][22] = 0.0; + rJacobian[18][23] = 0.0; + rJacobian[18][24] = 0.0; + rJacobian[18][25] = 0.0; + rJacobian[19][0] = 0.0; + rJacobian[19][1] = 0.0; + rJacobian[19][2] = 0.0; + rJacobian[19][3] = 0.0; + rJacobian[19][4] = 0.0; + rJacobian[19][5] = 0.0; + rJacobian[19][6] = 0.0; + rJacobian[19][7] = 0.0; + rJacobian[19][8] = 0.0; + rJacobian[19][9] = 0.0; + rJacobian[19][10] = 0.0; + rJacobian[19][11] = 0.0; + rJacobian[19][12] = 0.0; + rJacobian[19][13] = 0.0; + rJacobian[19][14] = 0.0; + rJacobian[19][15] = 0.0; + rJacobian[19][16] = 0.0; + rJacobian[19][17] = 0.0; + rJacobian[19][18] = -(mDt * (0.023761000000000001)); + rJacobian[19][19] = 1.0 - (mDt * (-0.036777999999999998 - var_x131)); + rJacobian[19][20] = 0.0; + rJacobian[19][21] = -(mDt * (var_x132)); + rJacobian[19][22] = 0.0; + rJacobian[19][23] = 0.0; + rJacobian[19][24] = 0.0; + rJacobian[19][25] = 0.0; + rJacobian[20][0] = 0.0; + rJacobian[20][1] = 0.0; + rJacobian[20][2] = 0.0; + rJacobian[20][3] = 0.0; + rJacobian[20][4] = 0.0; + rJacobian[20][5] = 0.0; + rJacobian[20][6] = 0.0; + rJacobian[20][7] = 0.0; + rJacobian[20][8] = 0.0; + rJacobian[20][9] = 0.0; + rJacobian[20][10] = 0.0; + rJacobian[20][11] = 0.0; + rJacobian[20][12] = 0.0; + rJacobian[20][13] = 0.0; + rJacobian[20][14] = 0.0; + rJacobian[20][15] = 0.0; + rJacobian[20][16] = 0.0; + rJacobian[20][17] = 0.0; + rJacobian[20][18] = 0.0; + rJacobian[20][19] = 0.0; + rJacobian[20][20] = 1.0 - (mDt * (-var_x133)); + rJacobian[20][21] = -(mDt * (var_x134)); + rJacobian[20][22] = 0.0; + rJacobian[20][23] = 0.0; + rJacobian[20][24] = 0.0; + rJacobian[20][25] = 0.0; + rJacobian[21][0] = 0.0; + rJacobian[21][1] = 0.0; + rJacobian[21][2] = 0.0; + rJacobian[21][3] = 0.0; + rJacobian[21][4] = 0.0; + rJacobian[21][5] = 0.0; + rJacobian[21][6] = 0.0; + rJacobian[21][7] = 0.0; + rJacobian[21][8] = 0.0; + rJacobian[21][9] = 0.0; + rJacobian[21][10] = 0.0; + rJacobian[21][11] = 0.0; + rJacobian[21][12] = 0.0; + rJacobian[21][13] = 0.0; + rJacobian[21][14] = 0.0; + rJacobian[21][15] = 0.0; + rJacobian[21][16] = 0.0; + rJacobian[21][17] = 0.0; + rJacobian[21][18] = 0.0; + rJacobian[21][19] = -(mDt * (var_x131)); + rJacobian[21][20] = -(mDt * (var_x133)); + rJacobian[21][21] = 1.0 - (mDt * (-var_x132 - var_x134)); + rJacobian[21][22] = 0.0; + rJacobian[21][23] = 0.0; + rJacobian[21][24] = 0.0; + rJacobian[21][25] = 0.0; + rJacobian[22][0] = 0.0; + rJacobian[22][1] = 0.0; + rJacobian[22][2] = 0.0; + rJacobian[22][3] = 0.0; + rJacobian[22][4] = 0.0; + rJacobian[22][5] = 0.0; + rJacobian[22][6] = 0.0; + rJacobian[22][7] = 0.0; + rJacobian[22][8] = 0.0; + rJacobian[22][9] = 0.0; + rJacobian[22][10] = 0.0; + rJacobian[22][11] = 0.0; + rJacobian[22][12] = 0.0; + rJacobian[22][13] = 0.0; + rJacobian[22][14] = 0.0; + rJacobian[22][15] = 0.0; + rJacobian[22][16] = 0.0; + rJacobian[22][17] = 0.0; + rJacobian[22][18] = 0.0; + rJacobian[22][19] = 0.0; + rJacobian[22][20] = 0.0; + rJacobian[22][21] = 0.0; + rJacobian[22][22] = 1.0 - (mDt * (-0.00080000000000000004)); + rJacobian[22][23] = -(mDt * (0.0089999999999999993)); + rJacobian[22][24] = 0.0; + rJacobian[22][25] = 0.0; + rJacobian[23][0] = 0.0; + rJacobian[23][1] = 0.0; + rJacobian[23][2] = 0.0; + rJacobian[23][3] = 0.0; + rJacobian[23][4] = 0.0; + rJacobian[23][5] = -(mDt * (-var_x135 + 0.024299999999999999 * var_x136 * (1 - var_x9 - var_chaste_interface__ryanodine_receptors__P_C2))); + rJacobian[23][6] = 0.0; + rJacobian[23][7] = 0.0; + rJacobian[23][8] = 0.0; + rJacobian[23][9] = 0.0; + rJacobian[23][10] = 0.0; + rJacobian[23][11] = 0.0; + rJacobian[23][12] = 0.0; + rJacobian[23][13] = 0.0; + rJacobian[23][14] = 0.0; + rJacobian[23][15] = 0.0; + rJacobian[23][16] = 0.0; + rJacobian[23][17] = 0.0; + rJacobian[23][18] = 0.0; + rJacobian[23][19] = 0.0; + rJacobian[23][20] = 0.0; + rJacobian[23][21] = 0.0; + rJacobian[23][22] = -(mDt * (0.00080000000000000004 - var_x137)); + rJacobian[23][23] = 1.0 - (mDt * (-0.080249999999999988 - var_x137 - var_x138)); + rJacobian[23][24] = -(mDt * (0.96499999999999997 - var_x137)); + rJacobian[23][25] = 0.0; + rJacobian[24][0] = 0.0; + rJacobian[24][1] = 0.0; + rJacobian[24][2] = 0.0; + rJacobian[24][3] = 0.0; + rJacobian[24][4] = 0.0; + rJacobian[24][5] = -(mDt * (var_x135)); + rJacobian[24][6] = 0.0; + rJacobian[24][7] = 0.0; + rJacobian[24][8] = 0.0; + rJacobian[24][9] = 0.0; + rJacobian[24][10] = 0.0; + rJacobian[24][11] = 0.0; + rJacobian[24][12] = 0.0; + rJacobian[24][13] = 0.0; + rJacobian[24][14] = 0.0; + rJacobian[24][15] = 0.0; + rJacobian[24][16] = 0.0; + rJacobian[24][17] = 0.0; + rJacobian[24][18] = 0.0; + rJacobian[24][19] = 0.0; + rJacobian[24][20] = 0.0; + rJacobian[24][21] = 0.0; + rJacobian[24][22] = 0.0; + rJacobian[24][23] = -(mDt * (var_x138)); + rJacobian[24][24] = 1.0 - (mDt * (-0.96499999999999997)); + rJacobian[24][25] = 0.0; + rJacobian[25][0] = 0.0; + rJacobian[25][1] = 0.0; + rJacobian[25][2] = 0.0; + rJacobian[25][3] = 0.0; + rJacobian[25][4] = -(mDt * ((195.93970796043337 * var_x61 - var_x139 * var_x65) * mParameters[5])); + rJacobian[25][5] = 0.0; + rJacobian[25][6] = 0.0; + rJacobian[25][7] = 0.0; + rJacobian[25][8] = 0.0; + rJacobian[25][9] = 0.0; + rJacobian[25][10] = 0.0; + rJacobian[25][11] = 0.0; + rJacobian[25][12] = 0.0; + rJacobian[25][13] = 0.0; + rJacobian[25][14] = 0.0; + rJacobian[25][15] = -(mDt * (var_x118 * (-var_chaste_interface__cell__V + 26.535875647668394 * log(var_x140 * (mParameters[3] + 0.1111111111111111 * mParameters[2]))) * mParameters[6])); + rJacobian[25][16] = 0.0; + rJacobian[25][17] = -(mDt * ((-0.0005006860179512649 * var_x140 - 0.19257154536587112 * var_x141) * mParameters[5])); + rJacobian[25][18] = 0.0; + rJacobian[25][19] = 0.0; + rJacobian[25][20] = 0.0; + rJacobian[25][21] = 0.0; + rJacobian[25][22] = 0.0; + rJacobian[25][23] = 0.0; + rJacobian[25][24] = 0.0; + rJacobian[25][25] = 1.0 - (mDt * ((-1.7331439082928402 * var_x141 - 0.004506174161561384 * var_x140 - 0.58781912388130009 * var_x72 - 8.7011250677251544e-11 * var_x128 - var_x139 * var_x70) * mParameters[5])); + } + + void Cellli_mouse_2010FromCellMLBackwardEuler::UpdateTransmembranePotential(double var_chaste_interface__environment__time) + { + // Time units: millisecond + std::vector& rY = rGetStateVariables(); + double var_chaste_interface__cell__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -78.9452115785979 + double var_chaste_interface__calcium_concentration__Cai_converted = rY[1]; + // Units: millimolar; Initial value: 9.499150681398009e-05 + double var_chaste_interface__calcium_concentration__Cass = rY[2]; + // Units: micromolar; Initial value: 0.0954184301907784 + double var_chaste_interface__L_type_calcium_current__O = rY[10]; + // Units: dimensionless; Initial value: 1.23713515513533e-06 + double var_chaste_interface__L_type_calcium_current__y_gate = rY[12]; + // Units: dimensionless; Initial value: 0.845044436980163 + double var_chaste_interface__sodium_concentration__Nai = rY[13]; + // Units: micromolar; Initial value: 12364.7482121793 + double var_chaste_interface__fast_sodium_current__O_Na = rY[14]; + // Units: dimensionless; Initial value: 1.46826771436314e-06 + double var_chaste_interface__potassium_concentration__Ki = rY[22]; + // Units: micromolar; Initial value: 115599.50642567 + double var_chaste_interface__ultra_rapidly_activating_delayed_rectifier_K_I__aur = rY[23]; + // Units: dimensionless; Initial value: 0.00346258606821817 + double var_chaste_interface__ultra_rapidly_activating_delayed_rectifier_K_I__iur = rY[24]; + // Units: dimensionless; Initial value: 0.955684946168062 + double var_chaste_interface__non_inactivating_steady_state_K_I__aKss = rY[25]; + // Units: dimensionless; Initial value: 0.287585636847048 + double var_chaste_interface__non_inactivating_steady_state_K_I__iKss = rY[26]; + // Units: dimensionless; Initial value: 1.0 + double var_chaste_interface__rapid_delayed_rectifier_K_I__O_K = rY[27]; + // Units: dimensionless; Initial value: 0.0131742086125972 + double var_chaste_interface__slow_delayed_rectifier_K_I__nKs = rY[31]; + // Units: dimensionless; Initial value: 0.00336735013094628 + double var_chaste_interface__fast_transient_outward_K_I__ato_f = rY[32]; + // Units: dimensionless; Initial value: 0.0142335908879204 + double var_chaste_interface__fast_transient_outward_K_I__ito_f = rY[33]; + // Units: dimensionless; Initial value: 0.996989882138174 + double var_chaste_interface__slow_transient_outward_K_I__ato_s = rY[34]; + // Units: dimensionless; Initial value: 0.0443263407760382 + double var_chaste_interface__slow_transient_outward_K_I__ito_s = rY[35]; + // Units: dimensionless; Initial value: 0.887568880831388 + + const double var_calcium_activated_chloride_current__E_Cl = -40; // millivolt + const double var_calcium_activated_chloride_current__Km_Cl = 10; // micromolar + const double var_calcium_activated_chloride_current__g_ClCa = 10; // milliS_per_microF + const double var_calcium_background_current__g_Cab = 0.00069999999999999999; // milliS_per_microF + const double var_calcium_concentration__Cai = 1000 * var_chaste_interface__calcium_concentration__Cai_converted; // micromolar + const double var_calcium_pump_current__Km_pCa = 0.28849999999999998; // micromolar + const double var_calcium_pump_current__i_pCa_max = 0.095500000000000002; // picoA_per_picoF + const double var_calcium_pump_current__i_pCa = pow(var_calcium_concentration__Cai, 2) * var_calcium_pump_current__i_pCa_max / (pow(var_calcium_concentration__Cai, 2) + pow(var_calcium_pump_current__Km_pCa, 2)); // picoA_per_picoF + const double var_cell__Acap = 0.00013866; // cm2 + const double var_cell__F = 96.5; // coulomb_per_millimole + const double var_cell__R = 8.3140000000000001; // joule_per_mole_kelvin + const double var_cell__T = 308; // kelvin + const double var_calcium_background_current__E_CaN = 0.5 * var_cell__R * var_cell__T * log(mParameters[1] / var_calcium_concentration__Cai) / var_cell__F; // millivolt + const double var_L_type_calcium_current__FVRT = var_cell__F * var_chaste_interface__cell__V / (var_cell__R * var_cell__T); // dimensionless + const double var_L_type_calcium_current__FVRT_Ca = 2 * var_L_type_calcium_current__FVRT; // dimensionless + const double var_calcium_activated_chloride_current__O_ClCa = 0.20000000000000001 / (1 + exp(5.9871794871794881 - 0.12820512820512822 * var_chaste_interface__cell__V)); // dimensionless + const double var_calcium_activated_chloride_current__i_ClCa = (-var_calcium_activated_chloride_current__E_Cl + var_chaste_interface__cell__V) * var_calcium_activated_chloride_current__O_ClCa * var_calcium_activated_chloride_current__g_ClCa * var_calcium_concentration__Cai / (var_calcium_activated_chloride_current__Km_Cl + var_calcium_concentration__Cai); // picoA_per_picoF + const double var_calcium_background_current__i_Cab = (-var_calcium_background_current__E_CaN + var_chaste_interface__cell__V) * var_calcium_background_current__g_Cab; // picoA_per_picoF + const double var_cell__Vss = 2.1999999999999998e-8; // microlitre + const double var_L_type_calcium_current__i_CaL = ((fabs(var_L_type_calcium_current__FVRT_Ca) > 1.0000000000000001e-5) ? (-2 * (-var_chaste_interface__calcium_concentration__Cass + mParameters[1] * exp(-var_L_type_calcium_current__FVRT_Ca)) * var_L_type_calcium_current__FVRT_Ca * var_chaste_interface__L_type_calcium_current__O * mParameters[4] * var_chaste_interface__L_type_calcium_current__y_gate * var_cell__F * var_cell__Vss / ((1 - exp(-var_L_type_calcium_current__FVRT_Ca)) * var_cell__Acap * mParameters[5])) : (-2.0000000000000002e-5 * (-var_chaste_interface__calcium_concentration__Cass + mParameters[1] * exp(-1.0000000000000001e-5)) * var_chaste_interface__L_type_calcium_current__O * mParameters[4] * var_chaste_interface__L_type_calcium_current__y_gate * var_cell__F * var_cell__Vss / ((1 - exp(-1.0000000000000001e-5)) * var_cell__Acap * mParameters[5]))); // picoA_per_picoF + const double var_cell__i_Stim_converted = GetIntracellularAreaStimulus(var_chaste_interface__environment__time); // uA_per_cm2 + const double var_cell__i_Stim = var_cell__i_Stim_converted / HeartConfig::Instance()->GetCapacitance(); // picoA_per_picoF + const double var_fast_transient_outward_K_I__g_Kto_f = 0.53469999999999995; // milliS_per_microF + const double var_fast_transient_outward_K_I__E_K = var_cell__R * var_cell__T * log(mParameters[2] / var_chaste_interface__potassium_concentration__Ki) / var_cell__F; // millivolt + const double var_fast_transient_outward_K_I__i_Kto_f = pow(var_chaste_interface__fast_transient_outward_K_I__ato_f, 3) * (-var_fast_transient_outward_K_I__E_K + var_chaste_interface__cell__V) * var_fast_transient_outward_K_I__g_Kto_f * var_chaste_interface__fast_transient_outward_K_I__ito_f; // picoA_per_picoF + const double var_non_inactivating_steady_state_K_I__i_Kss = (-var_fast_transient_outward_K_I__E_K + var_chaste_interface__cell__V) * var_chaste_interface__non_inactivating_steady_state_K_I__aKss * mParameters[8] * var_chaste_interface__non_inactivating_steady_state_K_I__iKss; // picoA_per_picoF + const double var_slow_delayed_rectifier_K_I__i_Ks = pow(var_chaste_interface__slow_delayed_rectifier_K_I__nKs, 2) * (-var_fast_transient_outward_K_I__E_K + var_chaste_interface__cell__V) * mParameters[10]; // picoA_per_picoF + const double var_slow_transient_outward_K_I__g_Kto_s = 0; // milliS_per_microF + const double var_slow_transient_outward_K_I__i_Kto_s = (-var_fast_transient_outward_K_I__E_K + var_chaste_interface__cell__V) * var_chaste_interface__slow_transient_outward_K_I__ato_s * var_slow_transient_outward_K_I__g_Kto_s * var_chaste_interface__slow_transient_outward_K_I__ito_s; // picoA_per_picoF + const double var_sodium_background_current__g_Nab = 0.0025999999999999999; // milliS_per_microF + const double var_sodium_calcium_exchange_current__K_mAllo = 0; // micromolar + const double var_sodium_calcium_exchange_current__K_mCai = 3.6000000000000001; // micromolar + const double var_sodium_calcium_exchange_current__K_mCao = 1400; // micromolar + const double var_sodium_calcium_exchange_current__K_mNai = 12000; // micromolar + const double var_sodium_calcium_exchange_current__K_mNao = 88000; // micromolar + const double var_sodium_calcium_exchange_current__eta = 0.34999999999999998; // dimensionless + const double var_sodium_calcium_exchange_current__k_sat = 0.27000000000000002; // dimensionless + const double var_fast_sodium_current__E_Na = var_cell__R * var_cell__T * log((mParameters[3] + 0.1111111111111111 * mParameters[2]) / (var_chaste_interface__sodium_concentration__Nai + 0.1111111111111111 * var_chaste_interface__potassium_concentration__Ki)) / var_cell__F; // millivolt + const double var_fast_sodium_current__i_Na = (-var_fast_sodium_current__E_Na + var_chaste_interface__cell__V) * var_chaste_interface__fast_sodium_current__O_Na * mParameters[6]; // picoA_per_picoF + const double var_rapid_delayed_rectifier_K_I__i_Kr = (-var_cell__R * var_cell__T * log((mParameters[2] + 0.020408163265306124 * mParameters[3]) / (var_chaste_interface__potassium_concentration__Ki + 0.020408163265306124 * var_chaste_interface__sodium_concentration__Nai)) / var_cell__F + var_chaste_interface__cell__V) * var_chaste_interface__rapid_delayed_rectifier_K_I__O_K * mParameters[9]; // picoA_per_picoF + const double var_sodium_background_current__i_Nab = (-var_fast_sodium_current__E_Na + var_chaste_interface__cell__V) * var_sodium_background_current__g_Nab; // picoA_per_picoF + const double var_sodium_calcium_exchange_current__i_NCX = (pow(var_chaste_interface__sodium_concentration__Nai, 3) * mParameters[1] * exp(var_cell__F * var_chaste_interface__cell__V * var_sodium_calcium_exchange_current__eta / (var_cell__R * var_cell__T)) - pow(mParameters[3], 3) * var_calcium_concentration__Cai * exp((-1 + var_sodium_calcium_exchange_current__eta) * var_cell__F * var_chaste_interface__cell__V / (var_cell__R * var_cell__T))) * mParameters[11] / ((1 + pow(var_sodium_calcium_exchange_current__K_mAllo, 2) / pow(var_calcium_concentration__Cai, 2)) * (1 + var_sodium_calcium_exchange_current__k_sat * exp((-1 + var_sodium_calcium_exchange_current__eta) * var_cell__F * var_chaste_interface__cell__V / (var_cell__R * var_cell__T))) * (pow(mParameters[3], 3) * var_calcium_concentration__Cai + pow(var_sodium_calcium_exchange_current__K_mNao, 3) * var_calcium_concentration__Cai + pow(var_chaste_interface__sodium_concentration__Nai, 3) * mParameters[1] + pow(var_chaste_interface__sodium_concentration__Nai, 3) * var_sodium_calcium_exchange_current__K_mCao + pow(mParameters[3], 3) * (1 + pow(var_chaste_interface__sodium_concentration__Nai, 3) / pow(var_sodium_calcium_exchange_current__K_mNai, 3)) * var_sodium_calcium_exchange_current__K_mCai + pow(var_sodium_calcium_exchange_current__K_mNai, 3) * (1 + var_calcium_concentration__Cai / var_sodium_calcium_exchange_current__K_mCai) * mParameters[1])); // picoA_per_picoF + const double var_sodium_potassium_pump_current__Km_Ko = 1500; // micromolar + const double var_sodium_potassium_pump_current__Km_Nai = 16600; // micromolar + const double var_sodium_potassium_pump_current__i_NaK_max = 2.4860000000000002; // picoA_per_picoF + const double var_sodium_potassium_pump_current__sigma = -0.14285714285714285 + 0.14285714285714285 * exp(1.4858841010401188e-5 * mParameters[3]); // dimensionless + const double var_sodium_potassium_pump_current__f_NaK = 1 / (1 + 0.1245 * exp(-0.10000000000000001 * var_cell__F * var_chaste_interface__cell__V / (var_cell__R * var_cell__T)) + 0.036499999999999998 * var_sodium_potassium_pump_current__sigma * exp(-var_cell__F * var_chaste_interface__cell__V / (var_cell__R * var_cell__T))); // dimensionless + const double var_sodium_potassium_pump_current__i_NaK = mParameters[2] * var_sodium_potassium_pump_current__f_NaK * var_sodium_potassium_pump_current__i_NaK_max / ((1 + pow((var_sodium_potassium_pump_current__Km_Nai / var_chaste_interface__sodium_concentration__Nai), 2.3999999999999999)) * (mParameters[2] + var_sodium_potassium_pump_current__Km_Ko)); // picoA_per_picoF + const double var_time_independent_K_I__i_K1 = (-var_fast_transient_outward_K_I__E_K + var_chaste_interface__cell__V) * mParameters[2] * mParameters[7] / ((1 + exp(0.089599999999999999 * var_chaste_interface__cell__V - 0.089599999999999999 * var_fast_transient_outward_K_I__E_K)) * (210 + mParameters[2])); // picoA_per_picoF + const double var_ultra_rapidly_activating_delayed_rectifier_K_I__g_Kur = 0.25; // milliS_per_microF + const double var_ultra_rapidly_activating_delayed_rectifier_K_I__i_Kur = (-var_fast_transient_outward_K_I__E_K + var_chaste_interface__cell__V) * var_chaste_interface__ultra_rapidly_activating_delayed_rectifier_K_I__aur * var_ultra_rapidly_activating_delayed_rectifier_K_I__g_Kur * var_chaste_interface__ultra_rapidly_activating_delayed_rectifier_K_I__iur; // picoA_per_picoF + const double d_dt_chaste_interface_var_cell__V = -var_L_type_calcium_current__i_CaL - var_calcium_activated_chloride_current__i_ClCa - var_calcium_background_current__i_Cab - var_calcium_pump_current__i_pCa - var_cell__i_Stim - var_fast_sodium_current__i_Na - var_fast_transient_outward_K_I__i_Kto_f - var_non_inactivating_steady_state_K_I__i_Kss - var_rapid_delayed_rectifier_K_I__i_Kr - var_slow_delayed_rectifier_K_I__i_Ks - var_slow_transient_outward_K_I__i_Kto_s - var_sodium_background_current__i_Nab - var_sodium_calcium_exchange_current__i_NCX - var_sodium_potassium_pump_current__i_NaK - var_time_independent_K_I__i_K1 - var_ultra_rapidly_activating_delayed_rectifier_K_I__i_Kur; // millivolt / millisecond + + rY[0] += mDt*d_dt_chaste_interface_var_cell__V; + } + + void Cellli_mouse_2010FromCellMLBackwardEuler::ComputeOneStepExceptVoltage(double var_chaste_interface__environment__time) + { + // Time units: millisecond + std::vector& rY = rGetStateVariables(); + double var_chaste_interface__cell__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -78.9452115785979 + double var_chaste_interface__L_type_calcium_current__y_gate = rY[12]; + // Units: dimensionless; Initial value: 0.845044436980163 + double var_chaste_interface__ultra_rapidly_activating_delayed_rectifier_K_I__aur = rY[23]; + // Units: dimensionless; Initial value: 0.00346258606821817 + double var_chaste_interface__ultra_rapidly_activating_delayed_rectifier_K_I__iur = rY[24]; + // Units: dimensionless; Initial value: 0.955684946168062 + double var_chaste_interface__non_inactivating_steady_state_K_I__aKss = rY[25]; + // Units: dimensionless; Initial value: 0.287585636847048 + double var_chaste_interface__slow_delayed_rectifier_K_I__nKs = rY[31]; + // Units: dimensionless; Initial value: 0.00336735013094628 + double var_chaste_interface__fast_transient_outward_K_I__ato_f = rY[32]; + // Units: dimensionless; Initial value: 0.0142335908879204 + double var_chaste_interface__fast_transient_outward_K_I__ito_f = rY[33]; + // Units: dimensionless; Initial value: 0.996989882138174 + double var_chaste_interface__slow_transient_outward_K_I__ato_s = rY[34]; + // Units: dimensionless; Initial value: 0.0443263407760382 + double var_chaste_interface__slow_transient_outward_K_I__ito_s = rY[35]; + // Units: dimensionless; Initial value: 0.887568880831388 + + const double var_L_type_calcium_current__const5 = 8.1999999999999993; + const double var_L_type_calcium_current__y_gate_tau_const1 = 8; + const double var_L_type_calcium_current__y_gate_tau_const2 = 315; + const double var_L_type_calcium_current__y_gate_inf = 1 / (1 + exp((33 + var_chaste_interface__cell__V) / var_L_type_calcium_current__const5)) + 0.10000000000000001 / (1 + exp(6.666666666666667 - 0.16666666666666666 * var_chaste_interface__cell__V)); + const double var_L_type_calcium_current__y_gate_tau = var_L_type_calcium_current__y_gate_tau_const2 / (1 + exp(7.5 + 0.25 * var_chaste_interface__cell__V)) + var_L_type_calcium_current__y_gate_tau_const1; + const double var_fast_transient_outward_K_I__alpha_a = 0.18064 * exp(1.6096500000000002 + 0.035770000000000003 * var_chaste_interface__cell__V); + const double var_fast_transient_outward_K_I__beta_a = 0.39560000000000001 * exp(-2.8066499999999999 - 0.062370000000000002 * var_chaste_interface__cell__V); + const double var_fast_transient_outward_K_I__itof_iss = 1 / (1 + exp(10.279999999999999 + 0.20000000000000001 * var_chaste_interface__cell__V)); + const double var_fast_transient_outward_K_I__tau_ito_f = 9.6645000000000003 + 10.936199999999999 / (1 + exp(10.279999999999999 + 0.20000000000000001 * var_chaste_interface__cell__V)); + const double var_non_inactivating_steady_state_K_I__tau_Kss = 13.17 + 39.299999999999997 * exp(-0.050000000000000003 * var_chaste_interface__cell__V); + const double var_slow_delayed_rectifier_K_I__alpha_n = (((var_chaste_interface__cell__V >= -26.500000781250002) && (var_chaste_interface__cell__V <= -26.499999218749998)) ? (-3.7604140624912359e-12 / (1 - exp(9.9999999999766942e-8)) + 640000.00000149151 * (26.500000781250002 + var_chaste_interface__cell__V) * (3.7604140624912359e-12 / (1 - exp(9.9999999999766942e-8)) + 3.7604140624912359e-12 / (1 - exp(-9.9999999999766942e-8)))) : (4.8133299999999997e-6 * (26.5 + var_chaste_interface__cell__V) / (1 - exp(-3.3919999999999999 - 0.128 * var_chaste_interface__cell__V)))); + const double var_slow_delayed_rectifier_K_I__beta_n = 9.5333299999999997e-5 * exp(-1.0069999999999999 - 0.037999999999999999 * var_chaste_interface__cell__V); + const double var_slow_transient_outward_K_I__tau_ta_s = 2.0579999999999998 + 0.49299999999999999 * exp(-0.062899999999999998 * var_chaste_interface__cell__V); + const double var_slow_transient_outward_K_I__tau_ti_s = 270 + 1050 / (1 + exp(7.9298245614035094 + 0.17543859649122806 * var_chaste_interface__cell__V)); + const double var_ultra_rapidly_activating_delayed_rectifier_K_I__ass = 1 / (1 + exp(-0.64479166666666676 - 0.10416666666666667 * var_chaste_interface__cell__V)); + const double var_ultra_rapidly_activating_delayed_rectifier_K_I__iss = 1 / (1 + exp(7.7962962962962958 + 0.18518518518518517 * var_chaste_interface__cell__V)); + const double var_ultra_rapidly_activating_delayed_rectifier_K_I__tau_aur = 2.0579999999999998 + 0.49299999999999999 * exp(-0.062899999999999998 * var_chaste_interface__cell__V); + const double var_ultra_rapidly_activating_delayed_rectifier_K_I__tau_i_const = 643; + const double var_ultra_rapidly_activating_delayed_rectifier_K_I__tau_iur = 1000 / (1 + exp(7.7962962962962958 + 0.18518518518518517 * var_chaste_interface__cell__V)) + var_ultra_rapidly_activating_delayed_rectifier_K_I__tau_i_const; + + + rY[12] = (var_chaste_interface__L_type_calcium_current__y_gate + ((var_L_type_calcium_current__y_gate_inf / var_L_type_calcium_current__y_gate_tau) * mDt)) / (1.0 - ((-1 / var_L_type_calcium_current__y_gate_tau) * mDt)); + rY[32] = (var_chaste_interface__fast_transient_outward_K_I__ato_f + ((var_fast_transient_outward_K_I__alpha_a) * mDt)) / (1.0 - ((-var_fast_transient_outward_K_I__alpha_a - var_fast_transient_outward_K_I__beta_a) * mDt)); + rY[33] = (var_chaste_interface__fast_transient_outward_K_I__ito_f + ((var_fast_transient_outward_K_I__itof_iss / var_fast_transient_outward_K_I__tau_ito_f) * mDt)) / (1.0 - ((-1 / var_fast_transient_outward_K_I__tau_ito_f) * mDt)); + rY[25] = (var_chaste_interface__non_inactivating_steady_state_K_I__aKss + ((var_ultra_rapidly_activating_delayed_rectifier_K_I__ass / var_non_inactivating_steady_state_K_I__tau_Kss) * mDt)) / (1.0 - ((-1 / var_non_inactivating_steady_state_K_I__tau_Kss) * mDt)); + rY[31] = (var_chaste_interface__slow_delayed_rectifier_K_I__nKs + ((var_slow_delayed_rectifier_K_I__alpha_n) * mDt)) / (1.0 - ((-var_slow_delayed_rectifier_K_I__alpha_n - var_slow_delayed_rectifier_K_I__beta_n) * mDt)); + rY[34] = (var_chaste_interface__slow_transient_outward_K_I__ato_s + ((var_ultra_rapidly_activating_delayed_rectifier_K_I__ass / var_slow_transient_outward_K_I__tau_ta_s) * mDt)) / (1.0 - ((-1 / var_slow_transient_outward_K_I__tau_ta_s) * mDt)); + rY[35] = (var_chaste_interface__slow_transient_outward_K_I__ito_s + ((var_ultra_rapidly_activating_delayed_rectifier_K_I__iss / var_slow_transient_outward_K_I__tau_ti_s) * mDt)) / (1.0 - ((-1 / var_slow_transient_outward_K_I__tau_ti_s) * mDt)); + rY[23] = (var_chaste_interface__ultra_rapidly_activating_delayed_rectifier_K_I__aur + ((var_ultra_rapidly_activating_delayed_rectifier_K_I__ass / var_ultra_rapidly_activating_delayed_rectifier_K_I__tau_aur) * mDt)) / (1.0 - ((-1 / var_ultra_rapidly_activating_delayed_rectifier_K_I__tau_aur) * mDt)); + rY[24] = (var_chaste_interface__ultra_rapidly_activating_delayed_rectifier_K_I__iur + ((var_ultra_rapidly_activating_delayed_rectifier_K_I__iss / var_ultra_rapidly_activating_delayed_rectifier_K_I__tau_iur) * mDt)) / (1.0 - ((-1 / var_ultra_rapidly_activating_delayed_rectifier_K_I__tau_iur) * mDt)); + + double _guess[26] = {rY[11],rY[10],rY[3],rY[4],rY[1],rY[2],rY[6],rY[5],rY[15],rY[16],rY[17],rY[18],rY[20],rY[21],rY[19],rY[14],rY[26],rY[22],rY[28],rY[29],rY[30],rY[27],rY[9],rY[7],rY[8],rY[13]}; + CardiacNewtonSolver<26,Cellli_mouse_2010FromCellMLBackwardEuler>* _p_solver = CardiacNewtonSolver<26,Cellli_mouse_2010FromCellMLBackwardEuler>::Instance(); + _p_solver->Solve(*this, var_chaste_interface__environment__time, _guess); + rY[11] = _guess[0]; + rY[10] = _guess[1]; + rY[3] = _guess[2]; + rY[4] = _guess[3]; + rY[1] = _guess[4]; + rY[2] = _guess[5]; + rY[6] = _guess[6]; + rY[5] = _guess[7]; + rY[15] = _guess[8]; + rY[16] = _guess[9]; + rY[17] = _guess[10]; + rY[18] = _guess[11]; + rY[20] = _guess[12]; + rY[21] = _guess[13]; + rY[19] = _guess[14]; + rY[14] = _guess[15]; + rY[26] = _guess[16]; + rY[22] = _guess[17]; + rY[28] = _guess[18]; + rY[29] = _guess[19]; + rY[30] = _guess[20]; + rY[27] = _guess[21]; + rY[9] = _guess[22]; + rY[7] = _guess[23]; + rY[8] = _guess[24]; + rY[13] = _guess[25]; + } + + std::vector Cellli_mouse_2010FromCellMLBackwardEuler::ComputeDerivedQuantities(double var_chaste_interface__environment__time, const std::vector & rY) + { + // Inputs: + // Time units: millisecond + double var_chaste_interface__cell__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -78.9452115785979 + double var_chaste_interface__calcium_concentration__Cai_converted = rY[1]; + // Units: millimolar; Initial value: 9.499150681398009e-05 + double var_chaste_interface__calcium_concentration__Cass = rY[2]; + // Units: micromolar; Initial value: 0.0954184301907784 + double var_chaste_interface__calcium_concentration__CaJSR = rY[3]; + // Units: micromolar; Initial value: 171.167969039613 + double var_chaste_interface__calcium_fluxes__P_RyR = rY[5]; + // Units: dimensionless; Initial value: 0.000280539508743811 + double var_chaste_interface__ryanodine_receptors__P_O1 = rY[7]; + // Units: dimensionless; Initial value: 0.00571393383393735 + double var_chaste_interface__ryanodine_receptors__P_O2 = rY[8]; + // Units: dimensionless; Initial value: 2.09864618235341e-08 + double var_chaste_interface__L_type_calcium_current__O = rY[10]; + // Units: dimensionless; Initial value: 1.23713515513533e-06 + double var_chaste_interface__L_type_calcium_current__y_gate = rY[12]; + // Units: dimensionless; Initial value: 0.845044436980163 + double var_chaste_interface__sodium_concentration__Nai = rY[13]; + // Units: micromolar; Initial value: 12364.7482121793 + double var_chaste_interface__fast_sodium_current__O_Na = rY[14]; + // Units: dimensionless; Initial value: 1.46826771436314e-06 + double var_chaste_interface__potassium_concentration__Ki = rY[22]; + // Units: micromolar; Initial value: 115599.50642567 + double var_chaste_interface__non_inactivating_steady_state_K_I__aKss = rY[25]; + // Units: dimensionless; Initial value: 0.287585636847048 + double var_chaste_interface__non_inactivating_steady_state_K_I__iKss = rY[26]; + // Units: dimensionless; Initial value: 1.0 + double var_chaste_interface__rapid_delayed_rectifier_K_I__O_K = rY[27]; + // Units: dimensionless; Initial value: 0.0131742086125972 + double var_chaste_interface__slow_delayed_rectifier_K_I__nKs = rY[31]; + // Units: dimensionless; Initial value: 0.00336735013094628 + + // Mathematics + const double var_calcium_concentration__Cai = 1000 * var_chaste_interface__calcium_concentration__Cai_converted; // micromolar + const double var_calcium_fluxes__v1_caff = 10; // per_millisecond + const double var_cell__Acap = 0.00013866; // cm2 + const double var_cell__F = 96.5; // coulomb_per_millimole + const double var_cell__R = 8.3140000000000001; // joule_per_mole_kelvin + const double var_cell__T = 308; // kelvin + const double var_L_type_calcium_current__FVRT = var_cell__F * var_chaste_interface__cell__V / (var_cell__R * var_cell__T); // dimensionless + const double var_L_type_calcium_current__FVRT_Ca = 2 * var_L_type_calcium_current__FVRT; // dimensionless + const double var_cell__Vss = 2.1999999999999998e-8; // microlitre + const double var_L_type_calcium_current__i_CaL = ((fabs(var_L_type_calcium_current__FVRT_Ca) > 1.0000000000000001e-5) ? (-2 * (-var_chaste_interface__calcium_concentration__Cass + mParameters[1] * exp(-var_L_type_calcium_current__FVRT_Ca)) * var_L_type_calcium_current__FVRT_Ca * var_chaste_interface__L_type_calcium_current__O * mParameters[4] * var_chaste_interface__L_type_calcium_current__y_gate * var_cell__F * var_cell__Vss / ((1 - exp(-var_L_type_calcium_current__FVRT_Ca)) * var_cell__Acap * mParameters[5])) : (-2.0000000000000002e-5 * (-var_chaste_interface__calcium_concentration__Cass + mParameters[1] * exp(-1.0000000000000001e-5)) * var_chaste_interface__L_type_calcium_current__O * mParameters[4] * var_chaste_interface__L_type_calcium_current__y_gate * var_cell__F * var_cell__Vss / ((1 - exp(-1.0000000000000001e-5)) * var_cell__Acap * mParameters[5]))); // picoA_per_picoF + const double var_L_type_calcium_current__i_CaL_converted = HeartConfig::Instance()->GetCapacitance() * var_L_type_calcium_current__i_CaL; // uA_per_cm2 + const double var_cell__prepulses_number = 10000000000.0; // dimensionless + const double var_chaste_interface__cell__stim_period = 333.33300000000003; // millisecond + const double var_cell__i_Stim_converted = GetIntracellularAreaStimulus(var_chaste_interface__environment__time); // uA_per_cm2 + const double var_fast_transient_outward_K_I__E_K = var_cell__R * var_cell__T * log(mParameters[2] / var_chaste_interface__potassium_concentration__Ki) / var_cell__F; // millivolt + const double var_non_inactivating_steady_state_K_I__i_Kss = (-var_fast_transient_outward_K_I__E_K + var_chaste_interface__cell__V) * var_chaste_interface__non_inactivating_steady_state_K_I__aKss * mParameters[8] * var_chaste_interface__non_inactivating_steady_state_K_I__iKss; // picoA_per_picoF + const double var_non_inactivating_steady_state_K_I__i_Kss_converted = HeartConfig::Instance()->GetCapacitance() * var_non_inactivating_steady_state_K_I__i_Kss; // uA_per_cm2 + const double var_calcium_fluxes__J_rel = ((var_chaste_interface__environment__time < var_cell__prepulses_number * var_chaste_interface__cell__stim_period) ? ((-var_chaste_interface__calcium_concentration__Cass + var_chaste_interface__calcium_concentration__CaJSR) * (var_chaste_interface__ryanodine_receptors__P_O1 + var_chaste_interface__ryanodine_receptors__P_O2) * var_chaste_interface__calcium_fluxes__P_RyR * mParameters[0]) : ((-var_chaste_interface__calcium_concentration__Cass + var_chaste_interface__calcium_concentration__CaJSR) * var_calcium_fluxes__v1_caff)); // micromolar_per_millisecond + const double var_slow_delayed_rectifier_K_I__i_Ks = pow(var_chaste_interface__slow_delayed_rectifier_K_I__nKs, 2) * (-var_fast_transient_outward_K_I__E_K + var_chaste_interface__cell__V) * mParameters[10]; // picoA_per_picoF + const double var_slow_delayed_rectifier_K_I__i_Ks_converted = HeartConfig::Instance()->GetCapacitance() * var_slow_delayed_rectifier_K_I__i_Ks; // uA_per_cm2 + const double var_sodium_calcium_exchange_current__K_mAllo = 0; // micromolar + const double var_sodium_calcium_exchange_current__K_mCai = 3.6000000000000001; // micromolar + const double var_sodium_calcium_exchange_current__K_mCao = 1400; // micromolar + const double var_sodium_calcium_exchange_current__K_mNai = 12000; // micromolar + const double var_sodium_calcium_exchange_current__K_mNao = 88000; // micromolar + const double var_sodium_calcium_exchange_current__eta = 0.34999999999999998; // dimensionless + const double var_sodium_calcium_exchange_current__k_sat = 0.27000000000000002; // dimensionless + const double var_fast_sodium_current__E_Na = var_cell__R * var_cell__T * log((mParameters[3] + 0.1111111111111111 * mParameters[2]) / (var_chaste_interface__sodium_concentration__Nai + 0.1111111111111111 * var_chaste_interface__potassium_concentration__Ki)) / var_cell__F; // millivolt + const double var_fast_sodium_current__i_Na = (-var_fast_sodium_current__E_Na + var_chaste_interface__cell__V) * var_chaste_interface__fast_sodium_current__O_Na * mParameters[6]; // picoA_per_picoF + const double var_fast_sodium_current__i_Na_converted = HeartConfig::Instance()->GetCapacitance() * var_fast_sodium_current__i_Na; // uA_per_cm2 + const double var_rapid_delayed_rectifier_K_I__i_Kr = (-var_cell__R * var_cell__T * log((mParameters[2] + 0.020408163265306124 * mParameters[3]) / (var_chaste_interface__potassium_concentration__Ki + 0.020408163265306124 * var_chaste_interface__sodium_concentration__Nai)) / var_cell__F + var_chaste_interface__cell__V) * var_chaste_interface__rapid_delayed_rectifier_K_I__O_K * mParameters[9]; // picoA_per_picoF + const double var_rapid_delayed_rectifier_K_I__i_Kr_converted = HeartConfig::Instance()->GetCapacitance() * var_rapid_delayed_rectifier_K_I__i_Kr; // uA_per_cm2 + const double var_sodium_calcium_exchange_current__i_NCX = (pow(var_chaste_interface__sodium_concentration__Nai, 3) * mParameters[1] * exp(var_cell__F * var_chaste_interface__cell__V * var_sodium_calcium_exchange_current__eta / (var_cell__R * var_cell__T)) - pow(mParameters[3], 3) * var_calcium_concentration__Cai * exp((-1 + var_sodium_calcium_exchange_current__eta) * var_cell__F * var_chaste_interface__cell__V / (var_cell__R * var_cell__T))) * mParameters[11] / ((1 + pow(var_sodium_calcium_exchange_current__K_mAllo, 2) / pow(var_calcium_concentration__Cai, 2)) * (1 + var_sodium_calcium_exchange_current__k_sat * exp((-1 + var_sodium_calcium_exchange_current__eta) * var_cell__F * var_chaste_interface__cell__V / (var_cell__R * var_cell__T))) * (pow(mParameters[3], 3) * var_calcium_concentration__Cai + pow(var_sodium_calcium_exchange_current__K_mNao, 3) * var_calcium_concentration__Cai + pow(var_chaste_interface__sodium_concentration__Nai, 3) * mParameters[1] + pow(var_chaste_interface__sodium_concentration__Nai, 3) * var_sodium_calcium_exchange_current__K_mCao + pow(mParameters[3], 3) * (1 + pow(var_chaste_interface__sodium_concentration__Nai, 3) / pow(var_sodium_calcium_exchange_current__K_mNai, 3)) * var_sodium_calcium_exchange_current__K_mCai + pow(var_sodium_calcium_exchange_current__K_mNai, 3) * (1 + var_calcium_concentration__Cai / var_sodium_calcium_exchange_current__K_mCai) * mParameters[1])); // picoA_per_picoF + const double var_sodium_calcium_exchange_current__i_NCX_converted = HeartConfig::Instance()->GetCapacitance() * var_sodium_calcium_exchange_current__i_NCX; // uA_per_cm2 + const double var_time_independent_K_I__i_K1 = (-var_fast_transient_outward_K_I__E_K + var_chaste_interface__cell__V) * mParameters[2] * mParameters[7] / ((1 + exp(0.089599999999999999 * var_chaste_interface__cell__V - 0.089599999999999999 * var_fast_transient_outward_K_I__E_K)) * (210 + mParameters[2])); // picoA_per_picoF + const double var_time_independent_K_I__i_K1_converted = HeartConfig::Instance()->GetCapacitance() * var_time_independent_K_I__i_K1; // uA_per_cm2 + + std::vector dqs(11); + dqs[0] = var_calcium_fluxes__J_rel; + dqs[1] = var_chaste_interface__calcium_concentration__Cai_converted; + dqs[2] = var_L_type_calcium_current__i_CaL_converted; + dqs[3] = var_fast_sodium_current__i_Na_converted; + dqs[4] = var_time_independent_K_I__i_K1_converted; + dqs[5] = var_non_inactivating_steady_state_K_I__i_Kss_converted; + dqs[6] = var_rapid_delayed_rectifier_K_I__i_Kr_converted; + dqs[7] = var_slow_delayed_rectifier_K_I__i_Ks_converted; + dqs[8] = var_sodium_calcium_exchange_current__i_NCX_converted; + dqs[9] = var_cell__i_Stim_converted; + dqs[10] = var_chaste_interface__environment__time; + return dqs; + } + +template<> +void OdeSystemInformation::Initialise(void) +{ + this->mSystemName = "Li_Mouse_2010"; + this->mFreeVariableName = "time"; + this->mFreeVariableUnits = "millisecond"; + + // rY[0]: + this->mVariableNames.push_back("membrane_voltage"); + this->mVariableUnits.push_back("millivolt"); + this->mInitialConditions.push_back(-78.9452115785979); + + // rY[1]: + this->mVariableNames.push_back("cytosolic_calcium_concentration"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(9.499150681398009e-05); + + // rY[2]: + this->mVariableNames.push_back("dyadic_space_calcium_concentration"); + this->mVariableUnits.push_back("micromolar"); + this->mInitialConditions.push_back(0.0954184301907784); + + // rY[3]: + this->mVariableNames.push_back("JSR_calcium_concentration"); + this->mVariableUnits.push_back("micromolar"); + this->mInitialConditions.push_back(171.167969039613); + + // rY[4]: + this->mVariableNames.push_back("calcium_concentration__CaNSR"); + this->mVariableUnits.push_back("micromolar"); + this->mInitialConditions.push_back(404.825013216286); + + // rY[5]: + this->mVariableNames.push_back("calcium_fluxes__P_RyR"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.000280539508743811); + + // rY[6]: + this->mVariableNames.push_back("calcium_fluxes__CaMKt"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.729027738385079); + + // rY[7]: + this->mVariableNames.push_back("ryanodine_receptors__P_O1"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.00571393383393735); + + // rY[8]: + this->mVariableNames.push_back("ryanodine_receptors__P_O2"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(2.09864618235341e-08); + + // rY[9]: + this->mVariableNames.push_back("ryanodine_receptors__P_C2"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.565182571165673); + + // rY[10]: + this->mVariableNames.push_back("L_type_calcium_current__O"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(1.23713515513533e-06); + + // rY[11]: + this->mVariableNames.push_back("L_type_calcium_current__I"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.427651445872853); + + // rY[12]: + this->mVariableNames.push_back("L_type_calcium_current__y_gate"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.845044436980163); + + // rY[13]: + this->mVariableNames.push_back("cytosolic_sodium_concentration"); + this->mVariableUnits.push_back("micromolar"); + this->mInitialConditions.push_back(12364.7482121793); + + // rY[14]: + this->mVariableNames.push_back("fast_sodium_current__O_Na"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(1.46826771436314e-06); + + // rY[15]: + this->mVariableNames.push_back("fast_sodium_current__C_Na1"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.000420472760277688); + + // rY[16]: + this->mVariableNames.push_back("fast_sodium_current__C_Na2"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.0240114508843199); + + // rY[17]: + this->mVariableNames.push_back("fast_sodium_current__I1_Na"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.000517471697712382); + + // rY[18]: + this->mVariableNames.push_back("fast_sodium_current__I2_Na"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(2.45406116958509e-05); + + // rY[19]: + this->mVariableNames.push_back("fast_sodium_current__IF_Na"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.000306123648969581); + + // rY[20]: + this->mVariableNames.push_back("fast_sodium_current__IC_Na2"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.0174528857380179); + + // rY[21]: + this->mVariableNames.push_back("fast_sodium_current__IC_Na3"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.402980726914811); + + // rY[22]: + this->mVariableNames.push_back("cytosolic_potassium_concentration"); + this->mVariableUnits.push_back("micromolar"); + this->mInitialConditions.push_back(115599.50642567); + + // rY[23]: + this->mVariableNames.push_back("ultra_rapidly_activating_delayed_rectifier_K_I__aur"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.00346258606821817); + + // rY[24]: + this->mVariableNames.push_back("ultra_rapidly_activating_delayed_rectifier_K_I__iur"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.955684946168062); + + // rY[25]: + this->mVariableNames.push_back("non_inactivating_steady_state_K_I__aKss"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.287585636847048); + + // rY[26]: + this->mVariableNames.push_back("non_inactivating_steady_state_K_I__iKss"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(1.0); + + // rY[27]: + this->mVariableNames.push_back("rapid_delayed_rectifier_K_I__O_K"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.0131742086125972); + + // rY[28]: + this->mVariableNames.push_back("rapid_delayed_rectifier_K_I__C_K1"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.0011733433957123); + + // rY[29]: + this->mVariableNames.push_back("rapid_delayed_rectifier_K_I__C_K2"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.00105586824723736); + + // rY[30]: + this->mVariableNames.push_back("rapid_delayed_rectifier_K_I__I_K"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.00140618453684944); + + // rY[31]: + this->mVariableNames.push_back("slow_delayed_rectifier_K_I__nKs"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.00336735013094628); + + // rY[32]: + this->mVariableNames.push_back("fast_transient_outward_K_I__ato_f"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.0142335908879204); + + // rY[33]: + this->mVariableNames.push_back("fast_transient_outward_K_I__ito_f"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.996989882138174); + + // rY[34]: + this->mVariableNames.push_back("slow_transient_outward_K_I__ato_s"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.0443263407760382); + + // rY[35]: + this->mVariableNames.push_back("slow_transient_outward_K_I__ito_s"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.887568880831388); + + // mParameters[0]: + this->mParameterNames.push_back("SR_release_current_max"); + this->mParameterUnits.push_back("per_millisecond"); + + // mParameters[1]: + this->mParameterNames.push_back("extracellular_calcium_concentration"); + this->mParameterUnits.push_back("micromolar"); + + // mParameters[2]: + this->mParameterNames.push_back("extracellular_potassium_concentration"); + this->mParameterUnits.push_back("micromolar"); + + // mParameters[3]: + this->mParameterNames.push_back("extracellular_sodium_concentration"); + this->mParameterUnits.push_back("micromolar"); + + // mParameters[4]: + this->mParameterNames.push_back("membrane_L_type_calcium_current_conductance"); + this->mParameterUnits.push_back("per_millisecond"); + + // mParameters[5]: + this->mParameterNames.push_back("membrane_capacitance"); + this->mParameterUnits.push_back("microF_per_cm2"); + + // mParameters[6]: + this->mParameterNames.push_back("membrane_fast_sodium_current_conductance"); + this->mParameterUnits.push_back("milliS_per_microF"); + + // mParameters[7]: + this->mParameterNames.push_back("membrane_inward_rectifier_potassium_current_conductance"); + this->mParameterUnits.push_back("milliS_per_microF"); + + // mParameters[8]: + this->mParameterNames.push_back("membrane_non_inactivating_steady_state_potassium_current_conductance"); + this->mParameterUnits.push_back("milliS_per_microF"); + + // mParameters[9]: + this->mParameterNames.push_back("membrane_rapid_delayed_rectifier_potassium_current_conductance"); + this->mParameterUnits.push_back("milliS_per_microF"); + + // mParameters[10]: + this->mParameterNames.push_back("membrane_slow_delayed_rectifier_potassium_current_conductance"); + this->mParameterUnits.push_back("milliS_per_microF"); + + // mParameters[11]: + this->mParameterNames.push_back("membrane_sodium_calcium_exchanger_current_conductance"); + this->mParameterUnits.push_back("picoA_per_picoF"); + + // Derived Quantity index [0]: + this->mDerivedQuantityNames.push_back("SR_release_current"); + this->mDerivedQuantityUnits.push_back("micromolar_per_millisecond"); + + // Derived Quantity index [1]: + this->mDerivedQuantityNames.push_back("cytosolic_calcium_concentration"); + this->mDerivedQuantityUnits.push_back("millimolar"); + + // Derived Quantity index [2]: + this->mDerivedQuantityNames.push_back("membrane_L_type_calcium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [3]: + this->mDerivedQuantityNames.push_back("membrane_fast_sodium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [4]: + this->mDerivedQuantityNames.push_back("membrane_inward_rectifier_potassium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [5]: + this->mDerivedQuantityNames.push_back("membrane_non_inactivating_steady_state_potassium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [6]: + this->mDerivedQuantityNames.push_back("membrane_rapid_delayed_rectifier_potassium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [7]: + this->mDerivedQuantityNames.push_back("membrane_slow_delayed_rectifier_potassium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [8]: + this->mDerivedQuantityNames.push_back("membrane_sodium_calcium_exchanger_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [9]: + this->mDerivedQuantityNames.push_back("membrane_stimulus_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [10]: + this->mDerivedQuantityNames.push_back("time"); + this->mDerivedQuantityUnits.push_back("millisecond"); + + this->mInitialised = true; +} + +// Serialization for Boost >= 1.36 +#include "SerializationExportWrapperForCpp.hpp" +CHASTE_CLASS_EXPORT(Cellli_mouse_2010FromCellMLBackwardEuler) + diff --git a/chaste_codegen/tests/numerical/baseline/BE/li_mouse_2010.hpp b/chaste_codegen/tests/numerical/baseline/BE/li_mouse_2010.hpp new file mode 100644 index 00000000..4f517cf7 --- /dev/null +++ b/chaste_codegen/tests/numerical/baseline/BE/li_mouse_2010.hpp @@ -0,0 +1,87 @@ +#ifndef CELLLI_MOUSE_2010FROMCELLMLBACKWARDEULER_HPP_ +#define CELLLI_MOUSE_2010FROMCELLMLBACKWARDEULER_HPP_ + +//! @file +//! +//! This source file was generated from CellML by chaste_codegen version (version omitted as unimportant) +//! +//! Model: Li_Mouse_2010 +//! +//! Processed by chaste_codegen: https://github.com/ModellingWebLab/chaste-codegen +//! (translator: chaste_codegen, model type: BackwardEuler) +//! on (date omitted as unimportant) +//! +//! + +#include "ChasteSerialization.hpp" +#include +#include "AbstractStimulusFunction.hpp" +#include "AbstractBackwardEulerCardiacCell.hpp" + +class Cellli_mouse_2010FromCellMLBackwardEuler : public AbstractBackwardEulerCardiacCell<26> +{ + friend class boost::serialization::access; + template + void serialize(Archive & archive, const unsigned int version) + { + archive & boost::serialization::base_object >(*this); + + } + + // + // Settable parameters and readable variables + // + + +private: +const bool is_concentration[36] = {false, true, true, true, false, false, false, false, false, false, false, false, false, true, false, false, false, false, false, false, false, false, true, false, false, false, false, false, false, false, false, false, false, false, false, false}; +const bool is_probability[36] = {false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false}; +public: + + boost::shared_ptr UseCellMLDefaultStimulus(); + double GetIntracellularCalciumConcentration(); + Cellli_mouse_2010FromCellMLBackwardEuler(boost::shared_ptr /* unused; should be empty */, boost::shared_ptr pIntracellularStimulus); + ~Cellli_mouse_2010FromCellMLBackwardEuler(); + void VerifyStateVariables(); + double GetIIonic(const std::vector* pStateVariables=NULL);void ComputeResidual(double var_chaste_interface__environment__time, const double rCurrentGuess[26], double rResidual[26]); + void ComputeJacobian(double var_chaste_interface__environment__time, const double rCurrentGuess[26], double rJacobian[26][26]);protected: + void UpdateTransmembranePotential(double var_chaste_interface__environment__time); + void ComputeOneStepExceptVoltage(double var_chaste_interface__environment__time); + + std::vector ComputeDerivedQuantities(double var_chaste_interface__environment__time, const std::vector & rY); +}; + +// Needs to be included last +#include "SerializationExportWrapper.hpp" +CHASTE_CLASS_EXPORT(Cellli_mouse_2010FromCellMLBackwardEuler) + +namespace boost +{ + namespace serialization + { + template + inline void save_construct_data( + Archive & ar, const Cellli_mouse_2010FromCellMLBackwardEuler * t, const unsigned int fileVersion) + { + const boost::shared_ptr p_solver = t->GetSolver(); + const boost::shared_ptr p_stimulus = t->GetStimulusFunction(); + ar << p_solver; + ar << p_stimulus; + } + + template + inline void load_construct_data( + Archive & ar, Cellli_mouse_2010FromCellMLBackwardEuler * t, const unsigned int fileVersion) + { + boost::shared_ptr p_solver; + boost::shared_ptr p_stimulus; + ar >> p_solver; + ar >> p_stimulus; + ::new(t)Cellli_mouse_2010FromCellMLBackwardEuler(p_solver, p_stimulus); + } + + } + +} + +#endif // CELLLI_MOUSE_2010FROMCELLMLBACKWARDEULER_HPP_ \ No newline at end of file diff --git a/chaste_codegen/tests/numerical/baseline/BE/sachse_moreno_abildskov_2008_b.cpp b/chaste_codegen/tests/numerical/baseline/BE/sachse_moreno_abildskov_2008_b.cpp new file mode 100644 index 00000000..c975de3e --- /dev/null +++ b/chaste_codegen/tests/numerical/baseline/BE/sachse_moreno_abildskov_2008_b.cpp @@ -0,0 +1,419 @@ +//! @file +//! +//! This source file was generated from CellML by chaste_codegen version (version omitted as unimportant) +//! +//! Model: sachse_model_2007 +//! +//! Processed by chaste_codegen: https://github.com/ModellingWebLab/chaste-codegen +//! (translator: chaste_codegen, model type: BackwardEuler) +//! on (date omitted as unimportant) +//! +//! + +#include "CardiacNewtonSolver.hpp" +#include "sachse_moreno_abildskov_2008_b.hpp" +#include +#include +#include +#include +#include "Exception.hpp" +#include "OdeSystemInformation.hpp" +#include "RegularStimulus.hpp" +#include "HeartConfig.hpp" +#include "IsNan.hpp" +#include "MathsCustomFunctions.hpp" + + + + + + boost::shared_ptr Cellsachse_moreno_abildskov_2008_bFromCellMLBackwardEuler::UseCellMLDefaultStimulus() + { + // Use the default stimulus specified by CellML metadata + const double var_chaste_interface__I_stim__stim_duration_converted = 1; // millisecond + const double var_chaste_interface__I_stim__stim_period_converted = 1000; // millisecond + const double var_chaste_interface__I_stim__stim_start_converted = 100; // millisecond + const double var_chaste_interface__I_stim__stim_amplitude_converted = 0.0001 * HeartConfig::Instance()->GetCapacitance() / mParameters[2]; // uA_per_cm2 + boost::shared_ptr p_cellml_stim(new RegularStimulus( + -fabs(var_chaste_interface__I_stim__stim_amplitude_converted), + var_chaste_interface__I_stim__stim_duration_converted, + var_chaste_interface__I_stim__stim_period_converted, + var_chaste_interface__I_stim__stim_start_converted + )); + mpIntracellularStimulus = p_cellml_stim; + return p_cellml_stim; + } + + Cellsachse_moreno_abildskov_2008_bFromCellMLBackwardEuler::Cellsachse_moreno_abildskov_2008_bFromCellMLBackwardEuler(boost::shared_ptr /* unused; should be empty */, boost::shared_ptr pIntracellularStimulus) + : AbstractBackwardEulerCardiacCell<6>( + 7, + 0, + pIntracellularStimulus) + { + // Time units: millisecond + // + this->mpSystemInfo = OdeSystemInformation::Instance(); + Init(); + + // We have a default stimulus specified in the CellML file metadata + this->mHasDefaultStimulusFromCellML = true; + + this->mParameters[0] = 140; // (var_model_parameters__Ki) [millimolar] + this->mParameters[1] = 5; // (var_model_parameters__Ko) [millimolar] + this->mParameters[2] = 4.5000000000000001e-6; // (var_membrane__Cm) [microfarad] + this->mParameters[3] = 5.4000000000000004e-9; // (var_I_Shkr__PShkr) [microlitre_per_second] + this->mParameters[4] = 0.001; // (var_I_Kir__GKir) [microsiemens] + this->mParameters[5] = 6.9e-6; // (var_I_b__Gb) [microsiemens] + this->mParameters[6] = 295; // (var_model_parameters__T) [kelvin] + } + + Cellsachse_moreno_abildskov_2008_bFromCellMLBackwardEuler::~Cellsachse_moreno_abildskov_2008_bFromCellMLBackwardEuler() + { + } + + + void Cellsachse_moreno_abildskov_2008_bFromCellMLBackwardEuler::VerifyStateVariables() + { + std::vector& rY = rGetStateVariables(); + std::string error_message = ""; + + for (unsigned i=0; i < 7; i++) + { + if(std::isnan(rY[i])) + { + error_message += "State variable " + this->rGetStateVariableNames()[i] + " is not a number\n"; + } + if(std::isinf(rY[i])) + { + error_message += "State variable " + this->rGetStateVariableNames()[i] + " has become INFINITE\n"; + } + if(this->is_concentration[i] && rY[i] < 0) + { + error_message += "Concentration " + this->rGetStateVariableNames()[i] + " below 0\n"; + } + if(this->is_probability[i] && rY[i] < 0) + { + error_message += "Probability " + this->rGetStateVariableNames()[i] + " below 0\n"; + } + if(this->is_probability[i] && rY[i] > 1) + { + error_message += "Probability " + this->rGetStateVariableNames()[i] + " above 1\n"; + } + } + if (error_message != ""){ + EXCEPTION(DumpState(error_message)); + } + } + + double Cellsachse_moreno_abildskov_2008_bFromCellMLBackwardEuler::GetIIonic(const std::vector* pStateVariables) + { + // For state variable interpolation (SVI) we read in interpolated state variables, + // otherwise for ionic current interpolation (ICI) we use the state variables of this model (node). + if (!pStateVariables) pStateVariables = &rGetStateVariables(); + const std::vector& rY = *pStateVariables; + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -58.0 + double var_chaste_interface__I_Shkr__OShkr = rY[6]; + // Units: dimensionless; Initial value: 0.0 + + const double var_I_Kir__aKir = 0.93999999999999995; // dimensionless + const double var_I_Kir__bKir = 1.26; // dimensionless + const double var_I_b__Eb = 0; // millivolt + const double var_I_b__I_b = (-var_I_b__Eb + var_chaste_interface__membrane__Vm) * mParameters[5]; // nanoampere + const double var_I_b__I_b_converted = 0.001 * HeartConfig::Instance()->GetCapacitance() * var_I_b__I_b / mParameters[2]; // uA_per_cm2 + const double var_model_parameters__F = 96500; // coulomb_per_mole + const double var_model_parameters__R = 8310; // millijoule_per_kelvin_mole + const double var_I_Kir__EK = var_model_parameters__R * mParameters[6] * log(mParameters[1] / mParameters[0]) / var_model_parameters__F; // millivolt + const double var_I_Kir__OKir = 1 / (var_I_Kir__aKir + exp((-var_I_Kir__EK + var_chaste_interface__membrane__Vm) * var_I_Kir__bKir * var_model_parameters__F / (var_model_parameters__R * mParameters[6]))); // dimensionless + const double var_I_Kir__I_Kir = 0.031622776601683791 * sqrt(mParameters[1]) * (-var_I_Kir__EK + var_chaste_interface__membrane__Vm) * mParameters[4] * var_I_Kir__OKir; // nanoampere + const double var_I_Kir__I_Kir_converted = 0.001 * HeartConfig::Instance()->GetCapacitance() * var_I_Kir__I_Kir / mParameters[2]; // uA_per_cm2 + const double var_I_Shkr__I_Shkr = ((((var_chaste_interface__membrane__Vm >= -8.6113989637305703e-9 * mParameters[6]) && (var_chaste_interface__membrane__Vm <= 8.6113989637305703e-9 * mParameters[6])) || ((var_chaste_interface__membrane__Vm >= 8.6113989637305703e-9 * mParameters[6]) && (var_chaste_interface__membrane__Vm <= -8.6113989637305703e-9 * mParameters[6]))) ? (58062575.210589655 * (8.6113989637305703e-9 * mParameters[6] + var_chaste_interface__membrane__Vm) * (0.0096499999999999989 * (-mParameters[1] * exp(9.9999999999999995e-8) + mParameters[0]) * var_chaste_interface__I_Shkr__OShkr * mParameters[3] / (1 - exp(9.9999999999999995e-8)) + 0.0096499999999999989 * (-mParameters[1] * exp(-9.9999999999999995e-8) + mParameters[0]) * var_chaste_interface__I_Shkr__OShkr * mParameters[3] / (1 - exp(-9.9999999999999995e-8))) / mParameters[6] - 0.0096499999999999989 * (-mParameters[1] * exp(9.9999999999999995e-8) + mParameters[0]) * var_chaste_interface__I_Shkr__OShkr * mParameters[3] / (1 - exp(9.9999999999999995e-8))) : (1120607.7015643802 * (-mParameters[1] * exp(-11.612515042117931 * var_chaste_interface__membrane__Vm / mParameters[6]) + mParameters[0]) * var_chaste_interface__I_Shkr__OShkr * mParameters[3] * var_chaste_interface__membrane__Vm / ((1 - exp(-11.612515042117931 * var_chaste_interface__membrane__Vm / mParameters[6])) * mParameters[6]))); // nanoampere + const double var_I_Shkr__I_Shkr_converted = 0.001 * HeartConfig::Instance()->GetCapacitance() * var_I_Shkr__I_Shkr / mParameters[2]; // uA_per_cm2 + const double var_chaste_interface__i_ionic = var_I_Kir__I_Kir_converted + var_I_Shkr__I_Shkr_converted + var_I_b__I_b_converted; // uA_per_cm2 + + const double i_ionic = var_chaste_interface__i_ionic; + EXCEPT_IF_NOT(!std::isnan(i_ionic)); + return i_ionic; + } + + void Cellsachse_moreno_abildskov_2008_bFromCellMLBackwardEuler::ComputeResidual(double var_chaste_interface__environment__time_converted, const double rCurrentGuess[6], double rResidual[6]) + { + std::vector& rY = rGetStateVariables(); + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -58.0 + + //output_nonlinear_state_assignments + double var_chaste_interface__I_Shkr__C0Shkr = rCurrentGuess[0]; + double var_chaste_interface__I_Shkr__C1Shkr = rCurrentGuess[1]; + double var_chaste_interface__I_Shkr__C2Shkr = rCurrentGuess[2]; + double var_chaste_interface__I_Shkr__C3Shkr = rCurrentGuess[3]; + double var_chaste_interface__I_Shkr__C4Shkr = rCurrentGuess[4]; + double var_chaste_interface__I_Shkr__OShkr = rCurrentGuess[5]; + + //output_equations + const double var_I_Shkr__k_o = 18; // first_order_rate_constant + const double var_I_Shkr__k_v0 = 2; // first_order_rate_constant + const double var_I_Shkr__ko = 77; // first_order_rate_constant + const double var_I_Shkr__OShkr_orig_deriv = var_chaste_interface__I_Shkr__C4Shkr * var_I_Shkr__ko - var_chaste_interface__I_Shkr__OShkr * var_I_Shkr__k_o; // 1 / second + const double d_dt_chaste_interface_var_I_Shkr__OShkr = 0.001 * var_I_Shkr__OShkr_orig_deriv; // 1 / millisecond + const double var_I_Shkr__kv0 = 30; // first_order_rate_constant + const double var_I_Shkr__z_v = -1.53; // dimensionless + const double var_I_Shkr__zv = 1.28; // dimensionless + const double var_model_parameters__F = 96500; // coulomb_per_mole + const double var_model_parameters__R = 8310; // millijoule_per_kelvin_mole + const double var_I_Shkr__k_v = var_I_Shkr__k_v0 * exp(var_I_Shkr__z_v * var_chaste_interface__membrane__Vm * var_model_parameters__F / (var_model_parameters__R * mParameters[6])); // first_order_rate_constant + const double var_I_Shkr__kv = var_I_Shkr__kv0 * exp(var_I_Shkr__zv * var_chaste_interface__membrane__Vm * var_model_parameters__F / (var_model_parameters__R * mParameters[6])); // first_order_rate_constant + const double var_I_Shkr__C0Shkr_orig_deriv = var_chaste_interface__I_Shkr__C1Shkr * var_I_Shkr__k_v - 4 * var_chaste_interface__I_Shkr__C0Shkr * var_I_Shkr__kv; // 1 / second + const double d_dt_chaste_interface_var_I_Shkr__C0Shkr = 0.001 * var_I_Shkr__C0Shkr_orig_deriv; // 1 / millisecond + const double var_I_Shkr__C1Shkr_orig_deriv = -(3 * var_I_Shkr__kv + var_I_Shkr__k_v) * var_chaste_interface__I_Shkr__C1Shkr + 2 * var_chaste_interface__I_Shkr__C2Shkr * var_I_Shkr__k_v + 4 * var_chaste_interface__I_Shkr__C0Shkr * var_I_Shkr__kv; // 1 / second + const double d_dt_chaste_interface_var_I_Shkr__C1Shkr = 0.001 * var_I_Shkr__C1Shkr_orig_deriv; // 1 / millisecond + const double var_I_Shkr__C2Shkr_orig_deriv = -(2 * var_I_Shkr__k_v + 2 * var_I_Shkr__kv) * var_chaste_interface__I_Shkr__C2Shkr + 3 * var_chaste_interface__I_Shkr__C1Shkr * var_I_Shkr__kv + 3 * var_chaste_interface__I_Shkr__C3Shkr * var_I_Shkr__k_v; // 1 / second + const double d_dt_chaste_interface_var_I_Shkr__C2Shkr = 0.001 * var_I_Shkr__C2Shkr_orig_deriv; // 1 / millisecond + const double var_I_Shkr__C3Shkr_orig_deriv = -(3 * var_I_Shkr__k_v + var_I_Shkr__kv) * var_chaste_interface__I_Shkr__C3Shkr + 2 * var_chaste_interface__I_Shkr__C2Shkr * var_I_Shkr__kv + 4 * var_chaste_interface__I_Shkr__C4Shkr * var_I_Shkr__k_v; // 1 / second + const double d_dt_chaste_interface_var_I_Shkr__C3Shkr = 0.001 * var_I_Shkr__C3Shkr_orig_deriv; // 1 / millisecond + const double var_I_Shkr__C4Shkr_orig_deriv = var_chaste_interface__I_Shkr__C3Shkr * var_I_Shkr__kv + var_chaste_interface__I_Shkr__OShkr * var_I_Shkr__k_o - (4 * var_I_Shkr__k_v + var_I_Shkr__ko) * var_chaste_interface__I_Shkr__C4Shkr; // 1 / second + const double d_dt_chaste_interface_var_I_Shkr__C4Shkr = 0.001 * var_I_Shkr__C4Shkr_orig_deriv; // 1 / millisecond + + rResidual[0] = rCurrentGuess[0] - rY[1] - mDt*d_dt_chaste_interface_var_I_Shkr__C0Shkr; + rResidual[1] = rCurrentGuess[1] - rY[2] - mDt*d_dt_chaste_interface_var_I_Shkr__C1Shkr; + rResidual[2] = rCurrentGuess[2] - rY[3] - mDt*d_dt_chaste_interface_var_I_Shkr__C2Shkr; + rResidual[3] = rCurrentGuess[3] - rY[4] - mDt*d_dt_chaste_interface_var_I_Shkr__C3Shkr; + rResidual[4] = rCurrentGuess[4] - rY[5] - mDt*d_dt_chaste_interface_var_I_Shkr__C4Shkr; + rResidual[5] = rCurrentGuess[5] - rY[6] - mDt*d_dt_chaste_interface_var_I_Shkr__OShkr; + } + + void Cellsachse_moreno_abildskov_2008_bFromCellMLBackwardEuler::ComputeJacobian(double var_chaste_interface__environment__time_converted, const double rCurrentGuess[6], double rJacobian[6][6]) + { + std::vector& rY = rGetStateVariables(); + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -58.0 + + + const double var_x0 = var_chaste_interface__membrane__Vm / mParameters[6]; + const double var_x1 = exp(14.864019253910952 * var_x0); + const double var_x2 = 0.12 * var_x1; + const double var_x3 = exp(-17.767148014440433 * var_x0); + const double var_x4 = 0.002 * var_x3; + const double var_x5 = 0.089999999999999997 * var_x1; + const double var_x6 = 0.0040000000000000001 * var_x3; + const double var_x7 = 0.059999999999999998 * var_x1; + const double var_x8 = 0.0060000000000000001 * var_x3; + const double var_x9 = 0.029999999999999999 * var_x1; + const double var_x10 = 0.0080000000000000002 * var_x3; + + + rJacobian[0][0] = 1.0 - (mDt * (-var_x2)); + rJacobian[0][1] = -(mDt * (var_x4)); + rJacobian[0][2] = 0.0; + rJacobian[0][3] = 0.0; + rJacobian[0][4] = 0.0; + rJacobian[0][5] = 0.0; + rJacobian[1][0] = -(mDt * (var_x2)); + rJacobian[1][1] = 1.0 - (mDt * (-var_x4 - var_x5)); + rJacobian[1][2] = -(mDt * (var_x6)); + rJacobian[1][3] = 0.0; + rJacobian[1][4] = 0.0; + rJacobian[1][5] = 0.0; + rJacobian[2][0] = 0.0; + rJacobian[2][1] = -(mDt * (var_x5)); + rJacobian[2][2] = 1.0 - (mDt * (-var_x6 - var_x7)); + rJacobian[2][3] = -(mDt * (var_x8)); + rJacobian[2][4] = 0.0; + rJacobian[2][5] = 0.0; + rJacobian[3][0] = 0.0; + rJacobian[3][1] = 0.0; + rJacobian[3][2] = -(mDt * (var_x7)); + rJacobian[3][3] = 1.0 - (mDt * (-var_x8 - var_x9)); + rJacobian[3][4] = -(mDt * (var_x10)); + rJacobian[3][5] = 0.0; + rJacobian[4][0] = 0.0; + rJacobian[4][1] = 0.0; + rJacobian[4][2] = 0.0; + rJacobian[4][3] = -(mDt * (var_x9)); + rJacobian[4][4] = 1.0 - (mDt * (-0.076999999999999999 - var_x10)); + rJacobian[4][5] = -(mDt * (0.017999999999999999)); + rJacobian[5][0] = 0.0; + rJacobian[5][1] = 0.0; + rJacobian[5][2] = 0.0; + rJacobian[5][3] = 0.0; + rJacobian[5][4] = -(mDt * (0.076999999999999999)); + rJacobian[5][5] = 1.0 - (mDt * (-0.017999999999999999)); + } + + void Cellsachse_moreno_abildskov_2008_bFromCellMLBackwardEuler::UpdateTransmembranePotential(double var_chaste_interface__environment__time_converted) + { + // Time units: millisecond + std::vector& rY = rGetStateVariables(); + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -58.0 + double var_chaste_interface__I_Shkr__OShkr = rY[6]; + // Units: dimensionless; Initial value: 0.0 + + const double var_I_Kir__aKir = 0.93999999999999995; // dimensionless + const double var_I_Kir__bKir = 1.26; // dimensionless + const double var_I_b__Eb = 0; // millivolt + const double var_I_stim__I_stim_converted = -GetIntracellularAreaStimulus(var_chaste_interface__environment__time_converted); // uA_per_cm2 + const double var_I_stim__I_stim = 1000 * var_I_stim__I_stim_converted * mParameters[2] / HeartConfig::Instance()->GetCapacitance(); // nanoampere + const double var_I_b__I_b = (-var_I_b__Eb + var_chaste_interface__membrane__Vm) * mParameters[5]; // nanoampere + const double var_model_parameters__F = 96500; // coulomb_per_mole + const double var_model_parameters__R = 8310; // millijoule_per_kelvin_mole + const double var_I_Kir__EK = var_model_parameters__R * mParameters[6] * log(mParameters[1] / mParameters[0]) / var_model_parameters__F; // millivolt + const double var_I_Kir__OKir = 1 / (var_I_Kir__aKir + exp((-var_I_Kir__EK + var_chaste_interface__membrane__Vm) * var_I_Kir__bKir * var_model_parameters__F / (var_model_parameters__R * mParameters[6]))); // dimensionless + const double var_I_Kir__I_Kir = 0.031622776601683791 * sqrt(mParameters[1]) * (-var_I_Kir__EK + var_chaste_interface__membrane__Vm) * mParameters[4] * var_I_Kir__OKir; // nanoampere + const double var_I_Shkr__I_Shkr = ((((var_chaste_interface__membrane__Vm >= -8.6113989637305703e-9 * mParameters[6]) && (var_chaste_interface__membrane__Vm <= 8.6113989637305703e-9 * mParameters[6])) || ((var_chaste_interface__membrane__Vm >= 8.6113989637305703e-9 * mParameters[6]) && (var_chaste_interface__membrane__Vm <= -8.6113989637305703e-9 * mParameters[6]))) ? (58062575.210589655 * (8.6113989637305703e-9 * mParameters[6] + var_chaste_interface__membrane__Vm) * (0.0096499999999999989 * (-mParameters[1] * exp(9.9999999999999995e-8) + mParameters[0]) * var_chaste_interface__I_Shkr__OShkr * mParameters[3] / (1 - exp(9.9999999999999995e-8)) + 0.0096499999999999989 * (-mParameters[1] * exp(-9.9999999999999995e-8) + mParameters[0]) * var_chaste_interface__I_Shkr__OShkr * mParameters[3] / (1 - exp(-9.9999999999999995e-8))) / mParameters[6] - 0.0096499999999999989 * (-mParameters[1] * exp(9.9999999999999995e-8) + mParameters[0]) * var_chaste_interface__I_Shkr__OShkr * mParameters[3] / (1 - exp(9.9999999999999995e-8))) : (1120607.7015643802 * (-mParameters[1] * exp(-11.612515042117931 * var_chaste_interface__membrane__Vm / mParameters[6]) + mParameters[0]) * var_chaste_interface__I_Shkr__OShkr * mParameters[3] * var_chaste_interface__membrane__Vm / ((1 - exp(-11.612515042117931 * var_chaste_interface__membrane__Vm / mParameters[6])) * mParameters[6]))); // nanoampere + const double var_membrane__Vm_orig_deriv = (-var_I_Kir__I_Kir - var_I_Shkr__I_Shkr - var_I_b__I_b + var_I_stim__I_stim) / mParameters[2]; // millivolt / second + const double d_dt_chaste_interface_var_membrane__Vm = 0.001 * var_membrane__Vm_orig_deriv; // millivolt / millisecond + + rY[0] += mDt*d_dt_chaste_interface_var_membrane__Vm; + } + + void Cellsachse_moreno_abildskov_2008_bFromCellMLBackwardEuler::ComputeOneStepExceptVoltage(double var_chaste_interface__environment__time_converted) + { + // Time units: millisecond + std::vector& rY = rGetStateVariables(); + + + + + double _guess[6] = {rY[1],rY[2],rY[3],rY[4],rY[5],rY[6]}; + CardiacNewtonSolver<6,Cellsachse_moreno_abildskov_2008_bFromCellMLBackwardEuler>* _p_solver = CardiacNewtonSolver<6,Cellsachse_moreno_abildskov_2008_bFromCellMLBackwardEuler>::Instance(); + _p_solver->Solve(*this, var_chaste_interface__environment__time_converted, _guess); + rY[1] = _guess[0]; + rY[2] = _guess[1]; + rY[3] = _guess[2]; + rY[4] = _guess[3]; + rY[5] = _guess[4]; + rY[6] = _guess[5]; + } + + std::vector Cellsachse_moreno_abildskov_2008_bFromCellMLBackwardEuler::ComputeDerivedQuantities(double var_chaste_interface__environment__time_converted, const std::vector & rY) + { + // Inputs: + // Time units: millisecond + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -58.0 + double var_chaste_interface__I_Shkr__OShkr = rY[6]; + // Units: dimensionless; Initial value: 0.0 + + // Mathematics + const double var_I_Kir__aKir = 0.93999999999999995; // dimensionless + const double var_I_Kir__bKir = 1.26; // dimensionless + const double var_I_b__Eb = 0; // millivolt + const double var_I_stim__I_stim_converted = -GetIntracellularAreaStimulus(var_chaste_interface__environment__time_converted); // uA_per_cm2 + const double var_I_b__I_b = (-var_I_b__Eb + var_chaste_interface__membrane__Vm) * mParameters[5]; // nanoampere + const double var_I_b__I_b_converted = 0.001 * HeartConfig::Instance()->GetCapacitance() * var_I_b__I_b / mParameters[2]; // uA_per_cm2 + const double var_model_parameters__F = 96500; // coulomb_per_mole + const double var_model_parameters__R = 8310; // millijoule_per_kelvin_mole + const double var_I_Kir__EK = var_model_parameters__R * mParameters[6] * log(mParameters[1] / mParameters[0]) / var_model_parameters__F; // millivolt + const double var_I_Kir__OKir = 1 / (var_I_Kir__aKir + exp((-var_I_Kir__EK + var_chaste_interface__membrane__Vm) * var_I_Kir__bKir * var_model_parameters__F / (var_model_parameters__R * mParameters[6]))); // dimensionless + const double var_I_Kir__I_Kir = 0.031622776601683791 * sqrt(mParameters[1]) * (-var_I_Kir__EK + var_chaste_interface__membrane__Vm) * mParameters[4] * var_I_Kir__OKir; // nanoampere + const double var_I_Kir__I_Kir_converted = 0.001 * HeartConfig::Instance()->GetCapacitance() * var_I_Kir__I_Kir / mParameters[2]; // uA_per_cm2 + const double var_I_Shkr__I_Shkr = ((((var_chaste_interface__membrane__Vm >= -8.6113989637305703e-9 * mParameters[6]) && (var_chaste_interface__membrane__Vm <= 8.6113989637305703e-9 * mParameters[6])) || ((var_chaste_interface__membrane__Vm >= 8.6113989637305703e-9 * mParameters[6]) && (var_chaste_interface__membrane__Vm <= -8.6113989637305703e-9 * mParameters[6]))) ? (58062575.210589655 * (8.6113989637305703e-9 * mParameters[6] + var_chaste_interface__membrane__Vm) * (0.0096499999999999989 * (-mParameters[1] * exp(9.9999999999999995e-8) + mParameters[0]) * var_chaste_interface__I_Shkr__OShkr * mParameters[3] / (1 - exp(9.9999999999999995e-8)) + 0.0096499999999999989 * (-mParameters[1] * exp(-9.9999999999999995e-8) + mParameters[0]) * var_chaste_interface__I_Shkr__OShkr * mParameters[3] / (1 - exp(-9.9999999999999995e-8))) / mParameters[6] - 0.0096499999999999989 * (-mParameters[1] * exp(9.9999999999999995e-8) + mParameters[0]) * var_chaste_interface__I_Shkr__OShkr * mParameters[3] / (1 - exp(9.9999999999999995e-8))) : (1120607.7015643802 * (-mParameters[1] * exp(-11.612515042117931 * var_chaste_interface__membrane__Vm / mParameters[6]) + mParameters[0]) * var_chaste_interface__I_Shkr__OShkr * mParameters[3] * var_chaste_interface__membrane__Vm / ((1 - exp(-11.612515042117931 * var_chaste_interface__membrane__Vm / mParameters[6])) * mParameters[6]))); // nanoampere + const double var_I_Shkr__I_Shkr_converted = 0.001 * HeartConfig::Instance()->GetCapacitance() * var_I_Shkr__I_Shkr / mParameters[2]; // uA_per_cm2 + + std::vector dqs(5); + dqs[0] = var_I_Shkr__I_Shkr_converted; + dqs[1] = var_I_Kir__I_Kir_converted; + dqs[2] = var_I_b__I_b_converted; + dqs[3] = var_I_stim__I_stim_converted; + dqs[4] = var_chaste_interface__environment__time_converted; + return dqs; + } + +template<> +void OdeSystemInformation::Initialise(void) +{ + this->mSystemName = "sachse_model_2007"; + this->mFreeVariableName = "time"; + this->mFreeVariableUnits = "millisecond"; + + // rY[0]: + this->mVariableNames.push_back("membrane_voltage"); + this->mVariableUnits.push_back("millivolt"); + this->mInitialConditions.push_back(-58.0); + + // rY[1]: + this->mVariableNames.push_back("I_Shkr__C0Shkr"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.911); + + // rY[2]: + this->mVariableNames.push_back("I_Shkr__C1Shkr"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.0857); + + // rY[3]: + this->mVariableNames.push_back("I_Shkr__C2Shkr"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.00302); + + // rY[4]: + this->mVariableNames.push_back("I_Shkr__C3Shkr"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(4.74e-05); + + // rY[5]: + this->mVariableNames.push_back("I_Shkr__C4Shkr"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(2.79e-07); + + // rY[6]: + this->mVariableNames.push_back("I_Shkr__OShkr"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.0); + + // mParameters[0]: + this->mParameterNames.push_back("cytosolic_potassium_concentration"); + this->mParameterUnits.push_back("millimolar"); + + // mParameters[1]: + this->mParameterNames.push_back("extracellular_potassium_concentration"); + this->mParameterUnits.push_back("millimolar"); + + // mParameters[2]: + this->mParameterNames.push_back("membrane_capacitance"); + this->mParameterUnits.push_back("microfarad"); + + // mParameters[3]: + this->mParameterNames.push_back("membrane_delayed_rectifier_potassium_current_conductance"); + this->mParameterUnits.push_back("microlitre_per_second"); + + // mParameters[4]: + this->mParameterNames.push_back("membrane_inward_rectifier_potassium_current_conductance"); + this->mParameterUnits.push_back("microsiemens"); + + // mParameters[5]: + this->mParameterNames.push_back("membrane_leakage_current_conductance"); + this->mParameterUnits.push_back("microsiemens"); + + // mParameters[6]: + this->mParameterNames.push_back("temperature"); + this->mParameterUnits.push_back("kelvin"); + + // Derived Quantity index [0]: + this->mDerivedQuantityNames.push_back("membrane_delayed_rectifier_potassium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [1]: + this->mDerivedQuantityNames.push_back("membrane_inward_rectifier_potassium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [2]: + this->mDerivedQuantityNames.push_back("membrane_leakage_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [3]: + this->mDerivedQuantityNames.push_back("membrane_stimulus_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [4]: + this->mDerivedQuantityNames.push_back("time"); + this->mDerivedQuantityUnits.push_back("millisecond"); + + this->mInitialised = true; +} + +// Serialization for Boost >= 1.36 +#include "SerializationExportWrapperForCpp.hpp" +CHASTE_CLASS_EXPORT(Cellsachse_moreno_abildskov_2008_bFromCellMLBackwardEuler) + diff --git a/chaste_codegen/tests/numerical/baseline/BE/sachse_moreno_abildskov_2008_b.hpp b/chaste_codegen/tests/numerical/baseline/BE/sachse_moreno_abildskov_2008_b.hpp new file mode 100644 index 00000000..6014b319 --- /dev/null +++ b/chaste_codegen/tests/numerical/baseline/BE/sachse_moreno_abildskov_2008_b.hpp @@ -0,0 +1,86 @@ +#ifndef CELLSACHSE_MORENO_ABILDSKOV_2008_BFROMCELLMLBACKWARDEULER_HPP_ +#define CELLSACHSE_MORENO_ABILDSKOV_2008_BFROMCELLMLBACKWARDEULER_HPP_ + +//! @file +//! +//! This source file was generated from CellML by chaste_codegen version (version omitted as unimportant) +//! +//! Model: sachse_model_2007 +//! +//! Processed by chaste_codegen: https://github.com/ModellingWebLab/chaste-codegen +//! (translator: chaste_codegen, model type: BackwardEuler) +//! on (date omitted as unimportant) +//! +//! + +#include "ChasteSerialization.hpp" +#include +#include "AbstractStimulusFunction.hpp" +#include "AbstractBackwardEulerCardiacCell.hpp" + +class Cellsachse_moreno_abildskov_2008_bFromCellMLBackwardEuler : public AbstractBackwardEulerCardiacCell<6> +{ + friend class boost::serialization::access; + template + void serialize(Archive & archive, const unsigned int version) + { + archive & boost::serialization::base_object >(*this); + + } + + // + // Settable parameters and readable variables + // + + +private: +const bool is_concentration[7] = {false, false, false, false, false, false, false}; +const bool is_probability[7] = {false, false, false, false, false, false, false}; +public: + + boost::shared_ptr UseCellMLDefaultStimulus(); + Cellsachse_moreno_abildskov_2008_bFromCellMLBackwardEuler(boost::shared_ptr /* unused; should be empty */, boost::shared_ptr pIntracellularStimulus); + ~Cellsachse_moreno_abildskov_2008_bFromCellMLBackwardEuler(); + void VerifyStateVariables(); + double GetIIonic(const std::vector* pStateVariables=NULL);void ComputeResidual(double var_chaste_interface__environment__time_converted, const double rCurrentGuess[6], double rResidual[6]); + void ComputeJacobian(double var_chaste_interface__environment__time_converted, const double rCurrentGuess[6], double rJacobian[6][6]);protected: + void UpdateTransmembranePotential(double var_chaste_interface__environment__time_converted); + void ComputeOneStepExceptVoltage(double var_chaste_interface__environment__time_converted); + + std::vector ComputeDerivedQuantities(double var_chaste_interface__environment__time_converted, const std::vector & rY); +}; + +// Needs to be included last +#include "SerializationExportWrapper.hpp" +CHASTE_CLASS_EXPORT(Cellsachse_moreno_abildskov_2008_bFromCellMLBackwardEuler) + +namespace boost +{ + namespace serialization + { + template + inline void save_construct_data( + Archive & ar, const Cellsachse_moreno_abildskov_2008_bFromCellMLBackwardEuler * t, const unsigned int fileVersion) + { + const boost::shared_ptr p_solver = t->GetSolver(); + const boost::shared_ptr p_stimulus = t->GetStimulusFunction(); + ar << p_solver; + ar << p_stimulus; + } + + template + inline void load_construct_data( + Archive & ar, Cellsachse_moreno_abildskov_2008_bFromCellMLBackwardEuler * t, const unsigned int fileVersion) + { + boost::shared_ptr p_solver; + boost::shared_ptr p_stimulus; + ar >> p_solver; + ar >> p_stimulus; + ::new(t)Cellsachse_moreno_abildskov_2008_bFromCellMLBackwardEuler(p_solver, p_stimulus); + } + + } + +} + +#endif // CELLSACHSE_MORENO_ABILDSKOV_2008_BFROMCELLMLBACKWARDEULER_HPP_ \ No newline at end of file diff --git a/chaste_codegen/tests/numerical/baseline/BE/test_piecewises_be.cpp b/chaste_codegen/tests/numerical/baseline/BE/test_piecewises_be.cpp new file mode 100644 index 00000000..b1ca1bcb --- /dev/null +++ b/chaste_codegen/tests/numerical/baseline/BE/test_piecewises_be.cpp @@ -0,0 +1,216 @@ +//! @file +//! +//! This source file was generated from CellML by chaste_codegen version (version omitted as unimportant) +//! +//! Model: test_piecewise_BE +//! +//! Processed by chaste_codegen: https://github.com/ModellingWebLab/chaste-codegen +//! (translator: chaste_codegen, model type: BackwardEuler) +//! on (date omitted as unimportant) +//! +//! + +#include "CardiacNewtonSolver.hpp" +#include "test_piecewises_be.hpp" +#include +#include +#include +#include +#include "Exception.hpp" +#include "OdeSystemInformation.hpp" +#include "RegularStimulus.hpp" +#include "HeartConfig.hpp" +#include "IsNan.hpp" +#include "MathsCustomFunctions.hpp" + + + + + + + Celltest_piecewises_beFromCellMLBackwardEuler::Celltest_piecewises_beFromCellMLBackwardEuler(boost::shared_ptr /* unused; should be empty */, boost::shared_ptr pIntracellularStimulus) + : AbstractBackwardEulerCardiacCell<2>( + 4, + 0, + pIntracellularStimulus) + { + // Time units: millisecond + // + this->mpSystemInfo = OdeSystemInformation::Instance(); + Init(); + + } + + Celltest_piecewises_beFromCellMLBackwardEuler::~Celltest_piecewises_beFromCellMLBackwardEuler() + { + } + + + void Celltest_piecewises_beFromCellMLBackwardEuler::VerifyStateVariables() + { + std::vector& rY = rGetStateVariables(); + std::string error_message = ""; + + for (unsigned i=0; i < 4; i++) + { + if(std::isnan(rY[i])) + { + error_message += "State variable " + this->rGetStateVariableNames()[i] + " is not a number\n"; + } + if(std::isinf(rY[i])) + { + error_message += "State variable " + this->rGetStateVariableNames()[i] + " has become INFINITE\n"; + } + if(this->is_concentration[i] && rY[i] < 0) + { + error_message += "Concentration " + this->rGetStateVariableNames()[i] + " below 0\n"; + } + if(this->is_probability[i] && rY[i] < 0) + { + error_message += "Probability " + this->rGetStateVariableNames()[i] + " below 0\n"; + } + if(this->is_probability[i] && rY[i] > 1) + { + error_message += "Probability " + this->rGetStateVariableNames()[i] + " above 1\n"; + } + } + if (error_message != ""){ + EXCEPTION(DumpState(error_message)); + } + } + + double Celltest_piecewises_beFromCellMLBackwardEuler::GetIIonic(const std::vector* pStateVariables) + { + // For state variable interpolation (SVI) we read in interpolated state variables, + // otherwise for ionic current interpolation (ICI) we use the state variables of this model (node). + if (!pStateVariables) pStateVariables = &rGetStateVariables(); + const std::vector& rY = *pStateVariables; + + const double var_chaste_interface__i_ionic = 0; // uA_per_cm2 + + const double i_ionic = var_chaste_interface__i_ionic; + EXCEPT_IF_NOT(!std::isnan(i_ionic)); + return i_ionic; + } + + void Celltest_piecewises_beFromCellMLBackwardEuler::ComputeResidual(double var_chaste_interface__environment__time_converted, const double rCurrentGuess[2], double rResidual[2]) + { + std::vector& rY = rGetStateVariables(); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -69.1865 + + //output_nonlinear_state_assignments + double var_chaste_interface__fast_sodium_current_m_gate2__m = rCurrentGuess[0]; + double var_chaste_interface__fast_sodium_current_m_gate__m = rCurrentGuess[1]; + + //output_equations + const double var_fast_sodium_current_m_gate__alpha_m = ((fabs(pow(var_chaste_interface__fast_sodium_current_m_gate__m, 2) * var_chaste_interface__membrane__V) < 0) ? (2000) : (200 * var_chaste_interface__membrane__V / (1 - exp(-0.10000000000000001 * var_chaste_interface__membrane__V)))); // per_second + const double var_fast_sodium_current_m_gate__m_orig_deriv = var_fast_sodium_current_m_gate__alpha_m; // 1 / second + const double d_dt_chaste_interface_var_fast_sodium_current_m_gate__m = 0.001 * var_fast_sodium_current_m_gate__m_orig_deriv; // 1 / millisecond + const double var_fast_sodium_current_m_gate2__alpha_m = ((fabs(var_chaste_interface__membrane__V) < 0) ? (2000 * pow(var_chaste_interface__fast_sodium_current_m_gate2__m, 2)) : (200 * var_chaste_interface__membrane__V / (1 - exp(-0.10000000000000001 * var_chaste_interface__membrane__V)))); // per_second + const double var_fast_sodium_current_m_gate2__m_orig_deriv = var_fast_sodium_current_m_gate2__alpha_m; // 1 / second + const double d_dt_chaste_interface_var_fast_sodium_current_m_gate2__m = 0.001 * var_fast_sodium_current_m_gate2__m_orig_deriv; // 1 / millisecond + + rResidual[1] = rCurrentGuess[1] - rY[2] - mDt*d_dt_chaste_interface_var_fast_sodium_current_m_gate__m; + rResidual[0] = rCurrentGuess[0] - rY[3] - mDt*d_dt_chaste_interface_var_fast_sodium_current_m_gate2__m; + } + + void Celltest_piecewises_beFromCellMLBackwardEuler::ComputeJacobian(double var_chaste_interface__environment__time_converted, const double rCurrentGuess[2], double rJacobian[2][2]) + { + std::vector& rY = rGetStateVariables(); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -69.1865 + + double var_chaste_interface__fast_sodium_current_m_gate2__m = rCurrentGuess[0]; + + + + rJacobian[0][0] = 1.0 - (mDt * (0.001 * ((fabs(var_chaste_interface__membrane__V) < 0) ? (4000 * var_chaste_interface__fast_sodium_current_m_gate2__m) : (0)))); + rJacobian[0][1] = 0.0; + rJacobian[1][0] = 0.0; + rJacobian[1][1] = 1.0; + } + + void Celltest_piecewises_beFromCellMLBackwardEuler::UpdateTransmembranePotential(double var_chaste_interface__environment__time_converted) + { + // Time units: millisecond + std::vector& rY = rGetStateVariables(); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -69.1865 + + const double var_membrane__V_orig_deriv = var_chaste_interface__membrane__V; // millivolt / second + const double d_dt_chaste_interface_var_membrane__V = 0.001 * var_membrane__V_orig_deriv; // millivolt / millisecond + + rY[0] += mDt*d_dt_chaste_interface_var_membrane__V; + } + + void Celltest_piecewises_beFromCellMLBackwardEuler::ComputeOneStepExceptVoltage(double var_chaste_interface__environment__time_converted) + { + // Time units: millisecond + std::vector& rY = rGetStateVariables(); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -69.1865 + double var_chaste_interface__fast_sodium_current_h_gate__h = rY[1]; + // Units: dimensionless; Initial value: 0.1969 + + + + rY[1] = (var_chaste_interface__fast_sodium_current_h_gate__h + ((((var_chaste_interface__membrane__V > 9999999) ? (0.001 * var_chaste_interface__membrane__V) : (0))) * mDt)) / (1.0 - ((0.001) * mDt)); + + double _guess[2] = {rY[3],rY[2]}; + CardiacNewtonSolver<2,Celltest_piecewises_beFromCellMLBackwardEuler>* _p_solver = CardiacNewtonSolver<2,Celltest_piecewises_beFromCellMLBackwardEuler>::Instance(); + _p_solver->Solve(*this, var_chaste_interface__environment__time_converted, _guess); + rY[3] = _guess[0]; + rY[2] = _guess[1]; + } + + std::vector Celltest_piecewises_beFromCellMLBackwardEuler::ComputeDerivedQuantities(double var_chaste_interface__environment__time_converted, const std::vector & rY) + { + // Inputs: + // Time units: millisecond + + // Mathematics + + std::vector dqs(1); + dqs[0] = var_chaste_interface__environment__time_converted; + return dqs; + } + +template<> +void OdeSystemInformation::Initialise(void) +{ + this->mSystemName = "test_piecewise_BE"; + this->mFreeVariableName = "environment__time"; + this->mFreeVariableUnits = "millisecond"; + + // rY[0]: + this->mVariableNames.push_back("membrane_voltage"); + this->mVariableUnits.push_back("millivolt"); + this->mInitialConditions.push_back(-69.1865); + + // rY[1]: + this->mVariableNames.push_back("fast_sodium_current_h_gate__h"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.1969); + + // rY[2]: + this->mVariableNames.push_back("fast_sodium_current_m_gate__m"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.0365); + + // rY[3]: + this->mVariableNames.push_back("fast_sodium_current_m_gate2__m"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.0365); + + // Derived Quantity index [0]: + this->mDerivedQuantityNames.push_back("environment__time"); + this->mDerivedQuantityUnits.push_back("millisecond"); + + this->mInitialised = true; +} + +// Serialization for Boost >= 1.36 +#include "SerializationExportWrapperForCpp.hpp" +CHASTE_CLASS_EXPORT(Celltest_piecewises_beFromCellMLBackwardEuler) + diff --git a/chaste_codegen/tests/numerical/baseline/BE/test_piecewises_be.hpp b/chaste_codegen/tests/numerical/baseline/BE/test_piecewises_be.hpp new file mode 100644 index 00000000..4a89bba7 --- /dev/null +++ b/chaste_codegen/tests/numerical/baseline/BE/test_piecewises_be.hpp @@ -0,0 +1,85 @@ +#ifndef CELLTEST_PIECEWISES_BEFROMCELLMLBACKWARDEULER_HPP_ +#define CELLTEST_PIECEWISES_BEFROMCELLMLBACKWARDEULER_HPP_ + +//! @file +//! +//! This source file was generated from CellML by chaste_codegen version (version omitted as unimportant) +//! +//! Model: test_piecewise_BE +//! +//! Processed by chaste_codegen: https://github.com/ModellingWebLab/chaste-codegen +//! (translator: chaste_codegen, model type: BackwardEuler) +//! on (date omitted as unimportant) +//! +//! + +#include "ChasteSerialization.hpp" +#include +#include "AbstractStimulusFunction.hpp" +#include "AbstractBackwardEulerCardiacCell.hpp" + +class Celltest_piecewises_beFromCellMLBackwardEuler : public AbstractBackwardEulerCardiacCell<2> +{ + friend class boost::serialization::access; + template + void serialize(Archive & archive, const unsigned int version) + { + archive & boost::serialization::base_object >(*this); + + } + + // + // Settable parameters and readable variables + // + + +private: +const bool is_concentration[4] = {false, false, false, false}; +const bool is_probability[4] = {false, false, false, false}; +public: + + Celltest_piecewises_beFromCellMLBackwardEuler(boost::shared_ptr /* unused; should be empty */, boost::shared_ptr pIntracellularStimulus); + ~Celltest_piecewises_beFromCellMLBackwardEuler(); + void VerifyStateVariables(); + double GetIIonic(const std::vector* pStateVariables=NULL);void ComputeResidual(double var_chaste_interface__environment__time_converted, const double rCurrentGuess[2], double rResidual[2]); + void ComputeJacobian(double var_chaste_interface__environment__time_converted, const double rCurrentGuess[2], double rJacobian[2][2]);protected: + void UpdateTransmembranePotential(double var_chaste_interface__environment__time_converted); + void ComputeOneStepExceptVoltage(double var_chaste_interface__environment__time_converted); + + std::vector ComputeDerivedQuantities(double var_chaste_interface__environment__time_converted, const std::vector & rY); +}; + +// Needs to be included last +#include "SerializationExportWrapper.hpp" +CHASTE_CLASS_EXPORT(Celltest_piecewises_beFromCellMLBackwardEuler) + +namespace boost +{ + namespace serialization + { + template + inline void save_construct_data( + Archive & ar, const Celltest_piecewises_beFromCellMLBackwardEuler * t, const unsigned int fileVersion) + { + const boost::shared_ptr p_solver = t->GetSolver(); + const boost::shared_ptr p_stimulus = t->GetStimulusFunction(); + ar << p_solver; + ar << p_stimulus; + } + + template + inline void load_construct_data( + Archive & ar, Celltest_piecewises_beFromCellMLBackwardEuler * t, const unsigned int fileVersion) + { + boost::shared_ptr p_solver; + boost::shared_ptr p_stimulus; + ar >> p_solver; + ar >> p_stimulus; + ::new(t)Celltest_piecewises_beFromCellMLBackwardEuler(p_solver, p_stimulus); + } + + } + +} + +#endif // CELLTEST_PIECEWISES_BEFROMCELLMLBACKWARDEULER_HPP_ \ No newline at end of file diff --git a/chaste_codegen/tests/numerical/baseline/BEopt/bondarenko_szigeti_bett_kim_rasmusson_2004_apical.cpp b/chaste_codegen/tests/numerical/baseline/BEopt/bondarenko_szigeti_bett_kim_rasmusson_2004_apical.cpp new file mode 100644 index 00000000..2b07a92a --- /dev/null +++ b/chaste_codegen/tests/numerical/baseline/BEopt/bondarenko_szigeti_bett_kim_rasmusson_2004_apical.cpp @@ -0,0 +1,2806 @@ +//! @file +//! +//! This source file was generated from CellML by chaste_codegen version (version omitted as unimportant) +//! +//! Model: bondarenko_2004_apical +//! +//! Processed by chaste_codegen: https://github.com/ModellingWebLab/chaste-codegen +//! (translator: chaste_codegen, model type: BackwardEulerOpt) +//! on (date omitted as unimportant) +//! +//! + +#include "CardiacNewtonSolver.hpp" +#include "bondarenko_szigeti_bett_kim_rasmusson_2004_apical.hpp" +#include +#include +#include +#include +#include "Exception.hpp" +#include "OdeSystemInformation.hpp" +#include "RegularStimulus.hpp" +#include "HeartConfig.hpp" +#include "IsNan.hpp" +#include "MathsCustomFunctions.hpp" + + + +class Cellbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLBackwardEulerOpt_LookupTables : public AbstractLookupTableCollection +{ +public: + static Cellbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLBackwardEulerOpt_LookupTables* Instance() + { + if (mpInstance.get() == NULL) + { + mpInstance.reset(new Cellbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLBackwardEulerOpt_LookupTables); + } + return mpInstance.get(); + } + + void FreeMemory() + { + + if (_lookup_table_0) + { + delete[] _lookup_table_0; + _lookup_table_0 = NULL; + } + + mNeedsRegeneration.assign(mNeedsRegeneration.size(), true); + } + + // Row lookup methods + // using linear-interpolation + + double* _lookup_0_row(unsigned i, double _factor_) + { + for (unsigned j=0; j<47; j++) + { + const double y1 = _lookup_table_0[i][j]; + const double y2 = _lookup_table_0[i+1][j]; + _lookup_table_0_row[j] = y1 + (y2-y1)*_factor_; + } + return _lookup_table_0_row; + } + + + const double * IndexTable0(double var_chaste_interface__membrane__V) + { + const double _offset_0 = var_chaste_interface__membrane__V - mTableMins[0]; + const double _offset_0_over_table_step = _offset_0 * mTableStepInverses[0]; + const unsigned _table_index_0 = (unsigned)(_offset_0_over_table_step); + const double _factor_0 = _offset_0_over_table_step - _table_index_0; + const double* const _lt_0_row = Cellbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLBackwardEulerOpt_LookupTables::Instance()->_lookup_0_row(_table_index_0, _factor_0); + return _lt_0_row; + } + + +// LCOV_EXCL_START + bool CheckIndex0(double& var_chaste_interface__membrane__V) + { + bool _oob_0 = false; + if (var_chaste_interface__membrane__V>mTableMaxs[0] || var_chaste_interface__membrane__V= -26.500000781250002) && (var_chaste_interface__membrane__V <= -26.499999218749998)) ? (-3.7604140624912359e-12 / (1 - exp(9.9999999999766942e-8)) + 640000.00000149151 * (26.500000781250002 + var_chaste_interface__membrane__V) * (3.7604140624912359e-12 / (1 - exp(9.9999999999766942e-8)) + 3.7604140624912359e-12 / (1 - exp(-9.9999999999766942e-8)))) : (4.8133299999999997e-6 * (26.5 + var_chaste_interface__membrane__V) / (1 - exp(-3.3919999999999999 - 0.128 * var_chaste_interface__membrane__V)))); + }; + const double var_chaste_interface__membrane__V = mTableMins[0] + i*mTableSteps[0]; + double val = f(var_chaste_interface__membrane__V); + //Expressions which are part of a piecewise could be inf / nan, this is generally accptable, due to the piecewise, however occasionally interpolation of the lookup table from a nan/inf version can give problems. + //To avoid this values stored in the table are intrpolated. Occurances of this to at most 2 per expression. + if (!std::isfinite(val) && _lookup_table_0_num_misshit_piecewise[29] < 2){ + double left = f(var_chaste_interface__membrane__V - mTableSteps[0]); + double right = f(var_chaste_interface__membrane__V + mTableSteps[0]); + val = (left + right) / 2.0; + // count and limit number of misshits + _lookup_table_0_num_misshit_piecewise[29] +=1; + } + else if (!std::isfinite(val) && _lookup_table_0_num_misshit_piecewise[29] >= 2){ + EXCEPTION("Lookup table 29 at ["< mpInstance; + + // Row lookup methods memory + double _lookup_table_0_row[47]; + + // Lookup tables + double (*_lookup_table_0)[47]; + int _lookup_table_0_num_misshit_piecewise[47] = {0}; + +}; + +std::shared_ptr Cellbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLBackwardEulerOpt_LookupTables::mpInstance; + + + boost::shared_ptr Cellbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLBackwardEulerOpt::UseCellMLDefaultStimulus() + { + // Use the default stimulus specified by CellML metadata + const double var_chaste_interface__membrane__stim_amplitude_converted = -80 * HeartConfig::Instance()->GetCapacitance(); // uA_per_cm2 + const double var_chaste_interface__membrane__stim_duration = 0.5; // millisecond + const double var_chaste_interface__membrane__stim_period = 71.430000000000007; // millisecond + const double var_chaste_interface__membrane__stim_start = 0; // millisecond + boost::shared_ptr p_cellml_stim(new RegularStimulus( + -fabs(var_chaste_interface__membrane__stim_amplitude_converted), + var_chaste_interface__membrane__stim_duration, + var_chaste_interface__membrane__stim_period, + var_chaste_interface__membrane__stim_start + )); + mpIntracellularStimulus = p_cellml_stim; + return p_cellml_stim; + } + double Cellbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLBackwardEulerOpt::GetIntracellularCalciumConcentration() + { + return mStateVariables[1]; + } + Cellbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLBackwardEulerOpt::Cellbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLBackwardEulerOpt(boost::shared_ptr /* unused; should be empty */, boost::shared_ptr pIntracellularStimulus) + : AbstractBackwardEulerCardiacCell<32>( + 41, + 0, + pIntracellularStimulus) + { + // Time units: millisecond + // + this->mpSystemInfo = OdeSystemInformation::Instance(); + Init(); + + // We have a default stimulus specified in the CellML file metadata + this->mHasDefaultStimulusFromCellML = true; + + this->mParameters[0] = 1.7399999999999999e-5; // (var_calcium_fluxes__v2) [per_millisecond] + this->mParameters[1] = 4.5; // (var_calcium_fluxes__v1) [per_millisecond] + this->mParameters[2] = 0.45000000000000001; // (var_calcium_fluxes__v3) [micromolar_per_millisecond] + this->mParameters[3] = 1; // (var_sodium_concentration__conc_clamp) [dimensionless] + this->mParameters[4] = 1800; // (var_membrane__Cao) [micromolar] + this->mParameters[5] = 5400; // (var_membrane__Ko) [micromolar] + this->mParameters[6] = 140000; // (var_membrane__Nao) [micromolar] + this->mParameters[7] = 0.1729; // (var_L_type_calcium_current__g_CaL) [milliS_per_microF] + this->mParameters[8] = 1; // (var_membrane__Cm) [microF_per_cm2] + this->mParameters[9] = 13; // (var_fast_sodium_current__g_Na) [milliS_per_microF] + this->mParameters[10] = 0; // (var_fast_sodium_current__shift_INa_inact) [millivolt] + this->mParameters[11] = 0.29380000000000001; // (var_time_independent_potassium_current__g_K1) [milliS_per_microF] + this->mParameters[12] = 0.050000000000000003; // (var_non_inactivating_steady_state_potassium_current__g_Kss) [milliS_per_microF] + this->mParameters[13] = 0.078; // (var_rapid_delayed_rectifier_potassium_current__g_Kr) [milliS_per_microF] + this->mParameters[14] = 0.0057499999999999999; // (var_slow_delayed_rectifier_potassium_current__g_Ks) [milliS_per_microF] + this->mParameters[15] = 292.80000000000001; // (var_sodium_calcium_exchange_current__k_NaCa) [picoA_per_picoF] + this->mParameters[16] = 0.40670000000000001; // (var_fast_transient_outward_potassium_current__g_Kto_f) [milliS_per_microF] + } + + Cellbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLBackwardEulerOpt::~Cellbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLBackwardEulerOpt() + { + } + + AbstractLookupTableCollection* Cellbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLBackwardEulerOpt::GetLookupTableCollection() + { + return Cellbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLBackwardEulerOpt_LookupTables::Instance(); + } + + void Cellbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLBackwardEulerOpt::VerifyStateVariables() + { + std::vector& rY = rGetStateVariables(); + std::string error_message = ""; + + for (unsigned i=0; i < 41; i++) + { + if(std::isnan(rY[i])) + { + error_message += "State variable " + this->rGetStateVariableNames()[i] + " is not a number\n"; + } + if(std::isinf(rY[i])) + { + error_message += "State variable " + this->rGetStateVariableNames()[i] + " has become INFINITE\n"; + } + if(this->is_concentration[i] && rY[i] < 0) + { + error_message += "Concentration " + this->rGetStateVariableNames()[i] + " below 0\n"; + } + if(this->is_probability[i] && rY[i] < 0) + { + error_message += "Probability " + this->rGetStateVariableNames()[i] + " below 0\n"; + } + if(this->is_probability[i] && rY[i] > 1) + { + error_message += "Probability " + this->rGetStateVariableNames()[i] + " above 1\n"; + } + } + if (error_message != ""){ + EXCEPTION(DumpState(error_message)); + } + } + + double Cellbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLBackwardEulerOpt::GetIIonic(const std::vector* pStateVariables) + { + // For state variable interpolation (SVI) we read in interpolated state variables, + // otherwise for ionic current interpolation (ICI) we use the state variables of this model (node). + if (!pStateVariables) pStateVariables = &rGetStateVariables(); + const std::vector& rY = *pStateVariables; + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -82.4202 + double var_chaste_interface__calcium_concentration__Cai_converted = rY[1]; + // Units: millimolar; Initial value: 0.000115001 + double var_chaste_interface__L_type_calcium_current__O = rY[11]; + // Units: dimensionless; Initial value: 9.30308e-19 + double var_chaste_interface__sodium_concentration__Nai = rY[18]; + // Units: micromolar; Initial value: 14237.1 + double var_chaste_interface__fast_sodium_current__O_Na = rY[19]; + // Units: dimensionless; Initial value: 7.13483e-07 + double var_chaste_interface__potassium_concentration__Ki = rY[27]; + // Units: micromolar; Initial value: 143720.0 + double var_chaste_interface__fast_transient_outward_potassium_current__ato_f = rY[28]; + // Units: dimensionless; Initial value: 0.00265563 + double var_chaste_interface__fast_transient_outward_potassium_current__ito_f = rY[29]; + // Units: dimensionless; Initial value: 0.999977 + double var_chaste_interface__slow_delayed_rectifier_potassium_current__nKs = rY[32]; + // Units: dimensionless; Initial value: 0.000262753 + double var_chaste_interface__ultra_rapidly_activating_delayed_rectifier_potassium_current__aur = rY[33]; + // Units: dimensionless; Initial value: 0.000417069 + double var_chaste_interface__ultra_rapidly_activating_delayed_rectifier_potassium_current__iur = rY[34]; + // Units: dimensionless; Initial value: 0.998543 + double var_chaste_interface__non_inactivating_steady_state_potassium_current__aKss = rY[35]; + // Units: dimensionless; Initial value: 0.000417069 + double var_chaste_interface__non_inactivating_steady_state_potassium_current__iKss = rY[36]; + // Units: dimensionless; Initial value: 1.0 + double var_chaste_interface__rapid_delayed_rectifier_potassium_current__O_K = rY[37]; + // Units: dimensionless; Initial value: 0.000175298 + + // Lookup table indexing + const bool _oob_0 = Cellbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLBackwardEulerOpt_LookupTables::Instance()->CheckIndex0(var_chaste_interface__membrane__V); +// LCOV_EXCL_START + if (_oob_0) + EXCEPTION(DumpState("membrane_voltage outside lookup table range", rY)); +// LCOV_EXCL_STOP + const double* const _lt_0_row = Cellbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLBackwardEulerOpt_LookupTables::Instance()->IndexTable0(var_chaste_interface__membrane__V); + + const double var_calcium_concentration__Cai = 1000 * var_chaste_interface__calcium_concentration__Cai_converted; // micromolar + const double var_calcium_pump_current__i_pCa = pow(var_calcium_concentration__Cai, 2) / (0.25 + pow(var_calcium_concentration__Cai, 2)); // picoA_per_picoF + const double var_L_type_calcium_current__i_CaL_converted = (-63 + var_chaste_interface__membrane__V) * HeartConfig::Instance()->GetCapacitance() * var_chaste_interface__L_type_calcium_current__O * mParameters[7]; // uA_per_cm2 + const double var_calcium_activated_chloride_current__i_ClCa = 2 * (40 + var_chaste_interface__membrane__V) * var_calcium_concentration__Cai / ((_lt_0_row[0]) * (10 + var_calcium_concentration__Cai)); // picoA_per_picoF + const double var_calcium_background_current__i_Cab = 0.00036699999999999998 * var_chaste_interface__membrane__V - 0.0047112379481865285 * log(mParameters[4] / var_calcium_concentration__Cai); // picoA_per_picoF + const double var_fast_transient_outward_potassium_current__E_K = 25.674321243523316 * log(mParameters[5] / var_chaste_interface__potassium_concentration__Ki); // millivolt + const double var_fast_transient_outward_potassium_current__i_Kto_f_converted = pow(var_chaste_interface__fast_transient_outward_potassium_current__ato_f, 3) * (-var_fast_transient_outward_potassium_current__E_K + var_chaste_interface__membrane__V) * HeartConfig::Instance()->GetCapacitance() * mParameters[16] * var_chaste_interface__fast_transient_outward_potassium_current__ito_f; // uA_per_cm2 + const double var_non_inactivating_steady_state_potassium_current__i_Kss_converted = (-var_fast_transient_outward_potassium_current__E_K + var_chaste_interface__membrane__V) * HeartConfig::Instance()->GetCapacitance() * var_chaste_interface__non_inactivating_steady_state_potassium_current__aKss * mParameters[12] * var_chaste_interface__non_inactivating_steady_state_potassium_current__iKss; // uA_per_cm2 + const double var_slow_delayed_rectifier_potassium_current__i_Ks_converted = pow(var_chaste_interface__slow_delayed_rectifier_potassium_current__nKs, 2) * (-var_fast_transient_outward_potassium_current__E_K + var_chaste_interface__membrane__V) * HeartConfig::Instance()->GetCapacitance() * mParameters[14]; // uA_per_cm2 + const double var_slow_transient_outward_potassium_current__i_Kto_s = 0; // picoA_per_picoF + const double var_fast_sodium_current__E_Na = 25.674321243523316 * log((mParameters[6] + 0.1111111111111111 * mParameters[5]) / (var_chaste_interface__sodium_concentration__Nai + 0.1111111111111111 * var_chaste_interface__potassium_concentration__Ki)); // millivolt + const double var_fast_sodium_current__i_Na_converted = (-var_fast_sodium_current__E_Na + var_chaste_interface__membrane__V) * HeartConfig::Instance()->GetCapacitance() * var_chaste_interface__fast_sodium_current__O_Na * mParameters[9]; // uA_per_cm2 + const double var_rapid_delayed_rectifier_potassium_current__i_Kr_converted = (-25.674321243523316 * log((mParameters[5] + 0.020408163265306124 * mParameters[6]) / (var_chaste_interface__potassium_concentration__Ki + 0.020408163265306124 * var_chaste_interface__sodium_concentration__Nai)) + var_chaste_interface__membrane__V) * HeartConfig::Instance()->GetCapacitance() * var_chaste_interface__rapid_delayed_rectifier_potassium_current__O_K * mParameters[13]; // uA_per_cm2 + const double var_sodium_background_current__i_Nab = 0.0025999999999999999 * var_chaste_interface__membrane__V - 0.0025999999999999999 * var_fast_sodium_current__E_Na; // picoA_per_picoF + const double var_sodium_calcium_exchange_current__i_NaCa_converted = (pow(var_chaste_interface__sodium_concentration__Nai, 3) * mParameters[4] * _lt_0_row[1] - pow(mParameters[6], 3) * var_calcium_concentration__Cai * _lt_0_row[2]) * HeartConfig::Instance()->GetCapacitance() * mParameters[15] / ((_lt_0_row[3]) * (1380 + mParameters[4]) * (669921875000000.0 + pow(mParameters[6], 3))); // uA_per_cm2 + const double var_sodium_potassium_pump_current__i_NaK = 0.88 * mParameters[5] / ((1 + 3043189.1166997822 * pow((1 / var_chaste_interface__sodium_concentration__Nai), 1.5)) * (1500 + mParameters[5]) * (1 + _lt_0_row[5] + 0.036499999999999998 * (-0.14285714285714285 + 0.14285714285714285 * exp(1.4858841010401188e-5 * mParameters[6])) * _lt_0_row[4])); // picoA_per_picoF + const double var_time_independent_potassium_current__i_K1_converted = (-var_fast_transient_outward_potassium_current__E_K + var_chaste_interface__membrane__V) * HeartConfig::Instance()->GetCapacitance() * mParameters[5] * mParameters[11] / ((1 + exp(0.089599999999999999 * var_chaste_interface__membrane__V - 0.089599999999999999 * var_fast_transient_outward_potassium_current__E_K)) * (210 + mParameters[5])); // uA_per_cm2 + const double var_ultra_rapidly_activating_delayed_rectifier_potassium_current__i_Kur = 0.16 * (-var_fast_transient_outward_potassium_current__E_K + var_chaste_interface__membrane__V) * var_chaste_interface__ultra_rapidly_activating_delayed_rectifier_potassium_current__aur * var_chaste_interface__ultra_rapidly_activating_delayed_rectifier_potassium_current__iur; // picoA_per_picoF + const double var_chaste_interface__i_ionic = HeartConfig::Instance()->GetCapacitance() * var_calcium_activated_chloride_current__i_ClCa + HeartConfig::Instance()->GetCapacitance() * var_calcium_background_current__i_Cab + HeartConfig::Instance()->GetCapacitance() * var_calcium_pump_current__i_pCa + HeartConfig::Instance()->GetCapacitance() * var_slow_transient_outward_potassium_current__i_Kto_s + HeartConfig::Instance()->GetCapacitance() * var_sodium_background_current__i_Nab + HeartConfig::Instance()->GetCapacitance() * var_sodium_potassium_pump_current__i_NaK + HeartConfig::Instance()->GetCapacitance() * var_ultra_rapidly_activating_delayed_rectifier_potassium_current__i_Kur + var_L_type_calcium_current__i_CaL_converted + var_fast_sodium_current__i_Na_converted + var_fast_transient_outward_potassium_current__i_Kto_f_converted + var_non_inactivating_steady_state_potassium_current__i_Kss_converted + var_rapid_delayed_rectifier_potassium_current__i_Kr_converted + var_slow_delayed_rectifier_potassium_current__i_Ks_converted + var_sodium_calcium_exchange_current__i_NaCa_converted + var_time_independent_potassium_current__i_K1_converted; // uA_per_cm2 + + const double i_ionic = var_chaste_interface__i_ionic; + EXCEPT_IF_NOT(!std::isnan(i_ionic)); + return i_ionic; + } + + void Cellbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLBackwardEulerOpt::ComputeResidual(double var_chaste_interface__environment__time, const double rCurrentGuess[32], double rResidual[32]) + { + std::vector& rY = rGetStateVariables(); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -82.4202 + double var_chaste_interface__fast_transient_outward_potassium_current__ato_f = rY[28]; + // Units: dimensionless; Initial value: 0.00265563 + double var_chaste_interface__fast_transient_outward_potassium_current__ito_f = rY[29]; + // Units: dimensionless; Initial value: 0.999977 + double var_chaste_interface__slow_delayed_rectifier_potassium_current__nKs = rY[32]; + // Units: dimensionless; Initial value: 0.000262753 + double var_chaste_interface__ultra_rapidly_activating_delayed_rectifier_potassium_current__aur = rY[33]; + // Units: dimensionless; Initial value: 0.000417069 + double var_chaste_interface__ultra_rapidly_activating_delayed_rectifier_potassium_current__iur = rY[34]; + // Units: dimensionless; Initial value: 0.998543 + double var_chaste_interface__non_inactivating_steady_state_potassium_current__aKss = rY[35]; + // Units: dimensionless; Initial value: 0.000417069 + + //output_nonlinear_state_assignments + double var_chaste_interface__L_type_calcium_current__C2 = rCurrentGuess[0]; + double var_chaste_interface__L_type_calcium_current__C3 = rCurrentGuess[1]; + double var_chaste_interface__L_type_calcium_current__C4 = rCurrentGuess[2]; + double var_chaste_interface__L_type_calcium_current__I1 = rCurrentGuess[3]; + double var_chaste_interface__L_type_calcium_current__I2 = rCurrentGuess[4]; + double var_chaste_interface__L_type_calcium_current__I3 = rCurrentGuess[5]; + double var_chaste_interface__L_type_calcium_current__O = rCurrentGuess[6]; + double var_chaste_interface__calcium_buffering__HTRPN_Ca = rCurrentGuess[7]; + double var_chaste_interface__calcium_buffering__LTRPN_Ca = rCurrentGuess[8]; + double var_chaste_interface__calcium_concentration__CaJSR = rCurrentGuess[9]; + double var_chaste_interface__calcium_concentration__CaNSR = rCurrentGuess[10]; + double var_chaste_interface__calcium_concentration__Cai_converted = rCurrentGuess[11]; + double var_chaste_interface__calcium_concentration__Cass = rCurrentGuess[12]; + double var_chaste_interface__calcium_fluxes__P_RyR = rCurrentGuess[13]; + double var_chaste_interface__fast_sodium_current__C_Na1 = rCurrentGuess[14]; + double var_chaste_interface__fast_sodium_current__C_Na2 = rCurrentGuess[15]; + double var_chaste_interface__fast_sodium_current__I1_Na = rCurrentGuess[16]; + double var_chaste_interface__fast_sodium_current__I2_Na = rCurrentGuess[17]; + double var_chaste_interface__fast_sodium_current__IC_Na2 = rCurrentGuess[18]; + double var_chaste_interface__fast_sodium_current__IC_Na3 = rCurrentGuess[19]; + double var_chaste_interface__fast_sodium_current__IF_Na = rCurrentGuess[20]; + double var_chaste_interface__fast_sodium_current__O_Na = rCurrentGuess[21]; + double var_chaste_interface__non_inactivating_steady_state_potassium_current__iKss = rCurrentGuess[22]; + double var_chaste_interface__potassium_concentration__Ki = rCurrentGuess[23]; + double var_chaste_interface__rapid_delayed_rectifier_potassium_current__C_K1 = rCurrentGuess[24]; + double var_chaste_interface__rapid_delayed_rectifier_potassium_current__C_K2 = rCurrentGuess[25]; + double var_chaste_interface__rapid_delayed_rectifier_potassium_current__I_K = rCurrentGuess[26]; + double var_chaste_interface__rapid_delayed_rectifier_potassium_current__O_K = rCurrentGuess[27]; + double var_chaste_interface__ryanodine_receptors__P_C2 = rCurrentGuess[28]; + double var_chaste_interface__ryanodine_receptors__P_O1 = rCurrentGuess[29]; + double var_chaste_interface__ryanodine_receptors__P_O2 = rCurrentGuess[30]; + double var_chaste_interface__sodium_concentration__Nai = rCurrentGuess[31]; + + // Lookup table indexing + const bool _oob_0 = Cellbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLBackwardEulerOpt_LookupTables::Instance()->CheckIndex0(var_chaste_interface__membrane__V); +// LCOV_EXCL_START + if (_oob_0) + EXCEPTION(DumpState("membrane_voltage outside lookup table range", rY , var_chaste_interface__environment__time)); +// LCOV_EXCL_STOP + const double* const _lt_0_row = Cellbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLBackwardEulerOpt_LookupTables::Instance()->IndexTable0(var_chaste_interface__membrane__V); + + //output_equations + const double d_dt_chaste_interface_var_non_inactivating_steady_state_potassium_current__iKss = 0; // 1 / millisecond + const double var_calcium_concentration__Cai = 1000 * var_chaste_interface__calcium_concentration__Cai_converted; // micromolar + const double var_L_type_calcium_current__gamma = 0.23324 * var_chaste_interface__calcium_concentration__Cass / (20 + var_chaste_interface__calcium_concentration__Cass); // per_millisecond + const double d_dt_chaste_interface_var_calcium_buffering__HTRPN_Ca = -3.1999999999999999e-5 * var_chaste_interface__calcium_buffering__HTRPN_Ca + 0.0023700000000000001 * (140 - var_chaste_interface__calcium_buffering__HTRPN_Ca) * var_calcium_concentration__Cai; // micromolar / millisecond + const double d_dt_chaste_interface_var_calcium_buffering__LTRPN_Ca = -0.019599999999999999 * var_chaste_interface__calcium_buffering__LTRPN_Ca + 0.0327 * (70 - var_chaste_interface__calcium_buffering__LTRPN_Ca) * var_calcium_concentration__Cai; // micromolar / millisecond + const double var_calcium_fluxes__J_tr = 0.050000000000000003 * var_chaste_interface__calcium_concentration__CaNSR - 0.050000000000000003 * var_chaste_interface__calcium_concentration__CaJSR; // micromolar_per_millisecond + const double var_calcium_fluxes__J_xfer = 0.125 * var_chaste_interface__calcium_concentration__Cass - 0.125 * var_calcium_concentration__Cai; // micromolar_per_millisecond + const double var_calcium_fluxes__J_leak = (-var_calcium_concentration__Cai + var_chaste_interface__calcium_concentration__CaNSR) * mParameters[0]; // micromolar_per_millisecond + const double var_calcium_fluxes__J_up = pow(var_calcium_concentration__Cai, 2) * mParameters[2] / (0.25 + pow(var_calcium_concentration__Cai, 2)); // micromolar_per_millisecond + const double var_calcium_pump_current__i_pCa = pow(var_calcium_concentration__Cai, 2) / (0.25 + pow(var_calcium_concentration__Cai, 2)); // picoA_per_picoF + const double var_fast_sodium_current__C_Na3 = 1 - var_chaste_interface__fast_sodium_current__C_Na1 - var_chaste_interface__fast_sodium_current__C_Na2 - var_chaste_interface__fast_sodium_current__I1_Na - var_chaste_interface__fast_sodium_current__I2_Na - var_chaste_interface__fast_sodium_current__IC_Na2 - var_chaste_interface__fast_sodium_current__IC_Na3 - var_chaste_interface__fast_sodium_current__IF_Na - var_chaste_interface__fast_sodium_current__O_Na; // dimensionless + const double var_L_type_calcium_current__Kpcf = _lt_0_row[6]; // per_millisecond + const double var_L_type_calcium_current__alpha = _lt_0_row[7]; // per_millisecond + const double var_L_type_calcium_current__beta = _lt_0_row[8]; // per_millisecond + const double d_dt_chaste_interface_var_L_type_calcium_current__C2 = -var_chaste_interface__L_type_calcium_current__C2 * var_L_type_calcium_current__beta + 2 * var_chaste_interface__L_type_calcium_current__C3 * var_L_type_calcium_current__beta + 4 * (1 - var_chaste_interface__L_type_calcium_current__C2 - var_chaste_interface__L_type_calcium_current__C3 - var_chaste_interface__L_type_calcium_current__C4 - var_chaste_interface__L_type_calcium_current__I1 - var_chaste_interface__L_type_calcium_current__I2 - var_chaste_interface__L_type_calcium_current__I3 - var_chaste_interface__L_type_calcium_current__O) * var_L_type_calcium_current__alpha - 3 * var_chaste_interface__L_type_calcium_current__C2 * var_L_type_calcium_current__alpha; // 1 / millisecond + const double d_dt_chaste_interface_var_L_type_calcium_current__C3 = 3 * var_chaste_interface__L_type_calcium_current__C2 * var_L_type_calcium_current__alpha + 3 * var_chaste_interface__L_type_calcium_current__C4 * var_L_type_calcium_current__beta - 2 * var_chaste_interface__L_type_calcium_current__C3 * var_L_type_calcium_current__alpha - 2 * var_chaste_interface__L_type_calcium_current__C3 * var_L_type_calcium_current__beta; // 1 / millisecond + const double d_dt_chaste_interface_var_L_type_calcium_current__C4 = -var_chaste_interface__L_type_calcium_current__C4 * var_L_type_calcium_current__alpha + 2 * var_chaste_interface__L_type_calcium_current__C3 * var_L_type_calcium_current__alpha + 4 * var_chaste_interface__L_type_calcium_current__O * var_L_type_calcium_current__beta + 0.002 * var_chaste_interface__L_type_calcium_current__I3 * var_L_type_calcium_current__beta + 0.0080000000000000002 * var_chaste_interface__L_type_calcium_current__I2 * var_L_type_calcium_current__beta + 2.0000000000000002e-5 * var_chaste_interface__L_type_calcium_current__I1 * var_L_type_calcium_current__beta - 3 * var_chaste_interface__L_type_calcium_current__C4 * var_L_type_calcium_current__beta - 0.002 * var_chaste_interface__L_type_calcium_current__C4 * var_L_type_calcium_current__Kpcf - var_chaste_interface__L_type_calcium_current__C4 * var_L_type_calcium_current__Kpcf * var_L_type_calcium_current__gamma - 0.01 * var_chaste_interface__L_type_calcium_current__C4 * var_L_type_calcium_current__alpha * var_L_type_calcium_current__gamma; // 1 / millisecond + const double d_dt_chaste_interface_var_L_type_calcium_current__I1 = -0.00050000000000000001 * var_chaste_interface__L_type_calcium_current__I1 + var_chaste_interface__L_type_calcium_current__O * var_L_type_calcium_current__gamma + 0.001 * var_chaste_interface__L_type_calcium_current__I3 * var_L_type_calcium_current__alpha - 0.001 * var_chaste_interface__L_type_calcium_current__I1 * var_L_type_calcium_current__Kpcf + 0.01 * var_chaste_interface__L_type_calcium_current__C4 * var_L_type_calcium_current__alpha * var_L_type_calcium_current__gamma - 0.040000000000000001 * var_chaste_interface__L_type_calcium_current__I1 * var_L_type_calcium_current__Kpcf * var_L_type_calcium_current__beta; // 1 / millisecond + const double d_dt_chaste_interface_var_L_type_calcium_current__I2 = 0.00050000000000000001 * var_chaste_interface__L_type_calcium_current__I3 - var_chaste_interface__L_type_calcium_current__I2 * var_L_type_calcium_current__gamma + 0.001 * var_L_type_calcium_current__Kpcf * var_chaste_interface__L_type_calcium_current__O + 0.002 * var_chaste_interface__L_type_calcium_current__C4 * var_L_type_calcium_current__Kpcf - 0.001 * var_chaste_interface__L_type_calcium_current__I2 * var_L_type_calcium_current__alpha - 0.0080000000000000002 * var_chaste_interface__L_type_calcium_current__I2 * var_L_type_calcium_current__beta; // 1 / millisecond + const double d_dt_chaste_interface_var_L_type_calcium_current__I3 = -0.00050000000000000001 * var_chaste_interface__L_type_calcium_current__I3 + var_chaste_interface__L_type_calcium_current__I2 * var_L_type_calcium_current__gamma + 0.001 * var_chaste_interface__L_type_calcium_current__I1 * var_L_type_calcium_current__Kpcf - 0.001 * var_chaste_interface__L_type_calcium_current__I3 * var_L_type_calcium_current__alpha - 0.002 * var_chaste_interface__L_type_calcium_current__I3 * var_L_type_calcium_current__beta + var_chaste_interface__L_type_calcium_current__C4 * var_L_type_calcium_current__Kpcf * var_L_type_calcium_current__gamma; // 1 / millisecond + const double d_dt_chaste_interface_var_L_type_calcium_current__O = 0.00050000000000000001 * var_chaste_interface__L_type_calcium_current__I1 + var_chaste_interface__L_type_calcium_current__C4 * var_L_type_calcium_current__alpha - var_chaste_interface__L_type_calcium_current__O * var_L_type_calcium_current__gamma + 0.001 * var_chaste_interface__L_type_calcium_current__I2 * var_L_type_calcium_current__alpha - 4 * var_chaste_interface__L_type_calcium_current__O * var_L_type_calcium_current__beta - 0.001 * var_L_type_calcium_current__Kpcf * var_chaste_interface__L_type_calcium_current__O; // 1 / millisecond + const double var_L_type_calcium_current__i_CaL = (-63 + var_chaste_interface__membrane__V) * var_chaste_interface__L_type_calcium_current__O * mParameters[7]; // picoA_per_picoF + const double d_dt_chaste_interface_var_calcium_fluxes__P_RyR = -0.040000000000000001 * var_chaste_interface__calcium_fluxes__P_RyR - 0.014285714285714287 * var_L_type_calcium_current__i_CaL * _lt_0_row[9]; // 1 / millisecond + const double var_calcium_background_current__i_Cab = 0.00036699999999999998 * var_chaste_interface__membrane__V - 0.0047112379481865285 * log(mParameters[4] / var_calcium_concentration__Cai); // picoA_per_picoF + const double var_fast_sodium_current__alpha_Na11 = _lt_0_row[10]; // per_millisecond + const double var_fast_sodium_current__alpha_Na12 = _lt_0_row[11]; // per_millisecond + const double var_fast_sodium_current__alpha_Na13 = _lt_0_row[12]; // per_millisecond + const double var_fast_sodium_current__alpha_Na2 = 1 / (0.39395599999999997 + 0.188495 * exp(-0.42168674698795178 + 0.060240963855421679 * mParameters[10] - 0.060240963855421679 * var_chaste_interface__membrane__V)); // per_millisecond + const double var_fast_sodium_current__alpha_Na3 = _lt_0_row[13]; // per_millisecond + const double var_fast_sodium_current__alpha_Na4 = 0.001 * var_fast_sodium_current__alpha_Na2; // per_millisecond + const double var_fast_sodium_current__alpha_Na5 = 1.0526315789473684e-5 * var_fast_sodium_current__alpha_Na2; // per_millisecond + const double var_fast_sodium_current__beta_Na11 = _lt_0_row[14]; // per_millisecond + const double var_fast_sodium_current__beta_Na12 = _lt_0_row[15]; // per_millisecond + const double var_fast_sodium_current__beta_Na13 = _lt_0_row[16]; // per_millisecond + const double var_fast_sodium_current__beta_Na3 = 0.008539999999999999 + 2.0000000000000002e-5 * var_chaste_interface__membrane__V; // per_millisecond + const double d_dt_chaste_interface_var_fast_sodium_current__C_Na1 = var_chaste_interface__fast_sodium_current__C_Na2 * var_fast_sodium_current__alpha_Na12 + var_chaste_interface__fast_sodium_current__IF_Na * var_fast_sodium_current__alpha_Na3 + var_chaste_interface__fast_sodium_current__O_Na * var_fast_sodium_current__beta_Na13 - var_chaste_interface__fast_sodium_current__C_Na1 * var_fast_sodium_current__alpha_Na13 - var_chaste_interface__fast_sodium_current__C_Na1 * var_fast_sodium_current__beta_Na12 - var_chaste_interface__fast_sodium_current__C_Na1 * var_fast_sodium_current__beta_Na3; // 1 / millisecond + const double d_dt_chaste_interface_var_fast_sodium_current__C_Na2 = var_chaste_interface__fast_sodium_current__C_Na1 * var_fast_sodium_current__beta_Na12 + var_fast_sodium_current__C_Na3 * var_fast_sodium_current__alpha_Na11 + var_chaste_interface__fast_sodium_current__IC_Na2 * var_fast_sodium_current__alpha_Na3 - var_chaste_interface__fast_sodium_current__C_Na2 * var_fast_sodium_current__alpha_Na12 - var_chaste_interface__fast_sodium_current__C_Na2 * var_fast_sodium_current__beta_Na11 - var_chaste_interface__fast_sodium_current__C_Na2 * var_fast_sodium_current__beta_Na3; // 1 / millisecond + const double d_dt_chaste_interface_var_fast_sodium_current__IC_Na2 = var_chaste_interface__fast_sodium_current__C_Na2 * var_fast_sodium_current__beta_Na3 + var_chaste_interface__fast_sodium_current__IC_Na3 * var_fast_sodium_current__alpha_Na11 + var_chaste_interface__fast_sodium_current__IF_Na * var_fast_sodium_current__beta_Na12 - var_chaste_interface__fast_sodium_current__IC_Na2 * var_fast_sodium_current__alpha_Na12 - var_chaste_interface__fast_sodium_current__IC_Na2 * var_fast_sodium_current__alpha_Na3 - var_chaste_interface__fast_sodium_current__IC_Na2 * var_fast_sodium_current__beta_Na11; // 1 / millisecond + const double d_dt_chaste_interface_var_fast_sodium_current__IC_Na3 = var_fast_sodium_current__C_Na3 * var_fast_sodium_current__beta_Na3 + var_chaste_interface__fast_sodium_current__IC_Na2 * var_fast_sodium_current__beta_Na11 - var_chaste_interface__fast_sodium_current__IC_Na3 * var_fast_sodium_current__alpha_Na11 - var_chaste_interface__fast_sodium_current__IC_Na3 * var_fast_sodium_current__alpha_Na3; // 1 / millisecond + const double var_fast_sodium_current__beta_Na2 = var_fast_sodium_current__alpha_Na13 * var_fast_sodium_current__alpha_Na2 * var_fast_sodium_current__alpha_Na3 / (var_fast_sodium_current__beta_Na13 * var_fast_sodium_current__beta_Na3); // per_millisecond + const double d_dt_chaste_interface_var_fast_sodium_current__O_Na = var_chaste_interface__fast_sodium_current__C_Na1 * var_fast_sodium_current__alpha_Na13 + var_chaste_interface__fast_sodium_current__IF_Na * var_fast_sodium_current__beta_Na2 - var_chaste_interface__fast_sodium_current__O_Na * var_fast_sodium_current__alpha_Na2 - var_chaste_interface__fast_sodium_current__O_Na * var_fast_sodium_current__beta_Na13; // 1 / millisecond + const double var_fast_sodium_current__beta_Na4 = var_fast_sodium_current__alpha_Na3; // per_millisecond + const double d_dt_chaste_interface_var_fast_sodium_current__IF_Na = var_chaste_interface__fast_sodium_current__C_Na1 * var_fast_sodium_current__beta_Na3 + var_chaste_interface__fast_sodium_current__I1_Na * var_fast_sodium_current__beta_Na4 + var_chaste_interface__fast_sodium_current__IC_Na2 * var_fast_sodium_current__alpha_Na12 + var_chaste_interface__fast_sodium_current__O_Na * var_fast_sodium_current__alpha_Na2 - var_chaste_interface__fast_sodium_current__IF_Na * var_fast_sodium_current__alpha_Na3 - var_chaste_interface__fast_sodium_current__IF_Na * var_fast_sodium_current__alpha_Na4 - var_chaste_interface__fast_sodium_current__IF_Na * var_fast_sodium_current__beta_Na12 - var_chaste_interface__fast_sodium_current__IF_Na * var_fast_sodium_current__beta_Na2; // 1 / millisecond + const double var_fast_sodium_current__beta_Na5 = 0.02 * var_fast_sodium_current__alpha_Na3; // per_millisecond + const double d_dt_chaste_interface_var_fast_sodium_current__I1_Na = var_chaste_interface__fast_sodium_current__I2_Na * var_fast_sodium_current__beta_Na5 + var_chaste_interface__fast_sodium_current__IF_Na * var_fast_sodium_current__alpha_Na4 - var_chaste_interface__fast_sodium_current__I1_Na * var_fast_sodium_current__alpha_Na5 - var_chaste_interface__fast_sodium_current__I1_Na * var_fast_sodium_current__beta_Na4; // 1 / millisecond + const double d_dt_chaste_interface_var_fast_sodium_current__I2_Na = var_chaste_interface__fast_sodium_current__I1_Na * var_fast_sodium_current__alpha_Na5 - var_chaste_interface__fast_sodium_current__I2_Na * var_fast_sodium_current__beta_Na5; // 1 / millisecond + const double d_dt_chaste_interface_var_calcium_concentration__CaNSR = 12.316491897044804 * var_calcium_fluxes__J_up - 12.316491897044804 * var_calcium_fluxes__J_leak - 0.057197330791229732 * var_calcium_fluxes__J_tr; // micromolar / millisecond + const double var_fast_transient_outward_potassium_current__E_K = 25.674321243523316 * log(mParameters[5] / var_chaste_interface__potassium_concentration__Ki); // millivolt + const double var_fast_transient_outward_potassium_current__i_Kto_f = pow(var_chaste_interface__fast_transient_outward_potassium_current__ato_f, 3) * (-var_fast_transient_outward_potassium_current__E_K + var_chaste_interface__membrane__V) * mParameters[16] * var_chaste_interface__fast_transient_outward_potassium_current__ito_f; // picoA_per_picoF + const double var_non_inactivating_steady_state_potassium_current__i_Kss = (-var_fast_transient_outward_potassium_current__E_K + var_chaste_interface__membrane__V) * var_chaste_interface__non_inactivating_steady_state_potassium_current__aKss * mParameters[12] * var_chaste_interface__non_inactivating_steady_state_potassium_current__iKss; // picoA_per_picoF + const double var_rapid_delayed_rectifier_potassium_current__alpha_a1 = _lt_0_row[23]; // per_millisecond + const double var_rapid_delayed_rectifier_potassium_current__alpha_i = _lt_0_row[24]; // per_millisecond + const double var_rapid_delayed_rectifier_potassium_current__beta_a1 = _lt_0_row[25]; // per_millisecond + const double var_rapid_delayed_rectifier_potassium_current__beta_i = _lt_0_row[26]; // per_millisecond + const double d_dt_chaste_interface_var_rapid_delayed_rectifier_potassium_current__I_K = var_chaste_interface__rapid_delayed_rectifier_potassium_current__O_K * var_rapid_delayed_rectifier_potassium_current__alpha_i - var_chaste_interface__rapid_delayed_rectifier_potassium_current__I_K * var_rapid_delayed_rectifier_potassium_current__beta_i; // 1 / millisecond + const double d_dt_chaste_interface_var_rapid_delayed_rectifier_potassium_current__O_K = var_chaste_interface__rapid_delayed_rectifier_potassium_current__C_K2 * var_rapid_delayed_rectifier_potassium_current__alpha_a1 + var_chaste_interface__rapid_delayed_rectifier_potassium_current__I_K * var_rapid_delayed_rectifier_potassium_current__beta_i - var_chaste_interface__rapid_delayed_rectifier_potassium_current__O_K * var_rapid_delayed_rectifier_potassium_current__alpha_i - var_chaste_interface__rapid_delayed_rectifier_potassium_current__O_K * var_rapid_delayed_rectifier_potassium_current__beta_a1; // 1 / millisecond + const double d_dt_chaste_interface_var_rapid_delayed_rectifier_potassium_current__C_K1 = 0.036777999999999998 * var_chaste_interface__rapid_delayed_rectifier_potassium_current__C_K2 - 0.023761000000000001 * var_chaste_interface__rapid_delayed_rectifier_potassium_current__C_K1 + 0.022348 * (1 - var_chaste_interface__rapid_delayed_rectifier_potassium_current__C_K1 - var_chaste_interface__rapid_delayed_rectifier_potassium_current__C_K2 - var_chaste_interface__rapid_delayed_rectifier_potassium_current__I_K - var_chaste_interface__rapid_delayed_rectifier_potassium_current__O_K) * _lt_0_row[27] - 0.047002000000000002 * var_chaste_interface__rapid_delayed_rectifier_potassium_current__C_K1 * _lt_0_row[28]; // 1 / millisecond + const double d_dt_chaste_interface_var_rapid_delayed_rectifier_potassium_current__C_K2 = 0.023761000000000001 * var_chaste_interface__rapid_delayed_rectifier_potassium_current__C_K1 - 0.036777999999999998 * var_chaste_interface__rapid_delayed_rectifier_potassium_current__C_K2 + var_chaste_interface__rapid_delayed_rectifier_potassium_current__O_K * var_rapid_delayed_rectifier_potassium_current__beta_a1 - var_chaste_interface__rapid_delayed_rectifier_potassium_current__C_K2 * var_rapid_delayed_rectifier_potassium_current__alpha_a1; // 1 / millisecond + const double var_calcium_fluxes__J_rel = (-var_chaste_interface__calcium_concentration__Cass + var_chaste_interface__calcium_concentration__CaJSR) * (var_chaste_interface__ryanodine_receptors__P_O1 + var_chaste_interface__ryanodine_receptors__P_O2) * var_chaste_interface__calcium_fluxes__P_RyR * mParameters[1]; // micromolar_per_millisecond + const double d_dt_chaste_interface_var_calcium_concentration__CaJSR = (-var_calcium_fluxes__J_rel + var_calcium_fluxes__J_tr) / (1 + 18.75 / pow((1 + 0.00125 * var_chaste_interface__calcium_concentration__CaJSR), 2)); // micromolar / millisecond + const double d_dt_chaste_interface_var_calcium_concentration__Cass = (80.808080808080803 * var_calcium_fluxes__J_rel - 17400.6734006734 * var_calcium_fluxes__J_xfer - 535.23141606043157 * var_L_type_calcium_current__i_CaL * mParameters[8]) / (1 + 11.899999999999999 / pow((0.23799999999999999 + var_chaste_interface__calcium_concentration__Cass), 2)); // micromolar / millisecond + const double d_dt_chaste_interface_var_ryanodine_receptors__P_C2 = 0.0089999999999999993 * var_chaste_interface__ryanodine_receptors__P_O1 - 0.00080000000000000004 * var_chaste_interface__ryanodine_receptors__P_C2; // 1 / millisecond + const double d_dt_chaste_interface_var_ryanodine_receptors__P_O2 = -0.96499999999999997 * var_chaste_interface__ryanodine_receptors__P_O2 + 0.0040499999999999998 * pow(var_chaste_interface__calcium_concentration__Cass, 3) * var_chaste_interface__ryanodine_receptors__P_O1; // 1 / millisecond + const double d_dt_chaste_interface_var_ryanodine_receptors__P_O1 = 0.00080000000000000004 * var_chaste_interface__ryanodine_receptors__P_C2 + 0.96499999999999997 * var_chaste_interface__ryanodine_receptors__P_O2 - 0.080249999999999988 * var_chaste_interface__ryanodine_receptors__P_O1 + 0.0060749999999999997 * pow(var_chaste_interface__calcium_concentration__Cass, 4) * (1 - var_chaste_interface__ryanodine_receptors__P_C2 - var_chaste_interface__ryanodine_receptors__P_O1 - var_chaste_interface__ryanodine_receptors__P_O2) - 0.0040499999999999998 * pow(var_chaste_interface__calcium_concentration__Cass, 3) * var_chaste_interface__ryanodine_receptors__P_O1; // 1 / millisecond + const double var_slow_delayed_rectifier_potassium_current__i_Ks = pow(var_chaste_interface__slow_delayed_rectifier_potassium_current__nKs, 2) * (-var_fast_transient_outward_potassium_current__E_K + var_chaste_interface__membrane__V) * mParameters[14]; // picoA_per_picoF + const double var_slow_transient_outward_potassium_current__i_Kto_s = 0; // picoA_per_picoF + const double var_fast_sodium_current__E_Na = 25.674321243523316 * log((mParameters[6] + 0.1111111111111111 * mParameters[5]) / (var_chaste_interface__sodium_concentration__Nai + 0.1111111111111111 * var_chaste_interface__potassium_concentration__Ki)); // millivolt + const double var_fast_sodium_current__i_Na = (-var_fast_sodium_current__E_Na + var_chaste_interface__membrane__V) * var_chaste_interface__fast_sodium_current__O_Na * mParameters[9]; // picoA_per_picoF + const double var_rapid_delayed_rectifier_potassium_current__i_Kr = (-25.674321243523316 * log((mParameters[5] + 0.020408163265306124 * mParameters[6]) / (var_chaste_interface__potassium_concentration__Ki + 0.020408163265306124 * var_chaste_interface__sodium_concentration__Nai)) + var_chaste_interface__membrane__V) * var_chaste_interface__rapid_delayed_rectifier_potassium_current__O_K * mParameters[13]; // picoA_per_picoF + const double var_sodium_background_current__i_Nab = 0.0025999999999999999 * var_chaste_interface__membrane__V - 0.0025999999999999999 * var_fast_sodium_current__E_Na; // picoA_per_picoF + const double var_sodium_calcium_exchange_current__i_NaCa = (pow(var_chaste_interface__sodium_concentration__Nai, 3) * mParameters[4] * _lt_0_row[1] - pow(mParameters[6], 3) * var_calcium_concentration__Cai * _lt_0_row[2]) * mParameters[15] / ((_lt_0_row[3]) * (1380 + mParameters[4]) * (669921875000000.0 + pow(mParameters[6], 3))); // picoA_per_picoF + const double d_dt_chaste_interface_var_calcium_concentration__Cai_converted = 0.001 * (-var_calcium_fluxes__J_up + 0.019599999999999999 * var_chaste_interface__calcium_buffering__LTRPN_Ca + 3.1999999999999999e-5 * var_chaste_interface__calcium_buffering__HTRPN_Ca - 0.0327 * (70 - var_chaste_interface__calcium_buffering__LTRPN_Ca) * var_calcium_concentration__Cai - 0.0023700000000000001 * (140 - var_chaste_interface__calcium_buffering__HTRPN_Ca) * var_calcium_concentration__Cai - 0.03075923579139864 * (-2 * var_sodium_calcium_exchange_current__i_NaCa + var_calcium_background_current__i_Cab + var_calcium_pump_current__i_pCa) * mParameters[8] + var_calcium_fluxes__J_leak + var_calcium_fluxes__J_xfer) / (1 + 11.899999999999999 / pow((0.23799999999999999 + var_calcium_concentration__Cai), 2)); // millimolar / millisecond + const double var_sodium_potassium_pump_current__i_NaK = 0.88 * mParameters[5] / ((1 + 3043189.1166997822 * pow((1 / var_chaste_interface__sodium_concentration__Nai), 1.5)) * (1500 + mParameters[5]) * (1 + _lt_0_row[5] + 0.036499999999999998 * (-0.14285714285714285 + 0.14285714285714285 * exp(1.4858841010401188e-5 * mParameters[6])) * _lt_0_row[4])); // picoA_per_picoF + const double d_dt_chaste_interface_var_sodium_concentration__Nai = -0.061518471582797281 * (3 * var_sodium_calcium_exchange_current__i_NaCa + 3 * var_sodium_potassium_pump_current__i_NaK + var_fast_sodium_current__i_Na + var_sodium_background_current__i_Nab) * mParameters[8] * mParameters[3]; // micromolar / millisecond + const double var_time_independent_potassium_current__i_K1 = (-var_fast_transient_outward_potassium_current__E_K + var_chaste_interface__membrane__V) * mParameters[5] * mParameters[11] / ((1 + exp(0.089599999999999999 * var_chaste_interface__membrane__V - 0.089599999999999999 * var_fast_transient_outward_potassium_current__E_K)) * (210 + mParameters[5])); // picoA_per_picoF + const double var_ultra_rapidly_activating_delayed_rectifier_potassium_current__i_Kur = 0.16 * (-var_fast_transient_outward_potassium_current__E_K + var_chaste_interface__membrane__V) * var_chaste_interface__ultra_rapidly_activating_delayed_rectifier_potassium_current__aur * var_chaste_interface__ultra_rapidly_activating_delayed_rectifier_potassium_current__iur; // picoA_per_picoF + const double d_dt_chaste_interface_var_potassium_concentration__Ki = -0.061518471582797281 * (-2 * var_sodium_potassium_pump_current__i_NaK + var_fast_transient_outward_potassium_current__i_Kto_f + var_non_inactivating_steady_state_potassium_current__i_Kss + var_rapid_delayed_rectifier_potassium_current__i_Kr + var_slow_delayed_rectifier_potassium_current__i_Ks + var_slow_transient_outward_potassium_current__i_Kto_s + var_time_independent_potassium_current__i_K1 + var_ultra_rapidly_activating_delayed_rectifier_potassium_current__i_Kur) * mParameters[8] * mParameters[3]; // micromolar / millisecond + + rResidual[11] = rCurrentGuess[11] - rY[1] - mDt*d_dt_chaste_interface_var_calcium_concentration__Cai_converted; + rResidual[12] = rCurrentGuess[12] - rY[2] - mDt*d_dt_chaste_interface_var_calcium_concentration__Cass; + rResidual[9] = rCurrentGuess[9] - rY[3] - mDt*d_dt_chaste_interface_var_calcium_concentration__CaJSR; + rResidual[10] = rCurrentGuess[10] - rY[4] - mDt*d_dt_chaste_interface_var_calcium_concentration__CaNSR; + rResidual[13] = rCurrentGuess[13] - rY[5] - mDt*d_dt_chaste_interface_var_calcium_fluxes__P_RyR; + rResidual[8] = rCurrentGuess[8] - rY[6] - mDt*d_dt_chaste_interface_var_calcium_buffering__LTRPN_Ca; + rResidual[7] = rCurrentGuess[7] - rY[7] - mDt*d_dt_chaste_interface_var_calcium_buffering__HTRPN_Ca; + rResidual[29] = rCurrentGuess[29] - rY[8] - mDt*d_dt_chaste_interface_var_ryanodine_receptors__P_O1; + rResidual[30] = rCurrentGuess[30] - rY[9] - mDt*d_dt_chaste_interface_var_ryanodine_receptors__P_O2; + rResidual[28] = rCurrentGuess[28] - rY[10] - mDt*d_dt_chaste_interface_var_ryanodine_receptors__P_C2; + rResidual[6] = rCurrentGuess[6] - rY[11] - mDt*d_dt_chaste_interface_var_L_type_calcium_current__O; + rResidual[0] = rCurrentGuess[0] - rY[12] - mDt*d_dt_chaste_interface_var_L_type_calcium_current__C2; + rResidual[1] = rCurrentGuess[1] - rY[13] - mDt*d_dt_chaste_interface_var_L_type_calcium_current__C3; + rResidual[2] = rCurrentGuess[2] - rY[14] - mDt*d_dt_chaste_interface_var_L_type_calcium_current__C4; + rResidual[3] = rCurrentGuess[3] - rY[15] - mDt*d_dt_chaste_interface_var_L_type_calcium_current__I1; + rResidual[4] = rCurrentGuess[4] - rY[16] - mDt*d_dt_chaste_interface_var_L_type_calcium_current__I2; + rResidual[5] = rCurrentGuess[5] - rY[17] - mDt*d_dt_chaste_interface_var_L_type_calcium_current__I3; + rResidual[31] = rCurrentGuess[31] - rY[18] - mDt*d_dt_chaste_interface_var_sodium_concentration__Nai; + rResidual[21] = rCurrentGuess[21] - rY[19] - mDt*d_dt_chaste_interface_var_fast_sodium_current__O_Na; + rResidual[14] = rCurrentGuess[14] - rY[20] - mDt*d_dt_chaste_interface_var_fast_sodium_current__C_Na1; + rResidual[15] = rCurrentGuess[15] - rY[21] - mDt*d_dt_chaste_interface_var_fast_sodium_current__C_Na2; + rResidual[16] = rCurrentGuess[16] - rY[22] - mDt*d_dt_chaste_interface_var_fast_sodium_current__I1_Na; + rResidual[17] = rCurrentGuess[17] - rY[23] - mDt*d_dt_chaste_interface_var_fast_sodium_current__I2_Na; + rResidual[20] = rCurrentGuess[20] - rY[24] - mDt*d_dt_chaste_interface_var_fast_sodium_current__IF_Na; + rResidual[18] = rCurrentGuess[18] - rY[25] - mDt*d_dt_chaste_interface_var_fast_sodium_current__IC_Na2; + rResidual[19] = rCurrentGuess[19] - rY[26] - mDt*d_dt_chaste_interface_var_fast_sodium_current__IC_Na3; + rResidual[23] = rCurrentGuess[23] - rY[27] - mDt*d_dt_chaste_interface_var_potassium_concentration__Ki; + rResidual[22] = rCurrentGuess[22] - rY[36] - mDt*d_dt_chaste_interface_var_non_inactivating_steady_state_potassium_current__iKss; + rResidual[27] = rCurrentGuess[27] - rY[37] - mDt*d_dt_chaste_interface_var_rapid_delayed_rectifier_potassium_current__O_K; + rResidual[24] = rCurrentGuess[24] - rY[38] - mDt*d_dt_chaste_interface_var_rapid_delayed_rectifier_potassium_current__C_K1; + rResidual[25] = rCurrentGuess[25] - rY[39] - mDt*d_dt_chaste_interface_var_rapid_delayed_rectifier_potassium_current__C_K2; + rResidual[26] = rCurrentGuess[26] - rY[40] - mDt*d_dt_chaste_interface_var_rapid_delayed_rectifier_potassium_current__I_K; + } + + void Cellbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLBackwardEulerOpt::ComputeJacobian(double var_chaste_interface__environment__time, const double rCurrentGuess[32], double rJacobian[32][32]) + { + std::vector& rY = rGetStateVariables(); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -82.4202 + double var_chaste_interface__fast_transient_outward_potassium_current__ato_f = rY[28]; + // Units: dimensionless; Initial value: 0.00265563 + double var_chaste_interface__fast_transient_outward_potassium_current__ito_f = rY[29]; + // Units: dimensionless; Initial value: 0.999977 + double var_chaste_interface__slow_delayed_rectifier_potassium_current__nKs = rY[32]; + // Units: dimensionless; Initial value: 0.000262753 + double var_chaste_interface__ultra_rapidly_activating_delayed_rectifier_potassium_current__aur = rY[33]; + // Units: dimensionless; Initial value: 0.000417069 + double var_chaste_interface__ultra_rapidly_activating_delayed_rectifier_potassium_current__iur = rY[34]; + // Units: dimensionless; Initial value: 0.998543 + double var_chaste_interface__non_inactivating_steady_state_potassium_current__aKss = rY[35]; + // Units: dimensionless; Initial value: 0.000417069 + + // Lookup table indexing + const bool _oob_0 = Cellbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLBackwardEulerOpt_LookupTables::Instance()->CheckIndex0(var_chaste_interface__membrane__V); +// LCOV_EXCL_START + if (_oob_0) + EXCEPTION(DumpState("membrane_voltage outside lookup table range", rY , var_chaste_interface__environment__time)); +// LCOV_EXCL_STOP + const double* const _lt_0_row = Cellbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLBackwardEulerOpt_LookupTables::Instance()->IndexTable0(var_chaste_interface__membrane__V); + + double var_chaste_interface__L_type_calcium_current__C4 = rCurrentGuess[2]; + double var_chaste_interface__L_type_calcium_current__I2 = rCurrentGuess[4]; + double var_chaste_interface__L_type_calcium_current__O = rCurrentGuess[6]; + double var_chaste_interface__calcium_buffering__HTRPN_Ca = rCurrentGuess[7]; + double var_chaste_interface__calcium_buffering__LTRPN_Ca = rCurrentGuess[8]; + double var_chaste_interface__calcium_concentration__CaJSR = rCurrentGuess[9]; + double var_chaste_interface__calcium_concentration__CaNSR = rCurrentGuess[10]; + double var_chaste_interface__calcium_concentration__Cai_converted = rCurrentGuess[11]; + double var_chaste_interface__calcium_concentration__Cass = rCurrentGuess[12]; + double var_chaste_interface__calcium_fluxes__P_RyR = rCurrentGuess[13]; + double var_chaste_interface__fast_sodium_current__O_Na = rCurrentGuess[21]; + double var_chaste_interface__non_inactivating_steady_state_potassium_current__iKss = rCurrentGuess[22]; + double var_chaste_interface__potassium_concentration__Ki = rCurrentGuess[23]; + double var_chaste_interface__rapid_delayed_rectifier_potassium_current__O_K = rCurrentGuess[27]; + double var_chaste_interface__ryanodine_receptors__P_C2 = rCurrentGuess[28]; + double var_chaste_interface__ryanodine_receptors__P_O1 = rCurrentGuess[29]; + double var_chaste_interface__ryanodine_receptors__P_O2 = rCurrentGuess[30]; + double var_chaste_interface__sodium_concentration__Nai = rCurrentGuess[31]; + + const double var_x0 = _lt_0_row[37]; + const double var_x1 = _lt_0_row[38]; + const double var_x2 = var_x1 * (_lt_0_row[39]) / (1 + 0.12 * var_x1); + const double var_x3 = 0.10000000000000001 * var_x0; + const double var_x4 = -1.6000000000000001 * var_x2; + const double var_x5 = 0.80000000000000004 * var_x2; + const double var_x6 = 0.15000000000000002 * var_x0; + const double var_x7 = _lt_0_row[40]; + const double var_x8 = 0.026000000000000002 * var_x7; + const double var_x9 = 13 - 13 * var_x7; + const double var_x10 = 1 / (20 + var_chaste_interface__calcium_concentration__Cass); + const double var_x11 = 0.23324 * var_x10; + const double var_x12 = var_x11 * var_chaste_interface__calcium_concentration__Cass; + const double var_x13 = var_x12 * var_x9; + const double var_x14 = 0.40000000000000002 * var_x2; + const double var_x15 = 0.00093296000000000004 * var_x10 * var_x2; + const double var_x16 = var_x15 * var_chaste_interface__calcium_concentration__Cass; + const double var_x17 = 0.00040000000000000002 * var_x0; + const double var_x18 = 0.0001 * var_x0; + const double var_x19 = 0.20000000000000001 * var_x0; + const double var_x20 = var_chaste_interface__calcium_concentration__Cass / pow((1 + 0.050000000000000003 * var_chaste_interface__calcium_concentration__Cass), 2); + const double var_x21 = -var_x15 * var_chaste_interface__L_type_calcium_current__C4 + 2.3324000000000003e-6 * var_x2 * var_x20 * var_chaste_interface__L_type_calcium_current__C4; + const double var_x22 = var_x9 * var_chaste_interface__L_type_calcium_current__C4; + const double var_x23 = 0.00058310000000000002 * var_x20; + const double var_x24 = var_x22 * var_x23 - var_x11 * var_x22; + const double var_x25 = 0.013000000000000001 * var_x7; + const double var_x26 = 0.00040000000000000002 * var_x2; + const double var_x27 = var_x23 * var_chaste_interface__L_type_calcium_current__O - var_x11 * var_chaste_interface__L_type_calcium_current__O; + const double var_x28 = 0.013000000000000001 - var_x25; + const double var_x29 = var_x23 * var_chaste_interface__L_type_calcium_current__I2 - var_x11 * var_chaste_interface__L_type_calcium_current__I2; + const double var_x30 = 2.3700000000000001 * var_chaste_interface__calcium_concentration__Cai_converted; + const double var_x31 = 3.1999999999999999e-5 + var_x30; + const double var_x32 = 2.3700000000000001 * var_chaste_interface__calcium_buffering__HTRPN_Ca; + const double var_x33 = 32.699999999999996 * var_chaste_interface__calcium_concentration__Cai_converted; + const double var_x34 = 0.019599999999999999 + var_x33; + const double var_x35 = 32.699999999999996 * var_chaste_interface__calcium_buffering__LTRPN_Ca; + const double var_x36 = 1 + 0.00125 * var_chaste_interface__calcium_concentration__CaJSR; + const double var_x37 = pow(var_x36, (-2)); + const double var_x38 = 1 / (1 + 18.75 * var_x37); + const double var_x39 = var_chaste_interface__ryanodine_receptors__P_O1 + var_chaste_interface__ryanodine_receptors__P_O2; + const double var_x40 = var_chaste_interface__calcium_fluxes__P_RyR * mParameters[1]; + const double var_x41 = -var_chaste_interface__calcium_concentration__Cass + var_chaste_interface__calcium_concentration__CaJSR; + const double var_x42 = var_x39 * var_x40; + const double var_x43 = -var_x38 * var_x41; + const double var_x44 = var_x39 * mParameters[1]; + const double var_x45 = var_x40 * var_x43; + const double var_x46 = pow(var_chaste_interface__calcium_concentration__Cai_converted, 2); + const double var_x47 = 1000000 * var_x46; + const double var_x48 = 1 / (0.25 + var_x47); + const double var_x49 = var_x48 * var_chaste_interface__calcium_concentration__Cai_converted; + const double var_x50 = var_x49 * mParameters[2]; + const double var_x51 = pow((2.4999999999999999e-7 + var_x46), (-2)); + const double var_x52 = pow(var_chaste_interface__calcium_concentration__Cai_converted, 3); + const double var_x53 = var_x51 * var_x52 * mParameters[2]; + const double var_x54 = 0.00023799999999999998 + var_chaste_interface__calcium_concentration__Cai_converted; + const double var_x55 = 1 + 1.19e-5 / pow(var_x54, 2); + const double var_x56 = 1 / var_x55; + const double var_x57 = 0.001 * var_x56; + const double var_x58 = 1 / var_chaste_interface__calcium_concentration__Cai_converted; + const double var_x59 = _lt_0_row[2]; + const double var_x60 = pow(mParameters[6], 3); + const double var_x61 = var_x59 * var_x60; + const double var_x62 = mParameters[15] / ((1 + 0.10000000000000001 * var_x59) * (1380 + mParameters[4]) * (669921875000000.0 + var_x60)); + const double var_x63 = var_x61 * var_x62; + const double var_x64 = 1000 * var_chaste_interface__calcium_concentration__Cai_converted; + const double var_x65 = var_x47 * var_x48; + const double var_x66 = _lt_0_row[1]; + const double var_x67 = var_x62 * var_x66 * pow(var_chaste_interface__sodium_concentration__Nai, 2) * mParameters[4]; + const double var_x68 = 0.23799999999999999 + var_chaste_interface__calcium_concentration__Cass; + const double var_x69 = pow(var_x68, (-2)); + const double var_x70 = 1 / (1 + 11.899999999999999 * var_x69); + const double var_x71 = mParameters[7] * mParameters[8]; + const double var_x72 = 80.808080808080803 * var_chaste_interface__ryanodine_receptors__P_O1 + 80.808080808080803 * var_chaste_interface__ryanodine_receptors__P_O2; + const double var_x73 = var_x40 * var_x70; + const double var_x74 = 80.808080808080803 * var_chaste_interface__calcium_concentration__CaJSR - 80.808080808080803 * var_chaste_interface__calcium_concentration__Cass; + const double var_x75 = var_x73 * var_x74; + const double var_x76 = 0.04926108374384236 * var_chaste_interface__membrane__V; + const double var_x77 = 0.20000000000000001 * exp(0.12315270935960591 - var_x76); + const double var_x78 = _lt_0_row[41]; + const double var_x79 = 1 / (0.25 * var_x78 + _lt_0_row[42]); + const double var_x80 = 3.802 * var_x79; + const double var_x81 = 0.008539999999999999 + 2.0000000000000002e-5 * var_chaste_interface__membrane__V; + const double var_x82 = 3.802 / (_lt_0_row[43] + 0.23000000000000001 * var_x78); + const double var_x83 = _lt_0_row[44]; + const double var_x84 = 6.9999999999999997e-7 * var_x83; + const double var_x85 = exp(0.36945812807881773 - var_x76); + const double var_x86 = 0.22 * var_x85; + const double var_x87 = 3.802 / (0.20000000000000001 * var_x78 + _lt_0_row[45]); + const double var_x88 = -var_x87; + const double var_x89 = 0.19170000000000001 * exp(-0.12315270935960591 - var_x76); + const double var_x90 = var_x82 + var_x89; + const double var_x91 = var_x81 + var_x87; + const double var_x92 = 1 / (0.39395599999999997 + 0.188495 * exp(-0.42168674698795178 + 0.060240963855421679 * mParameters[10] - 0.060240963855421679 * var_chaste_interface__membrane__V)); + const double var_x93 = 1.0526315789473684e-5 * var_x92; + const double var_x94 = 1.4e-8 * var_x83; + const double var_x95 = 0.001 * var_x92; + const double var_x96 = -var_x81; + const double var_x97 = 1.2097272727272726e-5 * var_x79 * var_x83 * var_x92 / (var_x81 * var_x85); + const double var_x98 = var_x92; + const double var_x99 = 1 / var_chaste_interface__potassium_concentration__Ki; + const double var_x100 = var_x99 * mParameters[5]; + const double var_x101 = log(var_x100); + const double var_x102 = -25.674321243523316 * var_x101 + var_chaste_interface__membrane__V; + const double var_x103 = var_chaste_interface__non_inactivating_steady_state_potassium_current__aKss * mParameters[12]; + const double var_x104 = mParameters[8] * mParameters[3]; + const double var_x105 = 0.061518471582797281 * var_x104; + const double var_x106 = 1 / (var_chaste_interface__potassium_concentration__Ki + 0.020408163265306124 * var_chaste_interface__sodium_concentration__Nai); + const double var_x107 = var_x106 * var_chaste_interface__rapid_delayed_rectifier_potassium_current__O_K * mParameters[13]; + const double var_x108 = 1.5794450018272976 * var_x99; + const double var_x109 = exp(0.089599999999999999 * var_chaste_interface__membrane__V - 2.300419183419689 * var_x101); + const double var_x110 = 1 + var_x109; + const double var_x111 = 1 / (210 + mParameters[5]); + const double var_x112 = 1 / var_chaste_interface__sodium_concentration__Nai; + const double var_x113 = pow(var_x112, 1.5); + const double var_x114 = var_x112 * var_x113 * mParameters[5] / ((1500 + mParameters[5]) * pow((3.2860264730588296e-7 + var_x113), 2) * (1 + _lt_0_row[5] + 0.036499999999999998 * (-0.14285714285714285 + 0.14285714285714285 * exp(1.4858841010401188e-5 * mParameters[6])) * _lt_0_row[4])); + const double var_x115 = _lt_0_row[46]; + const double var_x116 = -var_x115; + const double var_x117 = _lt_0_row[23]; + const double var_x118 = _lt_0_row[25]; + const double var_x119 = _lt_0_row[26]; + const double var_x120 = _lt_0_row[24]; + const double var_x121 = 0.012149999999999999 * pow(var_chaste_interface__calcium_concentration__Cass, 2) * var_chaste_interface__ryanodine_receptors__P_O1; + const double var_x122 = pow(var_chaste_interface__calcium_concentration__Cass, 3); + const double var_x123 = 0.0060749999999999997 * pow(var_chaste_interface__calcium_concentration__Cass, 4); + const double var_x124 = 0.0040499999999999998 * var_x122; + const double var_x125 = 1 / (var_chaste_interface__sodium_concentration__Nai + 0.1111111111111111 * var_chaste_interface__potassium_concentration__Ki); + const double var_x126 = var_x125 * var_chaste_interface__fast_sodium_current__O_Na * mParameters[9]; + + + rJacobian[0][0] = 1.0 - (mDt * (-0.050000000000000003 * var_x0 - 2.8000000000000003 * var_x2)); + rJacobian[0][1] = -(mDt * (var_x3 + var_x4)); + rJacobian[0][2] = -(mDt * (var_x4)); + rJacobian[0][3] = -(mDt * (var_x4)); + rJacobian[0][4] = -(mDt * (var_x4)); + rJacobian[0][5] = -(mDt * (var_x4)); + rJacobian[0][6] = -(mDt * (var_x4)); + rJacobian[0][7] = 0.0; + rJacobian[0][8] = 0.0; + rJacobian[0][9] = 0.0; + rJacobian[0][10] = 0.0; + rJacobian[0][11] = 0.0; + rJacobian[0][12] = 0.0; + rJacobian[0][13] = 0.0; + rJacobian[0][14] = 0.0; + rJacobian[0][15] = 0.0; + rJacobian[0][16] = 0.0; + rJacobian[0][17] = 0.0; + rJacobian[0][18] = 0.0; + rJacobian[0][19] = 0.0; + rJacobian[0][20] = 0.0; + rJacobian[0][21] = 0.0; + rJacobian[0][22] = 0.0; + rJacobian[0][23] = 0.0; + rJacobian[0][24] = 0.0; + rJacobian[0][25] = 0.0; + rJacobian[0][26] = 0.0; + rJacobian[0][27] = 0.0; + rJacobian[0][28] = 0.0; + rJacobian[0][29] = 0.0; + rJacobian[0][30] = 0.0; + rJacobian[0][31] = 0.0; + rJacobian[1][0] = -(mDt * (1.2000000000000002 * var_x2)); + rJacobian[1][1] = 1.0 - (mDt * (-var_x3 - var_x5)); + rJacobian[1][2] = -(mDt * (var_x6)); + rJacobian[1][3] = 0.0; + rJacobian[1][4] = 0.0; + rJacobian[1][5] = 0.0; + rJacobian[1][6] = 0.0; + rJacobian[1][7] = 0.0; + rJacobian[1][8] = 0.0; + rJacobian[1][9] = 0.0; + rJacobian[1][10] = 0.0; + rJacobian[1][11] = 0.0; + rJacobian[1][12] = 0.0; + rJacobian[1][13] = 0.0; + rJacobian[1][14] = 0.0; + rJacobian[1][15] = 0.0; + rJacobian[1][16] = 0.0; + rJacobian[1][17] = 0.0; + rJacobian[1][18] = 0.0; + rJacobian[1][19] = 0.0; + rJacobian[1][20] = 0.0; + rJacobian[1][21] = 0.0; + rJacobian[1][22] = 0.0; + rJacobian[1][23] = 0.0; + rJacobian[1][24] = 0.0; + rJacobian[1][25] = 0.0; + rJacobian[1][26] = 0.0; + rJacobian[1][27] = 0.0; + rJacobian[1][28] = 0.0; + rJacobian[1][29] = 0.0; + rJacobian[1][30] = 0.0; + rJacobian[1][31] = 0.0; + rJacobian[2][0] = 0.0; + rJacobian[2][1] = -(mDt * (var_x5)); + rJacobian[2][2] = 1.0 - (mDt * (-0.026000000000000002 + var_x8 - var_x13 - var_x14 - var_x16 - var_x6)); + rJacobian[2][3] = -(mDt * (1.0000000000000002e-6 * var_x0)); + rJacobian[2][4] = -(mDt * (var_x17)); + rJacobian[2][5] = -(mDt * (var_x18)); + rJacobian[2][6] = -(mDt * (var_x19)); + rJacobian[2][7] = 0.0; + rJacobian[2][8] = 0.0; + rJacobian[2][9] = 0.0; + rJacobian[2][10] = 0.0; + rJacobian[2][11] = 0.0; + rJacobian[2][12] = -(mDt * (var_x21 + var_x24)); + rJacobian[2][13] = 0.0; + rJacobian[2][14] = 0.0; + rJacobian[2][15] = 0.0; + rJacobian[2][16] = 0.0; + rJacobian[2][17] = 0.0; + rJacobian[2][18] = 0.0; + rJacobian[2][19] = 0.0; + rJacobian[2][20] = 0.0; + rJacobian[2][21] = 0.0; + rJacobian[2][22] = 0.0; + rJacobian[2][23] = 0.0; + rJacobian[2][24] = 0.0; + rJacobian[2][25] = 0.0; + rJacobian[2][26] = 0.0; + rJacobian[2][27] = 0.0; + rJacobian[2][28] = 0.0; + rJacobian[2][29] = 0.0; + rJacobian[2][30] = 0.0; + rJacobian[2][31] = 0.0; + rJacobian[3][0] = 0.0; + rJacobian[3][1] = 0.0; + rJacobian[3][2] = -(mDt * (var_x16)); + rJacobian[3][3] = 1.0 - (mDt * (-0.0135 + var_x25 + var_x0 * (-0.026000000000000002 + 0.026000000000000002 * var_x7))); + rJacobian[3][4] = 0.0; + rJacobian[3][5] = -(mDt * (var_x26)); + rJacobian[3][6] = -(mDt * (var_x12)); + rJacobian[3][7] = 0.0; + rJacobian[3][8] = 0.0; + rJacobian[3][9] = 0.0; + rJacobian[3][10] = 0.0; + rJacobian[3][11] = 0.0; + rJacobian[3][12] = -(mDt * (-var_x21 - var_x27)); + rJacobian[3][13] = 0.0; + rJacobian[3][14] = 0.0; + rJacobian[3][15] = 0.0; + rJacobian[3][16] = 0.0; + rJacobian[3][17] = 0.0; + rJacobian[3][18] = 0.0; + rJacobian[3][19] = 0.0; + rJacobian[3][20] = 0.0; + rJacobian[3][21] = 0.0; + rJacobian[3][22] = 0.0; + rJacobian[3][23] = 0.0; + rJacobian[3][24] = 0.0; + rJacobian[3][25] = 0.0; + rJacobian[3][26] = 0.0; + rJacobian[3][27] = 0.0; + rJacobian[3][28] = 0.0; + rJacobian[3][29] = 0.0; + rJacobian[3][30] = 0.0; + rJacobian[3][31] = 0.0; + rJacobian[4][0] = 0.0; + rJacobian[4][1] = 0.0; + rJacobian[4][2] = -(mDt * (0.026000000000000002 - var_x8)); + rJacobian[4][3] = 0.0; + rJacobian[4][4] = 1.0 - (mDt * (-var_x12 - var_x17 - var_x26)); + rJacobian[4][5] = -(mDt * (0.00050000000000000001)); + rJacobian[4][6] = -(mDt * (var_x28)); + rJacobian[4][7] = 0.0; + rJacobian[4][8] = 0.0; + rJacobian[4][9] = 0.0; + rJacobian[4][10] = 0.0; + rJacobian[4][11] = 0.0; + rJacobian[4][12] = -(mDt * (var_x29)); + rJacobian[4][13] = 0.0; + rJacobian[4][14] = 0.0; + rJacobian[4][15] = 0.0; + rJacobian[4][16] = 0.0; + rJacobian[4][17] = 0.0; + rJacobian[4][18] = 0.0; + rJacobian[4][19] = 0.0; + rJacobian[4][20] = 0.0; + rJacobian[4][21] = 0.0; + rJacobian[4][22] = 0.0; + rJacobian[4][23] = 0.0; + rJacobian[4][24] = 0.0; + rJacobian[4][25] = 0.0; + rJacobian[4][26] = 0.0; + rJacobian[4][27] = 0.0; + rJacobian[4][28] = 0.0; + rJacobian[4][29] = 0.0; + rJacobian[4][30] = 0.0; + rJacobian[4][31] = 0.0; + rJacobian[5][0] = 0.0; + rJacobian[5][1] = 0.0; + rJacobian[5][2] = -(mDt * (var_x13)); + rJacobian[5][3] = -(mDt * (var_x28)); + rJacobian[5][4] = -(mDt * (var_x12)); + rJacobian[5][5] = 1.0 - (mDt * (-0.00050000000000000001 - var_x18 - var_x26)); + rJacobian[5][6] = 0.0; + rJacobian[5][7] = 0.0; + rJacobian[5][8] = 0.0; + rJacobian[5][9] = 0.0; + rJacobian[5][10] = 0.0; + rJacobian[5][11] = 0.0; + rJacobian[5][12] = -(mDt * (-var_x24 - var_x29)); + rJacobian[5][13] = 0.0; + rJacobian[5][14] = 0.0; + rJacobian[5][15] = 0.0; + rJacobian[5][16] = 0.0; + rJacobian[5][17] = 0.0; + rJacobian[5][18] = 0.0; + rJacobian[5][19] = 0.0; + rJacobian[5][20] = 0.0; + rJacobian[5][21] = 0.0; + rJacobian[5][22] = 0.0; + rJacobian[5][23] = 0.0; + rJacobian[5][24] = 0.0; + rJacobian[5][25] = 0.0; + rJacobian[5][26] = 0.0; + rJacobian[5][27] = 0.0; + rJacobian[5][28] = 0.0; + rJacobian[5][29] = 0.0; + rJacobian[5][30] = 0.0; + rJacobian[5][31] = 0.0; + rJacobian[6][0] = 0.0; + rJacobian[6][1] = 0.0; + rJacobian[6][2] = -(mDt * (var_x14)); + rJacobian[6][3] = -(mDt * (0.00050000000000000001)); + rJacobian[6][4] = -(mDt * (var_x26)); + rJacobian[6][5] = 0.0; + rJacobian[6][6] = 1.0 - (mDt * (-0.013000000000000001 + var_x25 - var_x12 - var_x19)); + rJacobian[6][7] = 0.0; + rJacobian[6][8] = 0.0; + rJacobian[6][9] = 0.0; + rJacobian[6][10] = 0.0; + rJacobian[6][11] = 0.0; + rJacobian[6][12] = -(mDt * (var_x27)); + rJacobian[6][13] = 0.0; + rJacobian[6][14] = 0.0; + rJacobian[6][15] = 0.0; + rJacobian[6][16] = 0.0; + rJacobian[6][17] = 0.0; + rJacobian[6][18] = 0.0; + rJacobian[6][19] = 0.0; + rJacobian[6][20] = 0.0; + rJacobian[6][21] = 0.0; + rJacobian[6][22] = 0.0; + rJacobian[6][23] = 0.0; + rJacobian[6][24] = 0.0; + rJacobian[6][25] = 0.0; + rJacobian[6][26] = 0.0; + rJacobian[6][27] = 0.0; + rJacobian[6][28] = 0.0; + rJacobian[6][29] = 0.0; + rJacobian[6][30] = 0.0; + rJacobian[6][31] = 0.0; + rJacobian[7][0] = 0.0; + rJacobian[7][1] = 0.0; + rJacobian[7][2] = 0.0; + rJacobian[7][3] = 0.0; + rJacobian[7][4] = 0.0; + rJacobian[7][5] = 0.0; + rJacobian[7][6] = 0.0; + rJacobian[7][7] = 1.0 - (mDt * (-var_x31)); + rJacobian[7][8] = 0.0; + rJacobian[7][9] = 0.0; + rJacobian[7][10] = 0.0; + rJacobian[7][11] = -(mDt * (331.80000000000001 - var_x32)); + rJacobian[7][12] = 0.0; + rJacobian[7][13] = 0.0; + rJacobian[7][14] = 0.0; + rJacobian[7][15] = 0.0; + rJacobian[7][16] = 0.0; + rJacobian[7][17] = 0.0; + rJacobian[7][18] = 0.0; + rJacobian[7][19] = 0.0; + rJacobian[7][20] = 0.0; + rJacobian[7][21] = 0.0; + rJacobian[7][22] = 0.0; + rJacobian[7][23] = 0.0; + rJacobian[7][24] = 0.0; + rJacobian[7][25] = 0.0; + rJacobian[7][26] = 0.0; + rJacobian[7][27] = 0.0; + rJacobian[7][28] = 0.0; + rJacobian[7][29] = 0.0; + rJacobian[7][30] = 0.0; + rJacobian[7][31] = 0.0; + rJacobian[8][0] = 0.0; + rJacobian[8][1] = 0.0; + rJacobian[8][2] = 0.0; + rJacobian[8][3] = 0.0; + rJacobian[8][4] = 0.0; + rJacobian[8][5] = 0.0; + rJacobian[8][6] = 0.0; + rJacobian[8][7] = 0.0; + rJacobian[8][8] = 1.0 - (mDt * (-var_x34)); + rJacobian[8][9] = 0.0; + rJacobian[8][10] = 0.0; + rJacobian[8][11] = -(mDt * (2289 - var_x35)); + rJacobian[8][12] = 0.0; + rJacobian[8][13] = 0.0; + rJacobian[8][14] = 0.0; + rJacobian[8][15] = 0.0; + rJacobian[8][16] = 0.0; + rJacobian[8][17] = 0.0; + rJacobian[8][18] = 0.0; + rJacobian[8][19] = 0.0; + rJacobian[8][20] = 0.0; + rJacobian[8][21] = 0.0; + rJacobian[8][22] = 0.0; + rJacobian[8][23] = 0.0; + rJacobian[8][24] = 0.0; + rJacobian[8][25] = 0.0; + rJacobian[8][26] = 0.0; + rJacobian[8][27] = 0.0; + rJacobian[8][28] = 0.0; + rJacobian[8][29] = 0.0; + rJacobian[8][30] = 0.0; + rJacobian[8][31] = 0.0; + rJacobian[9][0] = 0.0; + rJacobian[9][1] = 0.0; + rJacobian[9][2] = 0.0; + rJacobian[9][3] = 0.0; + rJacobian[9][4] = 0.0; + rJacobian[9][5] = 0.0; + rJacobian[9][6] = 0.0; + rJacobian[9][7] = 0.0; + rJacobian[9][8] = 0.0; + rJacobian[9][9] = 1.0 - (mDt * (var_x38 * (-0.050000000000000003 - var_x39 * var_x40) + 0.00013333333333333334 * (0.050000000000000003 * var_chaste_interface__calcium_concentration__CaNSR - 0.050000000000000003 * var_chaste_interface__calcium_concentration__CaJSR - var_x41 * var_x42) / (pow(var_x36, 3) * pow((0.053333333333333337 + var_x37), 2)))); + rJacobian[9][10] = -(mDt * (0.050000000000000003 * var_x38)); + rJacobian[9][11] = 0.0; + rJacobian[9][12] = -(mDt * (var_x38 * var_x42)); + rJacobian[9][13] = -(mDt * (var_x43 * var_x44)); + rJacobian[9][14] = 0.0; + rJacobian[9][15] = 0.0; + rJacobian[9][16] = 0.0; + rJacobian[9][17] = 0.0; + rJacobian[9][18] = 0.0; + rJacobian[9][19] = 0.0; + rJacobian[9][20] = 0.0; + rJacobian[9][21] = 0.0; + rJacobian[9][22] = 0.0; + rJacobian[9][23] = 0.0; + rJacobian[9][24] = 0.0; + rJacobian[9][25] = 0.0; + rJacobian[9][26] = 0.0; + rJacobian[9][27] = 0.0; + rJacobian[9][28] = 0.0; + rJacobian[9][29] = -(mDt * (var_x45)); + rJacobian[9][30] = -(mDt * (var_x45)); + rJacobian[9][31] = 0.0; + rJacobian[10][0] = 0.0; + rJacobian[10][1] = 0.0; + rJacobian[10][2] = 0.0; + rJacobian[10][3] = 0.0; + rJacobian[10][4] = 0.0; + rJacobian[10][5] = 0.0; + rJacobian[10][6] = 0.0; + rJacobian[10][7] = 0.0; + rJacobian[10][8] = 0.0; + rJacobian[10][9] = -(mDt * (0.0028598665395614866)); + rJacobian[10][10] = 1.0 - (mDt * (-0.0028598665395614866 - 12.316491897044804 * mParameters[0])); + rJacobian[10][11] = -(mDt * (12316.491897044803 * mParameters[0] + 24632983.794089608 * var_x50 - 24.632983794089608 * var_x53)); + rJacobian[10][12] = 0.0; + rJacobian[10][13] = 0.0; + rJacobian[10][14] = 0.0; + rJacobian[10][15] = 0.0; + rJacobian[10][16] = 0.0; + rJacobian[10][17] = 0.0; + rJacobian[10][18] = 0.0; + rJacobian[10][19] = 0.0; + rJacobian[10][20] = 0.0; + rJacobian[10][21] = 0.0; + rJacobian[10][22] = 0.0; + rJacobian[10][23] = 0.0; + rJacobian[10][24] = 0.0; + rJacobian[10][25] = 0.0; + rJacobian[10][26] = 0.0; + rJacobian[10][27] = 0.0; + rJacobian[10][28] = 0.0; + rJacobian[10][29] = 0.0; + rJacobian[10][30] = 0.0; + rJacobian[10][31] = 0.0; + rJacobian[11][0] = 0.0; + rJacobian[11][1] = 0.0; + rJacobian[11][2] = 0.0; + rJacobian[11][3] = 0.0; + rJacobian[11][4] = 0.0; + rJacobian[11][5] = 0.0; + rJacobian[11][6] = 0.0; + rJacobian[11][7] = -(mDt * (var_x31 * var_x57)); + rJacobian[11][8] = -(mDt * (var_x34 * var_x57)); + rJacobian[11][9] = 0.0; + rJacobian[11][10] = -(mDt * (var_x57 * mParameters[0])); + rJacobian[11][11] = 1.0 - (mDt * (var_x57 * (-2745.8000000000002 + var_x32 + var_x35 + 2 * var_x53 - 2000000 * var_x50 - 1000 * mParameters[0] + (-61518.471582797276 * var_x49 - 61.518471582797282 * var_x63 - 0.00014491407891765456 * var_x58 + 0.061518471582797281 * var_x51 * var_x52) * mParameters[8]) + 2.3800000000000001e-8 * (0.125 * var_chaste_interface__calcium_concentration__Cass + 0.019599999999999999 * var_chaste_interface__calcium_buffering__LTRPN_Ca + 3.1999999999999999e-5 * var_chaste_interface__calcium_buffering__HTRPN_Ca - 125 * var_chaste_interface__calcium_concentration__Cai_converted + (-var_x64 + var_chaste_interface__calcium_concentration__CaNSR) * mParameters[0] - var_x30 * (140 - var_chaste_interface__calcium_buffering__HTRPN_Ca) - var_x33 * (70 - var_chaste_interface__calcium_buffering__LTRPN_Ca) - var_x65 * mParameters[2] - 0.03075923579139864 * (var_x65 + 0.00036699999999999998 * var_chaste_interface__membrane__V - 0.0047112379481865285 * log(0.001 * var_x58 * mParameters[4]) - 2 * var_x62 * (-var_x61 * var_x64 + var_x66 * pow(var_chaste_interface__sodium_concentration__Nai, 3) * mParameters[4])) * mParameters[8]) / (pow(var_x54, 3) * pow(var_x55, 2)))); + rJacobian[11][12] = -(mDt * (0.000125 * var_x56)); + rJacobian[11][13] = 0.0; + rJacobian[11][14] = 0.0; + rJacobian[11][15] = 0.0; + rJacobian[11][16] = 0.0; + rJacobian[11][17] = 0.0; + rJacobian[11][18] = 0.0; + rJacobian[11][19] = 0.0; + rJacobian[11][20] = 0.0; + rJacobian[11][21] = 0.0; + rJacobian[11][22] = 0.0; + rJacobian[11][23] = 0.0; + rJacobian[11][24] = 0.0; + rJacobian[11][25] = 0.0; + rJacobian[11][26] = 0.0; + rJacobian[11][27] = 0.0; + rJacobian[11][28] = 0.0; + rJacobian[11][29] = 0.0; + rJacobian[11][30] = 0.0; + rJacobian[11][31] = -(mDt * (0.00018455541474839184 * var_x56 * var_x67 * mParameters[8])); + rJacobian[12][0] = 0.0; + rJacobian[12][1] = 0.0; + rJacobian[12][2] = 0.0; + rJacobian[12][3] = 0.0; + rJacobian[12][4] = 0.0; + rJacobian[12][5] = 0.0; + rJacobian[12][6] = -(mDt * (var_x70 * var_x71 * (33719.579211807191 - 535.23141606043157 * var_chaste_interface__membrane__V))); + rJacobian[12][7] = 0.0; + rJacobian[12][8] = 0.0; + rJacobian[12][9] = -(mDt * (var_x72 * var_x73)); + rJacobian[12][10] = 0.0; + rJacobian[12][11] = -(mDt * (2175084.1750841751 * var_x70)); + rJacobian[12][12] = 1.0 - (mDt * (var_x70 * (-2175.0841750841751 - var_x40 * var_x72) + 0.16806722689075632 * (2175084.1750841751 * var_chaste_interface__calcium_concentration__Cai_converted - 2175.0841750841751 * var_chaste_interface__calcium_concentration__Cass - 535.23141606043157 * var_x71 * (-63 + var_chaste_interface__membrane__V) * var_chaste_interface__L_type_calcium_current__O + 80.808080808080803 * var_x39 * var_x41 * var_chaste_interface__calcium_fluxes__P_RyR * mParameters[1]) / (pow(var_x68, 3) * pow((0.084033613445378158 + var_x69), 2)))); + rJacobian[12][13] = -(mDt * (var_x44 * var_x70 * var_x74)); + rJacobian[12][14] = 0.0; + rJacobian[12][15] = 0.0; + rJacobian[12][16] = 0.0; + rJacobian[12][17] = 0.0; + rJacobian[12][18] = 0.0; + rJacobian[12][19] = 0.0; + rJacobian[12][20] = 0.0; + rJacobian[12][21] = 0.0; + rJacobian[12][22] = 0.0; + rJacobian[12][23] = 0.0; + rJacobian[12][24] = 0.0; + rJacobian[12][25] = 0.0; + rJacobian[12][26] = 0.0; + rJacobian[12][27] = 0.0; + rJacobian[12][28] = 0.0; + rJacobian[12][29] = -(mDt * (var_x75)); + rJacobian[12][30] = -(mDt * (var_x75)); + rJacobian[12][31] = 0.0; + rJacobian[13][0] = 0.0; + rJacobian[13][1] = 0.0; + rJacobian[13][2] = 0.0; + rJacobian[13][3] = 0.0; + rJacobian[13][4] = 0.0; + rJacobian[13][5] = 0.0; + rJacobian[13][6] = -(mDt * ((0.90000000000000002 - 0.014285714285714287 * var_chaste_interface__membrane__V) * mParameters[7] * _lt_0_row[9])); + rJacobian[13][7] = 0.0; + rJacobian[13][8] = 0.0; + rJacobian[13][9] = 0.0; + rJacobian[13][10] = 0.0; + rJacobian[13][11] = 0.0; + rJacobian[13][12] = 0.0; + rJacobian[13][13] = 1.0 - (mDt * (-0.040000000000000001)); + rJacobian[13][14] = 0.0; + rJacobian[13][15] = 0.0; + rJacobian[13][16] = 0.0; + rJacobian[13][17] = 0.0; + rJacobian[13][18] = 0.0; + rJacobian[13][19] = 0.0; + rJacobian[13][20] = 0.0; + rJacobian[13][21] = 0.0; + rJacobian[13][22] = 0.0; + rJacobian[13][23] = 0.0; + rJacobian[13][24] = 0.0; + rJacobian[13][25] = 0.0; + rJacobian[13][26] = 0.0; + rJacobian[13][27] = 0.0; + rJacobian[13][28] = 0.0; + rJacobian[13][29] = 0.0; + rJacobian[13][30] = 0.0; + rJacobian[13][31] = 0.0; + rJacobian[14][0] = 0.0; + rJacobian[14][1] = 0.0; + rJacobian[14][2] = 0.0; + rJacobian[14][3] = 0.0; + rJacobian[14][4] = 0.0; + rJacobian[14][5] = 0.0; + rJacobian[14][6] = 0.0; + rJacobian[14][7] = 0.0; + rJacobian[14][8] = 0.0; + rJacobian[14][9] = 0.0; + rJacobian[14][10] = 0.0; + rJacobian[14][11] = 0.0; + rJacobian[14][12] = 0.0; + rJacobian[14][13] = 0.0; + rJacobian[14][14] = 1.0 - (mDt * (-var_x77 - var_x80 - var_x81)); + rJacobian[14][15] = -(mDt * (var_x82)); + rJacobian[14][16] = 0.0; + rJacobian[14][17] = 0.0; + rJacobian[14][18] = 0.0; + rJacobian[14][19] = 0.0; + rJacobian[14][20] = -(mDt * (var_x84)); + rJacobian[14][21] = -(mDt * (var_x86)); + rJacobian[14][22] = 0.0; + rJacobian[14][23] = 0.0; + rJacobian[14][24] = 0.0; + rJacobian[14][25] = 0.0; + rJacobian[14][26] = 0.0; + rJacobian[14][27] = 0.0; + rJacobian[14][28] = 0.0; + rJacobian[14][29] = 0.0; + rJacobian[14][30] = 0.0; + rJacobian[14][31] = 0.0; + rJacobian[15][0] = 0.0; + rJacobian[15][1] = 0.0; + rJacobian[15][2] = 0.0; + rJacobian[15][3] = 0.0; + rJacobian[15][4] = 0.0; + rJacobian[15][5] = 0.0; + rJacobian[15][6] = 0.0; + rJacobian[15][7] = 0.0; + rJacobian[15][8] = 0.0; + rJacobian[15][9] = 0.0; + rJacobian[15][10] = 0.0; + rJacobian[15][11] = 0.0; + rJacobian[15][12] = 0.0; + rJacobian[15][13] = 0.0; + rJacobian[15][14] = -(mDt * (var_x77 + var_x88)); + rJacobian[15][15] = 1.0 - (mDt * (-var_x90 - var_x91)); + rJacobian[15][16] = -(mDt * (var_x88)); + rJacobian[15][17] = -(mDt * (var_x88)); + rJacobian[15][18] = -(mDt * (var_x84 + var_x88)); + rJacobian[15][19] = -(mDt * (var_x88)); + rJacobian[15][20] = -(mDt * (var_x88)); + rJacobian[15][21] = -(mDt * (var_x88)); + rJacobian[15][22] = 0.0; + rJacobian[15][23] = 0.0; + rJacobian[15][24] = 0.0; + rJacobian[15][25] = 0.0; + rJacobian[15][26] = 0.0; + rJacobian[15][27] = 0.0; + rJacobian[15][28] = 0.0; + rJacobian[15][29] = 0.0; + rJacobian[15][30] = 0.0; + rJacobian[15][31] = 0.0; + rJacobian[16][0] = 0.0; + rJacobian[16][1] = 0.0; + rJacobian[16][2] = 0.0; + rJacobian[16][3] = 0.0; + rJacobian[16][4] = 0.0; + rJacobian[16][5] = 0.0; + rJacobian[16][6] = 0.0; + rJacobian[16][7] = 0.0; + rJacobian[16][8] = 0.0; + rJacobian[16][9] = 0.0; + rJacobian[16][10] = 0.0; + rJacobian[16][11] = 0.0; + rJacobian[16][12] = 0.0; + rJacobian[16][13] = 0.0; + rJacobian[16][14] = 0.0; + rJacobian[16][15] = 0.0; + rJacobian[16][16] = 1.0 - (mDt * (-var_x84 - var_x93)); + rJacobian[16][17] = -(mDt * (var_x94)); + rJacobian[16][18] = 0.0; + rJacobian[16][19] = 0.0; + rJacobian[16][20] = -(mDt * (var_x95)); + rJacobian[16][21] = 0.0; + rJacobian[16][22] = 0.0; + rJacobian[16][23] = 0.0; + rJacobian[16][24] = 0.0; + rJacobian[16][25] = 0.0; + rJacobian[16][26] = 0.0; + rJacobian[16][27] = 0.0; + rJacobian[16][28] = 0.0; + rJacobian[16][29] = 0.0; + rJacobian[16][30] = 0.0; + rJacobian[16][31] = 0.0; + rJacobian[17][0] = 0.0; + rJacobian[17][1] = 0.0; + rJacobian[17][2] = 0.0; + rJacobian[17][3] = 0.0; + rJacobian[17][4] = 0.0; + rJacobian[17][5] = 0.0; + rJacobian[17][6] = 0.0; + rJacobian[17][7] = 0.0; + rJacobian[17][8] = 0.0; + rJacobian[17][9] = 0.0; + rJacobian[17][10] = 0.0; + rJacobian[17][11] = 0.0; + rJacobian[17][12] = 0.0; + rJacobian[17][13] = 0.0; + rJacobian[17][14] = 0.0; + rJacobian[17][15] = 0.0; + rJacobian[17][16] = -(mDt * (var_x93)); + rJacobian[17][17] = 1.0 - (mDt * (-var_x94)); + rJacobian[17][18] = 0.0; + rJacobian[17][19] = 0.0; + rJacobian[17][20] = 0.0; + rJacobian[17][21] = 0.0; + rJacobian[17][22] = 0.0; + rJacobian[17][23] = 0.0; + rJacobian[17][24] = 0.0; + rJacobian[17][25] = 0.0; + rJacobian[17][26] = 0.0; + rJacobian[17][27] = 0.0; + rJacobian[17][28] = 0.0; + rJacobian[17][29] = 0.0; + rJacobian[17][30] = 0.0; + rJacobian[17][31] = 0.0; + rJacobian[18][0] = 0.0; + rJacobian[18][1] = 0.0; + rJacobian[18][2] = 0.0; + rJacobian[18][3] = 0.0; + rJacobian[18][4] = 0.0; + rJacobian[18][5] = 0.0; + rJacobian[18][6] = 0.0; + rJacobian[18][7] = 0.0; + rJacobian[18][8] = 0.0; + rJacobian[18][9] = 0.0; + rJacobian[18][10] = 0.0; + rJacobian[18][11] = 0.0; + rJacobian[18][12] = 0.0; + rJacobian[18][13] = 0.0; + rJacobian[18][14] = 0.0; + rJacobian[18][15] = -(mDt * (var_x81)); + rJacobian[18][16] = 0.0; + rJacobian[18][17] = 0.0; + rJacobian[18][18] = 1.0 - (mDt * (-var_x84 - var_x90)); + rJacobian[18][19] = -(mDt * (var_x87)); + rJacobian[18][20] = -(mDt * (var_x77)); + rJacobian[18][21] = 0.0; + rJacobian[18][22] = 0.0; + rJacobian[18][23] = 0.0; + rJacobian[18][24] = 0.0; + rJacobian[18][25] = 0.0; + rJacobian[18][26] = 0.0; + rJacobian[18][27] = 0.0; + rJacobian[18][28] = 0.0; + rJacobian[18][29] = 0.0; + rJacobian[18][30] = 0.0; + rJacobian[18][31] = 0.0; + rJacobian[19][0] = 0.0; + rJacobian[19][1] = 0.0; + rJacobian[19][2] = 0.0; + rJacobian[19][3] = 0.0; + rJacobian[19][4] = 0.0; + rJacobian[19][5] = 0.0; + rJacobian[19][6] = 0.0; + rJacobian[19][7] = 0.0; + rJacobian[19][8] = 0.0; + rJacobian[19][9] = 0.0; + rJacobian[19][10] = 0.0; + rJacobian[19][11] = 0.0; + rJacobian[19][12] = 0.0; + rJacobian[19][13] = 0.0; + rJacobian[19][14] = -(mDt * (var_x96)); + rJacobian[19][15] = -(mDt * (var_x96)); + rJacobian[19][16] = -(mDt * (var_x96)); + rJacobian[19][17] = -(mDt * (var_x96)); + rJacobian[19][18] = -(mDt * (var_x89 - var_x81)); + rJacobian[19][19] = 1.0 - (mDt * (-var_x84 - var_x91)); + rJacobian[19][20] = -(mDt * (var_x96)); + rJacobian[19][21] = -(mDt * (var_x96)); + rJacobian[19][22] = 0.0; + rJacobian[19][23] = 0.0; + rJacobian[19][24] = 0.0; + rJacobian[19][25] = 0.0; + rJacobian[19][26] = 0.0; + rJacobian[19][27] = 0.0; + rJacobian[19][28] = 0.0; + rJacobian[19][29] = 0.0; + rJacobian[19][30] = 0.0; + rJacobian[19][31] = 0.0; + rJacobian[20][0] = 0.0; + rJacobian[20][1] = 0.0; + rJacobian[20][2] = 0.0; + rJacobian[20][3] = 0.0; + rJacobian[20][4] = 0.0; + rJacobian[20][5] = 0.0; + rJacobian[20][6] = 0.0; + rJacobian[20][7] = 0.0; + rJacobian[20][8] = 0.0; + rJacobian[20][9] = 0.0; + rJacobian[20][10] = 0.0; + rJacobian[20][11] = 0.0; + rJacobian[20][12] = 0.0; + rJacobian[20][13] = 0.0; + rJacobian[20][14] = -(mDt * (var_x81)); + rJacobian[20][15] = 0.0; + rJacobian[20][16] = -(mDt * (var_x84)); + rJacobian[20][17] = 0.0; + rJacobian[20][18] = -(mDt * (var_x82)); + rJacobian[20][19] = 0.0; + rJacobian[20][20] = 1.0 - (mDt * (-var_x77 - var_x84 - var_x95 - var_x97)); + rJacobian[20][21] = -(mDt * (var_x98)); + rJacobian[20][22] = 0.0; + rJacobian[20][23] = 0.0; + rJacobian[20][24] = 0.0; + rJacobian[20][25] = 0.0; + rJacobian[20][26] = 0.0; + rJacobian[20][27] = 0.0; + rJacobian[20][28] = 0.0; + rJacobian[20][29] = 0.0; + rJacobian[20][30] = 0.0; + rJacobian[20][31] = 0.0; + rJacobian[21][0] = 0.0; + rJacobian[21][1] = 0.0; + rJacobian[21][2] = 0.0; + rJacobian[21][3] = 0.0; + rJacobian[21][4] = 0.0; + rJacobian[21][5] = 0.0; + rJacobian[21][6] = 0.0; + rJacobian[21][7] = 0.0; + rJacobian[21][8] = 0.0; + rJacobian[21][9] = 0.0; + rJacobian[21][10] = 0.0; + rJacobian[21][11] = 0.0; + rJacobian[21][12] = 0.0; + rJacobian[21][13] = 0.0; + rJacobian[21][14] = -(mDt * (var_x80)); + rJacobian[21][15] = 0.0; + rJacobian[21][16] = 0.0; + rJacobian[21][17] = 0.0; + rJacobian[21][18] = 0.0; + rJacobian[21][19] = 0.0; + rJacobian[21][20] = -(mDt * (var_x97)); + rJacobian[21][21] = 1.0 - (mDt * (-var_x86 - var_x98)); + rJacobian[21][22] = 0.0; + rJacobian[21][23] = 0.0; + rJacobian[21][24] = 0.0; + rJacobian[21][25] = 0.0; + rJacobian[21][26] = 0.0; + rJacobian[21][27] = 0.0; + rJacobian[21][28] = 0.0; + rJacobian[21][29] = 0.0; + rJacobian[21][30] = 0.0; + rJacobian[21][31] = 0.0; + rJacobian[22][0] = 0.0; + rJacobian[22][1] = 0.0; + rJacobian[22][2] = 0.0; + rJacobian[22][3] = 0.0; + rJacobian[22][4] = 0.0; + rJacobian[22][5] = 0.0; + rJacobian[22][6] = 0.0; + rJacobian[22][7] = 0.0; + rJacobian[22][8] = 0.0; + rJacobian[22][9] = 0.0; + rJacobian[22][10] = 0.0; + rJacobian[22][11] = 0.0; + rJacobian[22][12] = 0.0; + rJacobian[22][13] = 0.0; + rJacobian[22][14] = 0.0; + rJacobian[22][15] = 0.0; + rJacobian[22][16] = 0.0; + rJacobian[22][17] = 0.0; + rJacobian[22][18] = 0.0; + rJacobian[22][19] = 0.0; + rJacobian[22][20] = 0.0; + rJacobian[22][21] = 0.0; + rJacobian[22][22] = 1.0; + rJacobian[22][23] = 0.0; + rJacobian[22][24] = 0.0; + rJacobian[22][25] = 0.0; + rJacobian[22][26] = 0.0; + rJacobian[22][27] = 0.0; + rJacobian[22][28] = 0.0; + rJacobian[22][29] = 0.0; + rJacobian[22][30] = 0.0; + rJacobian[22][31] = 0.0; + rJacobian[23][0] = 0.0; + rJacobian[23][1] = 0.0; + rJacobian[23][2] = 0.0; + rJacobian[23][3] = 0.0; + rJacobian[23][4] = 0.0; + rJacobian[23][5] = 0.0; + rJacobian[23][6] = 0.0; + rJacobian[23][7] = 0.0; + rJacobian[23][8] = 0.0; + rJacobian[23][9] = 0.0; + rJacobian[23][10] = 0.0; + rJacobian[23][11] = 0.0; + rJacobian[23][12] = 0.0; + rJacobian[23][13] = 0.0; + rJacobian[23][14] = 0.0; + rJacobian[23][15] = 0.0; + rJacobian[23][16] = 0.0; + rJacobian[23][17] = 0.0; + rJacobian[23][18] = 0.0; + rJacobian[23][19] = 0.0; + rJacobian[23][20] = 0.0; + rJacobian[23][21] = 0.0; + rJacobian[23][22] = -(mDt * (-var_x102 * var_x103 * var_x105)); + rJacobian[23][23] = 1.0 - (mDt * (var_x104 * (-1.5794450018272976 * var_x107 - var_x103 * var_x108 * var_chaste_interface__non_inactivating_steady_state_potassium_current__iKss - var_x108 * pow(var_chaste_interface__slow_delayed_rectifier_potassium_current__nKs, 2) * mParameters[14] - 0.25271120029236765 * var_x99 * var_chaste_interface__ultra_rapidly_activating_delayed_rectifier_potassium_current__aur * var_chaste_interface__ultra_rapidly_activating_delayed_rectifier_potassium_current__iur - var_x108 * pow(var_chaste_interface__fast_transient_outward_potassium_current__ato_f, 3) * mParameters[16] * var_chaste_interface__fast_transient_outward_potassium_current__ito_f - 1.5794450018272976 * var_x100 * var_x111 * mParameters[11] / var_x110 + 0.14151827216372587 * var_x102 * var_x109 * var_x111 * var_x99 * mParameters[5] * mParameters[11] / pow(var_x110, 2)))); + rJacobian[23][24] = 0.0; + rJacobian[23][25] = 0.0; + rJacobian[23][26] = 0.0; + rJacobian[23][27] = -(mDt * (-var_x105 * (-25.674321243523316 * log(var_x106 * (mParameters[5] + 0.020408163265306124 * mParameters[6])) + var_chaste_interface__membrane__V) * mParameters[13])); + rJacobian[23][28] = 0.0; + rJacobian[23][29] = 0.0; + rJacobian[23][30] = 0.0; + rJacobian[23][31] = -(mDt * (var_x104 * (5.3367950117641947e-8 * var_x114 - 0.032233571465863219 * var_x107))); + rJacobian[24][0] = 0.0; + rJacobian[24][1] = 0.0; + rJacobian[24][2] = 0.0; + rJacobian[24][3] = 0.0; + rJacobian[24][4] = 0.0; + rJacobian[24][5] = 0.0; + rJacobian[24][6] = 0.0; + rJacobian[24][7] = 0.0; + rJacobian[24][8] = 0.0; + rJacobian[24][9] = 0.0; + rJacobian[24][10] = 0.0; + rJacobian[24][11] = 0.0; + rJacobian[24][12] = 0.0; + rJacobian[24][13] = 0.0; + rJacobian[24][14] = 0.0; + rJacobian[24][15] = 0.0; + rJacobian[24][16] = 0.0; + rJacobian[24][17] = 0.0; + rJacobian[24][18] = 0.0; + rJacobian[24][19] = 0.0; + rJacobian[24][20] = 0.0; + rJacobian[24][21] = 0.0; + rJacobian[24][22] = 0.0; + rJacobian[24][23] = 0.0; + rJacobian[24][24] = 1.0 - (mDt * (-0.023761000000000001 - var_x115 - 0.047002000000000002 * _lt_0_row[28])); + rJacobian[24][25] = -(mDt * (0.036777999999999998 - var_x115)); + rJacobian[24][26] = -(mDt * (var_x116)); + rJacobian[24][27] = -(mDt * (var_x116)); + rJacobian[24][28] = 0.0; + rJacobian[24][29] = 0.0; + rJacobian[24][30] = 0.0; + rJacobian[24][31] = 0.0; + rJacobian[25][0] = 0.0; + rJacobian[25][1] = 0.0; + rJacobian[25][2] = 0.0; + rJacobian[25][3] = 0.0; + rJacobian[25][4] = 0.0; + rJacobian[25][5] = 0.0; + rJacobian[25][6] = 0.0; + rJacobian[25][7] = 0.0; + rJacobian[25][8] = 0.0; + rJacobian[25][9] = 0.0; + rJacobian[25][10] = 0.0; + rJacobian[25][11] = 0.0; + rJacobian[25][12] = 0.0; + rJacobian[25][13] = 0.0; + rJacobian[25][14] = 0.0; + rJacobian[25][15] = 0.0; + rJacobian[25][16] = 0.0; + rJacobian[25][17] = 0.0; + rJacobian[25][18] = 0.0; + rJacobian[25][19] = 0.0; + rJacobian[25][20] = 0.0; + rJacobian[25][21] = 0.0; + rJacobian[25][22] = 0.0; + rJacobian[25][23] = 0.0; + rJacobian[25][24] = -(mDt * (0.023761000000000001)); + rJacobian[25][25] = 1.0 - (mDt * (-0.036777999999999998 - var_x117)); + rJacobian[25][26] = 0.0; + rJacobian[25][27] = -(mDt * (var_x118)); + rJacobian[25][28] = 0.0; + rJacobian[25][29] = 0.0; + rJacobian[25][30] = 0.0; + rJacobian[25][31] = 0.0; + rJacobian[26][0] = 0.0; + rJacobian[26][1] = 0.0; + rJacobian[26][2] = 0.0; + rJacobian[26][3] = 0.0; + rJacobian[26][4] = 0.0; + rJacobian[26][5] = 0.0; + rJacobian[26][6] = 0.0; + rJacobian[26][7] = 0.0; + rJacobian[26][8] = 0.0; + rJacobian[26][9] = 0.0; + rJacobian[26][10] = 0.0; + rJacobian[26][11] = 0.0; + rJacobian[26][12] = 0.0; + rJacobian[26][13] = 0.0; + rJacobian[26][14] = 0.0; + rJacobian[26][15] = 0.0; + rJacobian[26][16] = 0.0; + rJacobian[26][17] = 0.0; + rJacobian[26][18] = 0.0; + rJacobian[26][19] = 0.0; + rJacobian[26][20] = 0.0; + rJacobian[26][21] = 0.0; + rJacobian[26][22] = 0.0; + rJacobian[26][23] = 0.0; + rJacobian[26][24] = 0.0; + rJacobian[26][25] = 0.0; + rJacobian[26][26] = 1.0 - (mDt * (-var_x119)); + rJacobian[26][27] = -(mDt * (var_x120)); + rJacobian[26][28] = 0.0; + rJacobian[26][29] = 0.0; + rJacobian[26][30] = 0.0; + rJacobian[26][31] = 0.0; + rJacobian[27][0] = 0.0; + rJacobian[27][1] = 0.0; + rJacobian[27][2] = 0.0; + rJacobian[27][3] = 0.0; + rJacobian[27][4] = 0.0; + rJacobian[27][5] = 0.0; + rJacobian[27][6] = 0.0; + rJacobian[27][7] = 0.0; + rJacobian[27][8] = 0.0; + rJacobian[27][9] = 0.0; + rJacobian[27][10] = 0.0; + rJacobian[27][11] = 0.0; + rJacobian[27][12] = 0.0; + rJacobian[27][13] = 0.0; + rJacobian[27][14] = 0.0; + rJacobian[27][15] = 0.0; + rJacobian[27][16] = 0.0; + rJacobian[27][17] = 0.0; + rJacobian[27][18] = 0.0; + rJacobian[27][19] = 0.0; + rJacobian[27][20] = 0.0; + rJacobian[27][21] = 0.0; + rJacobian[27][22] = 0.0; + rJacobian[27][23] = 0.0; + rJacobian[27][24] = 0.0; + rJacobian[27][25] = -(mDt * (var_x117)); + rJacobian[27][26] = -(mDt * (var_x119)); + rJacobian[27][27] = 1.0 - (mDt * (-var_x118 - var_x120)); + rJacobian[27][28] = 0.0; + rJacobian[27][29] = 0.0; + rJacobian[27][30] = 0.0; + rJacobian[27][31] = 0.0; + rJacobian[28][0] = 0.0; + rJacobian[28][1] = 0.0; + rJacobian[28][2] = 0.0; + rJacobian[28][3] = 0.0; + rJacobian[28][4] = 0.0; + rJacobian[28][5] = 0.0; + rJacobian[28][6] = 0.0; + rJacobian[28][7] = 0.0; + rJacobian[28][8] = 0.0; + rJacobian[28][9] = 0.0; + rJacobian[28][10] = 0.0; + rJacobian[28][11] = 0.0; + rJacobian[28][12] = 0.0; + rJacobian[28][13] = 0.0; + rJacobian[28][14] = 0.0; + rJacobian[28][15] = 0.0; + rJacobian[28][16] = 0.0; + rJacobian[28][17] = 0.0; + rJacobian[28][18] = 0.0; + rJacobian[28][19] = 0.0; + rJacobian[28][20] = 0.0; + rJacobian[28][21] = 0.0; + rJacobian[28][22] = 0.0; + rJacobian[28][23] = 0.0; + rJacobian[28][24] = 0.0; + rJacobian[28][25] = 0.0; + rJacobian[28][26] = 0.0; + rJacobian[28][27] = 0.0; + rJacobian[28][28] = 1.0 - (mDt * (-0.00080000000000000004)); + rJacobian[28][29] = -(mDt * (0.0089999999999999993)); + rJacobian[28][30] = 0.0; + rJacobian[28][31] = 0.0; + rJacobian[29][0] = 0.0; + rJacobian[29][1] = 0.0; + rJacobian[29][2] = 0.0; + rJacobian[29][3] = 0.0; + rJacobian[29][4] = 0.0; + rJacobian[29][5] = 0.0; + rJacobian[29][6] = 0.0; + rJacobian[29][7] = 0.0; + rJacobian[29][8] = 0.0; + rJacobian[29][9] = 0.0; + rJacobian[29][10] = 0.0; + rJacobian[29][11] = 0.0; + rJacobian[29][12] = -(mDt * (-var_x121 + 0.024299999999999999 * var_x122 * (1 - var_x39 - var_chaste_interface__ryanodine_receptors__P_C2))); + rJacobian[29][13] = 0.0; + rJacobian[29][14] = 0.0; + rJacobian[29][15] = 0.0; + rJacobian[29][16] = 0.0; + rJacobian[29][17] = 0.0; + rJacobian[29][18] = 0.0; + rJacobian[29][19] = 0.0; + rJacobian[29][20] = 0.0; + rJacobian[29][21] = 0.0; + rJacobian[29][22] = 0.0; + rJacobian[29][23] = 0.0; + rJacobian[29][24] = 0.0; + rJacobian[29][25] = 0.0; + rJacobian[29][26] = 0.0; + rJacobian[29][27] = 0.0; + rJacobian[29][28] = -(mDt * (0.00080000000000000004 - var_x123)); + rJacobian[29][29] = 1.0 - (mDt * (-0.080249999999999988 - var_x123 - var_x124)); + rJacobian[29][30] = -(mDt * (0.96499999999999997 - var_x123)); + rJacobian[29][31] = 0.0; + rJacobian[30][0] = 0.0; + rJacobian[30][1] = 0.0; + rJacobian[30][2] = 0.0; + rJacobian[30][3] = 0.0; + rJacobian[30][4] = 0.0; + rJacobian[30][5] = 0.0; + rJacobian[30][6] = 0.0; + rJacobian[30][7] = 0.0; + rJacobian[30][8] = 0.0; + rJacobian[30][9] = 0.0; + rJacobian[30][10] = 0.0; + rJacobian[30][11] = 0.0; + rJacobian[30][12] = -(mDt * (var_x121)); + rJacobian[30][13] = 0.0; + rJacobian[30][14] = 0.0; + rJacobian[30][15] = 0.0; + rJacobian[30][16] = 0.0; + rJacobian[30][17] = 0.0; + rJacobian[30][18] = 0.0; + rJacobian[30][19] = 0.0; + rJacobian[30][20] = 0.0; + rJacobian[30][21] = 0.0; + rJacobian[30][22] = 0.0; + rJacobian[30][23] = 0.0; + rJacobian[30][24] = 0.0; + rJacobian[30][25] = 0.0; + rJacobian[30][26] = 0.0; + rJacobian[30][27] = 0.0; + rJacobian[30][28] = 0.0; + rJacobian[30][29] = -(mDt * (var_x124)); + rJacobian[30][30] = 1.0 - (mDt * (-0.96499999999999997)); + rJacobian[30][31] = 0.0; + rJacobian[31][0] = 0.0; + rJacobian[31][1] = 0.0; + rJacobian[31][2] = 0.0; + rJacobian[31][3] = 0.0; + rJacobian[31][4] = 0.0; + rJacobian[31][5] = 0.0; + rJacobian[31][6] = 0.0; + rJacobian[31][7] = 0.0; + rJacobian[31][8] = 0.0; + rJacobian[31][9] = 0.0; + rJacobian[31][10] = 0.0; + rJacobian[31][11] = -(mDt * (184.55541474839183 * var_x104 * var_x63)); + rJacobian[31][12] = 0.0; + rJacobian[31][13] = 0.0; + rJacobian[31][14] = 0.0; + rJacobian[31][15] = 0.0; + rJacobian[31][16] = 0.0; + rJacobian[31][17] = 0.0; + rJacobian[31][18] = 0.0; + rJacobian[31][19] = 0.0; + rJacobian[31][20] = 0.0; + rJacobian[31][21] = -(mDt * (-var_x105 * (-25.674321243523316 * log(var_x125 * (mParameters[6] + 0.1111111111111111 * mParameters[5])) + var_chaste_interface__membrane__V) * mParameters[9])); + rJacobian[31][22] = 0.0; + rJacobian[31][23] = -(mDt * (var_x104 * (-0.00045628411163899709 * var_x125 - 0.17549388909192196 * var_x126))); + rJacobian[31][24] = 0.0; + rJacobian[31][25] = 0.0; + rJacobian[31][26] = 0.0; + rJacobian[31][27] = 0.0; + rJacobian[31][28] = 0.0; + rJacobian[31][29] = 0.0; + rJacobian[31][30] = 0.0; + rJacobian[31][31] = 1.0 - (mDt * (var_x104 * (-1.5794450018272976 * var_x126 - 0.0041065570047509742 * var_x125 - 0.55366624424517552 * var_x67 - 8.0051925176462917e-8 * var_x114))); + } + + void Cellbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLBackwardEulerOpt::UpdateTransmembranePotential(double var_chaste_interface__environment__time) + { + // Time units: millisecond + std::vector& rY = rGetStateVariables(); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -82.4202 + double var_chaste_interface__calcium_concentration__Cai_converted = rY[1]; + // Units: millimolar; Initial value: 0.000115001 + double var_chaste_interface__L_type_calcium_current__O = rY[11]; + // Units: dimensionless; Initial value: 9.30308e-19 + double var_chaste_interface__sodium_concentration__Nai = rY[18]; + // Units: micromolar; Initial value: 14237.1 + double var_chaste_interface__fast_sodium_current__O_Na = rY[19]; + // Units: dimensionless; Initial value: 7.13483e-07 + double var_chaste_interface__potassium_concentration__Ki = rY[27]; + // Units: micromolar; Initial value: 143720.0 + double var_chaste_interface__fast_transient_outward_potassium_current__ato_f = rY[28]; + // Units: dimensionless; Initial value: 0.00265563 + double var_chaste_interface__fast_transient_outward_potassium_current__ito_f = rY[29]; + // Units: dimensionless; Initial value: 0.999977 + double var_chaste_interface__slow_delayed_rectifier_potassium_current__nKs = rY[32]; + // Units: dimensionless; Initial value: 0.000262753 + double var_chaste_interface__ultra_rapidly_activating_delayed_rectifier_potassium_current__aur = rY[33]; + // Units: dimensionless; Initial value: 0.000417069 + double var_chaste_interface__ultra_rapidly_activating_delayed_rectifier_potassium_current__iur = rY[34]; + // Units: dimensionless; Initial value: 0.998543 + double var_chaste_interface__non_inactivating_steady_state_potassium_current__aKss = rY[35]; + // Units: dimensionless; Initial value: 0.000417069 + double var_chaste_interface__non_inactivating_steady_state_potassium_current__iKss = rY[36]; + // Units: dimensionless; Initial value: 1.0 + double var_chaste_interface__rapid_delayed_rectifier_potassium_current__O_K = rY[37]; + // Units: dimensionless; Initial value: 0.000175298 + + // Lookup table indexing + const bool _oob_0 = Cellbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLBackwardEulerOpt_LookupTables::Instance()->CheckIndex0(var_chaste_interface__membrane__V); +// LCOV_EXCL_START + if (_oob_0) + EXCEPTION(DumpState("membrane_voltage outside lookup table range", rY , var_chaste_interface__environment__time)); +// LCOV_EXCL_STOP + const double* const _lt_0_row = Cellbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLBackwardEulerOpt_LookupTables::Instance()->IndexTable0(var_chaste_interface__membrane__V); + + const double var_calcium_concentration__Cai = 1000 * var_chaste_interface__calcium_concentration__Cai_converted; // micromolar + const double var_calcium_pump_current__i_pCa = pow(var_calcium_concentration__Cai, 2) / (0.25 + pow(var_calcium_concentration__Cai, 2)); // picoA_per_picoF + const double var_L_type_calcium_current__i_CaL = (-63 + var_chaste_interface__membrane__V) * var_chaste_interface__L_type_calcium_current__O * mParameters[7]; // picoA_per_picoF + const double var_calcium_background_current__i_Cab = 0.00036699999999999998 * var_chaste_interface__membrane__V - 0.0047112379481865285 * log(mParameters[4] / var_calcium_concentration__Cai); // picoA_per_picoF + const double var_fast_transient_outward_potassium_current__E_K = 25.674321243523316 * log(mParameters[5] / var_chaste_interface__potassium_concentration__Ki); // millivolt + const double var_fast_transient_outward_potassium_current__i_Kto_f = pow(var_chaste_interface__fast_transient_outward_potassium_current__ato_f, 3) * (-var_fast_transient_outward_potassium_current__E_K + var_chaste_interface__membrane__V) * mParameters[16] * var_chaste_interface__fast_transient_outward_potassium_current__ito_f; // picoA_per_picoF + const double var_non_inactivating_steady_state_potassium_current__i_Kss = (-var_fast_transient_outward_potassium_current__E_K + var_chaste_interface__membrane__V) * var_chaste_interface__non_inactivating_steady_state_potassium_current__aKss * mParameters[12] * var_chaste_interface__non_inactivating_steady_state_potassium_current__iKss; // picoA_per_picoF + const double var_slow_delayed_rectifier_potassium_current__i_Ks = pow(var_chaste_interface__slow_delayed_rectifier_potassium_current__nKs, 2) * (-var_fast_transient_outward_potassium_current__E_K + var_chaste_interface__membrane__V) * mParameters[14]; // picoA_per_picoF + const double var_slow_transient_outward_potassium_current__i_Kto_s = 0; // picoA_per_picoF + const double var_fast_sodium_current__E_Na = 25.674321243523316 * log((mParameters[6] + 0.1111111111111111 * mParameters[5]) / (var_chaste_interface__sodium_concentration__Nai + 0.1111111111111111 * var_chaste_interface__potassium_concentration__Ki)); // millivolt + const double var_fast_sodium_current__i_Na = (-var_fast_sodium_current__E_Na + var_chaste_interface__membrane__V) * var_chaste_interface__fast_sodium_current__O_Na * mParameters[9]; // picoA_per_picoF + const double var_rapid_delayed_rectifier_potassium_current__i_Kr = (-25.674321243523316 * log((mParameters[5] + 0.020408163265306124 * mParameters[6]) / (var_chaste_interface__potassium_concentration__Ki + 0.020408163265306124 * var_chaste_interface__sodium_concentration__Nai)) + var_chaste_interface__membrane__V) * var_chaste_interface__rapid_delayed_rectifier_potassium_current__O_K * mParameters[13]; // picoA_per_picoF + const double var_sodium_background_current__i_Nab = 0.0025999999999999999 * var_chaste_interface__membrane__V - 0.0025999999999999999 * var_fast_sodium_current__E_Na; // picoA_per_picoF + const double var_sodium_calcium_exchange_current__i_NaCa = (pow(var_chaste_interface__sodium_concentration__Nai, 3) * mParameters[4] * _lt_0_row[1] - pow(mParameters[6], 3) * var_calcium_concentration__Cai * _lt_0_row[2]) * mParameters[15] / ((_lt_0_row[3]) * (1380 + mParameters[4]) * (669921875000000.0 + pow(mParameters[6], 3))); // picoA_per_picoF + const double var_sodium_potassium_pump_current__i_NaK = 0.88 * mParameters[5] / ((1 + 3043189.1166997822 * pow((1 / var_chaste_interface__sodium_concentration__Nai), 1.5)) * (1500 + mParameters[5]) * (1 + _lt_0_row[5] + 0.036499999999999998 * (-0.14285714285714285 + 0.14285714285714285 * exp(1.4858841010401188e-5 * mParameters[6])) * _lt_0_row[4])); // picoA_per_picoF + const double var_time_independent_potassium_current__i_K1 = (-var_fast_transient_outward_potassium_current__E_K + var_chaste_interface__membrane__V) * mParameters[5] * mParameters[11] / ((1 + exp(0.089599999999999999 * var_chaste_interface__membrane__V - 0.089599999999999999 * var_fast_transient_outward_potassium_current__E_K)) * (210 + mParameters[5])); // picoA_per_picoF + const double var_ultra_rapidly_activating_delayed_rectifier_potassium_current__i_Kur = 0.16 * (-var_fast_transient_outward_potassium_current__E_K + var_chaste_interface__membrane__V) * var_chaste_interface__ultra_rapidly_activating_delayed_rectifier_potassium_current__aur * var_chaste_interface__ultra_rapidly_activating_delayed_rectifier_potassium_current__iur; // picoA_per_picoF + const double d_dt_chaste_interface_var_membrane__V = -var_L_type_calcium_current__i_CaL - var_calcium_background_current__i_Cab - var_calcium_pump_current__i_pCa - var_fast_sodium_current__i_Na - var_fast_transient_outward_potassium_current__i_Kto_f - var_non_inactivating_steady_state_potassium_current__i_Kss - var_rapid_delayed_rectifier_potassium_current__i_Kr - var_slow_delayed_rectifier_potassium_current__i_Ks - var_slow_transient_outward_potassium_current__i_Kto_s - var_sodium_background_current__i_Nab - var_sodium_calcium_exchange_current__i_NaCa - var_sodium_potassium_pump_current__i_NaK - var_time_independent_potassium_current__i_K1 - var_ultra_rapidly_activating_delayed_rectifier_potassium_current__i_Kur - GetIntracellularAreaStimulus(var_chaste_interface__environment__time) / HeartConfig::Instance()->GetCapacitance() - 2 * (40 + var_chaste_interface__membrane__V) * var_calcium_concentration__Cai / ((_lt_0_row[0]) * (10 + var_calcium_concentration__Cai)); // millivolt / millisecond + + rY[0] += mDt*d_dt_chaste_interface_var_membrane__V; + } + + void Cellbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLBackwardEulerOpt::ComputeOneStepExceptVoltage(double var_chaste_interface__environment__time) + { + // Time units: millisecond + std::vector& rY = rGetStateVariables(); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -82.4202 + double var_chaste_interface__fast_transient_outward_potassium_current__ato_f = rY[28]; + // Units: dimensionless; Initial value: 0.00265563 + double var_chaste_interface__fast_transient_outward_potassium_current__ito_f = rY[29]; + // Units: dimensionless; Initial value: 0.999977 + double var_chaste_interface__slow_transient_outward_potassium_current__ato_s = rY[30]; + // Units: dimensionless; Initial value: 0.000417069 + double var_chaste_interface__slow_transient_outward_potassium_current__ito_s = rY[31]; + // Units: dimensionless; Initial value: 0.998543 + double var_chaste_interface__slow_delayed_rectifier_potassium_current__nKs = rY[32]; + // Units: dimensionless; Initial value: 0.000262753 + double var_chaste_interface__ultra_rapidly_activating_delayed_rectifier_potassium_current__aur = rY[33]; + // Units: dimensionless; Initial value: 0.000417069 + double var_chaste_interface__ultra_rapidly_activating_delayed_rectifier_potassium_current__iur = rY[34]; + // Units: dimensionless; Initial value: 0.998543 + double var_chaste_interface__non_inactivating_steady_state_potassium_current__aKss = rY[35]; + // Units: dimensionless; Initial value: 0.000417069 + + // Lookup table indexing + const bool _oob_0 = Cellbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLBackwardEulerOpt_LookupTables::Instance()->CheckIndex0(var_chaste_interface__membrane__V); +// LCOV_EXCL_START + if (_oob_0) + EXCEPTION(DumpState("membrane_voltage outside lookup table range", rY , var_chaste_interface__environment__time)); +// LCOV_EXCL_STOP + const double* const _lt_0_row = Cellbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLBackwardEulerOpt_LookupTables::Instance()->IndexTable0(var_chaste_interface__membrane__V); + + const double var_fast_transient_outward_potassium_current__alpha_a = 0.18064 * _lt_0_row[17]; + const double var_fast_transient_outward_potassium_current__alpha_i = 0.00015200000000000001 * _lt_0_row[20] / (_lt_0_row[19]); + const double var_fast_transient_outward_potassium_current__beta_a = 0.39560000000000001 * _lt_0_row[18]; + const double var_fast_transient_outward_potassium_current__beta_i = 0.00095 * _lt_0_row[22] / (_lt_0_row[21]); + const double var_non_inactivating_steady_state_potassium_current__tau_Kss = _lt_0_row[32]; + const double var_slow_delayed_rectifier_potassium_current__alpha_n = _lt_0_row[29]; + const double var_slow_delayed_rectifier_potassium_current__beta_n = 9.5333299999999997e-5 * _lt_0_row[30]; + const double var_slow_transient_outward_potassium_current__ass = _lt_0_row[31]; + const double var_slow_transient_outward_potassium_current__iss = _lt_0_row[33]; + const double var_slow_transient_outward_potassium_current__tau_ta_s = _lt_0_row[34]; + const double var_slow_transient_outward_potassium_current__tau_ti_s = _lt_0_row[35]; + const double var_ultra_rapidly_activating_delayed_rectifier_potassium_current__tau_aur = _lt_0_row[34]; + const double var_ultra_rapidly_activating_delayed_rectifier_potassium_current__tau_iur = _lt_0_row[36]; + + + rY[28] = (var_chaste_interface__fast_transient_outward_potassium_current__ato_f + ((var_fast_transient_outward_potassium_current__alpha_a) * mDt)) / (1.0 - ((-var_fast_transient_outward_potassium_current__alpha_a - var_fast_transient_outward_potassium_current__beta_a) * mDt)); + rY[29] = (var_chaste_interface__fast_transient_outward_potassium_current__ito_f + ((var_fast_transient_outward_potassium_current__alpha_i) * mDt)) / (1.0 - ((-var_fast_transient_outward_potassium_current__alpha_i - var_fast_transient_outward_potassium_current__beta_i) * mDt)); + rY[35] = (var_chaste_interface__non_inactivating_steady_state_potassium_current__aKss + ((var_slow_transient_outward_potassium_current__ass / var_non_inactivating_steady_state_potassium_current__tau_Kss) * mDt)) / (1.0 - ((-1 / var_non_inactivating_steady_state_potassium_current__tau_Kss) * mDt)); + rY[32] = (var_chaste_interface__slow_delayed_rectifier_potassium_current__nKs + ((var_slow_delayed_rectifier_potassium_current__alpha_n) * mDt)) / (1.0 - ((-var_slow_delayed_rectifier_potassium_current__alpha_n - var_slow_delayed_rectifier_potassium_current__beta_n) * mDt)); + rY[30] = (var_chaste_interface__slow_transient_outward_potassium_current__ato_s + ((var_slow_transient_outward_potassium_current__ass / var_slow_transient_outward_potassium_current__tau_ta_s) * mDt)) / (1.0 - ((-1 / var_slow_transient_outward_potassium_current__tau_ta_s) * mDt)); + rY[31] = (var_chaste_interface__slow_transient_outward_potassium_current__ito_s + ((var_slow_transient_outward_potassium_current__iss / var_slow_transient_outward_potassium_current__tau_ti_s) * mDt)) / (1.0 - ((-1 / var_slow_transient_outward_potassium_current__tau_ti_s) * mDt)); + rY[33] = (var_chaste_interface__ultra_rapidly_activating_delayed_rectifier_potassium_current__aur + ((var_slow_transient_outward_potassium_current__ass / var_ultra_rapidly_activating_delayed_rectifier_potassium_current__tau_aur) * mDt)) / (1.0 - ((-1 / var_ultra_rapidly_activating_delayed_rectifier_potassium_current__tau_aur) * mDt)); + rY[34] = (var_chaste_interface__ultra_rapidly_activating_delayed_rectifier_potassium_current__iur + ((var_slow_transient_outward_potassium_current__iss / var_ultra_rapidly_activating_delayed_rectifier_potassium_current__tau_iur) * mDt)) / (1.0 - ((-1 / var_ultra_rapidly_activating_delayed_rectifier_potassium_current__tau_iur) * mDt)); + + double _guess[32] = {rY[12],rY[13],rY[14],rY[15],rY[16],rY[17],rY[11],rY[7],rY[6],rY[3],rY[4],rY[1],rY[2],rY[5],rY[20],rY[21],rY[22],rY[23],rY[25],rY[26],rY[24],rY[19],rY[36],rY[27],rY[38],rY[39],rY[40],rY[37],rY[10],rY[8],rY[9],rY[18]}; + CardiacNewtonSolver<32,Cellbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLBackwardEulerOpt>* _p_solver = CardiacNewtonSolver<32,Cellbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLBackwardEulerOpt>::Instance(); + _p_solver->Solve(*this, var_chaste_interface__environment__time, _guess); + rY[12] = _guess[0]; + rY[13] = _guess[1]; + rY[14] = _guess[2]; + rY[15] = _guess[3]; + rY[16] = _guess[4]; + rY[17] = _guess[5]; + rY[11] = _guess[6]; + rY[7] = _guess[7]; + rY[6] = _guess[8]; + rY[3] = _guess[9]; + rY[4] = _guess[10]; + rY[1] = _guess[11]; + rY[2] = _guess[12]; + rY[5] = _guess[13]; + rY[20] = _guess[14]; + rY[21] = _guess[15]; + rY[22] = _guess[16]; + rY[23] = _guess[17]; + rY[25] = _guess[18]; + rY[26] = _guess[19]; + rY[24] = _guess[20]; + rY[19] = _guess[21]; + rY[36] = _guess[22]; + rY[27] = _guess[23]; + rY[38] = _guess[24]; + rY[39] = _guess[25]; + rY[40] = _guess[26]; + rY[37] = _guess[27]; + rY[10] = _guess[28]; + rY[8] = _guess[29]; + rY[9] = _guess[30]; + rY[18] = _guess[31]; + } + + std::vector Cellbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLBackwardEulerOpt::ComputeDerivedQuantities(double var_chaste_interface__environment__time, const std::vector & rY) + { + // Inputs: + // Time units: millisecond + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -82.4202 + double var_chaste_interface__calcium_concentration__Cai_converted = rY[1]; + // Units: millimolar; Initial value: 0.000115001 + double var_chaste_interface__calcium_concentration__Cass = rY[2]; + // Units: micromolar; Initial value: 0.115001 + double var_chaste_interface__calcium_concentration__CaJSR = rY[3]; + // Units: micromolar; Initial value: 1299.5 + double var_chaste_interface__calcium_fluxes__P_RyR = rY[5]; + // Units: dimensionless; Initial value: 0.0 + double var_chaste_interface__ryanodine_receptors__P_O1 = rY[8]; + // Units: dimensionless; Initial value: 1.49102e-05 + double var_chaste_interface__ryanodine_receptors__P_O2 = rY[9]; + // Units: dimensionless; Initial value: 9.51726e-11 + double var_chaste_interface__L_type_calcium_current__O = rY[11]; + // Units: dimensionless; Initial value: 9.30308e-19 + double var_chaste_interface__sodium_concentration__Nai = rY[18]; + // Units: micromolar; Initial value: 14237.1 + double var_chaste_interface__fast_sodium_current__O_Na = rY[19]; + // Units: dimensionless; Initial value: 7.13483e-07 + double var_chaste_interface__potassium_concentration__Ki = rY[27]; + // Units: micromolar; Initial value: 143720.0 + double var_chaste_interface__fast_transient_outward_potassium_current__ato_f = rY[28]; + // Units: dimensionless; Initial value: 0.00265563 + double var_chaste_interface__fast_transient_outward_potassium_current__ito_f = rY[29]; + // Units: dimensionless; Initial value: 0.999977 + double var_chaste_interface__slow_delayed_rectifier_potassium_current__nKs = rY[32]; + // Units: dimensionless; Initial value: 0.000262753 + double var_chaste_interface__non_inactivating_steady_state_potassium_current__aKss = rY[35]; + // Units: dimensionless; Initial value: 0.000417069 + double var_chaste_interface__non_inactivating_steady_state_potassium_current__iKss = rY[36]; + // Units: dimensionless; Initial value: 1.0 + double var_chaste_interface__rapid_delayed_rectifier_potassium_current__O_K = rY[37]; + // Units: dimensionless; Initial value: 0.000175298 + + + // Mathematics + const double var_L_type_calcium_current__E_CaL = 63; // millivolt + const double var_calcium_concentration__Cai = 1000 * var_chaste_interface__calcium_concentration__Cai_converted; // micromolar + const double var_membrane__F = 96.5; // coulomb_per_millimole + const double var_membrane__R = 8.3140000000000001; // joule_per_mole_kelvin + const double var_membrane__T = 298; // kelvin + const double var_L_type_calcium_current__i_CaL = (-var_L_type_calcium_current__E_CaL + var_chaste_interface__membrane__V) * var_chaste_interface__L_type_calcium_current__O * mParameters[7]; // picoA_per_picoF + const double var_L_type_calcium_current__i_CaL_converted = HeartConfig::Instance()->GetCapacitance() * var_L_type_calcium_current__i_CaL; // uA_per_cm2 + const double var_membrane__i_stim_converted = GetIntracellularAreaStimulus(var_chaste_interface__environment__time); // uA_per_cm2 + const double var_fast_transient_outward_potassium_current__E_K = var_membrane__R * var_membrane__T * log(mParameters[5] / var_chaste_interface__potassium_concentration__Ki) / var_membrane__F; // millivolt + const double var_fast_transient_outward_potassium_current__i_Kto_f = pow(var_chaste_interface__fast_transient_outward_potassium_current__ato_f, 3) * (-var_fast_transient_outward_potassium_current__E_K + var_chaste_interface__membrane__V) * mParameters[16] * var_chaste_interface__fast_transient_outward_potassium_current__ito_f; // picoA_per_picoF + const double var_fast_transient_outward_potassium_current__i_Kto_f_converted = HeartConfig::Instance()->GetCapacitance() * var_fast_transient_outward_potassium_current__i_Kto_f; // uA_per_cm2 + const double var_non_inactivating_steady_state_potassium_current__i_Kss = (-var_fast_transient_outward_potassium_current__E_K + var_chaste_interface__membrane__V) * var_chaste_interface__non_inactivating_steady_state_potassium_current__aKss * mParameters[12] * var_chaste_interface__non_inactivating_steady_state_potassium_current__iKss; // picoA_per_picoF + const double var_non_inactivating_steady_state_potassium_current__i_Kss_converted = HeartConfig::Instance()->GetCapacitance() * var_non_inactivating_steady_state_potassium_current__i_Kss; // uA_per_cm2 + const double var_calcium_fluxes__J_rel = (-var_chaste_interface__calcium_concentration__Cass + var_chaste_interface__calcium_concentration__CaJSR) * (var_chaste_interface__ryanodine_receptors__P_O1 + var_chaste_interface__ryanodine_receptors__P_O2) * var_chaste_interface__calcium_fluxes__P_RyR * mParameters[1]; // micromolar_per_millisecond + const double var_slow_delayed_rectifier_potassium_current__i_Ks = pow(var_chaste_interface__slow_delayed_rectifier_potassium_current__nKs, 2) * (-var_fast_transient_outward_potassium_current__E_K + var_chaste_interface__membrane__V) * mParameters[14]; // picoA_per_picoF + const double var_slow_delayed_rectifier_potassium_current__i_Ks_converted = HeartConfig::Instance()->GetCapacitance() * var_slow_delayed_rectifier_potassium_current__i_Ks; // uA_per_cm2 + const double var_sodium_calcium_exchange_current__K_mCa = 1380; // micromolar + const double var_sodium_calcium_exchange_current__K_mNa = 87500; // micromolar + const double var_sodium_calcium_exchange_current__eta = 0.34999999999999998; // dimensionless + const double var_sodium_calcium_exchange_current__k_sat = 0.10000000000000001; // dimensionless + const double var_fast_sodium_current__E_Na = var_membrane__R * var_membrane__T * log((mParameters[6] + 0.1111111111111111 * mParameters[5]) / (var_chaste_interface__sodium_concentration__Nai + 0.1111111111111111 * var_chaste_interface__potassium_concentration__Ki)) / var_membrane__F; // millivolt + const double var_fast_sodium_current__i_Na = (-var_fast_sodium_current__E_Na + var_chaste_interface__membrane__V) * var_chaste_interface__fast_sodium_current__O_Na * mParameters[9]; // picoA_per_picoF + const double var_fast_sodium_current__i_Na_converted = HeartConfig::Instance()->GetCapacitance() * var_fast_sodium_current__i_Na; // uA_per_cm2 + const double var_rapid_delayed_rectifier_potassium_current__i_Kr = (-var_membrane__R * var_membrane__T * log((mParameters[5] + 0.020408163265306124 * mParameters[6]) / (var_chaste_interface__potassium_concentration__Ki + 0.020408163265306124 * var_chaste_interface__sodium_concentration__Nai)) / var_membrane__F + var_chaste_interface__membrane__V) * var_chaste_interface__rapid_delayed_rectifier_potassium_current__O_K * mParameters[13]; // picoA_per_picoF + const double var_rapid_delayed_rectifier_potassium_current__i_Kr_converted = HeartConfig::Instance()->GetCapacitance() * var_rapid_delayed_rectifier_potassium_current__i_Kr; // uA_per_cm2 + const double var_sodium_calcium_exchange_current__i_NaCa = (pow(var_chaste_interface__sodium_concentration__Nai, 3) * mParameters[4] * exp(var_membrane__F * var_chaste_interface__membrane__V * var_sodium_calcium_exchange_current__eta / (var_membrane__R * var_membrane__T)) - pow(mParameters[6], 3) * var_calcium_concentration__Cai * exp((-1 + var_sodium_calcium_exchange_current__eta) * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * mParameters[15] / ((1 + var_sodium_calcium_exchange_current__k_sat * exp((-1 + var_sodium_calcium_exchange_current__eta) * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * (pow(mParameters[6], 3) + pow(var_sodium_calcium_exchange_current__K_mNa, 3)) * (mParameters[4] + var_sodium_calcium_exchange_current__K_mCa)); // picoA_per_picoF + const double var_sodium_calcium_exchange_current__i_NaCa_converted = HeartConfig::Instance()->GetCapacitance() * var_sodium_calcium_exchange_current__i_NaCa; // uA_per_cm2 + const double var_time_independent_potassium_current__i_K1 = (-var_fast_transient_outward_potassium_current__E_K + var_chaste_interface__membrane__V) * mParameters[5] * mParameters[11] / ((1 + exp(0.089599999999999999 * var_chaste_interface__membrane__V - 0.089599999999999999 * var_fast_transient_outward_potassium_current__E_K)) * (210 + mParameters[5])); // picoA_per_picoF + const double var_time_independent_potassium_current__i_K1_converted = HeartConfig::Instance()->GetCapacitance() * var_time_independent_potassium_current__i_K1; // uA_per_cm2 + + std::vector dqs(12); + dqs[0] = var_calcium_fluxes__J_rel; + dqs[1] = var_chaste_interface__calcium_concentration__Cai_converted; + dqs[2] = var_L_type_calcium_current__i_CaL_converted; + dqs[3] = var_fast_sodium_current__i_Na_converted; + dqs[4] = var_time_independent_potassium_current__i_K1_converted; + dqs[5] = var_non_inactivating_steady_state_potassium_current__i_Kss_converted; + dqs[6] = var_rapid_delayed_rectifier_potassium_current__i_Kr_converted; + dqs[7] = var_slow_delayed_rectifier_potassium_current__i_Ks_converted; + dqs[8] = var_sodium_calcium_exchange_current__i_NaCa_converted; + dqs[9] = var_membrane__i_stim_converted; + dqs[10] = var_fast_transient_outward_potassium_current__i_Kto_f_converted; + dqs[11] = var_chaste_interface__environment__time; + return dqs; + } + +template<> +void OdeSystemInformation::Initialise(void) +{ + this->mSystemName = "bondarenko_2004_apical"; + this->mFreeVariableName = "time"; + this->mFreeVariableUnits = "millisecond"; + + // rY[0]: + this->mVariableNames.push_back("membrane_voltage"); + this->mVariableUnits.push_back("millivolt"); + this->mInitialConditions.push_back(-82.4202); + + // rY[1]: + this->mVariableNames.push_back("cytosolic_calcium_concentration"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(0.000115001); + + // rY[2]: + this->mVariableNames.push_back("dyadic_space_calcium_concentration"); + this->mVariableUnits.push_back("micromolar"); + this->mInitialConditions.push_back(0.115001); + + // rY[3]: + this->mVariableNames.push_back("JSR_calcium_concentration"); + this->mVariableUnits.push_back("micromolar"); + this->mInitialConditions.push_back(1299.5); + + // rY[4]: + this->mVariableNames.push_back("calcium_concentration__CaNSR"); + this->mVariableUnits.push_back("micromolar"); + this->mInitialConditions.push_back(1299.5); + + // rY[5]: + this->mVariableNames.push_back("calcium_fluxes__P_RyR"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.0); + + // rY[6]: + this->mVariableNames.push_back("calcium_buffering__LTRPN_Ca"); + this->mVariableUnits.push_back("micromolar"); + this->mInitialConditions.push_back(11.2684); + + // rY[7]: + this->mVariableNames.push_back("calcium_buffering__HTRPN_Ca"); + this->mVariableUnits.push_back("micromolar"); + this->mInitialConditions.push_back(125.29); + + // rY[8]: + this->mVariableNames.push_back("ryanodine_receptors__P_O1"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(1.49102e-05); + + // rY[9]: + this->mVariableNames.push_back("ryanodine_receptors__P_O2"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(9.51726e-11); + + // rY[10]: + this->mVariableNames.push_back("ryanodine_receptors__P_C2"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.00016774); + + // rY[11]: + this->mVariableNames.push_back("L_type_calcium_current__O"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(9.30308e-19); + + // rY[12]: + this->mVariableNames.push_back("L_type_calcium_current__C2"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.000124216); + + // rY[13]: + this->mVariableNames.push_back("L_type_calcium_current__C3"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(5.78679e-09); + + // rY[14]: + this->mVariableNames.push_back("L_type_calcium_current__C4"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(1.19816e-13); + + // rY[15]: + this->mVariableNames.push_back("L_type_calcium_current__I1"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(4.97923e-19); + + // rY[16]: + this->mVariableNames.push_back("L_type_calcium_current__I2"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(3.45847e-14); + + // rY[17]: + this->mVariableNames.push_back("L_type_calcium_current__I3"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(1.85106e-14); + + // rY[18]: + this->mVariableNames.push_back("cytosolic_sodium_concentration"); + this->mVariableUnits.push_back("micromolar"); + this->mInitialConditions.push_back(14237.1); + + // rY[19]: + this->mVariableNames.push_back("fast_sodium_current__O_Na"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(7.13483e-07); + + // rY[20]: + this->mVariableNames.push_back("fast_sodium_current__C_Na1"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.000279132); + + // rY[21]: + this->mVariableNames.push_back("fast_sodium_current__C_Na2"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.020752); + + // rY[22]: + this->mVariableNames.push_back("fast_sodium_current__I1_Na"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(6.73345e-07); + + // rY[23]: + this->mVariableNames.push_back("fast_sodium_current__I2_Na"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(1.55787e-09); + + // rY[24]: + this->mVariableNames.push_back("fast_sodium_current__IF_Na"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.000153176); + + // rY[25]: + this->mVariableNames.push_back("fast_sodium_current__IC_Na2"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.0113879); + + // rY[26]: + this->mVariableNames.push_back("fast_sodium_current__IC_Na3"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.34278); + + // rY[27]: + this->mVariableNames.push_back("cytosolic_potassium_concentration"); + this->mVariableUnits.push_back("micromolar"); + this->mInitialConditions.push_back(143720.0); + + // rY[28]: + this->mVariableNames.push_back("fast_transient_outward_potassium_current__ato_f"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.00265563); + + // rY[29]: + this->mVariableNames.push_back("fast_transient_outward_potassium_current__ito_f"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.999977); + + // rY[30]: + this->mVariableNames.push_back("slow_transient_outward_potassium_current__ato_s"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.000417069); + + // rY[31]: + this->mVariableNames.push_back("slow_transient_outward_potassium_current__ito_s"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.998543); + + // rY[32]: + this->mVariableNames.push_back("slow_delayed_rectifier_potassium_current__nKs"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.000262753); + + // rY[33]: + this->mVariableNames.push_back("ultra_rapidly_activating_delayed_rectifier_potassium_current__aur"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.000417069); + + // rY[34]: + this->mVariableNames.push_back("ultra_rapidly_activating_delayed_rectifier_potassium_current__iur"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.998543); + + // rY[35]: + this->mVariableNames.push_back("non_inactivating_steady_state_potassium_current__aKss"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.000417069); + + // rY[36]: + this->mVariableNames.push_back("non_inactivating_steady_state_potassium_current__iKss"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(1.0); + + // rY[37]: + this->mVariableNames.push_back("rapid_delayed_rectifier_potassium_current__O_K"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.000175298); + + // rY[38]: + this->mVariableNames.push_back("rapid_delayed_rectifier_potassium_current__C_K1"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.000992513); + + // rY[39]: + this->mVariableNames.push_back("rapid_delayed_rectifier_potassium_current__C_K2"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.000641229); + + // rY[40]: + this->mVariableNames.push_back("rapid_delayed_rectifier_potassium_current__I_K"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(3.19129e-05); + + // mParameters[0]: + this->mParameterNames.push_back("SR_leak_current_max"); + this->mParameterUnits.push_back("per_millisecond"); + + // mParameters[1]: + this->mParameterNames.push_back("SR_release_current_max"); + this->mParameterUnits.push_back("per_millisecond"); + + // mParameters[2]: + this->mParameterNames.push_back("SR_uptake_current_max"); + this->mParameterUnits.push_back("micromolar_per_millisecond"); + + // mParameters[3]: + this->mParameterNames.push_back("concentration_clamp_onoff"); + this->mParameterUnits.push_back("dimensionless"); + + // mParameters[4]: + this->mParameterNames.push_back("extracellular_calcium_concentration"); + this->mParameterUnits.push_back("micromolar"); + + // mParameters[5]: + this->mParameterNames.push_back("extracellular_potassium_concentration"); + this->mParameterUnits.push_back("micromolar"); + + // mParameters[6]: + this->mParameterNames.push_back("extracellular_sodium_concentration"); + this->mParameterUnits.push_back("micromolar"); + + // mParameters[7]: + this->mParameterNames.push_back("membrane_L_type_calcium_current_conductance"); + this->mParameterUnits.push_back("milliS_per_microF"); + + // mParameters[8]: + this->mParameterNames.push_back("membrane_capacitance"); + this->mParameterUnits.push_back("microF_per_cm2"); + + // mParameters[9]: + this->mParameterNames.push_back("membrane_fast_sodium_current_conductance"); + this->mParameterUnits.push_back("milliS_per_microF"); + + // mParameters[10]: + this->mParameterNames.push_back("membrane_fast_sodium_current_shift_inactivation"); + this->mParameterUnits.push_back("millivolt"); + + // mParameters[11]: + this->mParameterNames.push_back("membrane_inward_rectifier_potassium_current_conductance"); + this->mParameterUnits.push_back("milliS_per_microF"); + + // mParameters[12]: + this->mParameterNames.push_back("membrane_non_inactivating_steady_state_potassium_current_conductance"); + this->mParameterUnits.push_back("milliS_per_microF"); + + // mParameters[13]: + this->mParameterNames.push_back("membrane_rapid_delayed_rectifier_potassium_current_conductance"); + this->mParameterUnits.push_back("milliS_per_microF"); + + // mParameters[14]: + this->mParameterNames.push_back("membrane_slow_delayed_rectifier_potassium_current_conductance"); + this->mParameterUnits.push_back("milliS_per_microF"); + + // mParameters[15]: + this->mParameterNames.push_back("membrane_sodium_calcium_exchanger_current_conductance"); + this->mParameterUnits.push_back("picoA_per_picoF"); + + // mParameters[16]: + this->mParameterNames.push_back("membrane_transient_outward_current_conductance"); + this->mParameterUnits.push_back("milliS_per_microF"); + + // Derived Quantity index [0]: + this->mDerivedQuantityNames.push_back("SR_release_current"); + this->mDerivedQuantityUnits.push_back("micromolar_per_millisecond"); + + // Derived Quantity index [1]: + this->mDerivedQuantityNames.push_back("cytosolic_calcium_concentration"); + this->mDerivedQuantityUnits.push_back("millimolar"); + + // Derived Quantity index [2]: + this->mDerivedQuantityNames.push_back("membrane_L_type_calcium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [3]: + this->mDerivedQuantityNames.push_back("membrane_fast_sodium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [4]: + this->mDerivedQuantityNames.push_back("membrane_inward_rectifier_potassium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [5]: + this->mDerivedQuantityNames.push_back("membrane_non_inactivating_steady_state_potassium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [6]: + this->mDerivedQuantityNames.push_back("membrane_rapid_delayed_rectifier_potassium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [7]: + this->mDerivedQuantityNames.push_back("membrane_slow_delayed_rectifier_potassium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [8]: + this->mDerivedQuantityNames.push_back("membrane_sodium_calcium_exchanger_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [9]: + this->mDerivedQuantityNames.push_back("membrane_stimulus_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [10]: + this->mDerivedQuantityNames.push_back("membrane_transient_outward_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [11]: + this->mDerivedQuantityNames.push_back("time"); + this->mDerivedQuantityUnits.push_back("millisecond"); + + this->mInitialised = true; +} + +// Serialization for Boost >= 1.36 +#include "SerializationExportWrapperForCpp.hpp" +CHASTE_CLASS_EXPORT(Cellbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLBackwardEulerOpt) + diff --git a/chaste_codegen/tests/numerical/baseline/BEopt/bondarenko_szigeti_bett_kim_rasmusson_2004_apical.hpp b/chaste_codegen/tests/numerical/baseline/BEopt/bondarenko_szigeti_bett_kim_rasmusson_2004_apical.hpp new file mode 100644 index 00000000..2ce7f7d6 --- /dev/null +++ b/chaste_codegen/tests/numerical/baseline/BEopt/bondarenko_szigeti_bett_kim_rasmusson_2004_apical.hpp @@ -0,0 +1,88 @@ +#ifndef CELLBONDARENKO_SZIGETI_BETT_KIM_RASMUSSON_2004_APICALFROMCELLMLBACKWARDEULEROPT_HPP_ +#define CELLBONDARENKO_SZIGETI_BETT_KIM_RASMUSSON_2004_APICALFROMCELLMLBACKWARDEULEROPT_HPP_ + +//! @file +//! +//! This source file was generated from CellML by chaste_codegen version (version omitted as unimportant) +//! +//! Model: bondarenko_2004_apical +//! +//! Processed by chaste_codegen: https://github.com/ModellingWebLab/chaste-codegen +//! (translator: chaste_codegen, model type: BackwardEulerOpt) +//! on (date omitted as unimportant) +//! +//! + +#include "ChasteSerialization.hpp" +#include +#include "AbstractStimulusFunction.hpp" +#include "AbstractBackwardEulerCardiacCell.hpp" + +class Cellbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLBackwardEulerOpt : public AbstractBackwardEulerCardiacCell<32> +{ + friend class boost::serialization::access; + template + void serialize(Archive & archive, const unsigned int version) + { + archive & boost::serialization::base_object >(*this); + + } + + // + // Settable parameters and readable variables + // + + +private: +const bool is_concentration[41] = {false, true, true, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, false, false, false, false, false, false, false, false, true, false, false, false, false, false, false, false, false, false, false, false, false, false}; +const bool is_probability[41] = {false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false}; +public: + + boost::shared_ptr UseCellMLDefaultStimulus(); + double GetIntracellularCalciumConcentration(); + Cellbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLBackwardEulerOpt(boost::shared_ptr /* unused; should be empty */, boost::shared_ptr pIntracellularStimulus); + ~Cellbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLBackwardEulerOpt(); + void VerifyStateVariables(); + AbstractLookupTableCollection* GetLookupTableCollection(); + double GetIIonic(const std::vector* pStateVariables=NULL);void ComputeResidual(double var_chaste_interface__environment__time, const double rCurrentGuess[32], double rResidual[32]); + void ComputeJacobian(double var_chaste_interface__environment__time, const double rCurrentGuess[32], double rJacobian[32][32]);protected: + void UpdateTransmembranePotential(double var_chaste_interface__environment__time); + void ComputeOneStepExceptVoltage(double var_chaste_interface__environment__time); + + std::vector ComputeDerivedQuantities(double var_chaste_interface__environment__time, const std::vector & rY); +}; + +// Needs to be included last +#include "SerializationExportWrapper.hpp" +CHASTE_CLASS_EXPORT(Cellbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLBackwardEulerOpt) + +namespace boost +{ + namespace serialization + { + template + inline void save_construct_data( + Archive & ar, const Cellbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLBackwardEulerOpt * t, const unsigned int fileVersion) + { + const boost::shared_ptr p_solver = t->GetSolver(); + const boost::shared_ptr p_stimulus = t->GetStimulusFunction(); + ar << p_solver; + ar << p_stimulus; + } + + template + inline void load_construct_data( + Archive & ar, Cellbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLBackwardEulerOpt * t, const unsigned int fileVersion) + { + boost::shared_ptr p_solver; + boost::shared_ptr p_stimulus; + ar >> p_solver; + ar >> p_stimulus; + ::new(t)Cellbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLBackwardEulerOpt(p_solver, p_stimulus); + } + + } + +} + +#endif // CELLBONDARENKO_SZIGETI_BETT_KIM_RASMUSSON_2004_APICALFROMCELLMLBACKWARDEULEROPT_HPP_ \ No newline at end of file diff --git a/chaste_codegen/tests/numerical/baseline/BEopt/decker_2009.cpp b/chaste_codegen/tests/numerical/baseline/BEopt/decker_2009.cpp new file mode 100644 index 00000000..15fb93e5 --- /dev/null +++ b/chaste_codegen/tests/numerical/baseline/BEopt/decker_2009.cpp @@ -0,0 +1,3638 @@ +//! @file +//! +//! This source file was generated from CellML by chaste_codegen version (version omitted as unimportant) +//! +//! Model: decker_2009 +//! +//! Processed by chaste_codegen: https://github.com/ModellingWebLab/chaste-codegen +//! (translator: chaste_codegen, model type: BackwardEulerOpt) +//! on (date omitted as unimportant) +//! +//! + +#include "CardiacNewtonSolver.hpp" +#include "decker_2009.hpp" +#include +#include +#include +#include +#include "Exception.hpp" +#include "OdeSystemInformation.hpp" +#include "RegularStimulus.hpp" +#include "HeartConfig.hpp" +#include "IsNan.hpp" +#include "MathsCustomFunctions.hpp" + + + +class Celldecker_2009FromCellMLBackwardEulerOpt_LookupTables : public AbstractLookupTableCollection +{ +public: + static Celldecker_2009FromCellMLBackwardEulerOpt_LookupTables* Instance() + { + if (mpInstance.get() == NULL) + { + mpInstance.reset(new Celldecker_2009FromCellMLBackwardEulerOpt_LookupTables); + } + return mpInstance.get(); + } + + void FreeMemory() + { + + if (_lookup_table_0) + { + delete[] _lookup_table_0; + _lookup_table_0 = NULL; + } + + mNeedsRegeneration.assign(mNeedsRegeneration.size(), true); + } + + // Row lookup methods + // using linear-interpolation + + double* _lookup_0_row(unsigned i, double _factor_) + { + for (unsigned j=0; j<46; j++) + { + const double y1 = _lookup_table_0[i][j]; + const double y2 = _lookup_table_0[i+1][j]; + _lookup_table_0_row[j] = y1 + (y2-y1)*_factor_; + } + return _lookup_table_0_row; + } + + + const double * IndexTable0(double var_chaste_interface__membrane__Vm) + { + const double _offset_0 = var_chaste_interface__membrane__Vm - mTableMins[0]; + const double _offset_0_over_table_step = _offset_0 * mTableStepInverses[0]; + const unsigned _table_index_0 = (unsigned)(_offset_0_over_table_step); + const double _factor_0 = _offset_0_over_table_step - _table_index_0; + const double* const _lt_0_row = Celldecker_2009FromCellMLBackwardEulerOpt_LookupTables::Instance()->_lookup_0_row(_table_index_0, _factor_0); + return _lt_0_row; + } + + +// LCOV_EXCL_START + bool CheckIndex0(double& var_chaste_interface__membrane__Vm) + { + bool _oob_0 = false; + if (var_chaste_interface__membrane__Vm>mTableMaxs[0] || var_chaste_interface__membrane__Vm= 2){ + EXCEPTION("Lookup table 4 at ["<= 2){ + EXCEPTION("Lookup table 5 at ["<= 2){ + EXCEPTION("Lookup table 6 at ["<= 2){ + EXCEPTION("Lookup table 7 at ["<= -9.9999999999999995e-8) && (-0.2364224 + 0.13600000000000001 * var_chaste_interface__membrane__Vm <= 9.9999999999999995e-8)) ? (0.0038902447058823523 + 0.00029999999999999997 * var_chaste_interface__membrane__Vm) : (-0.004411764705882352 * (-0.2364224 + 0.13600000000000001 * var_chaste_interface__membrane__Vm) / (-1 + exp(0.2364224 - 0.13600000000000001 * var_chaste_interface__membrane__Vm)))) + (((5.8385137599999997 + 0.1522 * var_chaste_interface__membrane__Vm >= -9.9999999999999995e-8) && (5.8385137599999997 + 0.1522 * var_chaste_interface__membrane__Vm <= 9.9999999999999995e-8)) ? (-0.0037830293298291716 - 0.00014999999999999999 * var_chaste_interface__membrane__Vm) : (0.0019710906701708277 * (5.8385137599999997 + 0.1522 * var_chaste_interface__membrane__Vm) / (-1 + exp(5.8385137599999997 + 0.1522 * var_chaste_interface__membrane__Vm)))); + }; + const double var_chaste_interface__membrane__Vm = mTableMins[0] + i*mTableSteps[0]; + double val = f(var_chaste_interface__membrane__Vm); + + _lookup_table_0[i][19] = val; + } + + for (unsigned i=0 ; i<_table_size_0; i++) + { + auto f = [](double var_chaste_interface__membrane__Vm) { + return 0.0016666666666666668 / (1 + exp(14.918032786885247 + 0.16393442622950821 * var_chaste_interface__membrane__Vm)); + }; + const double var_chaste_interface__membrane__Vm = mTableMins[0] + i*mTableSteps[0]; + double val = f(var_chaste_interface__membrane__Vm); + + _lookup_table_0[i][20] = val; + } + + for (unsigned i=0 ; i<_table_size_0; i++) + { + auto f = [](double var_chaste_interface__membrane__Vm) { + return (((4.7130000000000001 + 0.10000000000000001 * var_chaste_interface__membrane__Vm >= -9.9999999999999995e-8) && (4.7130000000000001 + 0.10000000000000001 * var_chaste_interface__membrane__Vm <= 9.9999999999999995e-8)) ? (10.7408 + 0.16 * var_chaste_interface__membrane__Vm) : (-3.1999999999999997 * (4.7130000000000001 + 0.10000000000000001 * var_chaste_interface__membrane__Vm) / (-1 + exp(-4.7130000000000001 - 0.10000000000000001 * var_chaste_interface__membrane__Vm)))); + }; + const double var_chaste_interface__membrane__Vm = mTableMins[0] + i*mTableSteps[0]; + double val = f(var_chaste_interface__membrane__Vm); + //Expressions which are part of a piecewise could be inf / nan, this is generally accptable, due to the piecewise, however occasionally interpolation of the lookup table from a nan/inf version can give problems. + //To avoid this values stored in the table are intrpolated. Occurances of this to at most 2 per expression. + if (!std::isfinite(val) && _lookup_table_0_num_misshit_piecewise[21] < 2){ + double left = f(var_chaste_interface__membrane__Vm - mTableSteps[0]); + double right = f(var_chaste_interface__membrane__Vm + mTableSteps[0]); + val = (left + right) / 2.0; + // count and limit number of misshits + _lookup_table_0_num_misshit_piecewise[21] +=1; + } + else if (!std::isfinite(val) && _lookup_table_0_num_misshit_piecewise[21] >= 2){ + EXCEPTION("Lookup table 21 at ["<= -40) ? (0) : (0.13500000000000001 * exp(-11.764705882352942 - 0.14705882352941177 * var_chaste_interface__membrane__Vm))); + }; + const double var_chaste_interface__membrane__Vm = mTableMins[0] + i*mTableSteps[0]; + double val = f(var_chaste_interface__membrane__Vm); + //Expressions which are part of a piecewise could be inf / nan, this is generally accptable, due to the piecewise, however occasionally interpolation of the lookup table from a nan/inf version can give problems. + //To avoid this values stored in the table are intrpolated. Occurances of this to at most 2 per expression. + if (!std::isfinite(val) && _lookup_table_0_num_misshit_piecewise[23] < 2){ + double left = f(var_chaste_interface__membrane__Vm - mTableSteps[0]); + double right = f(var_chaste_interface__membrane__Vm + mTableSteps[0]); + val = (left + right) / 2.0; + // count and limit number of misshits + _lookup_table_0_num_misshit_piecewise[23] +=1; + } + else if (!std::isfinite(val) && _lookup_table_0_num_misshit_piecewise[23] >= 2){ + EXCEPTION("Lookup table 23 at ["<= -40) ? (7.6923076923076916 / (1 + exp(-0.96036036036036043 - 0.0900900900900901 * var_chaste_interface__membrane__Vm))) : (310000 * exp(0.34999999999999998 * var_chaste_interface__membrane__Vm) + 3.5600000000000001 * exp(0.079000000000000001 * var_chaste_interface__membrane__Vm))); + }; + const double var_chaste_interface__membrane__Vm = mTableMins[0] + i*mTableSteps[0]; + double val = f(var_chaste_interface__membrane__Vm); + //Expressions which are part of a piecewise could be inf / nan, this is generally accptable, due to the piecewise, however occasionally interpolation of the lookup table from a nan/inf version can give problems. + //To avoid this values stored in the table are intrpolated. Occurances of this to at most 2 per expression. + if (!std::isfinite(val) && _lookup_table_0_num_misshit_piecewise[24] < 2){ + double left = f(var_chaste_interface__membrane__Vm - mTableSteps[0]); + double right = f(var_chaste_interface__membrane__Vm + mTableSteps[0]); + val = (left + right) / 2.0; + // count and limit number of misshits + _lookup_table_0_num_misshit_piecewise[24] +=1; + } + else if (!std::isfinite(val) && _lookup_table_0_num_misshit_piecewise[24] >= 2){ + EXCEPTION("Lookup table 24 at ["<= -40) ? (0) : ((37.780000000000001 + var_chaste_interface__membrane__Vm) * (-127140 * exp(0.24440000000000001 * var_chaste_interface__membrane__Vm) - 6.9480000000000006e-5 * exp(-0.043909999999999998 * var_chaste_interface__membrane__Vm)) / (1 + exp(24.640530000000002 + 0.311 * var_chaste_interface__membrane__Vm)))); + }; + const double var_chaste_interface__membrane__Vm = mTableMins[0] + i*mTableSteps[0]; + double val = f(var_chaste_interface__membrane__Vm); + //Expressions which are part of a piecewise could be inf / nan, this is generally accptable, due to the piecewise, however occasionally interpolation of the lookup table from a nan/inf version can give problems. + //To avoid this values stored in the table are intrpolated. Occurances of this to at most 2 per expression. + if (!std::isfinite(val) && _lookup_table_0_num_misshit_piecewise[25] < 2){ + double left = f(var_chaste_interface__membrane__Vm - mTableSteps[0]); + double right = f(var_chaste_interface__membrane__Vm + mTableSteps[0]); + val = (left + right) / 2.0; + // count and limit number of misshits + _lookup_table_0_num_misshit_piecewise[25] +=1; + } + else if (!std::isfinite(val) && _lookup_table_0_num_misshit_piecewise[25] >= 2){ + EXCEPTION("Lookup table 25 at ["<= -40) ? (0.29999999999999999 * exp(-2.5349999999999999e-7 * var_chaste_interface__membrane__Vm) / (1 + exp(-3.2000000000000002 - 0.10000000000000001 * var_chaste_interface__membrane__Vm))) : (0.1212 * exp(-0.01052 * var_chaste_interface__membrane__Vm) / (1 + exp(-5.5312920000000005 - 0.13780000000000001 * var_chaste_interface__membrane__Vm)))); + }; + const double var_chaste_interface__membrane__Vm = mTableMins[0] + i*mTableSteps[0]; + double val = f(var_chaste_interface__membrane__Vm); + //Expressions which are part of a piecewise could be inf / nan, this is generally accptable, due to the piecewise, however occasionally interpolation of the lookup table from a nan/inf version can give problems. + //To avoid this values stored in the table are intrpolated. Occurances of this to at most 2 per expression. + if (!std::isfinite(val) && _lookup_table_0_num_misshit_piecewise[26] < 2){ + double left = f(var_chaste_interface__membrane__Vm - mTableSteps[0]); + double right = f(var_chaste_interface__membrane__Vm + mTableSteps[0]); + val = (left + right) / 2.0; + // count and limit number of misshits + _lookup_table_0_num_misshit_piecewise[26] +=1; + } + else if (!std::isfinite(val) && _lookup_table_0_num_misshit_piecewise[26] >= 2){ + EXCEPTION("Lookup table 26 at ["< mpInstance; + + // Row lookup methods memory + double _lookup_table_0_row[46]; + + // Lookup tables + double (*_lookup_table_0)[46]; + int _lookup_table_0_num_misshit_piecewise[46] = {0}; + +}; + +std::shared_ptr Celldecker_2009FromCellMLBackwardEulerOpt_LookupTables::mpInstance; + + + boost::shared_ptr Celldecker_2009FromCellMLBackwardEulerOpt::UseCellMLDefaultStimulus() + { + // Use the default stimulus specified by CellML metadata + const double var_chaste_interface__membrane__stim_amplitude_converted = -80 * HeartConfig::Instance()->GetCapacitance(); // uA_per_cm2 + const double var_chaste_interface__membrane__stim_duration = 0.5; // ms + const double var_chaste_interface__membrane__stim_offset = 0; // ms + const double var_chaste_interface__membrane__stim_period = 1000; // ms + boost::shared_ptr p_cellml_stim(new RegularStimulus( + -fabs(var_chaste_interface__membrane__stim_amplitude_converted), + var_chaste_interface__membrane__stim_duration, + var_chaste_interface__membrane__stim_period, + var_chaste_interface__membrane__stim_offset + )); + mpIntracellularStimulus = p_cellml_stim; + return p_cellml_stim; + } + double Celldecker_2009FromCellMLBackwardEulerOpt::GetIntracellularCalciumConcentration() + { + return mStateVariables[1]; + } + Celldecker_2009FromCellMLBackwardEulerOpt::Celldecker_2009FromCellMLBackwardEulerOpt(boost::shared_ptr /* unused; should be empty */, boost::shared_ptr pIntracellularStimulus) + : AbstractBackwardEulerCardiacCell<35>( + 46, + 0, + pIntracellularStimulus) + { + // Time units: millisecond + // + this->mpSystemInfo = OdeSystemInformation::Instance(); + Init(); + + // We have a default stimulus specified in the CellML file metadata + this->mHasDefaultStimulusFromCellML = true; + + this->mParameters[0] = 0.0043750000000000004; // (var_Ileak__Ileak_max) [mM_per_ms] + this->mParameters[1] = 0.1125; // (var_Irel__kappa) [mM_per_uA_per_uF_per_ms_per_ms] + this->mParameters[2] = 0.0043750000000000004; // (var_Iup__iupbar) [mM_per_ms] + this->mParameters[3] = 1.8; // (var_model_parameters__Ca_o) [mM] + this->mParameters[4] = 5.4000000000000004; // (var_model_parameters__K_o) [mM] + this->mParameters[5] = 140; // (var_model_parameters__Na_o) [mM] + this->mParameters[6] = 0.00015552; // (var_ICaL__PCa) [L_per_F_ms] + this->mParameters[7] = 1.9950799999999999e-7; // (var_ICab__PCab) [L_per_F_ms] + this->mParameters[8] = 0.00022499999999999999; // (var_IClb__gClb) [mS_per_uF] + this->mParameters[9] = 3.2000000000000001e-9; // (var_INab__PNab) [L_per_F_ms] + this->mParameters[10] = 0.057500000000000002; // (var_IpCa__gpCa) [uA_per_uF] + this->mParameters[11] = 9.0749999999999993; // (var_INa__g_Na) [mS_per_uF] + this->mParameters[12] = 0.5; // (var_IK1__g_K1_max) [mS_per_uF] + this->mParameters[13] = 0.0064999999999999997; // (var_INaL__gNaL) [mS_per_uF] + this->mParameters[14] = 0.0027599999999999999; // (var_IKp__gKp) [mS_per_uF] + this->mParameters[15] = 0.013854200000000001; // (var_IKr__gKr_max) [mS_per_uF] + this->mParameters[16] = 0.082600000000000007; // (var_IKs__gKs_max) [mS_per_uF] + this->mParameters[17] = 4.5; // (var_INaCa__Vmax) [uA_per_uF] + this->mParameters[18] = 1.3999999999999999; // (var_INaK__ibarnak) [uA_per_uF] + this->mParameters[19] = 8.9999999999999996e-7; // (var_Ito2__PCl) [L_per_F_ms] + this->mParameters[20] = 0.49745800000000001; // (var_Ito1__gto1) [mS_per_uF] + } + + Celldecker_2009FromCellMLBackwardEulerOpt::~Celldecker_2009FromCellMLBackwardEulerOpt() + { + } + + AbstractLookupTableCollection* Celldecker_2009FromCellMLBackwardEulerOpt::GetLookupTableCollection() + { + return Celldecker_2009FromCellMLBackwardEulerOpt_LookupTables::Instance(); + } + + void Celldecker_2009FromCellMLBackwardEulerOpt::VerifyStateVariables() + { + std::vector& rY = rGetStateVariables(); + std::string error_message = ""; + + for (unsigned i=0; i < 46; i++) + { + if(std::isnan(rY[i])) + { + error_message += "State variable " + this->rGetStateVariableNames()[i] + " is not a number\n"; + } + if(std::isinf(rY[i])) + { + error_message += "State variable " + this->rGetStateVariableNames()[i] + " has become INFINITE\n"; + } + if(this->is_concentration[i] && rY[i] < 0) + { + error_message += "Concentration " + this->rGetStateVariableNames()[i] + " below 0\n"; + } + if(this->is_probability[i] && rY[i] < 0) + { + error_message += "Probability " + this->rGetStateVariableNames()[i] + " below 0\n"; + } + if(this->is_probability[i] && rY[i] > 1) + { + error_message += "Probability " + this->rGetStateVariableNames()[i] + " above 1\n"; + } + } + if (error_message != ""){ + EXCEPTION(DumpState(error_message)); + } + } + + double Celldecker_2009FromCellMLBackwardEulerOpt::GetIIonic(const std::vector* pStateVariables) + { + // For state variable interpolation (SVI) we read in interpolated state variables, + // otherwise for ionic current interpolation (ICI) we use the state variables of this model (node). + if (!pStateVariables) pStateVariables = &rGetStateVariables(); + const std::vector& rY = *pStateVariables; + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: mV; Initial value: -87.4947322902196 + double var_chaste_interface__Ca__Ca_i = rY[1]; + // Units: mM; Initial value: 8.38749860095482e-05 + double var_chaste_interface__IKs__C1 = rY[2]; + // Units: dimensionless; Initial value: 0.476679784307081 + double var_chaste_interface__IKs__C2 = rY[3]; + // Units: dimensionless; Initial value: 0.255181042718489 + double var_chaste_interface__IKs__C3 = rY[4]; + // Units: dimensionless; Initial value: 0.0512272866698557 + double var_chaste_interface__IKs__C4 = rY[5]; + // Units: dimensionless; Initial value: 0.0045705849736195 + double var_chaste_interface__IKs__C5 = rY[6]; + // Units: dimensionless; Initial value: 0.000152923243503507 + double var_chaste_interface__IKs__C6 = rY[7]; + // Units: dimensionless; Initial value: 0.132814156809568 + double var_chaste_interface__IKs__C7 = rY[8]; + // Units: dimensionless; Initial value: 0.053324572164618 + double var_chaste_interface__IKs__C8 = rY[9]; + // Units: dimensionless; Initial value: 0.00713656414955778 + double var_chaste_interface__IKs__C9 = rY[10]; + // Units: dimensionless; Initial value: 0.000318368292970148 + double var_chaste_interface__IKs__C10 = rY[11]; + // Units: dimensionless; Initial value: 0.0138769647384953 + double var_chaste_interface__IKs__C11 = rY[12]; + // Units: dimensionless; Initial value: 0.00371438476499172 + double var_chaste_interface__IKs__C12 = rY[13]; + // Units: dimensionless; Initial value: 0.000248553788631871 + double var_chaste_interface__IKs__C13 = rY[14]; + // Units: dimensionless; Initial value: 0.000644426171899078 + double var_chaste_interface__IKs__C14 = rY[15]; + // Units: dimensionless; Initial value: 8.62495047666861e-05 + double var_chaste_interface__IKs__C15 = rY[16]; + // Units: dimensionless; Initial value: 1.12344645485893e-05 + double var_chaste_interface__ICaL__O = rY[19]; + // Units: dimensionless; Initial value: 2.26882961412491e-05 + double var_chaste_interface__ICaL__O_star = rY[21]; + // Units: dimensionless; Initial value: 1.23556404128518e-10 + double var_chaste_interface__INa_m_gate__m = rY[25]; + // Units: dimensionless; Initial value: 0.00101841101248412 + double var_chaste_interface__INa_h_gate__h = rY[26]; + // Units: dimensionless; Initial value: 0.991354143386887 + double var_chaste_interface__INa_j_gate__j = rY[27]; + // Units: dimensionless; Initial value: 0.99709036251243 + double var_chaste_interface__INaL_mL_gate__mL = rY[28]; + // Units: dimensionless; Initial value: 0.00101841101248412 + double var_chaste_interface__INaL_hL_gate__hL = rY[29]; + // Units: dimensionless; Initial value: 0.319611809402137 + double var_chaste_interface__IKr_xr_gate__xr = rY[30]; + // Units: dimensionless; Initial value: 4.06959064407486e-06 + double var_chaste_interface__Ito1_a_gate__a = rY[31]; + // Units: dimensionless; Initial value: 1.76776038804228e-05 + double var_chaste_interface__Ito1_i1f_gate__i1f = rY[32]; + // Units: dimensionless; Initial value: 0.997976503910799 + double var_chaste_interface__Ito1_i1s_gate__i1s = rY[33]; + // Units: dimensionless; Initial value: 0.947581184798815 + double var_chaste_interface__Ito2_i2f_gate__i2f = rY[34]; + // Units: dimensionless; Initial value: 0.996044894628276 + double var_chaste_interface__Irel__Irel = rY[35]; + // Units: mM_per_ms; Initial value: 0.000714227102027745 + double var_chaste_interface__Ca__Ca_ss_sr = rY[38]; + // Units: mM; Initial value: 0.00011296707102434 + double var_chaste_interface__Ca__Ca_ss_CaL = rY[39]; + // Units: mM; Initial value: 0.000119239795531548 + double var_chaste_interface__Na__Na_i = rY[40]; + // Units: mM; Initial value: 8.01031392415197 + double var_chaste_interface__Na__Na_ss_sr = rY[41]; + // Units: mM; Initial value: 8.01033434859049 + double var_chaste_interface__Cl__Cl_i = rY[42]; + // Units: mM; Initial value: 20.6683603724432 + double var_chaste_interface__K__K_i = rY[44]; + // Units: mM; Initial value: 144.907134343314 + + // Lookup table indexing + const bool _oob_0 = Celldecker_2009FromCellMLBackwardEulerOpt_LookupTables::Instance()->CheckIndex0(var_chaste_interface__membrane__Vm); +// LCOV_EXCL_START + if (_oob_0) + EXCEPTION(DumpState("membrane_voltage outside lookup table range", rY)); +// LCOV_EXCL_STOP + const double* const _lt_0_row = Celldecker_2009FromCellMLBackwardEulerOpt_LookupTables::Instance()->IndexTable0(var_chaste_interface__membrane__Vm); + + const double var_INaCa__INaCa_ss_sr = 0.20000000000000001 * (pow(var_chaste_interface__Na__Na_ss_sr, 3) * mParameters[3] * _lt_0_row[0] - pow(mParameters[5], 3) * var_chaste_interface__Ca__Ca_ss_sr * _lt_0_row[1]) * mParameters[17] / ((_lt_0_row[2]) * (1 + 1.5624999999999999e-8 / pow(var_chaste_interface__Ca__Ca_ss_sr, 2)) * (669921.875 * var_chaste_interface__Ca__Ca_ss_sr + 1.3 * pow(var_chaste_interface__Na__Na_ss_sr, 3) + pow(var_chaste_interface__Na__Na_ss_sr, 3) * mParameters[3] + pow(mParameters[5], 3) * var_chaste_interface__Ca__Ca_ss_sr + 0.0035999999999999999 * pow(mParameters[5], 3) * (1 + 0.00053738391835633597 * pow(var_chaste_interface__Na__Na_ss_sr, 3)) + 1860.8670000000004 * (1 + 277.77777777777777 * var_chaste_interface__Ca__Ca_ss_sr) * mParameters[3])); // uA_per_uF + const double var_INaCa__INaCa = 0.80000000000000004 * (pow(var_chaste_interface__Na__Na_i, 3) * mParameters[3] * _lt_0_row[0] - pow(mParameters[5], 3) * var_chaste_interface__Ca__Ca_i * _lt_0_row[1]) * mParameters[17] / ((_lt_0_row[2]) * (1 + 1.5624999999999999e-8 / pow(var_chaste_interface__Ca__Ca_i, 2)) * (669921.875 * var_chaste_interface__Ca__Ca_i + 1.3 * pow(var_chaste_interface__Na__Na_i, 3) + pow(var_chaste_interface__Na__Na_i, 3) * mParameters[3] + pow(mParameters[5], 3) * var_chaste_interface__Ca__Ca_i + 0.0035999999999999999 * pow(mParameters[5], 3) * (1 + 0.00053738391835633597 * pow(var_chaste_interface__Na__Na_i, 3)) + 1860.8670000000004 * (1 + 277.77777777777777 * var_chaste_interface__Ca__Ca_i) * mParameters[3])) + var_INaCa__INaCa_ss_sr; // uA_per_uF + const double var_INaK__INaK = 0.056895766954938545 * pow(var_chaste_interface__Na__Na_i, 3) * mParameters[18] * mParameters[4] / (pow((1 + 0.38461538461538458 * var_chaste_interface__Na__Na_i), 3) * (_lt_0_row[3]) * (1.5 + mParameters[4])); // uA_per_uF + const double var_INab__phi = 0.037435883507802616 * var_chaste_interface__membrane__Vm; // dimensionless + const double var_membrane__caiont = -2 * var_INaCa__INaCa - 2 * var_INaCa__INaCa_ss_sr + (var_chaste_interface__ICaL__O + var_chaste_interface__ICaL__O_star) * (((0.074871767015605231 * var_chaste_interface__membrane__Vm >= -9.9999999999999995e-8) && (0.074871767015605231 * var_chaste_interface__membrane__Vm <= 9.9999999999999995e-8)) ? (192970 * (1 - 0.037435883507802616 * var_chaste_interface__membrane__Vm) * (-0.34100000000000003 * mParameters[3] + var_chaste_interface__Ca__Ca_ss_CaL * _lt_0_row[4]) * mParameters[6]) : (14448.004881001343 * (-0.34100000000000003 * mParameters[3] + var_chaste_interface__Ca__Ca_ss_CaL * _lt_0_row[4]) * mParameters[6] * var_chaste_interface__membrane__Vm / (_lt_0_row[5]))) + var_chaste_interface__Ca__Ca_i * mParameters[10] / (0.00050000000000000001 + var_chaste_interface__Ca__Ca_i) + (((0.074871767015605231 * var_chaste_interface__membrane__Vm >= -9.9999999999999995e-8) && (0.074871767015605231 * var_chaste_interface__membrane__Vm <= 9.9999999999999995e-8)) ? (192970 * (1 - 0.037435883507802616 * var_chaste_interface__membrane__Vm) * (-0.34100000000000003 * mParameters[3] + var_chaste_interface__Ca__Ca_i * _lt_0_row[4]) * mParameters[7]) : (14448.004881001343 * (-0.34100000000000003 * mParameters[3] + var_chaste_interface__Ca__Ca_i * _lt_0_row[4]) * mParameters[7] * var_chaste_interface__membrane__Vm / (_lt_0_row[5]))); // uA_per_uF + const double var_membrane__clont = (26.712338705498265 * log(100 / var_chaste_interface__Cl__Cl_i) + var_chaste_interface__membrane__Vm) * mParameters[8] + (1 - 1 / (1 + 6.2499999999999991 * pow(var_chaste_interface__Irel__Irel, 2))) * (((0.037435883507802616 * var_chaste_interface__membrane__Vm >= -9.9999999999999995e-8) && (0.037435883507802616 * var_chaste_interface__membrane__Vm <= 9.9999999999999995e-8)) ? (-96485 * (1 - 0.018717941753901308 * var_chaste_interface__membrane__Vm) * (_lt_0_row[6] + var_chaste_interface__Cl__Cl_i) * mParameters[19]) : (-3612.0012202503358 * (_lt_0_row[6] + var_chaste_interface__Cl__Cl_i) * mParameters[19] * var_chaste_interface__membrane__Vm / (_lt_0_row[7]))) * var_chaste_interface__Ito2_i2f_gate__i2f; // uA_per_uF + const double var_reversal_potentials__EK = 26.712338705498265 * log(mParameters[4] / var_chaste_interface__K__K_i); // mV + const double var_reversal_potentials__ENa = 26.712338705498265 * log(mParameters[5] / var_chaste_interface__Na__Na_i); // mV + const double var_membrane__naiont = 3 * var_INaCa__INaCa + 3 * var_INaCa__INaCa_ss_sr + 3 * var_INaK__INaK + pow(var_chaste_interface__INaL_mL_gate__mL, 3) * (-var_reversal_potentials__ENa + var_chaste_interface__membrane__Vm) * mParameters[13] * var_chaste_interface__INaL_hL_gate__hL + pow(var_chaste_interface__INa_m_gate__m, 3) * (-var_reversal_potentials__ENa + var_chaste_interface__membrane__Vm) * mParameters[11] * var_chaste_interface__INa_h_gate__h * var_chaste_interface__INa_j_gate__j + (((var_INab__phi >= -9.9999999999999995e-8) && (var_INab__phi <= 9.9999999999999995e-8)) ? (96485 * (1 - 0.5 * var_INab__phi) * (-mParameters[5] + var_chaste_interface__Na__Na_i * exp(var_INab__phi)) * mParameters[9]) : (96485 * (-mParameters[5] + var_chaste_interface__Na__Na_i * exp(var_INab__phi)) * mParameters[9] * var_INab__phi / (-1 + exp(var_INab__phi)))); // uA_per_uF + const double var_membrane__kiont = -2 * var_INaK__INaK + (-var_reversal_potentials__EK + var_chaste_interface__membrane__Vm) * mParameters[14] / (_lt_0_row[8]) + (1 + 0.59999999999999998 / (1 + 6.4818210260626455e-7 * pow((1 / var_chaste_interface__Ca__Ca_i), 1.3999999999999999))) * (-26.712338705498265 * log((0.018329999999999999 * mParameters[5] + mParameters[4]) / (0.018329999999999999 * var_chaste_interface__Na__Na_i + var_chaste_interface__K__K_i)) + var_chaste_interface__membrane__Vm) * (1 - var_chaste_interface__IKs__C1 - var_chaste_interface__IKs__C10 - var_chaste_interface__IKs__C11 - var_chaste_interface__IKs__C12 - var_chaste_interface__IKs__C13 - var_chaste_interface__IKs__C14 - var_chaste_interface__IKs__C15 - var_chaste_interface__IKs__C2 - var_chaste_interface__IKs__C3 - var_chaste_interface__IKs__C4 - var_chaste_interface__IKs__C5 - var_chaste_interface__IKs__C6 - var_chaste_interface__IKs__C7 - var_chaste_interface__IKs__C8 - var_chaste_interface__IKs__C9) * mParameters[16] + 0.43033148291193518 * sqrt(mParameters[4]) * (-var_reversal_potentials__EK + var_chaste_interface__membrane__Vm) * mParameters[15] * var_chaste_interface__IKr_xr_gate__xr / (_lt_0_row[9]) + 0.4389381125701739 * sqrt(mParameters[4]) * (-var_reversal_potentials__EK + var_chaste_interface__membrane__Vm) * mParameters[12] / ((1 + exp(-14.1227775 + 0.23849999999999999 * var_chaste_interface__membrane__Vm - 0.23849999999999999 * var_reversal_potentials__EK)) * (1.02 / (1 + exp(-14.1227775 + 0.23849999999999999 * var_chaste_interface__membrane__Vm - 0.23849999999999999 * var_reversal_potentials__EK)) + (0.49124000000000001 * exp(0.43983232 + 0.080320000000000003 * var_chaste_interface__membrane__Vm - 0.080320000000000003 * var_reversal_potentials__EK) + exp(-36.698642499999998 + 0.061749999999999999 * var_chaste_interface__membrane__Vm - 0.061749999999999999 * var_reversal_potentials__EK)) / (1 + exp(-2.4444678999999998 + 0.51429999999999998 * var_reversal_potentials__EK - 0.51429999999999998 * var_chaste_interface__membrane__Vm)))) + pow(var_chaste_interface__Ito1_a_gate__a, 3) * (-var_reversal_potentials__EK + var_chaste_interface__membrane__Vm) * mParameters[20] * var_chaste_interface__Ito1_i1f_gate__i1f * var_chaste_interface__Ito1_i1s_gate__i1s * _lt_0_row[10]; // uA_per_uF + const double var_chaste_interface__i_ionic = (var_membrane__caiont + var_membrane__clont + var_membrane__kiont + var_membrane__naiont) * HeartConfig::Instance()->GetCapacitance(); // uA_per_cm2 + + const double i_ionic = var_chaste_interface__i_ionic; + EXCEPT_IF_NOT(!std::isnan(i_ionic)); + return i_ionic; + } + + void Celldecker_2009FromCellMLBackwardEulerOpt::ComputeResidual(double var_chaste_interface__environment__time, const double rCurrentGuess[35], double rResidual[35]) + { + std::vector& rY = rGetStateVariables(); + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: mV; Initial value: -87.4947322902196 + double var_chaste_interface__INa_m_gate__m = rY[25]; + // Units: dimensionless; Initial value: 0.00101841101248412 + double var_chaste_interface__INa_h_gate__h = rY[26]; + // Units: dimensionless; Initial value: 0.991354143386887 + double var_chaste_interface__INa_j_gate__j = rY[27]; + // Units: dimensionless; Initial value: 0.99709036251243 + double var_chaste_interface__INaL_mL_gate__mL = rY[28]; + // Units: dimensionless; Initial value: 0.00101841101248412 + double var_chaste_interface__INaL_hL_gate__hL = rY[29]; + // Units: dimensionless; Initial value: 0.319611809402137 + double var_chaste_interface__IKr_xr_gate__xr = rY[30]; + // Units: dimensionless; Initial value: 4.06959064407486e-06 + double var_chaste_interface__Ito1_a_gate__a = rY[31]; + // Units: dimensionless; Initial value: 1.76776038804228e-05 + double var_chaste_interface__Ito1_i1f_gate__i1f = rY[32]; + // Units: dimensionless; Initial value: 0.997976503910799 + double var_chaste_interface__Ito1_i1s_gate__i1s = rY[33]; + // Units: dimensionless; Initial value: 0.947581184798815 + double var_chaste_interface__Ito2_i2f_gate__i2f = rY[34]; + // Units: dimensionless; Initial value: 0.996044894628276 + + //output_nonlinear_state_assignments + double var_chaste_interface__CaMK_active__CaMK_trap = rCurrentGuess[0]; + double var_chaste_interface__Ca__Ca_JSR = rCurrentGuess[1]; + double var_chaste_interface__Ca__Ca_NSR = rCurrentGuess[2]; + double var_chaste_interface__Ca__Ca_i = rCurrentGuess[3]; + double var_chaste_interface__Ca__Ca_ss_CaL = rCurrentGuess[4]; + double var_chaste_interface__Ca__Ca_ss_sr = rCurrentGuess[5]; + double var_chaste_interface__Cl__Cl_i = rCurrentGuess[6]; + double var_chaste_interface__Cl__Cl_ss = rCurrentGuess[7]; + double var_chaste_interface__ICaL__C = rCurrentGuess[8]; + double var_chaste_interface__ICaL__CI = rCurrentGuess[9]; + double var_chaste_interface__ICaL__CI_star = rCurrentGuess[10]; + double var_chaste_interface__ICaL__C_star = rCurrentGuess[11]; + double var_chaste_interface__ICaL__O = rCurrentGuess[12]; + double var_chaste_interface__ICaL__OI = rCurrentGuess[13]; + double var_chaste_interface__ICaL__O_star = rCurrentGuess[14]; + double var_chaste_interface__IKs__C1 = rCurrentGuess[15]; + double var_chaste_interface__IKs__C10 = rCurrentGuess[16]; + double var_chaste_interface__IKs__C11 = rCurrentGuess[17]; + double var_chaste_interface__IKs__C12 = rCurrentGuess[18]; + double var_chaste_interface__IKs__C13 = rCurrentGuess[19]; + double var_chaste_interface__IKs__C14 = rCurrentGuess[20]; + double var_chaste_interface__IKs__C15 = rCurrentGuess[21]; + double var_chaste_interface__IKs__C2 = rCurrentGuess[22]; + double var_chaste_interface__IKs__C3 = rCurrentGuess[23]; + double var_chaste_interface__IKs__C4 = rCurrentGuess[24]; + double var_chaste_interface__IKs__C5 = rCurrentGuess[25]; + double var_chaste_interface__IKs__C6 = rCurrentGuess[26]; + double var_chaste_interface__IKs__C7 = rCurrentGuess[27]; + double var_chaste_interface__IKs__C8 = rCurrentGuess[28]; + double var_chaste_interface__IKs__C9 = rCurrentGuess[29]; + double var_chaste_interface__IKs__O1 = rCurrentGuess[30]; + double var_chaste_interface__Irel__Irel = rCurrentGuess[31]; + double var_chaste_interface__K__K_i = rCurrentGuess[32]; + double var_chaste_interface__Na__Na_i = rCurrentGuess[33]; + double var_chaste_interface__Na__Na_ss_sr = rCurrentGuess[34]; + + // Lookup table indexing + const bool _oob_0 = Celldecker_2009FromCellMLBackwardEulerOpt_LookupTables::Instance()->CheckIndex0(var_chaste_interface__membrane__Vm); +// LCOV_EXCL_START + if (_oob_0) + EXCEPTION(DumpState("membrane_voltage outside lookup table range", rY , var_chaste_interface__environment__time)); +// LCOV_EXCL_STOP + const double* const _lt_0_row = Celldecker_2009FromCellMLBackwardEulerOpt_LookupTables::Instance()->IndexTable0(var_chaste_interface__membrane__Vm); + + //output_equations + const double var_Ca__Idiff = 5 * var_chaste_interface__Ca__Ca_ss_sr - 5 * var_chaste_interface__Ca__Ca_i; // mM_per_ms + const double var_Ca__Idiff_ss = 0.5 * var_chaste_interface__Ca__Ca_ss_sr - 0.5 * var_chaste_interface__Ca__Ca_ss_CaL; // mM_per_ms + const double var_CaMK_active__CaMK_active = 0.050000000000000003 * (1 - var_chaste_interface__CaMK_active__CaMK_trap) / (1 + 0.0015 / var_chaste_interface__Ca__Ca_ss_sr) + var_chaste_interface__CaMK_active__CaMK_trap; // dimensionless + const double var_Cl__Idiff_Cl = 5 * var_chaste_interface__Cl__Cl_ss - 5 * var_chaste_interface__Cl__Cl_i; // mM_per_ms + const double d_dt_chaste_interface_var_CaMK_active__CaMK_trap = -0.00068000000000000005 * var_chaste_interface__CaMK_active__CaMK_trap + 0.050000000000000003 * (-var_chaste_interface__CaMK_active__CaMK_trap + var_CaMK_active__CaMK_active) * var_CaMK_active__CaMK_active; // 1 / ms + const double var_ICaL__OI_star = 1 - var_chaste_interface__ICaL__C - var_chaste_interface__ICaL__CI - var_chaste_interface__ICaL__CI_star - var_chaste_interface__ICaL__C_star - var_chaste_interface__ICaL__O - var_chaste_interface__ICaL__OI - var_chaste_interface__ICaL__O_star; // dimensionless + const double var_ICaL__delta = 3 / (1 + 8.1000000000000005e-11 / pow(var_chaste_interface__Ca__Ca_ss_CaL, 4)); // per_ms + const double var_IKs__O2 = 1 - var_chaste_interface__IKs__C1 - var_chaste_interface__IKs__C10 - var_chaste_interface__IKs__C11 - var_chaste_interface__IKs__C12 - var_chaste_interface__IKs__C13 - var_chaste_interface__IKs__C14 - var_chaste_interface__IKs__C15 - var_chaste_interface__IKs__C2 - var_chaste_interface__IKs__C3 - var_chaste_interface__IKs__C4 - var_chaste_interface__IKs__C5 - var_chaste_interface__IKs__C6 - var_chaste_interface__IKs__C7 - var_chaste_interface__IKs__C8 - var_chaste_interface__IKs__C9 - var_chaste_interface__IKs__O1; // dimensionless + const double var_Ileak__Ileak = 0.066666666666666666 * var_chaste_interface__Ca__Ca_NSR * mParameters[0]; // mM_per_ms + const double var_IpCa__IpCa = var_chaste_interface__Ca__Ca_i * mParameters[10] / (0.00050000000000000001 + var_chaste_interface__Ca__Ca_i); // uA_per_uF + const double var_Irel__beta_tau = 4.75 + 4.75 / (1 + 2.9619676669542428e-6 * pow((1 / var_CaMK_active__CaMK_active), 10)); // ms + const double var_Itr__Itr = 0.040000000000000001 * var_chaste_interface__Ca__Ca_NSR - 0.040000000000000001 * var_chaste_interface__Ca__Ca_JSR; // mM_per_ms + const double d_dt_chaste_interface_var_Ca__Ca_JSR = (-var_chaste_interface__Irel__Irel + var_Itr__Itr) / (1 + 8 / pow((0.80000000000000004 + var_chaste_interface__Ca__Ca_JSR), 2)); // mM / ms + const double var_Iup__Iup = (1 + 0.75 * var_CaMK_active__CaMK_active / (0.14999999999999999 + var_CaMK_active__CaMK_active)) * var_chaste_interface__Ca__Ca_i * mParameters[2] / (0.00092000000000000003 - 0.00017000000000000001 * var_CaMK_active__CaMK_active / (0.14999999999999999 + var_CaMK_active__CaMK_active) + var_chaste_interface__Ca__Ca_i); // mM_per_ms + const double var_Na__Idiff_Na = 5 * var_chaste_interface__Na__Na_ss_sr - 5 * var_chaste_interface__Na__Na_i; // mM_per_ms + const double var_cell_geometry__vcell = 1.2100000000000001e-5 * M_PI; // uL + const double var_cell_geometry__Vjsr = 0.0047999999999999996 * var_cell_geometry__vcell; // uL + const double var_cell_geometry__Vmyo = 0.67800000000000005 * var_cell_geometry__vcell; // uL + const double var_cell_geometry__Vnsr = 0.055199999999999999 * var_cell_geometry__vcell; // uL + const double d_dt_chaste_interface_var_Ca__Ca_NSR = -var_Ileak__Ileak - var_Itr__Itr * var_cell_geometry__Vjsr / var_cell_geometry__Vnsr + var_Iup__Iup; // mM / ms + const double var_cell_geometry__Vss_sr = 0.02 * var_cell_geometry__vcell; // uL + const double var_ICaL__ACT_infinity = _lt_0_row[11]; // dimensionless + const double var_ICaL__ACT_tau = _lt_0_row[12]; // ms + const double var_ICaL__IV_infinity = _lt_0_row[13]; // dimensionless + const double var_ICaL__IV_infinity_star = _lt_0_row[14]; // dimensionless + const double var_ICaL__IV_tau = _lt_0_row[15]; // ms + const double var_ICaL__IV_tau_star = 1 / (_lt_0_row[17] + 1 / ((_lt_0_row[16]) * (25 - 17.5 / (1 + 8.1000000000000005e-11 / pow(var_chaste_interface__Ca__Ca_ss_CaL, 4))))); // ms + const double var_ICaL__alpha = var_ICaL__ACT_infinity / var_ICaL__ACT_tau; // per_ms + const double var_ICaL__beta = (1 - var_ICaL__ACT_infinity) / var_ICaL__ACT_tau; // per_ms + const double var_ICaL__x = var_ICaL__IV_infinity / var_ICaL__IV_tau; // per_ms + const double var_ICaL__x_star = var_ICaL__IV_infinity_star / var_ICaL__IV_tau_star; // per_ms + const double var_ICaL__y = (1 - var_ICaL__IV_infinity) / var_ICaL__IV_tau; // per_ms + const double d_dt_chaste_interface_var_ICaL__C = var_chaste_interface__ICaL__C_star + (-var_ICaL__alpha - var_ICaL__delta - var_ICaL__y) * var_chaste_interface__ICaL__C + var_chaste_interface__ICaL__CI * var_ICaL__x + var_chaste_interface__ICaL__O * var_ICaL__beta; // 1 / ms + const double d_dt_chaste_interface_var_ICaL__O = var_chaste_interface__ICaL__O_star + (-var_ICaL__beta - var_ICaL__delta - var_ICaL__y) * var_chaste_interface__ICaL__O + var_chaste_interface__ICaL__C * var_ICaL__alpha + var_chaste_interface__ICaL__OI * var_ICaL__x; // 1 / ms + const double var_ICaL__y_star = (1 - var_ICaL__IV_infinity_star) / var_ICaL__IV_tau_star; // per_ms + const double d_dt_chaste_interface_var_ICaL__C_star = (-1 - var_ICaL__alpha - var_ICaL__y_star) * var_chaste_interface__ICaL__C_star + var_chaste_interface__ICaL__C * var_ICaL__delta + var_chaste_interface__ICaL__CI_star * var_ICaL__x_star + var_chaste_interface__ICaL__O_star * var_ICaL__beta; // 1 / ms + const double d_dt_chaste_interface_var_ICaL__O_star = (-1 - var_ICaL__beta - var_ICaL__y_star) * var_chaste_interface__ICaL__O_star + var_chaste_interface__ICaL__C_star * var_ICaL__alpha + var_chaste_interface__ICaL__O * var_ICaL__delta + var_ICaL__OI_star * var_ICaL__x_star; // 1 / ms + const double var_ICaL__delta_I = 9.9999999999999995e-7 * var_ICaL__delta * var_ICaL__x * var_ICaL__y_star / (var_ICaL__x_star * var_ICaL__y); // per_ms + const double d_dt_chaste_interface_var_ICaL__CI = 9.9999999999999995e-7 * var_chaste_interface__ICaL__CI_star + (-var_ICaL__alpha - var_ICaL__delta_I - var_ICaL__x) * var_chaste_interface__ICaL__CI + var_chaste_interface__ICaL__C * var_ICaL__y + var_chaste_interface__ICaL__OI * var_ICaL__beta; // 1 / ms + const double d_dt_chaste_interface_var_ICaL__CI_star = (-9.9999999999999995e-7 - var_ICaL__alpha - var_ICaL__x_star) * var_chaste_interface__ICaL__CI_star + var_chaste_interface__ICaL__CI * var_ICaL__delta_I + var_chaste_interface__ICaL__C_star * var_ICaL__y_star + var_ICaL__OI_star * var_ICaL__beta; // 1 / ms + const double d_dt_chaste_interface_var_ICaL__OI = 9.9999999999999995e-7 * var_ICaL__OI_star + (-var_ICaL__beta - var_ICaL__delta_I - var_ICaL__x) * var_chaste_interface__ICaL__OI + var_chaste_interface__ICaL__CI * var_ICaL__alpha + var_chaste_interface__ICaL__O * var_ICaL__y; // 1 / ms + const double var_membrane__i_Stim = GetIntracellularAreaStimulus(var_chaste_interface__environment__time) / HeartConfig::Instance()->GetCapacitance(); // uA_per_uF + const double var_cell_geometry__AF = 5.0619267243613002e-10 * M_PI; // uF_mole_per_C + const double var_ICaL__ICaL = (var_chaste_interface__ICaL__O + var_chaste_interface__ICaL__O_star) * (((0.074871767015605231 * var_chaste_interface__membrane__Vm >= -9.9999999999999995e-8) && (0.074871767015605231 * var_chaste_interface__membrane__Vm <= 9.9999999999999995e-8)) ? (192970 * (1 - 0.037435883507802616 * var_chaste_interface__membrane__Vm) * (-0.34100000000000003 * mParameters[3] + var_chaste_interface__Ca__Ca_ss_CaL * _lt_0_row[4]) * mParameters[6]) : (14448.004881001343 * (-0.34100000000000003 * mParameters[3] + var_chaste_interface__Ca__Ca_ss_CaL * _lt_0_row[4]) * mParameters[6] * var_chaste_interface__membrane__Vm / (_lt_0_row[5]))); // uA_per_uF + const double d_dt_chaste_interface_var_Ca__Ca_ss_CaL = -(250 * var_ICaL__ICaL * var_cell_geometry__AF / var_cell_geometry__vcell - 500 * var_Ca__Idiff_ss * var_cell_geometry__Vss_sr / var_cell_geometry__vcell) / (1 + 0.0097788000000000007 / pow((0.0086999999999999994 + var_chaste_interface__Ca__Ca_ss_CaL), 2) + 4.0890000000000003e-5 / pow((0.00087000000000000001 + var_chaste_interface__Ca__Ca_ss_CaL), 2)); // mM / ms + const double var_ICab__ICab = (((0.074871767015605231 * var_chaste_interface__membrane__Vm >= -9.9999999999999995e-8) && (0.074871767015605231 * var_chaste_interface__membrane__Vm <= 9.9999999999999995e-8)) ? (192970 * (1 - 0.037435883507802616 * var_chaste_interface__membrane__Vm) * (-0.34100000000000003 * mParameters[3] + var_chaste_interface__Ca__Ca_i * _lt_0_row[4]) * mParameters[7]) : (14448.004881001343 * (-0.34100000000000003 * mParameters[3] + var_chaste_interface__Ca__Ca_i * _lt_0_row[4]) * mParameters[7] * var_chaste_interface__membrane__Vm / (_lt_0_row[5]))); // uA_per_uF + const double var_IKs__alpha = _lt_0_row[33]; // per_ms + const double var_IKs__beta = _lt_0_row[34]; // per_ms + const double d_dt_chaste_interface_var_IKs__C1 = var_chaste_interface__IKs__C2 * var_IKs__beta - 4 * var_chaste_interface__IKs__C1 * var_IKs__alpha; // 1 / ms + const double var_IKs__delta = _lt_0_row[35]; // per_ms + const double var_IKs__eta = _lt_0_row[36]; // per_ms + const double var_IKs__gamma = _lt_0_row[37]; // per_ms + const double d_dt_chaste_interface_var_IKs__C10 = (-2 * var_IKs__alpha - 2 * var_IKs__delta) * var_chaste_interface__IKs__C10 + var_chaste_interface__IKs__C11 * var_IKs__beta + var_chaste_interface__IKs__C7 * var_IKs__gamma; // 1 / ms + const double d_dt_chaste_interface_var_IKs__C11 = (-var_IKs__alpha - var_IKs__beta - var_IKs__gamma - 2 * var_IKs__delta) * var_chaste_interface__IKs__C11 + 2 * var_chaste_interface__IKs__C10 * var_IKs__alpha + 2 * var_chaste_interface__IKs__C12 * var_IKs__beta + 2 * var_chaste_interface__IKs__C8 * var_IKs__gamma + 3 * var_chaste_interface__IKs__C13 * var_IKs__delta; // 1 / ms + const double d_dt_chaste_interface_var_IKs__C12 = (-2 * var_IKs__beta - 2 * var_IKs__delta - 2 * var_IKs__gamma) * var_chaste_interface__IKs__C12 + var_chaste_interface__IKs__C11 * var_IKs__alpha + 3 * var_chaste_interface__IKs__C14 * var_IKs__delta + 3 * var_chaste_interface__IKs__C9 * var_IKs__gamma; // 1 / ms + const double d_dt_chaste_interface_var_IKs__C13 = (-var_IKs__alpha - 3 * var_IKs__delta) * var_chaste_interface__IKs__C13 + var_chaste_interface__IKs__C11 * var_IKs__gamma + var_chaste_interface__IKs__C14 * var_IKs__beta; // 1 / ms + const double d_dt_chaste_interface_var_IKs__C14 = (-var_IKs__beta - var_IKs__gamma - 3 * var_IKs__delta) * var_chaste_interface__IKs__C14 + var_chaste_interface__IKs__C13 * var_IKs__alpha + 2 * var_chaste_interface__IKs__C12 * var_IKs__gamma + 4 * var_chaste_interface__IKs__C15 * var_IKs__delta; // 1 / ms + const double d_dt_chaste_interface_var_IKs__C15 = (-0.089538306411019994 - 4 * var_IKs__delta) * var_chaste_interface__IKs__C15 + var_chaste_interface__IKs__C14 * var_IKs__gamma + var_chaste_interface__IKs__O1 * var_IKs__eta; // 1 / ms + const double d_dt_chaste_interface_var_IKs__C2 = (-var_IKs__beta - var_IKs__gamma - 3 * var_IKs__alpha) * var_chaste_interface__IKs__C2 + var_chaste_interface__IKs__C6 * var_IKs__delta + 2 * var_chaste_interface__IKs__C3 * var_IKs__beta + 4 * var_chaste_interface__IKs__C1 * var_IKs__alpha; // 1 / ms + const double d_dt_chaste_interface_var_IKs__C3 = (-2 * var_IKs__alpha - 2 * var_IKs__beta - 2 * var_IKs__gamma) * var_chaste_interface__IKs__C3 + var_chaste_interface__IKs__C7 * var_IKs__delta + 3 * var_chaste_interface__IKs__C2 * var_IKs__alpha + 3 * var_chaste_interface__IKs__C4 * var_IKs__beta; // 1 / ms + const double d_dt_chaste_interface_var_IKs__C4 = (-var_IKs__alpha - 3 * var_IKs__beta - 3 * var_IKs__gamma) * var_chaste_interface__IKs__C4 + var_chaste_interface__IKs__C8 * var_IKs__delta + 2 * var_chaste_interface__IKs__C3 * var_IKs__alpha + 4 * var_chaste_interface__IKs__C5 * var_IKs__beta; // 1 / ms + const double d_dt_chaste_interface_var_IKs__C5 = (-4 * var_IKs__beta - 4 * var_IKs__gamma) * var_chaste_interface__IKs__C5 + var_chaste_interface__IKs__C4 * var_IKs__alpha + var_chaste_interface__IKs__C9 * var_IKs__delta; // 1 / ms + const double d_dt_chaste_interface_var_IKs__C6 = (-var_IKs__delta - 3 * var_IKs__alpha) * var_chaste_interface__IKs__C6 + var_chaste_interface__IKs__C2 * var_IKs__gamma + var_chaste_interface__IKs__C7 * var_IKs__beta; // 1 / ms + const double d_dt_chaste_interface_var_IKs__C7 = (-var_IKs__beta - var_IKs__delta - var_IKs__gamma - 2 * var_IKs__alpha) * var_chaste_interface__IKs__C7 + 2 * var_chaste_interface__IKs__C10 * var_IKs__delta + 2 * var_chaste_interface__IKs__C3 * var_IKs__gamma + 2 * var_chaste_interface__IKs__C8 * var_IKs__beta + 3 * var_chaste_interface__IKs__C6 * var_IKs__alpha; // 1 / ms + const double d_dt_chaste_interface_var_IKs__C8 = (-var_IKs__alpha - var_IKs__delta - 2 * var_IKs__beta - 2 * var_IKs__gamma) * var_chaste_interface__IKs__C8 + 2 * var_chaste_interface__IKs__C11 * var_IKs__delta + 2 * var_chaste_interface__IKs__C7 * var_IKs__alpha + 3 * var_chaste_interface__IKs__C4 * var_IKs__gamma + 3 * var_chaste_interface__IKs__C9 * var_IKs__beta; // 1 / ms + const double d_dt_chaste_interface_var_IKs__C9 = (-var_IKs__delta - 3 * var_IKs__beta - 3 * var_IKs__gamma) * var_chaste_interface__IKs__C9 + var_chaste_interface__IKs__C8 * var_IKs__alpha + 2 * var_chaste_interface__IKs__C12 * var_IKs__delta + 4 * var_chaste_interface__IKs__C5 * var_IKs__gamma; // 1 / ms + const double d_dt_chaste_interface_var_IKs__O1 = 0.089538306411019994 * var_chaste_interface__IKs__C15 + (-var_IKs__eta + _lt_0_row[38]) * var_chaste_interface__IKs__O1 + 0.79405459958640001 * var_IKs__O2 * _lt_0_row[39]; // 1 / ms + const double var_INaCa__INaCa_ss_sr = 0.20000000000000001 * (pow(var_chaste_interface__Na__Na_ss_sr, 3) * mParameters[3] * _lt_0_row[0] - pow(mParameters[5], 3) * var_chaste_interface__Ca__Ca_ss_sr * _lt_0_row[1]) * mParameters[17] / ((_lt_0_row[2]) * (1 + 1.5624999999999999e-8 / pow(var_chaste_interface__Ca__Ca_ss_sr, 2)) * (669921.875 * var_chaste_interface__Ca__Ca_ss_sr + 1.3 * pow(var_chaste_interface__Na__Na_ss_sr, 3) + pow(var_chaste_interface__Na__Na_ss_sr, 3) * mParameters[3] + pow(mParameters[5], 3) * var_chaste_interface__Ca__Ca_ss_sr + 0.0035999999999999999 * pow(mParameters[5], 3) * (1 + 0.00053738391835633597 * pow(var_chaste_interface__Na__Na_ss_sr, 3)) + 1860.8670000000004 * (1 + 277.77777777777777 * var_chaste_interface__Ca__Ca_ss_sr) * mParameters[3])); // uA_per_uF + const double d_dt_chaste_interface_var_Ca__Ca_ss_sr = -(-var_chaste_interface__Irel__Irel * var_cell_geometry__Vjsr / var_cell_geometry__Vss_sr - var_INaCa__INaCa_ss_sr * var_cell_geometry__AF / var_cell_geometry__Vss_sr + var_Ca__Idiff + var_Ca__Idiff_ss) / (1 + 0.0097788000000000007 / pow((0.0086999999999999994 + var_chaste_interface__Ca__Ca_ss_sr), 2) + 4.0890000000000003e-5 / pow((0.00087000000000000001 + var_chaste_interface__Ca__Ca_ss_sr), 2)); // mM / ms + const double d_dt_chaste_interface_var_Na__Na_ss_sr = -var_Na__Idiff_Na - 3 * var_INaCa__INaCa_ss_sr * var_cell_geometry__AF / var_cell_geometry__Vss_sr; // mM / ms + const double var_INaCa__INaCa = 0.80000000000000004 * (pow(var_chaste_interface__Na__Na_i, 3) * mParameters[3] * _lt_0_row[0] - pow(mParameters[5], 3) * var_chaste_interface__Ca__Ca_i * _lt_0_row[1]) * mParameters[17] / ((_lt_0_row[2]) * (1 + 1.5624999999999999e-8 / pow(var_chaste_interface__Ca__Ca_i, 2)) * (669921.875 * var_chaste_interface__Ca__Ca_i + 1.3 * pow(var_chaste_interface__Na__Na_i, 3) + pow(var_chaste_interface__Na__Na_i, 3) * mParameters[3] + pow(mParameters[5], 3) * var_chaste_interface__Ca__Ca_i + 0.0035999999999999999 * pow(mParameters[5], 3) * (1 + 0.00053738391835633597 * pow(var_chaste_interface__Na__Na_i, 3)) + 1860.8670000000004 * (1 + 277.77777777777777 * var_chaste_interface__Ca__Ca_i) * mParameters[3])) + var_INaCa__INaCa_ss_sr; // uA_per_uF + const double d_dt_chaste_interface_var_Ca__Ca_i = ((-var_Iup__Iup + var_Ileak__Ileak) * var_cell_geometry__Vnsr / var_cell_geometry__Vmyo + var_Ca__Idiff * var_cell_geometry__Vss_sr / var_cell_geometry__Vmyo + 0.5 * (-var_ICab__ICab - var_IpCa__IpCa + 2 * var_INaCa__INaCa) * var_cell_geometry__AF / var_cell_geometry__Vmyo) / (1 + 0.00011900000000000002 / pow((0.0023800000000000002 + var_chaste_interface__Ca__Ca_i), 2) + 3.5000000000000004e-5 / pow((0.00050000000000000001 + var_chaste_interface__Ca__Ca_i), 2)); // mM / ms + const double var_INaK__INaK = 0.056895766954938545 * pow(var_chaste_interface__Na__Na_i, 3) * mParameters[18] * mParameters[4] / (pow((1 + 0.38461538461538458 * var_chaste_interface__Na__Na_i), 3) * (_lt_0_row[3]) * (1.5 + mParameters[4])); // uA_per_uF + const double var_INab__phi = 0.037435883507802616 * var_chaste_interface__membrane__Vm; // dimensionless + const double var_INab__INab = (((var_INab__phi >= -9.9999999999999995e-8) && (var_INab__phi <= 9.9999999999999995e-8)) ? (96485 * (1 - 0.5 * var_INab__phi) * (-mParameters[5] + var_chaste_interface__Na__Na_i * exp(var_INab__phi)) * mParameters[9]) : (96485 * (-mParameters[5] + var_chaste_interface__Na__Na_i * exp(var_INab__phi)) * mParameters[9] * var_INab__phi / (-1 + exp(var_INab__phi)))); // uA_per_uF + const double d_dt_chaste_interface_var_Irel__Irel = (1 + 0.0123 / var_chaste_interface__Ca__Ca_JSR) * (-var_chaste_interface__Irel__Irel - var_ICaL__ICaL * var_Irel__beta_tau * mParameters[1] / (1 + pow((1 / var_chaste_interface__Ca__Ca_JSR), 8))) / var_Irel__beta_tau; // mM_per_ms / ms + const double var_Ito2__Ito2 = (1 - 1 / (1 + 6.2499999999999991 * pow(var_chaste_interface__Irel__Irel, 2))) * (((0.037435883507802616 * var_chaste_interface__membrane__Vm >= -9.9999999999999995e-8) && (0.037435883507802616 * var_chaste_interface__membrane__Vm <= 9.9999999999999995e-8)) ? (-96485 * (1 - 0.018717941753901308 * var_chaste_interface__membrane__Vm) * (_lt_0_row[6] + var_chaste_interface__Cl__Cl_i) * mParameters[19]) : (-3612.0012202503358 * (_lt_0_row[6] + var_chaste_interface__Cl__Cl_i) * mParameters[19] * var_chaste_interface__membrane__Vm / (_lt_0_row[7]))) * var_chaste_interface__Ito2_i2f_gate__i2f; // uA_per_uF + const double d_dt_chaste_interface_var_Cl__Cl_ss = -var_Cl__Idiff_Cl + var_Ito2__Ito2 * var_cell_geometry__AF / var_cell_geometry__Vss_sr; // mM / ms + const double var_reversal_potentials__ECl = -26.712338705498265 * log(100 / var_chaste_interface__Cl__Cl_i); // mV + const double var_IClb__IClb = (-var_reversal_potentials__ECl + var_chaste_interface__membrane__Vm) * mParameters[8]; // uA_per_uF + const double var_reversal_potentials__EK = 26.712338705498265 * log(mParameters[4] / var_chaste_interface__K__K_i); // mV + const double var_CT_K_Cl__CT_K_Cl = 1.77e-5 * (-var_reversal_potentials__ECl + var_reversal_potentials__EK) / (87.825100000000006 - var_reversal_potentials__ECl + var_reversal_potentials__EK); // mM_per_ms + const double var_IK1__IK1 = 0.4389381125701739 * sqrt(mParameters[4]) * (-var_reversal_potentials__EK + var_chaste_interface__membrane__Vm) * mParameters[12] / ((1 + exp(-14.1227775 + 0.23849999999999999 * var_chaste_interface__membrane__Vm - 0.23849999999999999 * var_reversal_potentials__EK)) * (1.02 / (1 + exp(-14.1227775 + 0.23849999999999999 * var_chaste_interface__membrane__Vm - 0.23849999999999999 * var_reversal_potentials__EK)) + (0.49124000000000001 * exp(0.43983232 + 0.080320000000000003 * var_chaste_interface__membrane__Vm - 0.080320000000000003 * var_reversal_potentials__EK) + exp(-36.698642499999998 + 0.061749999999999999 * var_chaste_interface__membrane__Vm - 0.061749999999999999 * var_reversal_potentials__EK)) / (1 + exp(-2.4444678999999998 + 0.51429999999999998 * var_reversal_potentials__EK - 0.51429999999999998 * var_chaste_interface__membrane__Vm)))); // uA_per_uF + const double var_IKp__IKp = (-var_reversal_potentials__EK + var_chaste_interface__membrane__Vm) * mParameters[14] / (_lt_0_row[8]); // uA_per_uF + const double var_IKr__IKr = 0.43033148291193518 * sqrt(mParameters[4]) * (-var_reversal_potentials__EK + var_chaste_interface__membrane__Vm) * mParameters[15] * var_chaste_interface__IKr_xr_gate__xr / (_lt_0_row[9]); // uA_per_uF + const double var_Ito1__Ito1 = pow(var_chaste_interface__Ito1_a_gate__a, 3) * (-var_reversal_potentials__EK + var_chaste_interface__membrane__Vm) * mParameters[20] * var_chaste_interface__Ito1_i1f_gate__i1f * var_chaste_interface__Ito1_i1s_gate__i1s * _lt_0_row[10]; // uA_per_uF + const double var_reversal_potentials__ENa = 26.712338705498265 * log(mParameters[5] / var_chaste_interface__Na__Na_i); // mV + const double var_CT_Na_Cl__CT_Na_Cl = 2.4610800000000002e-5 * pow((-var_reversal_potentials__ECl + var_reversal_potentials__ENa), 4) / (59494197.640692554 + pow((-var_reversal_potentials__ECl + var_reversal_potentials__ENa), 4)); // mM_per_ms + const double d_dt_chaste_interface_var_Cl__Cl_i = var_Cl__Idiff_Cl * var_cell_geometry__Vss_sr / var_cell_geometry__Vmyo + var_IClb__IClb * var_cell_geometry__AF / var_cell_geometry__Vmyo + var_CT_K_Cl__CT_K_Cl + var_CT_Na_Cl__CT_Na_Cl; // mM / ms + const double var_INa__INa = pow(var_chaste_interface__INa_m_gate__m, 3) * (-var_reversal_potentials__ENa + var_chaste_interface__membrane__Vm) * mParameters[11] * var_chaste_interface__INa_h_gate__h * var_chaste_interface__INa_j_gate__j; // uA_per_uF + const double var_INaL__INaL = pow(var_chaste_interface__INaL_mL_gate__mL, 3) * (-var_reversal_potentials__ENa + var_chaste_interface__membrane__Vm) * mParameters[13] * var_chaste_interface__INaL_hL_gate__hL; // uA_per_uF + const double d_dt_chaste_interface_var_Na__Na_i = var_Na__Idiff_Na * var_cell_geometry__Vss_sr / var_cell_geometry__Vmyo - (3 * var_INaCa__INaCa + 3 * var_INaK__INaK + var_INa__INa + var_INaL__INaL + var_INab__INab) * var_cell_geometry__AF / var_cell_geometry__Vmyo + var_CT_Na_Cl__CT_Na_Cl; // mM / ms + const double var_IKs__IKs = (1 + 0.59999999999999998 / (1 + 6.4818210260626455e-7 * pow((1 / var_chaste_interface__Ca__Ca_i), 1.3999999999999999))) * (-26.712338705498265 * log((0.018329999999999999 * mParameters[5] + mParameters[4]) / (0.018329999999999999 * var_chaste_interface__Na__Na_i + var_chaste_interface__K__K_i)) + var_chaste_interface__membrane__Vm) * (var_chaste_interface__IKs__O1 + var_IKs__O2) * mParameters[16]; // uA_per_uF + const double d_dt_chaste_interface_var_K__K_i = -(-2 * var_INaK__INaK + var_IK1__IK1 + var_IKp__IKp + var_IKr__IKr + var_IKs__IKs + var_Ito1__Ito1 + var_membrane__i_Stim) * var_cell_geometry__AF / var_cell_geometry__Vmyo + var_CT_K_Cl__CT_K_Cl; // mM / ms + + rResidual[3] = rCurrentGuess[3] - rY[1] - mDt*d_dt_chaste_interface_var_Ca__Ca_i; + rResidual[15] = rCurrentGuess[15] - rY[2] - mDt*d_dt_chaste_interface_var_IKs__C1; + rResidual[22] = rCurrentGuess[22] - rY[3] - mDt*d_dt_chaste_interface_var_IKs__C2; + rResidual[23] = rCurrentGuess[23] - rY[4] - mDt*d_dt_chaste_interface_var_IKs__C3; + rResidual[24] = rCurrentGuess[24] - rY[5] - mDt*d_dt_chaste_interface_var_IKs__C4; + rResidual[25] = rCurrentGuess[25] - rY[6] - mDt*d_dt_chaste_interface_var_IKs__C5; + rResidual[26] = rCurrentGuess[26] - rY[7] - mDt*d_dt_chaste_interface_var_IKs__C6; + rResidual[27] = rCurrentGuess[27] - rY[8] - mDt*d_dt_chaste_interface_var_IKs__C7; + rResidual[28] = rCurrentGuess[28] - rY[9] - mDt*d_dt_chaste_interface_var_IKs__C8; + rResidual[29] = rCurrentGuess[29] - rY[10] - mDt*d_dt_chaste_interface_var_IKs__C9; + rResidual[16] = rCurrentGuess[16] - rY[11] - mDt*d_dt_chaste_interface_var_IKs__C10; + rResidual[17] = rCurrentGuess[17] - rY[12] - mDt*d_dt_chaste_interface_var_IKs__C11; + rResidual[18] = rCurrentGuess[18] - rY[13] - mDt*d_dt_chaste_interface_var_IKs__C12; + rResidual[19] = rCurrentGuess[19] - rY[14] - mDt*d_dt_chaste_interface_var_IKs__C13; + rResidual[20] = rCurrentGuess[20] - rY[15] - mDt*d_dt_chaste_interface_var_IKs__C14; + rResidual[21] = rCurrentGuess[21] - rY[16] - mDt*d_dt_chaste_interface_var_IKs__C15; + rResidual[30] = rCurrentGuess[30] - rY[17] - mDt*d_dt_chaste_interface_var_IKs__O1; + rResidual[8] = rCurrentGuess[8] - rY[18] - mDt*d_dt_chaste_interface_var_ICaL__C; + rResidual[12] = rCurrentGuess[12] - rY[19] - mDt*d_dt_chaste_interface_var_ICaL__O; + rResidual[11] = rCurrentGuess[11] - rY[20] - mDt*d_dt_chaste_interface_var_ICaL__C_star; + rResidual[14] = rCurrentGuess[14] - rY[21] - mDt*d_dt_chaste_interface_var_ICaL__O_star; + rResidual[9] = rCurrentGuess[9] - rY[22] - mDt*d_dt_chaste_interface_var_ICaL__CI; + rResidual[13] = rCurrentGuess[13] - rY[23] - mDt*d_dt_chaste_interface_var_ICaL__OI; + rResidual[10] = rCurrentGuess[10] - rY[24] - mDt*d_dt_chaste_interface_var_ICaL__CI_star; + rResidual[31] = rCurrentGuess[31] - rY[35] - mDt*d_dt_chaste_interface_var_Irel__Irel; + rResidual[1] = rCurrentGuess[1] - rY[36] - mDt*d_dt_chaste_interface_var_Ca__Ca_JSR; + rResidual[2] = rCurrentGuess[2] - rY[37] - mDt*d_dt_chaste_interface_var_Ca__Ca_NSR; + rResidual[5] = rCurrentGuess[5] - rY[38] - mDt*d_dt_chaste_interface_var_Ca__Ca_ss_sr; + rResidual[4] = rCurrentGuess[4] - rY[39] - mDt*d_dt_chaste_interface_var_Ca__Ca_ss_CaL; + rResidual[33] = rCurrentGuess[33] - rY[40] - mDt*d_dt_chaste_interface_var_Na__Na_i; + rResidual[34] = rCurrentGuess[34] - rY[41] - mDt*d_dt_chaste_interface_var_Na__Na_ss_sr; + rResidual[6] = rCurrentGuess[6] - rY[42] - mDt*d_dt_chaste_interface_var_Cl__Cl_i; + rResidual[7] = rCurrentGuess[7] - rY[43] - mDt*d_dt_chaste_interface_var_Cl__Cl_ss; + rResidual[32] = rCurrentGuess[32] - rY[44] - mDt*d_dt_chaste_interface_var_K__K_i; + rResidual[0] = rCurrentGuess[0] - rY[45] - mDt*d_dt_chaste_interface_var_CaMK_active__CaMK_trap; + } + + void Celldecker_2009FromCellMLBackwardEulerOpt::ComputeJacobian(double var_chaste_interface__environment__time, const double rCurrentGuess[35], double rJacobian[35][35]) + { + std::vector& rY = rGetStateVariables(); + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: mV; Initial value: -87.4947322902196 + double var_chaste_interface__INa_m_gate__m = rY[25]; + // Units: dimensionless; Initial value: 0.00101841101248412 + double var_chaste_interface__INa_h_gate__h = rY[26]; + // Units: dimensionless; Initial value: 0.991354143386887 + double var_chaste_interface__INa_j_gate__j = rY[27]; + // Units: dimensionless; Initial value: 0.99709036251243 + double var_chaste_interface__INaL_mL_gate__mL = rY[28]; + // Units: dimensionless; Initial value: 0.00101841101248412 + double var_chaste_interface__INaL_hL_gate__hL = rY[29]; + // Units: dimensionless; Initial value: 0.319611809402137 + double var_chaste_interface__IKr_xr_gate__xr = rY[30]; + // Units: dimensionless; Initial value: 4.06959064407486e-06 + double var_chaste_interface__Ito1_a_gate__a = rY[31]; + // Units: dimensionless; Initial value: 1.76776038804228e-05 + double var_chaste_interface__Ito1_i1f_gate__i1f = rY[32]; + // Units: dimensionless; Initial value: 0.997976503910799 + double var_chaste_interface__Ito1_i1s_gate__i1s = rY[33]; + // Units: dimensionless; Initial value: 0.947581184798815 + double var_chaste_interface__Ito2_i2f_gate__i2f = rY[34]; + // Units: dimensionless; Initial value: 0.996044894628276 + + // Lookup table indexing + const bool _oob_0 = Celldecker_2009FromCellMLBackwardEulerOpt_LookupTables::Instance()->CheckIndex0(var_chaste_interface__membrane__Vm); +// LCOV_EXCL_START + if (_oob_0) + EXCEPTION(DumpState("membrane_voltage outside lookup table range", rY , var_chaste_interface__environment__time)); +// LCOV_EXCL_STOP + const double* const _lt_0_row = Celldecker_2009FromCellMLBackwardEulerOpt_LookupTables::Instance()->IndexTable0(var_chaste_interface__membrane__Vm); + + double var_chaste_interface__CaMK_active__CaMK_trap = rCurrentGuess[0]; + double var_chaste_interface__Ca__Ca_JSR = rCurrentGuess[1]; + double var_chaste_interface__Ca__Ca_NSR = rCurrentGuess[2]; + double var_chaste_interface__Ca__Ca_i = rCurrentGuess[3]; + double var_chaste_interface__Ca__Ca_ss_CaL = rCurrentGuess[4]; + double var_chaste_interface__Ca__Ca_ss_sr = rCurrentGuess[5]; + double var_chaste_interface__Cl__Cl_i = rCurrentGuess[6]; + double var_chaste_interface__ICaL__C = rCurrentGuess[8]; + double var_chaste_interface__ICaL__CI = rCurrentGuess[9]; + double var_chaste_interface__ICaL__CI_star = rCurrentGuess[10]; + double var_chaste_interface__ICaL__C_star = rCurrentGuess[11]; + double var_chaste_interface__ICaL__O = rCurrentGuess[12]; + double var_chaste_interface__ICaL__OI = rCurrentGuess[13]; + double var_chaste_interface__ICaL__O_star = rCurrentGuess[14]; + double var_chaste_interface__IKs__C1 = rCurrentGuess[15]; + double var_chaste_interface__IKs__C10 = rCurrentGuess[16]; + double var_chaste_interface__IKs__C11 = rCurrentGuess[17]; + double var_chaste_interface__IKs__C12 = rCurrentGuess[18]; + double var_chaste_interface__IKs__C13 = rCurrentGuess[19]; + double var_chaste_interface__IKs__C14 = rCurrentGuess[20]; + double var_chaste_interface__IKs__C15 = rCurrentGuess[21]; + double var_chaste_interface__IKs__C2 = rCurrentGuess[22]; + double var_chaste_interface__IKs__C3 = rCurrentGuess[23]; + double var_chaste_interface__IKs__C4 = rCurrentGuess[24]; + double var_chaste_interface__IKs__C5 = rCurrentGuess[25]; + double var_chaste_interface__IKs__C6 = rCurrentGuess[26]; + double var_chaste_interface__IKs__C7 = rCurrentGuess[27]; + double var_chaste_interface__IKs__C8 = rCurrentGuess[28]; + double var_chaste_interface__IKs__C9 = rCurrentGuess[29]; + double var_chaste_interface__Irel__Irel = rCurrentGuess[31]; + double var_chaste_interface__K__K_i = rCurrentGuess[32]; + double var_chaste_interface__Na__Na_i = rCurrentGuess[33]; + double var_chaste_interface__Na__Na_ss_sr = rCurrentGuess[34]; + + const double var_x0 = 1 - var_chaste_interface__CaMK_active__CaMK_trap; + const double var_x1 = 1 + 0.0015 / var_chaste_interface__Ca__Ca_ss_sr; + const double var_x2 = 1 / var_x1; + const double var_x3 = 0.050000000000000003 * var_x2; + const double var_x4 = var_x0 * var_x3; + const double var_x5 = var_x4 + var_chaste_interface__CaMK_active__CaMK_trap; + const double var_x6 = -var_x3; + const double var_x7 = 1 + var_x6; + const double var_x8 = pow(var_chaste_interface__Ca__Ca_ss_sr, (-2)); + const double var_x9 = pow(var_x1, (-2)); + const double var_x10 = var_x0 * var_x8 * var_x9; + const double var_x11 = 0.80000000000000004 + var_chaste_interface__Ca__Ca_JSR; + const double var_x12 = pow(var_x11, (-2)); + const double var_x13 = 1 / (1 + 8 * var_x12); + const double var_x14 = 0.040000000000000001 * var_x13; + const double var_x15 = 0.14999999999999999 + var_x4 + var_chaste_interface__CaMK_active__CaMK_trap; + const double var_x16 = 1 / var_x15; + const double var_x17 = var_x16 * var_x7; + const double var_x18 = var_x5 / pow(var_x15, 2); + const double var_x19 = var_x18 * (-1 - var_x6); + const double var_x20 = var_x16 * var_x5; + const double var_x21 = 0.00092000000000000003 - 0.00017000000000000001 * var_x20 + var_chaste_interface__Ca__Ca_i; + const double var_x22 = 1 / var_x21; + const double var_x23 = var_x22 * mParameters[2]; + const double var_x24 = var_x23 * var_chaste_interface__Ca__Ca_i; + const double var_x25 = var_x24 * (0.75 * var_x17 + 0.75 * var_x19); + const double var_x26 = pow(var_x21, (-2)); + const double var_x27 = 1 + 0.75 * var_x20; + const double var_x28 = var_x26 * var_x27 * var_chaste_interface__Ca__Ca_i * mParameters[2]; + const double var_x29 = var_x28 * (0.00017000000000000001 * var_x17 + 0.00017000000000000001 * var_x19); + const double var_x30 = var_x10 * var_x18; + const double var_x31 = var_x24 * (-5.6250000000000005e-5 * var_x30 + 5.6250000000000005e-5 * var_x0 * var_x16 * var_x8 * var_x9); + const double var_x32 = var_x28 * (-1.2750000000000002e-8 * var_x30 + 1.2750000000000002e-8 * var_x0 * var_x16 * var_x8 * var_x9); + const double var_x33 = 0.0023800000000000002 + var_chaste_interface__Ca__Ca_i; + const double var_x34 = 0.00050000000000000001 + var_chaste_interface__Ca__Ca_i; + const double var_x35 = pow(var_x34, (-2)); + const double var_x36 = 1 + 0.00011900000000000002 / pow(var_x33, 2) + 3.5000000000000004e-5 * var_x35; + const double var_x37 = 1 / var_x36; + const double var_x38 = var_x37; + const double var_x39 = 0.0054277286135693209 * mParameters[0]; + const double var_x40 = 192970 - 7224.0024405006716 * var_chaste_interface__membrane__Vm; + const double var_x41 = 0.074871767015605231 * var_chaste_interface__membrane__Vm; + const double var_x42 = exp(var_x41); + const double var_x43 = var_x42; + const double var_x44 = (var_x41 >= -9.9999999999999995e-8) && (var_x41 <= 9.9999999999999995e-8); + const double var_x45 = 14448.004881001343 * var_chaste_interface__membrane__Vm / (-1 + var_x42); + const double var_x46 = var_x42 * var_x45; + const double var_x47 = 3.0851110000007915e-5 * mParameters[10] / var_x34; + const double var_x48 = 0.081415929203539822 * var_x23 * var_x27; + const double var_x49 = 1 + 1.5624999999999999e-8 / pow(var_chaste_interface__Ca__Ca_i, 2); + const double var_x50 = 1 / var_x49; + const double var_x51 = pow(var_chaste_interface__Na__Na_i, 3); + const double var_x52 = var_x51 * mParameters[3]; + const double var_x53 = pow(mParameters[5], 3); + const double var_x54 = var_x53 * var_chaste_interface__Ca__Ca_i; + const double var_x55 = var_x53 * (1 + 0.00053738391835633597 * var_x51); + const double var_x56 = (1 + 277.77777777777777 * var_chaste_interface__Ca__Ca_i) * mParameters[3]; + const double var_x57 = 1 / (var_x52 + var_x54 + 669921.875 * var_chaste_interface__Ca__Ca_i + 0.0035999999999999999 * var_x55 + 1.3 * var_x51 + 1860.8670000000004 * var_x56); + const double var_x58 = 4.9361776000012672e-5 * var_x57; + const double var_x59 = _lt_0_row[1]; + const double var_x60 = 1 / (1 + 0.32000000000000001 * var_x59); + const double var_x61 = var_x60 * mParameters[17]; + const double var_x62 = var_x53 * var_x59 * var_x61; + const double var_x63 = pow((1.9405247813411081e-6 * var_x51 + 1.4927113702623908e-6 * var_x52 + 1.4927113702623908e-6 * var_x54 + 0.0027777373294460648 * var_x56 + 5.3737609329446059e-9 * var_x55 + var_chaste_interface__Ca__Ca_i), (-2)); + const double var_x64 = _lt_0_row[0]; + const double var_x65 = -var_x54 * var_x59 + var_x51 * var_x64 * mParameters[3]; + const double var_x66 = -669921.875 - var_x53 - 516907.50000000012 * mParameters[3]; + const double var_x67 = pow(var_x49, (-2)); + const double var_x68 = pow(var_chaste_interface__Ca__Ca_i, (-3)); + const double var_x69 = -0.34100000000000003 * mParameters[3]; + const double var_x70 = (var_x69 + var_x43 * var_chaste_interface__Ca__Ca_i) * mParameters[7]; + const double var_x71 = 0.037435883507802616 * var_chaste_interface__membrane__Vm; + const double var_x72 = 192970 - 192970 * var_x71; + const double var_x73 = pow(var_chaste_interface__Na__Na_ss_sr, 3); + const double var_x74 = var_x73 * mParameters[3]; + const double var_x75 = var_x53 * var_chaste_interface__Ca__Ca_ss_sr; + const double var_x76 = var_x53 * (1 + 0.00053738391835633597 * var_x73); + const double var_x77 = (1 + 277.77777777777777 * var_chaste_interface__Ca__Ca_ss_sr) * mParameters[3]; + const double var_x78 = 1 / (var_x74 + var_x75 + 669921.875 * var_chaste_interface__Ca__Ca_ss_sr + 0.0035999999999999999 * var_x76 + 1.3 * var_x73 + 1860.8670000000004 * var_x77); + const double var_x79 = 1 + 1.5624999999999999e-8 * var_x8; + const double var_x80 = 1 / var_x79; + const double var_x81 = -var_x59 * var_x75 + var_x64 * var_x73 * mParameters[3]; + const double var_x82 = var_x61 * var_x80 * var_x81; + const double var_x83 = var_x78 * var_x82; + const double var_x84 = var_x50 * var_x61 * var_x65; + const double var_x85 = var_x62 * var_x78 * var_x80; + const double var_x86 = pow((1.9405247813411081e-6 * var_x73 + 1.4927113702623908e-6 * var_x74 + 1.4927113702623908e-6 * var_x75 + 0.0027777373294460648 * var_x77 + 5.3737609329446059e-9 * var_x76 + var_chaste_interface__Ca__Ca_ss_sr), (-2)); + const double var_x87 = pow(var_x79, (-2)); + const double var_x88 = pow(var_chaste_interface__Ca__Ca_ss_sr, (-3)); + const double var_x89 = pow(var_chaste_interface__Na__Na_i, 2); + const double var_x90 = 3 * mParameters[3]; + const double var_x91 = 5.8037463182484285e-6 * var_x53; + const double var_x92 = -3.9000000000000004 * var_x89 - var_x89 * var_x90 - var_x89 * var_x91; + const double var_x93 = var_x63 * var_x84; + const double var_x94 = var_x57 * var_x61; + const double var_x95 = var_x50 * var_x94; + const double var_x96 = var_x64 * mParameters[3]; + const double var_x97 = var_x89 * var_x96; + const double var_x98 = pow(var_chaste_interface__Na__Na_ss_sr, 2); + const double var_x99 = -3.9000000000000004 * var_x98 - var_x90 * var_x98 - var_x91 * var_x98; + const double var_x100 = var_x82 * var_x86; + const double var_x101 = var_x61 * var_x78; + const double var_x102 = var_x101 * var_x80 * var_x96 * var_x98; + const double var_x103 = 0.0086999999999999994 + var_chaste_interface__Ca__Ca_ss_CaL; + const double var_x104 = 0.00087000000000000001 + var_chaste_interface__Ca__Ca_ss_CaL; + const double var_x105 = 1 + 0.0097788000000000007 / pow(var_x103, 2) + 4.0890000000000003e-5 / pow(var_x104, 2); + const double var_x106 = 1 / var_x105; + const double var_x107 = var_chaste_interface__ICaL__O + var_chaste_interface__ICaL__O_star; + const double var_x108 = var_x40 * mParameters[6]; + const double var_x109 = ((var_x44) ? (var_x107 * var_x108 * var_x43) : (var_x107 * var_x46 * mParameters[6])); + const double var_x110 = var_x69 + var_x43 * var_chaste_interface__Ca__Ca_ss_CaL; + const double var_x111 = var_x110 * mParameters[6]; + const double var_x112 = var_x107 * var_x111; + const double var_x113 = ((var_x44) ? (var_x112 * var_x72) : (var_x112 * var_x45)); + const double var_x114 = ((var_x44) ? (var_x108 * var_x110) : (var_x111 * var_x45)); + const double var_x115 = -0.010458526290002684 * var_x106 * var_x114; + const double var_x116 = 0.0086999999999999994 + var_chaste_interface__Ca__Ca_ss_sr; + const double var_x117 = 0.00087000000000000001 + var_chaste_interface__Ca__Ca_ss_sr; + const double var_x118 = 1 + 0.0097788000000000007 / pow(var_x116, 2) + 4.0890000000000003e-5 / pow(var_x117, 2); + const double var_x119 = 1 / var_x118; + const double var_x120 = var_x101 * var_x81 * var_x87 * var_x88; + const double var_x121 = 9.3214219101444593e-16 * var_x100; + const double var_x122 = var_x119; + const double var_x123 = 1 / var_chaste_interface__Cl__Cl_i; + const double var_x124 = log(100 * var_x123); + const double var_x125 = 1 / var_chaste_interface__K__K_i; + const double var_x126 = log(var_x125 * mParameters[4]); + const double var_x127 = 26.712338705498265 * var_x126; + const double var_x128 = var_x127 + 26.712338705498265 * var_x124; + const double var_x129 = 0.00047280839508731927 / (87.825100000000006 + var_x128); + const double var_x130 = var_x123 * var_x129; + const double var_x131 = pow((1 + 0.30415380916729118 * var_x124 + 0.30415380916729118 * var_x126), (-2)); + const double var_x132 = 1 / var_chaste_interface__Na__Na_i; + const double var_x133 = var_x124 + log(var_x132 * mParameters[5]); + const double var_x134 = pow(var_x133, 4); + const double var_x135 = 50.122574928945262 * pow(var_x133, 3) / (59494197.640692554 + 509152.231225166 * var_x134); + const double var_x136 = pow((1 + 0.0085580149227345564 * var_x134), (-2)); + const double var_x137 = pow(var_x133, 7); + const double var_x138 = var_x123 * var_x135 - 7.2099425022651882e-9 * var_x123 * var_x136 * var_x137; + const double var_x139 = var_x125 * var_x129; + const double var_x140 = 6.1298221377044294e-8 * var_x128 * var_x131; + const double var_x141 = var_x132 * var_x135 - 7.2099425022651882e-9 * var_x132 * var_x136 * var_x137; + const double var_x142 = pow(var_chaste_interface__Irel__Irel, 2); + const double var_x143 = 1 / (1 + 6.2499999999999991 * var_x142); + const double var_x144 = mParameters[19] * var_chaste_interface__Ito2_i2f_gate__i2f; + const double var_x145 = var_x144 * (1 - 0.018717941753901308 * var_chaste_interface__membrane__Vm); + const double var_x146 = (var_x71 >= -9.9999999999999995e-8) && (var_x71 <= 9.9999999999999995e-8); + const double var_x147 = exp(var_x71); + const double var_x148 = var_chaste_interface__membrane__Vm / (-1 + var_x147); + const double var_x149 = 3612.0012202503358 * var_x148; + const double var_x150 = (-100 * var_x147 + var_chaste_interface__Cl__Cl_i) * var_chaste_interface__Irel__Irel / pow((0.16000000000000003 + var_x142), 2); + const double var_x151 = 1 + 8.1000000000000005e-11 / pow(var_chaste_interface__Ca__Ca_ss_CaL, 4); + const double var_x152 = 1 / (pow(var_x151, 2) * pow(var_chaste_interface__Ca__Ca_ss_CaL, 5)); + const double var_x153 = 9.7200000000000016e-10 * var_x152; + const double var_x154 = var_x153 * var_chaste_interface__ICaL__C; + const double var_x155 = 1 / (_lt_0_row[12]); + const double var_x156 = _lt_0_row[11]; + const double var_x157 = var_x155 * var_x156; + const double var_x158 = 1 / (_lt_0_row[40]); + const double var_x159 = 0.80000000000000004 * var_x158; + const double var_x160 = 0.80000000000000004 - var_x159; + const double var_x161 = _lt_0_row[17]; + const double var_x162 = 1 / (_lt_0_row[16]); + const double var_x163 = var_x161 + 0.032730010146303147 * var_x162; + const double var_x164 = var_x160 * var_x163; + const double var_x165 = 1 / var_x151; + const double var_x166 = 3 * var_x165; + const double var_x167 = var_x164 + var_x166; + const double var_x168 = 0.20000000000000001 + var_x159; + const double var_x169 = var_x163 * var_x168; + const double var_x170 = var_x155 * (1 - var_x156); + const double var_x171 = 0.99990000999900008 * var_x158; + const double var_x172 = 0.99990000999900008 - var_x171; + const double var_x173 = 9.9990000999900015e-5 + var_x171; + const double var_x174 = var_x168 * var_x172 / (var_x160 * var_x173); + const double var_x175 = 9.7200000000000002e-16 * var_x152 * var_x174; + const double var_x176 = var_x175 * var_chaste_interface__ICaL__CI; + const double var_x177 = 3.0000000000000001e-6 * var_x165 * var_x174; + const double var_x178 = var_x169 + var_x177; + const double var_x179 = 9.0720000000000001e-12 * var_x152 * var_x162 / pow((1 - 0.69999999999999996 * var_x165), 2); + const double var_x180 = var_x179 * var_chaste_interface__ICaL__C_star; + const double var_x181 = var_x179 * var_chaste_interface__ICaL__CI_star; + const double var_x182 = -var_x170; + const double var_x183 = var_x161 + var_x162 / (25 - 17.5 * var_x165); + const double var_x184 = var_x173 * var_x183; + const double var_x185 = 9.9999999999999995e-7 + var_x170; + const double var_x186 = var_x172 * var_x183; + const double var_x187 = -var_x172; + const double var_x188 = 1 + var_x186; + const double var_x189 = var_x153 * var_chaste_interface__ICaL__O; + const double var_x190 = -var_x157; + const double var_x191 = -var_x184; + const double var_x192 = _lt_0_row[41]; + const double var_x193 = 0.059458391923439997 * var_x192; + const double var_x194 = _lt_0_row[42]; + const double var_x195 = 0.083986312199829993 * var_x194; + const double var_x196 = _lt_0_row[43]; + const double var_x197 = 0.0062346537747999999 * var_x196; + const double var_x198 = 0.029729195961719999 * var_x192; + const double var_x199 = _lt_0_row[44]; + const double var_x200 = 0.01460066118316 * var_x199; + const double var_x201 = 0.014864597980859999 * var_x192; + const double var_x202 = var_x195 + var_x200; + const double var_x203 = 0.16797262439965999 * var_x194; + const double var_x204 = 0.009351980662199999 * var_x196; + const double var_x205 = 0.02920132236632 * var_x199; + const double var_x206 = var_x203 + var_x205; + const double var_x207 = 0.043801983549479999 * var_x199; + const double var_x208 = 0.0124693075496 * var_x196; + const double var_x209 = _lt_0_row[36]; + const double var_x210 = 0.04459379394258 * var_x192; + const double var_x211 = 0.0031173268874 * var_x196; + const double var_x212 = 0.25195893659948998 * var_x194; + const double var_x213 = var_x207 + var_x212; + const double var_x214 = 0.33594524879931997 * var_x194; + const double var_x215 = 0.058402644732640001 * var_x199; + const double var_x216 = _lt_0_row[45]; + const double var_x217 = -var_x216; + const double var_x218 = 1 / var_x5; + const double var_x219 = pow(var_x218, 10); + const double var_x220 = 1 + 2.9619676669542428e-6 * var_x219; + const double var_x221 = var_x218 * var_x219 / pow(var_x220, 2); + const double var_x222 = -var_x221 * var_x7; + const double var_x223 = 1 / var_chaste_interface__Ca__Ca_JSR; + const double var_x224 = 1 + 0.0123 * var_x223; + const double var_x225 = 1 / var_x220; + const double var_x226 = 4.75 + 4.75 * var_x225; + const double var_x227 = pow(var_x223, 8); + const double var_x228 = 1 + var_x227; + const double var_x229 = mParameters[1] / var_x228; + const double var_x230 = var_x113 * var_x229; + const double var_x231 = -var_chaste_interface__Irel__Irel - var_x226 * var_x230; + const double var_x232 = var_x224 * var_x231 / pow((1 + var_x225), 2); + const double var_x233 = 1 / var_x226; + const double var_x234 = var_x224 * var_x233; + const double var_x235 = var_x230 * var_x234; + const double var_x236 = var_x224 * var_x229; + const double var_x237 = var_x10 * var_x221; + const double var_x238 = -var_x114 * var_x236; + const double var_x239 = 1 / var_chaste_interface__Ca__Ca_i; + const double var_x240 = pow(var_x239, 1.3999999999999999); + const double var_x241 = 1 + 6.4818210260626455e-7 * var_x240; + const double var_x242 = 1 / (0.018329999999999999 * var_chaste_interface__Na__Na_i + var_chaste_interface__K__K_i); + const double var_x243 = -26.712338705498265 * log(var_x242 * (0.018329999999999999 * mParameters[5] + mParameters[4])) + var_chaste_interface__membrane__Vm; + const double var_x244 = 1 - var_chaste_interface__IKs__C1 - var_chaste_interface__IKs__C10 - var_chaste_interface__IKs__C11 - var_chaste_interface__IKs__C12 - var_chaste_interface__IKs__C13 - var_chaste_interface__IKs__C14 - var_chaste_interface__IKs__C15 - var_chaste_interface__IKs__C2 - var_chaste_interface__IKs__C3 - var_chaste_interface__IKs__C4 - var_chaste_interface__IKs__C5 - var_chaste_interface__IKs__C6 - var_chaste_interface__IKs__C7 - var_chaste_interface__IKs__C8 - var_chaste_interface__IKs__C9; + const double var_x245 = -6.1702220000015831e-5 - 3.7021332000009499e-5 / var_x241; + const double var_x246 = var_x245 * mParameters[16]; + const double var_x247 = -var_x243 * var_x246; + const double var_x248 = 0.0016482105995215921 * var_x125; + const double var_x249 = sqrt(mParameters[4]); + const double var_x250 = var_x125 * var_x249; + const double var_x251 = exp(-14.1227775 + 0.23849999999999999 * var_chaste_interface__membrane__Vm - 6.3708927812613361 * var_x126); + const double var_x252 = 1 + var_x251; + const double var_x253 = 1 / var_x252; + const double var_x254 = exp(-2.4444678999999998 + 13.738155796237757 * var_x126 - 0.51429999999999998 * var_chaste_interface__membrane__Vm); + const double var_x255 = 1 + var_x254; + const double var_x256 = 1 / var_x255; + const double var_x257 = exp(0.43983232 + 0.080320000000000003 * var_chaste_interface__membrane__Vm - 2.1455350448256207 * var_x126); + const double var_x258 = exp(-36.698642499999998 + 0.061749999999999999 * var_chaste_interface__membrane__Vm - 1.6494869150645177 * var_x126); + const double var_x259 = var_x258 + 0.49124000000000001 * var_x257; + const double var_x260 = var_x256 * var_x259; + const double var_x261 = 1 / (var_x260 + 1.02 * var_x253); + const double var_x262 = var_x253 * mParameters[12]; + const double var_x263 = pow(var_x252, (-2)); + const double var_x264 = -var_x127 + var_chaste_interface__membrane__Vm; + const double var_x265 = 1 + 0.38461538461538458 * var_chaste_interface__Na__Na_i; + const double var_x266 = 1 / (1 + exp(-3.444101282717841 - var_x71)); + const double var_x267 = 1 / (1.5 + mParameters[4]); + const double var_x268 = var_x266 * var_x267 * mParameters[18] * mParameters[4]; + const double var_x269 = var_x268 * var_x89 / pow(var_x265, 3); + const double var_x270 = pow(var_x265, (-4)); + const double var_x271 = 3.299618375272375e-16 * var_x93; + const double var_x272 = 8.2490459381809375e-17 * var_x100; + const double var_x273 = var_x147 * mParameters[9]; + const double var_x274 = 0.0016482105995215921 * var_x132; + const double var_x275 = 2.796426573043338e-15 * var_x100; + + + rJacobian[0][0] = 1.0 - (mDt * (-0.00068000000000000005 - 0.0025000000000000005 * var_x2 * var_x5 + 0.0025000000000000005 * var_x0 * var_x2 * var_x7)); + rJacobian[0][1] = 0.0; + rJacobian[0][2] = 0.0; + rJacobian[0][3] = 0.0; + rJacobian[0][4] = 0.0; + rJacobian[0][5] = -(mDt * (3.7500000000000005e-6 * var_x10 * var_x5 + 1.8750000000000003e-7 * var_x8 * pow(var_x0, 2) / pow(var_x1, 3))); + rJacobian[0][6] = 0.0; + rJacobian[0][7] = 0.0; + rJacobian[0][8] = 0.0; + rJacobian[0][9] = 0.0; + rJacobian[0][10] = 0.0; + rJacobian[0][11] = 0.0; + rJacobian[0][12] = 0.0; + rJacobian[0][13] = 0.0; + rJacobian[0][14] = 0.0; + rJacobian[0][15] = 0.0; + rJacobian[0][16] = 0.0; + rJacobian[0][17] = 0.0; + rJacobian[0][18] = 0.0; + rJacobian[0][19] = 0.0; + rJacobian[0][20] = 0.0; + rJacobian[0][21] = 0.0; + rJacobian[0][22] = 0.0; + rJacobian[0][23] = 0.0; + rJacobian[0][24] = 0.0; + rJacobian[0][25] = 0.0; + rJacobian[0][26] = 0.0; + rJacobian[0][27] = 0.0; + rJacobian[0][28] = 0.0; + rJacobian[0][29] = 0.0; + rJacobian[0][30] = 0.0; + rJacobian[0][31] = 0.0; + rJacobian[0][32] = 0.0; + rJacobian[0][33] = 0.0; + rJacobian[0][34] = 0.0; + rJacobian[1][0] = 0.0; + rJacobian[1][1] = 1.0 - (mDt * (-var_x14 + 0.25 * (-var_chaste_interface__Irel__Irel + 0.040000000000000001 * var_chaste_interface__Ca__Ca_NSR - 0.040000000000000001 * var_chaste_interface__Ca__Ca_JSR) / (pow(var_x11, 3) * pow((0.125 + var_x12), 2)))); + rJacobian[1][2] = -(mDt * (var_x14)); + rJacobian[1][3] = 0.0; + rJacobian[1][4] = 0.0; + rJacobian[1][5] = 0.0; + rJacobian[1][6] = 0.0; + rJacobian[1][7] = 0.0; + rJacobian[1][8] = 0.0; + rJacobian[1][9] = 0.0; + rJacobian[1][10] = 0.0; + rJacobian[1][11] = 0.0; + rJacobian[1][12] = 0.0; + rJacobian[1][13] = 0.0; + rJacobian[1][14] = 0.0; + rJacobian[1][15] = 0.0; + rJacobian[1][16] = 0.0; + rJacobian[1][17] = 0.0; + rJacobian[1][18] = 0.0; + rJacobian[1][19] = 0.0; + rJacobian[1][20] = 0.0; + rJacobian[1][21] = 0.0; + rJacobian[1][22] = 0.0; + rJacobian[1][23] = 0.0; + rJacobian[1][24] = 0.0; + rJacobian[1][25] = 0.0; + rJacobian[1][26] = 0.0; + rJacobian[1][27] = 0.0; + rJacobian[1][28] = 0.0; + rJacobian[1][29] = 0.0; + rJacobian[1][30] = 0.0; + rJacobian[1][31] = -(mDt * (-var_x13)); + rJacobian[1][32] = 0.0; + rJacobian[1][33] = 0.0; + rJacobian[1][34] = 0.0; + rJacobian[2][0] = -(mDt * (var_x25 + var_x29)); + rJacobian[2][1] = -(mDt * (0.0034782608695652171)); + rJacobian[2][2] = 1.0 - (mDt * (-0.0034782608695652171 - 0.066666666666666666 * mParameters[0])); + rJacobian[2][3] = -(mDt * (-var_x28 + var_x22 * var_x27 * mParameters[2])); + rJacobian[2][4] = 0.0; + rJacobian[2][5] = -(mDt * (var_x31 + var_x32)); + rJacobian[2][6] = 0.0; + rJacobian[2][7] = 0.0; + rJacobian[2][8] = 0.0; + rJacobian[2][9] = 0.0; + rJacobian[2][10] = 0.0; + rJacobian[2][11] = 0.0; + rJacobian[2][12] = 0.0; + rJacobian[2][13] = 0.0; + rJacobian[2][14] = 0.0; + rJacobian[2][15] = 0.0; + rJacobian[2][16] = 0.0; + rJacobian[2][17] = 0.0; + rJacobian[2][18] = 0.0; + rJacobian[2][19] = 0.0; + rJacobian[2][20] = 0.0; + rJacobian[2][21] = 0.0; + rJacobian[2][22] = 0.0; + rJacobian[2][23] = 0.0; + rJacobian[2][24] = 0.0; + rJacobian[2][25] = 0.0; + rJacobian[2][26] = 0.0; + rJacobian[2][27] = 0.0; + rJacobian[2][28] = 0.0; + rJacobian[2][29] = 0.0; + rJacobian[2][30] = 0.0; + rJacobian[2][31] = 0.0; + rJacobian[2][32] = 0.0; + rJacobian[2][33] = 0.0; + rJacobian[2][34] = 0.0; + rJacobian[3][0] = -(mDt * (var_x38 * (-0.081415929203539822 * var_x25 - 0.081415929203539822 * var_x29))); + rJacobian[3][1] = 0.0; + rJacobian[3][2] = -(mDt * (var_x37 * var_x39)); + rJacobian[3][3] = 1.0 - (mDt * (var_x38 * (-0.14749262536873156 - var_x47 - var_x48 - 3.0851110000007915e-5 * ((var_x44) ? (var_x40 * var_x43 * mParameters[7]) : (var_x46 * mParameters[7])) - var_x50 * var_x58 * var_x62 + 3.0851110000007915e-5 * var_x35 * var_chaste_interface__Ca__Ca_i * mParameters[10] + 0.081415929203539822 * var_x26 * var_x27 * var_chaste_interface__Ca__Ca_i * mParameters[2] + 1.0998727917574584e-16 * var_x50 * var_x60 * var_x63 * var_x65 * var_x66 * mParameters[17] + 1.5425555000003961e-12 * var_x57 * var_x60 * var_x65 * var_x67 * var_x68 * mParameters[17]) + (0.00023800000000000004 / pow(var_x33, 3) + 7.0000000000000007e-5 / pow(var_x34, 3)) * (0.14749262536873156 * var_chaste_interface__Ca__Ca_ss_sr + 1.2340444000003168e-5 * var_x83 - 0.14749262536873156 * var_chaste_interface__Ca__Ca_i - 3.0851110000007915e-5 * ((var_x44) ? (var_x70 * var_x72) : (var_x45 * var_x70)) + var_x39 * var_chaste_interface__Ca__Ca_NSR + var_x58 * var_x84 - var_x47 * var_chaste_interface__Ca__Ca_i - var_x48 * var_chaste_interface__Ca__Ca_i) / pow(var_x36, 2))); + rJacobian[3][4] = 0.0; + rJacobian[3][5] = -(mDt * (var_x38 * (0.14749262536873156 - 1.2340444000003168e-5 * var_x85 - 0.081415929203539822 * var_x31 - 0.081415929203539822 * var_x32 + 2.7496819793936459e-17 * var_x60 * var_x66 * var_x80 * var_x81 * var_x86 * mParameters[17] + 3.8563887500009902e-13 * var_x60 * var_x78 * var_x81 * var_x87 * var_x88 * mParameters[17]))); + rJacobian[3][6] = 0.0; + rJacobian[3][7] = 0.0; + rJacobian[3][8] = 0.0; + rJacobian[3][9] = 0.0; + rJacobian[3][10] = 0.0; + rJacobian[3][11] = 0.0; + rJacobian[3][12] = 0.0; + rJacobian[3][13] = 0.0; + rJacobian[3][14] = 0.0; + rJacobian[3][15] = 0.0; + rJacobian[3][16] = 0.0; + rJacobian[3][17] = 0.0; + rJacobian[3][18] = 0.0; + rJacobian[3][19] = 0.0; + rJacobian[3][20] = 0.0; + rJacobian[3][21] = 0.0; + rJacobian[3][22] = 0.0; + rJacobian[3][23] = 0.0; + rJacobian[3][24] = 0.0; + rJacobian[3][25] = 0.0; + rJacobian[3][26] = 0.0; + rJacobian[3][27] = 0.0; + rJacobian[3][28] = 0.0; + rJacobian[3][29] = 0.0; + rJacobian[3][30] = 0.0; + rJacobian[3][31] = 0.0; + rJacobian[3][32] = 0.0; + rJacobian[3][33] = -(mDt * (var_x38 * (1.0998727917574584e-16 * var_x92 * var_x93 + 0.00014808532800003802 * var_x95 * var_x97))); + rJacobian[3][34] = -(mDt * (var_x38 * (3.7021332000009505e-5 * var_x102 + 2.7496819793936459e-17 * var_x100 * var_x99))); + rJacobian[4][0] = 0.0; + rJacobian[4][1] = 0.0; + rJacobian[4][2] = 0.0; + rJacobian[4][3] = 0.0; + rJacobian[4][4] = 1.0 - (mDt * (-var_x106 * (5 + 0.010458526290002684 * var_x109) - (0.019557600000000001 / pow(var_x103, 3) + 8.1780000000000006e-5 / pow(var_x104, 3)) * (5 * var_chaste_interface__Ca__Ca_ss_CaL + 0.010458526290002684 * var_x113 - 5 * var_chaste_interface__Ca__Ca_ss_sr) / pow(var_x105, 2))); + rJacobian[4][5] = -(mDt * (5 * var_x106)); + rJacobian[4][6] = 0.0; + rJacobian[4][7] = 0.0; + rJacobian[4][8] = 0.0; + rJacobian[4][9] = 0.0; + rJacobian[4][10] = 0.0; + rJacobian[4][11] = 0.0; + rJacobian[4][12] = -(mDt * (var_x115)); + rJacobian[4][13] = 0.0; + rJacobian[4][14] = -(mDt * (var_x115)); + rJacobian[4][15] = 0.0; + rJacobian[4][16] = 0.0; + rJacobian[4][17] = 0.0; + rJacobian[4][18] = 0.0; + rJacobian[4][19] = 0.0; + rJacobian[4][20] = 0.0; + rJacobian[4][21] = 0.0; + rJacobian[4][22] = 0.0; + rJacobian[4][23] = 0.0; + rJacobian[4][24] = 0.0; + rJacobian[4][25] = 0.0; + rJacobian[4][26] = 0.0; + rJacobian[4][27] = 0.0; + rJacobian[4][28] = 0.0; + rJacobian[4][29] = 0.0; + rJacobian[4][30] = 0.0; + rJacobian[4][31] = 0.0; + rJacobian[4][32] = 0.0; + rJacobian[4][33] = 0.0; + rJacobian[4][34] = 0.0; + rJacobian[5][0] = 0.0; + rJacobian[5][1] = 0.0; + rJacobian[5][2] = 0.0; + rJacobian[5][3] = -(mDt * (5 * var_x119)); + rJacobian[5][4] = -(mDt * (0.5 * var_x119)); + rJacobian[5][5] = 1.0 - (mDt * (-var_x122 * (5.5 + 0.0004183410516001074 * var_x85 - 1.3073157862503357e-11 * var_x120 - var_x121 * var_x66) - (0.019557600000000001 / pow(var_x116, 3) + 8.1780000000000006e-5 / pow(var_x117, 3)) * (5.5 * var_chaste_interface__Ca__Ca_ss_sr - 0.5 * var_chaste_interface__Ca__Ca_ss_CaL - 0.23999999999999996 * var_chaste_interface__Irel__Irel - 5 * var_chaste_interface__Ca__Ca_i - 0.0004183410516001074 * var_x83) / pow(var_x118, 2))); + rJacobian[5][6] = 0.0; + rJacobian[5][7] = 0.0; + rJacobian[5][8] = 0.0; + rJacobian[5][9] = 0.0; + rJacobian[5][10] = 0.0; + rJacobian[5][11] = 0.0; + rJacobian[5][12] = 0.0; + rJacobian[5][13] = 0.0; + rJacobian[5][14] = 0.0; + rJacobian[5][15] = 0.0; + rJacobian[5][16] = 0.0; + rJacobian[5][17] = 0.0; + rJacobian[5][18] = 0.0; + rJacobian[5][19] = 0.0; + rJacobian[5][20] = 0.0; + rJacobian[5][21] = 0.0; + rJacobian[5][22] = 0.0; + rJacobian[5][23] = 0.0; + rJacobian[5][24] = 0.0; + rJacobian[5][25] = 0.0; + rJacobian[5][26] = 0.0; + rJacobian[5][27] = 0.0; + rJacobian[5][28] = 0.0; + rJacobian[5][29] = 0.0; + rJacobian[5][30] = 0.0; + rJacobian[5][31] = -(mDt * (0.23999999999999996 * var_x119)); + rJacobian[5][32] = 0.0; + rJacobian[5][33] = 0.0; + rJacobian[5][34] = -(mDt * (-var_x122 * (-0.0012550231548003222 * var_x102 - var_x121 * var_x99))); + rJacobian[6][0] = 0.0; + rJacobian[6][1] = 0.0; + rJacobian[6][2] = 0.0; + rJacobian[6][3] = 0.0; + rJacobian[6][4] = 0.0; + rJacobian[6][5] = 0.0; + rJacobian[6][6] = 1.0 - (mDt * (-0.14749262536873156 - var_x130 - var_x138 - 0.0016482105995215921 * var_x123 * mParameters[8] + 6.1298221377044294e-8 * var_x123 * var_x128 * var_x131)); + rJacobian[6][7] = -(mDt * (0.14749262536873156)); + rJacobian[6][8] = 0.0; + rJacobian[6][9] = 0.0; + rJacobian[6][10] = 0.0; + rJacobian[6][11] = 0.0; + rJacobian[6][12] = 0.0; + rJacobian[6][13] = 0.0; + rJacobian[6][14] = 0.0; + rJacobian[6][15] = 0.0; + rJacobian[6][16] = 0.0; + rJacobian[6][17] = 0.0; + rJacobian[6][18] = 0.0; + rJacobian[6][19] = 0.0; + rJacobian[6][20] = 0.0; + rJacobian[6][21] = 0.0; + rJacobian[6][22] = 0.0; + rJacobian[6][23] = 0.0; + rJacobian[6][24] = 0.0; + rJacobian[6][25] = 0.0; + rJacobian[6][26] = 0.0; + rJacobian[6][27] = 0.0; + rJacobian[6][28] = 0.0; + rJacobian[6][29] = 0.0; + rJacobian[6][30] = 0.0; + rJacobian[6][31] = 0.0; + rJacobian[6][32] = -(mDt * (-var_x139 + var_x125 * var_x140)); + rJacobian[6][33] = -(mDt * (-var_x141)); + rJacobian[6][34] = 0.0; + rJacobian[7][0] = 0.0; + rJacobian[7][1] = 0.0; + rJacobian[7][2] = 0.0; + rJacobian[7][3] = 0.0; + rJacobian[7][4] = 0.0; + rJacobian[7][5] = 0.0; + rJacobian[7][6] = -(mDt * (5 + 0.0020917052580005369 * ((var_x146) ? (var_x145 * (-96485 + 96485 * var_x143)) : (-var_x144 * var_x149 * (1 - var_x143))))); + rJacobian[7][7] = 1.0 - (mDt * (-5)); + rJacobian[7][8] = 0.0; + rJacobian[7][9] = 0.0; + rJacobian[7][10] = 0.0; + rJacobian[7][11] = 0.0; + rJacobian[7][12] = 0.0; + rJacobian[7][13] = 0.0; + rJacobian[7][14] = 0.0; + rJacobian[7][15] = 0.0; + rJacobian[7][16] = 0.0; + rJacobian[7][17] = 0.0; + rJacobian[7][18] = 0.0; + rJacobian[7][19] = 0.0; + rJacobian[7][20] = 0.0; + rJacobian[7][21] = 0.0; + rJacobian[7][22] = 0.0; + rJacobian[7][23] = 0.0; + rJacobian[7][24] = 0.0; + rJacobian[7][25] = 0.0; + rJacobian[7][26] = 0.0; + rJacobian[7][27] = 0.0; + rJacobian[7][28] = 0.0; + rJacobian[7][29] = 0.0; + rJacobian[7][30] = 0.0; + rJacobian[7][31] = -(mDt * (0.0020917052580005369 * ((var_x146) ? (-30875.200000000004 * var_x145 * var_x150) : (-1155.8403904801075 * var_x144 * var_x148 * var_x150)))); + rJacobian[7][32] = 0.0; + rJacobian[7][33] = 0.0; + rJacobian[7][34] = 0.0; + rJacobian[8][0] = 0.0; + rJacobian[8][1] = 0.0; + rJacobian[8][2] = 0.0; + rJacobian[8][3] = 0.0; + rJacobian[8][4] = -(mDt * (-var_x154)); + rJacobian[8][5] = 0.0; + rJacobian[8][6] = 0.0; + rJacobian[8][7] = 0.0; + rJacobian[8][8] = 1.0 - (mDt * (-var_x157 - var_x167)); + rJacobian[8][9] = -(mDt * (var_x169)); + rJacobian[8][10] = 0.0; + rJacobian[8][11] = -(mDt * (1)); + rJacobian[8][12] = -(mDt * (var_x170)); + rJacobian[8][13] = 0.0; + rJacobian[8][14] = 0.0; + rJacobian[8][15] = 0.0; + rJacobian[8][16] = 0.0; + rJacobian[8][17] = 0.0; + rJacobian[8][18] = 0.0; + rJacobian[8][19] = 0.0; + rJacobian[8][20] = 0.0; + rJacobian[8][21] = 0.0; + rJacobian[8][22] = 0.0; + rJacobian[8][23] = 0.0; + rJacobian[8][24] = 0.0; + rJacobian[8][25] = 0.0; + rJacobian[8][26] = 0.0; + rJacobian[8][27] = 0.0; + rJacobian[8][28] = 0.0; + rJacobian[8][29] = 0.0; + rJacobian[8][30] = 0.0; + rJacobian[8][31] = 0.0; + rJacobian[8][32] = 0.0; + rJacobian[8][33] = 0.0; + rJacobian[8][34] = 0.0; + rJacobian[9][0] = 0.0; + rJacobian[9][1] = 0.0; + rJacobian[9][2] = 0.0; + rJacobian[9][3] = 0.0; + rJacobian[9][4] = -(mDt * (-var_x176)); + rJacobian[9][5] = 0.0; + rJacobian[9][6] = 0.0; + rJacobian[9][7] = 0.0; + rJacobian[9][8] = -(mDt * (var_x164)); + rJacobian[9][9] = 1.0 - (mDt * (-var_x157 - var_x178)); + rJacobian[9][10] = -(mDt * (9.9999999999999995e-7)); + rJacobian[9][11] = 0.0; + rJacobian[9][12] = 0.0; + rJacobian[9][13] = -(mDt * (var_x170)); + rJacobian[9][14] = 0.0; + rJacobian[9][15] = 0.0; + rJacobian[9][16] = 0.0; + rJacobian[9][17] = 0.0; + rJacobian[9][18] = 0.0; + rJacobian[9][19] = 0.0; + rJacobian[9][20] = 0.0; + rJacobian[9][21] = 0.0; + rJacobian[9][22] = 0.0; + rJacobian[9][23] = 0.0; + rJacobian[9][24] = 0.0; + rJacobian[9][25] = 0.0; + rJacobian[9][26] = 0.0; + rJacobian[9][27] = 0.0; + rJacobian[9][28] = 0.0; + rJacobian[9][29] = 0.0; + rJacobian[9][30] = 0.0; + rJacobian[9][31] = 0.0; + rJacobian[9][32] = 0.0; + rJacobian[9][33] = 0.0; + rJacobian[9][34] = 0.0; + rJacobian[10][0] = 0.0; + rJacobian[10][1] = 0.0; + rJacobian[10][2] = 0.0; + rJacobian[10][3] = 0.0; + rJacobian[10][4] = -(mDt * (var_x176 + var_x172 * var_x180 - var_x173 * var_x181)); + rJacobian[10][5] = 0.0; + rJacobian[10][6] = 0.0; + rJacobian[10][7] = 0.0; + rJacobian[10][8] = -(mDt * (var_x182)); + rJacobian[10][9] = -(mDt * (var_x177 - var_x170)); + rJacobian[10][10] = 1.0 - (mDt * (-var_x157 - var_x184 - var_x185)); + rJacobian[10][11] = -(mDt * (var_x182 + var_x186)); + rJacobian[10][12] = -(mDt * (var_x182)); + rJacobian[10][13] = -(mDt * (var_x182)); + rJacobian[10][14] = -(mDt * (var_x182)); + rJacobian[10][15] = 0.0; + rJacobian[10][16] = 0.0; + rJacobian[10][17] = 0.0; + rJacobian[10][18] = 0.0; + rJacobian[10][19] = 0.0; + rJacobian[10][20] = 0.0; + rJacobian[10][21] = 0.0; + rJacobian[10][22] = 0.0; + rJacobian[10][23] = 0.0; + rJacobian[10][24] = 0.0; + rJacobian[10][25] = 0.0; + rJacobian[10][26] = 0.0; + rJacobian[10][27] = 0.0; + rJacobian[10][28] = 0.0; + rJacobian[10][29] = 0.0; + rJacobian[10][30] = 0.0; + rJacobian[10][31] = 0.0; + rJacobian[10][32] = 0.0; + rJacobian[10][33] = 0.0; + rJacobian[10][34] = 0.0; + rJacobian[11][0] = 0.0; + rJacobian[11][1] = 0.0; + rJacobian[11][2] = 0.0; + rJacobian[11][3] = 0.0; + rJacobian[11][4] = -(mDt * (var_x154 + var_x173 * var_x181 + var_x180 * var_x187)); + rJacobian[11][5] = 0.0; + rJacobian[11][6] = 0.0; + rJacobian[11][7] = 0.0; + rJacobian[11][8] = -(mDt * (var_x166)); + rJacobian[11][9] = 0.0; + rJacobian[11][10] = -(mDt * (var_x184)); + rJacobian[11][11] = 1.0 - (mDt * (-var_x157 - var_x188)); + rJacobian[11][12] = 0.0; + rJacobian[11][13] = 0.0; + rJacobian[11][14] = -(mDt * (var_x170)); + rJacobian[11][15] = 0.0; + rJacobian[11][16] = 0.0; + rJacobian[11][17] = 0.0; + rJacobian[11][18] = 0.0; + rJacobian[11][19] = 0.0; + rJacobian[11][20] = 0.0; + rJacobian[11][21] = 0.0; + rJacobian[11][22] = 0.0; + rJacobian[11][23] = 0.0; + rJacobian[11][24] = 0.0; + rJacobian[11][25] = 0.0; + rJacobian[11][26] = 0.0; + rJacobian[11][27] = 0.0; + rJacobian[11][28] = 0.0; + rJacobian[11][29] = 0.0; + rJacobian[11][30] = 0.0; + rJacobian[11][31] = 0.0; + rJacobian[11][32] = 0.0; + rJacobian[11][33] = 0.0; + rJacobian[11][34] = 0.0; + rJacobian[12][0] = 0.0; + rJacobian[12][1] = 0.0; + rJacobian[12][2] = 0.0; + rJacobian[12][3] = 0.0; + rJacobian[12][4] = -(mDt * (-var_x189)); + rJacobian[12][5] = 0.0; + rJacobian[12][6] = 0.0; + rJacobian[12][7] = 0.0; + rJacobian[12][8] = -(mDt * (var_x157)); + rJacobian[12][9] = 0.0; + rJacobian[12][10] = 0.0; + rJacobian[12][11] = 0.0; + rJacobian[12][12] = 1.0 - (mDt * (-var_x167 - var_x170)); + rJacobian[12][13] = -(mDt * (var_x169)); + rJacobian[12][14] = -(mDt * (1)); + rJacobian[12][15] = 0.0; + rJacobian[12][16] = 0.0; + rJacobian[12][17] = 0.0; + rJacobian[12][18] = 0.0; + rJacobian[12][19] = 0.0; + rJacobian[12][20] = 0.0; + rJacobian[12][21] = 0.0; + rJacobian[12][22] = 0.0; + rJacobian[12][23] = 0.0; + rJacobian[12][24] = 0.0; + rJacobian[12][25] = 0.0; + rJacobian[12][26] = 0.0; + rJacobian[12][27] = 0.0; + rJacobian[12][28] = 0.0; + rJacobian[12][29] = 0.0; + rJacobian[12][30] = 0.0; + rJacobian[12][31] = 0.0; + rJacobian[12][32] = 0.0; + rJacobian[12][33] = 0.0; + rJacobian[12][34] = 0.0; + rJacobian[13][0] = 0.0; + rJacobian[13][1] = 0.0; + rJacobian[13][2] = 0.0; + rJacobian[13][3] = 0.0; + rJacobian[13][4] = -(mDt * (-var_x175 * var_chaste_interface__ICaL__OI)); + rJacobian[13][5] = 0.0; + rJacobian[13][6] = 0.0; + rJacobian[13][7] = 0.0; + rJacobian[13][8] = -(mDt * (-9.9999999999999995e-7)); + rJacobian[13][9] = -(mDt * (-9.9999999999999995e-7 - var_x190)); + rJacobian[13][10] = -(mDt * (-9.9999999999999995e-7)); + rJacobian[13][11] = -(mDt * (-9.9999999999999995e-7)); + rJacobian[13][12] = -(mDt * (-9.9999999999999995e-7 + var_x164)); + rJacobian[13][13] = 1.0 - (mDt * (-var_x178 - var_x185)); + rJacobian[13][14] = -(mDt * (-9.9999999999999995e-7)); + rJacobian[13][15] = 0.0; + rJacobian[13][16] = 0.0; + rJacobian[13][17] = 0.0; + rJacobian[13][18] = 0.0; + rJacobian[13][19] = 0.0; + rJacobian[13][20] = 0.0; + rJacobian[13][21] = 0.0; + rJacobian[13][22] = 0.0; + rJacobian[13][23] = 0.0; + rJacobian[13][24] = 0.0; + rJacobian[13][25] = 0.0; + rJacobian[13][26] = 0.0; + rJacobian[13][27] = 0.0; + rJacobian[13][28] = 0.0; + rJacobian[13][29] = 0.0; + rJacobian[13][30] = 0.0; + rJacobian[13][31] = 0.0; + rJacobian[13][32] = 0.0; + rJacobian[13][33] = 0.0; + rJacobian[13][34] = 0.0; + rJacobian[14][0] = 0.0; + rJacobian[14][1] = 0.0; + rJacobian[14][2] = 0.0; + rJacobian[14][3] = 0.0; + rJacobian[14][4] = -(mDt * (var_x189 + var_x173 * var_x179 * (1 - var_x107 - var_chaste_interface__ICaL__C - var_chaste_interface__ICaL__CI - var_chaste_interface__ICaL__CI_star - var_chaste_interface__ICaL__C_star - var_chaste_interface__ICaL__OI) + var_x179 * var_x187 * var_chaste_interface__ICaL__O_star)); + rJacobian[14][5] = 0.0; + rJacobian[14][6] = 0.0; + rJacobian[14][7] = 0.0; + rJacobian[14][8] = -(mDt * (var_x191)); + rJacobian[14][9] = -(mDt * (var_x191)); + rJacobian[14][10] = -(mDt * (var_x191)); + rJacobian[14][11] = -(mDt * (-var_x184 - var_x190)); + rJacobian[14][12] = -(mDt * (var_x166 - var_x184)); + rJacobian[14][13] = -(mDt * (var_x191)); + rJacobian[14][14] = 1.0 - (mDt * (-var_x170 - var_x184 - var_x188)); + rJacobian[14][15] = 0.0; + rJacobian[14][16] = 0.0; + rJacobian[14][17] = 0.0; + rJacobian[14][18] = 0.0; + rJacobian[14][19] = 0.0; + rJacobian[14][20] = 0.0; + rJacobian[14][21] = 0.0; + rJacobian[14][22] = 0.0; + rJacobian[14][23] = 0.0; + rJacobian[14][24] = 0.0; + rJacobian[14][25] = 0.0; + rJacobian[14][26] = 0.0; + rJacobian[14][27] = 0.0; + rJacobian[14][28] = 0.0; + rJacobian[14][29] = 0.0; + rJacobian[14][30] = 0.0; + rJacobian[14][31] = 0.0; + rJacobian[14][32] = 0.0; + rJacobian[14][33] = 0.0; + rJacobian[14][34] = 0.0; + rJacobian[15][0] = 0.0; + rJacobian[15][1] = 0.0; + rJacobian[15][2] = 0.0; + rJacobian[15][3] = 0.0; + rJacobian[15][4] = 0.0; + rJacobian[15][5] = 0.0; + rJacobian[15][6] = 0.0; + rJacobian[15][7] = 0.0; + rJacobian[15][8] = 0.0; + rJacobian[15][9] = 0.0; + rJacobian[15][10] = 0.0; + rJacobian[15][11] = 0.0; + rJacobian[15][12] = 0.0; + rJacobian[15][13] = 0.0; + rJacobian[15][14] = 0.0; + rJacobian[15][15] = 1.0 - (mDt * (-var_x193)); + rJacobian[15][16] = 0.0; + rJacobian[15][17] = 0.0; + rJacobian[15][18] = 0.0; + rJacobian[15][19] = 0.0; + rJacobian[15][20] = 0.0; + rJacobian[15][21] = 0.0; + rJacobian[15][22] = -(mDt * (var_x195)); + rJacobian[15][23] = 0.0; + rJacobian[15][24] = 0.0; + rJacobian[15][25] = 0.0; + rJacobian[15][26] = 0.0; + rJacobian[15][27] = 0.0; + rJacobian[15][28] = 0.0; + rJacobian[15][29] = 0.0; + rJacobian[15][30] = 0.0; + rJacobian[15][31] = 0.0; + rJacobian[15][32] = 0.0; + rJacobian[15][33] = 0.0; + rJacobian[15][34] = 0.0; + rJacobian[16][0] = 0.0; + rJacobian[16][1] = 0.0; + rJacobian[16][2] = 0.0; + rJacobian[16][3] = 0.0; + rJacobian[16][4] = 0.0; + rJacobian[16][5] = 0.0; + rJacobian[16][6] = 0.0; + rJacobian[16][7] = 0.0; + rJacobian[16][8] = 0.0; + rJacobian[16][9] = 0.0; + rJacobian[16][10] = 0.0; + rJacobian[16][11] = 0.0; + rJacobian[16][12] = 0.0; + rJacobian[16][13] = 0.0; + rJacobian[16][14] = 0.0; + rJacobian[16][15] = 0.0; + rJacobian[16][16] = 1.0 - (mDt * (-var_x197 - var_x198)); + rJacobian[16][17] = -(mDt * (var_x195)); + rJacobian[16][18] = 0.0; + rJacobian[16][19] = 0.0; + rJacobian[16][20] = 0.0; + rJacobian[16][21] = 0.0; + rJacobian[16][22] = 0.0; + rJacobian[16][23] = 0.0; + rJacobian[16][24] = 0.0; + rJacobian[16][25] = 0.0; + rJacobian[16][26] = 0.0; + rJacobian[16][27] = -(mDt * (var_x200)); + rJacobian[16][28] = 0.0; + rJacobian[16][29] = 0.0; + rJacobian[16][30] = 0.0; + rJacobian[16][31] = 0.0; + rJacobian[16][32] = 0.0; + rJacobian[16][33] = 0.0; + rJacobian[16][34] = 0.0; + rJacobian[17][0] = 0.0; + rJacobian[17][1] = 0.0; + rJacobian[17][2] = 0.0; + rJacobian[17][3] = 0.0; + rJacobian[17][4] = 0.0; + rJacobian[17][5] = 0.0; + rJacobian[17][6] = 0.0; + rJacobian[17][7] = 0.0; + rJacobian[17][8] = 0.0; + rJacobian[17][9] = 0.0; + rJacobian[17][10] = 0.0; + rJacobian[17][11] = 0.0; + rJacobian[17][12] = 0.0; + rJacobian[17][13] = 0.0; + rJacobian[17][14] = 0.0; + rJacobian[17][15] = 0.0; + rJacobian[17][16] = -(mDt * (var_x198)); + rJacobian[17][17] = 1.0 - (mDt * (-var_x197 - var_x201 - var_x202)); + rJacobian[17][18] = -(mDt * (var_x203)); + rJacobian[17][19] = -(mDt * (var_x204)); + rJacobian[17][20] = 0.0; + rJacobian[17][21] = 0.0; + rJacobian[17][22] = 0.0; + rJacobian[17][23] = 0.0; + rJacobian[17][24] = 0.0; + rJacobian[17][25] = 0.0; + rJacobian[17][26] = 0.0; + rJacobian[17][27] = 0.0; + rJacobian[17][28] = -(mDt * (var_x205)); + rJacobian[17][29] = 0.0; + rJacobian[17][30] = 0.0; + rJacobian[17][31] = 0.0; + rJacobian[17][32] = 0.0; + rJacobian[17][33] = 0.0; + rJacobian[17][34] = 0.0; + rJacobian[18][0] = 0.0; + rJacobian[18][1] = 0.0; + rJacobian[18][2] = 0.0; + rJacobian[18][3] = 0.0; + rJacobian[18][4] = 0.0; + rJacobian[18][5] = 0.0; + rJacobian[18][6] = 0.0; + rJacobian[18][7] = 0.0; + rJacobian[18][8] = 0.0; + rJacobian[18][9] = 0.0; + rJacobian[18][10] = 0.0; + rJacobian[18][11] = 0.0; + rJacobian[18][12] = 0.0; + rJacobian[18][13] = 0.0; + rJacobian[18][14] = 0.0; + rJacobian[18][15] = 0.0; + rJacobian[18][16] = 0.0; + rJacobian[18][17] = -(mDt * (var_x201)); + rJacobian[18][18] = 1.0 - (mDt * (-var_x197 - var_x206)); + rJacobian[18][19] = 0.0; + rJacobian[18][20] = -(mDt * (var_x204)); + rJacobian[18][21] = 0.0; + rJacobian[18][22] = 0.0; + rJacobian[18][23] = 0.0; + rJacobian[18][24] = 0.0; + rJacobian[18][25] = 0.0; + rJacobian[18][26] = 0.0; + rJacobian[18][27] = 0.0; + rJacobian[18][28] = 0.0; + rJacobian[18][29] = -(mDt * (var_x207)); + rJacobian[18][30] = 0.0; + rJacobian[18][31] = 0.0; + rJacobian[18][32] = 0.0; + rJacobian[18][33] = 0.0; + rJacobian[18][34] = 0.0; + rJacobian[19][0] = 0.0; + rJacobian[19][1] = 0.0; + rJacobian[19][2] = 0.0; + rJacobian[19][3] = 0.0; + rJacobian[19][4] = 0.0; + rJacobian[19][5] = 0.0; + rJacobian[19][6] = 0.0; + rJacobian[19][7] = 0.0; + rJacobian[19][8] = 0.0; + rJacobian[19][9] = 0.0; + rJacobian[19][10] = 0.0; + rJacobian[19][11] = 0.0; + rJacobian[19][12] = 0.0; + rJacobian[19][13] = 0.0; + rJacobian[19][14] = 0.0; + rJacobian[19][15] = 0.0; + rJacobian[19][16] = 0.0; + rJacobian[19][17] = -(mDt * (var_x200)); + rJacobian[19][18] = 0.0; + rJacobian[19][19] = 1.0 - (mDt * (-var_x201 - var_x204)); + rJacobian[19][20] = -(mDt * (var_x195)); + rJacobian[19][21] = 0.0; + rJacobian[19][22] = 0.0; + rJacobian[19][23] = 0.0; + rJacobian[19][24] = 0.0; + rJacobian[19][25] = 0.0; + rJacobian[19][26] = 0.0; + rJacobian[19][27] = 0.0; + rJacobian[19][28] = 0.0; + rJacobian[19][29] = 0.0; + rJacobian[19][30] = 0.0; + rJacobian[19][31] = 0.0; + rJacobian[19][32] = 0.0; + rJacobian[19][33] = 0.0; + rJacobian[19][34] = 0.0; + rJacobian[20][0] = 0.0; + rJacobian[20][1] = 0.0; + rJacobian[20][2] = 0.0; + rJacobian[20][3] = 0.0; + rJacobian[20][4] = 0.0; + rJacobian[20][5] = 0.0; + rJacobian[20][6] = 0.0; + rJacobian[20][7] = 0.0; + rJacobian[20][8] = 0.0; + rJacobian[20][9] = 0.0; + rJacobian[20][10] = 0.0; + rJacobian[20][11] = 0.0; + rJacobian[20][12] = 0.0; + rJacobian[20][13] = 0.0; + rJacobian[20][14] = 0.0; + rJacobian[20][15] = 0.0; + rJacobian[20][16] = 0.0; + rJacobian[20][17] = 0.0; + rJacobian[20][18] = -(mDt * (var_x205)); + rJacobian[20][19] = -(mDt * (var_x201)); + rJacobian[20][20] = 1.0 - (mDt * (-var_x202 - var_x204)); + rJacobian[20][21] = -(mDt * (var_x208)); + rJacobian[20][22] = 0.0; + rJacobian[20][23] = 0.0; + rJacobian[20][24] = 0.0; + rJacobian[20][25] = 0.0; + rJacobian[20][26] = 0.0; + rJacobian[20][27] = 0.0; + rJacobian[20][28] = 0.0; + rJacobian[20][29] = 0.0; + rJacobian[20][30] = 0.0; + rJacobian[20][31] = 0.0; + rJacobian[20][32] = 0.0; + rJacobian[20][33] = 0.0; + rJacobian[20][34] = 0.0; + rJacobian[21][0] = 0.0; + rJacobian[21][1] = 0.0; + rJacobian[21][2] = 0.0; + rJacobian[21][3] = 0.0; + rJacobian[21][4] = 0.0; + rJacobian[21][5] = 0.0; + rJacobian[21][6] = 0.0; + rJacobian[21][7] = 0.0; + rJacobian[21][8] = 0.0; + rJacobian[21][9] = 0.0; + rJacobian[21][10] = 0.0; + rJacobian[21][11] = 0.0; + rJacobian[21][12] = 0.0; + rJacobian[21][13] = 0.0; + rJacobian[21][14] = 0.0; + rJacobian[21][15] = 0.0; + rJacobian[21][16] = 0.0; + rJacobian[21][17] = 0.0; + rJacobian[21][18] = 0.0; + rJacobian[21][19] = 0.0; + rJacobian[21][20] = -(mDt * (var_x200)); + rJacobian[21][21] = 1.0 - (mDt * (-0.089538306411019994 - var_x208)); + rJacobian[21][22] = 0.0; + rJacobian[21][23] = 0.0; + rJacobian[21][24] = 0.0; + rJacobian[21][25] = 0.0; + rJacobian[21][26] = 0.0; + rJacobian[21][27] = 0.0; + rJacobian[21][28] = 0.0; + rJacobian[21][29] = 0.0; + rJacobian[21][30] = -(mDt * (var_x209)); + rJacobian[21][31] = 0.0; + rJacobian[21][32] = 0.0; + rJacobian[21][33] = 0.0; + rJacobian[21][34] = 0.0; + rJacobian[22][0] = 0.0; + rJacobian[22][1] = 0.0; + rJacobian[22][2] = 0.0; + rJacobian[22][3] = 0.0; + rJacobian[22][4] = 0.0; + rJacobian[22][5] = 0.0; + rJacobian[22][6] = 0.0; + rJacobian[22][7] = 0.0; + rJacobian[22][8] = 0.0; + rJacobian[22][9] = 0.0; + rJacobian[22][10] = 0.0; + rJacobian[22][11] = 0.0; + rJacobian[22][12] = 0.0; + rJacobian[22][13] = 0.0; + rJacobian[22][14] = 0.0; + rJacobian[22][15] = -(mDt * (var_x193)); + rJacobian[22][16] = 0.0; + rJacobian[22][17] = 0.0; + rJacobian[22][18] = 0.0; + rJacobian[22][19] = 0.0; + rJacobian[22][20] = 0.0; + rJacobian[22][21] = 0.0; + rJacobian[22][22] = 1.0 - (mDt * (-var_x202 - var_x210)); + rJacobian[22][23] = -(mDt * (var_x203)); + rJacobian[22][24] = 0.0; + rJacobian[22][25] = 0.0; + rJacobian[22][26] = -(mDt * (var_x211)); + rJacobian[22][27] = 0.0; + rJacobian[22][28] = 0.0; + rJacobian[22][29] = 0.0; + rJacobian[22][30] = 0.0; + rJacobian[22][31] = 0.0; + rJacobian[22][32] = 0.0; + rJacobian[22][33] = 0.0; + rJacobian[22][34] = 0.0; + rJacobian[23][0] = 0.0; + rJacobian[23][1] = 0.0; + rJacobian[23][2] = 0.0; + rJacobian[23][3] = 0.0; + rJacobian[23][4] = 0.0; + rJacobian[23][5] = 0.0; + rJacobian[23][6] = 0.0; + rJacobian[23][7] = 0.0; + rJacobian[23][8] = 0.0; + rJacobian[23][9] = 0.0; + rJacobian[23][10] = 0.0; + rJacobian[23][11] = 0.0; + rJacobian[23][12] = 0.0; + rJacobian[23][13] = 0.0; + rJacobian[23][14] = 0.0; + rJacobian[23][15] = 0.0; + rJacobian[23][16] = 0.0; + rJacobian[23][17] = 0.0; + rJacobian[23][18] = 0.0; + rJacobian[23][19] = 0.0; + rJacobian[23][20] = 0.0; + rJacobian[23][21] = 0.0; + rJacobian[23][22] = -(mDt * (var_x210)); + rJacobian[23][23] = 1.0 - (mDt * (-var_x198 - var_x206)); + rJacobian[23][24] = -(mDt * (var_x212)); + rJacobian[23][25] = 0.0; + rJacobian[23][26] = 0.0; + rJacobian[23][27] = -(mDt * (var_x211)); + rJacobian[23][28] = 0.0; + rJacobian[23][29] = 0.0; + rJacobian[23][30] = 0.0; + rJacobian[23][31] = 0.0; + rJacobian[23][32] = 0.0; + rJacobian[23][33] = 0.0; + rJacobian[23][34] = 0.0; + rJacobian[24][0] = 0.0; + rJacobian[24][1] = 0.0; + rJacobian[24][2] = 0.0; + rJacobian[24][3] = 0.0; + rJacobian[24][4] = 0.0; + rJacobian[24][5] = 0.0; + rJacobian[24][6] = 0.0; + rJacobian[24][7] = 0.0; + rJacobian[24][8] = 0.0; + rJacobian[24][9] = 0.0; + rJacobian[24][10] = 0.0; + rJacobian[24][11] = 0.0; + rJacobian[24][12] = 0.0; + rJacobian[24][13] = 0.0; + rJacobian[24][14] = 0.0; + rJacobian[24][15] = 0.0; + rJacobian[24][16] = 0.0; + rJacobian[24][17] = 0.0; + rJacobian[24][18] = 0.0; + rJacobian[24][19] = 0.0; + rJacobian[24][20] = 0.0; + rJacobian[24][21] = 0.0; + rJacobian[24][22] = 0.0; + rJacobian[24][23] = -(mDt * (var_x198)); + rJacobian[24][24] = 1.0 - (mDt * (-var_x201 - var_x213)); + rJacobian[24][25] = -(mDt * (var_x214)); + rJacobian[24][26] = 0.0; + rJacobian[24][27] = 0.0; + rJacobian[24][28] = -(mDt * (var_x211)); + rJacobian[24][29] = 0.0; + rJacobian[24][30] = 0.0; + rJacobian[24][31] = 0.0; + rJacobian[24][32] = 0.0; + rJacobian[24][33] = 0.0; + rJacobian[24][34] = 0.0; + rJacobian[25][0] = 0.0; + rJacobian[25][1] = 0.0; + rJacobian[25][2] = 0.0; + rJacobian[25][3] = 0.0; + rJacobian[25][4] = 0.0; + rJacobian[25][5] = 0.0; + rJacobian[25][6] = 0.0; + rJacobian[25][7] = 0.0; + rJacobian[25][8] = 0.0; + rJacobian[25][9] = 0.0; + rJacobian[25][10] = 0.0; + rJacobian[25][11] = 0.0; + rJacobian[25][12] = 0.0; + rJacobian[25][13] = 0.0; + rJacobian[25][14] = 0.0; + rJacobian[25][15] = 0.0; + rJacobian[25][16] = 0.0; + rJacobian[25][17] = 0.0; + rJacobian[25][18] = 0.0; + rJacobian[25][19] = 0.0; + rJacobian[25][20] = 0.0; + rJacobian[25][21] = 0.0; + rJacobian[25][22] = 0.0; + rJacobian[25][23] = 0.0; + rJacobian[25][24] = -(mDt * (var_x201)); + rJacobian[25][25] = 1.0 - (mDt * (-var_x214 - var_x215)); + rJacobian[25][26] = 0.0; + rJacobian[25][27] = 0.0; + rJacobian[25][28] = 0.0; + rJacobian[25][29] = -(mDt * (var_x211)); + rJacobian[25][30] = 0.0; + rJacobian[25][31] = 0.0; + rJacobian[25][32] = 0.0; + rJacobian[25][33] = 0.0; + rJacobian[25][34] = 0.0; + rJacobian[26][0] = 0.0; + rJacobian[26][1] = 0.0; + rJacobian[26][2] = 0.0; + rJacobian[26][3] = 0.0; + rJacobian[26][4] = 0.0; + rJacobian[26][5] = 0.0; + rJacobian[26][6] = 0.0; + rJacobian[26][7] = 0.0; + rJacobian[26][8] = 0.0; + rJacobian[26][9] = 0.0; + rJacobian[26][10] = 0.0; + rJacobian[26][11] = 0.0; + rJacobian[26][12] = 0.0; + rJacobian[26][13] = 0.0; + rJacobian[26][14] = 0.0; + rJacobian[26][15] = 0.0; + rJacobian[26][16] = 0.0; + rJacobian[26][17] = 0.0; + rJacobian[26][18] = 0.0; + rJacobian[26][19] = 0.0; + rJacobian[26][20] = 0.0; + rJacobian[26][21] = 0.0; + rJacobian[26][22] = -(mDt * (var_x200)); + rJacobian[26][23] = 0.0; + rJacobian[26][24] = 0.0; + rJacobian[26][25] = 0.0; + rJacobian[26][26] = 1.0 - (mDt * (-var_x210 - var_x211)); + rJacobian[26][27] = -(mDt * (var_x195)); + rJacobian[26][28] = 0.0; + rJacobian[26][29] = 0.0; + rJacobian[26][30] = 0.0; + rJacobian[26][31] = 0.0; + rJacobian[26][32] = 0.0; + rJacobian[26][33] = 0.0; + rJacobian[26][34] = 0.0; + rJacobian[27][0] = 0.0; + rJacobian[27][1] = 0.0; + rJacobian[27][2] = 0.0; + rJacobian[27][3] = 0.0; + rJacobian[27][4] = 0.0; + rJacobian[27][5] = 0.0; + rJacobian[27][6] = 0.0; + rJacobian[27][7] = 0.0; + rJacobian[27][8] = 0.0; + rJacobian[27][9] = 0.0; + rJacobian[27][10] = 0.0; + rJacobian[27][11] = 0.0; + rJacobian[27][12] = 0.0; + rJacobian[27][13] = 0.0; + rJacobian[27][14] = 0.0; + rJacobian[27][15] = 0.0; + rJacobian[27][16] = -(mDt * (var_x197)); + rJacobian[27][17] = 0.0; + rJacobian[27][18] = 0.0; + rJacobian[27][19] = 0.0; + rJacobian[27][20] = 0.0; + rJacobian[27][21] = 0.0; + rJacobian[27][22] = 0.0; + rJacobian[27][23] = -(mDt * (var_x205)); + rJacobian[27][24] = 0.0; + rJacobian[27][25] = 0.0; + rJacobian[27][26] = -(mDt * (var_x210)); + rJacobian[27][27] = 1.0 - (mDt * (-var_x198 - var_x202 - var_x211)); + rJacobian[27][28] = -(mDt * (var_x203)); + rJacobian[27][29] = 0.0; + rJacobian[27][30] = 0.0; + rJacobian[27][31] = 0.0; + rJacobian[27][32] = 0.0; + rJacobian[27][33] = 0.0; + rJacobian[27][34] = 0.0; + rJacobian[28][0] = 0.0; + rJacobian[28][1] = 0.0; + rJacobian[28][2] = 0.0; + rJacobian[28][3] = 0.0; + rJacobian[28][4] = 0.0; + rJacobian[28][5] = 0.0; + rJacobian[28][6] = 0.0; + rJacobian[28][7] = 0.0; + rJacobian[28][8] = 0.0; + rJacobian[28][9] = 0.0; + rJacobian[28][10] = 0.0; + rJacobian[28][11] = 0.0; + rJacobian[28][12] = 0.0; + rJacobian[28][13] = 0.0; + rJacobian[28][14] = 0.0; + rJacobian[28][15] = 0.0; + rJacobian[28][16] = 0.0; + rJacobian[28][17] = -(mDt * (var_x197)); + rJacobian[28][18] = 0.0; + rJacobian[28][19] = 0.0; + rJacobian[28][20] = 0.0; + rJacobian[28][21] = 0.0; + rJacobian[28][22] = 0.0; + rJacobian[28][23] = 0.0; + rJacobian[28][24] = -(mDt * (var_x207)); + rJacobian[28][25] = 0.0; + rJacobian[28][26] = 0.0; + rJacobian[28][27] = -(mDt * (var_x198)); + rJacobian[28][28] = 1.0 - (mDt * (-var_x201 - var_x206 - var_x211)); + rJacobian[28][29] = -(mDt * (var_x212)); + rJacobian[28][30] = 0.0; + rJacobian[28][31] = 0.0; + rJacobian[28][32] = 0.0; + rJacobian[28][33] = 0.0; + rJacobian[28][34] = 0.0; + rJacobian[29][0] = 0.0; + rJacobian[29][1] = 0.0; + rJacobian[29][2] = 0.0; + rJacobian[29][3] = 0.0; + rJacobian[29][4] = 0.0; + rJacobian[29][5] = 0.0; + rJacobian[29][6] = 0.0; + rJacobian[29][7] = 0.0; + rJacobian[29][8] = 0.0; + rJacobian[29][9] = 0.0; + rJacobian[29][10] = 0.0; + rJacobian[29][11] = 0.0; + rJacobian[29][12] = 0.0; + rJacobian[29][13] = 0.0; + rJacobian[29][14] = 0.0; + rJacobian[29][15] = 0.0; + rJacobian[29][16] = 0.0; + rJacobian[29][17] = 0.0; + rJacobian[29][18] = -(mDt * (var_x197)); + rJacobian[29][19] = 0.0; + rJacobian[29][20] = 0.0; + rJacobian[29][21] = 0.0; + rJacobian[29][22] = 0.0; + rJacobian[29][23] = 0.0; + rJacobian[29][24] = 0.0; + rJacobian[29][25] = -(mDt * (var_x215)); + rJacobian[29][26] = 0.0; + rJacobian[29][27] = 0.0; + rJacobian[29][28] = -(mDt * (var_x201)); + rJacobian[29][29] = 1.0 - (mDt * (-var_x211 - var_x213)); + rJacobian[29][30] = 0.0; + rJacobian[29][31] = 0.0; + rJacobian[29][32] = 0.0; + rJacobian[29][33] = 0.0; + rJacobian[29][34] = 0.0; + rJacobian[30][0] = 0.0; + rJacobian[30][1] = 0.0; + rJacobian[30][2] = 0.0; + rJacobian[30][3] = 0.0; + rJacobian[30][4] = 0.0; + rJacobian[30][5] = 0.0; + rJacobian[30][6] = 0.0; + rJacobian[30][7] = 0.0; + rJacobian[30][8] = 0.0; + rJacobian[30][9] = 0.0; + rJacobian[30][10] = 0.0; + rJacobian[30][11] = 0.0; + rJacobian[30][12] = 0.0; + rJacobian[30][13] = 0.0; + rJacobian[30][14] = 0.0; + rJacobian[30][15] = -(mDt * (var_x217)); + rJacobian[30][16] = -(mDt * (var_x217)); + rJacobian[30][17] = -(mDt * (var_x217)); + rJacobian[30][18] = -(mDt * (var_x217)); + rJacobian[30][19] = -(mDt * (var_x217)); + rJacobian[30][20] = -(mDt * (var_x217)); + rJacobian[30][21] = -(mDt * (0.089538306411019994 - var_x216)); + rJacobian[30][22] = -(mDt * (var_x217)); + rJacobian[30][23] = -(mDt * (var_x217)); + rJacobian[30][24] = -(mDt * (var_x217)); + rJacobian[30][25] = -(mDt * (var_x217)); + rJacobian[30][26] = -(mDt * (var_x217)); + rJacobian[30][27] = -(mDt * (var_x217)); + rJacobian[30][28] = -(mDt * (var_x217)); + rJacobian[30][29] = -(mDt * (var_x217)); + rJacobian[30][30] = 1.0 - (mDt * (-var_x209 - var_x216 + _lt_0_row[38])); + rJacobian[30][31] = 0.0; + rJacobian[30][32] = 0.0; + rJacobian[30][33] = 0.0; + rJacobian[30][34] = 0.0; + rJacobian[31][0] = -(mDt * (6.2357214041141957e-6 * var_x222 * var_x232 + 0.00014069346418032653 * var_x222 * var_x235)); + rJacobian[31][1] = -(mDt * (-0.0123 * var_x231 * var_x233 / pow(var_chaste_interface__Ca__Ca_JSR, 2) - 8 * var_x113 * var_x223 * var_x224 * var_x227 * mParameters[1] / pow(var_x228, 2))); + rJacobian[31][2] = 0.0; + rJacobian[31][3] = 0.0; + rJacobian[31][4] = -(mDt * (-var_x109 * var_x236)); + rJacobian[31][5] = -(mDt * (-4.6767910530856466e-10 * var_x232 * var_x237 - 1.0552009813524491e-8 * var_x235 * var_x237)); + rJacobian[31][6] = 0.0; + rJacobian[31][7] = 0.0; + rJacobian[31][8] = 0.0; + rJacobian[31][9] = 0.0; + rJacobian[31][10] = 0.0; + rJacobian[31][11] = 0.0; + rJacobian[31][12] = -(mDt * (var_x238)); + rJacobian[31][13] = 0.0; + rJacobian[31][14] = -(mDt * (var_x238)); + rJacobian[31][15] = 0.0; + rJacobian[31][16] = 0.0; + rJacobian[31][17] = 0.0; + rJacobian[31][18] = 0.0; + rJacobian[31][19] = 0.0; + rJacobian[31][20] = 0.0; + rJacobian[31][21] = 0.0; + rJacobian[31][22] = 0.0; + rJacobian[31][23] = 0.0; + rJacobian[31][24] = 0.0; + rJacobian[31][25] = 0.0; + rJacobian[31][26] = 0.0; + rJacobian[31][27] = 0.0; + rJacobian[31][28] = 0.0; + rJacobian[31][29] = 0.0; + rJacobian[31][30] = 0.0; + rJacobian[31][31] = 1.0 - (mDt * (-var_x234)); + rJacobian[31][32] = 0.0; + rJacobian[31][33] = 0.0; + rJacobian[31][34] = 0.0; + rJacobian[32][0] = 0.0; + rJacobian[32][1] = 0.0; + rJacobian[32][2] = 0.0; + rJacobian[32][3] = -(mDt * (-3.3595190743871034e-11 * var_x239 * var_x240 * var_x243 * var_x244 * mParameters[16] / pow(var_x241, 2))); + rJacobian[32][4] = 0.0; + rJacobian[32][5] = 0.0; + rJacobian[32][6] = -(mDt * (-var_x130 + var_x123 * var_x140)); + rJacobian[32][7] = 0.0; + rJacobian[32][8] = 0.0; + rJacobian[32][9] = 0.0; + rJacobian[32][10] = 0.0; + rJacobian[32][11] = 0.0; + rJacobian[32][12] = 0.0; + rJacobian[32][13] = 0.0; + rJacobian[32][14] = 0.0; + rJacobian[32][15] = -(mDt * (var_x247)); + rJacobian[32][16] = -(mDt * (var_x247)); + rJacobian[32][17] = -(mDt * (var_x247)); + rJacobian[32][18] = -(mDt * (var_x247)); + rJacobian[32][19] = -(mDt * (var_x247)); + rJacobian[32][20] = -(mDt * (var_x247)); + rJacobian[32][21] = -(mDt * (var_x247)); + rJacobian[32][22] = -(mDt * (var_x247)); + rJacobian[32][23] = -(mDt * (var_x247)); + rJacobian[32][24] = -(mDt * (var_x247)); + rJacobian[32][25] = -(mDt * (var_x247)); + rJacobian[32][26] = -(mDt * (var_x247)); + rJacobian[32][27] = -(mDt * (var_x247)); + rJacobian[32][28] = -(mDt * (var_x247)); + rJacobian[32][29] = -(mDt * (var_x247)); + rJacobian[32][30] = 0.0; + rJacobian[32][31] = 0.0; + rJacobian[32][32] = 1.0 - (mDt * (-var_x139 - var_x248 * mParameters[14] / (_lt_0_row[8]) + 6.1298221377044294e-8 * var_x125 * var_x128 * var_x131 - 0.00072346244967216237 * var_x250 * var_x261 * var_x262 + 26.712338705498265 * var_x242 * var_x244 * var_x245 * mParameters[16] - 0.00070927691144329649 * var_x250 * mParameters[15] * var_chaste_interface__IKr_xr_gate__xr / (_lt_0_row[9]) - 2.6031772383887529e-5 * var_x249 * var_x262 * var_x264 * (-var_x256 * (1.053972635420138 * var_x125 * var_x257 + 1.6494869150645177 * var_x125 * var_x258) + 6.4983106368865622 * var_x125 * var_x251 * var_x263 - 13.738155796237757 * var_x125 * var_x254 * var_x259 / pow(var_x255, 2)) / pow((var_x253 + 0.98039215686274506 * var_x260), 2) - var_x248 * pow(var_chaste_interface__Ito1_a_gate__a, 3) * mParameters[20] * var_chaste_interface__Ito1_i1f_gate__i1f * var_chaste_interface__Ito1_i1s_gate__i1s * _lt_0_row[10] + 0.00017254579424681073 * var_x125 * var_x249 * var_x251 * var_x261 * var_x263 * var_x264 * mParameters[12])); + rJacobian[32][33] = -(mDt * (2.1063570778339494e-5 * var_x269 + 0.48963716847178318 * var_x242 * var_x244 * var_x246 - 8.1013733762844218e-6 * var_x268 * var_x270 * var_x51)); + rJacobian[32][34] = 0.0; + rJacobian[33][0] = 0.0; + rJacobian[33][1] = 0.0; + rJacobian[33][2] = 0.0; + rJacobian[33][3] = -(mDt * (-var_x271 * var_x66 - 4.6276665000011881e-12 * var_x65 * var_x67 * var_x68 * var_x94 + 0.00014808532800003802 * var_x50 * var_x53 * var_x57 * var_x59 * var_x60 * mParameters[17])); + rJacobian[33][4] = 0.0; + rJacobian[33][5] = -(mDt * (-1.156916625000297e-12 * var_x120 - var_x272 * var_x66 + 3.7021332000009505e-5 * var_x53 * var_x59 * var_x60 * var_x78 * var_x80 * mParameters[17])); + rJacobian[33][6] = -(mDt * (-var_x138)); + rJacobian[33][7] = 0.0; + rJacobian[33][8] = 0.0; + rJacobian[33][9] = 0.0; + rJacobian[33][10] = 0.0; + rJacobian[33][11] = 0.0; + rJacobian[33][12] = 0.0; + rJacobian[33][13] = 0.0; + rJacobian[33][14] = 0.0; + rJacobian[33][15] = 0.0; + rJacobian[33][16] = 0.0; + rJacobian[33][17] = 0.0; + rJacobian[33][18] = 0.0; + rJacobian[33][19] = 0.0; + rJacobian[33][20] = 0.0; + rJacobian[33][21] = 0.0; + rJacobian[33][22] = 0.0; + rJacobian[33][23] = 0.0; + rJacobian[33][24] = 0.0; + rJacobian[33][25] = 0.0; + rJacobian[33][26] = 0.0; + rJacobian[33][27] = 0.0; + rJacobian[33][28] = 0.0; + rJacobian[33][29] = 0.0; + rJacobian[33][30] = 0.0; + rJacobian[33][31] = 0.0; + rJacobian[33][32] = 0.0; + rJacobian[33][33] = 1.0 - (mDt * (-0.14749262536873156 - var_x141 - 3.1595356167509241e-5 * var_x269 - 6.1702220000015831e-5 * ((var_x146) ? (var_x273 * (96485 - 1806.0006101251679 * var_chaste_interface__membrane__Vm)) : (var_x149 * var_x273)) - var_x271 * var_x92 - 0.00044425598400011404 * var_x95 * var_x97 - var_x274 * pow(var_chaste_interface__INaL_mL_gate__mL, 3) * mParameters[13] * var_chaste_interface__INaL_hL_gate__hL - var_x274 * pow(var_chaste_interface__INa_m_gate__m, 3) * mParameters[11] * var_chaste_interface__INa_h_gate__h * var_chaste_interface__INa_j_gate__j + 1.2152060064426631e-5 * var_x266 * var_x267 * var_x270 * var_x51 * mParameters[18] * mParameters[4])); + rJacobian[33][34] = -(mDt * (0.14749262536873156 - 0.00011106399600002851 * var_x102 - var_x272 * var_x99)); + rJacobian[34][0] = 0.0; + rJacobian[34][1] = 0.0; + rJacobian[34][2] = 0.0; + rJacobian[34][3] = 0.0; + rJacobian[34][4] = 0.0; + rJacobian[34][5] = -(mDt * (-3.9219473587510072e-11 * var_x120 - var_x275 * var_x66 + 0.0012550231548003222 * var_x53 * var_x59 * var_x60 * var_x78 * var_x80 * mParameters[17])); + rJacobian[34][6] = 0.0; + rJacobian[34][7] = 0.0; + rJacobian[34][8] = 0.0; + rJacobian[34][9] = 0.0; + rJacobian[34][10] = 0.0; + rJacobian[34][11] = 0.0; + rJacobian[34][12] = 0.0; + rJacobian[34][13] = 0.0; + rJacobian[34][14] = 0.0; + rJacobian[34][15] = 0.0; + rJacobian[34][16] = 0.0; + rJacobian[34][17] = 0.0; + rJacobian[34][18] = 0.0; + rJacobian[34][19] = 0.0; + rJacobian[34][20] = 0.0; + rJacobian[34][21] = 0.0; + rJacobian[34][22] = 0.0; + rJacobian[34][23] = 0.0; + rJacobian[34][24] = 0.0; + rJacobian[34][25] = 0.0; + rJacobian[34][26] = 0.0; + rJacobian[34][27] = 0.0; + rJacobian[34][28] = 0.0; + rJacobian[34][29] = 0.0; + rJacobian[34][30] = 0.0; + rJacobian[34][31] = 0.0; + rJacobian[34][32] = 0.0; + rJacobian[34][33] = -(mDt * (5)); + rJacobian[34][34] = 1.0 - (mDt * (-5 - 0.0037650694644009667 * var_x102 - var_x275 * var_x99)); + } + + void Celldecker_2009FromCellMLBackwardEulerOpt::UpdateTransmembranePotential(double var_chaste_interface__environment__time) + { + // Time units: millisecond + std::vector& rY = rGetStateVariables(); + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: mV; Initial value: -87.4947322902196 + double var_chaste_interface__Ca__Ca_i = rY[1]; + // Units: mM; Initial value: 8.38749860095482e-05 + double var_chaste_interface__IKs__C1 = rY[2]; + // Units: dimensionless; Initial value: 0.476679784307081 + double var_chaste_interface__IKs__C2 = rY[3]; + // Units: dimensionless; Initial value: 0.255181042718489 + double var_chaste_interface__IKs__C3 = rY[4]; + // Units: dimensionless; Initial value: 0.0512272866698557 + double var_chaste_interface__IKs__C4 = rY[5]; + // Units: dimensionless; Initial value: 0.0045705849736195 + double var_chaste_interface__IKs__C5 = rY[6]; + // Units: dimensionless; Initial value: 0.000152923243503507 + double var_chaste_interface__IKs__C6 = rY[7]; + // Units: dimensionless; Initial value: 0.132814156809568 + double var_chaste_interface__IKs__C7 = rY[8]; + // Units: dimensionless; Initial value: 0.053324572164618 + double var_chaste_interface__IKs__C8 = rY[9]; + // Units: dimensionless; Initial value: 0.00713656414955778 + double var_chaste_interface__IKs__C9 = rY[10]; + // Units: dimensionless; Initial value: 0.000318368292970148 + double var_chaste_interface__IKs__C10 = rY[11]; + // Units: dimensionless; Initial value: 0.0138769647384953 + double var_chaste_interface__IKs__C11 = rY[12]; + // Units: dimensionless; Initial value: 0.00371438476499172 + double var_chaste_interface__IKs__C12 = rY[13]; + // Units: dimensionless; Initial value: 0.000248553788631871 + double var_chaste_interface__IKs__C13 = rY[14]; + // Units: dimensionless; Initial value: 0.000644426171899078 + double var_chaste_interface__IKs__C14 = rY[15]; + // Units: dimensionless; Initial value: 8.62495047666861e-05 + double var_chaste_interface__IKs__C15 = rY[16]; + // Units: dimensionless; Initial value: 1.12344645485893e-05 + double var_chaste_interface__IKs__O1 = rY[17]; + // Units: dimensionless; Initial value: 1.05292905767805e-05 + double var_chaste_interface__ICaL__O = rY[19]; + // Units: dimensionless; Initial value: 2.26882961412491e-05 + double var_chaste_interface__ICaL__O_star = rY[21]; + // Units: dimensionless; Initial value: 1.23556404128518e-10 + double var_chaste_interface__INa_m_gate__m = rY[25]; + // Units: dimensionless; Initial value: 0.00101841101248412 + double var_chaste_interface__INa_h_gate__h = rY[26]; + // Units: dimensionless; Initial value: 0.991354143386887 + double var_chaste_interface__INa_j_gate__j = rY[27]; + // Units: dimensionless; Initial value: 0.99709036251243 + double var_chaste_interface__INaL_mL_gate__mL = rY[28]; + // Units: dimensionless; Initial value: 0.00101841101248412 + double var_chaste_interface__INaL_hL_gate__hL = rY[29]; + // Units: dimensionless; Initial value: 0.319611809402137 + double var_chaste_interface__IKr_xr_gate__xr = rY[30]; + // Units: dimensionless; Initial value: 4.06959064407486e-06 + double var_chaste_interface__Ito1_a_gate__a = rY[31]; + // Units: dimensionless; Initial value: 1.76776038804228e-05 + double var_chaste_interface__Ito1_i1f_gate__i1f = rY[32]; + // Units: dimensionless; Initial value: 0.997976503910799 + double var_chaste_interface__Ito1_i1s_gate__i1s = rY[33]; + // Units: dimensionless; Initial value: 0.947581184798815 + double var_chaste_interface__Ito2_i2f_gate__i2f = rY[34]; + // Units: dimensionless; Initial value: 0.996044894628276 + double var_chaste_interface__Irel__Irel = rY[35]; + // Units: mM_per_ms; Initial value: 0.000714227102027745 + double var_chaste_interface__Ca__Ca_ss_sr = rY[38]; + // Units: mM; Initial value: 0.00011296707102434 + double var_chaste_interface__Ca__Ca_ss_CaL = rY[39]; + // Units: mM; Initial value: 0.000119239795531548 + double var_chaste_interface__Na__Na_i = rY[40]; + // Units: mM; Initial value: 8.01031392415197 + double var_chaste_interface__Na__Na_ss_sr = rY[41]; + // Units: mM; Initial value: 8.01033434859049 + double var_chaste_interface__Cl__Cl_i = rY[42]; + // Units: mM; Initial value: 20.6683603724432 + double var_chaste_interface__K__K_i = rY[44]; + // Units: mM; Initial value: 144.907134343314 + + // Lookup table indexing + const bool _oob_0 = Celldecker_2009FromCellMLBackwardEulerOpt_LookupTables::Instance()->CheckIndex0(var_chaste_interface__membrane__Vm); +// LCOV_EXCL_START + if (_oob_0) + EXCEPTION(DumpState("membrane_voltage outside lookup table range", rY , var_chaste_interface__environment__time)); +// LCOV_EXCL_STOP + const double* const _lt_0_row = Celldecker_2009FromCellMLBackwardEulerOpt_LookupTables::Instance()->IndexTable0(var_chaste_interface__membrane__Vm); + + const double var_IKs__O2 = 1 - var_chaste_interface__IKs__C1 - var_chaste_interface__IKs__C10 - var_chaste_interface__IKs__C11 - var_chaste_interface__IKs__C12 - var_chaste_interface__IKs__C13 - var_chaste_interface__IKs__C14 - var_chaste_interface__IKs__C15 - var_chaste_interface__IKs__C2 - var_chaste_interface__IKs__C3 - var_chaste_interface__IKs__C4 - var_chaste_interface__IKs__C5 - var_chaste_interface__IKs__C6 - var_chaste_interface__IKs__C7 - var_chaste_interface__IKs__C8 - var_chaste_interface__IKs__C9 - var_chaste_interface__IKs__O1; // dimensionless + const double var_IpCa__IpCa = var_chaste_interface__Ca__Ca_i * mParameters[10] / (0.00050000000000000001 + var_chaste_interface__Ca__Ca_i); // uA_per_uF + const double var_membrane__i_Stim = GetIntracellularAreaStimulus(var_chaste_interface__environment__time) / HeartConfig::Instance()->GetCapacitance(); // uA_per_uF + const double var_ICaL__ICaL = (var_chaste_interface__ICaL__O + var_chaste_interface__ICaL__O_star) * (((0.074871767015605231 * var_chaste_interface__membrane__Vm >= -9.9999999999999995e-8) && (0.074871767015605231 * var_chaste_interface__membrane__Vm <= 9.9999999999999995e-8)) ? (192970 * (1 - 0.037435883507802616 * var_chaste_interface__membrane__Vm) * (-0.34100000000000003 * mParameters[3] + var_chaste_interface__Ca__Ca_ss_CaL * _lt_0_row[4]) * mParameters[6]) : (14448.004881001343 * (-0.34100000000000003 * mParameters[3] + var_chaste_interface__Ca__Ca_ss_CaL * _lt_0_row[4]) * mParameters[6] * var_chaste_interface__membrane__Vm / (_lt_0_row[5]))); // uA_per_uF + const double var_ICab__ICab = (((0.074871767015605231 * var_chaste_interface__membrane__Vm >= -9.9999999999999995e-8) && (0.074871767015605231 * var_chaste_interface__membrane__Vm <= 9.9999999999999995e-8)) ? (192970 * (1 - 0.037435883507802616 * var_chaste_interface__membrane__Vm) * (-0.34100000000000003 * mParameters[3] + var_chaste_interface__Ca__Ca_i * _lt_0_row[4]) * mParameters[7]) : (14448.004881001343 * (-0.34100000000000003 * mParameters[3] + var_chaste_interface__Ca__Ca_i * _lt_0_row[4]) * mParameters[7] * var_chaste_interface__membrane__Vm / (_lt_0_row[5]))); // uA_per_uF + const double var_INaCa__INaCa_ss_sr = 0.20000000000000001 * (pow(var_chaste_interface__Na__Na_ss_sr, 3) * mParameters[3] * _lt_0_row[0] - pow(mParameters[5], 3) * var_chaste_interface__Ca__Ca_ss_sr * _lt_0_row[1]) * mParameters[17] / ((_lt_0_row[2]) * (1 + 1.5624999999999999e-8 / pow(var_chaste_interface__Ca__Ca_ss_sr, 2)) * (669921.875 * var_chaste_interface__Ca__Ca_ss_sr + 1.3 * pow(var_chaste_interface__Na__Na_ss_sr, 3) + pow(var_chaste_interface__Na__Na_ss_sr, 3) * mParameters[3] + pow(mParameters[5], 3) * var_chaste_interface__Ca__Ca_ss_sr + 0.0035999999999999999 * pow(mParameters[5], 3) * (1 + 0.00053738391835633597 * pow(var_chaste_interface__Na__Na_ss_sr, 3)) + 1860.8670000000004 * (1 + 277.77777777777777 * var_chaste_interface__Ca__Ca_ss_sr) * mParameters[3])); // uA_per_uF + const double var_INaCa__INaCa = 0.80000000000000004 * (pow(var_chaste_interface__Na__Na_i, 3) * mParameters[3] * _lt_0_row[0] - pow(mParameters[5], 3) * var_chaste_interface__Ca__Ca_i * _lt_0_row[1]) * mParameters[17] / ((_lt_0_row[2]) * (1 + 1.5624999999999999e-8 / pow(var_chaste_interface__Ca__Ca_i, 2)) * (669921.875 * var_chaste_interface__Ca__Ca_i + 1.3 * pow(var_chaste_interface__Na__Na_i, 3) + pow(var_chaste_interface__Na__Na_i, 3) * mParameters[3] + pow(mParameters[5], 3) * var_chaste_interface__Ca__Ca_i + 0.0035999999999999999 * pow(mParameters[5], 3) * (1 + 0.00053738391835633597 * pow(var_chaste_interface__Na__Na_i, 3)) + 1860.8670000000004 * (1 + 277.77777777777777 * var_chaste_interface__Ca__Ca_i) * mParameters[3])) + var_INaCa__INaCa_ss_sr; // uA_per_uF + const double var_INaK__INaK = 0.056895766954938545 * pow(var_chaste_interface__Na__Na_i, 3) * mParameters[18] * mParameters[4] / (pow((1 + 0.38461538461538458 * var_chaste_interface__Na__Na_i), 3) * (_lt_0_row[3]) * (1.5 + mParameters[4])); // uA_per_uF + const double var_INab__phi = 0.037435883507802616 * var_chaste_interface__membrane__Vm; // dimensionless + const double var_INab__INab = (((var_INab__phi >= -9.9999999999999995e-8) && (var_INab__phi <= 9.9999999999999995e-8)) ? (96485 * (1 - 0.5 * var_INab__phi) * (-mParameters[5] + var_chaste_interface__Na__Na_i * exp(var_INab__phi)) * mParameters[9]) : (96485 * (-mParameters[5] + var_chaste_interface__Na__Na_i * exp(var_INab__phi)) * mParameters[9] * var_INab__phi / (-1 + exp(var_INab__phi)))); // uA_per_uF + const double var_Ito2__Ito2 = (1 - 1 / (1 + 6.2499999999999991 * pow(var_chaste_interface__Irel__Irel, 2))) * (((0.037435883507802616 * var_chaste_interface__membrane__Vm >= -9.9999999999999995e-8) && (0.037435883507802616 * var_chaste_interface__membrane__Vm <= 9.9999999999999995e-8)) ? (-96485 * (1 - 0.018717941753901308 * var_chaste_interface__membrane__Vm) * (_lt_0_row[6] + var_chaste_interface__Cl__Cl_i) * mParameters[19]) : (-3612.0012202503358 * (_lt_0_row[6] + var_chaste_interface__Cl__Cl_i) * mParameters[19] * var_chaste_interface__membrane__Vm / (_lt_0_row[7]))) * var_chaste_interface__Ito2_i2f_gate__i2f; // uA_per_uF + const double var_reversal_potentials__ECl = -26.712338705498265 * log(100 / var_chaste_interface__Cl__Cl_i); // mV + const double var_IClb__IClb = (-var_reversal_potentials__ECl + var_chaste_interface__membrane__Vm) * mParameters[8]; // uA_per_uF + const double var_reversal_potentials__EK = 26.712338705498265 * log(mParameters[4] / var_chaste_interface__K__K_i); // mV + const double var_IK1__IK1 = 0.4389381125701739 * sqrt(mParameters[4]) * (-var_reversal_potentials__EK + var_chaste_interface__membrane__Vm) * mParameters[12] / ((1 + exp(-14.1227775 + 0.23849999999999999 * var_chaste_interface__membrane__Vm - 0.23849999999999999 * var_reversal_potentials__EK)) * (1.02 / (1 + exp(-14.1227775 + 0.23849999999999999 * var_chaste_interface__membrane__Vm - 0.23849999999999999 * var_reversal_potentials__EK)) + (0.49124000000000001 * exp(0.43983232 + 0.080320000000000003 * var_chaste_interface__membrane__Vm - 0.080320000000000003 * var_reversal_potentials__EK) + exp(-36.698642499999998 + 0.061749999999999999 * var_chaste_interface__membrane__Vm - 0.061749999999999999 * var_reversal_potentials__EK)) / (1 + exp(-2.4444678999999998 + 0.51429999999999998 * var_reversal_potentials__EK - 0.51429999999999998 * var_chaste_interface__membrane__Vm)))); // uA_per_uF + const double var_IKp__IKp = (-var_reversal_potentials__EK + var_chaste_interface__membrane__Vm) * mParameters[14] / (_lt_0_row[8]); // uA_per_uF + const double var_IKr__IKr = 0.43033148291193518 * sqrt(mParameters[4]) * (-var_reversal_potentials__EK + var_chaste_interface__membrane__Vm) * mParameters[15] * var_chaste_interface__IKr_xr_gate__xr / (_lt_0_row[9]); // uA_per_uF + const double var_Ito1__Ito1 = pow(var_chaste_interface__Ito1_a_gate__a, 3) * (-var_reversal_potentials__EK + var_chaste_interface__membrane__Vm) * mParameters[20] * var_chaste_interface__Ito1_i1f_gate__i1f * var_chaste_interface__Ito1_i1s_gate__i1s * _lt_0_row[10]; // uA_per_uF + const double var_reversal_potentials__ENa = 26.712338705498265 * log(mParameters[5] / var_chaste_interface__Na__Na_i); // mV + const double var_INa__INa = pow(var_chaste_interface__INa_m_gate__m, 3) * (-var_reversal_potentials__ENa + var_chaste_interface__membrane__Vm) * mParameters[11] * var_chaste_interface__INa_h_gate__h * var_chaste_interface__INa_j_gate__j; // uA_per_uF + const double var_INaL__INaL = pow(var_chaste_interface__INaL_mL_gate__mL, 3) * (-var_reversal_potentials__ENa + var_chaste_interface__membrane__Vm) * mParameters[13] * var_chaste_interface__INaL_hL_gate__hL; // uA_per_uF + const double var_IKs__IKs = (1 + 0.59999999999999998 / (1 + 6.4818210260626455e-7 * pow((1 / var_chaste_interface__Ca__Ca_i), 1.3999999999999999))) * (-26.712338705498265 * log((0.018329999999999999 * mParameters[5] + mParameters[4]) / (0.018329999999999999 * var_chaste_interface__Na__Na_i + var_chaste_interface__K__K_i)) + var_chaste_interface__membrane__Vm) * (var_chaste_interface__IKs__O1 + var_IKs__O2) * mParameters[16]; // uA_per_uF + const double d_dt_chaste_interface_var_membrane__Vm = -var_ICaL__ICaL - var_ICab__ICab - var_IClb__IClb - var_IK1__IK1 - var_IKp__IKp - var_IKr__IKr - var_IKs__IKs - var_INa__INa - var_INaL__INaL - var_INab__INab - var_IpCa__IpCa - var_Ito1__Ito1 - var_Ito2__Ito2 - var_membrane__i_Stim - var_INaCa__INaCa - var_INaCa__INaCa_ss_sr - var_INaK__INaK; // mV / ms + + rY[0] += mDt*d_dt_chaste_interface_var_membrane__Vm; + } + + void Celldecker_2009FromCellMLBackwardEulerOpt::ComputeOneStepExceptVoltage(double var_chaste_interface__environment__time) + { + // Time units: millisecond + std::vector& rY = rGetStateVariables(); + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: mV; Initial value: -87.4947322902196 + double var_chaste_interface__INa_m_gate__m = rY[25]; + // Units: dimensionless; Initial value: 0.00101841101248412 + double var_chaste_interface__INa_h_gate__h = rY[26]; + // Units: dimensionless; Initial value: 0.991354143386887 + double var_chaste_interface__INa_j_gate__j = rY[27]; + // Units: dimensionless; Initial value: 0.99709036251243 + double var_chaste_interface__INaL_mL_gate__mL = rY[28]; + // Units: dimensionless; Initial value: 0.00101841101248412 + double var_chaste_interface__INaL_hL_gate__hL = rY[29]; + // Units: dimensionless; Initial value: 0.319611809402137 + double var_chaste_interface__IKr_xr_gate__xr = rY[30]; + // Units: dimensionless; Initial value: 4.06959064407486e-06 + double var_chaste_interface__Ito1_a_gate__a = rY[31]; + // Units: dimensionless; Initial value: 1.76776038804228e-05 + double var_chaste_interface__Ito1_i1f_gate__i1f = rY[32]; + // Units: dimensionless; Initial value: 0.997976503910799 + double var_chaste_interface__Ito1_i1s_gate__i1s = rY[33]; + // Units: dimensionless; Initial value: 0.947581184798815 + double var_chaste_interface__Ito2_i2f_gate__i2f = rY[34]; + // Units: dimensionless; Initial value: 0.996044894628276 + + // Lookup table indexing + const bool _oob_0 = Celldecker_2009FromCellMLBackwardEulerOpt_LookupTables::Instance()->CheckIndex0(var_chaste_interface__membrane__Vm); +// LCOV_EXCL_START + if (_oob_0) + EXCEPTION(DumpState("membrane_voltage outside lookup table range", rY , var_chaste_interface__environment__time)); +// LCOV_EXCL_STOP + const double* const _lt_0_row = Celldecker_2009FromCellMLBackwardEulerOpt_LookupTables::Instance()->IndexTable0(var_chaste_interface__membrane__Vm); + + const double var_IKr_xr_gate__B_1 = -0.13600000000000001; + const double var_IKr_xr_gate__A_1 = -0.00059999999999999995 / var_IKr_xr_gate__B_1; + const double var_IKr_xr_gate__B_2 = 0.1522; + const double var_IKr_xr_gate__A_2 = 0.00029999999999999997 / var_IKr_xr_gate__B_2; + const double var_IKr_xr_gate__v0_1 = 1.7383999999999999; + const double var_IKr_xr_gate__v0_2 = -38.360799999999998; + const double var_INaL_hL_gate__tau_hL = 600; + const double var_INaL_mL_gate__B = -0.10000000000000001; + const double var_INaL_mL_gate__A = -0.32000000000000001 / var_INaL_mL_gate__B; + const double var_INaL_mL_gate__v0 = -47.130000000000003; + const double var_INa_m_gate__B = -0.10000000000000001; + const double var_INa_m_gate__A = -0.32000000000000001 / var_INa_m_gate__B; + const double var_INa_m_gate__v0 = -47.130000000000003; + const double var_Ito2_i2f_gate__tau_i2f = 8; + const double var_IKr_xr_gate__U_1 = (-var_IKr_xr_gate__v0_1 + var_chaste_interface__membrane__Vm) * var_IKr_xr_gate__B_1; + const double var_IKr_xr_gate__U_2 = (-var_IKr_xr_gate__v0_2 + var_chaste_interface__membrane__Vm) * var_IKr_xr_gate__B_2; + const double var_IKr_xr_gate__temp_part_1 = (((var_IKr_xr_gate__U_1 >= -9.9999999999999995e-8) && (var_IKr_xr_gate__U_1 <= 9.9999999999999995e-8)) ? ((1 - 0.5 * var_IKr_xr_gate__U_1) * var_IKr_xr_gate__A_1) : (var_IKr_xr_gate__A_1 * var_IKr_xr_gate__U_1 / (-1 + exp(var_IKr_xr_gate__U_1)))); + const double var_IKr_xr_gate__temp_part_2 = (((var_IKr_xr_gate__U_2 >= -9.9999999999999995e-8) && (var_IKr_xr_gate__U_2 <= 9.9999999999999995e-8)) ? ((1 - 0.5 * var_IKr_xr_gate__U_2) * var_IKr_xr_gate__A_2) : (var_IKr_xr_gate__A_2 * var_IKr_xr_gate__U_2 / (-1 + exp(var_IKr_xr_gate__U_2)))); + const double var_IKr_xr_gate__tau_xr = 1 / (var_IKr_xr_gate__temp_part_1 + var_IKr_xr_gate__temp_part_2); + const double var_IKr_xr_gate__xr_infinity = _lt_0_row[18]; + const double var_INaL_hL_gate__hL_infinity = 1 / (1 + exp(14.918032786885247 + 0.16393442622950821 * var_chaste_interface__membrane__Vm)); + const double var_INaL_mL_gate__U = (-var_INaL_mL_gate__v0 + var_chaste_interface__membrane__Vm) * var_INaL_mL_gate__B; + const double var_INaL_mL_gate__amL = (((var_INaL_mL_gate__U >= -9.9999999999999995e-8) && (var_INaL_mL_gate__U <= 9.9999999999999995e-8)) ? ((1 - 0.5 * var_INaL_mL_gate__U) * var_INaL_mL_gate__A) : (var_INaL_mL_gate__A * var_INaL_mL_gate__U / (-1 + exp(var_INaL_mL_gate__U)))); + const double var_INaL_mL_gate__bmL = 0.080000000000000002 * _lt_0_row[22]; + const double var_INa_h_gate__ah = _lt_0_row[23]; + const double var_INa_h_gate__bh = _lt_0_row[24]; + const double var_INa_j_gate__aj = _lt_0_row[25]; + const double var_INa_j_gate__bj = _lt_0_row[26]; + const double var_INa_m_gate__U = (-var_INa_m_gate__v0 + var_chaste_interface__membrane__Vm) * var_INa_m_gate__B; + const double var_INa_m_gate__am = (((var_INa_m_gate__U >= -9.9999999999999995e-8) && (var_INa_m_gate__U <= 9.9999999999999995e-8)) ? ((1 - 0.5 * var_INa_m_gate__U) * var_INa_m_gate__A) : (var_INa_m_gate__A * var_INa_m_gate__U / (-1 + exp(var_INa_m_gate__U)))); + const double var_INa_m_gate__bm = 0.080000000000000002 * _lt_0_row[22]; + const double var_Ito1_a_gate__a_infinity = _lt_0_row[27]; + const double var_Ito1_a_gate__alpha_a = 0.82719827942757873 / (1 + exp(0.62658348478969694 - 0.034035137876343539 * var_chaste_interface__membrane__Vm)); + const double var_Ito1_a_gate__beta_a = 3.5 / (1 + exp(3.403513787634354 + 0.034035137876343539 * var_chaste_interface__membrane__Vm)); + const double var_Ito1_a_gate__tau_a = 1 / (var_Ito1_a_gate__alpha_a + var_Ito1_a_gate__beta_a); + const double var_Ito1_i1f_gate__alpha_i1f = 0.025000000000000001 / (_lt_0_row[29]); + const double var_Ito1_i1f_gate__beta_i1f = 0.10208977775055385 / (_lt_0_row[30]); + const double var_Ito1_i1s_gate__alpha_i1s = 0.0040000000000000001 / (_lt_0_row[31]); + const double var_Ito1_i1s_gate__beta_i1s = 0.10208977775055385 / (_lt_0_row[30]); + const double var_Ito2_i2f_gate__alpha_i2f = 0.025000000000000001 / (_lt_0_row[29]); + const double var_Ito2_i2f_gate__beta_i2f = 0.20000000000000001 / (_lt_0_row[30]); + const double var_Ito2_i2f_gate__i2f_infinity = var_Ito2_i2f_gate__alpha_i2f / (var_Ito2_i2f_gate__alpha_i2f + var_Ito2_i2f_gate__beta_i2f); + + + rY[30] = (var_chaste_interface__IKr_xr_gate__xr + ((var_IKr_xr_gate__xr_infinity / var_IKr_xr_gate__tau_xr) * mDt)) / (1.0 - ((-1 / var_IKr_xr_gate__tau_xr) * mDt)); + rY[29] = (var_chaste_interface__INaL_hL_gate__hL + ((var_INaL_hL_gate__hL_infinity / var_INaL_hL_gate__tau_hL) * mDt)) / (1.0 - ((-1 / var_INaL_hL_gate__tau_hL) * mDt)); + rY[28] = (var_chaste_interface__INaL_mL_gate__mL + ((var_INaL_mL_gate__amL) * mDt)) / (1.0 - ((-var_INaL_mL_gate__amL - var_INaL_mL_gate__bmL) * mDt)); + rY[31] = (var_chaste_interface__Ito1_a_gate__a + ((var_Ito1_a_gate__a_infinity / var_Ito1_a_gate__tau_a) * mDt)) / (1.0 - ((-1 / var_Ito1_a_gate__tau_a) * mDt)); + rY[32] = (var_chaste_interface__Ito1_i1f_gate__i1f + ((var_Ito1_i1f_gate__alpha_i1f) * mDt)) / (1.0 - ((-var_Ito1_i1f_gate__alpha_i1f - var_Ito1_i1f_gate__beta_i1f) * mDt)); + rY[33] = (var_chaste_interface__Ito1_i1s_gate__i1s + ((var_Ito1_i1s_gate__alpha_i1s) * mDt)) / (1.0 - ((-var_Ito1_i1s_gate__alpha_i1s - var_Ito1_i1s_gate__beta_i1s) * mDt)); + rY[34] = (var_chaste_interface__Ito2_i2f_gate__i2f + ((var_Ito2_i2f_gate__i2f_infinity / var_Ito2_i2f_gate__tau_i2f) * mDt)) / (1.0 - ((-1 / var_Ito2_i2f_gate__tau_i2f) * mDt)); + rY[26] = (var_chaste_interface__INa_h_gate__h + ((var_INa_h_gate__ah) * mDt)) / (1.0 - ((-var_INa_h_gate__ah - var_INa_h_gate__bh) * mDt)); + rY[27] = (var_chaste_interface__INa_j_gate__j + ((var_INa_j_gate__aj) * mDt)) / (1.0 - ((-var_INa_j_gate__aj - var_INa_j_gate__bj) * mDt)); + rY[25] = (var_chaste_interface__INa_m_gate__m + ((var_INa_m_gate__am) * mDt)) / (1.0 - ((-var_INa_m_gate__am - var_INa_m_gate__bm) * mDt)); + + double _guess[35] = {rY[45],rY[36],rY[37],rY[1],rY[39],rY[38],rY[42],rY[43],rY[18],rY[22],rY[24],rY[20],rY[19],rY[23],rY[21],rY[2],rY[11],rY[12],rY[13],rY[14],rY[15],rY[16],rY[3],rY[4],rY[5],rY[6],rY[7],rY[8],rY[9],rY[10],rY[17],rY[35],rY[44],rY[40],rY[41]}; + CardiacNewtonSolver<35,Celldecker_2009FromCellMLBackwardEulerOpt>* _p_solver = CardiacNewtonSolver<35,Celldecker_2009FromCellMLBackwardEulerOpt>::Instance(); + _p_solver->Solve(*this, var_chaste_interface__environment__time, _guess); + rY[45] = _guess[0]; + rY[36] = _guess[1]; + rY[37] = _guess[2]; + rY[1] = _guess[3]; + rY[39] = _guess[4]; + rY[38] = _guess[5]; + rY[42] = _guess[6]; + rY[43] = _guess[7]; + rY[18] = _guess[8]; + rY[22] = _guess[9]; + rY[24] = _guess[10]; + rY[20] = _guess[11]; + rY[19] = _guess[12]; + rY[23] = _guess[13]; + rY[21] = _guess[14]; + rY[2] = _guess[15]; + rY[11] = _guess[16]; + rY[12] = _guess[17]; + rY[13] = _guess[18]; + rY[14] = _guess[19]; + rY[15] = _guess[20]; + rY[16] = _guess[21]; + rY[3] = _guess[22]; + rY[4] = _guess[23]; + rY[5] = _guess[24]; + rY[6] = _guess[25]; + rY[7] = _guess[26]; + rY[8] = _guess[27]; + rY[9] = _guess[28]; + rY[10] = _guess[29]; + rY[17] = _guess[30]; + rY[35] = _guess[31]; + rY[44] = _guess[32]; + rY[40] = _guess[33]; + rY[41] = _guess[34]; + } + + std::vector Celldecker_2009FromCellMLBackwardEulerOpt::ComputeDerivedQuantities(double var_chaste_interface__environment__time, const std::vector & rY) + { + // Inputs: + // Time units: millisecond + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: mV; Initial value: -87.4947322902196 + double var_chaste_interface__Ca__Ca_i = rY[1]; + // Units: mM; Initial value: 8.38749860095482e-05 + double var_chaste_interface__IKs__C1 = rY[2]; + // Units: dimensionless; Initial value: 0.476679784307081 + double var_chaste_interface__IKs__C2 = rY[3]; + // Units: dimensionless; Initial value: 0.255181042718489 + double var_chaste_interface__IKs__C3 = rY[4]; + // Units: dimensionless; Initial value: 0.0512272866698557 + double var_chaste_interface__IKs__C4 = rY[5]; + // Units: dimensionless; Initial value: 0.0045705849736195 + double var_chaste_interface__IKs__C5 = rY[6]; + // Units: dimensionless; Initial value: 0.000152923243503507 + double var_chaste_interface__IKs__C6 = rY[7]; + // Units: dimensionless; Initial value: 0.132814156809568 + double var_chaste_interface__IKs__C7 = rY[8]; + // Units: dimensionless; Initial value: 0.053324572164618 + double var_chaste_interface__IKs__C8 = rY[9]; + // Units: dimensionless; Initial value: 0.00713656414955778 + double var_chaste_interface__IKs__C9 = rY[10]; + // Units: dimensionless; Initial value: 0.000318368292970148 + double var_chaste_interface__IKs__C10 = rY[11]; + // Units: dimensionless; Initial value: 0.0138769647384953 + double var_chaste_interface__IKs__C11 = rY[12]; + // Units: dimensionless; Initial value: 0.00371438476499172 + double var_chaste_interface__IKs__C12 = rY[13]; + // Units: dimensionless; Initial value: 0.000248553788631871 + double var_chaste_interface__IKs__C13 = rY[14]; + // Units: dimensionless; Initial value: 0.000644426171899078 + double var_chaste_interface__IKs__C14 = rY[15]; + // Units: dimensionless; Initial value: 8.62495047666861e-05 + double var_chaste_interface__IKs__C15 = rY[16]; + // Units: dimensionless; Initial value: 1.12344645485893e-05 + double var_chaste_interface__IKs__O1 = rY[17]; + // Units: dimensionless; Initial value: 1.05292905767805e-05 + double var_chaste_interface__ICaL__O = rY[19]; + // Units: dimensionless; Initial value: 2.26882961412491e-05 + double var_chaste_interface__ICaL__O_star = rY[21]; + // Units: dimensionless; Initial value: 1.23556404128518e-10 + double var_chaste_interface__INa_m_gate__m = rY[25]; + // Units: dimensionless; Initial value: 0.00101841101248412 + double var_chaste_interface__INa_h_gate__h = rY[26]; + // Units: dimensionless; Initial value: 0.991354143386887 + double var_chaste_interface__INa_j_gate__j = rY[27]; + // Units: dimensionless; Initial value: 0.99709036251243 + double var_chaste_interface__INaL_mL_gate__mL = rY[28]; + // Units: dimensionless; Initial value: 0.00101841101248412 + double var_chaste_interface__INaL_hL_gate__hL = rY[29]; + // Units: dimensionless; Initial value: 0.319611809402137 + double var_chaste_interface__IKr_xr_gate__xr = rY[30]; + // Units: dimensionless; Initial value: 4.06959064407486e-06 + double var_chaste_interface__Ito1_a_gate__a = rY[31]; + // Units: dimensionless; Initial value: 1.76776038804228e-05 + double var_chaste_interface__Ito1_i1f_gate__i1f = rY[32]; + // Units: dimensionless; Initial value: 0.997976503910799 + double var_chaste_interface__Ito1_i1s_gate__i1s = rY[33]; + // Units: dimensionless; Initial value: 0.947581184798815 + double var_chaste_interface__Ito2_i2f_gate__i2f = rY[34]; + // Units: dimensionless; Initial value: 0.996044894628276 + double var_chaste_interface__Irel__Irel = rY[35]; + // Units: mM_per_ms; Initial value: 0.000714227102027745 + double var_chaste_interface__Ca__Ca_NSR = rY[37]; + // Units: mM; Initial value: 1.01475649943057 + double var_chaste_interface__Ca__Ca_ss_sr = rY[38]; + // Units: mM; Initial value: 0.00011296707102434 + double var_chaste_interface__Ca__Ca_ss_CaL = rY[39]; + // Units: mM; Initial value: 0.000119239795531548 + double var_chaste_interface__Na__Na_i = rY[40]; + // Units: mM; Initial value: 8.01031392415197 + double var_chaste_interface__Na__Na_ss_sr = rY[41]; + // Units: mM; Initial value: 8.01033434859049 + double var_chaste_interface__Cl__Cl_i = rY[42]; + // Units: mM; Initial value: 20.6683603724432 + double var_chaste_interface__K__K_i = rY[44]; + // Units: mM; Initial value: 144.907134343314 + double var_chaste_interface__CaMK_active__CaMK_trap = rY[45]; + // Units: dimensionless; Initial value: 0.0114911034744777 + + // Lookup table indexing + const bool _oob_0 = Celldecker_2009FromCellMLBackwardEulerOpt_LookupTables::Instance()->CheckIndex0(var_chaste_interface__membrane__Vm); +// LCOV_EXCL_START + if (_oob_0) + EXCEPTION(DumpState("membrane_voltage outside lookup table range", rY , var_chaste_interface__environment__time)); +// LCOV_EXCL_STOP + const double* const _lt_0_row = Celldecker_2009FromCellMLBackwardEulerOpt_LookupTables::Instance()->IndexTable0(var_chaste_interface__membrane__Vm); + + // Mathematics + const double var_CaMK_active__CaMK_0 = 0.050000000000000003; // dimensionless + const double var_CaMK_active__Km = 0.0015; // mM + const double var_CaMK_active__CaMK_active = (1 - var_chaste_interface__CaMK_active__CaMK_trap) * var_CaMK_active__CaMK_0 / (1 + var_CaMK_active__Km / var_chaste_interface__Ca__Ca_ss_sr) + var_chaste_interface__CaMK_active__CaMK_trap; // dimensionless + const double var_ICaL__gamma_Cai = 1; // dimensionless + const double var_ICaL__gamma_Cao = 0.34100000000000003; // dimensionless + const double var_ICaL__v0 = 0; // mV + const double var_ICab__gamma_Ca_i = 1; // dimensionless + const double var_ICab__gamma_Ca_o = 0.34100000000000003; // dimensionless + const double var_ICab__v0 = 0; // mV + const double var_IKs__O2 = 1 - var_chaste_interface__IKs__C1 - var_chaste_interface__IKs__C10 - var_chaste_interface__IKs__C11 - var_chaste_interface__IKs__C12 - var_chaste_interface__IKs__C13 - var_chaste_interface__IKs__C14 - var_chaste_interface__IKs__C15 - var_chaste_interface__IKs__C2 - var_chaste_interface__IKs__C3 - var_chaste_interface__IKs__C4 - var_chaste_interface__IKs__C5 - var_chaste_interface__IKs__C6 - var_chaste_interface__IKs__C7 - var_chaste_interface__IKs__C8 - var_chaste_interface__IKs__C9 - var_chaste_interface__IKs__O1; // dimensionless + const double var_IKs__OKs = var_chaste_interface__IKs__O1 + var_IKs__O2; // dimensionless + const double var_IKs__gKs = (1 + 0.59999999999999998 / (1 + 6.4818210260626455e-7 * pow((1 / var_chaste_interface__Ca__Ca_i), 1.3999999999999999))) * mParameters[16]; // mS_per_uF + const double var_INaCa__KmCa_act = 0.000125; // mM + const double var_INaCa__KmCai = 0.0035999999999999999; // mM + const double var_INaCa__KmCao = 1.3; // mM + const double var_INaCa__KmNai = 12.300000000000001; // mM + const double var_INaCa__KmNao = 87.5; // mM + const double var_INaCa__denom_1 = 1 + pow(var_INaCa__KmCa_act, 2) / pow(var_chaste_interface__Ca__Ca_i, 2); // dimensionless + const double var_INaCa__denom_ss_1 = 1 + pow(var_INaCa__KmCa_act, 2) / pow(var_chaste_interface__Ca__Ca_ss_sr, 2); // dimensionless + const double var_INaCa__eta = 0.27000000000000002; // dimensionless + const double var_INaCa__ksat = 0.32000000000000001; // dimensionless + const double var_INaK__V_half = -92; // mV + const double var_INaK__kmko = 1.5; // mM + const double var_INaK__kmnai = 2.6000000000000001; // mM + const double var_INaK__sigma = 1; // dimensionless + const double var_INab__B = 1; // dimensionless + const double var_INab__v0 = 0; // dimensionless + const double var_Ileak__nsrbar = 15; // mM + const double var_Ileak__Ileak = var_chaste_interface__Ca__Ca_NSR * mParameters[0] / var_Ileak__nsrbar; // mM_per_ms + const double var_IpCa__KmpCa = 0.00050000000000000001; // mM + const double var_IpCa__IpCa = var_chaste_interface__Ca__Ca_i * mParameters[10] / (var_chaste_interface__Ca__Ca_i + var_IpCa__KmpCa); // uA_per_uF + const double var_IpCa__IpCa_converted = HeartConfig::Instance()->GetCapacitance() * var_IpCa__IpCa; // uA_per_cm2 + const double var_Ito2__Ito2_max_scaling_factor = 1; // dimensionless + const double var_Ito2__kCa_ito2 = 0.40000000000000002; // mM_per_ms + const double var_Ito2__KCa_ito2 = 1 - 1 / (1 + pow(var_chaste_interface__Irel__Irel, 2) / pow(var_Ito2__kCa_ito2, 2)); // dimensionless + const double var_Ito2__v0 = 0; // mV + const double var_Ito2__zCl = -1; // dimensionless + const double var_Iup__delta_iupCaMK_bar = 0.75; // dimensionless + const double var_Iup__delta_kmPLB_bar = 0.00017000000000000001; // mM + const double var_Iup__kmCaMK = 0.14999999999999999; // mM + const double var_Iup__delta_iupCaMK = var_CaMK_active__CaMK_active * var_Iup__delta_iupCaMK_bar / (var_CaMK_active__CaMK_active + var_Iup__kmCaMK); // dimensionless + const double var_Iup__delta_kmPLB = var_CaMK_active__CaMK_active * var_Iup__delta_kmPLB_bar / (var_CaMK_active__CaMK_active + var_Iup__kmCaMK); // mM + const double var_Iup__kmup = 0.00092000000000000003; // mM + const double var_Iup__Iup = (1 + var_Iup__delta_iupCaMK) * var_chaste_interface__Ca__Ca_i * mParameters[2] / (-var_Iup__delta_kmPLB + var_chaste_interface__Ca__Ca_i + var_Iup__kmup); // mM_per_ms + const double var_INaK__PNa = pow(var_chaste_interface__Na__Na_i, 3) / pow((var_INaK__kmnai + var_chaste_interface__Na__Na_i), 3); // dimensionless + const double var_IKp__Kp = 1 / (_lt_0_row[8]); // dimensionless + const double var_IKr_r_gate__r = 1 / (_lt_0_row[9]); // dimensionless + const double var_Ito1__rto1 = _lt_0_row[10]; // dimensionless + const double var_membrane__i_Stim_converted = GetIntracellularAreaStimulus(var_chaste_interface__environment__time); // uA_per_cm2 + const double var_INaCa__denom_3 = pow(var_INaCa__KmNao, 3) * var_chaste_interface__Ca__Ca_i + pow(var_chaste_interface__Na__Na_i, 3) * var_INaCa__KmCao + pow(var_INaCa__KmNai, 3) * (1 + var_chaste_interface__Ca__Ca_i / var_INaCa__KmCai) * mParameters[3]; // mM4 + const double var_INaCa__denom_ss_3 = pow(var_INaCa__KmNao, 3) * var_chaste_interface__Ca__Ca_ss_sr + pow(var_chaste_interface__Na__Na_ss_sr, 3) * var_INaCa__KmCao + pow(var_INaCa__KmNai, 3) * (1 + var_chaste_interface__Ca__Ca_ss_sr / var_INaCa__KmCai) * mParameters[3]; // mM4 + const double var_model_parameters__Cl_o = 100; // mM + const double var_model_parameters__F = 96485; // C_per_mole + const double var_IK1__gK1 = 0.43033148291193518 * sqrt(mParameters[4]) * mParameters[12]; // mS_per_uF + const double var_IKr__gKr = 0.43033148291193518 * sqrt(mParameters[4]) * mParameters[15]; // mS_per_uF + const double var_INaK__PK = mParameters[4] / (var_INaK__kmko + mParameters[4]); // dimensionless + const double var_INaCa__denom_4 = pow(var_chaste_interface__Na__Na_i, 3) * mParameters[3] + pow(mParameters[5], 3) * var_chaste_interface__Ca__Ca_i + pow(mParameters[5], 3) * (1 + pow(var_chaste_interface__Na__Na_i, 3) / pow(var_INaCa__KmNai, 3)) * var_INaCa__KmCai; // mM4 + const double var_INaCa__denom_ss_4 = pow(var_chaste_interface__Na__Na_ss_sr, 3) * mParameters[3] + pow(mParameters[5], 3) * var_chaste_interface__Ca__Ca_ss_sr + pow(mParameters[5], 3) * (1 + pow(var_chaste_interface__Na__Na_ss_sr, 3) / pow(var_INaCa__KmNai, 3)) * var_INaCa__KmCai; // mM4 + const double var_model_parameters__R = 8314; // J_per_kmole_K + const double var_model_parameters__T = 310; // kelvin + const double var_ICaL__B = 2 * var_model_parameters__F / (var_model_parameters__R * var_model_parameters__T); // per_mV + const double var_ICaL__A = 4 * pow(var_model_parameters__F, 2) * (-var_ICaL__gamma_Cao * mParameters[3] + var_chaste_interface__Ca__Ca_ss_CaL * var_ICaL__gamma_Cai * exp(2 * var_chaste_interface__membrane__Vm * var_model_parameters__F / (var_model_parameters__R * var_model_parameters__T))) * mParameters[6] / (var_ICaL__B * var_model_parameters__R * var_model_parameters__T); // uA_per_uF + const double var_ICaL__U = (-var_ICaL__v0 + var_chaste_interface__membrane__Vm) * var_ICaL__B; // dimensionless + const double var_ICaL__ICaL_max = (((var_ICaL__U >= -9.9999999999999995e-8) && (var_ICaL__U <= 9.9999999999999995e-8)) ? ((1 - 0.5 * var_ICaL__U) * var_ICaL__A) : (var_ICaL__A * var_ICaL__U / (-1 + exp(var_ICaL__U)))); // uA_per_uF + const double var_ICaL__ICaL = (var_chaste_interface__ICaL__O + var_chaste_interface__ICaL__O_star) * var_ICaL__ICaL_max; // uA_per_uF + const double var_ICaL__ICaL_converted = HeartConfig::Instance()->GetCapacitance() * var_ICaL__ICaL; // uA_per_cm2 + const double var_ICab__B = 2 * var_model_parameters__F / (var_model_parameters__R * var_model_parameters__T); // per_mV + const double var_ICab__A = 4 * pow(var_model_parameters__F, 2) * (-var_ICab__gamma_Ca_o * mParameters[3] + var_chaste_interface__Ca__Ca_i * var_ICab__gamma_Ca_i * exp(2 * var_chaste_interface__membrane__Vm * var_model_parameters__F / (var_model_parameters__R * var_model_parameters__T))) * mParameters[7] / (var_ICab__B * var_model_parameters__R * var_model_parameters__T); // uA_per_uF + const double var_ICab__U = (-var_ICab__v0 + var_chaste_interface__membrane__Vm) * var_ICab__B; // dimensionless + const double var_ICab__ICab = (((var_ICab__U >= -9.9999999999999995e-8) && (var_ICab__U <= 9.9999999999999995e-8)) ? ((1 - 0.5 * var_ICab__U) * var_ICab__A) : (var_ICab__A * var_ICab__U / (-1 + exp(var_ICab__U)))); // uA_per_uF + const double var_ICab__ICab_converted = HeartConfig::Instance()->GetCapacitance() * var_ICab__ICab; // uA_per_cm2 + const double var_INaCa__denom_2 = 1 + var_INaCa__ksat * exp((-1 + var_INaCa__eta) * var_chaste_interface__membrane__Vm * var_model_parameters__F / (var_model_parameters__R * var_model_parameters__T)); // dimensionless + const double var_INaCa__denom_ss_2 = 1 + var_INaCa__ksat * exp((-1 + var_INaCa__eta) * var_chaste_interface__membrane__Vm * var_model_parameters__F / (var_model_parameters__R * var_model_parameters__T)); // dimensionless + const double var_INaCa__num_ss = 0.20000000000000001 * (pow(var_chaste_interface__Na__Na_ss_sr, 3) * mParameters[3] * exp(var_INaCa__eta * var_chaste_interface__membrane__Vm * var_model_parameters__F / (var_model_parameters__R * var_model_parameters__T)) - pow(mParameters[5], 3) * var_chaste_interface__Ca__Ca_ss_sr * exp((-1 + var_INaCa__eta) * var_chaste_interface__membrane__Vm * var_model_parameters__F / (var_model_parameters__R * var_model_parameters__T))) * mParameters[17]; // mM4_uA_per_uF + const double var_INaCa__INaCa_ss_sr = var_INaCa__num_ss / ((var_INaCa__denom_ss_3 + var_INaCa__denom_ss_4) * var_INaCa__denom_ss_1 * var_INaCa__denom_ss_2); // uA_per_uF + const double var_INaCa__INaCa_ss_sr_converted = HeartConfig::Instance()->GetCapacitance() * var_INaCa__INaCa_ss_sr; // uA_per_cm2 + const double var_INaCa__numerator = 0.80000000000000004 * (pow(var_chaste_interface__Na__Na_i, 3) * mParameters[3] * exp(var_INaCa__eta * var_chaste_interface__membrane__Vm * var_model_parameters__F / (var_model_parameters__R * var_model_parameters__T)) - pow(mParameters[5], 3) * var_chaste_interface__Ca__Ca_i * exp((-1 + var_INaCa__eta) * var_chaste_interface__membrane__Vm * var_model_parameters__F / (var_model_parameters__R * var_model_parameters__T))) * mParameters[17]; // mM4_uA_per_uF + const double var_INaCa__INaCa_cai = var_INaCa__numerator / ((var_INaCa__denom_3 + var_INaCa__denom_4) * var_INaCa__denom_1 * var_INaCa__denom_2); // uA_per_uF + const double var_INaCa__INaCa = var_INaCa__INaCa_cai + var_INaCa__INaCa_ss_sr; // uA_per_uF + const double var_INaCa__INaCa_converted = HeartConfig::Instance()->GetCapacitance() * var_INaCa__INaCa; // uA_per_cm2 + const double var_INaK__phi = (-var_INaK__V_half + var_chaste_interface__membrane__Vm) * var_INaK__sigma * var_model_parameters__F / (var_model_parameters__R * var_model_parameters__T); // dimensionless + const double var_INaK__fv = 1 / (1 + exp(-var_INaK__phi)); // dimensionless + const double var_INaK__INaK = var_INaK__PK * var_INaK__PNa * var_INaK__fv * mParameters[18]; // uA_per_uF + const double var_INaK__INaK_converted = HeartConfig::Instance()->GetCapacitance() * var_INaK__INaK; // uA_per_cm2 + const double var_INab__phi = var_chaste_interface__membrane__Vm * var_model_parameters__F / (var_model_parameters__R * var_model_parameters__T); // dimensionless + const double var_INab__A = (-mParameters[5] + var_chaste_interface__Na__Na_i * exp(var_INab__phi)) * mParameters[9] * var_model_parameters__F / var_INab__B; // uA_per_uF + const double var_INab__U = (-var_INab__v0 + var_INab__phi) * var_INab__B; // dimensionless + const double var_INab__INab = (((var_INab__U >= -9.9999999999999995e-8) && (var_INab__U <= 9.9999999999999995e-8)) ? ((1 - 0.5 * var_INab__U) * var_INab__A) : (var_INab__A * var_INab__U / (-1 + exp(var_INab__U)))); // uA_per_uF + const double var_INab__INab_converted = HeartConfig::Instance()->GetCapacitance() * var_INab__INab; // uA_per_cm2 + const double var_Ito2__B = var_model_parameters__F / (var_model_parameters__R * var_model_parameters__T); // per_mV + const double var_Ito2__A = -pow(var_Ito2__zCl, 2) * pow(var_model_parameters__F, 2) * (-var_model_parameters__Cl_o * exp(var_chaste_interface__membrane__Vm * var_model_parameters__F / (var_model_parameters__R * var_model_parameters__T)) + var_chaste_interface__Cl__Cl_i) * mParameters[19] / (var_Ito2__B * var_model_parameters__R * var_model_parameters__T); // uA_per_uF + const double var_Ito2__U = (-var_Ito2__v0 + var_chaste_interface__membrane__Vm) * var_Ito2__B; // dimensionless + const double var_Ito2__Ito2_max = (((var_Ito2__U >= -9.9999999999999995e-8) && (var_Ito2__U <= 9.9999999999999995e-8)) ? ((1 - 0.5 * var_Ito2__U) * var_Ito2__A) : (var_Ito2__A * var_Ito2__U / (-1 + exp(var_Ito2__U)))); // uA_per_uF + const double var_Ito2__Ito2 = var_Ito2__Ito2_max * var_Ito2__Ito2_max_scaling_factor * var_Ito2__KCa_ito2 * var_chaste_interface__Ito2_i2f_gate__i2f; // uA_per_uF + const double var_Ito2__Ito2_converted = HeartConfig::Instance()->GetCapacitance() * var_Ito2__Ito2; // uA_per_cm2 + const double var_reversal_potentials__ECl = -var_model_parameters__R * var_model_parameters__T * log(var_model_parameters__Cl_o / var_chaste_interface__Cl__Cl_i) / var_model_parameters__F; // mV + const double var_IClb__IClb = (-var_reversal_potentials__ECl + var_chaste_interface__membrane__Vm) * mParameters[8]; // uA_per_uF + const double var_IClb__IClb_converted = HeartConfig::Instance()->GetCapacitance() * var_IClb__IClb; // uA_per_cm2 + const double var_reversal_potentials__EK = var_model_parameters__R * var_model_parameters__T * log(mParameters[4] / var_chaste_interface__K__K_i) / var_model_parameters__F; // mV + const double var_IK1_K1_gate__alpha_k1 = 1.02 / (1 + exp(-14.1227775 + 0.23849999999999999 * var_chaste_interface__membrane__Vm - 0.23849999999999999 * var_reversal_potentials__EK)); // dimensionless + const double var_IK1_K1_gate__beta_k1 = (0.49124000000000001 * exp(0.43983232 + 0.080320000000000003 * var_chaste_interface__membrane__Vm - 0.080320000000000003 * var_reversal_potentials__EK) + exp(-36.698642499999998 + 0.061749999999999999 * var_chaste_interface__membrane__Vm - 0.061749999999999999 * var_reversal_potentials__EK)) / (1 + exp(-2.4444678999999998 + 0.51429999999999998 * var_reversal_potentials__EK - 0.51429999999999998 * var_chaste_interface__membrane__Vm)); // dimensionless + const double var_IK1_K1_gate__K1 = var_IK1_K1_gate__alpha_k1 / (var_IK1_K1_gate__alpha_k1 + var_IK1_K1_gate__beta_k1); // dimensionless + const double var_IK1__IK1 = (-var_reversal_potentials__EK + var_chaste_interface__membrane__Vm) * var_IK1__gK1 * var_IK1_K1_gate__K1; // uA_per_uF + const double var_IK1__IK1_converted = HeartConfig::Instance()->GetCapacitance() * var_IK1__IK1; // uA_per_cm2 + const double var_IKp__IKp = (-var_reversal_potentials__EK + var_chaste_interface__membrane__Vm) * var_IKp__Kp * mParameters[14]; // uA_per_uF + const double var_IKp__IKp_converted = HeartConfig::Instance()->GetCapacitance() * var_IKp__IKp; // uA_per_cm2 + const double var_IKr__IKr = (-var_reversal_potentials__EK + var_chaste_interface__membrane__Vm) * var_IKr__gKr * var_IKr_r_gate__r * var_chaste_interface__IKr_xr_gate__xr; // uA_per_uF + const double var_IKr__IKr_converted = HeartConfig::Instance()->GetCapacitance() * var_IKr__IKr; // uA_per_cm2 + const double var_Ito1__Ito1 = pow(var_chaste_interface__Ito1_a_gate__a, 3) * (-var_reversal_potentials__EK + var_chaste_interface__membrane__Vm) * mParameters[20] * var_Ito1__rto1 * var_chaste_interface__Ito1_i1f_gate__i1f * var_chaste_interface__Ito1_i1s_gate__i1s; // uA_per_uF + const double var_Ito1__Ito1_converted = HeartConfig::Instance()->GetCapacitance() * var_Ito1__Ito1; // uA_per_cm2 + const double var_reversal_potentials__ENa = var_model_parameters__R * var_model_parameters__T * log(mParameters[5] / var_chaste_interface__Na__Na_i) / var_model_parameters__F; // mV + const double var_INa__INa = pow(var_chaste_interface__INa_m_gate__m, 3) * (-var_reversal_potentials__ENa + var_chaste_interface__membrane__Vm) * mParameters[11] * var_chaste_interface__INa_h_gate__h * var_chaste_interface__INa_j_gate__j; // uA_per_uF + const double var_INa__INa_converted = HeartConfig::Instance()->GetCapacitance() * var_INa__INa; // uA_per_cm2 + const double var_INaL__INaL = pow(var_chaste_interface__INaL_mL_gate__mL, 3) * (-var_reversal_potentials__ENa + var_chaste_interface__membrane__Vm) * mParameters[13] * var_chaste_interface__INaL_hL_gate__hL; // uA_per_uF + const double var_INaL__INaL_converted = HeartConfig::Instance()->GetCapacitance() * var_INaL__INaL; // uA_per_cm2 + const double var_reversal_potentials__prnak = 0.018329999999999999; // dimensionless + const double var_reversal_potentials__EKs = var_model_parameters__R * var_model_parameters__T * log((mParameters[5] * var_reversal_potentials__prnak + mParameters[4]) / (var_chaste_interface__Na__Na_i * var_reversal_potentials__prnak + var_chaste_interface__K__K_i)) / var_model_parameters__F; // mV + const double var_IKs__IKs = (-var_reversal_potentials__EKs + var_chaste_interface__membrane__Vm) * var_IKs__OKs * var_IKs__gKs; // uA_per_uF + const double var_IKs__IKs_converted = HeartConfig::Instance()->GetCapacitance() * var_IKs__IKs; // uA_per_cm2 + + std::vector dqs(20); + dqs[0] = var_Ileak__Ileak; + dqs[1] = var_Iup__Iup; + dqs[2] = var_ICaL__ICaL_converted; + dqs[3] = var_ICab__ICab_converted; + dqs[4] = var_IClb__IClb_converted; + dqs[5] = var_INab__INab_converted; + dqs[6] = var_IpCa__IpCa_converted; + dqs[7] = var_INa__INa_converted; + dqs[8] = var_IK1__IK1_converted; + dqs[9] = var_INaL__INaL_converted; + dqs[10] = var_IKp__IKp_converted; + dqs[11] = var_IKr__IKr_converted; + dqs[12] = var_IKs__IKs_converted; + dqs[13] = var_INaCa__INaCa_converted; + dqs[14] = var_INaCa__INaCa_ss_sr_converted; + dqs[15] = var_INaK__INaK_converted; + dqs[16] = var_membrane__i_Stim_converted; + dqs[17] = var_Ito2__Ito2_converted; + dqs[18] = var_Ito1__Ito1_converted; + dqs[19] = var_chaste_interface__environment__time; + return dqs; + } + +template<> +void OdeSystemInformation::Initialise(void) +{ + this->mSystemName = "decker_2009"; + this->mFreeVariableName = "time"; + this->mFreeVariableUnits = "ms"; + + // rY[0]: + this->mVariableNames.push_back("membrane_voltage"); + this->mVariableUnits.push_back("mV"); + this->mInitialConditions.push_back(-87.4947322902196); + + // rY[1]: + this->mVariableNames.push_back("cytosolic_calcium_concentration"); + this->mVariableUnits.push_back("mM"); + this->mInitialConditions.push_back(8.38749860095482e-05); + + // rY[2]: + this->mVariableNames.push_back("IKs__C1"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.476679784307081); + + // rY[3]: + this->mVariableNames.push_back("IKs__C2"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.255181042718489); + + // rY[4]: + this->mVariableNames.push_back("IKs__C3"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.0512272866698557); + + // rY[5]: + this->mVariableNames.push_back("IKs__C4"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.0045705849736195); + + // rY[6]: + this->mVariableNames.push_back("IKs__C5"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.000152923243503507); + + // rY[7]: + this->mVariableNames.push_back("IKs__C6"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.132814156809568); + + // rY[8]: + this->mVariableNames.push_back("IKs__C7"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.053324572164618); + + // rY[9]: + this->mVariableNames.push_back("IKs__C8"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.00713656414955778); + + // rY[10]: + this->mVariableNames.push_back("IKs__C9"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.000318368292970148); + + // rY[11]: + this->mVariableNames.push_back("IKs__C10"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.0138769647384953); + + // rY[12]: + this->mVariableNames.push_back("IKs__C11"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.00371438476499172); + + // rY[13]: + this->mVariableNames.push_back("IKs__C12"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.000248553788631871); + + // rY[14]: + this->mVariableNames.push_back("IKs__C13"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.000644426171899078); + + // rY[15]: + this->mVariableNames.push_back("IKs__C14"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(8.62495047666861e-05); + + // rY[16]: + this->mVariableNames.push_back("IKs__C15"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(1.12344645485893e-05); + + // rY[17]: + this->mVariableNames.push_back("IKs__O1"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(1.05292905767805e-05); + + // rY[18]: + this->mVariableNames.push_back("ICaL__C"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.99996982093287); + + // rY[19]: + this->mVariableNames.push_back("ICaL__O"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(2.26882961412491e-05); + + // rY[20]: + this->mVariableNames.push_back("ICaL__C_star"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(7.49117189549873e-06); + + // rY[21]: + this->mVariableNames.push_back("ICaL__O_star"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(1.23556404128518e-10); + + // rY[22]: + this->mVariableNames.push_back("ICaL__CI"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(5.89853003114132e-11); + + // rY[23]: + this->mVariableNames.push_back("ICaL__OI"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(8.01952813127322e-17); + + // rY[24]: + this->mVariableNames.push_back("ICaL__CI_star"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(1.9237001017021e-09); + + // rY[25]: + this->mVariableNames.push_back("membrane_fast_sodium_current_m_gate"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.00101841101248412); + + // rY[26]: + this->mVariableNames.push_back("membrane_fast_sodium_current_h_gate"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.991354143386887); + + // rY[27]: + this->mVariableNames.push_back("membrane_fast_sodium_current_j_gate"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.99709036251243); + + // rY[28]: + this->mVariableNames.push_back("INaL_mL_gate__mL"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.00101841101248412); + + // rY[29]: + this->mVariableNames.push_back("INaL_hL_gate__hL"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.319611809402137); + + // rY[30]: + this->mVariableNames.push_back("IKr_xr_gate__xr"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(4.06959064407486e-06); + + // rY[31]: + this->mVariableNames.push_back("Ito1_a_gate__a"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(1.76776038804228e-05); + + // rY[32]: + this->mVariableNames.push_back("Ito1_i1f_gate__i1f"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.997976503910799); + + // rY[33]: + this->mVariableNames.push_back("Ito1_i1s_gate__i1s"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.947581184798815); + + // rY[34]: + this->mVariableNames.push_back("Ito2_i2f_gate__i2f"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.996044894628276); + + // rY[35]: + this->mVariableNames.push_back("SR_release_current"); + this->mVariableUnits.push_back("mM_per_ms"); + this->mInitialConditions.push_back(0.000714227102027745); + + // rY[36]: + this->mVariableNames.push_back("Ca__Ca_JSR"); + this->mVariableUnits.push_back("mM"); + this->mInitialConditions.push_back(0.993914988616979); + + // rY[37]: + this->mVariableNames.push_back("Ca__Ca_NSR"); + this->mVariableUnits.push_back("mM"); + this->mInitialConditions.push_back(1.01475649943057); + + // rY[38]: + this->mVariableNames.push_back("Ca__Ca_ss_sr"); + this->mVariableUnits.push_back("mM"); + this->mInitialConditions.push_back(0.00011296707102434); + + // rY[39]: + this->mVariableNames.push_back("Ca__Ca_ss_CaL"); + this->mVariableUnits.push_back("mM"); + this->mInitialConditions.push_back(0.000119239795531548); + + // rY[40]: + this->mVariableNames.push_back("cytosolic_sodium_concentration"); + this->mVariableUnits.push_back("mM"); + this->mInitialConditions.push_back(8.01031392415197); + + // rY[41]: + this->mVariableNames.push_back("dyadic_space_sodium_concentration"); + this->mVariableUnits.push_back("mM"); + this->mInitialConditions.push_back(8.01033434859049); + + // rY[42]: + this->mVariableNames.push_back("cytosolic_chloride_concentration"); + this->mVariableUnits.push_back("mM"); + this->mInitialConditions.push_back(20.6683603724432); + + // rY[43]: + this->mVariableNames.push_back("dyadic_space_chloride_concentration"); + this->mVariableUnits.push_back("mM"); + this->mInitialConditions.push_back(20.6683605553303); + + // rY[44]: + this->mVariableNames.push_back("cytosolic_potassium_concentration"); + this->mVariableUnits.push_back("mM"); + this->mInitialConditions.push_back(144.907134343314); + + // rY[45]: + this->mVariableNames.push_back("CaMK_active__CaMK_trap"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.0114911034744777); + + // mParameters[0]: + this->mParameterNames.push_back("SR_leak_current_max"); + this->mParameterUnits.push_back("mM_per_ms"); + + // mParameters[1]: + this->mParameterNames.push_back("SR_release_current_max"); + this->mParameterUnits.push_back("mM_per_uA_per_uF_per_ms_per_ms"); + + // mParameters[2]: + this->mParameterNames.push_back("SR_uptake_current_max"); + this->mParameterUnits.push_back("mM_per_ms"); + + // mParameters[3]: + this->mParameterNames.push_back("extracellular_calcium_concentration"); + this->mParameterUnits.push_back("mM"); + + // mParameters[4]: + this->mParameterNames.push_back("extracellular_potassium_concentration"); + this->mParameterUnits.push_back("mM"); + + // mParameters[5]: + this->mParameterNames.push_back("extracellular_sodium_concentration"); + this->mParameterUnits.push_back("mM"); + + // mParameters[6]: + this->mParameterNames.push_back("membrane_L_type_calcium_current_conductance"); + this->mParameterUnits.push_back("L_per_F_ms"); + + // mParameters[7]: + this->mParameterNames.push_back("membrane_background_calcium_current_conductance"); + this->mParameterUnits.push_back("L_per_F_ms"); + + // mParameters[8]: + this->mParameterNames.push_back("membrane_background_chloride_current_conductance"); + this->mParameterUnits.push_back("mS_per_uF"); + + // mParameters[9]: + this->mParameterNames.push_back("membrane_background_sodium_current_conductance"); + this->mParameterUnits.push_back("L_per_F_ms"); + + // mParameters[10]: + this->mParameterNames.push_back("membrane_calcium_pump_current_conductance"); + this->mParameterUnits.push_back("uA_per_uF"); + + // mParameters[11]: + this->mParameterNames.push_back("membrane_fast_sodium_current_conductance"); + this->mParameterUnits.push_back("mS_per_uF"); + + // mParameters[12]: + this->mParameterNames.push_back("membrane_inward_rectifier_potassium_current_conductance"); + this->mParameterUnits.push_back("mS_per_uF"); + + // mParameters[13]: + this->mParameterNames.push_back("membrane_persistent_sodium_current_conductance"); + this->mParameterUnits.push_back("mS_per_uF"); + + // mParameters[14]: + this->mParameterNames.push_back("membrane_potassium_pump_current_conductance"); + this->mParameterUnits.push_back("mS_per_uF"); + + // mParameters[15]: + this->mParameterNames.push_back("membrane_rapid_delayed_rectifier_potassium_current_conductance"); + this->mParameterUnits.push_back("mS_per_uF"); + + // mParameters[16]: + this->mParameterNames.push_back("membrane_slow_delayed_rectifier_potassium_current_conductance"); + this->mParameterUnits.push_back("mS_per_uF"); + + // mParameters[17]: + this->mParameterNames.push_back("membrane_sodium_calcium_exchanger_current_conductance"); + this->mParameterUnits.push_back("uA_per_uF"); + + // mParameters[18]: + this->mParameterNames.push_back("membrane_sodium_potassium_pump_current_permeability"); + this->mParameterUnits.push_back("uA_per_uF"); + + // mParameters[19]: + this->mParameterNames.push_back("membrane_transient_outward_chloride_current_conductance"); + this->mParameterUnits.push_back("L_per_F_ms"); + + // mParameters[20]: + this->mParameterNames.push_back("membrane_transient_outward_current_conductance"); + this->mParameterUnits.push_back("mS_per_uF"); + + // Derived Quantity index [0]: + this->mDerivedQuantityNames.push_back("SR_leak_current"); + this->mDerivedQuantityUnits.push_back("mM_per_ms"); + + // Derived Quantity index [1]: + this->mDerivedQuantityNames.push_back("SR_uptake_current"); + this->mDerivedQuantityUnits.push_back("mM_per_ms"); + + // Derived Quantity index [2]: + this->mDerivedQuantityNames.push_back("membrane_L_type_calcium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [3]: + this->mDerivedQuantityNames.push_back("membrane_background_calcium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [4]: + this->mDerivedQuantityNames.push_back("membrane_background_chloride_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [5]: + this->mDerivedQuantityNames.push_back("membrane_background_sodium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [6]: + this->mDerivedQuantityNames.push_back("membrane_calcium_pump_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [7]: + this->mDerivedQuantityNames.push_back("membrane_fast_sodium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [8]: + this->mDerivedQuantityNames.push_back("membrane_inward_rectifier_potassium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [9]: + this->mDerivedQuantityNames.push_back("membrane_persistent_sodium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [10]: + this->mDerivedQuantityNames.push_back("membrane_potassium_pump_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [11]: + this->mDerivedQuantityNames.push_back("membrane_rapid_delayed_rectifier_potassium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [12]: + this->mDerivedQuantityNames.push_back("membrane_slow_delayed_rectifier_potassium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [13]: + this->mDerivedQuantityNames.push_back("membrane_sodium_calcium_exchanger_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [14]: + this->mDerivedQuantityNames.push_back("membrane_sodium_calcium_exchanger_dyadic_space_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [15]: + this->mDerivedQuantityNames.push_back("membrane_sodium_potassium_pump_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [16]: + this->mDerivedQuantityNames.push_back("membrane_stimulus_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [17]: + this->mDerivedQuantityNames.push_back("membrane_transient_outward_chloride_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [18]: + this->mDerivedQuantityNames.push_back("membrane_transient_outward_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [19]: + this->mDerivedQuantityNames.push_back("time"); + this->mDerivedQuantityUnits.push_back("ms"); + + this->mInitialised = true; +} + +// Serialization for Boost >= 1.36 +#include "SerializationExportWrapperForCpp.hpp" +CHASTE_CLASS_EXPORT(Celldecker_2009FromCellMLBackwardEulerOpt) + diff --git a/chaste_codegen/tests/numerical/baseline/BEopt/decker_2009.hpp b/chaste_codegen/tests/numerical/baseline/BEopt/decker_2009.hpp new file mode 100644 index 00000000..7e6a4c75 --- /dev/null +++ b/chaste_codegen/tests/numerical/baseline/BEopt/decker_2009.hpp @@ -0,0 +1,88 @@ +#ifndef CELLDECKER_2009FROMCELLMLBACKWARDEULEROPT_HPP_ +#define CELLDECKER_2009FROMCELLMLBACKWARDEULEROPT_HPP_ + +//! @file +//! +//! This source file was generated from CellML by chaste_codegen version (version omitted as unimportant) +//! +//! Model: decker_2009 +//! +//! Processed by chaste_codegen: https://github.com/ModellingWebLab/chaste-codegen +//! (translator: chaste_codegen, model type: BackwardEulerOpt) +//! on (date omitted as unimportant) +//! +//! + +#include "ChasteSerialization.hpp" +#include +#include "AbstractStimulusFunction.hpp" +#include "AbstractBackwardEulerCardiacCell.hpp" + +class Celldecker_2009FromCellMLBackwardEulerOpt : public AbstractBackwardEulerCardiacCell<35> +{ + friend class boost::serialization::access; + template + void serialize(Archive & archive, const unsigned int version) + { + archive & boost::serialization::base_object >(*this); + + } + + // + // Settable parameters and readable variables + // + + +private: +const bool is_concentration[46] = {false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, true, true, true, true, false}; +const bool is_probability[46] = {false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, true, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false}; +public: + + boost::shared_ptr UseCellMLDefaultStimulus(); + double GetIntracellularCalciumConcentration(); + Celldecker_2009FromCellMLBackwardEulerOpt(boost::shared_ptr /* unused; should be empty */, boost::shared_ptr pIntracellularStimulus); + ~Celldecker_2009FromCellMLBackwardEulerOpt(); + void VerifyStateVariables(); + AbstractLookupTableCollection* GetLookupTableCollection(); + double GetIIonic(const std::vector* pStateVariables=NULL);void ComputeResidual(double var_chaste_interface__environment__time, const double rCurrentGuess[35], double rResidual[35]); + void ComputeJacobian(double var_chaste_interface__environment__time, const double rCurrentGuess[35], double rJacobian[35][35]);protected: + void UpdateTransmembranePotential(double var_chaste_interface__environment__time); + void ComputeOneStepExceptVoltage(double var_chaste_interface__environment__time); + + std::vector ComputeDerivedQuantities(double var_chaste_interface__environment__time, const std::vector & rY); +}; + +// Needs to be included last +#include "SerializationExportWrapper.hpp" +CHASTE_CLASS_EXPORT(Celldecker_2009FromCellMLBackwardEulerOpt) + +namespace boost +{ + namespace serialization + { + template + inline void save_construct_data( + Archive & ar, const Celldecker_2009FromCellMLBackwardEulerOpt * t, const unsigned int fileVersion) + { + const boost::shared_ptr p_solver = t->GetSolver(); + const boost::shared_ptr p_stimulus = t->GetStimulusFunction(); + ar << p_solver; + ar << p_stimulus; + } + + template + inline void load_construct_data( + Archive & ar, Celldecker_2009FromCellMLBackwardEulerOpt * t, const unsigned int fileVersion) + { + boost::shared_ptr p_solver; + boost::shared_ptr p_stimulus; + ar >> p_solver; + ar >> p_stimulus; + ::new(t)Celldecker_2009FromCellMLBackwardEulerOpt(p_solver, p_stimulus); + } + + } + +} + +#endif // CELLDECKER_2009FROMCELLMLBACKWARDEULEROPT_HPP_ \ No newline at end of file diff --git a/chaste_codegen/tests/numerical/baseline/BEopt/dynamic_courtemanche_ramirez_nattel_1998.cpp b/chaste_codegen/tests/numerical/baseline/BEopt/dynamic_courtemanche_ramirez_nattel_1998.cpp new file mode 100644 index 00000000..6837116a --- /dev/null +++ b/chaste_codegen/tests/numerical/baseline/BEopt/dynamic_courtemanche_ramirez_nattel_1998.cpp @@ -0,0 +1,1464 @@ +//! @file +//! +//! This source file was generated from CellML by chaste_codegen version (version omitted as unimportant) +//! +//! Model: courtemanche_1998 +//! +//! Processed by chaste_codegen: https://github.com/ModellingWebLab/chaste-codegen +//! (translator: chaste_codegen, model type: BackwardEulerOpt) +//! on (date omitted as unimportant) +//! +//! + +#include "CardiacNewtonSolver.hpp" +#include "dynamic_courtemanche_ramirez_nattel_1998.hpp" +#include +#include +#include +#include +#include "Exception.hpp" +#include "OdeSystemInformation.hpp" +#include "RegularStimulus.hpp" +#include "HeartConfig.hpp" +#include "IsNan.hpp" +#include "MathsCustomFunctions.hpp" + +#include "ModelFactory.hpp" + +AbstractBackwardEulerCardiacCell<8>* Dynamiccourtemanche_ramirez_nattel_1998FromCellMLBackwardEulerOpt::CreateMethod(boost::shared_ptr p_solver, boost::shared_ptr p_stimulus) { + return new Dynamiccourtemanche_ramirez_nattel_1998FromCellMLBackwardEulerOpt(p_solver, p_stimulus); +} + +bool Dynamiccourtemanche_ramirez_nattel_1998FromCellMLBackwardEulerOpt::registered = ModelFactory::Register("dynamic_courtemanche_ramirez_nattel_1998", "BackwardEulerOpt", (ModelFactory::TCreateMethod)Dynamiccourtemanche_ramirez_nattel_1998FromCellMLBackwardEulerOpt::CreateMethod); + +class Dynamiccourtemanche_ramirez_nattel_1998FromCellMLBackwardEulerOpt_LookupTables : public AbstractLookupTableCollection +{ +public: + static Dynamiccourtemanche_ramirez_nattel_1998FromCellMLBackwardEulerOpt_LookupTables* Instance() + { + if (mpInstance.get() == NULL) + { + mpInstance.reset(new Dynamiccourtemanche_ramirez_nattel_1998FromCellMLBackwardEulerOpt_LookupTables); + } + return mpInstance.get(); + } + + void FreeMemory() + { + + if (_lookup_table_0) + { + delete[] _lookup_table_0; + _lookup_table_0 = NULL; + } + + mNeedsRegeneration.assign(mNeedsRegeneration.size(), true); + } + + // Row lookup methods + // using linear-interpolation + + double* _lookup_0_row(unsigned i, double _factor_) + { + for (unsigned j=0; j<27; j++) + { + const double y1 = _lookup_table_0[i][j]; + const double y2 = _lookup_table_0[i+1][j]; + _lookup_table_0_row[j] = y1 + (y2-y1)*_factor_; + } + return _lookup_table_0_row; + } + + + const double * IndexTable0(double var_chaste_interface__membrane__V) + { + const double _offset_0 = var_chaste_interface__membrane__V - mTableMins[0]; + const double _offset_0_over_table_step = _offset_0 * mTableStepInverses[0]; + const unsigned _table_index_0 = (unsigned)(_offset_0_over_table_step); + const double _factor_0 = _offset_0_over_table_step - _table_index_0; + const double* const _lt_0_row = Dynamiccourtemanche_ramirez_nattel_1998FromCellMLBackwardEulerOpt_LookupTables::Instance()->_lookup_0_row(_table_index_0, _factor_0); + return _lt_0_row; + } + + +// LCOV_EXCL_START + bool CheckIndex0(double& var_chaste_interface__membrane__V) + { + bool _oob_0 = false; + if (var_chaste_interface__membrane__V>mTableMaxs[0] || var_chaste_interface__membrane__V= 2){ + EXCEPTION("Lookup table 9 at ["<= 2){ + EXCEPTION("Lookup table 11 at ["<= 2){ + EXCEPTION("Lookup table 14 at ["< mpInstance; + + // Row lookup methods memory + double _lookup_table_0_row[27]; + + // Lookup tables + double (*_lookup_table_0)[27]; + int _lookup_table_0_num_misshit_piecewise[27] = {0}; + +}; + +std::shared_ptr Dynamiccourtemanche_ramirez_nattel_1998FromCellMLBackwardEulerOpt_LookupTables::mpInstance; + + + boost::shared_ptr Dynamiccourtemanche_ramirez_nattel_1998FromCellMLBackwardEulerOpt::UseCellMLDefaultStimulus() + { + // Use the default stimulus specified by CellML metadata + const double var_chaste_interface__membrane__stim_amplitude_converted = -2000 * HeartConfig::Instance()->GetCapacitance() / mParameters[9]; // uA_per_cm2 + const double var_chaste_interface__membrane__stim_duration = 2; // millisecond + const double var_chaste_interface__membrane__stim_period = 1000; // millisecond + const double var_chaste_interface__membrane__stim_start = 100; // millisecond + boost::shared_ptr p_cellml_stim(new RegularStimulus( + -fabs(var_chaste_interface__membrane__stim_amplitude_converted), + var_chaste_interface__membrane__stim_duration, + var_chaste_interface__membrane__stim_period, + var_chaste_interface__membrane__stim_start + )); + mpIntracellularStimulus = p_cellml_stim; + return p_cellml_stim; + } + double Dynamiccourtemanche_ramirez_nattel_1998FromCellMLBackwardEulerOpt::GetIntracellularCalciumConcentration() + { + return mStateVariables[1]; + } + Dynamiccourtemanche_ramirez_nattel_1998FromCellMLBackwardEulerOpt::Dynamiccourtemanche_ramirez_nattel_1998FromCellMLBackwardEulerOpt(boost::shared_ptr /* unused; should be empty */, boost::shared_ptr pIntracellularStimulus) + : AbstractBackwardEulerCardiacCell<8>( + 21, + 0, + pIntracellularStimulus) + { + // Time units: millisecond + // + this->mpSystemInfo = OdeSystemInformation::Instance(); + Init(); + + // We have a default stimulus specified in the CellML file metadata + this->mHasDefaultStimulusFromCellML = true; + + this->mParameters[0] = 1; // (var_Ca_leak_current_by_the_NSR__leak_factor) [dimensionless] + this->mParameters[1] = 30; // (var_Ca_release_current_from_JSR__K_rel) [per_millisecond] + this->mParameters[2] = 0.0050000000000000001; // (var_Ca_uptake_current_by_the_NSR__I_up_max) [millimolar_per_millisecond] + this->mParameters[3] = 1; // (var_intracellular_ion_concentrations__conc_clamp) [dimensionless] + this->mParameters[4] = 1.8; // (var_standard_ionic_concentrations__Ca_o) [millimolar] + this->mParameters[5] = 5.4000000000000004; // (var_standard_ionic_concentrations__K_o) [millimolar] + this->mParameters[6] = 140; // (var_standard_ionic_concentrations__Na_o) [millimolar] + this->mParameters[7] = 0.12375; // (var_L_type_Ca_channel__g_Ca_L) [nanoS_per_picoF] + this->mParameters[8] = 2; // (var_L_type_Ca_channel_f_Ca_gate__tau_f_Ca) [millisecond] + this->mParameters[9] = 100; // (var_membrane__Cm) [picoF] + this->mParameters[10] = 7.7999999999999998; // (var_fast_sodium_current__g_Na) [nanoS_per_picoF] + this->mParameters[11] = 0; // (var_fast_sodium_current__perc_reduced_inact_for_IpNa) [dimensionless] + this->mParameters[12] = 0; // (var_fast_sodium_current__shift_INa_inact) [millivolt] + this->mParameters[13] = 0.089999999999999997; // (var_time_independent_potassium_current__g_K1) [nanoS_per_picoF] + this->mParameters[14] = 0.029411764999999999; // (var_rapid_delayed_rectifier_K_current__g_Kr) [nanoS_per_picoF] + this->mParameters[15] = 0.12941175999999999; // (var_slow_delayed_rectifier_K_current__g_Ks) [nanoS_per_picoF] + this->mParameters[16] = 1600; // (var_Na_Ca_exchanger_current__I_NaCa_max) [picoA_per_picoF] + this->mParameters[17] = 0.16520000000000001; // (var_transient_outward_K_current__g_to) [nanoS_per_picoF] + } + + Dynamiccourtemanche_ramirez_nattel_1998FromCellMLBackwardEulerOpt::~Dynamiccourtemanche_ramirez_nattel_1998FromCellMLBackwardEulerOpt() + { + } + + AbstractLookupTableCollection* Dynamiccourtemanche_ramirez_nattel_1998FromCellMLBackwardEulerOpt::GetLookupTableCollection() + { + return Dynamiccourtemanche_ramirez_nattel_1998FromCellMLBackwardEulerOpt_LookupTables::Instance(); + } + + void Dynamiccourtemanche_ramirez_nattel_1998FromCellMLBackwardEulerOpt::VerifyStateVariables() + { + std::vector& rY = rGetStateVariables(); + std::string error_message = ""; + + for (unsigned i=0; i < 21; i++) + { + if(std::isnan(rY[i])) + { + error_message += "State variable " + this->rGetStateVariableNames()[i] + " is not a number\n"; + } + if(std::isinf(rY[i])) + { + error_message += "State variable " + this->rGetStateVariableNames()[i] + " has become INFINITE\n"; + } + if(this->is_concentration[i] && rY[i] < 0) + { + error_message += "Concentration " + this->rGetStateVariableNames()[i] + " below 0\n"; + } + if(this->is_probability[i] && rY[i] < 0) + { + error_message += "Probability " + this->rGetStateVariableNames()[i] + " below 0\n"; + } + if(this->is_probability[i] && rY[i] > 1) + { + error_message += "Probability " + this->rGetStateVariableNames()[i] + " above 1\n"; + } + } + if (error_message != ""){ + EXCEPTION(DumpState(error_message)); + } + } + + double Dynamiccourtemanche_ramirez_nattel_1998FromCellMLBackwardEulerOpt::GetIIonic(const std::vector* pStateVariables) + { + // For state variable interpolation (SVI) we read in interpolated state variables, + // otherwise for ionic current interpolation (ICI) we use the state variables of this model (node). + if (!pStateVariables) pStateVariables = &rGetStateVariables(); + const std::vector& rY = *pStateVariables; + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -81.18 + double var_chaste_interface__intracellular_ion_concentrations__Ca_i = rY[1]; + // Units: millimolar; Initial value: 0.0001013 + double var_chaste_interface__fast_sodium_current_m_gate__m = rY[2]; + // Units: dimensionless; Initial value: 0.002908 + double var_chaste_interface__fast_sodium_current_h_gate__h = rY[3]; + // Units: dimensionless; Initial value: 0.9649 + double var_chaste_interface__fast_sodium_current_j_gate__j = rY[4]; + // Units: dimensionless; Initial value: 0.9775 + double var_chaste_interface__transient_outward_K_current_oa_gate__oa = rY[5]; + // Units: dimensionless; Initial value: 0.03043 + double var_chaste_interface__transient_outward_K_current_oi_gate__oi = rY[6]; + // Units: dimensionless; Initial value: 0.9992 + double var_chaste_interface__ultrarapid_delayed_rectifier_K_current_ua_gate__ua = rY[7]; + // Units: dimensionless; Initial value: 0.004966 + double var_chaste_interface__ultrarapid_delayed_rectifier_K_current_ui_gate__ui = rY[8]; + // Units: dimensionless; Initial value: 0.9986 + double var_chaste_interface__rapid_delayed_rectifier_K_current_xr_gate__xr = rY[9]; + // Units: dimensionless; Initial value: 3.296e-05 + double var_chaste_interface__slow_delayed_rectifier_K_current_xs_gate__xs = rY[10]; + // Units: dimensionless; Initial value: 0.01869 + double var_chaste_interface__L_type_Ca_channel_d_gate__d = rY[11]; + // Units: dimensionless; Initial value: 0.0001367 + double var_chaste_interface__L_type_Ca_channel_f_gate__f = rY[12]; + // Units: dimensionless; Initial value: 0.9996 + double var_chaste_interface__L_type_Ca_channel_f_Ca_gate__f_Ca = rY[13]; + // Units: dimensionless; Initial value: 0.7755 + double var_chaste_interface__intracellular_ion_concentrations__Na_i = rY[17]; + // Units: millimolar; Initial value: 11.17 + double var_chaste_interface__intracellular_ion_concentrations__K_i = rY[18]; + // Units: millimolar; Initial value: 139.0 + + // Lookup table indexing + const bool _oob_0 = Dynamiccourtemanche_ramirez_nattel_1998FromCellMLBackwardEulerOpt_LookupTables::Instance()->CheckIndex0(var_chaste_interface__membrane__V); +// LCOV_EXCL_START + if (_oob_0) + EXCEPTION(DumpState("membrane_voltage outside lookup table range", rY)); +// LCOV_EXCL_STOP + const double* const _lt_0_row = Dynamiccourtemanche_ramirez_nattel_1998FromCellMLBackwardEulerOpt_LookupTables::Instance()->IndexTable0(var_chaste_interface__membrane__V); + + const double var_membrane__Cm_converted = 9.9999999999999995e-7 * mParameters[9]; // uF + const double var_L_type_Ca_channel__i_Ca_L_converted = 9.9999999999999995e-7 * (-65 + var_chaste_interface__membrane__V) * HeartConfig::Instance()->GetCapacitance() * mParameters[7] * var_chaste_interface__L_type_Ca_channel_d_gate__d * var_chaste_interface__L_type_Ca_channel_f_Ca_gate__f_Ca * var_chaste_interface__L_type_Ca_channel_f_gate__f * mParameters[9] / var_membrane__Cm_converted; // uA_per_cm2 + const double var_sarcolemmal_calcium_pump_current__i_CaP = 0.27500000000000002 * var_chaste_interface__intracellular_ion_concentrations__Ca_i * mParameters[9] / (0.00050000000000000001 + var_chaste_interface__intracellular_ion_concentrations__Ca_i); // picoA + const double var_background_currents__i_B_Ca = 0.0011310000000000001 * (-13.356415961992688 * log(mParameters[4] / var_chaste_interface__intracellular_ion_concentrations__Ca_i) + var_chaste_interface__membrane__V) * mParameters[9]; // picoA + const double var_Na_Ca_exchanger_current__i_NaCa_converted = 9.9999999999999995e-7 * (pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, 3) * mParameters[4] * _lt_0_row[0] - pow(mParameters[6], 3) * var_chaste_interface__intracellular_ion_concentrations__Ca_i * _lt_0_row[1]) * HeartConfig::Instance()->GetCapacitance() * mParameters[16] * mParameters[9] / ((_lt_0_row[2]) * (669921.875 + pow(mParameters[6], 3)) * (1.3799999999999999 + mParameters[4]) * var_membrane__Cm_converted); // uA_per_cm2 + const double var_fast_sodium_current__E_Na = 26.712831923985377 * log(mParameters[6] / var_chaste_interface__intracellular_ion_concentrations__Na_i); // millivolt + const double var_background_currents__i_B_Na = 0.00067443750000000002 * (-var_fast_sodium_current__E_Na + var_chaste_interface__membrane__V) * mParameters[9]; // picoA + const double var_fast_sodium_current__i_Na_converted = 9.9999999999999995e-7 * pow(var_chaste_interface__fast_sodium_current_m_gate__m, 3) * (-var_fast_sodium_current__E_Na + var_chaste_interface__membrane__V) * HeartConfig::Instance()->GetCapacitance() * mParameters[10] * var_chaste_interface__fast_sodium_current_h_gate__h * var_chaste_interface__fast_sodium_current_j_gate__j * mParameters[9] / var_membrane__Cm_converted; // uA_per_cm2 + const double var_sodium_potassium_pump__i_NaK = 0.59933873999999998 * mParameters[9] * mParameters[5] / ((1 + 31.622776601683793 * pow((1 / var_chaste_interface__intracellular_ion_concentrations__Na_i), 1.5)) * (1.5 + mParameters[5]) * (1 + _lt_0_row[4] + 0.036499999999999998 * (-0.14285714285714285 + 0.14285714285714285 * exp(0.01485884101040119 * mParameters[6])) * _lt_0_row[3])); // picoA + const double var_time_independent_potassium_current__E_K = 26.712831923985377 * log(mParameters[5] / var_chaste_interface__intracellular_ion_concentrations__K_i); // millivolt + const double var_rapid_delayed_rectifier_K_current__i_Kr_converted = 9.9999999999999995e-7 * (-var_time_independent_potassium_current__E_K + var_chaste_interface__membrane__V) * HeartConfig::Instance()->GetCapacitance() * mParameters[9] * mParameters[14] * var_chaste_interface__rapid_delayed_rectifier_K_current_xr_gate__xr / ((_lt_0_row[5]) * var_membrane__Cm_converted); // uA_per_cm2 + const double var_slow_delayed_rectifier_K_current__i_Ks_converted = 9.9999999999999995e-7 * pow(var_chaste_interface__slow_delayed_rectifier_K_current_xs_gate__xs, 2) * (-var_time_independent_potassium_current__E_K + var_chaste_interface__membrane__V) * HeartConfig::Instance()->GetCapacitance() * mParameters[9] * mParameters[15] / var_membrane__Cm_converted; // uA_per_cm2 + const double var_time_independent_potassium_current__i_K1_converted = 9.9999999999999995e-7 * (-var_time_independent_potassium_current__E_K + var_chaste_interface__membrane__V) * HeartConfig::Instance()->GetCapacitance() * mParameters[9] * mParameters[13] / ((_lt_0_row[6]) * var_membrane__Cm_converted); // uA_per_cm2 + const double var_transient_outward_K_current__i_to_converted = 9.9999999999999995e-7 * pow(var_chaste_interface__transient_outward_K_current_oa_gate__oa, 3) * (-var_time_independent_potassium_current__E_K + var_chaste_interface__membrane__V) * HeartConfig::Instance()->GetCapacitance() * mParameters[9] * mParameters[17] * var_chaste_interface__transient_outward_K_current_oi_gate__oi / var_membrane__Cm_converted; // uA_per_cm2 + const double var_ultrarapid_delayed_rectifier_K_current__i_Kur = pow(var_chaste_interface__ultrarapid_delayed_rectifier_K_current_ua_gate__ua, 3) * (_lt_0_row[7]) * (-var_time_independent_potassium_current__E_K + var_chaste_interface__membrane__V) * mParameters[9] * var_chaste_interface__ultrarapid_delayed_rectifier_K_current_ui_gate__ui; // picoA + const double var_chaste_interface__i_ionic = ((var_L_type_Ca_channel__i_Ca_L_converted + var_Na_Ca_exchanger_current__i_NaCa_converted + var_fast_sodium_current__i_Na_converted + var_rapid_delayed_rectifier_K_current__i_Kr_converted + var_slow_delayed_rectifier_K_current__i_Ks_converted + var_time_independent_potassium_current__i_K1_converted + var_transient_outward_K_current__i_to_converted) * var_membrane__Cm_converted + 9.9999999999999995e-7 * HeartConfig::Instance()->GetCapacitance() * var_background_currents__i_B_Ca + 9.9999999999999995e-7 * HeartConfig::Instance()->GetCapacitance() * var_background_currents__i_B_Na + 9.9999999999999995e-7 * HeartConfig::Instance()->GetCapacitance() * var_sarcolemmal_calcium_pump_current__i_CaP + 9.9999999999999995e-7 * HeartConfig::Instance()->GetCapacitance() * var_sodium_potassium_pump__i_NaK + 9.9999999999999995e-7 * HeartConfig::Instance()->GetCapacitance() * var_ultrarapid_delayed_rectifier_K_current__i_Kur) / var_membrane__Cm_converted; // uA_per_cm2 + + const double i_ionic = var_chaste_interface__i_ionic; + EXCEPT_IF_NOT(!std::isnan(i_ionic)); + return i_ionic; + } + + void Dynamiccourtemanche_ramirez_nattel_1998FromCellMLBackwardEulerOpt::ComputeResidual(double var_chaste_interface__environment__time, const double rCurrentGuess[8], double rResidual[8]) + { + std::vector& rY = rGetStateVariables(); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -81.18 + double var_chaste_interface__fast_sodium_current_m_gate__m = rY[2]; + // Units: dimensionless; Initial value: 0.002908 + double var_chaste_interface__fast_sodium_current_h_gate__h = rY[3]; + // Units: dimensionless; Initial value: 0.9649 + double var_chaste_interface__fast_sodium_current_j_gate__j = rY[4]; + // Units: dimensionless; Initial value: 0.9775 + double var_chaste_interface__transient_outward_K_current_oa_gate__oa = rY[5]; + // Units: dimensionless; Initial value: 0.03043 + double var_chaste_interface__transient_outward_K_current_oi_gate__oi = rY[6]; + // Units: dimensionless; Initial value: 0.9992 + double var_chaste_interface__ultrarapid_delayed_rectifier_K_current_ua_gate__ua = rY[7]; + // Units: dimensionless; Initial value: 0.004966 + double var_chaste_interface__ultrarapid_delayed_rectifier_K_current_ui_gate__ui = rY[8]; + // Units: dimensionless; Initial value: 0.9986 + double var_chaste_interface__rapid_delayed_rectifier_K_current_xr_gate__xr = rY[9]; + // Units: dimensionless; Initial value: 3.296e-05 + double var_chaste_interface__slow_delayed_rectifier_K_current_xs_gate__xs = rY[10]; + // Units: dimensionless; Initial value: 0.01869 + double var_chaste_interface__L_type_Ca_channel_d_gate__d = rY[11]; + // Units: dimensionless; Initial value: 0.0001367 + double var_chaste_interface__L_type_Ca_channel_f_gate__f = rY[12]; + // Units: dimensionless; Initial value: 0.9996 + double var_chaste_interface__Ca_release_current_from_JSR_w_gate__w = rY[16]; + // Units: dimensionless; Initial value: 0.9992 + + //output_nonlinear_state_assignments + double var_chaste_interface__Ca_release_current_from_JSR_u_gate__u = rCurrentGuess[0]; + double var_chaste_interface__Ca_release_current_from_JSR_v_gate__v = rCurrentGuess[1]; + double var_chaste_interface__L_type_Ca_channel_f_Ca_gate__f_Ca = rCurrentGuess[2]; + double var_chaste_interface__intracellular_ion_concentrations__Ca_i = rCurrentGuess[3]; + double var_chaste_interface__intracellular_ion_concentrations__Ca_rel = rCurrentGuess[4]; + double var_chaste_interface__intracellular_ion_concentrations__Ca_up = rCurrentGuess[5]; + double var_chaste_interface__intracellular_ion_concentrations__K_i = rCurrentGuess[6]; + double var_chaste_interface__intracellular_ion_concentrations__Na_i = rCurrentGuess[7]; + + // Lookup table indexing + const bool _oob_0 = Dynamiccourtemanche_ramirez_nattel_1998FromCellMLBackwardEulerOpt_LookupTables::Instance()->CheckIndex0(var_chaste_interface__membrane__V); +// LCOV_EXCL_START + if (_oob_0) + EXCEPTION(DumpState("membrane_voltage outside lookup table range", rY , var_chaste_interface__environment__time)); +// LCOV_EXCL_STOP + const double* const _lt_0_row = Dynamiccourtemanche_ramirez_nattel_1998FromCellMLBackwardEulerOpt_LookupTables::Instance()->IndexTable0(var_chaste_interface__membrane__V); + + //output_equations + const double var_Ca_uptake_current_by_the_NSR__i_up = mParameters[2] / (1 + 0.00092000000000000003 / var_chaste_interface__intracellular_ion_concentrations__Ca_i); // millimolar_per_millisecond + const double d_dt_chaste_interface_var_L_type_Ca_channel_f_Ca_gate__f_Ca = (1 / (1 + 2857.1428571428573 * var_chaste_interface__intracellular_ion_concentrations__Ca_i) - var_chaste_interface__L_type_Ca_channel_f_Ca_gate__f_Ca) / mParameters[8]; // 1 / millisecond + const double var_Ca_release_current_from_JSR__i_rel = pow(var_chaste_interface__Ca_release_current_from_JSR_u_gate__u, 2) * (-var_chaste_interface__intracellular_ion_concentrations__Ca_i + var_chaste_interface__intracellular_ion_concentrations__Ca_rel) * mParameters[1] * var_chaste_interface__Ca_release_current_from_JSR_v_gate__v * var_chaste_interface__Ca_release_current_from_JSR_w_gate__w; // millimolar_per_millisecond + const double var_Ca_leak_current_by_the_NSR__i_up_leak = 0.066666666666666666 * mParameters[0] * mParameters[2] * var_chaste_interface__intracellular_ion_concentrations__Ca_up; // millimolar_per_millisecond + const double var_L_type_Ca_channel__i_Ca_L = (-65 + var_chaste_interface__membrane__V) * mParameters[7] * var_chaste_interface__L_type_Ca_channel_d_gate__d * var_chaste_interface__L_type_Ca_channel_f_Ca_gate__f_Ca * var_chaste_interface__L_type_Ca_channel_f_gate__f * mParameters[9]; // picoA + const double var_sarcolemmal_calcium_pump_current__i_CaP = 0.27500000000000002 * var_chaste_interface__intracellular_ion_concentrations__Ca_i * mParameters[9] / (0.00050000000000000001 + var_chaste_interface__intracellular_ion_concentrations__Ca_i); // picoA + const double var_background_currents__i_B_Ca = 0.0011310000000000001 * (-13.356415961992688 * log(mParameters[4] / var_chaste_interface__intracellular_ion_concentrations__Ca_i) + var_chaste_interface__membrane__V) * mParameters[9]; // picoA + const double var_Na_Ca_exchanger_current__i_NaCa = (pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, 3) * mParameters[4] * _lt_0_row[0] - pow(mParameters[6], 3) * var_chaste_interface__intracellular_ion_concentrations__Ca_i * _lt_0_row[1]) * mParameters[16] * mParameters[9] / ((_lt_0_row[2]) * (669921.875 + pow(mParameters[6], 3)) * (1.3799999999999999 + mParameters[4])); // picoA + const double var_Ca_release_current_from_JSR__Fn = 9.6479999999999999e-11 * var_Ca_release_current_from_JSR__i_rel + 1.0364122723649997e-15 * var_Na_Ca_exchanger_current__i_NaCa - 2.5910306809124992e-15 * var_L_type_Ca_channel__i_Ca_L; // dimensionless + const double d_dt_chaste_interface_var_Ca_release_current_from_JSR_u_gate__u = 0.125 / (1 + exp(250 - 731528895391368.0 * var_Ca_release_current_from_JSR__Fn)) - 0.125 * var_chaste_interface__Ca_release_current_from_JSR_u_gate__u; // 1 / millisecond + const double d_dt_chaste_interface_var_Ca_release_current_from_JSR_v_gate__v = (1 - 1 / (1 + exp(50 - 731528895391368.0 * var_Ca_release_current_from_JSR__Fn)) - var_chaste_interface__Ca_release_current_from_JSR_v_gate__v) / (1.9099999999999999 + 2.0899999999999999 / (1 + exp(250 - 731528895391368.0 * var_Ca_release_current_from_JSR__Fn))); // 1 / millisecond + const double var_fast_sodium_current__E_Na = 26.712831923985377 * log(mParameters[6] / var_chaste_interface__intracellular_ion_concentrations__Na_i); // millivolt + const double var_background_currents__i_B_Na = 0.00067443750000000002 * (-var_fast_sodium_current__E_Na + var_chaste_interface__membrane__V) * mParameters[9]; // picoA + const double var_fast_sodium_current__i_Na = pow(var_chaste_interface__fast_sodium_current_m_gate__m, 3) * (-var_fast_sodium_current__E_Na + var_chaste_interface__membrane__V) * mParameters[10] * var_chaste_interface__fast_sodium_current_h_gate__h * var_chaste_interface__fast_sodium_current_j_gate__j * mParameters[9]; // picoA + const double d_dt_chaste_interface_var_intracellular_ion_concentrations__Ca_i = (0.081176470588235281 * var_Ca_leak_current_by_the_NSR__i_up_leak + 0.0070588235294117632 * var_Ca_release_current_from_JSR__i_rel + 7.5827646500219453e-7 * var_Na_Ca_exchanger_current__i_NaCa - 0.081176470588235281 * var_Ca_uptake_current_by_the_NSR__i_up - 3.7913823250109726e-7 * var_L_type_Ca_channel__i_Ca_L - 3.7913823250109726e-7 * var_background_currents__i_B_Ca - 3.7913823250109726e-7 * var_sarcolemmal_calcium_pump_current__i_CaP) / (1 + 0.00011900000000000002 / pow((0.0023800000000000002 + var_chaste_interface__intracellular_ion_concentrations__Ca_i), 2) + 3.5000000000000004e-5 / pow((0.00050000000000000001 + var_chaste_interface__intracellular_ion_concentrations__Ca_i), 2)); // millimolar / millisecond + const double var_sodium_potassium_pump__i_NaK = 0.59933873999999998 * mParameters[9] * mParameters[5] / ((1 + 31.622776601683793 * pow((1 / var_chaste_interface__intracellular_ion_concentrations__Na_i), 1.5)) * (1.5 + mParameters[5]) * (1 + _lt_0_row[4] + 0.036499999999999998 * (-0.14285714285714285 + 0.14285714285714285 * exp(0.01485884101040119 * mParameters[6])) * _lt_0_row[3])); // picoA + const double d_dt_chaste_interface_var_intracellular_ion_concentrations__Na_i = 7.5827646500219453e-7 * (-var_background_currents__i_B_Na - var_fast_sodium_current__i_Na - 3 * var_Na_Ca_exchanger_current__i_NaCa - 3 * var_sodium_potassium_pump__i_NaK) * mParameters[3]; // millimolar / millisecond + const double var_time_independent_potassium_current__E_K = 26.712831923985377 * log(mParameters[5] / var_chaste_interface__intracellular_ion_concentrations__K_i); // millivolt + const double var_rapid_delayed_rectifier_K_current__i_Kr = (-var_time_independent_potassium_current__E_K + var_chaste_interface__membrane__V) * mParameters[9] * mParameters[14] * var_chaste_interface__rapid_delayed_rectifier_K_current_xr_gate__xr / (_lt_0_row[5]); // picoA + const double var_slow_delayed_rectifier_K_current__i_Ks = pow(var_chaste_interface__slow_delayed_rectifier_K_current_xs_gate__xs, 2) * (-var_time_independent_potassium_current__E_K + var_chaste_interface__membrane__V) * mParameters[9] * mParameters[15]; // picoA + const double var_time_independent_potassium_current__i_K1 = (-var_time_independent_potassium_current__E_K + var_chaste_interface__membrane__V) * mParameters[9] * mParameters[13] / (_lt_0_row[6]); // picoA + const double var_transfer_current_from_NSR_to_JSR__i_tr = 0.0055555555555555558 * var_chaste_interface__intracellular_ion_concentrations__Ca_up - 0.0055555555555555558 * var_chaste_interface__intracellular_ion_concentrations__Ca_rel; // millimolar_per_millisecond + const double d_dt_chaste_interface_var_intracellular_ion_concentrations__Ca_rel = (-var_Ca_release_current_from_JSR__i_rel + var_transfer_current_from_NSR_to_JSR__i_tr) / (1 + 8 / pow((0.80000000000000004 + var_chaste_interface__intracellular_ion_concentrations__Ca_rel), 2)); // millimolar / millisecond + const double d_dt_chaste_interface_var_intracellular_ion_concentrations__Ca_up = -var_Ca_leak_current_by_the_NSR__i_up_leak - 0.086956521739130432 * var_transfer_current_from_NSR_to_JSR__i_tr + var_Ca_uptake_current_by_the_NSR__i_up; // millimolar / millisecond + const double var_transient_outward_K_current__i_to = pow(var_chaste_interface__transient_outward_K_current_oa_gate__oa, 3) * (-var_time_independent_potassium_current__E_K + var_chaste_interface__membrane__V) * mParameters[9] * mParameters[17] * var_chaste_interface__transient_outward_K_current_oi_gate__oi; // picoA + const double var_ultrarapid_delayed_rectifier_K_current__i_Kur = pow(var_chaste_interface__ultrarapid_delayed_rectifier_K_current_ua_gate__ua, 3) * (_lt_0_row[7]) * (-var_time_independent_potassium_current__E_K + var_chaste_interface__membrane__V) * mParameters[9] * var_chaste_interface__ultrarapid_delayed_rectifier_K_current_ui_gate__ui; // picoA + const double d_dt_chaste_interface_var_intracellular_ion_concentrations__K_i = 7.5827646500219453e-7 * (-var_rapid_delayed_rectifier_K_current__i_Kr - var_slow_delayed_rectifier_K_current__i_Ks - var_time_independent_potassium_current__i_K1 - var_transient_outward_K_current__i_to - var_ultrarapid_delayed_rectifier_K_current__i_Kur + 2 * var_sodium_potassium_pump__i_NaK) * mParameters[3]; // millimolar / millisecond + + rResidual[3] = rCurrentGuess[3] - rY[1] - mDt*d_dt_chaste_interface_var_intracellular_ion_concentrations__Ca_i; + rResidual[2] = rCurrentGuess[2] - rY[13] - mDt*d_dt_chaste_interface_var_L_type_Ca_channel_f_Ca_gate__f_Ca; + rResidual[0] = rCurrentGuess[0] - rY[14] - mDt*d_dt_chaste_interface_var_Ca_release_current_from_JSR_u_gate__u; + rResidual[1] = rCurrentGuess[1] - rY[15] - mDt*d_dt_chaste_interface_var_Ca_release_current_from_JSR_v_gate__v; + rResidual[7] = rCurrentGuess[7] - rY[17] - mDt*d_dt_chaste_interface_var_intracellular_ion_concentrations__Na_i; + rResidual[6] = rCurrentGuess[6] - rY[18] - mDt*d_dt_chaste_interface_var_intracellular_ion_concentrations__K_i; + rResidual[4] = rCurrentGuess[4] - rY[19] - mDt*d_dt_chaste_interface_var_intracellular_ion_concentrations__Ca_rel; + rResidual[5] = rCurrentGuess[5] - rY[20] - mDt*d_dt_chaste_interface_var_intracellular_ion_concentrations__Ca_up; + } + + void Dynamiccourtemanche_ramirez_nattel_1998FromCellMLBackwardEulerOpt::ComputeJacobian(double var_chaste_interface__environment__time, const double rCurrentGuess[8], double rJacobian[8][8]) + { + std::vector& rY = rGetStateVariables(); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -81.18 + double var_chaste_interface__fast_sodium_current_m_gate__m = rY[2]; + // Units: dimensionless; Initial value: 0.002908 + double var_chaste_interface__fast_sodium_current_h_gate__h = rY[3]; + // Units: dimensionless; Initial value: 0.9649 + double var_chaste_interface__fast_sodium_current_j_gate__j = rY[4]; + // Units: dimensionless; Initial value: 0.9775 + double var_chaste_interface__transient_outward_K_current_oa_gate__oa = rY[5]; + // Units: dimensionless; Initial value: 0.03043 + double var_chaste_interface__transient_outward_K_current_oi_gate__oi = rY[6]; + // Units: dimensionless; Initial value: 0.9992 + double var_chaste_interface__ultrarapid_delayed_rectifier_K_current_ua_gate__ua = rY[7]; + // Units: dimensionless; Initial value: 0.004966 + double var_chaste_interface__ultrarapid_delayed_rectifier_K_current_ui_gate__ui = rY[8]; + // Units: dimensionless; Initial value: 0.9986 + double var_chaste_interface__rapid_delayed_rectifier_K_current_xr_gate__xr = rY[9]; + // Units: dimensionless; Initial value: 3.296e-05 + double var_chaste_interface__slow_delayed_rectifier_K_current_xs_gate__xs = rY[10]; + // Units: dimensionless; Initial value: 0.01869 + double var_chaste_interface__L_type_Ca_channel_d_gate__d = rY[11]; + // Units: dimensionless; Initial value: 0.0001367 + double var_chaste_interface__L_type_Ca_channel_f_gate__f = rY[12]; + // Units: dimensionless; Initial value: 0.9996 + double var_chaste_interface__Ca_release_current_from_JSR_w_gate__w = rY[16]; + // Units: dimensionless; Initial value: 0.9992 + + // Lookup table indexing + const bool _oob_0 = Dynamiccourtemanche_ramirez_nattel_1998FromCellMLBackwardEulerOpt_LookupTables::Instance()->CheckIndex0(var_chaste_interface__membrane__V); +// LCOV_EXCL_START + if (_oob_0) + EXCEPTION(DumpState("membrane_voltage outside lookup table range", rY , var_chaste_interface__environment__time)); +// LCOV_EXCL_STOP + const double* const _lt_0_row = Dynamiccourtemanche_ramirez_nattel_1998FromCellMLBackwardEulerOpt_LookupTables::Instance()->IndexTable0(var_chaste_interface__membrane__V); + + double var_chaste_interface__Ca_release_current_from_JSR_u_gate__u = rCurrentGuess[0]; + double var_chaste_interface__Ca_release_current_from_JSR_v_gate__v = rCurrentGuess[1]; + double var_chaste_interface__L_type_Ca_channel_f_Ca_gate__f_Ca = rCurrentGuess[2]; + double var_chaste_interface__intracellular_ion_concentrations__Ca_i = rCurrentGuess[3]; + double var_chaste_interface__intracellular_ion_concentrations__Ca_rel = rCurrentGuess[4]; + double var_chaste_interface__intracellular_ion_concentrations__Ca_up = rCurrentGuess[5]; + double var_chaste_interface__intracellular_ion_concentrations__K_i = rCurrentGuess[6]; + double var_chaste_interface__intracellular_ion_concentrations__Na_i = rCurrentGuess[7]; + + const double var_x0 = -var_chaste_interface__intracellular_ion_concentrations__Ca_i + var_chaste_interface__intracellular_ion_concentrations__Ca_rel; + const double var_x1 = pow(var_chaste_interface__Ca_release_current_from_JSR_u_gate__u, 2); + const double var_x2 = var_x1 * mParameters[1] * var_chaste_interface__Ca_release_current_from_JSR_w_gate__w; + const double var_x3 = var_x2 * var_chaste_interface__Ca_release_current_from_JSR_v_gate__v; + const double var_x4 = 70577.907827359188 * var_x3; + const double var_x5 = _lt_0_row[1]; + const double var_x6 = pow(mParameters[6], 3); + const double var_x7 = var_x5 * var_x6; + const double var_x8 = _lt_0_row[0]; + const double var_x9 = -var_x7 * var_chaste_interface__intracellular_ion_concentrations__Ca_i + var_x8 * pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, 3) * mParameters[4]; + const double var_x10 = 1 / (1 + 0.10000000000000001 * var_x5); + const double var_x11 = 1 / (669921.875 + var_x6); + const double var_x12 = 1 / (1.3799999999999999 + mParameters[4]); + const double var_x13 = var_x10 * var_x11 * var_x12 * mParameters[16]; + const double var_x14 = var_x13 * mParameters[9]; + const double var_x15 = -65 + var_chaste_interface__membrane__V; + const double var_x16 = var_x0 * var_x4 + 0.75816552477322585 * var_x14 * var_x9 - 1.8954138119330646 * var_x15 * mParameters[7] * var_chaste_interface__L_type_Ca_channel_d_gate__d * var_chaste_interface__L_type_Ca_channel_f_Ca_gate__f_Ca * var_chaste_interface__L_type_Ca_channel_f_gate__f * mParameters[9]; + const double var_x17 = exp(250 - var_x16); + const double var_x18 = 1 + var_x17; + const double var_x19 = var_x17 / pow(var_x18, 2); + const double var_x20 = var_x0 * mParameters[1] * var_chaste_interface__Ca_release_current_from_JSR_u_gate__u * var_chaste_interface__Ca_release_current_from_JSR_v_gate__v * var_chaste_interface__Ca_release_current_from_JSR_w_gate__w; + const double var_x21 = var_x19 * var_x20; + const double var_x22 = var_x0 * var_x2; + const double var_x23 = 8822.2384784198985 * var_x19; + const double var_x24 = mParameters[7] * var_chaste_interface__L_type_Ca_channel_d_gate__d * var_chaste_interface__L_type_Ca_channel_f_gate__f; + const double var_x25 = var_x24 * mParameters[9]; + const double var_x26 = var_x25 * (-123.20189777564919 + 1.8954138119330646 * var_chaste_interface__membrane__V); + const double var_x27 = var_x19 * var_x26; + const double var_x28 = var_x14 * var_x7; + const double var_x29 = var_x4 + 0.75816552477322585 * var_x28; + const double var_x30 = var_x19 * var_x29; + const double var_x31 = var_x8 * pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, 2) * mParameters[4]; + const double var_x32 = var_x14 * var_x31; + const double var_x33 = 1 / var_x18; + const double var_x34 = 1 / (1.9099999999999999 + 2.0899999999999999 * var_x33); + const double var_x35 = exp(50 - var_x16); + const double var_x36 = 1 + var_x35; + const double var_x37 = var_x35 / pow(var_x36, 2); + const double var_x38 = var_x34 * var_x37; + const double var_x39 = (1 - 1 / var_x36 - var_chaste_interface__Ca_release_current_from_JSR_v_gate__v) / pow((0.9138755980861244 + var_x33), 2); + const double var_x40 = var_x19 * var_x39; + const double var_x41 = 33769.333888688605 * var_x40; + const double var_x42 = 0.47846889952153115 * var_x39; + const double var_x43 = 1 / mParameters[8]; + const double var_x44 = 0.0023800000000000002 + var_chaste_interface__intracellular_ion_concentrations__Ca_i; + const double var_x45 = 0.00050000000000000001 + var_chaste_interface__intracellular_ion_concentrations__Ca_i; + const double var_x46 = pow(var_x45, (-2)); + const double var_x47 = 1 + 0.00011900000000000002 / pow(var_x44, 2) + 3.5000000000000004e-5 * var_x46; + const double var_x48 = 1 / var_x47; + const double var_x49 = var_x48 * mParameters[9]; + const double var_x50 = 1 / var_chaste_interface__intracellular_ion_concentrations__Ca_i; + const double var_x51 = 1.0426301393780176e-7 * mParameters[9] / var_x45; + const double var_x52 = 1 + 0.00092000000000000003 * var_x50; + const double var_x53 = mParameters[2] / (pow(var_x52, 2) * pow(var_chaste_interface__intracellular_ion_concentrations__Ca_i, 2)); + const double var_x54 = 0.0070588235294117632 * var_x3; + const double var_x55 = mParameters[0] * mParameters[2]; + const double var_x56 = 0.80000000000000004 + var_chaste_interface__intracellular_ion_concentrations__Ca_rel; + const double var_x57 = pow(var_x56, (-2)); + const double var_x58 = 1 / (1 + 8 * var_x57); + const double var_x59 = 2.0255711761517402e-5 * mParameters[9] / var_chaste_interface__intracellular_ion_concentrations__K_i; + const double var_x60 = 1 / var_chaste_interface__intracellular_ion_concentrations__Na_i; + const double var_x61 = pow(var_x60, 1.5); + const double var_x62 = var_x60 * mParameters[9]; + const double var_x63 = var_x61 * var_x62 * mParameters[5] / ((1.5 + mParameters[5]) * pow((0.031622776601683791 + var_x61), 2) * (1 + _lt_0_row[4] + 0.036499999999999998 * (-0.14285714285714285 + 0.14285714285714285 * exp(0.01485884101040119 * mParameters[6])) * _lt_0_row[3])); + + + rJacobian[0][0] = 1.0 - (mDt * (-0.125 + 17644.476956839797 * var_x21)); + rJacobian[0][1] = -(mDt * (var_x22 * var_x23)); + rJacobian[0][2] = -(mDt * (-0.125 * var_x27)); + rJacobian[0][3] = -(mDt * (-0.125 * var_x30)); + rJacobian[0][4] = -(mDt * (var_x23 * var_x3)); + rJacobian[0][5] = 0.0; + rJacobian[0][6] = 0.0; + rJacobian[0][7] = -(mDt * (0.28431207178995971 * var_x19 * var_x32)); + rJacobian[1][0] = -(mDt * (-141155.81565471838 * var_x20 * var_x38 - 67538.66777737721 * var_x21 * var_x39)); + rJacobian[1][1] = 1.0 - (mDt * (var_x34 * (-1 - 70577.907827359188 * var_x22 * var_x37) - var_x22 * var_x41)); + rJacobian[1][2] = -(mDt * (var_x26 * var_x38 + var_x27 * var_x42)); + rJacobian[1][3] = -(mDt * (var_x29 * var_x38 + var_x30 * var_x42)); + rJacobian[1][4] = -(mDt * (-var_x3 * var_x41 - var_x38 * var_x4)); + rJacobian[1][5] = 0.0; + rJacobian[1][6] = 0.0; + rJacobian[1][7] = -(mDt * (-1.0882758728802286 * var_x32 * var_x40 - 2.2744965743196777 * var_x32 * var_x38)); + rJacobian[2][0] = 0.0; + rJacobian[2][1] = 0.0; + rJacobian[2][2] = 1.0 - (mDt * (-var_x43)); + rJacobian[2][3] = -(mDt * (-0.00035 * var_x43 / pow((0.00035 + var_chaste_interface__intracellular_ion_concentrations__Ca_i), 2))); + rJacobian[2][4] = 0.0; + rJacobian[2][5] = 0.0; + rJacobian[2][6] = 0.0; + rJacobian[2][7] = 0.0; + rJacobian[3][0] = -(mDt * (0.014117647058823526 * var_x20 * var_x48)); + rJacobian[3][1] = -(mDt * (0.0070588235294117632 * var_x22 * var_x48)); + rJacobian[3][2] = -(mDt * (var_x24 * var_x49 * (2.4643985112571321e-5 - 3.7913823250109726e-7 * var_chaste_interface__membrane__V))); + rJacobian[3][3] = 1.0 - (mDt * (var_x48 * (-var_x51 - var_x54 - 7.4682352941176462e-5 * var_x53 - 7.5827646500219453e-7 * var_x28 - 5.7273025005690459e-9 * var_x50 * mParameters[9] + 1.0426301393780176e-7 * var_x46 * var_chaste_interface__intracellular_ion_concentrations__Ca_i * mParameters[9]) + (0.00023800000000000004 / pow(var_x44, 3) + 7.0000000000000007e-5 / pow(var_x45, 3)) * (-var_x51 * var_chaste_interface__intracellular_ion_concentrations__Ca_i - 0.081176470588235281 * mParameters[2] / var_x52 - 4.2880534095874102e-10 * (-13.356415961992688 * log(var_x50 * mParameters[4]) + var_chaste_interface__membrane__V) * mParameters[9] + 0.0054117647058823529 * mParameters[0] * mParameters[2] * var_chaste_interface__intracellular_ion_concentrations__Ca_up - 3.7913823250109726e-7 * var_x15 * var_x25 * var_chaste_interface__L_type_Ca_channel_f_Ca_gate__f_Ca + 0.0070588235294117632 * var_x0 * var_x1 * mParameters[1] * var_chaste_interface__Ca_release_current_from_JSR_v_gate__v * var_chaste_interface__Ca_release_current_from_JSR_w_gate__w + 7.5827646500219453e-7 * var_x10 * var_x11 * var_x12 * var_x9 * mParameters[16] * mParameters[9]) / pow(var_x47, 2))); + rJacobian[3][4] = -(mDt * (var_x48 * var_x54)); + rJacobian[3][5] = -(mDt * (0.0054117647058823529 * var_x48 * var_x55)); + rJacobian[3][6] = 0.0; + rJacobian[3][7] = -(mDt * (2.2748293950065834e-6 * var_x13 * var_x31 * var_x49)); + rJacobian[4][0] = -(mDt * (-2 * var_x20 * var_x58)); + rJacobian[4][1] = -(mDt * (-var_x22 * var_x58)); + rJacobian[4][2] = 0.0; + rJacobian[4][3] = -(mDt * (var_x3 * var_x58)); + rJacobian[4][4] = 1.0 - (mDt * (var_x58 * (-0.0055555555555555558 - var_x3) + 0.25 * (0.0055555555555555558 * var_chaste_interface__intracellular_ion_concentrations__Ca_up - 0.0055555555555555558 * var_chaste_interface__intracellular_ion_concentrations__Ca_rel - var_x0 * var_x3) / (pow(var_x56, 3) * pow((0.125 + var_x57), 2)))); + rJacobian[4][5] = -(mDt * (0.0055555555555555558 * var_x58)); + rJacobian[4][6] = 0.0; + rJacobian[4][7] = 0.0; + rJacobian[5][0] = 0.0; + rJacobian[5][1] = 0.0; + rJacobian[5][2] = 0.0; + rJacobian[5][3] = -(mDt * (0.00092000000000000003 * var_x53)); + rJacobian[5][4] = -(mDt * (0.00048309178743961351)); + rJacobian[5][5] = 1.0 - (mDt * (-0.00048309178743961351 - 0.066666666666666666 * var_x55)); + rJacobian[5][6] = 0.0; + rJacobian[5][7] = 0.0; + rJacobian[6][0] = 0.0; + rJacobian[6][1] = 0.0; + rJacobian[6][2] = 0.0; + rJacobian[6][3] = 0.0; + rJacobian[6][4] = 0.0; + rJacobian[6][5] = 0.0; + rJacobian[6][6] = 1.0 - (mDt * ((-var_x59 * mParameters[13] / (_lt_0_row[6]) - var_x59 * pow(var_chaste_interface__slow_delayed_rectifier_K_current_xs_gate__xs, 2) * mParameters[15] - var_x59 * mParameters[14] * var_chaste_interface__rapid_delayed_rectifier_K_current_xr_gate__xr / (_lt_0_row[5]) - var_x59 * pow(var_chaste_interface__transient_outward_K_current_oa_gate__oa, 3) * mParameters[17] * var_chaste_interface__transient_outward_K_current_oi_gate__oi - var_x59 * pow(var_chaste_interface__ultrarapid_delayed_rectifier_K_current_ua_gate__ua, 3) * (_lt_0_row[7]) * var_chaste_interface__ultrarapid_delayed_rectifier_K_current_ui_gate__ui) * mParameters[3])); + rJacobian[6][7] = -(mDt * (4.3114284380885533e-8 * var_x63 * mParameters[3])); + rJacobian[7][0] = 0.0; + rJacobian[7][1] = 0.0; + rJacobian[7][2] = 0.0; + rJacobian[7][3] = -(mDt * (2.2748293950065834e-6 * var_x28 * mParameters[3])); + rJacobian[7][4] = 0.0; + rJacobian[7][5] = 0.0; + rJacobian[7][6] = 0.0; + rJacobian[7][7] = 1.0 - (mDt * ((-6.4671426571328296e-8 * var_x63 - 6.8244881850197506e-6 * var_x32 - 1.3661211601158392e-8 * var_x62 - 2.0255711761517402e-5 * var_x62 * pow(var_chaste_interface__fast_sodium_current_m_gate__m, 3) * mParameters[10] * var_chaste_interface__fast_sodium_current_h_gate__h * var_chaste_interface__fast_sodium_current_j_gate__j) * mParameters[3])); + } + + void Dynamiccourtemanche_ramirez_nattel_1998FromCellMLBackwardEulerOpt::UpdateTransmembranePotential(double var_chaste_interface__environment__time) + { + // Time units: millisecond + std::vector& rY = rGetStateVariables(); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -81.18 + double var_chaste_interface__intracellular_ion_concentrations__Ca_i = rY[1]; + // Units: millimolar; Initial value: 0.0001013 + double var_chaste_interface__fast_sodium_current_m_gate__m = rY[2]; + // Units: dimensionless; Initial value: 0.002908 + double var_chaste_interface__fast_sodium_current_h_gate__h = rY[3]; + // Units: dimensionless; Initial value: 0.9649 + double var_chaste_interface__fast_sodium_current_j_gate__j = rY[4]; + // Units: dimensionless; Initial value: 0.9775 + double var_chaste_interface__transient_outward_K_current_oa_gate__oa = rY[5]; + // Units: dimensionless; Initial value: 0.03043 + double var_chaste_interface__transient_outward_K_current_oi_gate__oi = rY[6]; + // Units: dimensionless; Initial value: 0.9992 + double var_chaste_interface__ultrarapid_delayed_rectifier_K_current_ua_gate__ua = rY[7]; + // Units: dimensionless; Initial value: 0.004966 + double var_chaste_interface__ultrarapid_delayed_rectifier_K_current_ui_gate__ui = rY[8]; + // Units: dimensionless; Initial value: 0.9986 + double var_chaste_interface__rapid_delayed_rectifier_K_current_xr_gate__xr = rY[9]; + // Units: dimensionless; Initial value: 3.296e-05 + double var_chaste_interface__slow_delayed_rectifier_K_current_xs_gate__xs = rY[10]; + // Units: dimensionless; Initial value: 0.01869 + double var_chaste_interface__L_type_Ca_channel_d_gate__d = rY[11]; + // Units: dimensionless; Initial value: 0.0001367 + double var_chaste_interface__L_type_Ca_channel_f_gate__f = rY[12]; + // Units: dimensionless; Initial value: 0.9996 + double var_chaste_interface__L_type_Ca_channel_f_Ca_gate__f_Ca = rY[13]; + // Units: dimensionless; Initial value: 0.7755 + double var_chaste_interface__intracellular_ion_concentrations__Na_i = rY[17]; + // Units: millimolar; Initial value: 11.17 + double var_chaste_interface__intracellular_ion_concentrations__K_i = rY[18]; + // Units: millimolar; Initial value: 139.0 + + // Lookup table indexing + const bool _oob_0 = Dynamiccourtemanche_ramirez_nattel_1998FromCellMLBackwardEulerOpt_LookupTables::Instance()->CheckIndex0(var_chaste_interface__membrane__V); +// LCOV_EXCL_START + if (_oob_0) + EXCEPTION(DumpState("membrane_voltage outside lookup table range", rY , var_chaste_interface__environment__time)); +// LCOV_EXCL_STOP + const double* const _lt_0_row = Dynamiccourtemanche_ramirez_nattel_1998FromCellMLBackwardEulerOpt_LookupTables::Instance()->IndexTable0(var_chaste_interface__membrane__V); + + const double var_L_type_Ca_channel__i_Ca_L = (-65 + var_chaste_interface__membrane__V) * mParameters[7] * var_chaste_interface__L_type_Ca_channel_d_gate__d * var_chaste_interface__L_type_Ca_channel_f_Ca_gate__f_Ca * var_chaste_interface__L_type_Ca_channel_f_gate__f * mParameters[9]; // picoA + const double var_sarcolemmal_calcium_pump_current__i_CaP = 0.27500000000000002 * var_chaste_interface__intracellular_ion_concentrations__Ca_i * mParameters[9] / (0.00050000000000000001 + var_chaste_interface__intracellular_ion_concentrations__Ca_i); // picoA + const double var_background_currents__i_B_Ca = 0.0011310000000000001 * (-13.356415961992688 * log(mParameters[4] / var_chaste_interface__intracellular_ion_concentrations__Ca_i) + var_chaste_interface__membrane__V) * mParameters[9]; // picoA + const double var_Na_Ca_exchanger_current__i_NaCa = (pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, 3) * mParameters[4] * _lt_0_row[0] - pow(mParameters[6], 3) * var_chaste_interface__intracellular_ion_concentrations__Ca_i * _lt_0_row[1]) * mParameters[16] * mParameters[9] / ((_lt_0_row[2]) * (669921.875 + pow(mParameters[6], 3)) * (1.3799999999999999 + mParameters[4])); // picoA + const double var_fast_sodium_current__E_Na = 26.712831923985377 * log(mParameters[6] / var_chaste_interface__intracellular_ion_concentrations__Na_i); // millivolt + const double var_background_currents__i_B_Na = 0.00067443750000000002 * (-var_fast_sodium_current__E_Na + var_chaste_interface__membrane__V) * mParameters[9]; // picoA + const double var_fast_sodium_current__i_Na = pow(var_chaste_interface__fast_sodium_current_m_gate__m, 3) * (-var_fast_sodium_current__E_Na + var_chaste_interface__membrane__V) * mParameters[10] * var_chaste_interface__fast_sodium_current_h_gate__h * var_chaste_interface__fast_sodium_current_j_gate__j * mParameters[9]; // picoA + const double var_sodium_potassium_pump__i_NaK = 0.59933873999999998 * mParameters[9] * mParameters[5] / ((1 + 31.622776601683793 * pow((1 / var_chaste_interface__intracellular_ion_concentrations__Na_i), 1.5)) * (1.5 + mParameters[5]) * (1 + _lt_0_row[4] + 0.036499999999999998 * (-0.14285714285714285 + 0.14285714285714285 * exp(0.01485884101040119 * mParameters[6])) * _lt_0_row[3])); // picoA + const double var_time_independent_potassium_current__E_K = 26.712831923985377 * log(mParameters[5] / var_chaste_interface__intracellular_ion_concentrations__K_i); // millivolt + const double var_rapid_delayed_rectifier_K_current__i_Kr = (-var_time_independent_potassium_current__E_K + var_chaste_interface__membrane__V) * mParameters[9] * mParameters[14] * var_chaste_interface__rapid_delayed_rectifier_K_current_xr_gate__xr / (_lt_0_row[5]); // picoA + const double var_slow_delayed_rectifier_K_current__i_Ks = pow(var_chaste_interface__slow_delayed_rectifier_K_current_xs_gate__xs, 2) * (-var_time_independent_potassium_current__E_K + var_chaste_interface__membrane__V) * mParameters[9] * mParameters[15]; // picoA + const double var_time_independent_potassium_current__i_K1 = (-var_time_independent_potassium_current__E_K + var_chaste_interface__membrane__V) * mParameters[9] * mParameters[13] / (_lt_0_row[6]); // picoA + const double var_transient_outward_K_current__i_to = pow(var_chaste_interface__transient_outward_K_current_oa_gate__oa, 3) * (-var_time_independent_potassium_current__E_K + var_chaste_interface__membrane__V) * mParameters[9] * mParameters[17] * var_chaste_interface__transient_outward_K_current_oi_gate__oi; // picoA + const double var_ultrarapid_delayed_rectifier_K_current__i_Kur = pow(var_chaste_interface__ultrarapid_delayed_rectifier_K_current_ua_gate__ua, 3) * (_lt_0_row[7]) * (-var_time_independent_potassium_current__E_K + var_chaste_interface__membrane__V) * mParameters[9] * var_chaste_interface__ultrarapid_delayed_rectifier_K_current_ui_gate__ui; // picoA + const double d_dt_chaste_interface_var_membrane__V = (-var_L_type_Ca_channel__i_Ca_L - var_Na_Ca_exchanger_current__i_NaCa - var_background_currents__i_B_Ca - var_background_currents__i_B_Na - var_fast_sodium_current__i_Na - var_rapid_delayed_rectifier_K_current__i_Kr - var_sarcolemmal_calcium_pump_current__i_CaP - var_slow_delayed_rectifier_K_current__i_Ks - var_sodium_potassium_pump__i_NaK - var_time_independent_potassium_current__i_K1 - var_transient_outward_K_current__i_to - var_ultrarapid_delayed_rectifier_K_current__i_Kur - 1 * GetIntracellularAreaStimulus(var_chaste_interface__environment__time) * mParameters[9] / HeartConfig::Instance()->GetCapacitance()) / mParameters[9]; // millivolt / millisecond + + rY[0] += mDt*d_dt_chaste_interface_var_membrane__V; + } + + void Dynamiccourtemanche_ramirez_nattel_1998FromCellMLBackwardEulerOpt::ComputeOneStepExceptVoltage(double var_chaste_interface__environment__time) + { + // Time units: millisecond + std::vector& rY = rGetStateVariables(); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -81.18 + double var_chaste_interface__fast_sodium_current_m_gate__m = rY[2]; + // Units: dimensionless; Initial value: 0.002908 + double var_chaste_interface__fast_sodium_current_h_gate__h = rY[3]; + // Units: dimensionless; Initial value: 0.9649 + double var_chaste_interface__fast_sodium_current_j_gate__j = rY[4]; + // Units: dimensionless; Initial value: 0.9775 + double var_chaste_interface__transient_outward_K_current_oa_gate__oa = rY[5]; + // Units: dimensionless; Initial value: 0.03043 + double var_chaste_interface__transient_outward_K_current_oi_gate__oi = rY[6]; + // Units: dimensionless; Initial value: 0.9992 + double var_chaste_interface__ultrarapid_delayed_rectifier_K_current_ua_gate__ua = rY[7]; + // Units: dimensionless; Initial value: 0.004966 + double var_chaste_interface__ultrarapid_delayed_rectifier_K_current_ui_gate__ui = rY[8]; + // Units: dimensionless; Initial value: 0.9986 + double var_chaste_interface__rapid_delayed_rectifier_K_current_xr_gate__xr = rY[9]; + // Units: dimensionless; Initial value: 3.296e-05 + double var_chaste_interface__slow_delayed_rectifier_K_current_xs_gate__xs = rY[10]; + // Units: dimensionless; Initial value: 0.01869 + double var_chaste_interface__L_type_Ca_channel_d_gate__d = rY[11]; + // Units: dimensionless; Initial value: 0.0001367 + double var_chaste_interface__L_type_Ca_channel_f_gate__f = rY[12]; + // Units: dimensionless; Initial value: 0.9996 + double var_chaste_interface__Ca_release_current_from_JSR_w_gate__w = rY[16]; + // Units: dimensionless; Initial value: 0.9992 + + // Lookup table indexing + const bool _oob_0 = Dynamiccourtemanche_ramirez_nattel_1998FromCellMLBackwardEulerOpt_LookupTables::Instance()->CheckIndex0(var_chaste_interface__membrane__V); +// LCOV_EXCL_START + if (_oob_0) + EXCEPTION(DumpState("membrane_voltage outside lookup table range", rY , var_chaste_interface__environment__time)); +// LCOV_EXCL_STOP + const double* const _lt_0_row = Dynamiccourtemanche_ramirez_nattel_1998FromCellMLBackwardEulerOpt_LookupTables::Instance()->IndexTable0(var_chaste_interface__membrane__V); + + const double var_Ca_release_current_from_JSR_w_gate__tau_w = ((fabs(-7.9000000000000004 + var_chaste_interface__membrane__V) < 1.0e-10) ? (0.92307692307692313) : (6 * (1 - exp(1.5800000000000001 - 0.20000000000000001 * var_chaste_interface__membrane__V)) / ((1 + 0.29999999999999999 * exp(1.5800000000000001 - 0.20000000000000001 * var_chaste_interface__membrane__V)) * (-7.9000000000000004 + var_chaste_interface__membrane__V)))); + const double var_Ca_release_current_from_JSR_w_gate__w_infinity = 1 + _lt_0_row[8]; + const double var_L_type_Ca_channel_d_gate__d_infinity = 1 / (_lt_0_row[10]); + const double var_L_type_Ca_channel_d_gate__tau_d = ((fabs(10 + var_chaste_interface__membrane__V) < 1.0e-10) ? (4.5789999999999997 / (1 + exp(-1.6025641025641024 - 0.16025641025641024 * var_chaste_interface__membrane__V))) : (28.571428571428569 * (1 - exp(-1.6025641025641024 - 0.16025641025641024 * var_chaste_interface__membrane__V)) / ((1 + exp(-1.6025641025641024 - 0.16025641025641024 * var_chaste_interface__membrane__V)) * (10 + var_chaste_interface__membrane__V)))); + const double var_L_type_Ca_channel_f_gate__f_infinity = _lt_0_row[12]; + const double var_L_type_Ca_channel_f_gate__tau_f = 9 / (0.02 + 0.019699999999999999 * exp(-0.113569 * pow((1 + 0.10000000000000001 * var_chaste_interface__membrane__V), 2))); + const double var_fast_sodium_current_h_gate__alpha_h = ((var_chaste_interface__membrane__V < -40) ? (0.13500000000000001 * exp(-11.764705882352942 + 0.14705882352941177 * mParameters[12] - 0.14705882352941177 * var_chaste_interface__membrane__V)) : (0)); + const double var_fast_sodium_current_h_gate__beta_h = ((var_chaste_interface__membrane__V < -40) ? (310000 * exp(0.34999999999999998 * var_chaste_interface__membrane__V - 0.34999999999999998 * mParameters[12]) + 3.5600000000000001 * exp(0.079000000000000001 * var_chaste_interface__membrane__V - 0.079000000000000001 * mParameters[12])) : (7.6923076923076916 / (1 + exp(-0.96036036036036043 + 0.0900900900900901 * mParameters[12] - 0.0900900900900901 * var_chaste_interface__membrane__V)))); + const double var_fast_sodium_current_h_gate__h_inf = 0.01 * mParameters[11] + (1 - 0.01 * mParameters[11]) * var_fast_sodium_current_h_gate__alpha_h / (var_fast_sodium_current_h_gate__alpha_h + var_fast_sodium_current_h_gate__beta_h); + const double var_fast_sodium_current_h_gate__tau_h = 1 / (var_fast_sodium_current_h_gate__alpha_h + var_fast_sodium_current_h_gate__beta_h); + const double var_fast_sodium_current_j_gate__alpha_j = ((var_chaste_interface__membrane__V < -40) ? ((37.780000000000001 + var_chaste_interface__membrane__V) * (-127140 * exp(0.24440000000000001 * var_chaste_interface__membrane__V - 0.24440000000000001 * mParameters[12]) - 3.4740000000000003e-5 * exp(0.043909999999999998 * mParameters[12] - 0.043909999999999998 * var_chaste_interface__membrane__V)) / (1 + exp(24.640530000000002 + 0.311 * var_chaste_interface__membrane__V - 0.311 * mParameters[12]))) : (0)); + const double var_fast_sodium_current_j_gate__beta_j = ((var_chaste_interface__membrane__V < -40) ? (0.1212 * exp(0.01052 * mParameters[12] - 0.01052 * var_chaste_interface__membrane__V) / (1 + exp(-5.5312920000000005 + 0.13780000000000001 * mParameters[12] - 0.13780000000000001 * var_chaste_interface__membrane__V))) : (0.29999999999999999 * exp(2.5349999999999999e-7 * mParameters[12] - 2.5349999999999999e-7 * var_chaste_interface__membrane__V) / (1 + exp(-3.2000000000000002 + 0.10000000000000001 * mParameters[12] - 0.10000000000000001 * var_chaste_interface__membrane__V)))); + const double var_fast_sodium_current_j_gate__j_inf = 0.01 * mParameters[11] + (1 - 0.01 * mParameters[11]) * var_fast_sodium_current_j_gate__alpha_j / (var_fast_sodium_current_j_gate__alpha_j + var_fast_sodium_current_j_gate__beta_j); + const double var_fast_sodium_current_j_gate__tau_j = 1 / (var_fast_sodium_current_j_gate__alpha_j + var_fast_sodium_current_j_gate__beta_j); + const double var_fast_sodium_current_m_gate__alpha_m = _lt_0_row[14]; + const double var_fast_sodium_current_m_gate__beta_m = _lt_0_row[15]; + const double var_fast_sodium_current_m_gate__m_inf = var_fast_sodium_current_m_gate__alpha_m / (var_fast_sodium_current_m_gate__alpha_m + var_fast_sodium_current_m_gate__beta_m); + const double var_fast_sodium_current_m_gate__tau_m = 1 / (var_fast_sodium_current_m_gate__alpha_m + var_fast_sodium_current_m_gate__beta_m); + const double var_rapid_delayed_rectifier_K_current_xr_gate__alpha_xr = ((fabs(14.1 + var_chaste_interface__membrane__V) < 1.0e-10) ? (0.0015) : (0.00029999999999999997 * (14.1 + var_chaste_interface__membrane__V) / (1 - exp(-2.8199999999999998 - 0.20000000000000001 * var_chaste_interface__membrane__V)))); + const double var_rapid_delayed_rectifier_K_current_xr_gate__beta_xr = ((fabs(-3.3328000000000002 + var_chaste_interface__membrane__V) < 1.0e-10) ? (0.00037836118) : (7.3898000000000003e-5 * (-3.3328000000000002 + var_chaste_interface__membrane__V) / (-1 + exp(-0.65046743564221166 + 0.19517145812596365 * var_chaste_interface__membrane__V)))); + const double var_rapid_delayed_rectifier_K_current_xr_gate__tau_xr = 1 / (var_rapid_delayed_rectifier_K_current_xr_gate__alpha_xr + var_rapid_delayed_rectifier_K_current_xr_gate__beta_xr); + const double var_rapid_delayed_rectifier_K_current_xr_gate__xr_infinity = 1 / (_lt_0_row[16]); + const double var_slow_delayed_rectifier_K_current_xs_gate__alpha_xs = ((fabs(-19.899999999999999 + var_chaste_interface__membrane__V) < 1.0e-10) ? (0.00068000000000000005) : (4.0000000000000003e-5 * (-19.899999999999999 + var_chaste_interface__membrane__V) / (1 - exp(1.1705882352941175 - 0.058823529411764705 * var_chaste_interface__membrane__V)))); + const double var_slow_delayed_rectifier_K_current_xs_gate__beta_xs = ((fabs(-19.899999999999999 + var_chaste_interface__membrane__V) < 1.0e-10) ? (0.00031500000000000001) : (3.4999999999999997e-5 * (-19.899999999999999 + var_chaste_interface__membrane__V) / (-1 + exp(-2.2111111111111108 + 0.1111111111111111 * var_chaste_interface__membrane__V)))); + const double var_slow_delayed_rectifier_K_current_xs_gate__tau_xs = 0.5 / (var_slow_delayed_rectifier_K_current_xs_gate__alpha_xs + var_slow_delayed_rectifier_K_current_xs_gate__beta_xs); + const double var_slow_delayed_rectifier_K_current_xs_gate__xs_infinity = _lt_0_row[18]; + const double var_transient_outward_K_current__K_Q10 = 3; + const double var_transient_outward_K_current_oa_gate__alpha_oa = 0.65000000000000002 / (exp(0.50847457627118642 - 0.016949152542372881 * var_chaste_interface__membrane__V) + exp(-1.1764705882352942 - 0.11764705882352941 * var_chaste_interface__membrane__V)); + const double var_transient_outward_K_current_oa_gate__beta_oa = 0.65000000000000002 / (2.5 + exp(4.8235294117647056 + 0.058823529411764705 * var_chaste_interface__membrane__V)); + const double var_transient_outward_K_current_oa_gate__oa_infinity = 1 / (_lt_0_row[20]); + const double var_transient_outward_K_current_oa_gate__tau_oa = 1 / ((var_transient_outward_K_current_oa_gate__alpha_oa + var_transient_outward_K_current_oa_gate__beta_oa) * var_transient_outward_K_current__K_Q10); + const double var_transient_outward_K_current_oi_gate__alpha_oi = 1 / (18.530000000000001 + exp(10.383561643835618 + 0.091324200913242018 * var_chaste_interface__membrane__V)); + const double var_transient_outward_K_current_oi_gate__beta_oi = 1 / (35.560000000000002 + exp(-0.16935483870967738 - 0.13440860215053763 * var_chaste_interface__membrane__V)); + const double var_transient_outward_K_current_oi_gate__oi_infinity = 1 / (_lt_0_row[22]); + const double var_transient_outward_K_current_oi_gate__tau_oi = 1 / ((var_transient_outward_K_current_oi_gate__alpha_oi + var_transient_outward_K_current_oi_gate__beta_oi) * var_transient_outward_K_current__K_Q10); + const double var_ultrarapid_delayed_rectifier_K_current_ua_gate__alpha_ua = 0.65000000000000002 / (exp(0.50847457627118642 - 0.016949152542372881 * var_chaste_interface__membrane__V) + exp(-1.1764705882352942 - 0.11764705882352941 * var_chaste_interface__membrane__V)); + const double var_ultrarapid_delayed_rectifier_K_current_ua_gate__beta_ua = 0.65000000000000002 / (2.5 + exp(4.8235294117647056 + 0.058823529411764705 * var_chaste_interface__membrane__V)); + const double var_ultrarapid_delayed_rectifier_K_current_ua_gate__tau_ua = 1 / ((var_ultrarapid_delayed_rectifier_K_current_ua_gate__alpha_ua + var_ultrarapid_delayed_rectifier_K_current_ua_gate__beta_ua) * var_transient_outward_K_current__K_Q10); + const double var_ultrarapid_delayed_rectifier_K_current_ua_gate__ua_infinity = 1 / (_lt_0_row[24]); + const double var_ultrarapid_delayed_rectifier_K_current_ui_gate__alpha_ui = 1 / (21 + exp(6.6071428571428568 - 0.035714285714285712 * var_chaste_interface__membrane__V)); + const double var_ultrarapid_delayed_rectifier_K_current_ui_gate__beta_ui = 1 / exp(9.875 - 0.0625 * var_chaste_interface__membrane__V); + const double var_ultrarapid_delayed_rectifier_K_current_ui_gate__tau_ui = 1 / ((var_ultrarapid_delayed_rectifier_K_current_ui_gate__alpha_ui + var_ultrarapid_delayed_rectifier_K_current_ui_gate__beta_ui) * var_transient_outward_K_current__K_Q10); + const double var_ultrarapid_delayed_rectifier_K_current_ui_gate__ui_infinity = 1 / (_lt_0_row[25]); + + + rY[16] = (var_chaste_interface__Ca_release_current_from_JSR_w_gate__w + ((var_Ca_release_current_from_JSR_w_gate__w_infinity / var_Ca_release_current_from_JSR_w_gate__tau_w) * mDt)) / (1.0 - ((-1 / var_Ca_release_current_from_JSR_w_gate__tau_w) * mDt)); + rY[11] = (var_chaste_interface__L_type_Ca_channel_d_gate__d + ((var_L_type_Ca_channel_d_gate__d_infinity / var_L_type_Ca_channel_d_gate__tau_d) * mDt)) / (1.0 - ((-1 / var_L_type_Ca_channel_d_gate__tau_d) * mDt)); + rY[12] = (var_chaste_interface__L_type_Ca_channel_f_gate__f + ((var_L_type_Ca_channel_f_gate__f_infinity / var_L_type_Ca_channel_f_gate__tau_f) * mDt)) / (1.0 - ((-1 / var_L_type_Ca_channel_f_gate__tau_f) * mDt)); + rY[3] = (var_chaste_interface__fast_sodium_current_h_gate__h + ((var_fast_sodium_current_h_gate__h_inf / var_fast_sodium_current_h_gate__tau_h) * mDt)) / (1.0 - ((-1 / var_fast_sodium_current_h_gate__tau_h) * mDt)); + rY[4] = (var_chaste_interface__fast_sodium_current_j_gate__j + ((var_fast_sodium_current_j_gate__j_inf / var_fast_sodium_current_j_gate__tau_j) * mDt)) / (1.0 - ((-1 / var_fast_sodium_current_j_gate__tau_j) * mDt)); + rY[2] = (var_chaste_interface__fast_sodium_current_m_gate__m + ((var_fast_sodium_current_m_gate__m_inf / var_fast_sodium_current_m_gate__tau_m) * mDt)) / (1.0 - ((-1 / var_fast_sodium_current_m_gate__tau_m) * mDt)); + rY[9] = (var_chaste_interface__rapid_delayed_rectifier_K_current_xr_gate__xr + ((var_rapid_delayed_rectifier_K_current_xr_gate__xr_infinity / var_rapid_delayed_rectifier_K_current_xr_gate__tau_xr) * mDt)) / (1.0 - ((-1 / var_rapid_delayed_rectifier_K_current_xr_gate__tau_xr) * mDt)); + rY[10] = (var_chaste_interface__slow_delayed_rectifier_K_current_xs_gate__xs + ((var_slow_delayed_rectifier_K_current_xs_gate__xs_infinity / var_slow_delayed_rectifier_K_current_xs_gate__tau_xs) * mDt)) / (1.0 - ((-1 / var_slow_delayed_rectifier_K_current_xs_gate__tau_xs) * mDt)); + rY[5] = (var_chaste_interface__transient_outward_K_current_oa_gate__oa + ((var_transient_outward_K_current_oa_gate__oa_infinity / var_transient_outward_K_current_oa_gate__tau_oa) * mDt)) / (1.0 - ((-1 / var_transient_outward_K_current_oa_gate__tau_oa) * mDt)); + rY[6] = (var_chaste_interface__transient_outward_K_current_oi_gate__oi + ((var_transient_outward_K_current_oi_gate__oi_infinity / var_transient_outward_K_current_oi_gate__tau_oi) * mDt)) / (1.0 - ((-1 / var_transient_outward_K_current_oi_gate__tau_oi) * mDt)); + rY[7] = (var_chaste_interface__ultrarapid_delayed_rectifier_K_current_ua_gate__ua + ((var_ultrarapid_delayed_rectifier_K_current_ua_gate__ua_infinity / var_ultrarapid_delayed_rectifier_K_current_ua_gate__tau_ua) * mDt)) / (1.0 - ((-1 / var_ultrarapid_delayed_rectifier_K_current_ua_gate__tau_ua) * mDt)); + rY[8] = (var_chaste_interface__ultrarapid_delayed_rectifier_K_current_ui_gate__ui + ((var_ultrarapid_delayed_rectifier_K_current_ui_gate__ui_infinity / var_ultrarapid_delayed_rectifier_K_current_ui_gate__tau_ui) * mDt)) / (1.0 - ((-1 / var_ultrarapid_delayed_rectifier_K_current_ui_gate__tau_ui) * mDt)); + + double _guess[8] = {rY[14],rY[15],rY[13],rY[1],rY[19],rY[20],rY[18],rY[17]}; + CardiacNewtonSolver<8,Dynamiccourtemanche_ramirez_nattel_1998FromCellMLBackwardEulerOpt>* _p_solver = CardiacNewtonSolver<8,Dynamiccourtemanche_ramirez_nattel_1998FromCellMLBackwardEulerOpt>::Instance(); + _p_solver->Solve(*this, var_chaste_interface__environment__time, _guess); + rY[14] = _guess[0]; + rY[15] = _guess[1]; + rY[13] = _guess[2]; + rY[1] = _guess[3]; + rY[19] = _guess[4]; + rY[20] = _guess[5]; + rY[18] = _guess[6]; + rY[17] = _guess[7]; + } + + std::vector Dynamiccourtemanche_ramirez_nattel_1998FromCellMLBackwardEulerOpt::ComputeDerivedQuantities(double var_chaste_interface__environment__time, const std::vector & rY) + { + // Inputs: + // Time units: millisecond + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -81.18 + double var_chaste_interface__intracellular_ion_concentrations__Ca_i = rY[1]; + // Units: millimolar; Initial value: 0.0001013 + double var_chaste_interface__fast_sodium_current_m_gate__m = rY[2]; + // Units: dimensionless; Initial value: 0.002908 + double var_chaste_interface__fast_sodium_current_h_gate__h = rY[3]; + // Units: dimensionless; Initial value: 0.9649 + double var_chaste_interface__fast_sodium_current_j_gate__j = rY[4]; + // Units: dimensionless; Initial value: 0.9775 + double var_chaste_interface__transient_outward_K_current_oa_gate__oa = rY[5]; + // Units: dimensionless; Initial value: 0.03043 + double var_chaste_interface__transient_outward_K_current_oi_gate__oi = rY[6]; + // Units: dimensionless; Initial value: 0.9992 + double var_chaste_interface__rapid_delayed_rectifier_K_current_xr_gate__xr = rY[9]; + // Units: dimensionless; Initial value: 3.296e-05 + double var_chaste_interface__slow_delayed_rectifier_K_current_xs_gate__xs = rY[10]; + // Units: dimensionless; Initial value: 0.01869 + double var_chaste_interface__L_type_Ca_channel_d_gate__d = rY[11]; + // Units: dimensionless; Initial value: 0.0001367 + double var_chaste_interface__L_type_Ca_channel_f_gate__f = rY[12]; + // Units: dimensionless; Initial value: 0.9996 + double var_chaste_interface__L_type_Ca_channel_f_Ca_gate__f_Ca = rY[13]; + // Units: dimensionless; Initial value: 0.7755 + double var_chaste_interface__Ca_release_current_from_JSR_u_gate__u = rY[14]; + // Units: dimensionless; Initial value: 2.35e-112 + double var_chaste_interface__Ca_release_current_from_JSR_v_gate__v = rY[15]; + // Units: dimensionless; Initial value: 1.0 + double var_chaste_interface__Ca_release_current_from_JSR_w_gate__w = rY[16]; + // Units: dimensionless; Initial value: 0.9992 + double var_chaste_interface__intracellular_ion_concentrations__Na_i = rY[17]; + // Units: millimolar; Initial value: 11.17 + double var_chaste_interface__intracellular_ion_concentrations__K_i = rY[18]; + // Units: millimolar; Initial value: 139.0 + double var_chaste_interface__intracellular_ion_concentrations__Ca_rel = rY[19]; + // Units: millimolar; Initial value: 1.488 + + // Lookup table indexing + const bool _oob_0 = Dynamiccourtemanche_ramirez_nattel_1998FromCellMLBackwardEulerOpt_LookupTables::Instance()->CheckIndex0(var_chaste_interface__membrane__V); +// LCOV_EXCL_START + if (_oob_0) + EXCEPTION(DumpState("membrane_voltage outside lookup table range", rY , var_chaste_interface__environment__time)); +// LCOV_EXCL_STOP + const double* const _lt_0_row = Dynamiccourtemanche_ramirez_nattel_1998FromCellMLBackwardEulerOpt_LookupTables::Instance()->IndexTable0(var_chaste_interface__membrane__V); + + // Mathematics + const double var_Na_Ca_exchanger_current__K_mCa = 1.3799999999999999; // millimolar + const double var_Na_Ca_exchanger_current__K_mNa = 87.5; // millimolar + const double var_Na_Ca_exchanger_current__K_sat = 0.10000000000000001; // dimensionless + const double var_Na_Ca_exchanger_current__gamma = 0.34999999999999998; // dimensionless + const double var_Ca_release_current_from_JSR__i_rel = pow(var_chaste_interface__Ca_release_current_from_JSR_u_gate__u, 2) * (-var_chaste_interface__intracellular_ion_concentrations__Ca_i + var_chaste_interface__intracellular_ion_concentrations__Ca_rel) * mParameters[1] * var_chaste_interface__Ca_release_current_from_JSR_v_gate__v * var_chaste_interface__Ca_release_current_from_JSR_w_gate__w; // millimolar_per_millisecond + const double var_membrane__Cm_converted = 9.9999999999999995e-7 * mParameters[9]; // uF + const double var_membrane__F = 96.486699999999999; // coulomb_per_millimole + const double var_membrane__R = 8.3142999999999994; // joule_per_mole_kelvin + const double var_membrane__T = 310; // kelvin + const double var_L_type_Ca_channel__i_Ca_L = (-65 + var_chaste_interface__membrane__V) * mParameters[7] * var_chaste_interface__L_type_Ca_channel_d_gate__d * var_chaste_interface__L_type_Ca_channel_f_Ca_gate__f_Ca * var_chaste_interface__L_type_Ca_channel_f_gate__f * mParameters[9]; // picoA + const double var_L_type_Ca_channel__i_Ca_L_converted = 9.9999999999999995e-7 * HeartConfig::Instance()->GetCapacitance() * var_L_type_Ca_channel__i_Ca_L / var_membrane__Cm_converted; // uA_per_cm2 + const double var_L_type_Ca_channel_f_gate__tau_f = 9 / (0.02 + 0.019699999999999999 * exp(-0.113569 * pow((1 + 0.10000000000000001 * var_chaste_interface__membrane__V), 2))); // millisecond + const double var_fast_sodium_current_h_gate__alpha_h = ((var_chaste_interface__membrane__V < -40) ? (0.13500000000000001 * exp(-11.764705882352942 + 0.14705882352941177 * mParameters[12] - 0.14705882352941177 * var_chaste_interface__membrane__V)) : (0)); // per_millisecond + const double var_fast_sodium_current_h_gate__beta_h = ((var_chaste_interface__membrane__V < -40) ? (310000 * exp(0.34999999999999998 * var_chaste_interface__membrane__V - 0.34999999999999998 * mParameters[12]) + 3.5600000000000001 * exp(0.079000000000000001 * var_chaste_interface__membrane__V - 0.079000000000000001 * mParameters[12])) : (7.6923076923076916 / (1 + exp(-0.96036036036036043 + 0.0900900900900901 * mParameters[12] - 0.0900900900900901 * var_chaste_interface__membrane__V)))); // per_millisecond + const double var_fast_sodium_current_h_gate__tau_h = 1 / (var_fast_sodium_current_h_gate__alpha_h + var_fast_sodium_current_h_gate__beta_h); // millisecond + const double var_fast_sodium_current_j_gate__alpha_j = ((var_chaste_interface__membrane__V < -40) ? ((37.780000000000001 + var_chaste_interface__membrane__V) * (-127140 * exp(0.24440000000000001 * var_chaste_interface__membrane__V - 0.24440000000000001 * mParameters[12]) - 3.4740000000000003e-5 * exp(0.043909999999999998 * mParameters[12] - 0.043909999999999998 * var_chaste_interface__membrane__V)) / (1 + exp(24.640530000000002 + 0.311 * var_chaste_interface__membrane__V - 0.311 * mParameters[12]))) : (0)); // per_millisecond + const double var_fast_sodium_current_j_gate__beta_j = ((var_chaste_interface__membrane__V < -40) ? (0.1212 * exp(0.01052 * mParameters[12] - 0.01052 * var_chaste_interface__membrane__V) / (1 + exp(-5.5312920000000005 + 0.13780000000000001 * mParameters[12] - 0.13780000000000001 * var_chaste_interface__membrane__V))) : (0.29999999999999999 * exp(2.5349999999999999e-7 * mParameters[12] - 2.5349999999999999e-7 * var_chaste_interface__membrane__V) / (1 + exp(-3.2000000000000002 + 0.10000000000000001 * mParameters[12] - 0.10000000000000001 * var_chaste_interface__membrane__V)))); // per_millisecond + const double var_fast_sodium_current_j_gate__tau_j = 1 / (var_fast_sodium_current_j_gate__alpha_j + var_fast_sodium_current_j_gate__beta_j); // millisecond + const double var_membrane__i_st_converted = GetIntracellularAreaStimulus(var_chaste_interface__environment__time); // uA_per_cm2 + const double var_Na_Ca_exchanger_current__i_NaCa = (pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, 3) * mParameters[4] * exp(var_Na_Ca_exchanger_current__gamma * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T)) - pow(mParameters[6], 3) * var_chaste_interface__intracellular_ion_concentrations__Ca_i * exp((-1 + var_Na_Ca_exchanger_current__gamma) * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * mParameters[16] * mParameters[9] / ((1 + var_Na_Ca_exchanger_current__K_sat * exp((-1 + var_Na_Ca_exchanger_current__gamma) * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * (pow(var_Na_Ca_exchanger_current__K_mNa, 3) + pow(mParameters[6], 3)) * (var_Na_Ca_exchanger_current__K_mCa + mParameters[4])); // picoA + const double var_Na_Ca_exchanger_current__i_NaCa_converted = 9.9999999999999995e-7 * HeartConfig::Instance()->GetCapacitance() * var_Na_Ca_exchanger_current__i_NaCa / var_membrane__Cm_converted; // uA_per_cm2 + const double var_fast_sodium_current__E_Na = var_membrane__R * var_membrane__T * log(mParameters[6] / var_chaste_interface__intracellular_ion_concentrations__Na_i) / var_membrane__F; // millivolt + const double var_fast_sodium_current__i_Na = pow(var_chaste_interface__fast_sodium_current_m_gate__m, 3) * (-var_fast_sodium_current__E_Na + var_chaste_interface__membrane__V) * mParameters[10] * var_chaste_interface__fast_sodium_current_h_gate__h * var_chaste_interface__fast_sodium_current_j_gate__j * mParameters[9]; // picoA + const double var_fast_sodium_current__i_Na_converted = 9.9999999999999995e-7 * HeartConfig::Instance()->GetCapacitance() * var_fast_sodium_current__i_Na / var_membrane__Cm_converted; // uA_per_cm2 + const double var_time_independent_potassium_current__E_K = var_membrane__R * var_membrane__T * log(mParameters[5] / var_chaste_interface__intracellular_ion_concentrations__K_i) / var_membrane__F; // millivolt + const double var_rapid_delayed_rectifier_K_current__i_Kr = (-var_time_independent_potassium_current__E_K + var_chaste_interface__membrane__V) * mParameters[9] * mParameters[14] * var_chaste_interface__rapid_delayed_rectifier_K_current_xr_gate__xr / (_lt_0_row[5]); // picoA + const double var_rapid_delayed_rectifier_K_current__i_Kr_converted = 9.9999999999999995e-7 * HeartConfig::Instance()->GetCapacitance() * var_rapid_delayed_rectifier_K_current__i_Kr / var_membrane__Cm_converted; // uA_per_cm2 + const double var_slow_delayed_rectifier_K_current__i_Ks = pow(var_chaste_interface__slow_delayed_rectifier_K_current_xs_gate__xs, 2) * (-var_time_independent_potassium_current__E_K + var_chaste_interface__membrane__V) * mParameters[9] * mParameters[15]; // picoA + const double var_slow_delayed_rectifier_K_current__i_Ks_converted = 9.9999999999999995e-7 * HeartConfig::Instance()->GetCapacitance() * var_slow_delayed_rectifier_K_current__i_Ks / var_membrane__Cm_converted; // uA_per_cm2 + const double var_time_independent_potassium_current__i_K1 = (-var_time_independent_potassium_current__E_K + var_chaste_interface__membrane__V) * mParameters[9] * mParameters[13] / (_lt_0_row[6]); // picoA + const double var_time_independent_potassium_current__i_K1_converted = 9.9999999999999995e-7 * HeartConfig::Instance()->GetCapacitance() * var_time_independent_potassium_current__i_K1 / var_membrane__Cm_converted; // uA_per_cm2 + const double var_transient_outward_K_current__i_to = pow(var_chaste_interface__transient_outward_K_current_oa_gate__oa, 3) * (-var_time_independent_potassium_current__E_K + var_chaste_interface__membrane__V) * mParameters[9] * mParameters[17] * var_chaste_interface__transient_outward_K_current_oi_gate__oi; // picoA + const double var_transient_outward_K_current__i_to_converted = 9.9999999999999995e-7 * HeartConfig::Instance()->GetCapacitance() * var_transient_outward_K_current__i_to / var_membrane__Cm_converted; // uA_per_cm2 + + std::vector dqs(14); + dqs[0] = var_Ca_release_current_from_JSR__i_rel; + dqs[1] = var_L_type_Ca_channel__i_Ca_L_converted; + dqs[2] = var_L_type_Ca_channel_f_gate__tau_f; + dqs[3] = var_membrane__Cm_converted; + dqs[4] = var_fast_sodium_current__i_Na_converted; + dqs[5] = var_fast_sodium_current_h_gate__tau_h; + dqs[6] = var_fast_sodium_current_j_gate__tau_j; + dqs[7] = var_time_independent_potassium_current__i_K1_converted; + dqs[8] = var_rapid_delayed_rectifier_K_current__i_Kr_converted; + dqs[9] = var_slow_delayed_rectifier_K_current__i_Ks_converted; + dqs[10] = var_Na_Ca_exchanger_current__i_NaCa_converted; + dqs[11] = var_membrane__i_st_converted; + dqs[12] = var_transient_outward_K_current__i_to_converted; + dqs[13] = var_chaste_interface__environment__time; + return dqs; + } + +template<> +void OdeSystemInformation::Initialise(void) +{ + this->mSystemName = "courtemanche_1998"; + this->mFreeVariableName = "time"; + this->mFreeVariableUnits = "millisecond"; + + // rY[0]: + this->mVariableNames.push_back("membrane_voltage"); + this->mVariableUnits.push_back("millivolt"); + this->mInitialConditions.push_back(-81.18); + + // rY[1]: + this->mVariableNames.push_back("cytosolic_calcium_concentration"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(0.0001013); + + // rY[2]: + this->mVariableNames.push_back("membrane_fast_sodium_current_m_gate"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.002908); + + // rY[3]: + this->mVariableNames.push_back("membrane_fast_sodium_current_h_gate"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.9649); + + // rY[4]: + this->mVariableNames.push_back("membrane_fast_sodium_current_j_gate"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.9775); + + // rY[5]: + this->mVariableNames.push_back("transient_outward_K_current_oa_gate__oa"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.03043); + + // rY[6]: + this->mVariableNames.push_back("transient_outward_K_current_oi_gate__oi"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.9992); + + // rY[7]: + this->mVariableNames.push_back("ultrarapid_delayed_rectifier_K_current_ua_gate__ua"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.004966); + + // rY[8]: + this->mVariableNames.push_back("ultrarapid_delayed_rectifier_K_current_ui_gate__ui"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.9986); + + // rY[9]: + this->mVariableNames.push_back("rapid_delayed_rectifier_K_current_xr_gate__xr"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(3.296e-05); + + // rY[10]: + this->mVariableNames.push_back("slow_delayed_rectifier_K_current_xs_gate__xs"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.01869); + + // rY[11]: + this->mVariableNames.push_back("membrane_L_type_calcium_current_d_gate"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.0001367); + + // rY[12]: + this->mVariableNames.push_back("membrane_L_type_calcium_current_f_gate"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.9996); + + // rY[13]: + this->mVariableNames.push_back("membrane_L_type_calcium_current_fCa_gate"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.7755); + + // rY[14]: + this->mVariableNames.push_back("Ca_release_current_from_JSR_u_gate__u"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(2.35e-112); + + // rY[15]: + this->mVariableNames.push_back("Ca_release_current_from_JSR_v_gate__v"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(1.0); + + // rY[16]: + this->mVariableNames.push_back("Ca_release_current_from_JSR_w_gate__w"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.9992); + + // rY[17]: + this->mVariableNames.push_back("cytosolic_sodium_concentration"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(11.17); + + // rY[18]: + this->mVariableNames.push_back("cytosolic_potassium_concentration"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(139.0); + + // rY[19]: + this->mVariableNames.push_back("JSR_calcium_concentration"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(1.488); + + // rY[20]: + this->mVariableNames.push_back("intracellular_ion_concentrations__Ca_up"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(1.488); + + // mParameters[0]: + this->mParameterNames.push_back("SR_leak_current_max"); + this->mParameterUnits.push_back("dimensionless"); + + // mParameters[1]: + this->mParameterNames.push_back("SR_release_current_max"); + this->mParameterUnits.push_back("per_millisecond"); + + // mParameters[2]: + this->mParameterNames.push_back("SR_uptake_current_max"); + this->mParameterUnits.push_back("millimolar_per_millisecond"); + + // mParameters[3]: + this->mParameterNames.push_back("concentration_clamp_onoff"); + this->mParameterUnits.push_back("dimensionless"); + + // mParameters[4]: + this->mParameterNames.push_back("extracellular_calcium_concentration"); + this->mParameterUnits.push_back("millimolar"); + + // mParameters[5]: + this->mParameterNames.push_back("extracellular_potassium_concentration"); + this->mParameterUnits.push_back("millimolar"); + + // mParameters[6]: + this->mParameterNames.push_back("extracellular_sodium_concentration"); + this->mParameterUnits.push_back("millimolar"); + + // mParameters[7]: + this->mParameterNames.push_back("membrane_L_type_calcium_current_conductance"); + this->mParameterUnits.push_back("nanoS_per_picoF"); + + // mParameters[8]: + this->mParameterNames.push_back("membrane_L_type_calcium_current_fCa_gate_tau"); + this->mParameterUnits.push_back("millisecond"); + + // mParameters[9]: + this->mParameterNames.push_back("membrane__Cm"); + this->mParameterUnits.push_back("picoF"); + + // mParameters[10]: + this->mParameterNames.push_back("membrane_fast_sodium_current_conductance"); + this->mParameterUnits.push_back("nanoS_per_picoF"); + + // mParameters[11]: + this->mParameterNames.push_back("membrane_fast_sodium_current_reduced_inactivation"); + this->mParameterUnits.push_back("dimensionless"); + + // mParameters[12]: + this->mParameterNames.push_back("membrane_fast_sodium_current_shift_inactivation"); + this->mParameterUnits.push_back("millivolt"); + + // mParameters[13]: + this->mParameterNames.push_back("membrane_inward_rectifier_potassium_current_conductance"); + this->mParameterUnits.push_back("nanoS_per_picoF"); + + // mParameters[14]: + this->mParameterNames.push_back("membrane_rapid_delayed_rectifier_potassium_current_conductance"); + this->mParameterUnits.push_back("nanoS_per_picoF"); + + // mParameters[15]: + this->mParameterNames.push_back("membrane_slow_delayed_rectifier_potassium_current_conductance"); + this->mParameterUnits.push_back("nanoS_per_picoF"); + + // mParameters[16]: + this->mParameterNames.push_back("membrane_sodium_calcium_exchanger_current_conductance"); + this->mParameterUnits.push_back("picoA_per_picoF"); + + // mParameters[17]: + this->mParameterNames.push_back("membrane_transient_outward_current_conductance"); + this->mParameterUnits.push_back("nanoS_per_picoF"); + + // Derived Quantity index [0]: + this->mDerivedQuantityNames.push_back("SR_release_current"); + this->mDerivedQuantityUnits.push_back("millimolar_per_millisecond"); + + // Derived Quantity index [1]: + this->mDerivedQuantityNames.push_back("membrane_L_type_calcium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [2]: + this->mDerivedQuantityNames.push_back("membrane_L_type_calcium_current_f_gate_tau"); + this->mDerivedQuantityUnits.push_back("millisecond"); + + // Derived Quantity index [3]: + this->mDerivedQuantityNames.push_back("membrane_capacitance"); + this->mDerivedQuantityUnits.push_back("uF"); + + // Derived Quantity index [4]: + this->mDerivedQuantityNames.push_back("membrane_fast_sodium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [5]: + this->mDerivedQuantityNames.push_back("membrane_fast_sodium_current_h_gate_tau"); + this->mDerivedQuantityUnits.push_back("millisecond"); + + // Derived Quantity index [6]: + this->mDerivedQuantityNames.push_back("membrane_fast_sodium_current_j_gate_tau"); + this->mDerivedQuantityUnits.push_back("millisecond"); + + // Derived Quantity index [7]: + this->mDerivedQuantityNames.push_back("membrane_inward_rectifier_potassium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [8]: + this->mDerivedQuantityNames.push_back("membrane_rapid_delayed_rectifier_potassium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [9]: + this->mDerivedQuantityNames.push_back("membrane_slow_delayed_rectifier_potassium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [10]: + this->mDerivedQuantityNames.push_back("membrane_sodium_calcium_exchanger_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [11]: + this->mDerivedQuantityNames.push_back("membrane_stimulus_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [12]: + this->mDerivedQuantityNames.push_back("membrane_transient_outward_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [13]: + this->mDerivedQuantityNames.push_back("time"); + this->mDerivedQuantityUnits.push_back("millisecond"); + + this->mInitialised = true; +} + +// Serialization for Boost >= 1.36 +#include "SerializationExportWrapperForCpp.hpp" +CHASTE_CLASS_EXPORT(Dynamiccourtemanche_ramirez_nattel_1998FromCellMLBackwardEulerOpt) +extern "C" +{ + AbstractCardiacCellInterface* MakeCardiacCell( + boost::shared_ptr pSolver, + boost::shared_ptr pStimulus) + { + return new Dynamiccourtemanche_ramirez_nattel_1998FromCellMLBackwardEulerOpt(pSolver, pStimulus); + } + +} diff --git a/chaste_codegen/tests/numerical/baseline/BEopt/dynamic_courtemanche_ramirez_nattel_1998.hpp b/chaste_codegen/tests/numerical/baseline/BEopt/dynamic_courtemanche_ramirez_nattel_1998.hpp new file mode 100644 index 00000000..53dafd2b --- /dev/null +++ b/chaste_codegen/tests/numerical/baseline/BEopt/dynamic_courtemanche_ramirez_nattel_1998.hpp @@ -0,0 +1,91 @@ +#ifndef DYNAMICCOURTEMANCHE_RAMIREZ_NATTEL_1998FROMCELLMLBACKWARDEULEROPT_HPP_ +#define DYNAMICCOURTEMANCHE_RAMIREZ_NATTEL_1998FROMCELLMLBACKWARDEULEROPT_HPP_ + +//! @file +//! +//! This source file was generated from CellML by chaste_codegen version (version omitted as unimportant) +//! +//! Model: courtemanche_1998 +//! +//! Processed by chaste_codegen: https://github.com/ModellingWebLab/chaste-codegen +//! (translator: chaste_codegen, model type: BackwardEulerOpt) +//! on (date omitted as unimportant) +//! +//! + +#include "ChasteSerialization.hpp" +#include +#include "AbstractDynamicallyLoadableEntity.hpp" +#include "AbstractStimulusFunction.hpp" +#include "AbstractBackwardEulerCardiacCell.hpp" + +class Dynamiccourtemanche_ramirez_nattel_1998FromCellMLBackwardEulerOpt : public AbstractBackwardEulerCardiacCell<8>, public AbstractDynamicallyLoadableEntity +{ + friend class boost::serialization::access; + template + void serialize(Archive & archive, const unsigned int version) + { + archive & boost::serialization::base_object >(*this); + archive & boost::serialization::base_object(*this); + } + + // + // Settable parameters and readable variables + // + +private: + static AbstractBackwardEulerCardiacCell<8>* CreateMethod(boost::shared_ptr p_solver, boost::shared_ptr p_stimulus); + static bool registered; +private: +const bool is_concentration[21] = {false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, true, true, false}; +const bool is_probability[21] = {false, false, true, true, true, false, false, false, false, false, false, true, true, true, false, false, false, false, false, false, false}; +public: + + boost::shared_ptr UseCellMLDefaultStimulus(); + double GetIntracellularCalciumConcentration(); + Dynamiccourtemanche_ramirez_nattel_1998FromCellMLBackwardEulerOpt(boost::shared_ptr /* unused; should be empty */, boost::shared_ptr pIntracellularStimulus); + ~Dynamiccourtemanche_ramirez_nattel_1998FromCellMLBackwardEulerOpt(); + void VerifyStateVariables(); + AbstractLookupTableCollection* GetLookupTableCollection(); + double GetIIonic(const std::vector* pStateVariables=NULL);void ComputeResidual(double var_chaste_interface__environment__time, const double rCurrentGuess[8], double rResidual[8]); + void ComputeJacobian(double var_chaste_interface__environment__time, const double rCurrentGuess[8], double rJacobian[8][8]);protected: + void UpdateTransmembranePotential(double var_chaste_interface__environment__time); + void ComputeOneStepExceptVoltage(double var_chaste_interface__environment__time); + + std::vector ComputeDerivedQuantities(double var_chaste_interface__environment__time, const std::vector & rY); +}; + +// Needs to be included last +#include "SerializationExportWrapper.hpp" +CHASTE_CLASS_EXPORT(Dynamiccourtemanche_ramirez_nattel_1998FromCellMLBackwardEulerOpt) + +namespace boost +{ + namespace serialization + { + template + inline void save_construct_data( + Archive & ar, const Dynamiccourtemanche_ramirez_nattel_1998FromCellMLBackwardEulerOpt * t, const unsigned int fileVersion) + { + const boost::shared_ptr p_solver = t->GetSolver(); + const boost::shared_ptr p_stimulus = t->GetStimulusFunction(); + ar << p_solver; + ar << p_stimulus; + } + + template + inline void load_construct_data( + Archive & ar, Dynamiccourtemanche_ramirez_nattel_1998FromCellMLBackwardEulerOpt * t, const unsigned int fileVersion) + { + boost::shared_ptr p_solver; + boost::shared_ptr p_stimulus; + ar >> p_solver; + ar >> p_stimulus; + ::new(t)Dynamiccourtemanche_ramirez_nattel_1998FromCellMLBackwardEulerOpt(p_solver, p_stimulus); + } + + } + +} + +#endif // DYNAMICCOURTEMANCHE_RAMIREZ_NATTEL_1998FROMCELLMLBACKWARDEULEROPT_HPP_ \ No newline at end of file diff --git a/chaste_codegen/tests/numerical/baseline/CVODE_DATA_CLAMP/Shannon2004_with_modifiers.cpp b/chaste_codegen/tests/numerical/baseline/CVODE_DATA_CLAMP/Shannon2004_with_modifiers.cpp new file mode 100644 index 00000000..21637c57 --- /dev/null +++ b/chaste_codegen/tests/numerical/baseline/CVODE_DATA_CLAMP/Shannon2004_with_modifiers.cpp @@ -0,0 +1,1562 @@ +#ifdef CHASTE_CVODE +//! @file +//! +//! This source file was generated from CellML by chaste_codegen version (version omitted as unimportant) +//! +//! Model: shannon_wang_puglisi_weber_bers_2004_model_updated +//! +//! Processed by chaste_codegen: https://github.com/ModellingWebLab/chaste-codegen +//! (translator: chaste_codegen, model type: CvodeCellWithDataClamp) +//! on (date omitted as unimportant) +//! +//! + +#include "Shannon2004_with_modifiers.hpp" +#include +#include +#include +#include +#include "Exception.hpp" +#include "OdeSystemInformation.hpp" +#include "RegularStimulus.hpp" +#include "HeartConfig.hpp" +#include "IsNan.hpp" +#include "MathsCustomFunctions.hpp" + +#if CHASTE_SUNDIALS_VERSION >= 60000 +#include "CvodeContextManager.hpp" +#endif + +#include "ModelFactory.hpp" + +AbstractCardiacCellWithModifiers* Cellshannon_wang_puglisi_weber_bers_2004FromCellMLCvodeDataClamp::CreateMethod(boost::shared_ptr p_solver, boost::shared_ptr p_stimulus) { + return new Cellshannon_wang_puglisi_weber_bers_2004FromCellMLCvodeDataClamp(p_solver, p_stimulus); +} + +bool Cellshannon_wang_puglisi_weber_bers_2004FromCellMLCvodeDataClamp::registered = ModelFactory::Register("Shannon2004_with_modifiers", "CvodeCellWithDataClamp", (ModelFactory::TCreateMethod)Cellshannon_wang_puglisi_weber_bers_2004FromCellMLCvodeDataClamp::CreateMethod); + + + + boost::shared_ptr Cellshannon_wang_puglisi_weber_bers_2004FromCellMLCvodeDataClamp::UseCellMLDefaultStimulus() + { + // Use the default stimulus specified by CellML metadata + const double var_chaste_interface__cell__stim_amplitude_converted = -9.5 * HeartConfig::Instance()->GetCapacitance(); // uA_per_cm2 + const double var_chaste_interface__cell__stim_duration = 5; // millisecond + const double var_chaste_interface__cell__stim_period = 1000; // millisecond + const double var_chaste_interface__cell__stim_start = 100; // millisecond + boost::shared_ptr p_cellml_stim(new RegularStimulus( + -fabs(var_chaste_interface__cell__stim_amplitude_converted), + var_chaste_interface__cell__stim_duration, + var_chaste_interface__cell__stim_period, + var_chaste_interface__cell__stim_start + )); + mpIntracellularStimulus = p_cellml_stim; + return p_cellml_stim; + } + + double Cellshannon_wang_puglisi_weber_bers_2004FromCellMLCvodeDataClamp::GetIntracellularCalciumConcentration() + { + return NV_Ith_S(mStateVariables, 1); + } + + Cellshannon_wang_puglisi_weber_bers_2004FromCellMLCvodeDataClamp::Cellshannon_wang_puglisi_weber_bers_2004FromCellMLCvodeDataClamp(boost::shared_ptr pOdeSolver /* unused; should be empty */, boost::shared_ptr pIntracellularStimulus) + : AbstractCardiacCellWithModifiers( + pOdeSolver, + 45, + 0, + pIntracellularStimulus) + { + // Time units: millisecond + // + this->mpSystemInfo = OdeSystemInformation::Instance(); + Init(); + + // We have a default stimulus specified in the CellML file metadata + this->mHasDefaultStimulusFromCellML = true; + + // These will get initialised to DummyModifiers in the base class method. + this->AddModifier("JSR_calcium_concentration", + mp_JSR_calcium_concentration_modifier); + this->AddModifier("SR_leak_current_max", + mp_SR_leak_current_max_modifier); + this->AddModifier("SR_release_current", + mp_SR_release_current_modifier); + this->AddModifier("SR_release_current_max", + mp_SR_release_current_max_modifier); + this->AddModifier("SR_uptake_current_max", + mp_SR_uptake_current_max_modifier); + this->AddModifier("chloride_reversal_potential", + mp_chloride_reversal_potential_modifier); + this->AddModifier("concentration_clamp_onoff", + mp_concentration_clamp_onoff_modifier); + this->AddModifier("cytosolic_calcium_concentration", + mp_cytosolic_calcium_concentration_modifier); + this->AddModifier("cytosolic_chloride_concentration", + mp_cytosolic_chloride_concentration_modifier); + this->AddModifier("cytosolic_potassium_concentration", + mp_cytosolic_potassium_concentration_modifier); + this->AddModifier("cytosolic_sodium_concentration", + mp_cytosolic_sodium_concentration_modifier); + this->AddModifier("dyadic_space_calcium_concentration", + mp_dyadic_space_calcium_concentration_modifier); + this->AddModifier("dyadic_space_sodium_concentration", + mp_dyadic_space_sodium_concentration_modifier); + this->AddModifier("extracellular_calcium_concentration", + mp_extracellular_calcium_concentration_modifier); + this->AddModifier("extracellular_chloride_concentration", + mp_extracellular_chloride_concentration_modifier); + this->AddModifier("extracellular_potassium_concentration", + mp_extracellular_potassium_concentration_modifier); + this->AddModifier("extracellular_sodium_concentration", + mp_extracellular_sodium_concentration_modifier); + this->AddModifier("faraday_constant", + mp_faraday_constant_modifier); + this->AddModifier("gas_constant", + mp_gas_constant_modifier); + this->AddModifier("membrane_L_type_calcium_current", + mp_ICaL__i_CaL_modifier); + this->AddModifier("membrane_L_type_calcium_current_conductance", + mp_membrane_L_type_calcium_current_conductance_modifier); + this->AddModifier("membrane_L_type_calcium_current_d_gate", + mp_membrane_L_type_calcium_current_d_gate_modifier); + this->AddModifier("membrane_L_type_calcium_current_fCa_gate", + mp_membrane_L_type_calcium_current_fCa_gate_modifier); + this->AddModifier("membrane_L_type_calcium_current_f_gate", + mp_membrane_L_type_calcium_current_f_gate_modifier); + this->AddModifier("membrane_L_type_calcium_current_f_gate_tau", + mp_membrane_L_type_calcium_current_f_gate_tau_modifier); + this->AddModifier("membrane_background_calcium_current", + mp_ICab__i_Cab_modifier); + this->AddModifier("membrane_background_chloride_current", + mp_IClb__i_Clb_modifier); + this->AddModifier("membrane_background_chloride_current_conductance", + mp_membrane_background_chloride_current_conductance_modifier); + this->AddModifier("membrane_background_sodium_current", + mp_INab__i_Nab_modifier); + this->AddModifier("membrane_calcium_pump_current", + mp_ICap__i_Cap_modifier); + this->AddModifier("membrane_capacitance", + mp_membrane_capacitance_modifier); + this->AddModifier("membrane_fast_sodium_current", + mp_INa__i_Na_modifier); + this->AddModifier("membrane_fast_sodium_current_conductance", + mp_membrane_fast_sodium_current_conductance_modifier); + this->AddModifier("membrane_fast_sodium_current_h_gate", + mp_membrane_fast_sodium_current_h_gate_modifier); + this->AddModifier("membrane_fast_sodium_current_h_gate_tau", + mp_membrane_fast_sodium_current_h_gate_tau_modifier); + this->AddModifier("membrane_fast_sodium_current_j_gate", + mp_membrane_fast_sodium_current_j_gate_modifier); + this->AddModifier("membrane_fast_sodium_current_j_gate_tau", + mp_membrane_fast_sodium_current_j_gate_tau_modifier); + this->AddModifier("membrane_fast_sodium_current_m_gate", + mp_membrane_fast_sodium_current_m_gate_modifier); + this->AddModifier("membrane_fast_sodium_current_reduced_inactivation", + mp_membrane_fast_sodium_current_reduced_inactivation_modifier); + this->AddModifier("membrane_fast_sodium_current_shift_inactivation", + mp_membrane_fast_sodium_current_shift_inactivation_modifier); + this->AddModifier("membrane_fast_transient_outward_current", + mp_Itof__i_tof_modifier); + this->AddModifier("membrane_fast_transient_outward_current_conductance", + mp_membrane_fast_transient_outward_current_conductance_modifier); + this->AddModifier("membrane_inward_rectifier_potassium_current", + mp_IK1__i_K1_modifier); + this->AddModifier("membrane_inward_rectifier_potassium_current_conductance", + mp_membrane_inward_rectifier_potassium_current_conductance_modifier); + this->AddModifier("membrane_inward_rectifier_potassium_current_conductance_scaling_factor", + mp_membrane_inward_rectifier_potassium_current_conductance_scaling_factor_modifier); + this->AddModifier("membrane_rapid_delayed_rectifier_potassium_current", + mp_IKr__i_Kr_modifier); + this->AddModifier("membrane_rapid_delayed_rectifier_potassium_current_conductance", + mp_membrane_rapid_delayed_rectifier_potassium_current_conductance_modifier); + this->AddModifier("membrane_slow_delayed_rectifier_potassium_current", + mp_IKs__i_Ks_modifier); + this->AddModifier("membrane_slow_delayed_rectifier_potassium_current_conductance", + mp_membrane_slow_delayed_rectifier_potassium_current_conductance_modifier); + this->AddModifier("membrane_slow_transient_outward_current", + mp_Itos__i_tos_modifier); + this->AddModifier("membrane_slow_transient_outward_current_conductance", + mp_membrane_slow_transient_outward_current_conductance_modifier); + this->AddModifier("membrane_sodium_calcium_exchanger_current", + mp_INaCa__i_NaCa_modifier); + this->AddModifier("membrane_sodium_calcium_exchanger_current_conductance", + mp_membrane_sodium_calcium_exchanger_current_conductance_modifier); + this->AddModifier("membrane_voltage", + mp_membrane_voltage_modifier); + this->AddModifier("potassium_reversal_potential", + mp_potassium_reversal_potential_modifier); + this->AddModifier("submembrane_space_calcium_concentration", + mp_submembrane_space_calcium_concentration_modifier); + this->AddModifier("submembrane_space_sodium_concentration", + mp_submembrane_space_sodium_concentration_modifier); + this->AddModifier("temperature", + mp_temperature_modifier); + NV_Ith_S(this->mParameters, 0) = 5.3480000000000003e-6; // (var_Jleak_SR__KSRleak) [per_millisecond] + NV_Ith_S(this->mParameters, 1) = 25; // (var_Jrel_SR__ks) [per_millisecond] + NV_Ith_S(this->mParameters, 2) = 0.00028600000000000001; // (var_Jpump_SR__V_max) [millimolar_per_millisecond] + NV_Ith_S(this->mParameters, 3) = 1; // (var_Na_buffer__conc_clamp) [dimensionless] + NV_Ith_S(this->mParameters, 4) = 15; // (var_model_parameters__Cli) [millimolar] + NV_Ith_S(this->mParameters, 5) = 135; // (var_model_parameters__Ki) [millimolar] + NV_Ith_S(this->mParameters, 6) = 1.8; // (var_model_parameters__Cao) [millimolar] + NV_Ith_S(this->mParameters, 7) = 150; // (var_model_parameters__Clo) [millimolar] + NV_Ith_S(this->mParameters, 8) = 5.4000000000000004; // (var_model_parameters__Ko) [millimolar] + NV_Ith_S(this->mParameters, 9) = 140; // (var_model_parameters__Nao) [millimolar] + NV_Ith_S(this->mParameters, 10) = 96486.699999999997; // (var_model_parameters__F) [coulomb_per_mole] + NV_Ith_S(this->mParameters, 11) = 8314.2999999999993; // (var_model_parameters__R) [joule_per_kilomole_kelvin] + NV_Ith_S(this->mParameters, 12) = 0.00054000000000000001; // (var_ICaL__PCa) [litre_per_farad_millisecond] + NV_Ith_S(this->mParameters, 13) = 0.0089999999999999993; // (var_IClb__G_ClBk) [milliS_per_microF] + NV_Ith_S(this->mParameters, 14) = 0; // (var_membrane_data_clamp_current_conductance) [dimensionless] + NV_Ith_S(this->mParameters, 15) = 16; // (var_INa__G_INa) [milliS_per_microF] + NV_Ith_S(this->mParameters, 16) = 0; // (var_INa__perc_reduced_inact_for_IpNa) [dimensionless] + NV_Ith_S(this->mParameters, 17) = 0; // (var_INa__shift_INa_inact) [millivolt] + NV_Ith_S(this->mParameters, 18) = 0.02; // (var_Itof__G_tof) [milliS_per_microF] + NV_Ith_S(this->mParameters, 19) = 0.90000000000000002; // (var_IK1__G_K1_max) [milliS_per_microF] + NV_Ith_S(this->mParameters, 20) = 0.029999999999999999; // (var_IKr__G_IKr_const) [milliS_per_microF] + NV_Ith_S(this->mParameters, 21) = 0.070000000000000007; // (var_IKs__G_Ks_max) [milliS_per_microF] + NV_Ith_S(this->mParameters, 22) = 0.059999999999999998; // (var_Itos__G_tos) [milliS_per_microF] + NV_Ith_S(this->mParameters, 23) = 9; // (var_INaCa__V_max) [microA_per_microF] + NV_Ith_S(this->mParameters, 24) = 310; // (var_model_parameters__T) [kelvin] + } + + Cellshannon_wang_puglisi_weber_bers_2004FromCellMLCvodeDataClamp::~Cellshannon_wang_puglisi_weber_bers_2004FromCellMLCvodeDataClamp() + { + } + + + void Cellshannon_wang_puglisi_weber_bers_2004FromCellMLCvodeDataClamp::VerifyStateVariables() + { + + const double tol = 100*this->mAbsTol; + N_Vector rY = rGetStateVariables(); + std::string error_message = ""; + + for (unsigned i=0; i < 45; i++) + { + if(std::isnan(NV_Ith_S(rY, i))){ + error_message += "State variable " + this->rGetStateVariableNames()[i] + " is not a number\n"; + } + if(std::isinf(NV_Ith_S(rY, i))){ + error_message += "State variable " + this->rGetStateVariableNames()[i] + " has become INFINITE\n"; + } + if(this->is_concentration[i] && NV_Ith_S(rY, i) < -tol) + { + error_message += "Concentration " + this->rGetStateVariableNames()[i] + " below 0\n"; + } + if(this->is_probability[i] && NV_Ith_S(rY, i) < -tol) + { + error_message += "Probability " + this->rGetStateVariableNames()[i] + " below 0\n"; + } + if(this->is_probability[i] && NV_Ith_S(rY, i) > 1 + tol) + { + error_message += "Probability " + this->rGetStateVariableNames()[i] + " above 1\n"; + } + } + if (error_message != ""){ + EXCEPTION(DumpState(error_message)); + } + } + + double Cellshannon_wang_puglisi_weber_bers_2004FromCellMLCvodeDataClamp::GetIIonic(const std::vector* pStateVariables) + { + // For state variable interpolation (SVI) we read in interpolated state variables, + // otherwise for ionic current interpolation (ICI) we use the state variables of this model (node). + N_Vector rY; + bool made_new_cvode_vector = false; + if (!pStateVariables) + { + rY = rGetStateVariables(); + } + else + { + made_new_cvode_vector = true; + rY = MakeNVector(*pStateVariables); + } + double var_chaste_interface__cell__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : NV_Ith_S(rY, 0)); + // Units: millivolt; Initial value: -85.721630473733 + double var_chaste_interface__INa_h_gate__h = NV_Ith_S(rY, 2); + // Units: dimensionless; Initial value: 0.98714602875678 + double var_chaste_interface__INa_j_gate__j = NV_Ith_S(rY, 3); + // Units: dimensionless; Initial value: 0.991826348770428 + double var_chaste_interface__INa_m_gate__m = NV_Ith_S(rY, 4); + // Units: dimensionless; Initial value: 0.0013702407736465 + double var_chaste_interface__IKr_Xr_gate__Xr = NV_Ith_S(rY, 5); + // Units: dimensionless; Initial value: 0.00846906175020028 + double var_chaste_interface__IKs_Xs_gate__Xs = NV_Ith_S(rY, 6); + // Units: dimensionless; Initial value: 0.00613557812033723 + double var_chaste_interface__Itos_X_gate__X_tos = NV_Ith_S(rY, 7); + // Units: dimensionless; Initial value: 0.00401072468238921 + double var_chaste_interface__Itos_Y_gate__Y_tos = NV_Ith_S(rY, 8); + // Units: dimensionless; Initial value: 0.31555225368514 + double var_chaste_interface__Itos_R_gate__R_tos = NV_Ith_S(rY, 9); + // Units: dimensionless; Initial value: 0.402577243036347 + double var_chaste_interface__Itof_X_gate__X_tof = NV_Ith_S(rY, 10); + // Units: dimensionless; Initial value: 0.00401068798369438 + double var_chaste_interface__Itof_Y_gate__Y_tof = NV_Ith_S(rY, 11); + // Units: dimensionless; Initial value: 0.994632857675454 + double var_chaste_interface__ICaL_d_gate__d = NV_Ith_S(rY, 12); + // Units: dimensionless; Initial value: 6.99526086177479e-06 + double var_chaste_interface__ICaL_f_gate__f = NV_Ith_S(rY, 13); + // Units: dimensionless; Initial value: 1.00067601563206 + double var_chaste_interface__ICaL_fCa_gate__fCaB_SL = NV_Ith_S(rY, 14); + // Units: dimensionless; Initial value: 0.0150193299768419 + double var_chaste_interface__ICaL_fCa_gate__fCaB_jct = NV_Ith_S(rY, 15); + // Units: dimensionless; Initial value: 0.0244048782575591 + double var_chaste_interface__Na_buffer__Na_SL = NV_Ith_S(rY, 19); + // Units: millimolar; Initial value: 8.87161932058707 + double var_chaste_interface__Na_buffer__Na_jct = NV_Ith_S(rY, 20); + // Units: millimolar; Initial value: 8.87031835089116 + double var_chaste_interface__Na_buffer__Nai = NV_Ith_S(rY, 23); + // Units: millimolar; Initial value: 8.87200572571131 + double var_chaste_interface__Ca_buffer__Ca_SL = NV_Ith_S(rY, 25); + // Units: millimolar; Initial value: 0.000104971310105451 + double var_chaste_interface__Ca_buffer__Ca_jct = NV_Ith_S(rY, 26); + // Units: millimolar; Initial value: 0.000174045152623969 + + const double var_ICaL__Fx_ICaL_SL = 0.10000000000000001; // dimensionless + const double var_ICaL__Fx_ICaL_jct = 0.90000000000000002; // dimensionless + const double var_ICaL__PK = 2.7000000000000001e-7; // litre_per_farad_millisecond + const double var_ICaL__PNa = 1.4999999999999999e-8; // litre_per_farad_millisecond + const double var_ICaL__Q10_CaL = 1.8; // dimensionless + const double var_ICaL__gamma_Cai = 0.34100000000000003; // dimensionless + const double var_ICaL__gamma_Cao = 0.34100000000000003; // dimensionless + const double var_ICaL__gamma_Ki = 0.75; // dimensionless + const double var_ICaL__gamma_Ko = 0.75; // dimensionless + const double var_ICaL__gamma_Nai = 0.75; // dimensionless + const double var_ICaL__gamma_Nao = 0.75; // dimensionless + const double var_ICaL_fCa_gate__fCa_SL = 1 - var_chaste_interface__ICaL_fCa_gate__fCaB_SL; // dimensionless + const double var_ICaL_fCa_gate__fCa_jct = 1 - var_chaste_interface__ICaL_fCa_gate__fCaB_jct; // dimensionless + const double var_ICab__Fx_CaBk_SL = 0.89000000000000001; // dimensionless + const double var_ICab__Fx_CaBk_jct = 0.11; // dimensionless + const double var_ICab__G_CaBk = 0.00025129999999999998; // milliS_per_microF + const double var_ICap__Fx_SLCaP_SL = 0.89000000000000001; // dimensionless + const double var_ICap__Fx_SLCaP_jct = 0.11; // dimensionless + const double var_ICap__H = 1.6000000000000001; // dimensionless + const double var_ICap__Km = 0.00050000000000000001; // millimolar + const double var_ICap__Q10_SLCaP = 2.3500000000000001; // dimensionless + const double var_ICap__V_maxAF = 0.067299999999999999; // microA_per_microF + const double var_ICl_Ca__Fx_Cl_SL = 0.89000000000000001; // dimensionless + const double var_ICl_Ca__Fx_Cl_jct = 0.11; // dimensionless + const double var_ICl_Ca__G_Cl = 0.109625; // milliS_per_microF + const double var_ICl_Ca__Kd_ClCa = 0.10000000000000001; // millimolar + const double var_IKs__Fx_Ks_SL = 0.89000000000000001; // dimensionless + const double var_IKs__Fx_Ks_jct = 0.11; // dimensionless + const double var_IKs__pCa_SL = 3 - log10(var_chaste_interface__Ca_buffer__Ca_SL); // dimensionless + const double var_IKs__G_Ks_SL = (0.057000000000000002 + 0.19 / (1 + exp(-12 + 1.6666666666666667 * var_IKs__pCa_SL))) * NV_Ith_S(mParameters, 21); // milliS_per_microF + const double var_IKs__pCa_jct = 3 - log10(var_chaste_interface__Ca_buffer__Ca_jct); // dimensionless + const double var_IKs__G_Ks_jct = (0.057000000000000002 + 0.19 / (1 + exp(-12 + 1.6666666666666667 * var_IKs__pCa_jct))) * NV_Ith_S(mParameters, 21); // milliS_per_microF + const double var_IKs__pKNa = 0.018329999999999999; // dimensionless + const double var_INa__Fx_Na_SL = 0.89000000000000001; // dimensionless + const double var_INa__Fx_Na_jct = 0.11; // dimensionless + const double var_INaCa__Fx_NCX_SL = 0.89000000000000001; // dimensionless + const double var_INaCa__Fx_NCX_jct = 0.11; // dimensionless + const double var_INaCa__HNa = 3; // dimensionless + const double var_INaCa__K_mCai = 0.0035899999999999999; // millimolar + const double var_INaCa__K_mCao = 1.3; // millimolar + const double var_INaCa__K_mNai = 12.289999999999999; // millimolar + const double var_INaCa__K_mNao = 87.5; // millimolar + const double var_INaCa__Kd_act = 0.00025599999999999999; // millimolar + const double var_INaCa__Ka_SL = 1 / (1 + pow(var_INaCa__Kd_act, 3) / pow(var_chaste_interface__Ca_buffer__Ca_SL, 3)); // dimensionless + const double var_INaCa__Ka_jct = 1 / (1 + pow(var_INaCa__Kd_act, 3) / pow(var_chaste_interface__Ca_buffer__Ca_jct, 3)); // dimensionless + const double var_INaCa__Q10_NCX = 1.5700000000000001; // dimensionless + const double var_INaCa__eta = 0.34999999999999998; // dimensionless + const double var_INaCa__ksat = 0.27000000000000002; // dimensionless + const double var_INaK__Fx_NaK_SL = 0.89000000000000001; // dimensionless + const double var_INaK__Fx_NaK_jct = 0.11; // dimensionless + const double var_INaK__H_NaK = 4; // dimensionless + const double var_INaK__I_NaK_max = 1.9099999999999999; // microA_per_microF + const double var_INaK__Km_Ko = 1.5; // millimolar + const double var_INaK__Km_Nai = 11; // millimolar + const double var_INaK__Q10_Km_Nai = 1.49; // dimensionless + const double var_INaK__Q10_NaK = 1.6299999999999999; // dimensionless + const double var_INa__openProb = pow(var_chaste_interface__INa_m_gate__m, 3) * var_chaste_interface__INa_h_gate__h * var_chaste_interface__INa_j_gate__j; // dimensionless + const double var_INab__Fx_NaBk_SL = 0.89000000000000001; // dimensionless + const double var_INab__Fx_NaBk_jct = 0.11; // dimensionless + const double var_INab__G_NaBk = 0.00029700000000000001; // milliS_per_microF + const double var_IKr_Rr_gate__Rr = 1 / (1 + exp(1.4732142857142858 + 0.044642857142857144 * var_chaste_interface__cell__V)); // dimensionless + const double var_IK1__G_K1 = 0.43033148291193518 * sqrt(NV_Ith_S(mParameters, 8)) * NV_Ith_S(mParameters, 19); // milliS_per_microF + const double var_IKr__G_IKr = 0.43033148291193518 * sqrt(NV_Ith_S(mParameters, 8)) * NV_Ith_S(mParameters, 20); // milliS_per_microF + const double var_INaK__sigma = -0.14285714285714285 + 0.14285714285714285 * exp(0.01485884101040119 * NV_Ith_S(mParameters, 9)); // dimensionless + const double var_ICaL__Q_CaL = pow(var_ICaL__Q10_CaL, (-31 + 0.10000000000000001 * NV_Ith_S(mParameters, 24))); // dimensionless + const double var_ICaL__temp = 0.45000000000000001 * pow(NV_Ith_S(mParameters, 10), 2) * var_ICaL__Q_CaL * var_chaste_interface__ICaL_d_gate__d * var_chaste_interface__ICaL_f_gate__f * var_chaste_interface__cell__V / (NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 24)); // coulomb_per_mole + const double var_ICaL__i_CaL_Ca_SL = 4 * (-var_ICaL__gamma_Cao * NV_Ith_S(mParameters, 6) + var_chaste_interface__Ca_buffer__Ca_SL * var_ICaL__gamma_Cai * exp(2 * var_chaste_interface__cell__V * NV_Ith_S(mParameters, 10) / (NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 24)))) * var_ICaL__Fx_ICaL_SL * NV_Ith_S(mParameters, 12) * var_ICaL__temp * var_ICaL_fCa_gate__fCa_SL / (-1 + exp(2 * var_chaste_interface__cell__V * NV_Ith_S(mParameters, 10) / (NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 24)))); // microA_per_microF + const double var_ICaL__i_CaL_Ca_jct = 4 * (-var_ICaL__gamma_Cao * NV_Ith_S(mParameters, 6) + var_chaste_interface__Ca_buffer__Ca_jct * var_ICaL__gamma_Cai * exp(2 * var_chaste_interface__cell__V * NV_Ith_S(mParameters, 10) / (NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 24)))) * var_ICaL__Fx_ICaL_jct * NV_Ith_S(mParameters, 12) * var_ICaL__temp * var_ICaL_fCa_gate__fCa_jct / (-1 + exp(2 * var_chaste_interface__cell__V * NV_Ith_S(mParameters, 10) / (NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 24)))); // microA_per_microF + const double var_ICaL__i_CaL_K = (var_ICaL__Fx_ICaL_SL * var_ICaL_fCa_gate__fCa_SL + var_ICaL__Fx_ICaL_jct * var_ICaL_fCa_gate__fCa_jct) * (-var_ICaL__gamma_Ko * NV_Ith_S(mParameters, 8) + var_ICaL__gamma_Ki * NV_Ith_S(mParameters, 5) * exp(var_chaste_interface__cell__V * NV_Ith_S(mParameters, 10) / (NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 24)))) * var_ICaL__PK * var_ICaL__temp / (-1 + exp(var_chaste_interface__cell__V * NV_Ith_S(mParameters, 10) / (NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 24)))); // microA_per_microF + const double var_ICaL__i_CaL_Na_SL = (-var_ICaL__gamma_Nao * NV_Ith_S(mParameters, 9) + var_ICaL__gamma_Nai * var_chaste_interface__Na_buffer__Na_SL * exp(var_chaste_interface__cell__V * NV_Ith_S(mParameters, 10) / (NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 24)))) * var_ICaL__Fx_ICaL_SL * var_ICaL__PNa * var_ICaL__temp * var_ICaL_fCa_gate__fCa_SL / (-1 + exp(var_chaste_interface__cell__V * NV_Ith_S(mParameters, 10) / (NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 24)))); // microA_per_microF + const double var_ICaL__i_CaL_Na_jct = (-var_ICaL__gamma_Nao * NV_Ith_S(mParameters, 9) + var_ICaL__gamma_Nai * var_chaste_interface__Na_buffer__Na_jct * exp(var_chaste_interface__cell__V * NV_Ith_S(mParameters, 10) / (NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 24)))) * var_ICaL__Fx_ICaL_jct * var_ICaL__PNa * var_ICaL__temp * var_ICaL_fCa_gate__fCa_jct / (-1 + exp(var_chaste_interface__cell__V * NV_Ith_S(mParameters, 10) / (NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 24)))); // microA_per_microF + const double var_ICaL__i_CaL = var_ICaL__i_CaL_Ca_SL + var_ICaL__i_CaL_Ca_jct + var_ICaL__i_CaL_K + var_ICaL__i_CaL_Na_SL + var_ICaL__i_CaL_Na_jct; // microA_per_microF + const double var_ICaL__i_CaL_converted = HeartConfig::Instance()->GetCapacitance() * var_ICaL__i_CaL; // uA_per_cm2 + const double var_ICap__Q_SLCaP = pow(var_ICap__Q10_SLCaP, (-31 + 0.10000000000000001 * NV_Ith_S(mParameters, 24))); // dimensionless + const double var_ICap__i_Cap_SL = var_ICap__Fx_SLCaP_SL * var_ICap__Q_SLCaP * var_ICap__V_maxAF / (1 + pow((var_ICap__Km / var_chaste_interface__Ca_buffer__Ca_SL), var_ICap__H)); // microA_per_microF + const double var_ICap__i_Cap_jct = var_ICap__Fx_SLCaP_jct * var_ICap__Q_SLCaP * var_ICap__V_maxAF / (1 + pow((var_ICap__Km / var_chaste_interface__Ca_buffer__Ca_jct), var_ICap__H)); // microA_per_microF + const double var_ICap__i_Cap = var_ICap__i_Cap_SL + var_ICap__i_Cap_jct; // microA_per_microF + const double var_ICap__i_Cap_converted = HeartConfig::Instance()->GetCapacitance() * var_ICap__i_Cap; // uA_per_cm2 + const double var_IKs__E_Ks = NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 24) * log((var_IKs__pKNa * NV_Ith_S(mParameters, 9) + NV_Ith_S(mParameters, 8)) / (var_IKs__pKNa * var_chaste_interface__Na_buffer__Nai + NV_Ith_S(mParameters, 5))) / NV_Ith_S(mParameters, 10); // millivolt + const double var_IKs__i_Ks_SL = pow(var_chaste_interface__IKs_Xs_gate__Xs, 2) * (-var_IKs__E_Ks + var_chaste_interface__cell__V) * var_IKs__Fx_Ks_SL * var_IKs__G_Ks_SL; // microA_per_microF + const double var_IKs__i_Ks_jct = pow(var_chaste_interface__IKs_Xs_gate__Xs, 2) * (-var_IKs__E_Ks + var_chaste_interface__cell__V) * var_IKs__Fx_Ks_jct * var_IKs__G_Ks_jct; // microA_per_microF + const double var_IKs__i_Ks = var_IKs__i_Ks_SL + var_IKs__i_Ks_jct; // microA_per_microF + const double var_IKs__i_Ks_converted = HeartConfig::Instance()->GetCapacitance() * var_IKs__i_Ks; // uA_per_cm2 + const double var_INaCa__Q_NCX = pow(var_INaCa__Q10_NCX, (-31 + 0.10000000000000001 * NV_Ith_S(mParameters, 24))); // dimensionless + const double var_INaCa__temp_SL = (pow(var_chaste_interface__Na_buffer__Na_SL, var_INaCa__HNa) * NV_Ith_S(mParameters, 6) * exp(var_INaCa__eta * var_chaste_interface__cell__V * NV_Ith_S(mParameters, 10) / (NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 24))) - pow(NV_Ith_S(mParameters, 9), var_INaCa__HNa) * var_chaste_interface__Ca_buffer__Ca_SL * exp((-1 + var_INaCa__eta) * var_chaste_interface__cell__V * NV_Ith_S(mParameters, 10) / (NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 24)))) / (1 + var_INaCa__ksat * exp((-1 + var_INaCa__eta) * var_chaste_interface__cell__V * NV_Ith_S(mParameters, 10) / (NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 24)))); // millimolar4 + const double var_INaCa__i_NaCa_SL = var_INaCa__Fx_NCX_SL * var_INaCa__Ka_SL * var_INaCa__Q_NCX * NV_Ith_S(mParameters, 23) * var_INaCa__temp_SL / (pow(var_chaste_interface__Na_buffer__Na_SL, var_INaCa__HNa) * var_INaCa__K_mCao + pow(var_chaste_interface__Na_buffer__Na_SL, var_INaCa__HNa) * NV_Ith_S(mParameters, 6) + pow(NV_Ith_S(mParameters, 9), var_INaCa__HNa) * var_chaste_interface__Ca_buffer__Ca_SL + pow(var_INaCa__K_mNao, var_INaCa__HNa) * (1 + var_chaste_interface__Ca_buffer__Ca_SL / var_INaCa__K_mCai) * var_chaste_interface__Ca_buffer__Ca_SL + pow(NV_Ith_S(mParameters, 9), var_INaCa__HNa) * (1 + pow((var_chaste_interface__Na_buffer__Na_SL / var_INaCa__K_mNai), var_INaCa__HNa)) * var_INaCa__K_mCai); // microA_per_microF + const double var_INaCa__temp_jct = (pow(var_chaste_interface__Na_buffer__Na_jct, var_INaCa__HNa) * NV_Ith_S(mParameters, 6) * exp(var_INaCa__eta * var_chaste_interface__cell__V * NV_Ith_S(mParameters, 10) / (NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 24))) - pow(NV_Ith_S(mParameters, 9), var_INaCa__HNa) * var_chaste_interface__Ca_buffer__Ca_jct * exp((-1 + var_INaCa__eta) * var_chaste_interface__cell__V * NV_Ith_S(mParameters, 10) / (NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 24)))) / (1 + var_INaCa__ksat * exp((-1 + var_INaCa__eta) * var_chaste_interface__cell__V * NV_Ith_S(mParameters, 10) / (NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 24)))); // millimolar4 + const double var_INaCa__i_NaCa_jct = var_INaCa__Fx_NCX_jct * var_INaCa__Ka_jct * var_INaCa__Q_NCX * NV_Ith_S(mParameters, 23) * var_INaCa__temp_jct / (pow(var_chaste_interface__Na_buffer__Na_jct, var_INaCa__HNa) * var_INaCa__K_mCao + pow(var_chaste_interface__Na_buffer__Na_jct, var_INaCa__HNa) * NV_Ith_S(mParameters, 6) + pow(NV_Ith_S(mParameters, 9), var_INaCa__HNa) * var_chaste_interface__Ca_buffer__Ca_jct + pow(var_INaCa__K_mNao, var_INaCa__HNa) * (1 + var_chaste_interface__Ca_buffer__Ca_jct / var_INaCa__K_mCai) * var_chaste_interface__Ca_buffer__Ca_jct + pow(NV_Ith_S(mParameters, 9), var_INaCa__HNa) * (1 + pow((var_chaste_interface__Na_buffer__Na_jct / var_INaCa__K_mNai), var_INaCa__HNa)) * var_INaCa__K_mCai); // microA_per_microF + const double var_INaCa__i_NaCa = var_INaCa__i_NaCa_SL + var_INaCa__i_NaCa_jct; // microA_per_microF + const double var_INaCa__i_NaCa_converted = HeartConfig::Instance()->GetCapacitance() * var_INaCa__i_NaCa; // uA_per_cm2 + const double var_INaK__Q_Km_Nai = pow(var_INaK__Q10_Km_Nai, (-31 + 0.10000000000000001 * NV_Ith_S(mParameters, 24))); // dimensionless + const double var_INaK__Q_NaK = pow(var_INaK__Q10_NaK, (-31 + 0.10000000000000001 * NV_Ith_S(mParameters, 24))); // dimensionless + const double var_INaK__f_NaK = 1 / (1 + 0.1245 * exp(-0.10000000000000001 * var_chaste_interface__cell__V * NV_Ith_S(mParameters, 10) / (NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 24))) + 0.036499999999999998 * var_INaK__sigma * exp(-var_chaste_interface__cell__V * NV_Ith_S(mParameters, 10) / (NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 24)))); // dimensionless + const double var_INaK__i_NaK_SL = var_INaK__Fx_NaK_SL * var_INaK__I_NaK_max * var_INaK__Q_NaK * var_INaK__f_NaK * NV_Ith_S(mParameters, 8) / ((1 + pow((var_INaK__Km_Nai * var_INaK__Q_Km_Nai / var_chaste_interface__Na_buffer__Na_SL), var_INaK__H_NaK)) * (var_INaK__Km_Ko + NV_Ith_S(mParameters, 8))); // microA_per_microF + const double var_INaK__i_NaK_jct = var_INaK__Fx_NaK_jct * var_INaK__I_NaK_max * var_INaK__Q_NaK * var_INaK__f_NaK * NV_Ith_S(mParameters, 8) / ((1 + pow((var_INaK__Km_Nai * var_INaK__Q_Km_Nai / var_chaste_interface__Na_buffer__Na_jct), var_INaK__H_NaK)) * (var_INaK__Km_Ko + NV_Ith_S(mParameters, 8))); // microA_per_microF + const double var_INaK__i_NaK = var_INaK__i_NaK_SL + var_INaK__i_NaK_jct; // microA_per_microF + const double var_reversal_potentials__E_Ca_SL = 0.5 * NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 24) * log(NV_Ith_S(mParameters, 6) / var_chaste_interface__Ca_buffer__Ca_SL) / NV_Ith_S(mParameters, 10); // millivolt + const double var_ICab__i_Cab_SL = (-var_reversal_potentials__E_Ca_SL + var_chaste_interface__cell__V) * var_ICab__Fx_CaBk_SL * var_ICab__G_CaBk; // microA_per_microF + const double var_reversal_potentials__E_Ca_jct = 0.5 * NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 24) * log(NV_Ith_S(mParameters, 6) / var_chaste_interface__Ca_buffer__Ca_jct) / NV_Ith_S(mParameters, 10); // millivolt + const double var_ICab__i_Cab_jct = (-var_reversal_potentials__E_Ca_jct + var_chaste_interface__cell__V) * var_ICab__Fx_CaBk_jct * var_ICab__G_CaBk; // microA_per_microF + const double var_ICab__i_Cab = var_ICab__i_Cab_SL + var_ICab__i_Cab_jct; // microA_per_microF + const double var_ICab__i_Cab_converted = HeartConfig::Instance()->GetCapacitance() * var_ICab__i_Cab; // uA_per_cm2 + const double var_reversal_potentials__E_Cl = -NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 24) * log(NV_Ith_S(mParameters, 7) / NV_Ith_S(mParameters, 4)) / NV_Ith_S(mParameters, 10); // millivolt + const double var_ICl_Ca__i_Cl_Ca = (-var_reversal_potentials__E_Cl + var_chaste_interface__cell__V) * (var_ICl_Ca__Fx_Cl_SL / (1 + var_ICl_Ca__Kd_ClCa / var_chaste_interface__Ca_buffer__Ca_SL) + var_ICl_Ca__Fx_Cl_jct / (1 + var_ICl_Ca__Kd_ClCa / var_chaste_interface__Ca_buffer__Ca_jct)) * var_ICl_Ca__G_Cl; // microA_per_microF + const double var_IClb__i_Clb = (-var_reversal_potentials__E_Cl + var_chaste_interface__cell__V) * NV_Ith_S(mParameters, 13); // microA_per_microF + const double var_IClb__i_Clb_converted = HeartConfig::Instance()->GetCapacitance() * var_IClb__i_Clb; // uA_per_cm2 + const double var_reversal_potentials__E_K = NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 24) * log(NV_Ith_S(mParameters, 8) / NV_Ith_S(mParameters, 5)) / NV_Ith_S(mParameters, 10); // millivolt + const double var_IK1_K1_gate__alpha_K1 = 1.02 / (1 + exp(-14.1227775 + 0.23849999999999999 * var_chaste_interface__cell__V - 0.23849999999999999 * var_reversal_potentials__E_K)); // per_millisecond + const double var_IK1_K1_gate__beta_K1 = (exp(-36.698642499999998 + 0.061749999999999999 * var_chaste_interface__cell__V - 0.061749999999999999 * var_reversal_potentials__E_K) + 0.49124000000000001 * exp(0.43983232 + 0.080320000000000003 * var_chaste_interface__cell__V - 0.080320000000000003 * var_reversal_potentials__E_K)) / (1 + exp(-2.4444678999999998 + 0.51429999999999998 * var_reversal_potentials__E_K - 0.51429999999999998 * var_chaste_interface__cell__V)); // per_millisecond + const double var_IK1_K1_gate__K1_infinity = var_IK1_K1_gate__alpha_K1 / (var_IK1_K1_gate__alpha_K1 + var_IK1_K1_gate__beta_K1); // dimensionless + const double var_IK1__i_K1 = (-var_reversal_potentials__E_K + var_chaste_interface__cell__V) * var_IK1__G_K1 * var_IK1_K1_gate__K1_infinity; // microA_per_microF + const double var_IK1__i_K1_converted = HeartConfig::Instance()->GetCapacitance() * var_IK1__i_K1; // uA_per_cm2 + const double var_IKr__i_Kr = (-var_reversal_potentials__E_K + var_chaste_interface__cell__V) * var_IKr__G_IKr * var_IKr_Rr_gate__Rr * var_chaste_interface__IKr_Xr_gate__Xr; // microA_per_microF + const double var_IKr__i_Kr_converted = HeartConfig::Instance()->GetCapacitance() * var_IKr__i_Kr; // uA_per_cm2 + const double var_Itof__i_tof = (-var_reversal_potentials__E_K + var_chaste_interface__cell__V) * NV_Ith_S(mParameters, 18) * var_chaste_interface__Itof_X_gate__X_tof * var_chaste_interface__Itof_Y_gate__Y_tof; // microA_per_microF + const double var_Itof__i_tof_converted = HeartConfig::Instance()->GetCapacitance() * var_Itof__i_tof; // uA_per_cm2 + const double var_Itos__i_tos = (-var_reversal_potentials__E_K + var_chaste_interface__cell__V) * (0.5 * var_chaste_interface__Itos_R_gate__R_tos + var_chaste_interface__Itos_Y_gate__Y_tos) * NV_Ith_S(mParameters, 22) * var_chaste_interface__Itos_X_gate__X_tos; // microA_per_microF + const double var_Itos__i_tos_converted = HeartConfig::Instance()->GetCapacitance() * var_Itos__i_tos; // uA_per_cm2 + const double var_reversal_potentials__E_Na_SL = NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 24) * log(NV_Ith_S(mParameters, 9) / var_chaste_interface__Na_buffer__Na_SL) / NV_Ith_S(mParameters, 10); // millivolt + const double var_INa__i_Na_SL = (-var_reversal_potentials__E_Na_SL + var_chaste_interface__cell__V) * var_INa__Fx_Na_SL * NV_Ith_S(mParameters, 15) * var_INa__openProb; // microA_per_microF + const double var_INab__i_Nab_SL = (-var_reversal_potentials__E_Na_SL + var_chaste_interface__cell__V) * var_INab__Fx_NaBk_SL * var_INab__G_NaBk; // microA_per_microF + const double var_reversal_potentials__E_Na_jct = NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 24) * log(NV_Ith_S(mParameters, 9) / var_chaste_interface__Na_buffer__Na_jct) / NV_Ith_S(mParameters, 10); // millivolt + const double var_INa__i_Na_jct = (-var_reversal_potentials__E_Na_jct + var_chaste_interface__cell__V) * var_INa__Fx_Na_jct * NV_Ith_S(mParameters, 15) * var_INa__openProb; // microA_per_microF + const double var_INa__i_Na = var_INa__i_Na_SL + var_INa__i_Na_jct; // microA_per_microF + const double var_INa__i_Na_converted = HeartConfig::Instance()->GetCapacitance() * var_INa__i_Na; // uA_per_cm2 + const double var_INab__i_Nab_jct = (-var_reversal_potentials__E_Na_jct + var_chaste_interface__cell__V) * var_INab__Fx_NaBk_jct * var_INab__G_NaBk; // microA_per_microF + const double var_INab__i_Nab = var_INab__i_Nab_SL + var_INab__i_Nab_jct; // microA_per_microF + const double var_INab__i_Nab_converted = HeartConfig::Instance()->GetCapacitance() * var_INab__i_Nab; // uA_per_cm2 + const double var_chaste_interface__i_ionic = HeartConfig::Instance()->GetCapacitance() * var_ICl_Ca__i_Cl_Ca + HeartConfig::Instance()->GetCapacitance() * var_INaK__i_NaK + var_ICaL__i_CaL_converted + var_ICab__i_Cab_converted + var_ICap__i_Cap_converted + var_IClb__i_Clb_converted + var_IK1__i_K1_converted + var_IKr__i_Kr_converted + var_IKs__i_Ks_converted + var_INa__i_Na_converted + var_INaCa__i_NaCa_converted + var_INab__i_Nab_converted + var_Itof__i_tof_converted + var_Itos__i_tos_converted; // uA_per_cm2 + + const double i_ionic = var_chaste_interface__i_ionic; + if (made_new_cvode_vector) + { + DeleteVector(rY); + } + EXCEPT_IF_NOT(!std::isnan(i_ionic)); + return i_ionic; + } + + void Cellshannon_wang_puglisi_weber_bers_2004FromCellMLCvodeDataClamp::EvaluateYDerivatives(double var_chaste_interface__environment__time, const N_Vector rY, N_Vector rDY) + { + // Inputs: + // Time units: millisecond + double var_chaste_interface__cell__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : mp_membrane_voltage_modifier->Calc(NV_Ith_S(rY, 0), var_chaste_interface__environment__time)); + // Units: millivolt; Initial value: -85.721630473733 + double var_chaste_interface__Ca_buffer__Cai = mp_cytosolic_calcium_concentration_modifier->Calc(NV_Ith_S(rY, 1), var_chaste_interface__environment__time); + // Units: millimolar; Initial value: 8.6504944644883e-05 + double var_chaste_interface__INa_h_gate__h = mp_membrane_fast_sodium_current_h_gate_modifier->Calc(NV_Ith_S(rY, 2), var_chaste_interface__environment__time); + // Units: dimensionless; Initial value: 0.98714602875678 + double var_chaste_interface__INa_j_gate__j = mp_membrane_fast_sodium_current_j_gate_modifier->Calc(NV_Ith_S(rY, 3), var_chaste_interface__environment__time); + // Units: dimensionless; Initial value: 0.991826348770428 + double var_chaste_interface__INa_m_gate__m = mp_membrane_fast_sodium_current_m_gate_modifier->Calc(NV_Ith_S(rY, 4), var_chaste_interface__environment__time); + // Units: dimensionless; Initial value: 0.0013702407736465 + double var_chaste_interface__IKr_Xr_gate__Xr = NV_Ith_S(rY, 5); + // Units: dimensionless; Initial value: 0.00846906175020028 + double var_chaste_interface__IKs_Xs_gate__Xs = NV_Ith_S(rY, 6); + // Units: dimensionless; Initial value: 0.00613557812033723 + double var_chaste_interface__Itos_X_gate__X_tos = NV_Ith_S(rY, 7); + // Units: dimensionless; Initial value: 0.00401072468238921 + double var_chaste_interface__Itos_Y_gate__Y_tos = NV_Ith_S(rY, 8); + // Units: dimensionless; Initial value: 0.31555225368514 + double var_chaste_interface__Itos_R_gate__R_tos = NV_Ith_S(rY, 9); + // Units: dimensionless; Initial value: 0.402577243036347 + double var_chaste_interface__Itof_X_gate__X_tof = NV_Ith_S(rY, 10); + // Units: dimensionless; Initial value: 0.00401068798369438 + double var_chaste_interface__Itof_Y_gate__Y_tof = NV_Ith_S(rY, 11); + // Units: dimensionless; Initial value: 0.994632857675454 + double var_chaste_interface__ICaL_d_gate__d = mp_membrane_L_type_calcium_current_d_gate_modifier->Calc(NV_Ith_S(rY, 12), var_chaste_interface__environment__time); + // Units: dimensionless; Initial value: 6.99526086177479e-06 + double var_chaste_interface__ICaL_f_gate__f = mp_membrane_L_type_calcium_current_f_gate_modifier->Calc(NV_Ith_S(rY, 13), var_chaste_interface__environment__time); + // Units: dimensionless; Initial value: 1.00067601563206 + double var_chaste_interface__ICaL_fCa_gate__fCaB_SL = NV_Ith_S(rY, 14); + // Units: dimensionless; Initial value: 0.0150193299768419 + double var_chaste_interface__ICaL_fCa_gate__fCaB_jct = NV_Ith_S(rY, 15); + // Units: dimensionless; Initial value: 0.0244048782575591 + double var_chaste_interface__Jrel_SR__R = NV_Ith_S(rY, 16); + // Units: dimensionless; Initial value: 0.890917121306535 + double var_chaste_interface__Jrel_SR__I = NV_Ith_S(rY, 17); + // Units: dimensionless; Initial value: 8.71752603681652e-08 + double var_chaste_interface__Jrel_SR__O = NV_Ith_S(rY, 18); + // Units: dimensionless; Initial value: 7.1199533741995e-07 + double var_chaste_interface__Na_buffer__Na_SL = mp_submembrane_space_sodium_concentration_modifier->Calc(NV_Ith_S(rY, 19), var_chaste_interface__environment__time); + // Units: millimolar; Initial value: 8.87161932058707 + double var_chaste_interface__Na_buffer__Na_jct = mp_dyadic_space_sodium_concentration_modifier->Calc(NV_Ith_S(rY, 20), var_chaste_interface__environment__time); + // Units: millimolar; Initial value: 8.87031835089116 + double var_chaste_interface__Na_buffer__Na_SL_buf = NV_Ith_S(rY, 21); + // Units: millimolar; Initial value: 0.77606800956492 + double var_chaste_interface__Na_buffer__Na_jct_buf = NV_Ith_S(rY, 22); + // Units: millimolar; Initial value: 3.55668431730337 + double var_chaste_interface__Na_buffer__Nai = mp_cytosolic_sodium_concentration_modifier->Calc(NV_Ith_S(rY, 23), var_chaste_interface__environment__time); + // Units: millimolar; Initial value: 8.87200572571131 + double var_chaste_interface__Ca_buffer__Ca_SR = mp_JSR_calcium_concentration_modifier->Calc(NV_Ith_S(rY, 24), var_chaste_interface__environment__time); + // Units: millimolar; Initial value: 0.547125831028543 + double var_chaste_interface__Ca_buffer__Ca_SL = mp_submembrane_space_calcium_concentration_modifier->Calc(NV_Ith_S(rY, 25), var_chaste_interface__environment__time); + // Units: millimolar; Initial value: 0.000104971310105451 + double var_chaste_interface__Ca_buffer__Ca_jct = mp_dyadic_space_calcium_concentration_modifier->Calc(NV_Ith_S(rY, 26), var_chaste_interface__environment__time); + // Units: millimolar; Initial value: 0.000174045152623969 + double var_chaste_interface__Ca_buffer__Ca_SLB_SL = NV_Ith_S(rY, 27); + // Units: millimolar; Initial value: 0.00973710481246467 + double var_chaste_interface__Ca_buffer__Ca_SLB_jct = NV_Ith_S(rY, 28); + // Units: millimolar; Initial value: 0.00774564218017916 + double var_chaste_interface__Ca_buffer__Ca_SLHigh_SL = NV_Ith_S(rY, 29); + // Units: millimolar; Initial value: 0.113168405274355 + double var_chaste_interface__Ca_buffer__Ca_SLHigh_jct = NV_Ith_S(rY, 30); + // Units: millimolar; Initial value: 0.0772568134367606 + double var_chaste_interface__Ca_buffer__Ca_Calsequestrin = NV_Ith_S(rY, 31); + // Units: millimolar; Initial value: 1.18828527890062 + double var_chaste_interface__cytosolic_Ca_buffer__Ca_TroponinC = NV_Ith_S(rY, 32); + // Units: millimolar; Initial value: 0.00886665040283094 + double var_chaste_interface__cytosolic_Ca_buffer__Ca_TroponinC_Ca_Mg = NV_Ith_S(rY, 33); + // Units: millimolar; Initial value: 0.117873278193472 + double var_chaste_interface__cytosolic_Ca_buffer__Mg_TroponinC_Ca_Mg = NV_Ith_S(rY, 34); + // Units: millimolar; Initial value: 0.0103906683506505 + double var_chaste_interface__cytosolic_Ca_buffer__Ca_Calmodulin = NV_Ith_S(rY, 35); + // Units: millimolar; Initial value: 0.000293073957804278 + double var_chaste_interface__cytosolic_Ca_buffer__Ca_Myosin = NV_Ith_S(rY, 36); + // Units: millimolar; Initial value: 0.00195899238146509 + double var_chaste_interface__cytosolic_Ca_buffer__Mg_Myosin = NV_Ith_S(rY, 37); + // Units: millimolar; Initial value: 0.137523520981802 + double var_chaste_interface__cytosolic_Ca_buffer__Ca_SRB = NV_Ith_S(rY, 38); + // Units: millimolar; Initial value: 0.00215728901718264 + double var_chaste_interface__indo_fluo_Ca_buffer_not_connected__Ca_Indo1_Cytosol = NV_Ith_S(rY, 39); + // Units: millimolar; Initial value: 0.0 + double var_chaste_interface__indo_fluo_Ca_buffer_not_connected__Ca_Indo1_SL = NV_Ith_S(rY, 40); + // Units: millimolar; Initial value: 0.0 + double var_chaste_interface__indo_fluo_Ca_buffer_not_connected__Ca_Indo1_jct = NV_Ith_S(rY, 41); + // Units: millimolar; Initial value: 0.0 + double var_chaste_interface__indo_fluo_Ca_buffer_not_connected__Ca_Fluo3_Cytosol = NV_Ith_S(rY, 42); + // Units: millimolar; Initial value: 0.0 + double var_chaste_interface__indo_fluo_Ca_buffer_not_connected__Ca_Fluo3_SL = NV_Ith_S(rY, 43); + // Units: millimolar; Initial value: 0.0 + double var_chaste_interface__indo_fluo_Ca_buffer_not_connected__Ca_Fluo3_jct = NV_Ith_S(rY, 44); + // Units: millimolar; Initial value: 0.0 + + // Mathematics + double d_dt_chaste_interface_var_cell__V; + const double var_Ca_buffer__Bmax_Calsequestrin = 0.14000000000000001; // millimolar + const double var_Ca_buffer__Bmax_SLB_SL = 0.037400000000000003; // millimolar + const double var_Ca_buffer__Bmax_SLB_jct = 0.0045999999999999999; // millimolar + const double var_Ca_buffer__Bmax_SLHigh_SL = 0.0134; // millimolar + const double var_Ca_buffer__Bmax_SLHigh_jct = 0.00165; // millimolar + const double var_Ca_buffer__koff_Calsequestrin = 65; // per_millisecond + const double var_Ca_buffer__koff_SLB = 1.3; // per_millisecond + const double var_Ca_buffer__koff_SLHigh = 0.029999999999999999; // per_millisecond + const double var_Ca_buffer__kon_Calsequestrin = 100; // per_millimolar_per_millisecond + const double var_Ca_buffer__kon_SL = 100; // per_millimolar_per_millisecond + const double var_ICaL__Fx_ICaL_SL = 0.10000000000000001; // dimensionless + const double var_ICaL__Fx_ICaL_jct = 0.90000000000000002; // dimensionless + const double var_ICaL__PNa = 1.4999999999999999e-8; // litre_per_farad_millisecond + const double var_ICaL__Q10_CaL = 1.8; // dimensionless + const double var_ICaL__gamma_Cai = 0.34100000000000003; // dimensionless + const double var_ICaL__gamma_Cao = 0.34100000000000003; // dimensionless + const double var_ICaL__gamma_Nai = 0.75; // dimensionless + const double var_ICaL__gamma_Nao = 0.75; // dimensionless + const double d_dt_chaste_interface_var_ICaL_fCa_gate__fCaB_SL = -0.011900000000000001 * var_chaste_interface__ICaL_fCa_gate__fCaB_SL + 1.7 * (1 - var_chaste_interface__ICaL_fCa_gate__fCaB_SL) * var_chaste_interface__Ca_buffer__Ca_SL; // 1 / millisecond + const double d_dt_chaste_interface_var_ICaL_fCa_gate__fCaB_jct = -0.011900000000000001 * var_chaste_interface__ICaL_fCa_gate__fCaB_jct + 1.7 * (1 - var_chaste_interface__ICaL_fCa_gate__fCaB_jct) * var_chaste_interface__Ca_buffer__Ca_jct; // 1 / millisecond + const double var_ICaL_fCa_gate__fCa_SL = mp_membrane_L_type_calcium_current_fCa_gate_modifier->Calc(1 - var_chaste_interface__ICaL_fCa_gate__fCaB_SL, var_chaste_interface__environment__time); // dimensionless + const double var_ICaL_fCa_gate__fCa_jct = 1 - var_chaste_interface__ICaL_fCa_gate__fCaB_jct; // dimensionless + const double var_ICab__Fx_CaBk_SL = 0.89000000000000001; // dimensionless + const double var_ICab__Fx_CaBk_jct = 0.11; // dimensionless + const double var_ICab__G_CaBk = 0.00025129999999999998; // milliS_per_microF + const double var_ICap__Fx_SLCaP_SL = 0.89000000000000001; // dimensionless + const double var_ICap__Fx_SLCaP_jct = 0.11; // dimensionless + const double var_ICap__H = 1.6000000000000001; // dimensionless + const double var_ICap__Km = 0.00050000000000000001; // millimolar + const double var_ICap__Q10_SLCaP = 2.3500000000000001; // dimensionless + const double var_ICap__V_maxAF = 0.067299999999999999; // microA_per_microF + const double var_INa__Fx_Na_SL = 0.89000000000000001; // dimensionless + const double var_INa__Fx_Na_jct = 0.11; // dimensionless + const double var_INaCa__Fx_NCX_SL = 0.89000000000000001; // dimensionless + const double var_INaCa__Fx_NCX_jct = 0.11; // dimensionless + const double var_INaCa__HNa = 3; // dimensionless + const double var_INaCa__K_mCai = 0.0035899999999999999; // millimolar + const double var_INaCa__K_mCao = 1.3; // millimolar + const double var_INaCa__K_mNai = 12.289999999999999; // millimolar + const double var_INaCa__K_mNao = 87.5; // millimolar + const double var_INaCa__Kd_act = 0.00025599999999999999; // millimolar + const double var_INaCa__Ka_SL = 1 / (1 + pow(var_INaCa__Kd_act, 3) / pow(var_chaste_interface__Ca_buffer__Ca_SL, 3)); // dimensionless + const double var_INaCa__Ka_jct = 1 / (1 + pow(var_INaCa__Kd_act, 3) / pow(var_chaste_interface__Ca_buffer__Ca_jct, 3)); // dimensionless + const double var_INaCa__Q10_NCX = 1.5700000000000001; // dimensionless + const double var_INaCa__eta = 0.34999999999999998; // dimensionless + const double var_INaCa__ksat = 0.27000000000000002; // dimensionless + const double var_INaK__Fx_NaK_SL = 0.89000000000000001; // dimensionless + const double var_INaK__Fx_NaK_jct = 0.11; // dimensionless + const double var_INaK__H_NaK = 4; // dimensionless + const double var_INaK__I_NaK_max = 1.9099999999999999; // microA_per_microF + const double var_INaK__Km_Ko = 1.5; // millimolar + const double var_INaK__Km_Nai = 11; // millimolar + const double var_INaK__Q10_Km_Nai = 1.49; // dimensionless + const double var_INaK__Q10_NaK = 1.6299999999999999; // dimensionless + const double var_INa__openProb = pow(var_chaste_interface__INa_m_gate__m, 3) * var_chaste_interface__INa_h_gate__h * var_chaste_interface__INa_j_gate__j; // dimensionless + const double var_INab__Fx_NaBk_SL = 0.89000000000000001; // dimensionless + const double var_INab__Fx_NaBk_jct = 0.11; // dimensionless + const double var_INab__G_NaBk = 0.00029700000000000001; // milliS_per_microF + const double var_Jleak_SR__j_leak_SR = (-var_chaste_interface__Ca_buffer__Ca_jct + var_chaste_interface__Ca_buffer__Ca_SR) * mp_SR_leak_current_max_modifier->Calc(NV_Ith_S(mParameters, 0), var_chaste_interface__environment__time); // millimolar_per_millisecond + const double var_Jpump_SR__H = 1.7869999999999999; // dimensionless + const double var_Jpump_SR__Kmf = 0.00024600000000000002; // millimolar + const double var_Jpump_SR__Kmr = 1.7; // millimolar + const double var_Jpump_SR__Q10_SRCaP = 2.6000000000000001; // dimensionless + const double var_Jrel_SR__EC50_SR = 0.45000000000000001; // millimolar + const double var_Jrel_SR__HSR = 2.5; // dimensionless + const double var_Jrel_SR__Max_SR = 15; // dimensionless + const double var_Jrel_SR__Min_SR = 1; // dimensionless + const double var_Jrel_SR__RI = 1 - var_chaste_interface__Jrel_SR__I - var_chaste_interface__Jrel_SR__O - var_chaste_interface__Jrel_SR__R; // dimensionless + const double var_Jrel_SR__kCaSR = -(-var_Jrel_SR__Min_SR + var_Jrel_SR__Max_SR) / (1 + pow((var_Jrel_SR__EC50_SR / var_chaste_interface__Ca_buffer__Ca_SR), var_Jrel_SR__HSR)) + var_Jrel_SR__Max_SR; // dimensionless + const double var_Jrel_SR__kiCa = 0.5; // per_millimolar_per_millisecond + const double var_Jrel_SR__kiSRCa = var_Jrel_SR__kCaSR * var_Jrel_SR__kiCa; // per_millimolar_per_millisecond + const double var_Jrel_SR__kim = 0.0050000000000000001; // per_millisecond + const double var_Jrel_SR__koCa = 10; // per_millimolar2_per_millisecond + const double var_Jrel_SR__koSRCa = var_Jrel_SR__koCa / var_Jrel_SR__kCaSR; // per_millimolar2_per_millisecond + const double var_Jrel_SR__kom = 0.059999999999999998; // per_millisecond + const double d_dt_chaste_interface_var_Jrel_SR__I = -var_chaste_interface__Jrel_SR__I * var_Jrel_SR__kim - var_chaste_interface__Jrel_SR__I * var_Jrel_SR__kom + pow(var_chaste_interface__Ca_buffer__Ca_jct, 2) * var_Jrel_SR__RI * var_Jrel_SR__koSRCa + var_chaste_interface__Ca_buffer__Ca_jct * var_chaste_interface__Jrel_SR__O * var_Jrel_SR__kiSRCa; // 1 / millisecond + const double d_dt_chaste_interface_var_Jrel_SR__O = var_chaste_interface__Jrel_SR__I * var_Jrel_SR__kim - var_chaste_interface__Jrel_SR__O * var_Jrel_SR__kom + pow(var_chaste_interface__Ca_buffer__Ca_jct, 2) * var_chaste_interface__Jrel_SR__R * var_Jrel_SR__koSRCa - var_chaste_interface__Ca_buffer__Ca_jct * var_chaste_interface__Jrel_SR__O * var_Jrel_SR__kiSRCa; // 1 / millisecond + const double d_dt_chaste_interface_var_Jrel_SR__R = var_chaste_interface__Jrel_SR__O * var_Jrel_SR__kom + var_Jrel_SR__RI * var_Jrel_SR__kim - pow(var_chaste_interface__Ca_buffer__Ca_jct, 2) * var_chaste_interface__Jrel_SR__R * var_Jrel_SR__koSRCa - var_chaste_interface__Ca_buffer__Ca_jct * var_chaste_interface__Jrel_SR__R * var_Jrel_SR__kiSRCa; // 1 / millisecond + const double var_Jrel_SR__j_rel_SR = mp_SR_release_current_modifier->Calc((-var_chaste_interface__Ca_buffer__Ca_jct + var_chaste_interface__Ca_buffer__Ca_SR) * var_chaste_interface__Jrel_SR__O * mp_SR_release_current_max_modifier->Calc(NV_Ith_S(mParameters, 1), var_chaste_interface__environment__time), var_chaste_interface__environment__time); // millimolar_per_millisecond + const double var_Na_buffer__Bmax_SL = 1.6499999999999999; // millimolar + const double var_Na_buffer__Bmax_jct = 7.5609999999999999; // millimolar + const double var_Na_buffer__koff = 0.001; // per_millisecond + const double var_Na_buffer__kon = 0.0001; // per_millimolar_per_millisecond + const double var_Na_buffer__dNa_SL_buf = -var_chaste_interface__Na_buffer__Na_SL_buf * var_Na_buffer__koff + (-var_chaste_interface__Na_buffer__Na_SL_buf + var_Na_buffer__Bmax_SL) * var_chaste_interface__Na_buffer__Na_SL * var_Na_buffer__kon; // millimolar_per_millisecond + const double d_dt_chaste_interface_var_Na_buffer__Na_SL_buf = var_Na_buffer__dNa_SL_buf; // millimolar / millisecond + const double var_Na_buffer__dNa_jct_buf = -var_chaste_interface__Na_buffer__Na_jct_buf * var_Na_buffer__koff + (-var_chaste_interface__Na_buffer__Na_jct_buf + var_Na_buffer__Bmax_jct) * var_chaste_interface__Na_buffer__Na_jct * var_Na_buffer__kon; // millimolar_per_millisecond + const double d_dt_chaste_interface_var_Na_buffer__Na_jct_buf = var_Na_buffer__dNa_jct_buf; // millimolar / millisecond + const double var_ICaL_d_gate__d_infinity = 1 / (1 + exp(-2.4166666666666665 - 0.16666666666666666 * var_chaste_interface__cell__V)); // dimensionless + const double var_ICaL_d_gate__tau_d = 28.571428571428569 * (1 - exp(-2.4166666666666665 - 0.16666666666666666 * var_chaste_interface__cell__V)) * var_ICaL_d_gate__d_infinity / (14.5 + var_chaste_interface__cell__V); // millisecond + const double d_dt_chaste_interface_var_ICaL_d_gate__d = (-var_chaste_interface__ICaL_d_gate__d + var_ICaL_d_gate__d_infinity) / var_ICaL_d_gate__tau_d; // 1 / millisecond + const double var_ICaL_f_gate__f_infinity = 1 / (1 + exp(9.7388888888888889 + 0.27777777777777779 * var_chaste_interface__cell__V)) + 0.59999999999999998 / (1 + exp(2.5 - 0.050000000000000003 * var_chaste_interface__cell__V)); // dimensionless + const double var_ICaL_f_gate__tau_f = mp_membrane_L_type_calcium_current_f_gate_tau_modifier->Calc(1 / (0.02 + 0.019699999999999999 * exp(-0.23877882250000002 * pow((1 + 0.068965517241379309 * var_chaste_interface__cell__V), 2))), var_chaste_interface__environment__time); // millisecond + const double d_dt_chaste_interface_var_ICaL_f_gate__f = (-var_chaste_interface__ICaL_f_gate__f + var_ICaL_f_gate__f_infinity) / var_ICaL_f_gate__tau_f; // 1 / millisecond + const double var_IKr_Xr_gate__Xr_infinity = 1 / (1 + exp(-6.666666666666667 - 0.13333333333333333 * var_chaste_interface__cell__V)); // dimensionless + const double var_IKr_Xr_gate__tau_Xr = 1 / (0.00060999999999999997 * (10 + var_chaste_interface__cell__V) / (-1 + exp(1.45 + 0.14499999999999999 * var_chaste_interface__cell__V)) + 0.0013799999999999999 * (7 + var_chaste_interface__cell__V) / (1 - exp(-0.86099999999999999 - 0.123 * var_chaste_interface__cell__V))); // millisecond + const double d_dt_chaste_interface_var_IKr_Xr_gate__Xr = (-var_chaste_interface__IKr_Xr_gate__Xr + var_IKr_Xr_gate__Xr_infinity) / var_IKr_Xr_gate__tau_Xr; // 1 / millisecond + const double var_IKs_Xs_gate__Xs_infinity = 1 / (1 + exp(0.089820359281437126 - 0.059880239520958084 * var_chaste_interface__cell__V)); // dimensionless + const double var_IKs_Xs_gate__tau_Xs = 1 / (0.00013100000000000001 * (30 + var_chaste_interface__cell__V) / (-1 + exp(2.0609999999999999 + 0.068699999999999997 * var_chaste_interface__cell__V)) + 7.1899999999999999e-5 * (30 + var_chaste_interface__cell__V) / (1 - exp(-4.4399999999999995 - 0.14799999999999999 * var_chaste_interface__cell__V))); // millisecond + const double d_dt_chaste_interface_var_IKs_Xs_gate__Xs = (-var_chaste_interface__IKs_Xs_gate__Xs + var_IKs_Xs_gate__Xs_infinity) / var_IKs_Xs_gate__tau_Xs; // 1 / millisecond + const double var_INa_h_gate__alpha_h = ((var_chaste_interface__cell__V < -40) ? (0.13500000000000001 * exp(-11.764705882352942 + 0.14705882352941177 * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(NV_Ith_S(mParameters, 17), var_chaste_interface__environment__time) - 0.14705882352941177 * var_chaste_interface__cell__V)) : (0)); // per_millisecond + const double var_INa_h_gate__beta_h = ((var_chaste_interface__cell__V < -40) ? (310000 * exp(0.34999999999999998 * var_chaste_interface__cell__V - 0.34999999999999998 * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(NV_Ith_S(mParameters, 17), var_chaste_interface__environment__time)) + 3.5600000000000001 * exp(0.079000000000000001 * var_chaste_interface__cell__V - 0.079000000000000001 * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(NV_Ith_S(mParameters, 17), var_chaste_interface__environment__time))) : (7.6923076923076916 / (1 + exp(-0.96036036036036043 + 0.0900900900900901 * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(NV_Ith_S(mParameters, 17), var_chaste_interface__environment__time) - 0.0900900900900901 * var_chaste_interface__cell__V)))); // per_millisecond + const double var_INa_h_gate__h_infinity = 0.01 * mp_membrane_fast_sodium_current_reduced_inactivation_modifier->Calc(NV_Ith_S(mParameters, 16), var_chaste_interface__environment__time) + (1 - 0.01 * mp_membrane_fast_sodium_current_reduced_inactivation_modifier->Calc(NV_Ith_S(mParameters, 16), var_chaste_interface__environment__time)) * var_INa_h_gate__alpha_h / (var_INa_h_gate__alpha_h + var_INa_h_gate__beta_h); // dimensionless + const double var_INa_h_gate__tau_h = mp_membrane_fast_sodium_current_h_gate_tau_modifier->Calc(1 / (var_INa_h_gate__alpha_h + var_INa_h_gate__beta_h), var_chaste_interface__environment__time); // millisecond + const double d_dt_chaste_interface_var_INa_h_gate__h = (-var_chaste_interface__INa_h_gate__h + var_INa_h_gate__h_infinity) / var_INa_h_gate__tau_h; // 1 / millisecond + const double var_INa_j_gate__alpha_j = ((var_chaste_interface__cell__V < -40) ? ((37.780000000000001 + var_chaste_interface__cell__V) * (-127140 * exp(0.24440000000000001 * var_chaste_interface__cell__V - 0.24440000000000001 * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(NV_Ith_S(mParameters, 17), var_chaste_interface__environment__time)) - 3.4740000000000003e-5 * exp(0.043909999999999998 * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(NV_Ith_S(mParameters, 17), var_chaste_interface__environment__time) - 0.043909999999999998 * var_chaste_interface__cell__V)) / (1 + exp(24.640530000000002 + 0.311 * var_chaste_interface__cell__V - 0.311 * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(NV_Ith_S(mParameters, 17), var_chaste_interface__environment__time)))) : (0)); // per_millisecond + const double var_INa_j_gate__beta_j = ((var_chaste_interface__cell__V < -40) ? (0.1212 * exp(0.01052 * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(NV_Ith_S(mParameters, 17), var_chaste_interface__environment__time) - 0.01052 * var_chaste_interface__cell__V) / (1 + exp(-5.5312920000000005 + 0.13780000000000001 * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(NV_Ith_S(mParameters, 17), var_chaste_interface__environment__time) - 0.13780000000000001 * var_chaste_interface__cell__V))) : (0.29999999999999999 * exp(2.5349999999999999e-7 * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(NV_Ith_S(mParameters, 17), var_chaste_interface__environment__time) - 2.5349999999999999e-7 * var_chaste_interface__cell__V) / (1 + exp(-3.2000000000000002 + 0.10000000000000001 * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(NV_Ith_S(mParameters, 17), var_chaste_interface__environment__time) - 0.10000000000000001 * var_chaste_interface__cell__V)))); // per_millisecond + const double var_INa_j_gate__j_infinity = 0.01 * mp_membrane_fast_sodium_current_reduced_inactivation_modifier->Calc(NV_Ith_S(mParameters, 16), var_chaste_interface__environment__time) + (1 - 0.01 * mp_membrane_fast_sodium_current_reduced_inactivation_modifier->Calc(NV_Ith_S(mParameters, 16), var_chaste_interface__environment__time)) * var_INa_j_gate__alpha_j / (var_INa_j_gate__alpha_j + var_INa_j_gate__beta_j); // dimensionless + const double var_INa_j_gate__tau_j = mp_membrane_fast_sodium_current_j_gate_tau_modifier->Calc(1 / (var_INa_j_gate__alpha_j + var_INa_j_gate__beta_j), var_chaste_interface__environment__time); // millisecond + const double d_dt_chaste_interface_var_INa_j_gate__j = (-var_chaste_interface__INa_j_gate__j + var_INa_j_gate__j_infinity) / var_INa_j_gate__tau_j; // 1 / millisecond + const double var_INa_m_gate__alpha_m = 0.32000000000000001 * (47.130000000000003 + var_chaste_interface__cell__V) / (1 - exp(-4.7130000000000001 - 0.10000000000000001 * var_chaste_interface__cell__V)); // per_millisecond + const double var_INa_m_gate__beta_m = 0.080000000000000002 * exp(-0.090909090909090912 * var_chaste_interface__cell__V); // per_millisecond + const double var_INa_m_gate__m_infinity = var_INa_m_gate__alpha_m / (var_INa_m_gate__alpha_m + var_INa_m_gate__beta_m); // dimensionless + const double var_INa_m_gate__tau_m = 1 / (var_INa_m_gate__alpha_m + var_INa_m_gate__beta_m); // millisecond + const double d_dt_chaste_interface_var_INa_m_gate__m = (-var_chaste_interface__INa_m_gate__m + var_INa_m_gate__m_infinity) / var_INa_m_gate__tau_m; // 1 / millisecond + const double var_Itof_X_gate__X_tof_infinity = 1 / (1 + exp(-0.20000000000000001 - 0.066666666666666666 * var_chaste_interface__cell__V)); // dimensionless + const double var_Itof_X_gate__tau_X_tof = 1.5 + 3.5 * exp(-0.0011111111111111111 * pow(var_chaste_interface__cell__V, 2)); // millisecond + const double d_dt_chaste_interface_var_Itof_X_gate__X_tof = (-var_chaste_interface__Itof_X_gate__X_tof + var_Itof_X_gate__X_tof_infinity) / var_Itof_X_gate__tau_X_tof; // 1 / millisecond + const double var_Itof_Y_gate__Y_tof_infinity = 1 / (1 + exp(3.3500000000000001 + 0.10000000000000001 * var_chaste_interface__cell__V)); // dimensionless + const double var_Itof_Y_gate__tau_Y_tof = 20 + 20 / (1 + exp(3.3500000000000001 + 0.10000000000000001 * var_chaste_interface__cell__V)); // millisecond + const double d_dt_chaste_interface_var_Itof_Y_gate__Y_tof = (-var_chaste_interface__Itof_Y_gate__Y_tof + var_Itof_Y_gate__Y_tof_infinity) / var_Itof_Y_gate__tau_Y_tof; // 1 / millisecond + const double var_Itos_R_gate__R_tos_infinity = 1 / (1 + exp(3.3500000000000001 + 0.10000000000000001 * var_chaste_interface__cell__V)); // dimensionless + const double var_Itos_R_gate__tau_R_tos = 220 + 2800 / (1 + exp(6 + 0.10000000000000001 * var_chaste_interface__cell__V)); // millisecond + const double d_dt_chaste_interface_var_Itos_R_gate__R_tos = (-var_chaste_interface__Itos_R_gate__R_tos + var_Itos_R_gate__R_tos_infinity) / var_Itos_R_gate__tau_R_tos; // 1 / millisecond + const double var_Itos_X_gate__X_tos_infinity = 1 / (1 + exp(-0.20000000000000001 - 0.066666666666666666 * var_chaste_interface__cell__V)); // dimensionless + const double var_Itos_X_gate__tau_X_tos = 0.5 + 9 / (1 + exp(0.20000000000000001 + 0.066666666666666666 * var_chaste_interface__cell__V)); // millisecond + const double d_dt_chaste_interface_var_Itos_X_gate__X_tos = (-var_chaste_interface__Itos_X_gate__X_tos + var_Itos_X_gate__X_tos_infinity) / var_Itos_X_gate__tau_X_tos; // 1 / millisecond + const double var_Itos_Y_gate__Y_tos_infinity = 1 / (1 + exp(3.3500000000000001 + 0.10000000000000001 * var_chaste_interface__cell__V)); // dimensionless + const double var_Itos_Y_gate__tau_Y_tos = 30 + 3000 / (1 + exp(6 + 0.10000000000000001 * var_chaste_interface__cell__V)); // millisecond + const double d_dt_chaste_interface_var_Itos_Y_gate__Y_tos = (-var_chaste_interface__Itos_Y_gate__Y_tos + var_Itos_Y_gate__Y_tos_infinity) / var_Itos_Y_gate__tau_Y_tos; // 1 / millisecond + const double var_cytosolic_Ca_buffer__Bmax_Calmodulin = 0.024; // millimolar + const double var_cytosolic_Ca_buffer__Bmax_Myosin_Ca = 0.14000000000000001; // millimolar + const double var_cytosolic_Ca_buffer__Bmax_Myosin_Mg = 0.14000000000000001; // millimolar + const double var_cytosolic_Ca_buffer__Bmax_SRB = 0.017100000000000001; // millimolar + const double var_cytosolic_Ca_buffer__Bmax_TroponinC = 0.070000000000000007; // millimolar + const double var_cytosolic_Ca_buffer__Bmax_TroponinC_Ca_Mg_Ca = 0.14000000000000001; // millimolar + const double var_cytosolic_Ca_buffer__Bmax_TroponinC_Ca_Mg_Mg = 0.14000000000000001; // millimolar + const double var_cytosolic_Ca_buffer__koff_Calmodulin = 0.23799999999999999; // per_millisecond + const double var_cytosolic_Ca_buffer__koff_Myosin_Ca = 0.00046000000000000001; // per_millisecond + const double var_cytosolic_Ca_buffer__koff_Myosin_Mg = 5.7000000000000003e-5; // per_millisecond + const double var_cytosolic_Ca_buffer__koff_SRB = 0.059999999999999998; // per_millisecond + const double var_cytosolic_Ca_buffer__koff_TroponinC = 0.019599999999999999; // per_millisecond + const double var_cytosolic_Ca_buffer__koff_TroponinC_Ca_Mg_Ca = 3.1999999999999999e-5; // per_millisecond + const double var_cytosolic_Ca_buffer__koff_TroponinC_Ca_Mg_Mg = 0.0033300000000000001; // per_millisecond + const double var_cytosolic_Ca_buffer__kon_Calmodulin = 34; // per_millimolar_per_millisecond + const double var_cytosolic_Ca_buffer__dCa_Calmodulin = -var_chaste_interface__cytosolic_Ca_buffer__Ca_Calmodulin * var_cytosolic_Ca_buffer__koff_Calmodulin + (-var_chaste_interface__cytosolic_Ca_buffer__Ca_Calmodulin + var_cytosolic_Ca_buffer__Bmax_Calmodulin) * var_chaste_interface__Ca_buffer__Cai * var_cytosolic_Ca_buffer__kon_Calmodulin; // millimolar_per_millisecond + const double d_dt_chaste_interface_var_cytosolic_Ca_buffer__Ca_Calmodulin = var_cytosolic_Ca_buffer__dCa_Calmodulin; // millimolar / millisecond + const double var_cytosolic_Ca_buffer__kon_Myosin_Ca = 13.800000000000001; // per_millimolar_per_millisecond + const double var_cytosolic_Ca_buffer__dCa_Myosin = -var_chaste_interface__cytosolic_Ca_buffer__Ca_Myosin * var_cytosolic_Ca_buffer__koff_Myosin_Ca + (-var_chaste_interface__cytosolic_Ca_buffer__Ca_Myosin - var_chaste_interface__cytosolic_Ca_buffer__Mg_Myosin + var_cytosolic_Ca_buffer__Bmax_Myosin_Ca) * var_chaste_interface__Ca_buffer__Cai * var_cytosolic_Ca_buffer__kon_Myosin_Ca; // millimolar_per_millisecond + const double d_dt_chaste_interface_var_cytosolic_Ca_buffer__Ca_Myosin = var_cytosolic_Ca_buffer__dCa_Myosin; // millimolar / millisecond + const double var_cytosolic_Ca_buffer__kon_Myosin_Mg = 0.015699999999999999; // per_millimolar_per_millisecond + const double var_cytosolic_Ca_buffer__kon_SRB = 100; // per_millimolar_per_millisecond + const double var_cytosolic_Ca_buffer__dCa_SRB = -var_chaste_interface__cytosolic_Ca_buffer__Ca_SRB * var_cytosolic_Ca_buffer__koff_SRB + (-var_chaste_interface__cytosolic_Ca_buffer__Ca_SRB + var_cytosolic_Ca_buffer__Bmax_SRB) * var_chaste_interface__Ca_buffer__Cai * var_cytosolic_Ca_buffer__kon_SRB; // millimolar_per_millisecond + const double d_dt_chaste_interface_var_cytosolic_Ca_buffer__Ca_SRB = var_cytosolic_Ca_buffer__dCa_SRB; // millimolar / millisecond + const double var_cytosolic_Ca_buffer__kon_TroponinC = 32.700000000000003; // per_millimolar_per_millisecond + const double var_cytosolic_Ca_buffer__dCa_TroponinC = -var_chaste_interface__cytosolic_Ca_buffer__Ca_TroponinC * var_cytosolic_Ca_buffer__koff_TroponinC + (-var_chaste_interface__cytosolic_Ca_buffer__Ca_TroponinC + var_cytosolic_Ca_buffer__Bmax_TroponinC) * var_chaste_interface__Ca_buffer__Cai * var_cytosolic_Ca_buffer__kon_TroponinC; // millimolar_per_millisecond + const double d_dt_chaste_interface_var_cytosolic_Ca_buffer__Ca_TroponinC = var_cytosolic_Ca_buffer__dCa_TroponinC; // millimolar / millisecond + const double var_cytosolic_Ca_buffer__kon_TroponinC_Ca_Mg_Ca = 2.3700000000000001; // per_millimolar_per_millisecond + const double var_cytosolic_Ca_buffer__dCa_TroponinC_Ca_Mg = -var_chaste_interface__cytosolic_Ca_buffer__Ca_TroponinC_Ca_Mg * var_cytosolic_Ca_buffer__koff_TroponinC_Ca_Mg_Ca + (-var_chaste_interface__cytosolic_Ca_buffer__Ca_TroponinC_Ca_Mg - var_chaste_interface__cytosolic_Ca_buffer__Mg_TroponinC_Ca_Mg + var_cytosolic_Ca_buffer__Bmax_TroponinC_Ca_Mg_Ca) * var_chaste_interface__Ca_buffer__Cai * var_cytosolic_Ca_buffer__kon_TroponinC_Ca_Mg_Ca; // millimolar_per_millisecond + const double d_dt_chaste_interface_var_cytosolic_Ca_buffer__Ca_TroponinC_Ca_Mg = var_cytosolic_Ca_buffer__dCa_TroponinC_Ca_Mg; // millimolar / millisecond + const double var_cytosolic_Ca_buffer__kon_TroponinC_Ca_Mg_Mg = 0.0030000000000000001; // per_millimolar_per_millisecond + const double var_indo_fluo_Ca_buffer_not_connected__Bmax_Fluo3_Cytosol = 0.025000000000000001; // millimolar + const double var_indo_fluo_Ca_buffer_not_connected__Bmax_Fluo3_SL = 0.00076999999999999996; // millimolar + const double var_indo_fluo_Ca_buffer_not_connected__Bmax_Fluo3_jct = 2.0000000000000002e-5; // millimolar + const double var_indo_fluo_Ca_buffer_not_connected__Bmax_Indo1_Cytosol = 0.025000000000000001; // millimolar + const double var_indo_fluo_Ca_buffer_not_connected__Bmax_Indo1_SL = 0.00076999999999999996; // millimolar + const double var_indo_fluo_Ca_buffer_not_connected__Bmax_Indo1_jct = 2.0000000000000002e-5; // millimolar + const double var_indo_fluo_Ca_buffer_not_connected__Fluo3 = 0; // millimolar + const double var_indo_fluo_Ca_buffer_not_connected__Indo1 = 0; // millimolar + const double var_indo_fluo_Ca_buffer_not_connected__koff_Fluo3 = 0.11; // per_millisecond + const double var_indo_fluo_Ca_buffer_not_connected__koff_Indo1 = 0.059999999999999998; // per_millisecond + const double var_indo_fluo_Ca_buffer_not_connected__kon_Fluo3 = 100; // per_millimolar2_per_millisecond + const double var_indo_fluo_Ca_buffer_not_connected__kon_Indo1 = 100; // per_millimolar2_per_millisecond + const double var_ion_diffusion__J_Ca_SL_cytosol = 3.7243000000000002e-12 * var_chaste_interface__Ca_buffer__Ca_SL - 3.7243000000000002e-12 * var_chaste_interface__Ca_buffer__Cai; // millimole_per_millisecond + const double var_ion_diffusion__J_Ca_jct_SL = 8.2413000000000004e-13 * var_chaste_interface__Ca_buffer__Ca_jct - 8.2413000000000004e-13 * var_chaste_interface__Ca_buffer__Ca_SL; // millimole_per_millisecond + const double var_ion_diffusion__J_Na_SL_cytosol = 1.6385999999999999e-12 * var_chaste_interface__Na_buffer__Na_SL - 1.6385999999999999e-12 * var_chaste_interface__Na_buffer__Nai; // millimole_per_millisecond + const double var_ion_diffusion__J_Na_jct_SL = 1.8312999999999999e-14 * var_chaste_interface__Na_buffer__Na_jct - 1.8312999999999999e-14 * var_chaste_interface__Na_buffer__Na_SL; // millimole_per_millisecond + const double var_model_parameters__Cm_per_area = 1.9999999999999999e-6; // farad_per_cm2 + const double var_model_parameters__Mgi = 1; // millimolar + const double var_cytosolic_Ca_buffer__dMg_Myosin = -var_chaste_interface__cytosolic_Ca_buffer__Mg_Myosin * var_cytosolic_Ca_buffer__koff_Myosin_Mg + (-var_chaste_interface__cytosolic_Ca_buffer__Ca_Myosin - var_chaste_interface__cytosolic_Ca_buffer__Mg_Myosin + var_cytosolic_Ca_buffer__Bmax_Myosin_Mg) * var_cytosolic_Ca_buffer__kon_Myosin_Mg * var_model_parameters__Mgi; // millimolar_per_millisecond + const double d_dt_chaste_interface_var_cytosolic_Ca_buffer__Mg_Myosin = var_cytosolic_Ca_buffer__dMg_Myosin; // millimolar / millisecond + const double var_cytosolic_Ca_buffer__dMg_TroponinC_Ca_Mg = -var_chaste_interface__cytosolic_Ca_buffer__Mg_TroponinC_Ca_Mg * var_cytosolic_Ca_buffer__koff_TroponinC_Ca_Mg_Mg + (-var_chaste_interface__cytosolic_Ca_buffer__Ca_TroponinC_Ca_Mg - var_chaste_interface__cytosolic_Ca_buffer__Mg_TroponinC_Ca_Mg + var_cytosolic_Ca_buffer__Bmax_TroponinC_Ca_Mg_Mg) * var_cytosolic_Ca_buffer__kon_TroponinC_Ca_Mg_Mg * var_model_parameters__Mgi; // millimolar_per_millisecond + const double d_dt_chaste_interface_var_cytosolic_Ca_buffer__Mg_TroponinC_Ca_Mg = var_cytosolic_Ca_buffer__dMg_TroponinC_Ca_Mg; // millimolar / millisecond + const double var_cytosolic_Ca_buffer__dCa_cytosol_tot_bound = var_cytosolic_Ca_buffer__dCa_Calmodulin + var_cytosolic_Ca_buffer__dCa_Myosin + var_cytosolic_Ca_buffer__dCa_SRB + var_cytosolic_Ca_buffer__dCa_TroponinC + var_cytosolic_Ca_buffer__dCa_TroponinC_Ca_Mg + var_cytosolic_Ca_buffer__dMg_Myosin + var_cytosolic_Ca_buffer__dMg_TroponinC_Ca_Mg; // millimolar_per_millisecond + const double var_INaK__sigma = -0.14285714285714285 + 0.14285714285714285 * exp(0.01485884101040119 * mp_extracellular_sodium_concentration_modifier->Calc(NV_Ith_S(mParameters, 9), var_chaste_interface__environment__time)); // dimensionless + const double var_ICaL__Q_CaL = pow(var_ICaL__Q10_CaL, (-31 + 0.10000000000000001 * mp_temperature_modifier->Calc(NV_Ith_S(mParameters, 24), var_chaste_interface__environment__time))); // dimensionless + const double var_ICaL__temp = 0.45000000000000001 * pow(mp_faraday_constant_modifier->Calc(NV_Ith_S(mParameters, 10), var_chaste_interface__environment__time), 2) * var_ICaL__Q_CaL * var_chaste_interface__ICaL_d_gate__d * var_chaste_interface__ICaL_f_gate__f * var_chaste_interface__cell__V / (mp_gas_constant_modifier->Calc(NV_Ith_S(mParameters, 11), var_chaste_interface__environment__time) * mp_temperature_modifier->Calc(NV_Ith_S(mParameters, 24), var_chaste_interface__environment__time)); // coulomb_per_mole + const double var_ICaL__i_CaL_Ca_SL = 4 * (-var_ICaL__gamma_Cao * mp_extracellular_calcium_concentration_modifier->Calc(NV_Ith_S(mParameters, 6), var_chaste_interface__environment__time) + var_chaste_interface__Ca_buffer__Ca_SL * var_ICaL__gamma_Cai * exp(2 * var_chaste_interface__cell__V * mp_faraday_constant_modifier->Calc(NV_Ith_S(mParameters, 10), var_chaste_interface__environment__time) / (mp_gas_constant_modifier->Calc(NV_Ith_S(mParameters, 11), var_chaste_interface__environment__time) * mp_temperature_modifier->Calc(NV_Ith_S(mParameters, 24), var_chaste_interface__environment__time)))) * var_ICaL__Fx_ICaL_SL * mp_membrane_L_type_calcium_current_conductance_modifier->Calc(NV_Ith_S(mParameters, 12), var_chaste_interface__environment__time) * var_ICaL__temp * var_ICaL_fCa_gate__fCa_SL / (-1 + exp(2 * var_chaste_interface__cell__V * mp_faraday_constant_modifier->Calc(NV_Ith_S(mParameters, 10), var_chaste_interface__environment__time) / (mp_gas_constant_modifier->Calc(NV_Ith_S(mParameters, 11), var_chaste_interface__environment__time) * mp_temperature_modifier->Calc(NV_Ith_S(mParameters, 24), var_chaste_interface__environment__time)))); // microA_per_microF + const double var_ICaL__i_CaL_Ca_jct = 4 * (-var_ICaL__gamma_Cao * mp_extracellular_calcium_concentration_modifier->Calc(NV_Ith_S(mParameters, 6), var_chaste_interface__environment__time) + var_chaste_interface__Ca_buffer__Ca_jct * var_ICaL__gamma_Cai * exp(2 * var_chaste_interface__cell__V * mp_faraday_constant_modifier->Calc(NV_Ith_S(mParameters, 10), var_chaste_interface__environment__time) / (mp_gas_constant_modifier->Calc(NV_Ith_S(mParameters, 11), var_chaste_interface__environment__time) * mp_temperature_modifier->Calc(NV_Ith_S(mParameters, 24), var_chaste_interface__environment__time)))) * var_ICaL__Fx_ICaL_jct * mp_membrane_L_type_calcium_current_conductance_modifier->Calc(NV_Ith_S(mParameters, 12), var_chaste_interface__environment__time) * var_ICaL__temp * var_ICaL_fCa_gate__fCa_jct / (-1 + exp(2 * var_chaste_interface__cell__V * mp_faraday_constant_modifier->Calc(NV_Ith_S(mParameters, 10), var_chaste_interface__environment__time) / (mp_gas_constant_modifier->Calc(NV_Ith_S(mParameters, 11), var_chaste_interface__environment__time) * mp_temperature_modifier->Calc(NV_Ith_S(mParameters, 24), var_chaste_interface__environment__time)))); // microA_per_microF + const double var_ICaL__i_CaL_Na_SL = (-var_ICaL__gamma_Nao * mp_extracellular_sodium_concentration_modifier->Calc(NV_Ith_S(mParameters, 9), var_chaste_interface__environment__time) + var_ICaL__gamma_Nai * var_chaste_interface__Na_buffer__Na_SL * exp(var_chaste_interface__cell__V * mp_faraday_constant_modifier->Calc(NV_Ith_S(mParameters, 10), var_chaste_interface__environment__time) / (mp_gas_constant_modifier->Calc(NV_Ith_S(mParameters, 11), var_chaste_interface__environment__time) * mp_temperature_modifier->Calc(NV_Ith_S(mParameters, 24), var_chaste_interface__environment__time)))) * var_ICaL__Fx_ICaL_SL * var_ICaL__PNa * var_ICaL__temp * var_ICaL_fCa_gate__fCa_SL / (-1 + exp(var_chaste_interface__cell__V * mp_faraday_constant_modifier->Calc(NV_Ith_S(mParameters, 10), var_chaste_interface__environment__time) / (mp_gas_constant_modifier->Calc(NV_Ith_S(mParameters, 11), var_chaste_interface__environment__time) * mp_temperature_modifier->Calc(NV_Ith_S(mParameters, 24), var_chaste_interface__environment__time)))); // microA_per_microF + const double var_ICaL__i_CaL_Na_jct = (-var_ICaL__gamma_Nao * mp_extracellular_sodium_concentration_modifier->Calc(NV_Ith_S(mParameters, 9), var_chaste_interface__environment__time) + var_ICaL__gamma_Nai * var_chaste_interface__Na_buffer__Na_jct * exp(var_chaste_interface__cell__V * mp_faraday_constant_modifier->Calc(NV_Ith_S(mParameters, 10), var_chaste_interface__environment__time) / (mp_gas_constant_modifier->Calc(NV_Ith_S(mParameters, 11), var_chaste_interface__environment__time) * mp_temperature_modifier->Calc(NV_Ith_S(mParameters, 24), var_chaste_interface__environment__time)))) * var_ICaL__Fx_ICaL_jct * var_ICaL__PNa * var_ICaL__temp * var_ICaL_fCa_gate__fCa_jct / (-1 + exp(var_chaste_interface__cell__V * mp_faraday_constant_modifier->Calc(NV_Ith_S(mParameters, 10), var_chaste_interface__environment__time) / (mp_gas_constant_modifier->Calc(NV_Ith_S(mParameters, 11), var_chaste_interface__environment__time) * mp_temperature_modifier->Calc(NV_Ith_S(mParameters, 24), var_chaste_interface__environment__time)))); // microA_per_microF + const double var_ICap__Q_SLCaP = pow(var_ICap__Q10_SLCaP, (-31 + 0.10000000000000001 * mp_temperature_modifier->Calc(NV_Ith_S(mParameters, 24), var_chaste_interface__environment__time))); // dimensionless + const double var_ICap__i_Cap_SL = var_ICap__Fx_SLCaP_SL * var_ICap__Q_SLCaP * var_ICap__V_maxAF / (1 + pow((var_ICap__Km / var_chaste_interface__Ca_buffer__Ca_SL), var_ICap__H)); // microA_per_microF + const double var_ICap__i_Cap_jct = var_ICap__Fx_SLCaP_jct * var_ICap__Q_SLCaP * var_ICap__V_maxAF / (1 + pow((var_ICap__Km / var_chaste_interface__Ca_buffer__Ca_jct), var_ICap__H)); // microA_per_microF + const double var_INaCa__Q_NCX = pow(var_INaCa__Q10_NCX, (-31 + 0.10000000000000001 * mp_temperature_modifier->Calc(NV_Ith_S(mParameters, 24), var_chaste_interface__environment__time))); // dimensionless + const double var_INaCa__temp_SL = (pow(var_chaste_interface__Na_buffer__Na_SL, var_INaCa__HNa) * mp_extracellular_calcium_concentration_modifier->Calc(NV_Ith_S(mParameters, 6), var_chaste_interface__environment__time) * exp(var_INaCa__eta * var_chaste_interface__cell__V * mp_faraday_constant_modifier->Calc(NV_Ith_S(mParameters, 10), var_chaste_interface__environment__time) / (mp_gas_constant_modifier->Calc(NV_Ith_S(mParameters, 11), var_chaste_interface__environment__time) * mp_temperature_modifier->Calc(NV_Ith_S(mParameters, 24), var_chaste_interface__environment__time))) - pow(mp_extracellular_sodium_concentration_modifier->Calc(NV_Ith_S(mParameters, 9), var_chaste_interface__environment__time), var_INaCa__HNa) * var_chaste_interface__Ca_buffer__Ca_SL * exp((-1 + var_INaCa__eta) * var_chaste_interface__cell__V * mp_faraday_constant_modifier->Calc(NV_Ith_S(mParameters, 10), var_chaste_interface__environment__time) / (mp_gas_constant_modifier->Calc(NV_Ith_S(mParameters, 11), var_chaste_interface__environment__time) * mp_temperature_modifier->Calc(NV_Ith_S(mParameters, 24), var_chaste_interface__environment__time)))) / (1 + var_INaCa__ksat * exp((-1 + var_INaCa__eta) * var_chaste_interface__cell__V * mp_faraday_constant_modifier->Calc(NV_Ith_S(mParameters, 10), var_chaste_interface__environment__time) / (mp_gas_constant_modifier->Calc(NV_Ith_S(mParameters, 11), var_chaste_interface__environment__time) * mp_temperature_modifier->Calc(NV_Ith_S(mParameters, 24), var_chaste_interface__environment__time)))); // millimolar4 + const double var_INaCa__i_NaCa_SL = var_INaCa__Fx_NCX_SL * var_INaCa__Ka_SL * var_INaCa__Q_NCX * mp_membrane_sodium_calcium_exchanger_current_conductance_modifier->Calc(NV_Ith_S(mParameters, 23), var_chaste_interface__environment__time) * var_INaCa__temp_SL / (pow(var_chaste_interface__Na_buffer__Na_SL, var_INaCa__HNa) * var_INaCa__K_mCao + pow(var_chaste_interface__Na_buffer__Na_SL, var_INaCa__HNa) * mp_extracellular_calcium_concentration_modifier->Calc(NV_Ith_S(mParameters, 6), var_chaste_interface__environment__time) + pow(mp_extracellular_sodium_concentration_modifier->Calc(NV_Ith_S(mParameters, 9), var_chaste_interface__environment__time), var_INaCa__HNa) * var_chaste_interface__Ca_buffer__Ca_SL + pow(var_INaCa__K_mNao, var_INaCa__HNa) * (1 + var_chaste_interface__Ca_buffer__Ca_SL / var_INaCa__K_mCai) * var_chaste_interface__Ca_buffer__Ca_SL + pow(mp_extracellular_sodium_concentration_modifier->Calc(NV_Ith_S(mParameters, 9), var_chaste_interface__environment__time), var_INaCa__HNa) * (1 + pow((var_chaste_interface__Na_buffer__Na_SL / var_INaCa__K_mNai), var_INaCa__HNa)) * var_INaCa__K_mCai); // microA_per_microF + const double var_INaCa__temp_jct = (pow(var_chaste_interface__Na_buffer__Na_jct, var_INaCa__HNa) * mp_extracellular_calcium_concentration_modifier->Calc(NV_Ith_S(mParameters, 6), var_chaste_interface__environment__time) * exp(var_INaCa__eta * var_chaste_interface__cell__V * mp_faraday_constant_modifier->Calc(NV_Ith_S(mParameters, 10), var_chaste_interface__environment__time) / (mp_gas_constant_modifier->Calc(NV_Ith_S(mParameters, 11), var_chaste_interface__environment__time) * mp_temperature_modifier->Calc(NV_Ith_S(mParameters, 24), var_chaste_interface__environment__time))) - pow(mp_extracellular_sodium_concentration_modifier->Calc(NV_Ith_S(mParameters, 9), var_chaste_interface__environment__time), var_INaCa__HNa) * var_chaste_interface__Ca_buffer__Ca_jct * exp((-1 + var_INaCa__eta) * var_chaste_interface__cell__V * mp_faraday_constant_modifier->Calc(NV_Ith_S(mParameters, 10), var_chaste_interface__environment__time) / (mp_gas_constant_modifier->Calc(NV_Ith_S(mParameters, 11), var_chaste_interface__environment__time) * mp_temperature_modifier->Calc(NV_Ith_S(mParameters, 24), var_chaste_interface__environment__time)))) / (1 + var_INaCa__ksat * exp((-1 + var_INaCa__eta) * var_chaste_interface__cell__V * mp_faraday_constant_modifier->Calc(NV_Ith_S(mParameters, 10), var_chaste_interface__environment__time) / (mp_gas_constant_modifier->Calc(NV_Ith_S(mParameters, 11), var_chaste_interface__environment__time) * mp_temperature_modifier->Calc(NV_Ith_S(mParameters, 24), var_chaste_interface__environment__time)))); // millimolar4 + const double var_INaCa__i_NaCa_jct = var_INaCa__Fx_NCX_jct * var_INaCa__Ka_jct * var_INaCa__Q_NCX * mp_membrane_sodium_calcium_exchanger_current_conductance_modifier->Calc(NV_Ith_S(mParameters, 23), var_chaste_interface__environment__time) * var_INaCa__temp_jct / (pow(var_chaste_interface__Na_buffer__Na_jct, var_INaCa__HNa) * var_INaCa__K_mCao + pow(var_chaste_interface__Na_buffer__Na_jct, var_INaCa__HNa) * mp_extracellular_calcium_concentration_modifier->Calc(NV_Ith_S(mParameters, 6), var_chaste_interface__environment__time) + pow(mp_extracellular_sodium_concentration_modifier->Calc(NV_Ith_S(mParameters, 9), var_chaste_interface__environment__time), var_INaCa__HNa) * var_chaste_interface__Ca_buffer__Ca_jct + pow(var_INaCa__K_mNao, var_INaCa__HNa) * (1 + var_chaste_interface__Ca_buffer__Ca_jct / var_INaCa__K_mCai) * var_chaste_interface__Ca_buffer__Ca_jct + pow(mp_extracellular_sodium_concentration_modifier->Calc(NV_Ith_S(mParameters, 9), var_chaste_interface__environment__time), var_INaCa__HNa) * (1 + pow((var_chaste_interface__Na_buffer__Na_jct / var_INaCa__K_mNai), var_INaCa__HNa)) * var_INaCa__K_mCai); // microA_per_microF + const double var_INaK__Q_Km_Nai = pow(var_INaK__Q10_Km_Nai, (-31 + 0.10000000000000001 * mp_temperature_modifier->Calc(NV_Ith_S(mParameters, 24), var_chaste_interface__environment__time))); // dimensionless + const double var_INaK__Q_NaK = pow(var_INaK__Q10_NaK, (-31 + 0.10000000000000001 * mp_temperature_modifier->Calc(NV_Ith_S(mParameters, 24), var_chaste_interface__environment__time))); // dimensionless + const double var_INaK__f_NaK = 1 / (1 + 0.1245 * exp(-0.10000000000000001 * var_chaste_interface__cell__V * mp_faraday_constant_modifier->Calc(NV_Ith_S(mParameters, 10), var_chaste_interface__environment__time) / (mp_gas_constant_modifier->Calc(NV_Ith_S(mParameters, 11), var_chaste_interface__environment__time) * mp_temperature_modifier->Calc(NV_Ith_S(mParameters, 24), var_chaste_interface__environment__time))) + 0.036499999999999998 * var_INaK__sigma * exp(-var_chaste_interface__cell__V * mp_faraday_constant_modifier->Calc(NV_Ith_S(mParameters, 10), var_chaste_interface__environment__time) / (mp_gas_constant_modifier->Calc(NV_Ith_S(mParameters, 11), var_chaste_interface__environment__time) * mp_temperature_modifier->Calc(NV_Ith_S(mParameters, 24), var_chaste_interface__environment__time)))); // dimensionless + const double var_INaK__i_NaK_SL = var_INaK__Fx_NaK_SL * var_INaK__I_NaK_max * var_INaK__Q_NaK * var_INaK__f_NaK * mp_extracellular_potassium_concentration_modifier->Calc(NV_Ith_S(mParameters, 8), var_chaste_interface__environment__time) / ((1 + pow((var_INaK__Km_Nai * var_INaK__Q_Km_Nai / var_chaste_interface__Na_buffer__Na_SL), var_INaK__H_NaK)) * (var_INaK__Km_Ko + mp_extracellular_potassium_concentration_modifier->Calc(NV_Ith_S(mParameters, 8), var_chaste_interface__environment__time))); // microA_per_microF + const double var_INaK__i_NaK_jct = var_INaK__Fx_NaK_jct * var_INaK__I_NaK_max * var_INaK__Q_NaK * var_INaK__f_NaK * mp_extracellular_potassium_concentration_modifier->Calc(NV_Ith_S(mParameters, 8), var_chaste_interface__environment__time) / ((1 + pow((var_INaK__Km_Nai * var_INaK__Q_Km_Nai / var_chaste_interface__Na_buffer__Na_jct), var_INaK__H_NaK)) * (var_INaK__Km_Ko + mp_extracellular_potassium_concentration_modifier->Calc(NV_Ith_S(mParameters, 8), var_chaste_interface__environment__time))); // microA_per_microF + const double var_Jpump_SR__Q_SRCaP = pow(var_Jpump_SR__Q10_SRCaP, (-31 + 0.10000000000000001 * mp_temperature_modifier->Calc(NV_Ith_S(mParameters, 24), var_chaste_interface__environment__time))); // dimensionless + const double var_model_parameters__cell_length = 100; // micrometre + const double var_model_parameters__cell_radius = 10.25; // micrometre + const double var_model_parameters__Cm = 2.0e-8 * M_PI * var_model_parameters__Cm_per_area * var_model_parameters__cell_length * var_model_parameters__cell_radius; // farad + const double var_model_parameters__Vol_Cell = 3.1415926540000002e-15 * pow(var_model_parameters__cell_radius, 2) * var_model_parameters__cell_length; // liter + const double var_model_parameters__Vol_SL = 0.02 * var_model_parameters__Vol_Cell; // liter + const double var_model_parameters__Vol_SR = 0.035000000000000003 * var_model_parameters__Vol_Cell; // liter + const double var_model_parameters__Vol_cytosol = 0.65000000000000002 * var_model_parameters__Vol_Cell; // liter + const double var_Ca_buffer__dCa_SLB_SL = -var_chaste_interface__Ca_buffer__Ca_SLB_SL * var_Ca_buffer__koff_SLB + (-var_chaste_interface__Ca_buffer__Ca_SLB_SL + var_Ca_buffer__Bmax_SLB_SL * var_model_parameters__Vol_cytosol / var_model_parameters__Vol_SL) * var_chaste_interface__Ca_buffer__Ca_SL * var_Ca_buffer__kon_SL; // millimolar_per_millisecond + const double var_Ca_buffer__dCa_SLHigh_SL = -var_chaste_interface__Ca_buffer__Ca_SLHigh_SL * var_Ca_buffer__koff_SLHigh + (-var_chaste_interface__Ca_buffer__Ca_SLHigh_SL + var_Ca_buffer__Bmax_SLHigh_SL * var_model_parameters__Vol_cytosol / var_model_parameters__Vol_SL) * var_chaste_interface__Ca_buffer__Ca_SL * var_Ca_buffer__kon_SL; // millimolar_per_millisecond + const double var_Ca_buffer__dCa_SL_tot_bound = var_Ca_buffer__dCa_SLB_SL + var_Ca_buffer__dCa_SLHigh_SL; // millimolar_per_millisecond + const double var_Ca_buffer__dCalsequestrin = -var_chaste_interface__Ca_buffer__Ca_Calsequestrin * var_Ca_buffer__koff_Calsequestrin + (-var_chaste_interface__Ca_buffer__Ca_Calsequestrin + var_Ca_buffer__Bmax_Calsequestrin * var_model_parameters__Vol_cytosol / var_model_parameters__Vol_SR) * var_chaste_interface__Ca_buffer__Ca_SR * var_Ca_buffer__kon_Calsequestrin; // millimolar_per_millisecond + const double d_dt_chaste_interface_var_Ca_buffer__Ca_Calsequestrin = var_Ca_buffer__dCalsequestrin; // millimolar / millisecond + const double d_dt_chaste_interface_var_Ca_buffer__Ca_SLB_SL = var_Ca_buffer__dCa_SLB_SL; // millimolar / millisecond + const double d_dt_chaste_interface_var_Ca_buffer__Ca_SLHigh_SL = var_Ca_buffer__dCa_SLHigh_SL; // millimolar / millisecond + const double d_dt_chaste_interface_var_Na_buffer__Nai = mp_concentration_clamp_onoff_modifier->Calc(NV_Ith_S(mParameters, 3), var_chaste_interface__environment__time) * var_ion_diffusion__J_Na_SL_cytosol / var_model_parameters__Vol_cytosol; // millimolar / millisecond + const double var_Jpump_SR__j_pump_SR = (pow((var_chaste_interface__Ca_buffer__Cai / var_Jpump_SR__Kmf), var_Jpump_SR__H) - pow((var_chaste_interface__Ca_buffer__Ca_SR / var_Jpump_SR__Kmr), var_Jpump_SR__H)) * var_Jpump_SR__Q_SRCaP * mp_SR_uptake_current_max_modifier->Calc(NV_Ith_S(mParameters, 2), var_chaste_interface__environment__time) * var_model_parameters__Vol_cytosol / ((1 + pow((var_chaste_interface__Ca_buffer__Cai / var_Jpump_SR__Kmf), var_Jpump_SR__H) + pow((var_chaste_interface__Ca_buffer__Ca_SR / var_Jpump_SR__Kmr), var_Jpump_SR__H)) * var_model_parameters__Vol_SR); // millimolar_per_millisecond + const double d_dt_chaste_interface_var_Ca_buffer__Ca_SR = -var_Ca_buffer__dCalsequestrin - var_Jrel_SR__j_rel_SR - var_Jleak_SR__j_leak_SR * var_model_parameters__Vol_cytosol / var_model_parameters__Vol_SR + var_Jpump_SR__j_pump_SR; // millimolar / millisecond + const double d_dt_chaste_interface_var_Ca_buffer__Cai = -var_cytosolic_Ca_buffer__dCa_cytosol_tot_bound + var_ion_diffusion__J_Ca_SL_cytosol / var_model_parameters__Vol_cytosol - var_Jpump_SR__j_pump_SR * var_model_parameters__Vol_SR / var_model_parameters__Vol_cytosol; // millimolar / millisecond + const double var_model_parameters__Vol_jct = 0.00051000000000000004 * var_model_parameters__Vol_Cell; // liter + const double var_Ca_buffer__dCa_SLB_jct = -var_chaste_interface__Ca_buffer__Ca_SLB_jct * var_Ca_buffer__koff_SLB + (-var_chaste_interface__Ca_buffer__Ca_SLB_jct + 0.10000000000000001 * var_Ca_buffer__Bmax_SLB_jct * var_model_parameters__Vol_cytosol / var_model_parameters__Vol_jct) * var_chaste_interface__Ca_buffer__Ca_jct * var_Ca_buffer__kon_SL; // millimolar_per_millisecond + const double var_Ca_buffer__dCa_SLHigh_jct = -var_chaste_interface__Ca_buffer__Ca_SLHigh_jct * var_Ca_buffer__koff_SLHigh + (-var_chaste_interface__Ca_buffer__Ca_SLHigh_jct + 0.10000000000000001 * var_Ca_buffer__Bmax_SLHigh_jct * var_model_parameters__Vol_cytosol / var_model_parameters__Vol_jct) * var_chaste_interface__Ca_buffer__Ca_jct * var_Ca_buffer__kon_SL; // millimolar_per_millisecond + const double var_Ca_buffer__dCa_jct_tot_bound = var_Ca_buffer__dCa_SLB_jct + var_Ca_buffer__dCa_SLHigh_jct; // millimolar_per_millisecond + const double d_dt_chaste_interface_var_Ca_buffer__Ca_SLB_jct = var_Ca_buffer__dCa_SLB_jct; // millimolar / millisecond + const double d_dt_chaste_interface_var_Ca_buffer__Ca_SLHigh_jct = var_Ca_buffer__dCa_SLHigh_jct; // millimolar / millisecond + const double var_indo_fluo_Ca_buffer_not_connected__Fluo3Bound = var_chaste_interface__indo_fluo_Ca_buffer_not_connected__Ca_Fluo3_SL * var_model_parameters__Vol_SL / var_model_parameters__Vol_cytosol + var_chaste_interface__indo_fluo_Ca_buffer_not_connected__Ca_Fluo3_jct * var_model_parameters__Vol_jct / var_model_parameters__Vol_cytosol + var_chaste_interface__indo_fluo_Ca_buffer_not_connected__Ca_Fluo3_Cytosol; // millimolar + const double var_indo_fluo_Ca_buffer_not_connected__Indo1Bound = var_chaste_interface__indo_fluo_Ca_buffer_not_connected__Ca_Indo1_SL * var_model_parameters__Vol_SL / var_model_parameters__Vol_cytosol + var_chaste_interface__indo_fluo_Ca_buffer_not_connected__Ca_Indo1_jct * var_model_parameters__Vol_jct / var_model_parameters__Vol_cytosol + var_chaste_interface__indo_fluo_Ca_buffer_not_connected__Ca_Indo1_Cytosol; // millimolar + const double var_indo_fluo_Ca_buffer_not_connected__dCa_Fluo3_Cytosol = -var_chaste_interface__indo_fluo_Ca_buffer_not_connected__Ca_Fluo3_Cytosol * var_indo_fluo_Ca_buffer_not_connected__koff_Fluo3 + (-var_chaste_interface__indo_fluo_Ca_buffer_not_connected__Ca_Fluo3_Cytosol + var_indo_fluo_Ca_buffer_not_connected__Bmax_Fluo3_Cytosol) * (-var_indo_fluo_Ca_buffer_not_connected__Fluo3Bound + var_indo_fluo_Ca_buffer_not_connected__Fluo3) * var_chaste_interface__Ca_buffer__Cai * var_indo_fluo_Ca_buffer_not_connected__kon_Fluo3; // millimolar_per_millisecond + const double d_dt_chaste_interface_var_indo_fluo_Ca_buffer_not_connected__Ca_Fluo3_Cytosol = var_indo_fluo_Ca_buffer_not_connected__dCa_Fluo3_Cytosol; // millimolar / millisecond + const double var_indo_fluo_Ca_buffer_not_connected__dCa_Fluo3_SL = -var_chaste_interface__indo_fluo_Ca_buffer_not_connected__Ca_Fluo3_SL * var_indo_fluo_Ca_buffer_not_connected__koff_Fluo3 + (-var_chaste_interface__indo_fluo_Ca_buffer_not_connected__Ca_Fluo3_SL + var_indo_fluo_Ca_buffer_not_connected__Bmax_Fluo3_SL * var_model_parameters__Vol_cytosol / var_model_parameters__Vol_SL) * (-var_indo_fluo_Ca_buffer_not_connected__Fluo3Bound + var_indo_fluo_Ca_buffer_not_connected__Fluo3) * var_chaste_interface__Ca_buffer__Ca_SL * var_indo_fluo_Ca_buffer_not_connected__kon_Fluo3; // millimolar_per_millisecond + const double d_dt_chaste_interface_var_indo_fluo_Ca_buffer_not_connected__Ca_Fluo3_SL = var_indo_fluo_Ca_buffer_not_connected__dCa_Fluo3_SL; // millimolar / millisecond + const double var_indo_fluo_Ca_buffer_not_connected__dCa_Fluo3_jct = -var_chaste_interface__indo_fluo_Ca_buffer_not_connected__Ca_Fluo3_jct * var_indo_fluo_Ca_buffer_not_connected__koff_Fluo3 + (-var_chaste_interface__indo_fluo_Ca_buffer_not_connected__Ca_Fluo3_jct + var_indo_fluo_Ca_buffer_not_connected__Bmax_Fluo3_jct * var_model_parameters__Vol_cytosol / var_model_parameters__Vol_jct) * (-var_indo_fluo_Ca_buffer_not_connected__Fluo3Bound + var_indo_fluo_Ca_buffer_not_connected__Fluo3) * var_chaste_interface__Ca_buffer__Ca_jct * var_indo_fluo_Ca_buffer_not_connected__kon_Fluo3; // millimolar_per_millisecond + const double d_dt_chaste_interface_var_indo_fluo_Ca_buffer_not_connected__Ca_Fluo3_jct = var_indo_fluo_Ca_buffer_not_connected__dCa_Fluo3_jct; // millimolar / millisecond + const double var_indo_fluo_Ca_buffer_not_connected__dCa_Indo1_Cytosol = -var_chaste_interface__indo_fluo_Ca_buffer_not_connected__Ca_Indo1_Cytosol * var_indo_fluo_Ca_buffer_not_connected__koff_Indo1 + (-var_chaste_interface__indo_fluo_Ca_buffer_not_connected__Ca_Indo1_Cytosol + var_indo_fluo_Ca_buffer_not_connected__Bmax_Indo1_Cytosol) * (-var_indo_fluo_Ca_buffer_not_connected__Indo1Bound + var_indo_fluo_Ca_buffer_not_connected__Indo1) * var_chaste_interface__Ca_buffer__Cai * var_indo_fluo_Ca_buffer_not_connected__kon_Indo1; // millimolar_per_millisecond + const double d_dt_chaste_interface_var_indo_fluo_Ca_buffer_not_connected__Ca_Indo1_Cytosol = var_indo_fluo_Ca_buffer_not_connected__dCa_Indo1_Cytosol; // millimolar / millisecond + const double var_indo_fluo_Ca_buffer_not_connected__dCa_Indo1_SL = -var_chaste_interface__indo_fluo_Ca_buffer_not_connected__Ca_Indo1_SL * var_indo_fluo_Ca_buffer_not_connected__koff_Indo1 + (-var_chaste_interface__indo_fluo_Ca_buffer_not_connected__Ca_Indo1_SL + var_indo_fluo_Ca_buffer_not_connected__Bmax_Indo1_SL * var_model_parameters__Vol_cytosol / var_model_parameters__Vol_SL) * (-var_indo_fluo_Ca_buffer_not_connected__Indo1Bound + var_indo_fluo_Ca_buffer_not_connected__Indo1) * var_chaste_interface__Ca_buffer__Ca_SL * var_indo_fluo_Ca_buffer_not_connected__kon_Indo1; // millimolar_per_millisecond + const double d_dt_chaste_interface_var_indo_fluo_Ca_buffer_not_connected__Ca_Indo1_SL = var_indo_fluo_Ca_buffer_not_connected__dCa_Indo1_SL; // millimolar / millisecond + const double var_indo_fluo_Ca_buffer_not_connected__dCa_Indo1_jct = -var_chaste_interface__indo_fluo_Ca_buffer_not_connected__Ca_Indo1_jct * var_indo_fluo_Ca_buffer_not_connected__koff_Indo1 + (-var_chaste_interface__indo_fluo_Ca_buffer_not_connected__Ca_Indo1_jct + var_indo_fluo_Ca_buffer_not_connected__Bmax_Indo1_jct * var_model_parameters__Vol_cytosol / var_model_parameters__Vol_jct) * (-var_indo_fluo_Ca_buffer_not_connected__Indo1Bound + var_indo_fluo_Ca_buffer_not_connected__Indo1) * var_chaste_interface__Ca_buffer__Ca_jct * var_indo_fluo_Ca_buffer_not_connected__kon_Indo1; // millimolar_per_millisecond + const double d_dt_chaste_interface_var_indo_fluo_Ca_buffer_not_connected__Ca_Indo1_jct = var_indo_fluo_Ca_buffer_not_connected__dCa_Indo1_jct; // millimolar / millisecond + const double var_reversal_potentials__E_Ca_SL = 0.5 * mp_gas_constant_modifier->Calc(NV_Ith_S(mParameters, 11), var_chaste_interface__environment__time) * mp_temperature_modifier->Calc(NV_Ith_S(mParameters, 24), var_chaste_interface__environment__time) * log(mp_extracellular_calcium_concentration_modifier->Calc(NV_Ith_S(mParameters, 6), var_chaste_interface__environment__time) / var_chaste_interface__Ca_buffer__Ca_SL) / mp_faraday_constant_modifier->Calc(NV_Ith_S(mParameters, 10), var_chaste_interface__environment__time); // millivolt + const double var_ICab__i_Cab_SL = (-var_reversal_potentials__E_Ca_SL + var_chaste_interface__cell__V) * var_ICab__Fx_CaBk_SL * var_ICab__G_CaBk; // microA_per_microF + const double var_Ca_buffer__i_Ca_SL_tot = -2 * var_INaCa__i_NaCa_SL + var_ICaL__i_CaL_Ca_SL + var_ICab__i_Cab_SL + var_ICap__i_Cap_SL; // microA_per_microF + const double d_dt_chaste_interface_var_Ca_buffer__Ca_SL = -var_Ca_buffer__dCa_SL_tot_bound + (-var_ion_diffusion__J_Ca_SL_cytosol + var_ion_diffusion__J_Ca_jct_SL) / var_model_parameters__Vol_SL - 0.5 * var_Ca_buffer__i_Ca_SL_tot * var_model_parameters__Cm / (mp_faraday_constant_modifier->Calc(NV_Ith_S(mParameters, 10), var_chaste_interface__environment__time) * var_model_parameters__Vol_SL); // millimolar / millisecond + const double var_reversal_potentials__E_Ca_jct = 0.5 * mp_gas_constant_modifier->Calc(NV_Ith_S(mParameters, 11), var_chaste_interface__environment__time) * mp_temperature_modifier->Calc(NV_Ith_S(mParameters, 24), var_chaste_interface__environment__time) * log(mp_extracellular_calcium_concentration_modifier->Calc(NV_Ith_S(mParameters, 6), var_chaste_interface__environment__time) / var_chaste_interface__Ca_buffer__Ca_jct) / mp_faraday_constant_modifier->Calc(NV_Ith_S(mParameters, 10), var_chaste_interface__environment__time); // millivolt + const double var_ICab__i_Cab_jct = (-var_reversal_potentials__E_Ca_jct + var_chaste_interface__cell__V) * var_ICab__Fx_CaBk_jct * var_ICab__G_CaBk; // microA_per_microF + const double var_Ca_buffer__i_Ca_jct_tot = -2 * var_INaCa__i_NaCa_jct + var_ICaL__i_CaL_Ca_jct + var_ICab__i_Cab_jct + var_ICap__i_Cap_jct; // microA_per_microF + const double d_dt_chaste_interface_var_Ca_buffer__Ca_jct = -var_Ca_buffer__dCa_jct_tot_bound - var_ion_diffusion__J_Ca_jct_SL / var_model_parameters__Vol_jct + var_Jleak_SR__j_leak_SR * var_model_parameters__Vol_cytosol / var_model_parameters__Vol_jct + var_Jrel_SR__j_rel_SR * var_model_parameters__Vol_SR / var_model_parameters__Vol_jct - 0.5 * var_Ca_buffer__i_Ca_jct_tot * var_model_parameters__Cm / (mp_faraday_constant_modifier->Calc(NV_Ith_S(mParameters, 10), var_chaste_interface__environment__time) * var_model_parameters__Vol_jct); // millimolar / millisecond + const double var_reversal_potentials__E_Na_SL = mp_gas_constant_modifier->Calc(NV_Ith_S(mParameters, 11), var_chaste_interface__environment__time) * mp_temperature_modifier->Calc(NV_Ith_S(mParameters, 24), var_chaste_interface__environment__time) * log(mp_extracellular_sodium_concentration_modifier->Calc(NV_Ith_S(mParameters, 9), var_chaste_interface__environment__time) / var_chaste_interface__Na_buffer__Na_SL) / mp_faraday_constant_modifier->Calc(NV_Ith_S(mParameters, 10), var_chaste_interface__environment__time); // millivolt + const double var_INa__i_Na_SL = (-var_reversal_potentials__E_Na_SL + var_chaste_interface__cell__V) * var_INa__Fx_Na_SL * mp_membrane_fast_sodium_current_conductance_modifier->Calc(NV_Ith_S(mParameters, 15), var_chaste_interface__environment__time) * var_INa__openProb; // microA_per_microF + const double var_INab__i_Nab_SL = (-var_reversal_potentials__E_Na_SL + var_chaste_interface__cell__V) * var_INab__Fx_NaBk_SL * var_INab__G_NaBk; // microA_per_microF + const double d_dt_chaste_interface_var_Na_buffer__Na_SL = (-var_Na_buffer__dNa_SL_buf + (-var_ion_diffusion__J_Na_SL_cytosol + var_ion_diffusion__J_Na_jct_SL) / var_model_parameters__Vol_SL - (3 * var_INaCa__i_NaCa_SL + 3 * var_INaK__i_NaK_SL + var_ICaL__i_CaL_Na_SL + var_INa__i_Na_SL + var_INab__i_Nab_SL) * var_model_parameters__Cm / (mp_faraday_constant_modifier->Calc(NV_Ith_S(mParameters, 10), var_chaste_interface__environment__time) * var_model_parameters__Vol_SL)) * mp_concentration_clamp_onoff_modifier->Calc(NV_Ith_S(mParameters, 3), var_chaste_interface__environment__time); // millimolar / millisecond + const double var_reversal_potentials__E_Na_jct = mp_gas_constant_modifier->Calc(NV_Ith_S(mParameters, 11), var_chaste_interface__environment__time) * mp_temperature_modifier->Calc(NV_Ith_S(mParameters, 24), var_chaste_interface__environment__time) * log(mp_extracellular_sodium_concentration_modifier->Calc(NV_Ith_S(mParameters, 9), var_chaste_interface__environment__time) / var_chaste_interface__Na_buffer__Na_jct) / mp_faraday_constant_modifier->Calc(NV_Ith_S(mParameters, 10), var_chaste_interface__environment__time); // millivolt + const double var_INa__i_Na_jct = (-var_reversal_potentials__E_Na_jct + var_chaste_interface__cell__V) * var_INa__Fx_Na_jct * mp_membrane_fast_sodium_current_conductance_modifier->Calc(NV_Ith_S(mParameters, 15), var_chaste_interface__environment__time) * var_INa__openProb; // microA_per_microF + const double var_INab__i_Nab_jct = (-var_reversal_potentials__E_Na_jct + var_chaste_interface__cell__V) * var_INab__Fx_NaBk_jct * var_INab__G_NaBk; // microA_per_microF + const double d_dt_chaste_interface_var_Na_buffer__Na_jct = (-var_Na_buffer__dNa_jct_buf - var_ion_diffusion__J_Na_jct_SL / var_model_parameters__Vol_jct - (3 * var_INaCa__i_NaCa_jct + 3 * var_INaK__i_NaK_jct + var_ICaL__i_CaL_Na_jct + var_INa__i_Na_jct + var_INab__i_Nab_jct) * var_model_parameters__Cm / (mp_faraday_constant_modifier->Calc(NV_Ith_S(mParameters, 10), var_chaste_interface__environment__time) * var_model_parameters__Vol_jct)) * mp_concentration_clamp_onoff_modifier->Calc(NV_Ith_S(mParameters, 3), var_chaste_interface__environment__time); // millimolar / millisecond + + if (mSetVoltageDerivativeToZero) + { + d_dt_chaste_interface_var_cell__V = 0.0; + } + else + { + const double var_ICaL__PK = 2.7000000000000001e-7; // litre_per_farad_millisecond + const double var_ICaL__gamma_Ki = 0.75; // dimensionless + const double var_ICaL__gamma_Ko = 0.75; // dimensionless + const double var_ICl_Ca__Fx_Cl_SL = 0.89000000000000001; // dimensionless + const double var_ICl_Ca__Fx_Cl_jct = 0.11; // dimensionless + const double var_ICl_Ca__G_Cl = 0.109625; // milliS_per_microF + const double var_ICl_Ca__Kd_ClCa = 0.10000000000000001; // millimolar + const double var_IKs__Fx_Ks_SL = 0.89000000000000001; // dimensionless + const double var_IKs__Fx_Ks_jct = 0.11; // dimensionless + const double var_IKs__pCa_SL = 3 - log10(var_chaste_interface__Ca_buffer__Ca_SL); // dimensionless + const double var_IKs__G_Ks_SL = (0.057000000000000002 + 0.19 / (1 + exp(-12 + 1.6666666666666667 * var_IKs__pCa_SL))) * mp_membrane_slow_delayed_rectifier_potassium_current_conductance_modifier->Calc(NV_Ith_S(mParameters, 21), var_chaste_interface__environment__time); // milliS_per_microF + const double var_IKs__pCa_jct = 3 - log10(var_chaste_interface__Ca_buffer__Ca_jct); // dimensionless + const double var_IKs__G_Ks_jct = (0.057000000000000002 + 0.19 / (1 + exp(-12 + 1.6666666666666667 * var_IKs__pCa_jct))) * mp_membrane_slow_delayed_rectifier_potassium_current_conductance_modifier->Calc(NV_Ith_S(mParameters, 21), var_chaste_interface__environment__time); // milliS_per_microF + const double var_IKs__pKNa = 0.018329999999999999; // dimensionless + const double var_IKr_Rr_gate__Rr = 1 / (1 + exp(1.4732142857142858 + 0.044642857142857144 * var_chaste_interface__cell__V)); // dimensionless + const double var_cell__i_Stim_converted = GetIntracellularAreaStimulus(var_chaste_interface__environment__time); // uA_per_cm2 + const double var_cell__i_Stim = var_cell__i_Stim_converted / HeartConfig::Instance()->GetCapacitance(); // microA_per_microF + const double var_IK1__G_K1 = mp_membrane_inward_rectifier_potassium_current_conductance_modifier->Calc(0.43033148291193518 * sqrt(mp_extracellular_potassium_concentration_modifier->Calc(NV_Ith_S(mParameters, 8), var_chaste_interface__environment__time)) * mp_membrane_inward_rectifier_potassium_current_conductance_scaling_factor_modifier->Calc(NV_Ith_S(mParameters, 19), var_chaste_interface__environment__time), var_chaste_interface__environment__time); // milliS_per_microF + const double var_IKr__G_IKr = 0.43033148291193518 * sqrt(mp_extracellular_potassium_concentration_modifier->Calc(NV_Ith_S(mParameters, 8), var_chaste_interface__environment__time)) * mp_membrane_rapid_delayed_rectifier_potassium_current_conductance_modifier->Calc(NV_Ith_S(mParameters, 20), var_chaste_interface__environment__time); // milliS_per_microF + const double var_ICaL__i_CaL_K = (var_ICaL__Fx_ICaL_SL * var_ICaL_fCa_gate__fCa_SL + var_ICaL__Fx_ICaL_jct * var_ICaL_fCa_gate__fCa_jct) * (-var_ICaL__gamma_Ko * mp_extracellular_potassium_concentration_modifier->Calc(NV_Ith_S(mParameters, 8), var_chaste_interface__environment__time) + var_ICaL__gamma_Ki * mp_cytosolic_potassium_concentration_modifier->Calc(NV_Ith_S(mParameters, 5), var_chaste_interface__environment__time) * exp(var_chaste_interface__cell__V * mp_faraday_constant_modifier->Calc(NV_Ith_S(mParameters, 10), var_chaste_interface__environment__time) / (mp_gas_constant_modifier->Calc(NV_Ith_S(mParameters, 11), var_chaste_interface__environment__time) * mp_temperature_modifier->Calc(NV_Ith_S(mParameters, 24), var_chaste_interface__environment__time)))) * var_ICaL__PK * var_ICaL__temp / (-1 + exp(var_chaste_interface__cell__V * mp_faraday_constant_modifier->Calc(NV_Ith_S(mParameters, 10), var_chaste_interface__environment__time) / (mp_gas_constant_modifier->Calc(NV_Ith_S(mParameters, 11), var_chaste_interface__environment__time) * mp_temperature_modifier->Calc(NV_Ith_S(mParameters, 24), var_chaste_interface__environment__time)))); // microA_per_microF + const double var_ICaL__i_CaL = mp_ICaL__i_CaL_modifier->Calc(var_ICaL__i_CaL_Ca_SL + var_ICaL__i_CaL_Ca_jct + var_ICaL__i_CaL_K + var_ICaL__i_CaL_Na_SL + var_ICaL__i_CaL_Na_jct, var_chaste_interface__environment__time); // microA_per_microF + const double var_ICap__i_Cap = mp_ICap__i_Cap_modifier->Calc(var_ICap__i_Cap_SL + var_ICap__i_Cap_jct, var_chaste_interface__environment__time); // microA_per_microF + const double var_IKs__E_Ks = mp_gas_constant_modifier->Calc(NV_Ith_S(mParameters, 11), var_chaste_interface__environment__time) * mp_temperature_modifier->Calc(NV_Ith_S(mParameters, 24), var_chaste_interface__environment__time) * log((var_IKs__pKNa * mp_extracellular_sodium_concentration_modifier->Calc(NV_Ith_S(mParameters, 9), var_chaste_interface__environment__time) + mp_extracellular_potassium_concentration_modifier->Calc(NV_Ith_S(mParameters, 8), var_chaste_interface__environment__time)) / (var_IKs__pKNa * var_chaste_interface__Na_buffer__Nai + mp_cytosolic_potassium_concentration_modifier->Calc(NV_Ith_S(mParameters, 5), var_chaste_interface__environment__time))) / mp_faraday_constant_modifier->Calc(NV_Ith_S(mParameters, 10), var_chaste_interface__environment__time); // millivolt + const double var_IKs__i_Ks_SL = pow(var_chaste_interface__IKs_Xs_gate__Xs, 2) * (-var_IKs__E_Ks + var_chaste_interface__cell__V) * var_IKs__Fx_Ks_SL * var_IKs__G_Ks_SL; // microA_per_microF + const double var_IKs__i_Ks_jct = pow(var_chaste_interface__IKs_Xs_gate__Xs, 2) * (-var_IKs__E_Ks + var_chaste_interface__cell__V) * var_IKs__Fx_Ks_jct * var_IKs__G_Ks_jct; // microA_per_microF + const double var_IKs__i_Ks = mp_IKs__i_Ks_modifier->Calc(var_IKs__i_Ks_SL + var_IKs__i_Ks_jct, var_chaste_interface__environment__time); // microA_per_microF + const double var_INaCa__i_NaCa = mp_INaCa__i_NaCa_modifier->Calc(var_INaCa__i_NaCa_SL + var_INaCa__i_NaCa_jct, var_chaste_interface__environment__time); // microA_per_microF + const double var_INaK__i_NaK = var_INaK__i_NaK_SL + var_INaK__i_NaK_jct; // microA_per_microF + const double var_ICab__i_Cab = mp_ICab__i_Cab_modifier->Calc(var_ICab__i_Cab_SL + var_ICab__i_Cab_jct, var_chaste_interface__environment__time); // microA_per_microF + const double var_reversal_potentials__E_Cl = mp_chloride_reversal_potential_modifier->Calc(-mp_gas_constant_modifier->Calc(NV_Ith_S(mParameters, 11), var_chaste_interface__environment__time) * mp_temperature_modifier->Calc(NV_Ith_S(mParameters, 24), var_chaste_interface__environment__time) * log(mp_extracellular_chloride_concentration_modifier->Calc(NV_Ith_S(mParameters, 7), var_chaste_interface__environment__time) / mp_cytosolic_chloride_concentration_modifier->Calc(NV_Ith_S(mParameters, 4), var_chaste_interface__environment__time)) / mp_faraday_constant_modifier->Calc(NV_Ith_S(mParameters, 10), var_chaste_interface__environment__time), var_chaste_interface__environment__time); // millivolt + const double var_ICl_Ca__i_Cl_Ca = (-var_reversal_potentials__E_Cl + var_chaste_interface__cell__V) * (var_ICl_Ca__Fx_Cl_SL / (1 + var_ICl_Ca__Kd_ClCa / var_chaste_interface__Ca_buffer__Ca_SL) + var_ICl_Ca__Fx_Cl_jct / (1 + var_ICl_Ca__Kd_ClCa / var_chaste_interface__Ca_buffer__Ca_jct)) * var_ICl_Ca__G_Cl; // microA_per_microF + const double var_IClb__i_Clb = mp_IClb__i_Clb_modifier->Calc((-var_reversal_potentials__E_Cl + var_chaste_interface__cell__V) * mp_membrane_background_chloride_current_conductance_modifier->Calc(NV_Ith_S(mParameters, 13), var_chaste_interface__environment__time), var_chaste_interface__environment__time); // microA_per_microF + const double var_reversal_potentials__E_K = mp_potassium_reversal_potential_modifier->Calc(mp_gas_constant_modifier->Calc(NV_Ith_S(mParameters, 11), var_chaste_interface__environment__time) * mp_temperature_modifier->Calc(NV_Ith_S(mParameters, 24), var_chaste_interface__environment__time) * log(mp_extracellular_potassium_concentration_modifier->Calc(NV_Ith_S(mParameters, 8), var_chaste_interface__environment__time) / mp_cytosolic_potassium_concentration_modifier->Calc(NV_Ith_S(mParameters, 5), var_chaste_interface__environment__time)) / mp_faraday_constant_modifier->Calc(NV_Ith_S(mParameters, 10), var_chaste_interface__environment__time), var_chaste_interface__environment__time); // millivolt + const double var_IK1_K1_gate__alpha_K1 = 1.02 / (1 + exp(-14.1227775 + 0.23849999999999999 * var_chaste_interface__cell__V - 0.23849999999999999 * var_reversal_potentials__E_K)); // per_millisecond + const double var_IK1_K1_gate__beta_K1 = (exp(-36.698642499999998 + 0.061749999999999999 * var_chaste_interface__cell__V - 0.061749999999999999 * var_reversal_potentials__E_K) + 0.49124000000000001 * exp(0.43983232 + 0.080320000000000003 * var_chaste_interface__cell__V - 0.080320000000000003 * var_reversal_potentials__E_K)) / (1 + exp(-2.4444678999999998 + 0.51429999999999998 * var_reversal_potentials__E_K - 0.51429999999999998 * var_chaste_interface__cell__V)); // per_millisecond + const double var_IK1_K1_gate__K1_infinity = var_IK1_K1_gate__alpha_K1 / (var_IK1_K1_gate__alpha_K1 + var_IK1_K1_gate__beta_K1); // dimensionless + const double var_IK1__i_K1 = mp_IK1__i_K1_modifier->Calc((-var_reversal_potentials__E_K + var_chaste_interface__cell__V) * var_IK1__G_K1 * var_IK1_K1_gate__K1_infinity, var_chaste_interface__environment__time); // microA_per_microF + const double var_IKr__i_Kr = mp_IKr__i_Kr_modifier->Calc((-var_reversal_potentials__E_K + var_chaste_interface__cell__V) * var_IKr__G_IKr * var_IKr_Rr_gate__Rr * var_chaste_interface__IKr_Xr_gate__Xr, var_chaste_interface__environment__time); // microA_per_microF + const double var_Itof__i_tof = mp_Itof__i_tof_modifier->Calc((-var_reversal_potentials__E_K + var_chaste_interface__cell__V) * mp_membrane_fast_transient_outward_current_conductance_modifier->Calc(NV_Ith_S(mParameters, 18), var_chaste_interface__environment__time) * var_chaste_interface__Itof_X_gate__X_tof * var_chaste_interface__Itof_Y_gate__Y_tof, var_chaste_interface__environment__time); // microA_per_microF + const double var_Itos__i_tos = mp_Itos__i_tos_modifier->Calc((-var_reversal_potentials__E_K + var_chaste_interface__cell__V) * (0.5 * var_chaste_interface__Itos_R_gate__R_tos + var_chaste_interface__Itos_Y_gate__Y_tos) * mp_membrane_slow_transient_outward_current_conductance_modifier->Calc(NV_Ith_S(mParameters, 22), var_chaste_interface__environment__time) * var_chaste_interface__Itos_X_gate__X_tos, var_chaste_interface__environment__time); // microA_per_microF + const double var_INa__i_Na = mp_INa__i_Na_modifier->Calc(var_INa__i_Na_SL + var_INa__i_Na_jct, var_chaste_interface__environment__time); // microA_per_microF + const double var_INab__i_Nab = mp_INab__i_Nab_modifier->Calc(var_INab__i_Nab_SL + var_INab__i_Nab_jct, var_chaste_interface__environment__time); // microA_per_microF + // Special handling of data clamp current here + // (we want to save expense of calling the interpolation method if possible.) + double var_chaste_interface__membrane_data_clamp_current = 0.0; + if (mDataClampIsOn) + { + var_chaste_interface__membrane_data_clamp_current = (-GetExperimentalVoltageAtTimeT(var_chaste_interface__environment__time) + var_chaste_interface__cell__V) * NV_Ith_S(mParameters, 14); // uA_per_cm2 + } + d_dt_chaste_interface_var_cell__V = -var_ICaL__i_CaL - var_ICab__i_Cab - var_ICap__i_Cap - var_ICl_Ca__i_Cl_Ca - var_IClb__i_Clb - var_IK1__i_K1 - var_IKr__i_Kr - var_IKs__i_Ks - var_INa__i_Na - var_INaCa__i_NaCa - var_INaK__i_NaK - var_INab__i_Nab - var_Itof__i_tof - var_Itos__i_tos - var_cell__i_Stim - var_chaste_interface__membrane_data_clamp_current; // millivolt / millisecond + } + + NV_Ith_S(rDY,0) = d_dt_chaste_interface_var_cell__V; + NV_Ith_S(rDY,1) = d_dt_chaste_interface_var_Ca_buffer__Cai; + NV_Ith_S(rDY,2) = d_dt_chaste_interface_var_INa_h_gate__h; + NV_Ith_S(rDY,3) = d_dt_chaste_interface_var_INa_j_gate__j; + NV_Ith_S(rDY,4) = d_dt_chaste_interface_var_INa_m_gate__m; + NV_Ith_S(rDY,5) = d_dt_chaste_interface_var_IKr_Xr_gate__Xr; + NV_Ith_S(rDY,6) = d_dt_chaste_interface_var_IKs_Xs_gate__Xs; + NV_Ith_S(rDY,7) = d_dt_chaste_interface_var_Itos_X_gate__X_tos; + NV_Ith_S(rDY,8) = d_dt_chaste_interface_var_Itos_Y_gate__Y_tos; + NV_Ith_S(rDY,9) = d_dt_chaste_interface_var_Itos_R_gate__R_tos; + NV_Ith_S(rDY,10) = d_dt_chaste_interface_var_Itof_X_gate__X_tof; + NV_Ith_S(rDY,11) = d_dt_chaste_interface_var_Itof_Y_gate__Y_tof; + NV_Ith_S(rDY,12) = d_dt_chaste_interface_var_ICaL_d_gate__d; + NV_Ith_S(rDY,13) = d_dt_chaste_interface_var_ICaL_f_gate__f; + NV_Ith_S(rDY,14) = d_dt_chaste_interface_var_ICaL_fCa_gate__fCaB_SL; + NV_Ith_S(rDY,15) = d_dt_chaste_interface_var_ICaL_fCa_gate__fCaB_jct; + NV_Ith_S(rDY,16) = d_dt_chaste_interface_var_Jrel_SR__R; + NV_Ith_S(rDY,17) = d_dt_chaste_interface_var_Jrel_SR__I; + NV_Ith_S(rDY,18) = d_dt_chaste_interface_var_Jrel_SR__O; + NV_Ith_S(rDY,19) = d_dt_chaste_interface_var_Na_buffer__Na_SL; + NV_Ith_S(rDY,20) = d_dt_chaste_interface_var_Na_buffer__Na_jct; + NV_Ith_S(rDY,21) = d_dt_chaste_interface_var_Na_buffer__Na_SL_buf; + NV_Ith_S(rDY,22) = d_dt_chaste_interface_var_Na_buffer__Na_jct_buf; + NV_Ith_S(rDY,23) = d_dt_chaste_interface_var_Na_buffer__Nai; + NV_Ith_S(rDY,24) = d_dt_chaste_interface_var_Ca_buffer__Ca_SR; + NV_Ith_S(rDY,25) = d_dt_chaste_interface_var_Ca_buffer__Ca_SL; + NV_Ith_S(rDY,26) = d_dt_chaste_interface_var_Ca_buffer__Ca_jct; + NV_Ith_S(rDY,27) = d_dt_chaste_interface_var_Ca_buffer__Ca_SLB_SL; + NV_Ith_S(rDY,28) = d_dt_chaste_interface_var_Ca_buffer__Ca_SLB_jct; + NV_Ith_S(rDY,29) = d_dt_chaste_interface_var_Ca_buffer__Ca_SLHigh_SL; + NV_Ith_S(rDY,30) = d_dt_chaste_interface_var_Ca_buffer__Ca_SLHigh_jct; + NV_Ith_S(rDY,31) = d_dt_chaste_interface_var_Ca_buffer__Ca_Calsequestrin; + NV_Ith_S(rDY,32) = d_dt_chaste_interface_var_cytosolic_Ca_buffer__Ca_TroponinC; + NV_Ith_S(rDY,33) = d_dt_chaste_interface_var_cytosolic_Ca_buffer__Ca_TroponinC_Ca_Mg; + NV_Ith_S(rDY,34) = d_dt_chaste_interface_var_cytosolic_Ca_buffer__Mg_TroponinC_Ca_Mg; + NV_Ith_S(rDY,35) = d_dt_chaste_interface_var_cytosolic_Ca_buffer__Ca_Calmodulin; + NV_Ith_S(rDY,36) = d_dt_chaste_interface_var_cytosolic_Ca_buffer__Ca_Myosin; + NV_Ith_S(rDY,37) = d_dt_chaste_interface_var_cytosolic_Ca_buffer__Mg_Myosin; + NV_Ith_S(rDY,38) = d_dt_chaste_interface_var_cytosolic_Ca_buffer__Ca_SRB; + NV_Ith_S(rDY,39) = d_dt_chaste_interface_var_indo_fluo_Ca_buffer_not_connected__Ca_Indo1_Cytosol; + NV_Ith_S(rDY,40) = d_dt_chaste_interface_var_indo_fluo_Ca_buffer_not_connected__Ca_Indo1_SL; + NV_Ith_S(rDY,41) = d_dt_chaste_interface_var_indo_fluo_Ca_buffer_not_connected__Ca_Indo1_jct; + NV_Ith_S(rDY,42) = d_dt_chaste_interface_var_indo_fluo_Ca_buffer_not_connected__Ca_Fluo3_Cytosol; + NV_Ith_S(rDY,43) = d_dt_chaste_interface_var_indo_fluo_Ca_buffer_not_connected__Ca_Fluo3_SL; + NV_Ith_S(rDY,44) = d_dt_chaste_interface_var_indo_fluo_Ca_buffer_not_connected__Ca_Fluo3_jct; + } + + N_Vector Cellshannon_wang_puglisi_weber_bers_2004FromCellMLCvodeDataClamp::ComputeDerivedQuantities(double var_chaste_interface__environment__time, const N_Vector & rY) + { + // Inputs: + // Time units: millisecond + double var_chaste_interface__cell__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : mp_membrane_voltage_modifier->Calc(NV_Ith_S(rY, 0), var_chaste_interface__environment__time)); + // Units: millivolt; Initial value: -85.721630473733 + double var_chaste_interface__INa_h_gate__h = mp_membrane_fast_sodium_current_h_gate_modifier->Calc(NV_Ith_S(rY, 2), var_chaste_interface__environment__time); + // Units: dimensionless; Initial value: 0.98714602875678 + double var_chaste_interface__INa_j_gate__j = mp_membrane_fast_sodium_current_j_gate_modifier->Calc(NV_Ith_S(rY, 3), var_chaste_interface__environment__time); + // Units: dimensionless; Initial value: 0.991826348770428 + double var_chaste_interface__INa_m_gate__m = mp_membrane_fast_sodium_current_m_gate_modifier->Calc(NV_Ith_S(rY, 4), var_chaste_interface__environment__time); + // Units: dimensionless; Initial value: 0.0013702407736465 + double var_chaste_interface__IKr_Xr_gate__Xr = NV_Ith_S(rY, 5); + // Units: dimensionless; Initial value: 0.00846906175020028 + double var_chaste_interface__IKs_Xs_gate__Xs = NV_Ith_S(rY, 6); + // Units: dimensionless; Initial value: 0.00613557812033723 + double var_chaste_interface__Itos_X_gate__X_tos = NV_Ith_S(rY, 7); + // Units: dimensionless; Initial value: 0.00401072468238921 + double var_chaste_interface__Itos_Y_gate__Y_tos = NV_Ith_S(rY, 8); + // Units: dimensionless; Initial value: 0.31555225368514 + double var_chaste_interface__Itos_R_gate__R_tos = NV_Ith_S(rY, 9); + // Units: dimensionless; Initial value: 0.402577243036347 + double var_chaste_interface__Itof_X_gate__X_tof = NV_Ith_S(rY, 10); + // Units: dimensionless; Initial value: 0.00401068798369438 + double var_chaste_interface__Itof_Y_gate__Y_tof = NV_Ith_S(rY, 11); + // Units: dimensionless; Initial value: 0.994632857675454 + double var_chaste_interface__ICaL_d_gate__d = mp_membrane_L_type_calcium_current_d_gate_modifier->Calc(NV_Ith_S(rY, 12), var_chaste_interface__environment__time); + // Units: dimensionless; Initial value: 6.99526086177479e-06 + double var_chaste_interface__ICaL_f_gate__f = mp_membrane_L_type_calcium_current_f_gate_modifier->Calc(NV_Ith_S(rY, 13), var_chaste_interface__environment__time); + // Units: dimensionless; Initial value: 1.00067601563206 + double var_chaste_interface__ICaL_fCa_gate__fCaB_SL = NV_Ith_S(rY, 14); + // Units: dimensionless; Initial value: 0.0150193299768419 + double var_chaste_interface__ICaL_fCa_gate__fCaB_jct = NV_Ith_S(rY, 15); + // Units: dimensionless; Initial value: 0.0244048782575591 + double var_chaste_interface__Jrel_SR__O = NV_Ith_S(rY, 18); + // Units: dimensionless; Initial value: 7.1199533741995e-07 + double var_chaste_interface__Na_buffer__Na_SL = mp_submembrane_space_sodium_concentration_modifier->Calc(NV_Ith_S(rY, 19), var_chaste_interface__environment__time); + // Units: millimolar; Initial value: 8.87161932058707 + double var_chaste_interface__Na_buffer__Na_jct = mp_dyadic_space_sodium_concentration_modifier->Calc(NV_Ith_S(rY, 20), var_chaste_interface__environment__time); + // Units: millimolar; Initial value: 8.87031835089116 + double var_chaste_interface__Na_buffer__Nai = mp_cytosolic_sodium_concentration_modifier->Calc(NV_Ith_S(rY, 23), var_chaste_interface__environment__time); + // Units: millimolar; Initial value: 8.87200572571131 + double var_chaste_interface__Ca_buffer__Ca_SR = mp_JSR_calcium_concentration_modifier->Calc(NV_Ith_S(rY, 24), var_chaste_interface__environment__time); + // Units: millimolar; Initial value: 0.547125831028543 + double var_chaste_interface__Ca_buffer__Ca_SL = mp_submembrane_space_calcium_concentration_modifier->Calc(NV_Ith_S(rY, 25), var_chaste_interface__environment__time); + // Units: millimolar; Initial value: 0.000104971310105451 + double var_chaste_interface__Ca_buffer__Ca_jct = mp_dyadic_space_calcium_concentration_modifier->Calc(NV_Ith_S(rY, 26), var_chaste_interface__environment__time); + // Units: millimolar; Initial value: 0.000174045152623969 + + // Mathematics + const double var_ICaL__Fx_ICaL_SL = 0.10000000000000001; // dimensionless + const double var_ICaL__Fx_ICaL_jct = 0.90000000000000002; // dimensionless + const double var_ICaL__PK = 2.7000000000000001e-7; // litre_per_farad_millisecond + const double var_ICaL__PNa = 1.4999999999999999e-8; // litre_per_farad_millisecond + const double var_ICaL__Q10_CaL = 1.8; // dimensionless + const double var_ICaL__gamma_Cai = 0.34100000000000003; // dimensionless + const double var_ICaL__gamma_Cao = 0.34100000000000003; // dimensionless + const double var_ICaL__gamma_Ki = 0.75; // dimensionless + const double var_ICaL__gamma_Ko = 0.75; // dimensionless + const double var_ICaL__gamma_Nai = 0.75; // dimensionless + const double var_ICaL__gamma_Nao = 0.75; // dimensionless + const double var_ICaL_fCa_gate__fCa_SL = mp_membrane_L_type_calcium_current_fCa_gate_modifier->Calc(1 - var_chaste_interface__ICaL_fCa_gate__fCaB_SL, var_chaste_interface__environment__time); // dimensionless + const double var_ICaL_fCa_gate__fCa_jct = 1 - var_chaste_interface__ICaL_fCa_gate__fCaB_jct; // dimensionless + const double var_ICab__Fx_CaBk_SL = 0.89000000000000001; // dimensionless + const double var_ICab__Fx_CaBk_jct = 0.11; // dimensionless + const double var_ICab__G_CaBk = 0.00025129999999999998; // milliS_per_microF + const double var_ICap__Fx_SLCaP_SL = 0.89000000000000001; // dimensionless + const double var_ICap__Fx_SLCaP_jct = 0.11; // dimensionless + const double var_ICap__H = 1.6000000000000001; // dimensionless + const double var_ICap__Km = 0.00050000000000000001; // millimolar + const double var_ICap__Q10_SLCaP = 2.3500000000000001; // dimensionless + const double var_ICap__V_maxAF = 0.067299999999999999; // microA_per_microF + const double var_IKs__Fx_Ks_SL = 0.89000000000000001; // dimensionless + const double var_IKs__Fx_Ks_jct = 0.11; // dimensionless + const double var_IKs__pCa_SL = 3 - log10(var_chaste_interface__Ca_buffer__Ca_SL); // dimensionless + const double var_IKs__G_Ks_SL = (0.057000000000000002 + 0.19 / (1 + exp(-12 + 1.6666666666666667 * var_IKs__pCa_SL))) * mp_membrane_slow_delayed_rectifier_potassium_current_conductance_modifier->Calc(NV_Ith_S(mParameters, 21), var_chaste_interface__environment__time); // milliS_per_microF + const double var_IKs__pCa_jct = 3 - log10(var_chaste_interface__Ca_buffer__Ca_jct); // dimensionless + const double var_IKs__G_Ks_jct = (0.057000000000000002 + 0.19 / (1 + exp(-12 + 1.6666666666666667 * var_IKs__pCa_jct))) * mp_membrane_slow_delayed_rectifier_potassium_current_conductance_modifier->Calc(NV_Ith_S(mParameters, 21), var_chaste_interface__environment__time); // milliS_per_microF + const double var_IKs__pKNa = 0.018329999999999999; // dimensionless + const double var_INa__Fx_Na_SL = 0.89000000000000001; // dimensionless + const double var_INa__Fx_Na_jct = 0.11; // dimensionless + const double var_INaCa__Fx_NCX_SL = 0.89000000000000001; // dimensionless + const double var_INaCa__Fx_NCX_jct = 0.11; // dimensionless + const double var_INaCa__HNa = 3; // dimensionless + const double var_INaCa__K_mCai = 0.0035899999999999999; // millimolar + const double var_INaCa__K_mCao = 1.3; // millimolar + const double var_INaCa__K_mNai = 12.289999999999999; // millimolar + const double var_INaCa__K_mNao = 87.5; // millimolar + const double var_INaCa__Kd_act = 0.00025599999999999999; // millimolar + const double var_INaCa__Ka_SL = 1 / (1 + pow(var_INaCa__Kd_act, 3) / pow(var_chaste_interface__Ca_buffer__Ca_SL, 3)); // dimensionless + const double var_INaCa__Ka_jct = 1 / (1 + pow(var_INaCa__Kd_act, 3) / pow(var_chaste_interface__Ca_buffer__Ca_jct, 3)); // dimensionless + const double var_INaCa__Q10_NCX = 1.5700000000000001; // dimensionless + const double var_INaCa__eta = 0.34999999999999998; // dimensionless + const double var_INaCa__ksat = 0.27000000000000002; // dimensionless + const double var_INa__openProb = pow(var_chaste_interface__INa_m_gate__m, 3) * var_chaste_interface__INa_h_gate__h * var_chaste_interface__INa_j_gate__j; // dimensionless + const double var_INab__Fx_NaBk_SL = 0.89000000000000001; // dimensionless + const double var_INab__Fx_NaBk_jct = 0.11; // dimensionless + const double var_INab__G_NaBk = 0.00029700000000000001; // milliS_per_microF + const double var_Jrel_SR__j_rel_SR = mp_SR_release_current_modifier->Calc((-var_chaste_interface__Ca_buffer__Ca_jct + var_chaste_interface__Ca_buffer__Ca_SR) * var_chaste_interface__Jrel_SR__O * mp_SR_release_current_max_modifier->Calc(NV_Ith_S(mParameters, 1), var_chaste_interface__environment__time), var_chaste_interface__environment__time); // millimolar_per_millisecond + const double var_ICaL_f_gate__tau_f = mp_membrane_L_type_calcium_current_f_gate_tau_modifier->Calc(1 / (0.02 + 0.019699999999999999 * exp(-0.23877882250000002 * pow((1 + 0.068965517241379309 * var_chaste_interface__cell__V), 2))), var_chaste_interface__environment__time); // millisecond + const double var_IKr_Rr_gate__Rr = 1 / (1 + exp(1.4732142857142858 + 0.044642857142857144 * var_chaste_interface__cell__V)); // dimensionless + const double var_INa_h_gate__alpha_h = ((var_chaste_interface__cell__V < -40) ? (0.13500000000000001 * exp(-11.764705882352942 + 0.14705882352941177 * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(NV_Ith_S(mParameters, 17), var_chaste_interface__environment__time) - 0.14705882352941177 * var_chaste_interface__cell__V)) : (0)); // per_millisecond + const double var_INa_h_gate__beta_h = ((var_chaste_interface__cell__V < -40) ? (310000 * exp(0.34999999999999998 * var_chaste_interface__cell__V - 0.34999999999999998 * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(NV_Ith_S(mParameters, 17), var_chaste_interface__environment__time)) + 3.5600000000000001 * exp(0.079000000000000001 * var_chaste_interface__cell__V - 0.079000000000000001 * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(NV_Ith_S(mParameters, 17), var_chaste_interface__environment__time))) : (7.6923076923076916 / (1 + exp(-0.96036036036036043 + 0.0900900900900901 * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(NV_Ith_S(mParameters, 17), var_chaste_interface__environment__time) - 0.0900900900900901 * var_chaste_interface__cell__V)))); // per_millisecond + const double var_INa_h_gate__tau_h = mp_membrane_fast_sodium_current_h_gate_tau_modifier->Calc(1 / (var_INa_h_gate__alpha_h + var_INa_h_gate__beta_h), var_chaste_interface__environment__time); // millisecond + const double var_INa_j_gate__alpha_j = ((var_chaste_interface__cell__V < -40) ? ((37.780000000000001 + var_chaste_interface__cell__V) * (-127140 * exp(0.24440000000000001 * var_chaste_interface__cell__V - 0.24440000000000001 * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(NV_Ith_S(mParameters, 17), var_chaste_interface__environment__time)) - 3.4740000000000003e-5 * exp(0.043909999999999998 * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(NV_Ith_S(mParameters, 17), var_chaste_interface__environment__time) - 0.043909999999999998 * var_chaste_interface__cell__V)) / (1 + exp(24.640530000000002 + 0.311 * var_chaste_interface__cell__V - 0.311 * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(NV_Ith_S(mParameters, 17), var_chaste_interface__environment__time)))) : (0)); // per_millisecond + const double var_INa_j_gate__beta_j = ((var_chaste_interface__cell__V < -40) ? (0.1212 * exp(0.01052 * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(NV_Ith_S(mParameters, 17), var_chaste_interface__environment__time) - 0.01052 * var_chaste_interface__cell__V) / (1 + exp(-5.5312920000000005 + 0.13780000000000001 * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(NV_Ith_S(mParameters, 17), var_chaste_interface__environment__time) - 0.13780000000000001 * var_chaste_interface__cell__V))) : (0.29999999999999999 * exp(2.5349999999999999e-7 * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(NV_Ith_S(mParameters, 17), var_chaste_interface__environment__time) - 2.5349999999999999e-7 * var_chaste_interface__cell__V) / (1 + exp(-3.2000000000000002 + 0.10000000000000001 * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(NV_Ith_S(mParameters, 17), var_chaste_interface__environment__time) - 0.10000000000000001 * var_chaste_interface__cell__V)))); // per_millisecond + const double var_INa_j_gate__tau_j = mp_membrane_fast_sodium_current_j_gate_tau_modifier->Calc(1 / (var_INa_j_gate__alpha_j + var_INa_j_gate__beta_j), var_chaste_interface__environment__time); // millisecond + const double var_cell__i_Stim_converted = GetIntracellularAreaStimulus(var_chaste_interface__environment__time); // uA_per_cm2 + // Special handling of data clamp current here + // (we want to save expense of calling the interpolation method if possible.) + double var_chaste_interface__membrane_data_clamp_current = 0.0; + if (mDataClampIsOn) + { + var_chaste_interface__membrane_data_clamp_current = (-GetExperimentalVoltageAtTimeT(var_chaste_interface__environment__time) + var_chaste_interface__cell__V) * NV_Ith_S(mParameters, 14); // uA_per_cm2 + } + const double var_model_parameters__Cm_per_area = 1.9999999999999999e-6; // farad_per_cm2 + const double var_IK1__G_K1 = mp_membrane_inward_rectifier_potassium_current_conductance_modifier->Calc(0.43033148291193518 * sqrt(mp_extracellular_potassium_concentration_modifier->Calc(NV_Ith_S(mParameters, 8), var_chaste_interface__environment__time)) * mp_membrane_inward_rectifier_potassium_current_conductance_scaling_factor_modifier->Calc(NV_Ith_S(mParameters, 19), var_chaste_interface__environment__time), var_chaste_interface__environment__time); // milliS_per_microF + const double var_IKr__G_IKr = 0.43033148291193518 * sqrt(mp_extracellular_potassium_concentration_modifier->Calc(NV_Ith_S(mParameters, 8), var_chaste_interface__environment__time)) * mp_membrane_rapid_delayed_rectifier_potassium_current_conductance_modifier->Calc(NV_Ith_S(mParameters, 20), var_chaste_interface__environment__time); // milliS_per_microF + const double var_ICaL__Q_CaL = pow(var_ICaL__Q10_CaL, (-31 + 0.10000000000000001 * mp_temperature_modifier->Calc(NV_Ith_S(mParameters, 24), var_chaste_interface__environment__time))); // dimensionless + const double var_ICaL__temp = 0.45000000000000001 * pow(mp_faraday_constant_modifier->Calc(NV_Ith_S(mParameters, 10), var_chaste_interface__environment__time), 2) * var_ICaL__Q_CaL * var_chaste_interface__ICaL_d_gate__d * var_chaste_interface__ICaL_f_gate__f * var_chaste_interface__cell__V / (mp_gas_constant_modifier->Calc(NV_Ith_S(mParameters, 11), var_chaste_interface__environment__time) * mp_temperature_modifier->Calc(NV_Ith_S(mParameters, 24), var_chaste_interface__environment__time)); // coulomb_per_mole + const double var_ICaL__i_CaL_Ca_SL = 4 * (-var_ICaL__gamma_Cao * mp_extracellular_calcium_concentration_modifier->Calc(NV_Ith_S(mParameters, 6), var_chaste_interface__environment__time) + var_chaste_interface__Ca_buffer__Ca_SL * var_ICaL__gamma_Cai * exp(2 * var_chaste_interface__cell__V * mp_faraday_constant_modifier->Calc(NV_Ith_S(mParameters, 10), var_chaste_interface__environment__time) / (mp_gas_constant_modifier->Calc(NV_Ith_S(mParameters, 11), var_chaste_interface__environment__time) * mp_temperature_modifier->Calc(NV_Ith_S(mParameters, 24), var_chaste_interface__environment__time)))) * var_ICaL__Fx_ICaL_SL * mp_membrane_L_type_calcium_current_conductance_modifier->Calc(NV_Ith_S(mParameters, 12), var_chaste_interface__environment__time) * var_ICaL__temp * var_ICaL_fCa_gate__fCa_SL / (-1 + exp(2 * var_chaste_interface__cell__V * mp_faraday_constant_modifier->Calc(NV_Ith_S(mParameters, 10), var_chaste_interface__environment__time) / (mp_gas_constant_modifier->Calc(NV_Ith_S(mParameters, 11), var_chaste_interface__environment__time) * mp_temperature_modifier->Calc(NV_Ith_S(mParameters, 24), var_chaste_interface__environment__time)))); // microA_per_microF + const double var_ICaL__i_CaL_Ca_jct = 4 * (-var_ICaL__gamma_Cao * mp_extracellular_calcium_concentration_modifier->Calc(NV_Ith_S(mParameters, 6), var_chaste_interface__environment__time) + var_chaste_interface__Ca_buffer__Ca_jct * var_ICaL__gamma_Cai * exp(2 * var_chaste_interface__cell__V * mp_faraday_constant_modifier->Calc(NV_Ith_S(mParameters, 10), var_chaste_interface__environment__time) / (mp_gas_constant_modifier->Calc(NV_Ith_S(mParameters, 11), var_chaste_interface__environment__time) * mp_temperature_modifier->Calc(NV_Ith_S(mParameters, 24), var_chaste_interface__environment__time)))) * var_ICaL__Fx_ICaL_jct * mp_membrane_L_type_calcium_current_conductance_modifier->Calc(NV_Ith_S(mParameters, 12), var_chaste_interface__environment__time) * var_ICaL__temp * var_ICaL_fCa_gate__fCa_jct / (-1 + exp(2 * var_chaste_interface__cell__V * mp_faraday_constant_modifier->Calc(NV_Ith_S(mParameters, 10), var_chaste_interface__environment__time) / (mp_gas_constant_modifier->Calc(NV_Ith_S(mParameters, 11), var_chaste_interface__environment__time) * mp_temperature_modifier->Calc(NV_Ith_S(mParameters, 24), var_chaste_interface__environment__time)))); // microA_per_microF + const double var_ICaL__i_CaL_K = (var_ICaL__Fx_ICaL_SL * var_ICaL_fCa_gate__fCa_SL + var_ICaL__Fx_ICaL_jct * var_ICaL_fCa_gate__fCa_jct) * (-var_ICaL__gamma_Ko * mp_extracellular_potassium_concentration_modifier->Calc(NV_Ith_S(mParameters, 8), var_chaste_interface__environment__time) + var_ICaL__gamma_Ki * mp_cytosolic_potassium_concentration_modifier->Calc(NV_Ith_S(mParameters, 5), var_chaste_interface__environment__time) * exp(var_chaste_interface__cell__V * mp_faraday_constant_modifier->Calc(NV_Ith_S(mParameters, 10), var_chaste_interface__environment__time) / (mp_gas_constant_modifier->Calc(NV_Ith_S(mParameters, 11), var_chaste_interface__environment__time) * mp_temperature_modifier->Calc(NV_Ith_S(mParameters, 24), var_chaste_interface__environment__time)))) * var_ICaL__PK * var_ICaL__temp / (-1 + exp(var_chaste_interface__cell__V * mp_faraday_constant_modifier->Calc(NV_Ith_S(mParameters, 10), var_chaste_interface__environment__time) / (mp_gas_constant_modifier->Calc(NV_Ith_S(mParameters, 11), var_chaste_interface__environment__time) * mp_temperature_modifier->Calc(NV_Ith_S(mParameters, 24), var_chaste_interface__environment__time)))); // microA_per_microF + const double var_ICaL__i_CaL_Na_SL = (-var_ICaL__gamma_Nao * mp_extracellular_sodium_concentration_modifier->Calc(NV_Ith_S(mParameters, 9), var_chaste_interface__environment__time) + var_ICaL__gamma_Nai * var_chaste_interface__Na_buffer__Na_SL * exp(var_chaste_interface__cell__V * mp_faraday_constant_modifier->Calc(NV_Ith_S(mParameters, 10), var_chaste_interface__environment__time) / (mp_gas_constant_modifier->Calc(NV_Ith_S(mParameters, 11), var_chaste_interface__environment__time) * mp_temperature_modifier->Calc(NV_Ith_S(mParameters, 24), var_chaste_interface__environment__time)))) * var_ICaL__Fx_ICaL_SL * var_ICaL__PNa * var_ICaL__temp * var_ICaL_fCa_gate__fCa_SL / (-1 + exp(var_chaste_interface__cell__V * mp_faraday_constant_modifier->Calc(NV_Ith_S(mParameters, 10), var_chaste_interface__environment__time) / (mp_gas_constant_modifier->Calc(NV_Ith_S(mParameters, 11), var_chaste_interface__environment__time) * mp_temperature_modifier->Calc(NV_Ith_S(mParameters, 24), var_chaste_interface__environment__time)))); // microA_per_microF + const double var_ICaL__i_CaL_Na_jct = (-var_ICaL__gamma_Nao * mp_extracellular_sodium_concentration_modifier->Calc(NV_Ith_S(mParameters, 9), var_chaste_interface__environment__time) + var_ICaL__gamma_Nai * var_chaste_interface__Na_buffer__Na_jct * exp(var_chaste_interface__cell__V * mp_faraday_constant_modifier->Calc(NV_Ith_S(mParameters, 10), var_chaste_interface__environment__time) / (mp_gas_constant_modifier->Calc(NV_Ith_S(mParameters, 11), var_chaste_interface__environment__time) * mp_temperature_modifier->Calc(NV_Ith_S(mParameters, 24), var_chaste_interface__environment__time)))) * var_ICaL__Fx_ICaL_jct * var_ICaL__PNa * var_ICaL__temp * var_ICaL_fCa_gate__fCa_jct / (-1 + exp(var_chaste_interface__cell__V * mp_faraday_constant_modifier->Calc(NV_Ith_S(mParameters, 10), var_chaste_interface__environment__time) / (mp_gas_constant_modifier->Calc(NV_Ith_S(mParameters, 11), var_chaste_interface__environment__time) * mp_temperature_modifier->Calc(NV_Ith_S(mParameters, 24), var_chaste_interface__environment__time)))); // microA_per_microF + const double var_ICaL__i_CaL = mp_ICaL__i_CaL_modifier->Calc(var_ICaL__i_CaL_Ca_SL + var_ICaL__i_CaL_Ca_jct + var_ICaL__i_CaL_K + var_ICaL__i_CaL_Na_SL + var_ICaL__i_CaL_Na_jct, var_chaste_interface__environment__time); // microA_per_microF + const double var_ICaL__i_CaL_converted = HeartConfig::Instance()->GetCapacitance() * var_ICaL__i_CaL; // uA_per_cm2 + const double var_ICap__Q_SLCaP = pow(var_ICap__Q10_SLCaP, (-31 + 0.10000000000000001 * mp_temperature_modifier->Calc(NV_Ith_S(mParameters, 24), var_chaste_interface__environment__time))); // dimensionless + const double var_ICap__i_Cap_SL = var_ICap__Fx_SLCaP_SL * var_ICap__Q_SLCaP * var_ICap__V_maxAF / (1 + pow((var_ICap__Km / var_chaste_interface__Ca_buffer__Ca_SL), var_ICap__H)); // microA_per_microF + const double var_ICap__i_Cap_jct = var_ICap__Fx_SLCaP_jct * var_ICap__Q_SLCaP * var_ICap__V_maxAF / (1 + pow((var_ICap__Km / var_chaste_interface__Ca_buffer__Ca_jct), var_ICap__H)); // microA_per_microF + const double var_ICap__i_Cap = mp_ICap__i_Cap_modifier->Calc(var_ICap__i_Cap_SL + var_ICap__i_Cap_jct, var_chaste_interface__environment__time); // microA_per_microF + const double var_ICap__i_Cap_converted = HeartConfig::Instance()->GetCapacitance() * var_ICap__i_Cap; // uA_per_cm2 + const double var_IKs__E_Ks = mp_gas_constant_modifier->Calc(NV_Ith_S(mParameters, 11), var_chaste_interface__environment__time) * mp_temperature_modifier->Calc(NV_Ith_S(mParameters, 24), var_chaste_interface__environment__time) * log((var_IKs__pKNa * mp_extracellular_sodium_concentration_modifier->Calc(NV_Ith_S(mParameters, 9), var_chaste_interface__environment__time) + mp_extracellular_potassium_concentration_modifier->Calc(NV_Ith_S(mParameters, 8), var_chaste_interface__environment__time)) / (var_IKs__pKNa * var_chaste_interface__Na_buffer__Nai + mp_cytosolic_potassium_concentration_modifier->Calc(NV_Ith_S(mParameters, 5), var_chaste_interface__environment__time))) / mp_faraday_constant_modifier->Calc(NV_Ith_S(mParameters, 10), var_chaste_interface__environment__time); // millivolt + const double var_IKs__i_Ks_SL = pow(var_chaste_interface__IKs_Xs_gate__Xs, 2) * (-var_IKs__E_Ks + var_chaste_interface__cell__V) * var_IKs__Fx_Ks_SL * var_IKs__G_Ks_SL; // microA_per_microF + const double var_IKs__i_Ks_jct = pow(var_chaste_interface__IKs_Xs_gate__Xs, 2) * (-var_IKs__E_Ks + var_chaste_interface__cell__V) * var_IKs__Fx_Ks_jct * var_IKs__G_Ks_jct; // microA_per_microF + const double var_IKs__i_Ks = mp_IKs__i_Ks_modifier->Calc(var_IKs__i_Ks_SL + var_IKs__i_Ks_jct, var_chaste_interface__environment__time); // microA_per_microF + const double var_IKs__i_Ks_converted = HeartConfig::Instance()->GetCapacitance() * var_IKs__i_Ks; // uA_per_cm2 + const double var_INaCa__Q_NCX = pow(var_INaCa__Q10_NCX, (-31 + 0.10000000000000001 * mp_temperature_modifier->Calc(NV_Ith_S(mParameters, 24), var_chaste_interface__environment__time))); // dimensionless + const double var_INaCa__temp_SL = (pow(var_chaste_interface__Na_buffer__Na_SL, var_INaCa__HNa) * mp_extracellular_calcium_concentration_modifier->Calc(NV_Ith_S(mParameters, 6), var_chaste_interface__environment__time) * exp(var_INaCa__eta * var_chaste_interface__cell__V * mp_faraday_constant_modifier->Calc(NV_Ith_S(mParameters, 10), var_chaste_interface__environment__time) / (mp_gas_constant_modifier->Calc(NV_Ith_S(mParameters, 11), var_chaste_interface__environment__time) * mp_temperature_modifier->Calc(NV_Ith_S(mParameters, 24), var_chaste_interface__environment__time))) - pow(mp_extracellular_sodium_concentration_modifier->Calc(NV_Ith_S(mParameters, 9), var_chaste_interface__environment__time), var_INaCa__HNa) * var_chaste_interface__Ca_buffer__Ca_SL * exp((-1 + var_INaCa__eta) * var_chaste_interface__cell__V * mp_faraday_constant_modifier->Calc(NV_Ith_S(mParameters, 10), var_chaste_interface__environment__time) / (mp_gas_constant_modifier->Calc(NV_Ith_S(mParameters, 11), var_chaste_interface__environment__time) * mp_temperature_modifier->Calc(NV_Ith_S(mParameters, 24), var_chaste_interface__environment__time)))) / (1 + var_INaCa__ksat * exp((-1 + var_INaCa__eta) * var_chaste_interface__cell__V * mp_faraday_constant_modifier->Calc(NV_Ith_S(mParameters, 10), var_chaste_interface__environment__time) / (mp_gas_constant_modifier->Calc(NV_Ith_S(mParameters, 11), var_chaste_interface__environment__time) * mp_temperature_modifier->Calc(NV_Ith_S(mParameters, 24), var_chaste_interface__environment__time)))); // millimolar4 + const double var_INaCa__i_NaCa_SL = var_INaCa__Fx_NCX_SL * var_INaCa__Ka_SL * var_INaCa__Q_NCX * mp_membrane_sodium_calcium_exchanger_current_conductance_modifier->Calc(NV_Ith_S(mParameters, 23), var_chaste_interface__environment__time) * var_INaCa__temp_SL / (pow(var_chaste_interface__Na_buffer__Na_SL, var_INaCa__HNa) * var_INaCa__K_mCao + pow(var_chaste_interface__Na_buffer__Na_SL, var_INaCa__HNa) * mp_extracellular_calcium_concentration_modifier->Calc(NV_Ith_S(mParameters, 6), var_chaste_interface__environment__time) + pow(mp_extracellular_sodium_concentration_modifier->Calc(NV_Ith_S(mParameters, 9), var_chaste_interface__environment__time), var_INaCa__HNa) * var_chaste_interface__Ca_buffer__Ca_SL + pow(var_INaCa__K_mNao, var_INaCa__HNa) * (1 + var_chaste_interface__Ca_buffer__Ca_SL / var_INaCa__K_mCai) * var_chaste_interface__Ca_buffer__Ca_SL + pow(mp_extracellular_sodium_concentration_modifier->Calc(NV_Ith_S(mParameters, 9), var_chaste_interface__environment__time), var_INaCa__HNa) * (1 + pow((var_chaste_interface__Na_buffer__Na_SL / var_INaCa__K_mNai), var_INaCa__HNa)) * var_INaCa__K_mCai); // microA_per_microF + const double var_INaCa__temp_jct = (pow(var_chaste_interface__Na_buffer__Na_jct, var_INaCa__HNa) * mp_extracellular_calcium_concentration_modifier->Calc(NV_Ith_S(mParameters, 6), var_chaste_interface__environment__time) * exp(var_INaCa__eta * var_chaste_interface__cell__V * mp_faraday_constant_modifier->Calc(NV_Ith_S(mParameters, 10), var_chaste_interface__environment__time) / (mp_gas_constant_modifier->Calc(NV_Ith_S(mParameters, 11), var_chaste_interface__environment__time) * mp_temperature_modifier->Calc(NV_Ith_S(mParameters, 24), var_chaste_interface__environment__time))) - pow(mp_extracellular_sodium_concentration_modifier->Calc(NV_Ith_S(mParameters, 9), var_chaste_interface__environment__time), var_INaCa__HNa) * var_chaste_interface__Ca_buffer__Ca_jct * exp((-1 + var_INaCa__eta) * var_chaste_interface__cell__V * mp_faraday_constant_modifier->Calc(NV_Ith_S(mParameters, 10), var_chaste_interface__environment__time) / (mp_gas_constant_modifier->Calc(NV_Ith_S(mParameters, 11), var_chaste_interface__environment__time) * mp_temperature_modifier->Calc(NV_Ith_S(mParameters, 24), var_chaste_interface__environment__time)))) / (1 + var_INaCa__ksat * exp((-1 + var_INaCa__eta) * var_chaste_interface__cell__V * mp_faraday_constant_modifier->Calc(NV_Ith_S(mParameters, 10), var_chaste_interface__environment__time) / (mp_gas_constant_modifier->Calc(NV_Ith_S(mParameters, 11), var_chaste_interface__environment__time) * mp_temperature_modifier->Calc(NV_Ith_S(mParameters, 24), var_chaste_interface__environment__time)))); // millimolar4 + const double var_INaCa__i_NaCa_jct = var_INaCa__Fx_NCX_jct * var_INaCa__Ka_jct * var_INaCa__Q_NCX * mp_membrane_sodium_calcium_exchanger_current_conductance_modifier->Calc(NV_Ith_S(mParameters, 23), var_chaste_interface__environment__time) * var_INaCa__temp_jct / (pow(var_chaste_interface__Na_buffer__Na_jct, var_INaCa__HNa) * var_INaCa__K_mCao + pow(var_chaste_interface__Na_buffer__Na_jct, var_INaCa__HNa) * mp_extracellular_calcium_concentration_modifier->Calc(NV_Ith_S(mParameters, 6), var_chaste_interface__environment__time) + pow(mp_extracellular_sodium_concentration_modifier->Calc(NV_Ith_S(mParameters, 9), var_chaste_interface__environment__time), var_INaCa__HNa) * var_chaste_interface__Ca_buffer__Ca_jct + pow(var_INaCa__K_mNao, var_INaCa__HNa) * (1 + var_chaste_interface__Ca_buffer__Ca_jct / var_INaCa__K_mCai) * var_chaste_interface__Ca_buffer__Ca_jct + pow(mp_extracellular_sodium_concentration_modifier->Calc(NV_Ith_S(mParameters, 9), var_chaste_interface__environment__time), var_INaCa__HNa) * (1 + pow((var_chaste_interface__Na_buffer__Na_jct / var_INaCa__K_mNai), var_INaCa__HNa)) * var_INaCa__K_mCai); // microA_per_microF + const double var_INaCa__i_NaCa = mp_INaCa__i_NaCa_modifier->Calc(var_INaCa__i_NaCa_SL + var_INaCa__i_NaCa_jct, var_chaste_interface__environment__time); // microA_per_microF + const double var_INaCa__i_NaCa_converted = HeartConfig::Instance()->GetCapacitance() * var_INaCa__i_NaCa; // uA_per_cm2 + const double var_model_parameters__cell_length = 100; // micrometre + const double var_model_parameters__cell_radius = 10.25; // micrometre + const double var_model_parameters__Cm = 2.0e-8 * M_PI * var_model_parameters__Cm_per_area * var_model_parameters__cell_length * var_model_parameters__cell_radius; // farad + const double var_model_parameters__Cm_converted = mp_membrane_capacitance_modifier->Calc(1000000 * var_model_parameters__Cm, var_chaste_interface__environment__time); // uF + const double var_reversal_potentials__E_Ca_SL = 0.5 * mp_gas_constant_modifier->Calc(NV_Ith_S(mParameters, 11), var_chaste_interface__environment__time) * mp_temperature_modifier->Calc(NV_Ith_S(mParameters, 24), var_chaste_interface__environment__time) * log(mp_extracellular_calcium_concentration_modifier->Calc(NV_Ith_S(mParameters, 6), var_chaste_interface__environment__time) / var_chaste_interface__Ca_buffer__Ca_SL) / mp_faraday_constant_modifier->Calc(NV_Ith_S(mParameters, 10), var_chaste_interface__environment__time); // millivolt + const double var_ICab__i_Cab_SL = (-var_reversal_potentials__E_Ca_SL + var_chaste_interface__cell__V) * var_ICab__Fx_CaBk_SL * var_ICab__G_CaBk; // microA_per_microF + const double var_reversal_potentials__E_Ca_jct = 0.5 * mp_gas_constant_modifier->Calc(NV_Ith_S(mParameters, 11), var_chaste_interface__environment__time) * mp_temperature_modifier->Calc(NV_Ith_S(mParameters, 24), var_chaste_interface__environment__time) * log(mp_extracellular_calcium_concentration_modifier->Calc(NV_Ith_S(mParameters, 6), var_chaste_interface__environment__time) / var_chaste_interface__Ca_buffer__Ca_jct) / mp_faraday_constant_modifier->Calc(NV_Ith_S(mParameters, 10), var_chaste_interface__environment__time); // millivolt + const double var_ICab__i_Cab_jct = (-var_reversal_potentials__E_Ca_jct + var_chaste_interface__cell__V) * var_ICab__Fx_CaBk_jct * var_ICab__G_CaBk; // microA_per_microF + const double var_ICab__i_Cab = mp_ICab__i_Cab_modifier->Calc(var_ICab__i_Cab_SL + var_ICab__i_Cab_jct, var_chaste_interface__environment__time); // microA_per_microF + const double var_ICab__i_Cab_converted = HeartConfig::Instance()->GetCapacitance() * var_ICab__i_Cab; // uA_per_cm2 + const double var_reversal_potentials__E_Cl = mp_chloride_reversal_potential_modifier->Calc(-mp_gas_constant_modifier->Calc(NV_Ith_S(mParameters, 11), var_chaste_interface__environment__time) * mp_temperature_modifier->Calc(NV_Ith_S(mParameters, 24), var_chaste_interface__environment__time) * log(mp_extracellular_chloride_concentration_modifier->Calc(NV_Ith_S(mParameters, 7), var_chaste_interface__environment__time) / mp_cytosolic_chloride_concentration_modifier->Calc(NV_Ith_S(mParameters, 4), var_chaste_interface__environment__time)) / mp_faraday_constant_modifier->Calc(NV_Ith_S(mParameters, 10), var_chaste_interface__environment__time), var_chaste_interface__environment__time); // millivolt + const double var_IClb__i_Clb = mp_IClb__i_Clb_modifier->Calc((-var_reversal_potentials__E_Cl + var_chaste_interface__cell__V) * mp_membrane_background_chloride_current_conductance_modifier->Calc(NV_Ith_S(mParameters, 13), var_chaste_interface__environment__time), var_chaste_interface__environment__time); // microA_per_microF + const double var_IClb__i_Clb_converted = HeartConfig::Instance()->GetCapacitance() * var_IClb__i_Clb; // uA_per_cm2 + const double var_reversal_potentials__E_K = mp_potassium_reversal_potential_modifier->Calc(mp_gas_constant_modifier->Calc(NV_Ith_S(mParameters, 11), var_chaste_interface__environment__time) * mp_temperature_modifier->Calc(NV_Ith_S(mParameters, 24), var_chaste_interface__environment__time) * log(mp_extracellular_potassium_concentration_modifier->Calc(NV_Ith_S(mParameters, 8), var_chaste_interface__environment__time) / mp_cytosolic_potassium_concentration_modifier->Calc(NV_Ith_S(mParameters, 5), var_chaste_interface__environment__time)) / mp_faraday_constant_modifier->Calc(NV_Ith_S(mParameters, 10), var_chaste_interface__environment__time), var_chaste_interface__environment__time); // millivolt + const double var_IK1_K1_gate__alpha_K1 = 1.02 / (1 + exp(-14.1227775 + 0.23849999999999999 * var_chaste_interface__cell__V - 0.23849999999999999 * var_reversal_potentials__E_K)); // per_millisecond + const double var_IK1_K1_gate__beta_K1 = (exp(-36.698642499999998 + 0.061749999999999999 * var_chaste_interface__cell__V - 0.061749999999999999 * var_reversal_potentials__E_K) + 0.49124000000000001 * exp(0.43983232 + 0.080320000000000003 * var_chaste_interface__cell__V - 0.080320000000000003 * var_reversal_potentials__E_K)) / (1 + exp(-2.4444678999999998 + 0.51429999999999998 * var_reversal_potentials__E_K - 0.51429999999999998 * var_chaste_interface__cell__V)); // per_millisecond + const double var_IK1_K1_gate__K1_infinity = var_IK1_K1_gate__alpha_K1 / (var_IK1_K1_gate__alpha_K1 + var_IK1_K1_gate__beta_K1); // dimensionless + const double var_IK1__i_K1 = mp_IK1__i_K1_modifier->Calc((-var_reversal_potentials__E_K + var_chaste_interface__cell__V) * var_IK1__G_K1 * var_IK1_K1_gate__K1_infinity, var_chaste_interface__environment__time); // microA_per_microF + const double var_IK1__i_K1_converted = HeartConfig::Instance()->GetCapacitance() * var_IK1__i_K1; // uA_per_cm2 + const double var_IKr__i_Kr = mp_IKr__i_Kr_modifier->Calc((-var_reversal_potentials__E_K + var_chaste_interface__cell__V) * var_IKr__G_IKr * var_IKr_Rr_gate__Rr * var_chaste_interface__IKr_Xr_gate__Xr, var_chaste_interface__environment__time); // microA_per_microF + const double var_IKr__i_Kr_converted = HeartConfig::Instance()->GetCapacitance() * var_IKr__i_Kr; // uA_per_cm2 + const double var_Itof__i_tof = mp_Itof__i_tof_modifier->Calc((-var_reversal_potentials__E_K + var_chaste_interface__cell__V) * mp_membrane_fast_transient_outward_current_conductance_modifier->Calc(NV_Ith_S(mParameters, 18), var_chaste_interface__environment__time) * var_chaste_interface__Itof_X_gate__X_tof * var_chaste_interface__Itof_Y_gate__Y_tof, var_chaste_interface__environment__time); // microA_per_microF + const double var_Itof__i_tof_converted = HeartConfig::Instance()->GetCapacitance() * var_Itof__i_tof; // uA_per_cm2 + const double var_Itos__i_tos = mp_Itos__i_tos_modifier->Calc((-var_reversal_potentials__E_K + var_chaste_interface__cell__V) * (0.5 * var_chaste_interface__Itos_R_gate__R_tos + var_chaste_interface__Itos_Y_gate__Y_tos) * mp_membrane_slow_transient_outward_current_conductance_modifier->Calc(NV_Ith_S(mParameters, 22), var_chaste_interface__environment__time) * var_chaste_interface__Itos_X_gate__X_tos, var_chaste_interface__environment__time); // microA_per_microF + const double var_Itos__i_tos_converted = HeartConfig::Instance()->GetCapacitance() * var_Itos__i_tos; // uA_per_cm2 + const double var_reversal_potentials__E_Na_SL = mp_gas_constant_modifier->Calc(NV_Ith_S(mParameters, 11), var_chaste_interface__environment__time) * mp_temperature_modifier->Calc(NV_Ith_S(mParameters, 24), var_chaste_interface__environment__time) * log(mp_extracellular_sodium_concentration_modifier->Calc(NV_Ith_S(mParameters, 9), var_chaste_interface__environment__time) / var_chaste_interface__Na_buffer__Na_SL) / mp_faraday_constant_modifier->Calc(NV_Ith_S(mParameters, 10), var_chaste_interface__environment__time); // millivolt + const double var_INa__i_Na_SL = (-var_reversal_potentials__E_Na_SL + var_chaste_interface__cell__V) * var_INa__Fx_Na_SL * mp_membrane_fast_sodium_current_conductance_modifier->Calc(NV_Ith_S(mParameters, 15), var_chaste_interface__environment__time) * var_INa__openProb; // microA_per_microF + const double var_INab__i_Nab_SL = (-var_reversal_potentials__E_Na_SL + var_chaste_interface__cell__V) * var_INab__Fx_NaBk_SL * var_INab__G_NaBk; // microA_per_microF + const double var_reversal_potentials__E_Na_jct = mp_gas_constant_modifier->Calc(NV_Ith_S(mParameters, 11), var_chaste_interface__environment__time) * mp_temperature_modifier->Calc(NV_Ith_S(mParameters, 24), var_chaste_interface__environment__time) * log(mp_extracellular_sodium_concentration_modifier->Calc(NV_Ith_S(mParameters, 9), var_chaste_interface__environment__time) / var_chaste_interface__Na_buffer__Na_jct) / mp_faraday_constant_modifier->Calc(NV_Ith_S(mParameters, 10), var_chaste_interface__environment__time); // millivolt + const double var_INa__i_Na_jct = (-var_reversal_potentials__E_Na_jct + var_chaste_interface__cell__V) * var_INa__Fx_Na_jct * mp_membrane_fast_sodium_current_conductance_modifier->Calc(NV_Ith_S(mParameters, 15), var_chaste_interface__environment__time) * var_INa__openProb; // microA_per_microF + const double var_INa__i_Na = mp_INa__i_Na_modifier->Calc(var_INa__i_Na_SL + var_INa__i_Na_jct, var_chaste_interface__environment__time); // microA_per_microF + const double var_INa__i_Na_converted = HeartConfig::Instance()->GetCapacitance() * var_INa__i_Na; // uA_per_cm2 + const double var_INab__i_Nab_jct = (-var_reversal_potentials__E_Na_jct + var_chaste_interface__cell__V) * var_INab__Fx_NaBk_jct * var_INab__G_NaBk; // microA_per_microF + const double var_INab__i_Nab = mp_INab__i_Nab_modifier->Calc(var_INab__i_Nab_SL + var_INab__i_Nab_jct, var_chaste_interface__environment__time); // microA_per_microF + const double var_INab__i_Nab_converted = HeartConfig::Instance()->GetCapacitance() * var_INab__i_Nab; // uA_per_cm2 + +#if CHASTE_SUNDIALS_VERSION >= 60000 + N_Vector dqs = N_VNew_Serial(24, CvodeContextManager::Instance()->GetSundialsContext()); +#else + N_Vector dqs = N_VNew_Serial(24); +#endif + NV_Ith_S(dqs, 0) = var_Jrel_SR__j_rel_SR; + NV_Ith_S(dqs, 1) = var_reversal_potentials__E_Cl; + NV_Ith_S(dqs, 2) = var_ICaL__i_CaL_converted; + NV_Ith_S(dqs, 3) = var_ICaL_fCa_gate__fCa_SL; + NV_Ith_S(dqs, 4) = var_ICaL_f_gate__tau_f; + NV_Ith_S(dqs, 5) = var_ICab__i_Cab_converted; + NV_Ith_S(dqs, 6) = var_IClb__i_Clb_converted; + NV_Ith_S(dqs, 7) = var_INab__i_Nab_converted; + NV_Ith_S(dqs, 8) = var_ICap__i_Cap_converted; + NV_Ith_S(dqs, 9) = var_model_parameters__Cm_converted; + NV_Ith_S(dqs, 10) = var_chaste_interface__membrane_data_clamp_current; + NV_Ith_S(dqs, 11) = var_INa__i_Na_converted; + NV_Ith_S(dqs, 12) = var_INa_h_gate__tau_h; + NV_Ith_S(dqs, 13) = var_INa_j_gate__tau_j; + NV_Ith_S(dqs, 14) = var_Itof__i_tof_converted; + NV_Ith_S(dqs, 15) = var_IK1__i_K1_converted; + NV_Ith_S(dqs, 16) = var_IK1__G_K1; + NV_Ith_S(dqs, 17) = var_IKr__i_Kr_converted; + NV_Ith_S(dqs, 18) = var_IKs__i_Ks_converted; + NV_Ith_S(dqs, 19) = var_Itos__i_tos_converted; + NV_Ith_S(dqs, 20) = var_INaCa__i_NaCa_converted; + NV_Ith_S(dqs, 21) = var_cell__i_Stim_converted; + NV_Ith_S(dqs, 22) = var_reversal_potentials__E_K; + NV_Ith_S(dqs, 23) = var_chaste_interface__environment__time; + return dqs; + } + +template<> +void OdeSystemInformation::Initialise(void) +{ + this->mSystemName = "shannon_wang_puglisi_weber_bers_2004_model_updated"; + this->mFreeVariableName = "time"; + this->mFreeVariableUnits = "millisecond"; + + // NV_Ith_S(rY, 0): + this->mVariableNames.push_back("membrane_voltage"); + this->mVariableUnits.push_back("millivolt"); + this->mInitialConditions.push_back(-85.721630473733); + + // NV_Ith_S(rY, 1): + this->mVariableNames.push_back("cytosolic_calcium_concentration"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(8.6504944644883e-05); + + // NV_Ith_S(rY, 2): + this->mVariableNames.push_back("membrane_fast_sodium_current_h_gate"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.98714602875678); + + // NV_Ith_S(rY, 3): + this->mVariableNames.push_back("membrane_fast_sodium_current_j_gate"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.991826348770428); + + // NV_Ith_S(rY, 4): + this->mVariableNames.push_back("membrane_fast_sodium_current_m_gate"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.0013702407736465); + + // NV_Ith_S(rY, 5): + this->mVariableNames.push_back("IKr_Xr_gate__Xr"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.00846906175020028); + + // NV_Ith_S(rY, 6): + this->mVariableNames.push_back("IKs_Xs_gate__Xs"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.00613557812033723); + + // NV_Ith_S(rY, 7): + this->mVariableNames.push_back("Itos_X_gate__X_tos"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.00401072468238921); + + // NV_Ith_S(rY, 8): + this->mVariableNames.push_back("Itos_Y_gate__Y_tos"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.31555225368514); + + // NV_Ith_S(rY, 9): + this->mVariableNames.push_back("Itos_R_gate__R_tos"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.402577243036347); + + // NV_Ith_S(rY, 10): + this->mVariableNames.push_back("Itof_X_gate__X_tof"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.00401068798369438); + + // NV_Ith_S(rY, 11): + this->mVariableNames.push_back("Itof_Y_gate__Y_tof"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.994632857675454); + + // NV_Ith_S(rY, 12): + this->mVariableNames.push_back("membrane_L_type_calcium_current_d_gate"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(6.99526086177479e-06); + + // NV_Ith_S(rY, 13): + this->mVariableNames.push_back("membrane_L_type_calcium_current_f_gate"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(1.00067601563206); + + // NV_Ith_S(rY, 14): + this->mVariableNames.push_back("ICaL_fCa_gate__fCaB_SL"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.0150193299768419); + + // NV_Ith_S(rY, 15): + this->mVariableNames.push_back("ICaL_fCa_gate__fCaB_jct"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.0244048782575591); + + // NV_Ith_S(rY, 16): + this->mVariableNames.push_back("Jrel_SR__R"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.890917121306535); + + // NV_Ith_S(rY, 17): + this->mVariableNames.push_back("Jrel_SR__I"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(8.71752603681652e-08); + + // NV_Ith_S(rY, 18): + this->mVariableNames.push_back("Jrel_SR__O"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(7.1199533741995e-07); + + // NV_Ith_S(rY, 19): + this->mVariableNames.push_back("submembrane_space_sodium_concentration"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(8.87161932058707); + + // NV_Ith_S(rY, 20): + this->mVariableNames.push_back("dyadic_space_sodium_concentration"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(8.87031835089116); + + // NV_Ith_S(rY, 21): + this->mVariableNames.push_back("Na_buffer__Na_SL_buf"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(0.77606800956492); + + // NV_Ith_S(rY, 22): + this->mVariableNames.push_back("Na_buffer__Na_jct_buf"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(3.55668431730337); + + // NV_Ith_S(rY, 23): + this->mVariableNames.push_back("cytosolic_sodium_concentration"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(8.87200572571131); + + // NV_Ith_S(rY, 24): + this->mVariableNames.push_back("JSR_calcium_concentration"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(0.547125831028543); + + // NV_Ith_S(rY, 25): + this->mVariableNames.push_back("submembrane_space_calcium_concentration"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(0.000104971310105451); + + // NV_Ith_S(rY, 26): + this->mVariableNames.push_back("dyadic_space_calcium_concentration"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(0.000174045152623969); + + // NV_Ith_S(rY, 27): + this->mVariableNames.push_back("Ca_buffer__Ca_SLB_SL"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(0.00973710481246467); + + // NV_Ith_S(rY, 28): + this->mVariableNames.push_back("Ca_buffer__Ca_SLB_jct"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(0.00774564218017916); + + // NV_Ith_S(rY, 29): + this->mVariableNames.push_back("Ca_buffer__Ca_SLHigh_SL"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(0.113168405274355); + + // NV_Ith_S(rY, 30): + this->mVariableNames.push_back("Ca_buffer__Ca_SLHigh_jct"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(0.0772568134367606); + + // NV_Ith_S(rY, 31): + this->mVariableNames.push_back("Ca_buffer__Ca_Calsequestrin"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(1.18828527890062); + + // NV_Ith_S(rY, 32): + this->mVariableNames.push_back("cytosolic_Ca_buffer__Ca_TroponinC"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(0.00886665040283094); + + // NV_Ith_S(rY, 33): + this->mVariableNames.push_back("cytosolic_Ca_buffer__Ca_TroponinC_Ca_Mg"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(0.117873278193472); + + // NV_Ith_S(rY, 34): + this->mVariableNames.push_back("cytosolic_Ca_buffer__Mg_TroponinC_Ca_Mg"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(0.0103906683506505); + + // NV_Ith_S(rY, 35): + this->mVariableNames.push_back("cytosolic_Ca_buffer__Ca_Calmodulin"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(0.000293073957804278); + + // NV_Ith_S(rY, 36): + this->mVariableNames.push_back("cytosolic_Ca_buffer__Ca_Myosin"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(0.00195899238146509); + + // NV_Ith_S(rY, 37): + this->mVariableNames.push_back("cytosolic_Ca_buffer__Mg_Myosin"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(0.137523520981802); + + // NV_Ith_S(rY, 38): + this->mVariableNames.push_back("cytosolic_Ca_buffer__Ca_SRB"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(0.00215728901718264); + + // NV_Ith_S(rY, 39): + this->mVariableNames.push_back("indo_fluo_Ca_buffer_not_connected__Ca_Indo1_Cytosol"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(0.0); + + // NV_Ith_S(rY, 40): + this->mVariableNames.push_back("indo_fluo_Ca_buffer_not_connected__Ca_Indo1_SL"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(0.0); + + // NV_Ith_S(rY, 41): + this->mVariableNames.push_back("indo_fluo_Ca_buffer_not_connected__Ca_Indo1_jct"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(0.0); + + // NV_Ith_S(rY, 42): + this->mVariableNames.push_back("indo_fluo_Ca_buffer_not_connected__Ca_Fluo3_Cytosol"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(0.0); + + // NV_Ith_S(rY, 43): + this->mVariableNames.push_back("indo_fluo_Ca_buffer_not_connected__Ca_Fluo3_SL"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(0.0); + + // NV_Ith_S(rY, 44): + this->mVariableNames.push_back("indo_fluo_Ca_buffer_not_connected__Ca_Fluo3_jct"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(0.0); + + // mParameters[0]: + this->mParameterNames.push_back("SR_leak_current_max"); + this->mParameterUnits.push_back("per_millisecond"); + + // mParameters[1]: + this->mParameterNames.push_back("SR_release_current_max"); + this->mParameterUnits.push_back("per_millisecond"); + + // mParameters[2]: + this->mParameterNames.push_back("SR_uptake_current_max"); + this->mParameterUnits.push_back("millimolar_per_millisecond"); + + // mParameters[3]: + this->mParameterNames.push_back("concentration_clamp_onoff"); + this->mParameterUnits.push_back("dimensionless"); + + // mParameters[4]: + this->mParameterNames.push_back("cytosolic_chloride_concentration"); + this->mParameterUnits.push_back("millimolar"); + + // mParameters[5]: + this->mParameterNames.push_back("cytosolic_potassium_concentration"); + this->mParameterUnits.push_back("millimolar"); + + // mParameters[6]: + this->mParameterNames.push_back("extracellular_calcium_concentration"); + this->mParameterUnits.push_back("millimolar"); + + // mParameters[7]: + this->mParameterNames.push_back("extracellular_chloride_concentration"); + this->mParameterUnits.push_back("millimolar"); + + // mParameters[8]: + this->mParameterNames.push_back("extracellular_potassium_concentration"); + this->mParameterUnits.push_back("millimolar"); + + // mParameters[9]: + this->mParameterNames.push_back("extracellular_sodium_concentration"); + this->mParameterUnits.push_back("millimolar"); + + // mParameters[10]: + this->mParameterNames.push_back("faraday_constant"); + this->mParameterUnits.push_back("coulomb_per_mole"); + + // mParameters[11]: + this->mParameterNames.push_back("gas_constant"); + this->mParameterUnits.push_back("joule_per_kilomole_kelvin"); + + // mParameters[12]: + this->mParameterNames.push_back("membrane_L_type_calcium_current_conductance"); + this->mParameterUnits.push_back("litre_per_farad_millisecond"); + + // mParameters[13]: + this->mParameterNames.push_back("membrane_background_chloride_current_conductance"); + this->mParameterUnits.push_back("milliS_per_microF"); + + // mParameters[14]: + this->mParameterNames.push_back("membrane_data_clamp_current_conductance"); + this->mParameterUnits.push_back("dimensionless"); + + // mParameters[15]: + this->mParameterNames.push_back("membrane_fast_sodium_current_conductance"); + this->mParameterUnits.push_back("milliS_per_microF"); + + // mParameters[16]: + this->mParameterNames.push_back("membrane_fast_sodium_current_reduced_inactivation"); + this->mParameterUnits.push_back("dimensionless"); + + // mParameters[17]: + this->mParameterNames.push_back("membrane_fast_sodium_current_shift_inactivation"); + this->mParameterUnits.push_back("millivolt"); + + // mParameters[18]: + this->mParameterNames.push_back("membrane_fast_transient_outward_current_conductance"); + this->mParameterUnits.push_back("milliS_per_microF"); + + // mParameters[19]: + this->mParameterNames.push_back("membrane_inward_rectifier_potassium_current_conductance_scaling_factor"); + this->mParameterUnits.push_back("milliS_per_microF"); + + // mParameters[20]: + this->mParameterNames.push_back("membrane_rapid_delayed_rectifier_potassium_current_conductance"); + this->mParameterUnits.push_back("milliS_per_microF"); + + // mParameters[21]: + this->mParameterNames.push_back("membrane_slow_delayed_rectifier_potassium_current_conductance"); + this->mParameterUnits.push_back("milliS_per_microF"); + + // mParameters[22]: + this->mParameterNames.push_back("membrane_slow_transient_outward_current_conductance"); + this->mParameterUnits.push_back("milliS_per_microF"); + + // mParameters[23]: + this->mParameterNames.push_back("membrane_sodium_calcium_exchanger_current_conductance"); + this->mParameterUnits.push_back("microA_per_microF"); + + // mParameters[24]: + this->mParameterNames.push_back("temperature"); + this->mParameterUnits.push_back("kelvin"); + + // Derived Quantity index [0]: + this->mDerivedQuantityNames.push_back("SR_release_current"); + this->mDerivedQuantityUnits.push_back("millimolar_per_millisecond"); + + // Derived Quantity index [1]: + this->mDerivedQuantityNames.push_back("chloride_reversal_potential"); + this->mDerivedQuantityUnits.push_back("millivolt"); + + // Derived Quantity index [2]: + this->mDerivedQuantityNames.push_back("membrane_L_type_calcium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [3]: + this->mDerivedQuantityNames.push_back("membrane_L_type_calcium_current_fCa_gate"); + this->mDerivedQuantityUnits.push_back("dimensionless"); + + // Derived Quantity index [4]: + this->mDerivedQuantityNames.push_back("membrane_L_type_calcium_current_f_gate_tau"); + this->mDerivedQuantityUnits.push_back("millisecond"); + + // Derived Quantity index [5]: + this->mDerivedQuantityNames.push_back("membrane_background_calcium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [6]: + this->mDerivedQuantityNames.push_back("membrane_background_chloride_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [7]: + this->mDerivedQuantityNames.push_back("membrane_background_sodium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [8]: + this->mDerivedQuantityNames.push_back("membrane_calcium_pump_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [9]: + this->mDerivedQuantityNames.push_back("membrane_capacitance"); + this->mDerivedQuantityUnits.push_back("uF"); + + // Derived Quantity index [10]: + this->mDerivedQuantityNames.push_back("membrane_data_clamp_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [11]: + this->mDerivedQuantityNames.push_back("membrane_fast_sodium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [12]: + this->mDerivedQuantityNames.push_back("membrane_fast_sodium_current_h_gate_tau"); + this->mDerivedQuantityUnits.push_back("millisecond"); + + // Derived Quantity index [13]: + this->mDerivedQuantityNames.push_back("membrane_fast_sodium_current_j_gate_tau"); + this->mDerivedQuantityUnits.push_back("millisecond"); + + // Derived Quantity index [14]: + this->mDerivedQuantityNames.push_back("membrane_fast_transient_outward_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [15]: + this->mDerivedQuantityNames.push_back("membrane_inward_rectifier_potassium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [16]: + this->mDerivedQuantityNames.push_back("membrane_inward_rectifier_potassium_current_conductance"); + this->mDerivedQuantityUnits.push_back("milliS_per_microF"); + + // Derived Quantity index [17]: + this->mDerivedQuantityNames.push_back("membrane_rapid_delayed_rectifier_potassium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [18]: + this->mDerivedQuantityNames.push_back("membrane_slow_delayed_rectifier_potassium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [19]: + this->mDerivedQuantityNames.push_back("membrane_slow_transient_outward_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [20]: + this->mDerivedQuantityNames.push_back("membrane_sodium_calcium_exchanger_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [21]: + this->mDerivedQuantityNames.push_back("membrane_stimulus_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [22]: + this->mDerivedQuantityNames.push_back("potassium_reversal_potential"); + this->mDerivedQuantityUnits.push_back("millivolt"); + + // Derived Quantity index [23]: + this->mDerivedQuantityNames.push_back("time"); + this->mDerivedQuantityUnits.push_back("millisecond"); + + this->mInitialised = true; +} + +// Serialization for Boost >= 1.36 +#include "SerializationExportWrapperForCpp.hpp" +CHASTE_CLASS_EXPORT(Cellshannon_wang_puglisi_weber_bers_2004FromCellMLCvodeDataClamp) + +#endif // CHASTE_CVODE diff --git a/chaste_codegen/tests/numerical/baseline/CVODE_DATA_CLAMP/Shannon2004_with_modifiers.hpp b/chaste_codegen/tests/numerical/baseline/CVODE_DATA_CLAMP/Shannon2004_with_modifiers.hpp new file mode 100644 index 00000000..dea49e78 --- /dev/null +++ b/chaste_codegen/tests/numerical/baseline/CVODE_DATA_CLAMP/Shannon2004_with_modifiers.hpp @@ -0,0 +1,150 @@ +#ifdef CHASTE_CVODE +#ifndef CELLSHANNON_WANG_PUGLISI_WEBER_BERS_2004FROMCELLMLCVODEDATACLAMP_HPP_ +#define CELLSHANNON_WANG_PUGLISI_WEBER_BERS_2004FROMCELLMLCVODEDATACLAMP_HPP_ + +//! @file +//! +//! This source file was generated from CellML by chaste_codegen version (version omitted as unimportant) +//! +//! Model: shannon_wang_puglisi_weber_bers_2004_model_updated +//! +//! Processed by chaste_codegen: https://github.com/ModellingWebLab/chaste-codegen +//! (translator: chaste_codegen, model type: CvodeCellWithDataClamp) +//! on (date omitted as unimportant) +//! +//! + +#include "ChasteSerialization.hpp" +#include +#include "AbstractCardiacCellWithModifiers.hpp" +#include "AbstractModifier.hpp" +#include "AbstractStimulusFunction.hpp" +#include "AbstractCvodeCellWithDataClamp.hpp" + +class Cellshannon_wang_puglisi_weber_bers_2004FromCellMLCvodeDataClamp : public AbstractCardiacCellWithModifiers +{ + friend class boost::serialization::access; + template + void serialize(Archive & archive, const unsigned int version) + { + archive & boost::serialization::base_object >(*this); + + // Despite this class having modifier member variables, they are all added to the + // abstract class by the constructor, and archived via that, instead of here. + } + + // + // Settable parameters and readable variables + // + boost::shared_ptr mp_JSR_calcium_concentration_modifier; + boost::shared_ptr mp_SR_leak_current_max_modifier; + boost::shared_ptr mp_SR_release_current_modifier; + boost::shared_ptr mp_SR_release_current_max_modifier; + boost::shared_ptr mp_SR_uptake_current_max_modifier; + boost::shared_ptr mp_chloride_reversal_potential_modifier; + boost::shared_ptr mp_concentration_clamp_onoff_modifier; + boost::shared_ptr mp_cytosolic_calcium_concentration_modifier; + boost::shared_ptr mp_cytosolic_chloride_concentration_modifier; + boost::shared_ptr mp_cytosolic_potassium_concentration_modifier; + boost::shared_ptr mp_cytosolic_sodium_concentration_modifier; + boost::shared_ptr mp_dyadic_space_calcium_concentration_modifier; + boost::shared_ptr mp_dyadic_space_sodium_concentration_modifier; + boost::shared_ptr mp_extracellular_calcium_concentration_modifier; + boost::shared_ptr mp_extracellular_chloride_concentration_modifier; + boost::shared_ptr mp_extracellular_potassium_concentration_modifier; + boost::shared_ptr mp_extracellular_sodium_concentration_modifier; + boost::shared_ptr mp_faraday_constant_modifier; + boost::shared_ptr mp_gas_constant_modifier; + boost::shared_ptr mp_ICaL__i_CaL_modifier; + boost::shared_ptr mp_membrane_L_type_calcium_current_conductance_modifier; + boost::shared_ptr mp_membrane_L_type_calcium_current_d_gate_modifier; + boost::shared_ptr mp_membrane_L_type_calcium_current_fCa_gate_modifier; + boost::shared_ptr mp_membrane_L_type_calcium_current_f_gate_modifier; + boost::shared_ptr mp_membrane_L_type_calcium_current_f_gate_tau_modifier; + boost::shared_ptr mp_ICab__i_Cab_modifier; + boost::shared_ptr mp_IClb__i_Clb_modifier; + boost::shared_ptr mp_membrane_background_chloride_current_conductance_modifier; + boost::shared_ptr mp_INab__i_Nab_modifier; + boost::shared_ptr mp_ICap__i_Cap_modifier; + boost::shared_ptr mp_membrane_capacitance_modifier; + boost::shared_ptr mp_INa__i_Na_modifier; + boost::shared_ptr mp_membrane_fast_sodium_current_conductance_modifier; + boost::shared_ptr mp_membrane_fast_sodium_current_h_gate_modifier; + boost::shared_ptr mp_membrane_fast_sodium_current_h_gate_tau_modifier; + boost::shared_ptr mp_membrane_fast_sodium_current_j_gate_modifier; + boost::shared_ptr mp_membrane_fast_sodium_current_j_gate_tau_modifier; + boost::shared_ptr mp_membrane_fast_sodium_current_m_gate_modifier; + boost::shared_ptr mp_membrane_fast_sodium_current_reduced_inactivation_modifier; + boost::shared_ptr mp_membrane_fast_sodium_current_shift_inactivation_modifier; + boost::shared_ptr mp_Itof__i_tof_modifier; + boost::shared_ptr mp_membrane_fast_transient_outward_current_conductance_modifier; + boost::shared_ptr mp_IK1__i_K1_modifier; + boost::shared_ptr mp_membrane_inward_rectifier_potassium_current_conductance_modifier; + boost::shared_ptr mp_membrane_inward_rectifier_potassium_current_conductance_scaling_factor_modifier; + boost::shared_ptr mp_IKr__i_Kr_modifier; + boost::shared_ptr mp_membrane_rapid_delayed_rectifier_potassium_current_conductance_modifier; + boost::shared_ptr mp_IKs__i_Ks_modifier; + boost::shared_ptr mp_membrane_slow_delayed_rectifier_potassium_current_conductance_modifier; + boost::shared_ptr mp_Itos__i_tos_modifier; + boost::shared_ptr mp_membrane_slow_transient_outward_current_conductance_modifier; + boost::shared_ptr mp_INaCa__i_NaCa_modifier; + boost::shared_ptr mp_membrane_sodium_calcium_exchanger_current_conductance_modifier; + boost::shared_ptr mp_membrane_voltage_modifier; + boost::shared_ptr mp_potassium_reversal_potential_modifier; + boost::shared_ptr mp_submembrane_space_calcium_concentration_modifier; + boost::shared_ptr mp_submembrane_space_sodium_concentration_modifier; + boost::shared_ptr mp_temperature_modifier; + +private: + static AbstractCardiacCellWithModifiers* CreateMethod(boost::shared_ptr p_solver, boost::shared_ptr p_stimulus); + static bool registered; +private: +const bool is_concentration[45] = {false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, true, false, false, true, true, true, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false}; +const bool is_probability[45] = {false, false, true, true, true, false, false, false, false, false, false, false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false}; +public: + + boost::shared_ptr UseCellMLDefaultStimulus(); + double GetIntracellularCalciumConcentration(); + Cellshannon_wang_puglisi_weber_bers_2004FromCellMLCvodeDataClamp(boost::shared_ptr pOdeSolver /* unused; should be empty */, boost::shared_ptr pIntracellularStimulus); + ~Cellshannon_wang_puglisi_weber_bers_2004FromCellMLCvodeDataClamp(); + void VerifyStateVariables(); + double GetIIonic(const std::vector* pStateVariables=NULL); + void EvaluateYDerivatives(double var_chaste_interface__environment__time, const N_Vector rY, N_Vector rDY); + N_Vector ComputeDerivedQuantities(double var_chaste_interface__environment__time, const N_Vector & rY); +}; + +// Needs to be included last +#include "SerializationExportWrapper.hpp" +CHASTE_CLASS_EXPORT(Cellshannon_wang_puglisi_weber_bers_2004FromCellMLCvodeDataClamp) + +namespace boost +{ + namespace serialization + { + template + inline void save_construct_data( + Archive & ar, const Cellshannon_wang_puglisi_weber_bers_2004FromCellMLCvodeDataClamp * t, const unsigned int fileVersion) + { + const boost::shared_ptr p_solver = t->GetSolver(); + const boost::shared_ptr p_stimulus = t->GetStimulusFunction(); + ar << p_solver; + ar << p_stimulus; + } + + template + inline void load_construct_data( + Archive & ar, Cellshannon_wang_puglisi_weber_bers_2004FromCellMLCvodeDataClamp * t, const unsigned int fileVersion) + { + boost::shared_ptr p_solver; + boost::shared_ptr p_stimulus; + ar >> p_solver; + ar >> p_stimulus; + ::new(t)Cellshannon_wang_puglisi_weber_bers_2004FromCellMLCvodeDataClamp(p_solver, p_stimulus); + } + + } + +} + +#endif // CELLSHANNON_WANG_PUGLISI_WEBER_BERS_2004FROMCELLMLCVODEDATACLAMP_HPP_ +#endif // CHASTE_CVODE \ No newline at end of file diff --git a/chaste_codegen/tests/numerical/baseline/CVODE_DATA_CLAMP/dokos_model_1996.cpp b/chaste_codegen/tests/numerical/baseline/CVODE_DATA_CLAMP/dokos_model_1996.cpp new file mode 100644 index 00000000..12f9e699 --- /dev/null +++ b/chaste_codegen/tests/numerical/baseline/CVODE_DATA_CLAMP/dokos_model_1996.cpp @@ -0,0 +1,666 @@ +#ifdef CHASTE_CVODE +//! @file +//! +//! This source file was generated from CellML by chaste_codegen version (version omitted as unimportant) +//! +//! Model: dokos_model_1996 +//! +//! Processed by chaste_codegen: https://github.com/ModellingWebLab/chaste-codegen +//! (translator: chaste_codegen, model type: CvodeCellWithDataClamp) +//! on (date omitted as unimportant) +//! +//! + +#include "dokos_model_1996.hpp" +#include +#include +#include +#include +#include "Exception.hpp" +#include "OdeSystemInformation.hpp" +#include "RegularStimulus.hpp" +#include "HeartConfig.hpp" +#include "IsNan.hpp" +#include "MathsCustomFunctions.hpp" + +#if CHASTE_SUNDIALS_VERSION >= 60000 +#include "CvodeContextManager.hpp" +#endif + + + + + + + double Celldokos_model_1996FromCellMLCvodeDataClamp::GetIntracellularCalciumConcentration() + { + return NV_Ith_S(mStateVariables, 1); + } + + Celldokos_model_1996FromCellMLCvodeDataClamp::Celldokos_model_1996FromCellMLCvodeDataClamp(boost::shared_ptr pOdeSolver /* unused; should be empty */, boost::shared_ptr pIntracellularStimulus) + : AbstractCvodeCellWithDataClamp( + pOdeSolver, + 18, + 0, + pIntracellularStimulus) + { + // Time units: millisecond + // + this->mpSystemInfo = OdeSystemInformation::Instance(); + Init(); + + NV_Ith_S(this->mParameters, 0) = 0.40000000000000002; // (var_L_type_calcium_current__g_CaL) [nanoS] + NV_Ith_S(this->mParameters, 1) = 3.1999999999999999e-5; // (var_membrane__C) [nanoF] + NV_Ith_S(this->mParameters, 2) = 0; // (var_membrane_data_clamp_current_conductance) [dimensionless] + NV_Ith_S(this->mParameters, 3) = 0.00025999999999999998; // (var_delayed_rectifying_potassium_current__Kk) [picoA_per_millimolar] + NV_Ith_S(this->mParameters, 4) = 0.25; // (var_fast_sodium_current__g_Na) [nanoS] + NV_Ith_S(this->mParameters, 5) = 0.0135; // (var_hyperpolarising_activated_current__g_fK) [nanoS] + NV_Ith_S(this->mParameters, 6) = 0.0080999999999999996; // (var_hyperpolarising_activated_current__g_fNa) [nanoS] + } + + Celldokos_model_1996FromCellMLCvodeDataClamp::~Celldokos_model_1996FromCellMLCvodeDataClamp() + { + } + + + void Celldokos_model_1996FromCellMLCvodeDataClamp::VerifyStateVariables() + { + + const double tol = 100*this->mAbsTol; + N_Vector rY = rGetStateVariables(); + std::string error_message = ""; + + for (unsigned i=0; i < 18; i++) + { + if(std::isnan(NV_Ith_S(rY, i))){ + error_message += "State variable " + this->rGetStateVariableNames()[i] + " is not a number\n"; + } + if(std::isinf(NV_Ith_S(rY, i))){ + error_message += "State variable " + this->rGetStateVariableNames()[i] + " has become INFINITE\n"; + } + if(this->is_concentration[i] && NV_Ith_S(rY, i) < -tol) + { + error_message += "Concentration " + this->rGetStateVariableNames()[i] + " below 0\n"; + } + if(this->is_probability[i] && NV_Ith_S(rY, i) < -tol) + { + error_message += "Probability " + this->rGetStateVariableNames()[i] + " below 0\n"; + } + if(this->is_probability[i] && NV_Ith_S(rY, i) > 1 + tol) + { + error_message += "Probability " + this->rGetStateVariableNames()[i] + " above 1\n"; + } + } + if (error_message != ""){ + EXCEPTION(DumpState(error_message)); + } + } + + double Celldokos_model_1996FromCellMLCvodeDataClamp::GetIIonic(const std::vector* pStateVariables) + { + // For state variable interpolation (SVI) we read in interpolated state variables, + // otherwise for ionic current interpolation (ICI) we use the state variables of this model (node). + N_Vector rY; + bool made_new_cvode_vector = false; + if (!pStateVariables) + { + rY = rGetStateVariables(); + } + else + { + made_new_cvode_vector = true; + rY = MakeNVector(*pStateVariables); + } + double var_chaste_interface__membrane__E = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : NV_Ith_S(rY, 0)); + // Units: millivolt; Initial value: -64.9 + double var_chaste_interface__ion_concentrations__Cai = NV_Ith_S(rY, 1); + // Units: millimolar; Initial value: 3.4e-05 + double var_chaste_interface__L_type_calcium_current_d_gate__dL = NV_Ith_S(rY, 2); + // Units: dimensionless; Initial value: 0.0001 + double var_chaste_interface__L_type_calcium_current_f_gate__fL = NV_Ith_S(rY, 3); + // Units: dimensionless; Initial value: 0.1505 + double var_chaste_interface__L_type_calcium_current_f2_gate__fL2 = NV_Ith_S(rY, 4); + // Units: dimensionless; Initial value: 0.219 + double var_chaste_interface__T_type_calcium_current_d_gate__dT = NV_Ith_S(rY, 5); + // Units: dimensionless; Initial value: 0.001 + double var_chaste_interface__T_type_calcium_current_f_gate__fT = NV_Ith_S(rY, 6); + // Units: dimensionless; Initial value: 0.1328 + double var_chaste_interface__fast_sodium_current_m_gate__m = NV_Ith_S(rY, 7); + // Units: dimensionless; Initial value: 0.0139 + double var_chaste_interface__fast_sodium_current_h_gate__h = NV_Ith_S(rY, 8); + // Units: dimensionless; Initial value: 0.0087 + double var_chaste_interface__delayed_rectifying_potassium_current_x_gate__x = NV_Ith_S(rY, 9); + // Units: dimensionless; Initial value: 0.5682 + double var_chaste_interface__hyperpolarising_activated_current_y_gate__y = NV_Ith_S(rY, 10); + // Units: dimensionless; Initial value: 0.0287 + double var_chaste_interface__ion_concentrations__Cao = NV_Ith_S(rY, 11); + // Units: millimolar; Initial value: 2.0004 + double var_chaste_interface__ion_concentrations__Nai = NV_Ith_S(rY, 14); + // Units: millimolar; Initial value: 7.4994 + double var_chaste_interface__ion_concentrations__Nao = NV_Ith_S(rY, 15); + // Units: millimolar; Initial value: 139.9929 + double var_chaste_interface__ion_concentrations__Ki = NV_Ith_S(rY, 16); + // Units: millimolar; Initial value: 140.0073 + double var_chaste_interface__ion_concentrations__Ko = NV_Ith_S(rY, 17); + // Units: millimolar; Initial value: 5.4243 + + const double var_T_type_calcium_current__g_CaT = 0.085000000000000006; // nanoS + const double var_background_potassium_current__KbK = 6.9999999999999994e-5; // picoA_per_millimolar + const double var_background_sodium_current__g_Nab = 0.00024000000000000001; // nanoS + const double var_constants__F = 96485.341499999995; // coulomb_per_mole + const double var_constants__R = 8314.4719999999998; // joule_per_kilomole_kelvin + const double var_constants__T = 310; // kelvin + const double var_delayed_rectifying_potassium_current__P_KNa = 0.035000000000000003; // dimensionless + const double var_hyperpolarising_activated_current__Kmf = 10.300000000000001; // millimolar + const double var_membrane__C_converted = 0.001 * NV_Ith_S(mParameters, 1); // uF + const double var_background_potassium_current__i_bK = pow(var_chaste_interface__ion_concentrations__Ko, 0.40999999999999998) * (-var_chaste_interface__ion_concentrations__Ko * exp(-var_constants__F * var_chaste_interface__membrane__E / (var_constants__R * var_constants__T)) + var_chaste_interface__ion_concentrations__Ki) * var_background_potassium_current__KbK; // picoA + const double var_delayed_rectifying_potassium_current__i_KK = pow(var_chaste_interface__ion_concentrations__Ko, 0.58999999999999997) * (-var_chaste_interface__ion_concentrations__Ko * exp(-var_constants__F * var_chaste_interface__membrane__E / (var_constants__R * var_constants__T)) + var_chaste_interface__ion_concentrations__Ki) * NV_Ith_S(mParameters, 3) * var_chaste_interface__delayed_rectifying_potassium_current_x_gate__x; // picoA + const double var_delayed_rectifying_potassium_current__i_KNa = pow(var_chaste_interface__ion_concentrations__Ko, 0.58999999999999997) * (-var_chaste_interface__ion_concentrations__Nao * exp(-var_constants__F * var_chaste_interface__membrane__E / (var_constants__R * var_constants__T)) + var_chaste_interface__ion_concentrations__Nai) * NV_Ith_S(mParameters, 3) * var_delayed_rectifying_potassium_current__P_KNa * var_chaste_interface__delayed_rectifying_potassium_current_x_gate__x; // picoA + const double var_delayed_rectifying_potassium_current__i_K = var_delayed_rectifying_potassium_current__i_KK + var_delayed_rectifying_potassium_current__i_KNa; // picoA + const double var_reversal_potentials__E_Ca = 0.5 * var_constants__R * var_constants__T * log(var_chaste_interface__ion_concentrations__Cao / var_chaste_interface__ion_concentrations__Cai) / var_constants__F; // millivolt + const double var_L_type_calcium_current__i_CaL = (75 - var_reversal_potentials__E_Ca + var_chaste_interface__membrane__E) * NV_Ith_S(mParameters, 0) * var_chaste_interface__L_type_calcium_current_d_gate__dL * var_chaste_interface__L_type_calcium_current_f2_gate__fL2 * var_chaste_interface__L_type_calcium_current_f_gate__fL; // picoA + const double var_T_type_calcium_current__i_CaT = (75 - var_reversal_potentials__E_Ca + var_chaste_interface__membrane__E) * var_T_type_calcium_current__g_CaT * var_chaste_interface__T_type_calcium_current_d_gate__dT * var_chaste_interface__T_type_calcium_current_f_gate__fT; // picoA + const double var_reversal_potentials__E_K = var_constants__R * var_constants__T * log(var_chaste_interface__ion_concentrations__Ko / var_chaste_interface__ion_concentrations__Ki) / var_constants__F; // millivolt + const double var_hyperpolarising_activated_current__i_fK = pow(var_chaste_interface__ion_concentrations__Ko, 1.8300000000000001) * (-var_reversal_potentials__E_K + var_chaste_interface__membrane__E) * NV_Ith_S(mParameters, 5) * var_chaste_interface__hyperpolarising_activated_current_y_gate__y / (pow(var_hyperpolarising_activated_current__Kmf, 1.8300000000000001) + pow(var_chaste_interface__ion_concentrations__Ko, 1.8300000000000001)); // picoA + const double var_reversal_potentials__E_Na = var_constants__R * var_constants__T * log(var_chaste_interface__ion_concentrations__Nao / var_chaste_interface__ion_concentrations__Nai) / var_constants__F; // millivolt + const double var_background_sodium_current__i_bNa = (-var_reversal_potentials__E_Na + var_chaste_interface__membrane__E) * var_background_sodium_current__g_Nab; // picoA + const double var_fast_sodium_current__i_Na = pow(var_chaste_interface__fast_sodium_current_m_gate__m, 3) * (-var_reversal_potentials__E_Na + var_chaste_interface__membrane__E) * NV_Ith_S(mParameters, 4) * var_chaste_interface__fast_sodium_current_h_gate__h; // picoA + const double var_hyperpolarising_activated_current__i_fNa = pow(var_chaste_interface__ion_concentrations__Ko, 1.8300000000000001) * (-var_reversal_potentials__E_Na + var_chaste_interface__membrane__E) * NV_Ith_S(mParameters, 6) * var_chaste_interface__hyperpolarising_activated_current_y_gate__y / (pow(var_hyperpolarising_activated_current__Kmf, 1.8300000000000001) + pow(var_chaste_interface__ion_concentrations__Ko, 1.8300000000000001)); // picoA + const double var_hyperpolarising_activated_current__i_f = var_hyperpolarising_activated_current__i_fK + var_hyperpolarising_activated_current__i_fNa; // picoA + const double var_sodium_calcium_exchange_current__K1ni = 395.30000000000001; // millimolar + const double var_sodium_calcium_exchange_current__K1no = 1628; // millimolar + const double var_sodium_calcium_exchange_current__K2ni = 2.2890000000000001; // millimolar + const double var_sodium_calcium_exchange_current__K2no = 561.39999999999998; // millimolar + const double var_sodium_calcium_exchange_current__K3ni = 26.440000000000001; // millimolar + const double var_sodium_calcium_exchange_current__K3no = 4.6630000000000003; // millimolar + const double var_sodium_calcium_exchange_current__Kci = 0.0207; // millimolar + const double var_sodium_calcium_exchange_current__Kcni = 26.440000000000001; // millimolar + const double var_sodium_calcium_exchange_current__Kco = 3.6629999999999998; // millimolar + const double var_sodium_calcium_exchange_current__Qci = 0.13689999999999999; // dimensionless + const double var_sodium_calcium_exchange_current__Qco = 0; // dimensionless + const double var_sodium_calcium_exchange_current__Qn = 0.43149999999999999; // dimensionless + const double var_sodium_calcium_exchange_current__di = 1 + var_chaste_interface__ion_concentrations__Nai / var_sodium_calcium_exchange_current__K1ni + var_chaste_interface__ion_concentrations__Cai / var_sodium_calcium_exchange_current__Kci + pow(var_chaste_interface__ion_concentrations__Nai, 2) / (var_sodium_calcium_exchange_current__K1ni * var_sodium_calcium_exchange_current__K2ni) + var_chaste_interface__ion_concentrations__Cai * exp(-var_constants__F * var_chaste_interface__membrane__E * var_sodium_calcium_exchange_current__Qci / (var_constants__R * var_constants__T)) / var_sodium_calcium_exchange_current__Kci + pow(var_chaste_interface__ion_concentrations__Nai, 3) / (var_sodium_calcium_exchange_current__K1ni * var_sodium_calcium_exchange_current__K2ni * var_sodium_calcium_exchange_current__K3ni) + var_chaste_interface__ion_concentrations__Cai * var_chaste_interface__ion_concentrations__Nai / (var_sodium_calcium_exchange_current__Kci * var_sodium_calcium_exchange_current__Kcni); // dimensionless + const double var_sodium_calcium_exchange_current__do = 1 + var_chaste_interface__ion_concentrations__Nao / var_sodium_calcium_exchange_current__K1no + var_chaste_interface__ion_concentrations__Cao / var_sodium_calcium_exchange_current__Kco + pow(var_chaste_interface__ion_concentrations__Nao, 2) / (var_sodium_calcium_exchange_current__K1no * var_sodium_calcium_exchange_current__K2no) + var_chaste_interface__ion_concentrations__Cao * exp(var_constants__F * var_chaste_interface__membrane__E * var_sodium_calcium_exchange_current__Qco / (var_constants__R * var_constants__T)) / var_sodium_calcium_exchange_current__Kco + pow(var_chaste_interface__ion_concentrations__Nao, 3) / (var_sodium_calcium_exchange_current__K1no * var_sodium_calcium_exchange_current__K2no * var_sodium_calcium_exchange_current__K3no); // dimensionless + const double var_sodium_calcium_exchange_current__k12 = var_chaste_interface__ion_concentrations__Cai * exp(-var_constants__F * var_chaste_interface__membrane__E * var_sodium_calcium_exchange_current__Qci / (var_constants__R * var_constants__T)) / (var_sodium_calcium_exchange_current__Kci * var_sodium_calcium_exchange_current__di); // dimensionless + const double var_sodium_calcium_exchange_current__k14 = (pow(var_chaste_interface__ion_concentrations__Nai, 2) / (var_sodium_calcium_exchange_current__K1ni * var_sodium_calcium_exchange_current__K2ni) + pow(var_chaste_interface__ion_concentrations__Nai, 3) / (var_sodium_calcium_exchange_current__K1ni * var_sodium_calcium_exchange_current__K2ni * var_sodium_calcium_exchange_current__K3ni)) * exp(0.5 * var_constants__F * var_chaste_interface__membrane__E * var_sodium_calcium_exchange_current__Qn / (var_constants__R * var_constants__T)) / var_sodium_calcium_exchange_current__di; // dimensionless + const double var_sodium_calcium_exchange_current__k21 = var_chaste_interface__ion_concentrations__Cao * exp(-var_constants__F * var_chaste_interface__membrane__E * var_sodium_calcium_exchange_current__Qco / (var_constants__R * var_constants__T)) / (var_sodium_calcium_exchange_current__Kco * var_sodium_calcium_exchange_current__do); // dimensionless + const double var_sodium_calcium_exchange_current__k23 = (pow(var_chaste_interface__ion_concentrations__Nao, 2) / (var_sodium_calcium_exchange_current__K1no * var_sodium_calcium_exchange_current__K2no) + pow(var_chaste_interface__ion_concentrations__Nao, 3) / (var_sodium_calcium_exchange_current__K1no * var_sodium_calcium_exchange_current__K2no * var_sodium_calcium_exchange_current__K3no)) * exp(-0.5 * var_constants__F * var_chaste_interface__membrane__E * var_sodium_calcium_exchange_current__Qn / (var_constants__R * var_constants__T)) / var_sodium_calcium_exchange_current__do; // dimensionless + const double var_sodium_calcium_exchange_current__k32 = exp(0.5 * var_constants__F * var_chaste_interface__membrane__E * var_sodium_calcium_exchange_current__Qn / (var_constants__R * var_constants__T)); // dimensionless + const double var_sodium_calcium_exchange_current__k34 = var_chaste_interface__ion_concentrations__Nao / (var_chaste_interface__ion_concentrations__Nao + var_sodium_calcium_exchange_current__K3no); // dimensionless + const double var_sodium_calcium_exchange_current__k41 = exp(-0.5 * var_constants__F * var_chaste_interface__membrane__E * var_sodium_calcium_exchange_current__Qn / (var_constants__R * var_constants__T)); // dimensionless + const double var_sodium_calcium_exchange_current__k43 = var_chaste_interface__ion_concentrations__Nai / (var_chaste_interface__ion_concentrations__Nai + var_sodium_calcium_exchange_current__K3ni); // dimensionless + const double var_sodium_calcium_exchange_current__kNaCa = 4; // picoA + const double var_sodium_calcium_exchange_current__x1 = (var_sodium_calcium_exchange_current__k21 + var_sodium_calcium_exchange_current__k23) * var_sodium_calcium_exchange_current__k34 * var_sodium_calcium_exchange_current__k41 + (var_sodium_calcium_exchange_current__k41 + var_sodium_calcium_exchange_current__k43) * var_sodium_calcium_exchange_current__k21 * var_sodium_calcium_exchange_current__k32; // dimensionless + const double var_sodium_calcium_exchange_current__x2 = (var_sodium_calcium_exchange_current__k12 + var_sodium_calcium_exchange_current__k14) * var_sodium_calcium_exchange_current__k32 * var_sodium_calcium_exchange_current__k43 + (var_sodium_calcium_exchange_current__k32 + var_sodium_calcium_exchange_current__k34) * var_sodium_calcium_exchange_current__k12 * var_sodium_calcium_exchange_current__k41; // dimensionless + const double var_sodium_calcium_exchange_current__x3 = (var_sodium_calcium_exchange_current__k21 + var_sodium_calcium_exchange_current__k23) * var_sodium_calcium_exchange_current__k14 * var_sodium_calcium_exchange_current__k43 + (var_sodium_calcium_exchange_current__k41 + var_sodium_calcium_exchange_current__k43) * var_sodium_calcium_exchange_current__k12 * var_sodium_calcium_exchange_current__k23; // dimensionless + const double var_sodium_calcium_exchange_current__x4 = (var_sodium_calcium_exchange_current__k12 + var_sodium_calcium_exchange_current__k14) * var_sodium_calcium_exchange_current__k23 * var_sodium_calcium_exchange_current__k34 + (var_sodium_calcium_exchange_current__k32 + var_sodium_calcium_exchange_current__k34) * var_sodium_calcium_exchange_current__k14 * var_sodium_calcium_exchange_current__k21; // dimensionless + const double var_sodium_calcium_exchange_current__i_NaCa = (var_sodium_calcium_exchange_current__k21 * var_sodium_calcium_exchange_current__x2 - var_sodium_calcium_exchange_current__k12 * var_sodium_calcium_exchange_current__x1) * var_sodium_calcium_exchange_current__kNaCa / (var_sodium_calcium_exchange_current__x1 + var_sodium_calcium_exchange_current__x2 + var_sodium_calcium_exchange_current__x3 + var_sodium_calcium_exchange_current__x4); // picoA + const double var_sodium_potassium_pump__KmK = 1; // millimolar + const double var_sodium_potassium_pump__KmNa = 40; // millimolar + const double var_sodium_potassium_pump__i_pmax = 0.22600000000000001; // picoA + const double var_sodium_potassium_pump__i_p = (1 - 0.035938096628557313 * pow((-1 + 0.025000000000000001 * var_chaste_interface__membrane__E), 2)) * var_chaste_interface__ion_concentrations__Ko * var_chaste_interface__ion_concentrations__Nai * var_sodium_potassium_pump__i_pmax / ((var_chaste_interface__ion_concentrations__Ko + var_sodium_potassium_pump__KmK) * (var_chaste_interface__ion_concentrations__Nai + var_sodium_potassium_pump__KmNa)); // picoA + const double var_membrane__i_tot = var_L_type_calcium_current__i_CaL + var_T_type_calcium_current__i_CaT + var_background_potassium_current__i_bK + var_background_sodium_current__i_bNa + var_delayed_rectifying_potassium_current__i_K + var_fast_sodium_current__i_Na + var_hyperpolarising_activated_current__i_f + var_sodium_calcium_exchange_current__i_NaCa + var_sodium_potassium_pump__i_p; // picoA + const double var_chaste_interface__i_ionic = 9.9999999999999995e-7 * HeartConfig::Instance()->GetCapacitance() * var_membrane__i_tot / var_membrane__C_converted; // uA_per_cm2 + + const double i_ionic = var_chaste_interface__i_ionic; + if (made_new_cvode_vector) + { + DeleteVector(rY); + } + EXCEPT_IF_NOT(!std::isnan(i_ionic)); + return i_ionic; + } + + void Celldokos_model_1996FromCellMLCvodeDataClamp::EvaluateYDerivatives(double var_chaste_interface__environment__time_converted, const N_Vector rY, N_Vector rDY) + { + // Inputs: + // Time units: millisecond + double var_chaste_interface__membrane__E = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : NV_Ith_S(rY, 0)); + // Units: millivolt; Initial value: -64.9 + double var_chaste_interface__ion_concentrations__Cai = NV_Ith_S(rY, 1); + // Units: millimolar; Initial value: 3.4e-05 + double var_chaste_interface__L_type_calcium_current_d_gate__dL = NV_Ith_S(rY, 2); + // Units: dimensionless; Initial value: 0.0001 + double var_chaste_interface__L_type_calcium_current_f_gate__fL = NV_Ith_S(rY, 3); + // Units: dimensionless; Initial value: 0.1505 + double var_chaste_interface__L_type_calcium_current_f2_gate__fL2 = NV_Ith_S(rY, 4); + // Units: dimensionless; Initial value: 0.219 + double var_chaste_interface__T_type_calcium_current_d_gate__dT = NV_Ith_S(rY, 5); + // Units: dimensionless; Initial value: 0.001 + double var_chaste_interface__T_type_calcium_current_f_gate__fT = NV_Ith_S(rY, 6); + // Units: dimensionless; Initial value: 0.1328 + double var_chaste_interface__fast_sodium_current_m_gate__m = NV_Ith_S(rY, 7); + // Units: dimensionless; Initial value: 0.0139 + double var_chaste_interface__fast_sodium_current_h_gate__h = NV_Ith_S(rY, 8); + // Units: dimensionless; Initial value: 0.0087 + double var_chaste_interface__delayed_rectifying_potassium_current_x_gate__x = NV_Ith_S(rY, 9); + // Units: dimensionless; Initial value: 0.5682 + double var_chaste_interface__hyperpolarising_activated_current_y_gate__y = NV_Ith_S(rY, 10); + // Units: dimensionless; Initial value: 0.0287 + double var_chaste_interface__ion_concentrations__Cao = NV_Ith_S(rY, 11); + // Units: millimolar; Initial value: 2.0004 + double var_chaste_interface__ion_concentrations__Caup = NV_Ith_S(rY, 12); + // Units: millimolar; Initial value: 0.5832 + double var_chaste_interface__ion_concentrations__Carel = NV_Ith_S(rY, 13); + // Units: millimolar; Initial value: 0.1101 + double var_chaste_interface__ion_concentrations__Nai = NV_Ith_S(rY, 14); + // Units: millimolar; Initial value: 7.4994 + double var_chaste_interface__ion_concentrations__Nao = NV_Ith_S(rY, 15); + // Units: millimolar; Initial value: 139.9929 + double var_chaste_interface__ion_concentrations__Ki = NV_Ith_S(rY, 16); + // Units: millimolar; Initial value: 140.0073 + double var_chaste_interface__ion_concentrations__Ko = NV_Ith_S(rY, 17); + // Units: millimolar; Initial value: 5.4243 + + // Mathematics + double d_dt_chaste_interface_var_membrane__E; + const double var_L_type_calcium_current_d_gate__tau_dL = 0.002; // second + const double var_L_type_calcium_current_f2_gate__alpha_fL2 = 3; // per_second + const double var_L_type_calcium_current_f2_gate__beta_fL2 = 40000; // per_millimolar_second + const double var_T_type_calcium_current__g_CaT = 0.085000000000000006; // nanoS + const double var_background_potassium_current__KbK = 6.9999999999999994e-5; // picoA_per_millimolar + const double var_background_sodium_current__g_Nab = 0.00024000000000000001; // nanoS + const double var_constants__F = 96485.341499999995; // coulomb_per_mole + const double var_constants__R = 8314.4719999999998; // joule_per_kilomole_kelvin + const double var_constants__T = 310; // kelvin + const double var_delayed_rectifying_potassium_current__P_KNa = 0.035000000000000003; // dimensionless + const double var_hyperpolarising_activated_current__Kmf = 10.300000000000001; // millimolar + const double var_ion_concentrations__Cab = 2; // millimolar + const double var_L_type_calcium_current_f2_gate__fL2_orig_deriv = (1 - var_chaste_interface__L_type_calcium_current_f2_gate__fL2) * var_L_type_calcium_current_f2_gate__alpha_fL2 - var_L_type_calcium_current_f2_gate__beta_fL2 * var_chaste_interface__L_type_calcium_current_f2_gate__fL2 * var_chaste_interface__ion_concentrations__Cai; // 1 / second + const double d_dt_chaste_interface_var_L_type_calcium_current_f2_gate__fL2 = 0.001 * var_L_type_calcium_current_f2_gate__fL2_orig_deriv; // 1 / millisecond + const double var_ion_concentrations__Kb = 5.4000000000000004; // millimolar + const double var_ion_concentrations__Nab = 140; // millimolar + const double var_ion_concentrations__V_i = 2.5000000000000002e-6; // microlitre + const double var_ion_concentrations__V_e = 0.20000000000000001 * var_ion_concentrations__V_i; // microlitre + const double var_ion_concentrations__tau_b = 0.10000000000000001; // second + const double var_L_type_calcium_current_d_gate__dL_infinity = 1 / (1 + exp(-1 - 0.15151515151515152 * var_chaste_interface__membrane__E)); // dimensionless + const double var_L_type_calcium_current_d_gate__dL_orig_deriv = (-var_chaste_interface__L_type_calcium_current_d_gate__dL + var_L_type_calcium_current_d_gate__dL_infinity) / var_L_type_calcium_current_d_gate__tau_dL; // 1 / second + const double d_dt_chaste_interface_var_L_type_calcium_current_d_gate__dL = 0.001 * var_L_type_calcium_current_d_gate__dL_orig_deriv; // 1 / millisecond + const double var_L_type_calcium_current_f_gate__fL_infinity = 1 / (1 + exp(4.166666666666667 + 0.16666666666666666 * var_chaste_interface__membrane__E)); // dimensionless + const double var_L_type_calcium_current_f_gate__tau_fL = 0.031 + 1 / (1 + exp(4.6419753086419755 + 0.1234567901234568 * var_chaste_interface__membrane__E)); // second + const double var_L_type_calcium_current_f_gate__fL_orig_deriv = (-var_chaste_interface__L_type_calcium_current_f_gate__fL + var_L_type_calcium_current_f_gate__fL_infinity) / var_L_type_calcium_current_f_gate__tau_fL; // 1 / second + const double d_dt_chaste_interface_var_L_type_calcium_current_f_gate__fL = 0.001 * var_L_type_calcium_current_f_gate__fL_orig_deriv; // 1 / millisecond + const double var_T_type_calcium_current_d_gate__dT_infinity = 1 / (1 + exp(-3.7704918032786887 - 0.16393442622950821 * var_chaste_interface__membrane__E)); // dimensionless + const double var_T_type_calcium_current_d_gate__tau_dT = 0.00059999999999999995 + 0.0054000000000000003 / (1 + exp(3 + 0.029999999999999999 * var_chaste_interface__membrane__E)); // second + const double var_T_type_calcium_current_d_gate__dT_orig_deriv = (-var_chaste_interface__T_type_calcium_current_d_gate__dT + var_T_type_calcium_current_d_gate__dT_infinity) / var_T_type_calcium_current_d_gate__tau_dT; // 1 / second + const double d_dt_chaste_interface_var_T_type_calcium_current_d_gate__dT = 0.001 * var_T_type_calcium_current_d_gate__dT_orig_deriv; // 1 / millisecond + const double var_T_type_calcium_current_f_gate__fT_infinity = 1 / (1 + exp(11.363636363636365 + 0.15151515151515152 * var_chaste_interface__membrane__E)); // dimensionless + const double var_T_type_calcium_current_f_gate__tau_fT = 0.001 + 0.040000000000000001 / (1 + exp(5.2000000000000002 + 0.080000000000000002 * var_chaste_interface__membrane__E)); // second + const double var_T_type_calcium_current_f_gate__fT_orig_deriv = (-var_chaste_interface__T_type_calcium_current_f_gate__fT + var_T_type_calcium_current_f_gate__fT_infinity) / var_T_type_calcium_current_f_gate__tau_fT; // 1 / second + const double d_dt_chaste_interface_var_T_type_calcium_current_f_gate__fT = 0.001 * var_T_type_calcium_current_f_gate__fT_orig_deriv; // 1 / millisecond + const double var_background_potassium_current__i_bK = pow(var_chaste_interface__ion_concentrations__Ko, 0.40999999999999998) * (-var_chaste_interface__ion_concentrations__Ko * exp(-var_constants__F * var_chaste_interface__membrane__E / (var_constants__R * var_constants__T)) + var_chaste_interface__ion_concentrations__Ki) * var_background_potassium_current__KbK; // picoA + const double var_delayed_rectifying_potassium_current__i_KK = pow(var_chaste_interface__ion_concentrations__Ko, 0.58999999999999997) * (-var_chaste_interface__ion_concentrations__Ko * exp(-var_constants__F * var_chaste_interface__membrane__E / (var_constants__R * var_constants__T)) + var_chaste_interface__ion_concentrations__Ki) * NV_Ith_S(mParameters, 3) * var_chaste_interface__delayed_rectifying_potassium_current_x_gate__x; // picoA + const double var_delayed_rectifying_potassium_current__i_KNa = pow(var_chaste_interface__ion_concentrations__Ko, 0.58999999999999997) * (-var_chaste_interface__ion_concentrations__Nao * exp(-var_constants__F * var_chaste_interface__membrane__E / (var_constants__R * var_constants__T)) + var_chaste_interface__ion_concentrations__Nai) * NV_Ith_S(mParameters, 3) * var_delayed_rectifying_potassium_current__P_KNa * var_chaste_interface__delayed_rectifying_potassium_current_x_gate__x; // picoA + const double var_delayed_rectifying_potassium_current_x_gate__tau_x = 1 / (17 * exp(0.039800000000000002 * var_chaste_interface__membrane__E) + 0.21099999999999999 * exp(-0.050999999999999997 * var_chaste_interface__membrane__E)); // second + const double var_delayed_rectifying_potassium_current_x_gate__x_infinity = 1 / (1 + exp(-3.3918918918918921 - 0.13513513513513511 * var_chaste_interface__membrane__E)); // dimensionless + const double var_delayed_rectifying_potassium_current_x_gate__x_orig_deriv = (-var_chaste_interface__delayed_rectifying_potassium_current_x_gate__x + var_delayed_rectifying_potassium_current_x_gate__x_infinity) / var_delayed_rectifying_potassium_current_x_gate__tau_x; // 1 / second + const double d_dt_chaste_interface_var_delayed_rectifying_potassium_current_x_gate__x = 0.001 * var_delayed_rectifying_potassium_current_x_gate__x_orig_deriv; // 1 / millisecond + const double var_fast_sodium_current_h_gate__alpha_h = 32.399999999999999 * exp(-13.076000000000002 - 0.14000000000000001 * var_chaste_interface__membrane__E); // per_second + const double var_fast_sodium_current_h_gate__beta_h = 709 / (1 + 4.2000000000000002 * exp(-2.7239999999999998 - 0.059999999999999998 * var_chaste_interface__membrane__E)); // per_second + const double var_fast_sodium_current_h_gate__h_orig_deriv = (1 - var_chaste_interface__fast_sodium_current_h_gate__h) * var_fast_sodium_current_h_gate__alpha_h - var_fast_sodium_current_h_gate__beta_h * var_chaste_interface__fast_sodium_current_h_gate__h; // 1 / second + const double d_dt_chaste_interface_var_fast_sodium_current_h_gate__h = 0.001 * var_fast_sodium_current_h_gate__h_orig_deriv; // 1 / millisecond + const double var_fast_sodium_current_m_gate__alpha_m = (((var_chaste_interface__membrane__E >= -34.300001111111108) && (var_chaste_interface__membrane__E <= -34.299998888888886)) ? (-0.00022222222222367805 / (1 - exp(1.0000000000065512e-7)) + 449999.99999705196 * (34.300001111111108 + var_chaste_interface__membrane__E) * (0.00022222222222367805 / (1 - exp(1.0000000000065512e-7)) + 0.00022222222222367805 / (1 - exp(-1.0000000000065512e-7)))) : (200 * (34.299999999999997 + var_chaste_interface__membrane__E) / (1 - exp(-3.0869999999999997 - 0.089999999999999997 * var_chaste_interface__membrane__E)))); // per_second + const double var_fast_sodium_current_m_gate__beta_m = 8000 * exp(-8.4299999999999997 - 0.14999999999999999 * var_chaste_interface__membrane__E); // per_second + const double var_fast_sodium_current_m_gate__m_orig_deriv = (1 - var_chaste_interface__fast_sodium_current_m_gate__m) * var_fast_sodium_current_m_gate__alpha_m - var_fast_sodium_current_m_gate__beta_m * var_chaste_interface__fast_sodium_current_m_gate__m; // 1 / second + const double d_dt_chaste_interface_var_fast_sodium_current_m_gate__m = 0.001 * var_fast_sodium_current_m_gate__m_orig_deriv; // 1 / millisecond + const double var_hyperpolarising_activated_current_y_gate__alpha_y = (((var_chaste_interface__membrane__E >= -137.80000151515154) && (var_chaste_interface__membrane__E <= -137.79999848484849)) ? (-5.4545454545085189e-7 / (-1 + exp(-9.9999999999322859e-8)) + 330000.00000223459 * (137.80000151515154 + var_chaste_interface__membrane__E) * (5.4545454545085189e-7 / (-1 + exp(9.9999999999322859e-8)) + 5.4545454545085189e-7 / (-1 + exp(-9.9999999999322859e-8)))) : (0.35999999999999999 * (137.80000000000001 + var_chaste_interface__membrane__E) / (-1 + exp(9.0948000000000011 + 0.066000000000000003 * var_chaste_interface__membrane__E)))); // per_second + const double var_hyperpolarising_activated_current_y_gate__beta_y = (((var_chaste_interface__membrane__E >= -76.300000476190476) && (var_chaste_interface__membrane__E <= -76.299999523809518)) ? (-4.7619047616187521e-8 / (1 - exp(9.9999999993993777e-8)) + 1049999.9999406631 * (76.300000476190476 + var_chaste_interface__membrane__E) * (4.7619047627289747e-8 / (1 - exp(-1.0000000001730847e-7)) + 4.7619047616187521e-8 / (1 - exp(9.9999999993993777e-8)))) : (0.10000000000000001 * (76.299999999999997 + var_chaste_interface__membrane__E) / (1 - exp(-16.023 - 0.20999999999999999 * var_chaste_interface__membrane__E)))); // per_second + const double var_hyperpolarising_activated_current_y_gate__y_orig_deriv = (1 - var_chaste_interface__hyperpolarising_activated_current_y_gate__y) * var_hyperpolarising_activated_current_y_gate__alpha_y - var_hyperpolarising_activated_current_y_gate__beta_y * var_chaste_interface__hyperpolarising_activated_current_y_gate__y; // 1 / second + const double d_dt_chaste_interface_var_hyperpolarising_activated_current_y_gate__y = 0.001 * var_hyperpolarising_activated_current_y_gate__y_orig_deriv; // 1 / millisecond + const double var_reversal_potentials__E_Ca = 0.5 * var_constants__R * var_constants__T * log(var_chaste_interface__ion_concentrations__Cao / var_chaste_interface__ion_concentrations__Cai) / var_constants__F; // millivolt + const double var_L_type_calcium_current__i_CaL = (75 - var_reversal_potentials__E_Ca + var_chaste_interface__membrane__E) * NV_Ith_S(mParameters, 0) * var_chaste_interface__L_type_calcium_current_d_gate__dL * var_chaste_interface__L_type_calcium_current_f2_gate__fL2 * var_chaste_interface__L_type_calcium_current_f_gate__fL; // picoA + const double var_T_type_calcium_current__i_CaT = (75 - var_reversal_potentials__E_Ca + var_chaste_interface__membrane__E) * var_T_type_calcium_current__g_CaT * var_chaste_interface__T_type_calcium_current_d_gate__dT * var_chaste_interface__T_type_calcium_current_f_gate__fT; // picoA + const double var_reversal_potentials__E_K = var_constants__R * var_constants__T * log(var_chaste_interface__ion_concentrations__Ko / var_chaste_interface__ion_concentrations__Ki) / var_constants__F; // millivolt + const double var_hyperpolarising_activated_current__i_fK = pow(var_chaste_interface__ion_concentrations__Ko, 1.8300000000000001) * (-var_reversal_potentials__E_K + var_chaste_interface__membrane__E) * NV_Ith_S(mParameters, 5) * var_chaste_interface__hyperpolarising_activated_current_y_gate__y / (pow(var_hyperpolarising_activated_current__Kmf, 1.8300000000000001) + pow(var_chaste_interface__ion_concentrations__Ko, 1.8300000000000001)); // picoA + const double var_reversal_potentials__E_Na = var_constants__R * var_constants__T * log(var_chaste_interface__ion_concentrations__Nao / var_chaste_interface__ion_concentrations__Nai) / var_constants__F; // millivolt + const double var_background_sodium_current__i_bNa = (-var_reversal_potentials__E_Na + var_chaste_interface__membrane__E) * var_background_sodium_current__g_Nab; // picoA + const double var_fast_sodium_current__i_Na = pow(var_chaste_interface__fast_sodium_current_m_gate__m, 3) * (-var_reversal_potentials__E_Na + var_chaste_interface__membrane__E) * NV_Ith_S(mParameters, 4) * var_chaste_interface__fast_sodium_current_h_gate__h; // picoA + const double var_hyperpolarising_activated_current__i_fNa = pow(var_chaste_interface__ion_concentrations__Ko, 1.8300000000000001) * (-var_reversal_potentials__E_Na + var_chaste_interface__membrane__E) * NV_Ith_S(mParameters, 6) * var_chaste_interface__hyperpolarising_activated_current_y_gate__y / (pow(var_hyperpolarising_activated_current__Kmf, 1.8300000000000001) + pow(var_chaste_interface__ion_concentrations__Ko, 1.8300000000000001)); // picoA + const double var_sarcoplasmic_reticulum_kinetics__KmCarel = 0.001; // millimolar + const double var_sarcoplasmic_reticulum_kinetics__KmCaup = 0.00050000000000000001; // millimolar + const double var_sarcoplasmic_reticulum_kinetics__V_rel = 0.0060000000000000001 * var_ion_concentrations__V_i; // microlitre + const double var_sarcoplasmic_reticulum_kinetics__V_up = 0.014 * var_ion_concentrations__V_i; // microlitre + const double var_sarcoplasmic_reticulum_kinetics__i_up_max = 0.0212; // picoA + const double var_sarcoplasmic_reticulum_kinetics__i_up = pow(var_chaste_interface__ion_concentrations__Cai, 2) * var_sarcoplasmic_reticulum_kinetics__i_up_max / (pow(var_chaste_interface__ion_concentrations__Cai, 2) + pow(var_sarcoplasmic_reticulum_kinetics__KmCaup, 2)); // picoA + const double var_sarcoplasmic_reticulum_kinetics__tau_rel = 0.0050000000000000001; // second + const double var_sarcoplasmic_reticulum_kinetics__i_rel = 2 * pow(var_chaste_interface__ion_concentrations__Cai, 2) * var_constants__F * var_chaste_interface__ion_concentrations__Carel * var_sarcoplasmic_reticulum_kinetics__V_rel / ((pow(var_chaste_interface__ion_concentrations__Cai, 2) + pow(var_sarcoplasmic_reticulum_kinetics__KmCarel, 2)) * var_sarcoplasmic_reticulum_kinetics__tau_rel); // picoA + const double var_sarcoplasmic_reticulum_kinetics__tau_tr = 0.40000000000000002; // second + const double var_sarcoplasmic_reticulum_kinetics__i_tr = 2 * var_constants__F * var_chaste_interface__ion_concentrations__Caup * var_sarcoplasmic_reticulum_kinetics__V_rel / var_sarcoplasmic_reticulum_kinetics__tau_tr; // picoA + const double var_ion_concentrations__Carel_orig_deriv = 0.5 * (-var_sarcoplasmic_reticulum_kinetics__i_rel + var_sarcoplasmic_reticulum_kinetics__i_tr) / (var_constants__F * var_sarcoplasmic_reticulum_kinetics__V_rel); // millimolar / second + const double d_dt_chaste_interface_var_ion_concentrations__Carel = 0.001 * var_ion_concentrations__Carel_orig_deriv; // millimolar / millisecond + const double var_ion_concentrations__Caup_orig_deriv = 0.5 * (-var_sarcoplasmic_reticulum_kinetics__i_tr + var_sarcoplasmic_reticulum_kinetics__i_up) / (var_constants__F * var_sarcoplasmic_reticulum_kinetics__V_up); // millimolar / second + const double d_dt_chaste_interface_var_ion_concentrations__Caup = 0.001 * var_ion_concentrations__Caup_orig_deriv; // millimolar / millisecond + const double var_sodium_calcium_exchange_current__K1ni = 395.30000000000001; // millimolar + const double var_sodium_calcium_exchange_current__K1no = 1628; // millimolar + const double var_sodium_calcium_exchange_current__K2ni = 2.2890000000000001; // millimolar + const double var_sodium_calcium_exchange_current__K2no = 561.39999999999998; // millimolar + const double var_sodium_calcium_exchange_current__K3ni = 26.440000000000001; // millimolar + const double var_sodium_calcium_exchange_current__K3no = 4.6630000000000003; // millimolar + const double var_sodium_calcium_exchange_current__Kci = 0.0207; // millimolar + const double var_sodium_calcium_exchange_current__Kcni = 26.440000000000001; // millimolar + const double var_sodium_calcium_exchange_current__Kco = 3.6629999999999998; // millimolar + const double var_sodium_calcium_exchange_current__Qci = 0.13689999999999999; // dimensionless + const double var_sodium_calcium_exchange_current__Qco = 0; // dimensionless + const double var_sodium_calcium_exchange_current__Qn = 0.43149999999999999; // dimensionless + const double var_sodium_calcium_exchange_current__di = 1 + var_chaste_interface__ion_concentrations__Nai / var_sodium_calcium_exchange_current__K1ni + var_chaste_interface__ion_concentrations__Cai / var_sodium_calcium_exchange_current__Kci + pow(var_chaste_interface__ion_concentrations__Nai, 2) / (var_sodium_calcium_exchange_current__K1ni * var_sodium_calcium_exchange_current__K2ni) + var_chaste_interface__ion_concentrations__Cai * exp(-var_constants__F * var_chaste_interface__membrane__E * var_sodium_calcium_exchange_current__Qci / (var_constants__R * var_constants__T)) / var_sodium_calcium_exchange_current__Kci + pow(var_chaste_interface__ion_concentrations__Nai, 3) / (var_sodium_calcium_exchange_current__K1ni * var_sodium_calcium_exchange_current__K2ni * var_sodium_calcium_exchange_current__K3ni) + var_chaste_interface__ion_concentrations__Cai * var_chaste_interface__ion_concentrations__Nai / (var_sodium_calcium_exchange_current__Kci * var_sodium_calcium_exchange_current__Kcni); // dimensionless + const double var_sodium_calcium_exchange_current__do = 1 + var_chaste_interface__ion_concentrations__Nao / var_sodium_calcium_exchange_current__K1no + var_chaste_interface__ion_concentrations__Cao / var_sodium_calcium_exchange_current__Kco + pow(var_chaste_interface__ion_concentrations__Nao, 2) / (var_sodium_calcium_exchange_current__K1no * var_sodium_calcium_exchange_current__K2no) + var_chaste_interface__ion_concentrations__Cao * exp(var_constants__F * var_chaste_interface__membrane__E * var_sodium_calcium_exchange_current__Qco / (var_constants__R * var_constants__T)) / var_sodium_calcium_exchange_current__Kco + pow(var_chaste_interface__ion_concentrations__Nao, 3) / (var_sodium_calcium_exchange_current__K1no * var_sodium_calcium_exchange_current__K2no * var_sodium_calcium_exchange_current__K3no); // dimensionless + const double var_sodium_calcium_exchange_current__k12 = var_chaste_interface__ion_concentrations__Cai * exp(-var_constants__F * var_chaste_interface__membrane__E * var_sodium_calcium_exchange_current__Qci / (var_constants__R * var_constants__T)) / (var_sodium_calcium_exchange_current__Kci * var_sodium_calcium_exchange_current__di); // dimensionless + const double var_sodium_calcium_exchange_current__k14 = (pow(var_chaste_interface__ion_concentrations__Nai, 2) / (var_sodium_calcium_exchange_current__K1ni * var_sodium_calcium_exchange_current__K2ni) + pow(var_chaste_interface__ion_concentrations__Nai, 3) / (var_sodium_calcium_exchange_current__K1ni * var_sodium_calcium_exchange_current__K2ni * var_sodium_calcium_exchange_current__K3ni)) * exp(0.5 * var_constants__F * var_chaste_interface__membrane__E * var_sodium_calcium_exchange_current__Qn / (var_constants__R * var_constants__T)) / var_sodium_calcium_exchange_current__di; // dimensionless + const double var_sodium_calcium_exchange_current__k21 = var_chaste_interface__ion_concentrations__Cao * exp(-var_constants__F * var_chaste_interface__membrane__E * var_sodium_calcium_exchange_current__Qco / (var_constants__R * var_constants__T)) / (var_sodium_calcium_exchange_current__Kco * var_sodium_calcium_exchange_current__do); // dimensionless + const double var_sodium_calcium_exchange_current__k23 = (pow(var_chaste_interface__ion_concentrations__Nao, 2) / (var_sodium_calcium_exchange_current__K1no * var_sodium_calcium_exchange_current__K2no) + pow(var_chaste_interface__ion_concentrations__Nao, 3) / (var_sodium_calcium_exchange_current__K1no * var_sodium_calcium_exchange_current__K2no * var_sodium_calcium_exchange_current__K3no)) * exp(-0.5 * var_constants__F * var_chaste_interface__membrane__E * var_sodium_calcium_exchange_current__Qn / (var_constants__R * var_constants__T)) / var_sodium_calcium_exchange_current__do; // dimensionless + const double var_sodium_calcium_exchange_current__k32 = exp(0.5 * var_constants__F * var_chaste_interface__membrane__E * var_sodium_calcium_exchange_current__Qn / (var_constants__R * var_constants__T)); // dimensionless + const double var_sodium_calcium_exchange_current__k34 = var_chaste_interface__ion_concentrations__Nao / (var_chaste_interface__ion_concentrations__Nao + var_sodium_calcium_exchange_current__K3no); // dimensionless + const double var_sodium_calcium_exchange_current__k41 = exp(-0.5 * var_constants__F * var_chaste_interface__membrane__E * var_sodium_calcium_exchange_current__Qn / (var_constants__R * var_constants__T)); // dimensionless + const double var_sodium_calcium_exchange_current__k43 = var_chaste_interface__ion_concentrations__Nai / (var_chaste_interface__ion_concentrations__Nai + var_sodium_calcium_exchange_current__K3ni); // dimensionless + const double var_sodium_calcium_exchange_current__kNaCa = 4; // picoA + const double var_sodium_calcium_exchange_current__x1 = (var_sodium_calcium_exchange_current__k21 + var_sodium_calcium_exchange_current__k23) * var_sodium_calcium_exchange_current__k34 * var_sodium_calcium_exchange_current__k41 + (var_sodium_calcium_exchange_current__k41 + var_sodium_calcium_exchange_current__k43) * var_sodium_calcium_exchange_current__k21 * var_sodium_calcium_exchange_current__k32; // dimensionless + const double var_sodium_calcium_exchange_current__x2 = (var_sodium_calcium_exchange_current__k12 + var_sodium_calcium_exchange_current__k14) * var_sodium_calcium_exchange_current__k32 * var_sodium_calcium_exchange_current__k43 + (var_sodium_calcium_exchange_current__k32 + var_sodium_calcium_exchange_current__k34) * var_sodium_calcium_exchange_current__k12 * var_sodium_calcium_exchange_current__k41; // dimensionless + const double var_sodium_calcium_exchange_current__x3 = (var_sodium_calcium_exchange_current__k21 + var_sodium_calcium_exchange_current__k23) * var_sodium_calcium_exchange_current__k14 * var_sodium_calcium_exchange_current__k43 + (var_sodium_calcium_exchange_current__k41 + var_sodium_calcium_exchange_current__k43) * var_sodium_calcium_exchange_current__k12 * var_sodium_calcium_exchange_current__k23; // dimensionless + const double var_sodium_calcium_exchange_current__x4 = (var_sodium_calcium_exchange_current__k12 + var_sodium_calcium_exchange_current__k14) * var_sodium_calcium_exchange_current__k23 * var_sodium_calcium_exchange_current__k34 + (var_sodium_calcium_exchange_current__k32 + var_sodium_calcium_exchange_current__k34) * var_sodium_calcium_exchange_current__k14 * var_sodium_calcium_exchange_current__k21; // dimensionless + const double var_sodium_calcium_exchange_current__i_NaCa = (var_sodium_calcium_exchange_current__k21 * var_sodium_calcium_exchange_current__x2 - var_sodium_calcium_exchange_current__k12 * var_sodium_calcium_exchange_current__x1) * var_sodium_calcium_exchange_current__kNaCa / (var_sodium_calcium_exchange_current__x1 + var_sodium_calcium_exchange_current__x2 + var_sodium_calcium_exchange_current__x3 + var_sodium_calcium_exchange_current__x4); // picoA + const double var_ion_concentrations__Cai_orig_deriv = -0.5 * (-var_sarcoplasmic_reticulum_kinetics__i_rel - 2 * var_sodium_calcium_exchange_current__i_NaCa + var_L_type_calcium_current__i_CaL + var_T_type_calcium_current__i_CaT + var_sarcoplasmic_reticulum_kinetics__i_up) / (var_constants__F * var_ion_concentrations__V_i); // millimolar / second + const double d_dt_chaste_interface_var_ion_concentrations__Cai = 0.001 * var_ion_concentrations__Cai_orig_deriv; // millimolar / millisecond + const double var_ion_concentrations__Cao_orig_deriv = (-var_chaste_interface__ion_concentrations__Cao + var_ion_concentrations__Cab) / var_ion_concentrations__tau_b + 0.5 * (-2 * var_sodium_calcium_exchange_current__i_NaCa + var_L_type_calcium_current__i_CaL + var_T_type_calcium_current__i_CaT) / (var_constants__F * var_ion_concentrations__V_e); // millimolar / second + const double d_dt_chaste_interface_var_ion_concentrations__Cao = 0.001 * var_ion_concentrations__Cao_orig_deriv; // millimolar / millisecond + const double var_sodium_potassium_pump__KmK = 1; // millimolar + const double var_sodium_potassium_pump__KmNa = 40; // millimolar + const double var_sodium_potassium_pump__i_pmax = 0.22600000000000001; // picoA + const double var_sodium_potassium_pump__i_p = (1 - 0.035938096628557313 * pow((-1 + 0.025000000000000001 * var_chaste_interface__membrane__E), 2)) * var_chaste_interface__ion_concentrations__Ko * var_chaste_interface__ion_concentrations__Nai * var_sodium_potassium_pump__i_pmax / ((var_chaste_interface__ion_concentrations__Ko + var_sodium_potassium_pump__KmK) * (var_chaste_interface__ion_concentrations__Nai + var_sodium_potassium_pump__KmNa)); // picoA + const double var_ion_concentrations__Ki_orig_deriv = -(-2 * var_sodium_potassium_pump__i_p + var_background_potassium_current__i_bK + var_delayed_rectifying_potassium_current__i_KK + var_hyperpolarising_activated_current__i_fK) / (var_constants__F * var_ion_concentrations__V_i); // millimolar / second + const double d_dt_chaste_interface_var_ion_concentrations__Ki = 0.001 * var_ion_concentrations__Ki_orig_deriv; // millimolar / millisecond + const double var_ion_concentrations__Ko_orig_deriv = (-var_chaste_interface__ion_concentrations__Ko + var_ion_concentrations__Kb) / var_ion_concentrations__tau_b + (-2 * var_sodium_potassium_pump__i_p + var_background_potassium_current__i_bK + var_delayed_rectifying_potassium_current__i_KK + var_hyperpolarising_activated_current__i_fK) / (var_constants__F * var_ion_concentrations__V_e); // millimolar / second + const double d_dt_chaste_interface_var_ion_concentrations__Ko = 0.001 * var_ion_concentrations__Ko_orig_deriv; // millimolar / millisecond + const double var_ion_concentrations__Nai_orig_deriv = -(3 * var_sodium_calcium_exchange_current__i_NaCa + 3 * var_sodium_potassium_pump__i_p + var_background_sodium_current__i_bNa + var_delayed_rectifying_potassium_current__i_KNa + var_fast_sodium_current__i_Na + var_hyperpolarising_activated_current__i_fNa) / (var_constants__F * var_ion_concentrations__V_i); // millimolar / second + const double d_dt_chaste_interface_var_ion_concentrations__Nai = 0.001 * var_ion_concentrations__Nai_orig_deriv; // millimolar / millisecond + const double var_ion_concentrations__Nao_orig_deriv = (-var_chaste_interface__ion_concentrations__Nao + var_ion_concentrations__Nab) / var_ion_concentrations__tau_b + (3 * var_sodium_calcium_exchange_current__i_NaCa + 3 * var_sodium_potassium_pump__i_p + var_background_sodium_current__i_bNa + var_delayed_rectifying_potassium_current__i_KNa + var_fast_sodium_current__i_Na + var_hyperpolarising_activated_current__i_fNa) / (var_constants__F * var_ion_concentrations__V_e); // millimolar / second + const double d_dt_chaste_interface_var_ion_concentrations__Nao = 0.001 * var_ion_concentrations__Nao_orig_deriv; // millimolar / millisecond + + if (mSetVoltageDerivativeToZero) + { + d_dt_chaste_interface_var_membrane__E = 0.0; + } + else + { + const double var_delayed_rectifying_potassium_current__i_K = var_delayed_rectifying_potassium_current__i_KK + var_delayed_rectifying_potassium_current__i_KNa; // picoA + const double var_hyperpolarising_activated_current__i_f = var_hyperpolarising_activated_current__i_fK + var_hyperpolarising_activated_current__i_fNa; // picoA + const double var_membrane__i_tot = var_L_type_calcium_current__i_CaL + var_T_type_calcium_current__i_CaT + var_background_potassium_current__i_bK + var_background_sodium_current__i_bNa + var_delayed_rectifying_potassium_current__i_K + var_fast_sodium_current__i_Na + var_hyperpolarising_activated_current__i_f + var_sodium_calcium_exchange_current__i_NaCa + var_sodium_potassium_pump__i_p; // picoA + // Special handling of data clamp current here + // (we want to save expense of calling the interpolation method if possible.) + double var_chaste_interface__membrane_data_clamp_current = 0.0; + if (mDataClampIsOn) + { + var_chaste_interface__membrane_data_clamp_current = (-GetExperimentalVoltageAtTimeT(var_chaste_interface__environment__time_converted) + var_chaste_interface__membrane__E) * NV_Ith_S(mParameters, 2); // uA_per_cm2 + } + const double var_membrane__E_orig_deriv = -(var_membrane__i_tot + var_chaste_interface__membrane_data_clamp_current) / NV_Ith_S(mParameters, 1); // millivolt / second + d_dt_chaste_interface_var_membrane__E = 0.001 * var_membrane__E_orig_deriv; // millivolt / millisecond + } + + NV_Ith_S(rDY,0) = d_dt_chaste_interface_var_membrane__E; + NV_Ith_S(rDY,1) = d_dt_chaste_interface_var_ion_concentrations__Cai; + NV_Ith_S(rDY,2) = d_dt_chaste_interface_var_L_type_calcium_current_d_gate__dL; + NV_Ith_S(rDY,3) = d_dt_chaste_interface_var_L_type_calcium_current_f_gate__fL; + NV_Ith_S(rDY,4) = d_dt_chaste_interface_var_L_type_calcium_current_f2_gate__fL2; + NV_Ith_S(rDY,5) = d_dt_chaste_interface_var_T_type_calcium_current_d_gate__dT; + NV_Ith_S(rDY,6) = d_dt_chaste_interface_var_T_type_calcium_current_f_gate__fT; + NV_Ith_S(rDY,7) = d_dt_chaste_interface_var_fast_sodium_current_m_gate__m; + NV_Ith_S(rDY,8) = d_dt_chaste_interface_var_fast_sodium_current_h_gate__h; + NV_Ith_S(rDY,9) = d_dt_chaste_interface_var_delayed_rectifying_potassium_current_x_gate__x; + NV_Ith_S(rDY,10) = d_dt_chaste_interface_var_hyperpolarising_activated_current_y_gate__y; + NV_Ith_S(rDY,11) = d_dt_chaste_interface_var_ion_concentrations__Cao; + NV_Ith_S(rDY,12) = d_dt_chaste_interface_var_ion_concentrations__Caup; + NV_Ith_S(rDY,13) = d_dt_chaste_interface_var_ion_concentrations__Carel; + NV_Ith_S(rDY,14) = d_dt_chaste_interface_var_ion_concentrations__Nai; + NV_Ith_S(rDY,15) = d_dt_chaste_interface_var_ion_concentrations__Nao; + NV_Ith_S(rDY,16) = d_dt_chaste_interface_var_ion_concentrations__Ki; + NV_Ith_S(rDY,17) = d_dt_chaste_interface_var_ion_concentrations__Ko; + } + + N_Vector Celldokos_model_1996FromCellMLCvodeDataClamp::ComputeDerivedQuantities(double var_chaste_interface__environment__time_converted, const N_Vector & rY) + { + // Inputs: + // Time units: millisecond + double var_chaste_interface__membrane__E = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : NV_Ith_S(rY, 0)); + // Units: millivolt; Initial value: -64.9 + double var_chaste_interface__ion_concentrations__Cai = NV_Ith_S(rY, 1); + // Units: millimolar; Initial value: 3.4e-05 + double var_chaste_interface__L_type_calcium_current_d_gate__dL = NV_Ith_S(rY, 2); + // Units: dimensionless; Initial value: 0.0001 + double var_chaste_interface__L_type_calcium_current_f_gate__fL = NV_Ith_S(rY, 3); + // Units: dimensionless; Initial value: 0.1505 + double var_chaste_interface__L_type_calcium_current_f2_gate__fL2 = NV_Ith_S(rY, 4); + // Units: dimensionless; Initial value: 0.219 + double var_chaste_interface__fast_sodium_current_m_gate__m = NV_Ith_S(rY, 7); + // Units: dimensionless; Initial value: 0.0139 + double var_chaste_interface__fast_sodium_current_h_gate__h = NV_Ith_S(rY, 8); + // Units: dimensionless; Initial value: 0.0087 + double var_chaste_interface__delayed_rectifying_potassium_current_x_gate__x = NV_Ith_S(rY, 9); + // Units: dimensionless; Initial value: 0.5682 + double var_chaste_interface__hyperpolarising_activated_current_y_gate__y = NV_Ith_S(rY, 10); + // Units: dimensionless; Initial value: 0.0287 + double var_chaste_interface__ion_concentrations__Cao = NV_Ith_S(rY, 11); + // Units: millimolar; Initial value: 2.0004 + double var_chaste_interface__ion_concentrations__Nai = NV_Ith_S(rY, 14); + // Units: millimolar; Initial value: 7.4994 + double var_chaste_interface__ion_concentrations__Nao = NV_Ith_S(rY, 15); + // Units: millimolar; Initial value: 139.9929 + double var_chaste_interface__ion_concentrations__Ki = NV_Ith_S(rY, 16); + // Units: millimolar; Initial value: 140.0073 + double var_chaste_interface__ion_concentrations__Ko = NV_Ith_S(rY, 17); + // Units: millimolar; Initial value: 5.4243 + + // Mathematics + const double var_constants__F = 96485.341499999995; // coulomb_per_mole + const double var_constants__R = 8314.4719999999998; // joule_per_kilomole_kelvin + const double var_constants__T = 310; // kelvin + const double var_delayed_rectifying_potassium_current__P_KNa = 0.035000000000000003; // dimensionless + const double var_hyperpolarising_activated_current__Kmf = 10.300000000000001; // millimolar + const double var_membrane__C_converted = 0.001 * NV_Ith_S(mParameters, 1); // uF + const double var_delayed_rectifying_potassium_current__i_KK = pow(var_chaste_interface__ion_concentrations__Ko, 0.58999999999999997) * (-var_chaste_interface__ion_concentrations__Ko * exp(-var_constants__F * var_chaste_interface__membrane__E / (var_constants__R * var_constants__T)) + var_chaste_interface__ion_concentrations__Ki) * NV_Ith_S(mParameters, 3) * var_chaste_interface__delayed_rectifying_potassium_current_x_gate__x; // picoA + const double var_delayed_rectifying_potassium_current__i_KNa = pow(var_chaste_interface__ion_concentrations__Ko, 0.58999999999999997) * (-var_chaste_interface__ion_concentrations__Nao * exp(-var_constants__F * var_chaste_interface__membrane__E / (var_constants__R * var_constants__T)) + var_chaste_interface__ion_concentrations__Nai) * NV_Ith_S(mParameters, 3) * var_delayed_rectifying_potassium_current__P_KNa * var_chaste_interface__delayed_rectifying_potassium_current_x_gate__x; // picoA + const double var_delayed_rectifying_potassium_current__i_K = var_delayed_rectifying_potassium_current__i_KK + var_delayed_rectifying_potassium_current__i_KNa; // picoA + const double var_delayed_rectifying_potassium_current__i_K_converted = 9.9999999999999995e-7 * HeartConfig::Instance()->GetCapacitance() * var_delayed_rectifying_potassium_current__i_K / var_membrane__C_converted; // uA_per_cm2 + // Special handling of data clamp current here + // (we want to save expense of calling the interpolation method if possible.) + double var_chaste_interface__membrane_data_clamp_current = 0.0; + if (mDataClampIsOn) + { + var_chaste_interface__membrane_data_clamp_current = (-GetExperimentalVoltageAtTimeT(var_chaste_interface__environment__time_converted) + var_chaste_interface__membrane__E) * NV_Ith_S(mParameters, 2); // uA_per_cm2 + } + const double var_reversal_potentials__E_Ca = 0.5 * var_constants__R * var_constants__T * log(var_chaste_interface__ion_concentrations__Cao / var_chaste_interface__ion_concentrations__Cai) / var_constants__F; // millivolt + const double var_L_type_calcium_current__i_CaL = (75 - var_reversal_potentials__E_Ca + var_chaste_interface__membrane__E) * NV_Ith_S(mParameters, 0) * var_chaste_interface__L_type_calcium_current_d_gate__dL * var_chaste_interface__L_type_calcium_current_f2_gate__fL2 * var_chaste_interface__L_type_calcium_current_f_gate__fL; // picoA + const double var_L_type_calcium_current__i_CaL_converted = 9.9999999999999995e-7 * HeartConfig::Instance()->GetCapacitance() * var_L_type_calcium_current__i_CaL / var_membrane__C_converted; // uA_per_cm2 + const double var_reversal_potentials__E_K = var_constants__R * var_constants__T * log(var_chaste_interface__ion_concentrations__Ko / var_chaste_interface__ion_concentrations__Ki) / var_constants__F; // millivolt + const double var_hyperpolarising_activated_current__i_fK = pow(var_chaste_interface__ion_concentrations__Ko, 1.8300000000000001) * (-var_reversal_potentials__E_K + var_chaste_interface__membrane__E) * NV_Ith_S(mParameters, 5) * var_chaste_interface__hyperpolarising_activated_current_y_gate__y / (pow(var_hyperpolarising_activated_current__Kmf, 1.8300000000000001) + pow(var_chaste_interface__ion_concentrations__Ko, 1.8300000000000001)); // picoA + const double var_reversal_potentials__E_Na = var_constants__R * var_constants__T * log(var_chaste_interface__ion_concentrations__Nao / var_chaste_interface__ion_concentrations__Nai) / var_constants__F; // millivolt + const double var_fast_sodium_current__i_Na = pow(var_chaste_interface__fast_sodium_current_m_gate__m, 3) * (-var_reversal_potentials__E_Na + var_chaste_interface__membrane__E) * NV_Ith_S(mParameters, 4) * var_chaste_interface__fast_sodium_current_h_gate__h; // picoA + const double var_fast_sodium_current__i_Na_converted = 9.9999999999999995e-7 * HeartConfig::Instance()->GetCapacitance() * var_fast_sodium_current__i_Na / var_membrane__C_converted; // uA_per_cm2 + const double var_hyperpolarising_activated_current__i_fNa = pow(var_chaste_interface__ion_concentrations__Ko, 1.8300000000000001) * (-var_reversal_potentials__E_Na + var_chaste_interface__membrane__E) * NV_Ith_S(mParameters, 6) * var_chaste_interface__hyperpolarising_activated_current_y_gate__y / (pow(var_hyperpolarising_activated_current__Kmf, 1.8300000000000001) + pow(var_chaste_interface__ion_concentrations__Ko, 1.8300000000000001)); // picoA + const double var_hyperpolarising_activated_current__i_f = var_hyperpolarising_activated_current__i_fK + var_hyperpolarising_activated_current__i_fNa; // picoA + const double var_hyperpolarising_activated_current__i_f_converted = 9.9999999999999995e-7 * HeartConfig::Instance()->GetCapacitance() * var_hyperpolarising_activated_current__i_f / var_membrane__C_converted; // uA_per_cm2 + +#if CHASTE_SUNDIALS_VERSION >= 60000 + N_Vector dqs = N_VNew_Serial(9, CvodeContextManager::Instance()->GetSundialsContext()); +#else + N_Vector dqs = N_VNew_Serial(9); +#endif + NV_Ith_S(dqs, 0) = var_L_type_calcium_current__i_CaL_converted; + NV_Ith_S(dqs, 1) = var_membrane__C_converted; + NV_Ith_S(dqs, 2) = var_chaste_interface__membrane_data_clamp_current; + NV_Ith_S(dqs, 3) = var_delayed_rectifying_potassium_current__i_K_converted; + NV_Ith_S(dqs, 4) = var_fast_sodium_current__i_Na_converted; + NV_Ith_S(dqs, 5) = var_hyperpolarising_activated_current__i_f_converted; + NV_Ith_S(dqs, 6) = var_hyperpolarising_activated_current__i_fK; + NV_Ith_S(dqs, 7) = var_hyperpolarising_activated_current__i_fNa; + NV_Ith_S(dqs, 8) = var_chaste_interface__environment__time_converted; + return dqs; + } + +template<> +void OdeSystemInformation::Initialise(void) +{ + this->mSystemName = "dokos_model_1996"; + this->mFreeVariableName = "time"; + this->mFreeVariableUnits = "millisecond"; + + // NV_Ith_S(rY, 0): + this->mVariableNames.push_back("membrane_voltage"); + this->mVariableUnits.push_back("millivolt"); + this->mInitialConditions.push_back(-64.9); + + // NV_Ith_S(rY, 1): + this->mVariableNames.push_back("cytosolic_calcium_concentration"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(3.4e-05); + + // NV_Ith_S(rY, 2): + this->mVariableNames.push_back("L_type_calcium_current_d_gate__dL"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.0001); + + // NV_Ith_S(rY, 3): + this->mVariableNames.push_back("L_type_calcium_current_f_gate__fL"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.1505); + + // NV_Ith_S(rY, 4): + this->mVariableNames.push_back("L_type_calcium_current_f2_gate__fL2"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.219); + + // NV_Ith_S(rY, 5): + this->mVariableNames.push_back("T_type_calcium_current_d_gate__dT"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.001); + + // NV_Ith_S(rY, 6): + this->mVariableNames.push_back("T_type_calcium_current_f_gate__fT"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.1328); + + // NV_Ith_S(rY, 7): + this->mVariableNames.push_back("fast_sodium_current_m_gate__m"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.0139); + + // NV_Ith_S(rY, 8): + this->mVariableNames.push_back("fast_sodium_current_h_gate__h"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.0087); + + // NV_Ith_S(rY, 9): + this->mVariableNames.push_back("delayed_rectifying_potassium_current_x_gate__x"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.5682); + + // NV_Ith_S(rY, 10): + this->mVariableNames.push_back("hyperpolarising_activated_current_y_gate__y"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.0287); + + // NV_Ith_S(rY, 11): + this->mVariableNames.push_back("extracellular_calcium_concentration"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(2.0004); + + // NV_Ith_S(rY, 12): + this->mVariableNames.push_back("ion_concentrations__Caup"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(0.5832); + + // NV_Ith_S(rY, 13): + this->mVariableNames.push_back("ion_concentrations__Carel"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(0.1101); + + // NV_Ith_S(rY, 14): + this->mVariableNames.push_back("cytosolic_sodium_concentration"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(7.4994); + + // NV_Ith_S(rY, 15): + this->mVariableNames.push_back("extracellular_sodium_concentration"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(139.9929); + + // NV_Ith_S(rY, 16): + this->mVariableNames.push_back("cytosolic_potassium_concentration"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(140.0073); + + // NV_Ith_S(rY, 17): + this->mVariableNames.push_back("extracellular_potassium_concentration"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(5.4243); + + // mParameters[0]: + this->mParameterNames.push_back("membrane_L_type_calcium_current_conductance"); + this->mParameterUnits.push_back("nanoS"); + + // mParameters[1]: + this->mParameterNames.push_back("membrane__C"); + this->mParameterUnits.push_back("nanoF"); + + // mParameters[2]: + this->mParameterNames.push_back("membrane_data_clamp_current_conductance"); + this->mParameterUnits.push_back("dimensionless"); + + // mParameters[3]: + this->mParameterNames.push_back("membrane_delayed_rectifier_potassium_current_conductance"); + this->mParameterUnits.push_back("picoA_per_millimolar"); + + // mParameters[4]: + this->mParameterNames.push_back("membrane_fast_sodium_current_conductance"); + this->mParameterUnits.push_back("nanoS"); + + // mParameters[5]: + this->mParameterNames.push_back("membrane_hyperpolarisation_activated_funny_current_potassium_component_conductance"); + this->mParameterUnits.push_back("nanoS"); + + // mParameters[6]: + this->mParameterNames.push_back("membrane_hyperpolarisation_activated_funny_current_sodium_component_conductance"); + this->mParameterUnits.push_back("nanoS"); + + // Derived Quantity index [0]: + this->mDerivedQuantityNames.push_back("membrane_L_type_calcium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [1]: + this->mDerivedQuantityNames.push_back("membrane_capacitance"); + this->mDerivedQuantityUnits.push_back("uF"); + + // Derived Quantity index [2]: + this->mDerivedQuantityNames.push_back("membrane_data_clamp_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [3]: + this->mDerivedQuantityNames.push_back("membrane_delayed_rectifier_potassium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [4]: + this->mDerivedQuantityNames.push_back("membrane_fast_sodium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [5]: + this->mDerivedQuantityNames.push_back("membrane_hyperpolarisation_activated_funny_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [6]: + this->mDerivedQuantityNames.push_back("membrane_hyperpolarisation_activated_funny_current_potassium_component"); + this->mDerivedQuantityUnits.push_back("picoA"); + + // Derived Quantity index [7]: + this->mDerivedQuantityNames.push_back("membrane_hyperpolarisation_activated_funny_current_sodium_component"); + this->mDerivedQuantityUnits.push_back("picoA"); + + // Derived Quantity index [8]: + this->mDerivedQuantityNames.push_back("time"); + this->mDerivedQuantityUnits.push_back("millisecond"); + + this->mInitialised = true; +} + +// Serialization for Boost >= 1.36 +#include "SerializationExportWrapperForCpp.hpp" +CHASTE_CLASS_EXPORT(Celldokos_model_1996FromCellMLCvodeDataClamp) + +#endif // CHASTE_CVODE diff --git a/chaste_codegen/tests/numerical/baseline/CVODE_DATA_CLAMP/dokos_model_1996.hpp b/chaste_codegen/tests/numerical/baseline/CVODE_DATA_CLAMP/dokos_model_1996.hpp new file mode 100644 index 00000000..fd909a60 --- /dev/null +++ b/chaste_codegen/tests/numerical/baseline/CVODE_DATA_CLAMP/dokos_model_1996.hpp @@ -0,0 +1,85 @@ +#ifdef CHASTE_CVODE +#ifndef CELLDOKOS_MODEL_1996FROMCELLMLCVODEDATACLAMP_HPP_ +#define CELLDOKOS_MODEL_1996FROMCELLMLCVODEDATACLAMP_HPP_ + +//! @file +//! +//! This source file was generated from CellML by chaste_codegen version (version omitted as unimportant) +//! +//! Model: dokos_model_1996 +//! +//! Processed by chaste_codegen: https://github.com/ModellingWebLab/chaste-codegen +//! (translator: chaste_codegen, model type: CvodeCellWithDataClamp) +//! on (date omitted as unimportant) +//! +//! + +#include "ChasteSerialization.hpp" +#include +#include "AbstractStimulusFunction.hpp" +#include "AbstractCvodeCellWithDataClamp.hpp" + +class Celldokos_model_1996FromCellMLCvodeDataClamp : public AbstractCvodeCellWithDataClamp +{ + friend class boost::serialization::access; + template + void serialize(Archive & archive, const unsigned int version) + { + archive & boost::serialization::base_object(*this); + + } + + // + // Settable parameters and readable variables + // + + +private: +const bool is_concentration[18] = {false, true, false, false, false, false, false, false, false, false, false, true, false, false, true, true, true, true}; +const bool is_probability[18] = {false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false}; +public: + + double GetIntracellularCalciumConcentration(); + Celldokos_model_1996FromCellMLCvodeDataClamp(boost::shared_ptr pOdeSolver /* unused; should be empty */, boost::shared_ptr pIntracellularStimulus); + ~Celldokos_model_1996FromCellMLCvodeDataClamp(); + void VerifyStateVariables(); + double GetIIonic(const std::vector* pStateVariables=NULL); + void EvaluateYDerivatives(double var_chaste_interface__environment__time_converted, const N_Vector rY, N_Vector rDY); + N_Vector ComputeDerivedQuantities(double var_chaste_interface__environment__time_converted, const N_Vector & rY); +}; + +// Needs to be included last +#include "SerializationExportWrapper.hpp" +CHASTE_CLASS_EXPORT(Celldokos_model_1996FromCellMLCvodeDataClamp) + +namespace boost +{ + namespace serialization + { + template + inline void save_construct_data( + Archive & ar, const Celldokos_model_1996FromCellMLCvodeDataClamp * t, const unsigned int fileVersion) + { + const boost::shared_ptr p_solver = t->GetSolver(); + const boost::shared_ptr p_stimulus = t->GetStimulusFunction(); + ar << p_solver; + ar << p_stimulus; + } + + template + inline void load_construct_data( + Archive & ar, Celldokos_model_1996FromCellMLCvodeDataClamp * t, const unsigned int fileVersion) + { + boost::shared_ptr p_solver; + boost::shared_ptr p_stimulus; + ar >> p_solver; + ar >> p_stimulus; + ::new(t)Celldokos_model_1996FromCellMLCvodeDataClamp(p_solver, p_stimulus); + } + + } + +} + +#endif // CELLDOKOS_MODEL_1996FROMCELLMLCVODEDATACLAMP_HPP_ +#endif // CHASTE_CVODE \ No newline at end of file diff --git a/chaste_codegen/tests/numerical/baseline/CVODE_DATA_CLAMP/dynamic_Shannon2004.cpp b/chaste_codegen/tests/numerical/baseline/CVODE_DATA_CLAMP/dynamic_Shannon2004.cpp new file mode 100644 index 00000000..617227af --- /dev/null +++ b/chaste_codegen/tests/numerical/baseline/CVODE_DATA_CLAMP/dynamic_Shannon2004.cpp @@ -0,0 +1,1448 @@ +#ifdef CHASTE_CVODE +//! @file +//! +//! This source file was generated from CellML by chaste_codegen version (version omitted as unimportant) +//! +//! Model: shannon_wang_puglisi_weber_bers_2004_model_updated +//! +//! Processed by chaste_codegen: https://github.com/ModellingWebLab/chaste-codegen +//! (translator: chaste_codegen, model type: CvodeCellWithDataClamp) +//! on (date omitted as unimportant) +//! +//! + +#include "dynamic_Shannon2004.hpp" +#include +#include +#include +#include +#include "Exception.hpp" +#include "OdeSystemInformation.hpp" +#include "RegularStimulus.hpp" +#include "HeartConfig.hpp" +#include "IsNan.hpp" +#include "MathsCustomFunctions.hpp" + +#if CHASTE_SUNDIALS_VERSION >= 60000 +#include "CvodeContextManager.hpp" +#endif + + + + + + boost::shared_ptr Dynamicshannon_wang_puglisi_weber_bers_2004FromCellMLCvodeDataClamp::UseCellMLDefaultStimulus() + { + // Use the default stimulus specified by CellML metadata + const double var_chaste_interface__cell__stim_amplitude_converted = -9.5 * HeartConfig::Instance()->GetCapacitance(); // uA_per_cm2 + const double var_chaste_interface__cell__stim_duration = 5; // millisecond + const double var_chaste_interface__cell__stim_period = 1000; // millisecond + const double var_chaste_interface__cell__stim_start = 100; // millisecond + boost::shared_ptr p_cellml_stim(new RegularStimulus( + -fabs(var_chaste_interface__cell__stim_amplitude_converted), + var_chaste_interface__cell__stim_duration, + var_chaste_interface__cell__stim_period, + var_chaste_interface__cell__stim_start + )); + mpIntracellularStimulus = p_cellml_stim; + return p_cellml_stim; + } + + double Dynamicshannon_wang_puglisi_weber_bers_2004FromCellMLCvodeDataClamp::GetIntracellularCalciumConcentration() + { + return NV_Ith_S(mStateVariables, 1); + } + + Dynamicshannon_wang_puglisi_weber_bers_2004FromCellMLCvodeDataClamp::Dynamicshannon_wang_puglisi_weber_bers_2004FromCellMLCvodeDataClamp(boost::shared_ptr pOdeSolver /* unused; should be empty */, boost::shared_ptr pIntracellularStimulus) + : AbstractCvodeCellWithDataClamp( + pOdeSolver, + 45, + 0, + pIntracellularStimulus) + { + // Time units: millisecond + // + this->mpSystemInfo = OdeSystemInformation::Instance(); + Init(); + + // We have a default stimulus specified in the CellML file metadata + this->mHasDefaultStimulusFromCellML = true; + + NV_Ith_S(this->mParameters, 0) = 5.3480000000000003e-6; // (var_Jleak_SR__KSRleak) [per_millisecond] + NV_Ith_S(this->mParameters, 1) = 25; // (var_Jrel_SR__ks) [per_millisecond] + NV_Ith_S(this->mParameters, 2) = 0.00028600000000000001; // (var_Jpump_SR__V_max) [millimolar_per_millisecond] + NV_Ith_S(this->mParameters, 3) = 1; // (var_Na_buffer__conc_clamp) [dimensionless] + NV_Ith_S(this->mParameters, 4) = 15; // (var_model_parameters__Cli) [millimolar] + NV_Ith_S(this->mParameters, 5) = 135; // (var_model_parameters__Ki) [millimolar] + NV_Ith_S(this->mParameters, 6) = 1.8; // (var_model_parameters__Cao) [millimolar] + NV_Ith_S(this->mParameters, 7) = 150; // (var_model_parameters__Clo) [millimolar] + NV_Ith_S(this->mParameters, 8) = 5.4000000000000004; // (var_model_parameters__Ko) [millimolar] + NV_Ith_S(this->mParameters, 9) = 140; // (var_model_parameters__Nao) [millimolar] + NV_Ith_S(this->mParameters, 10) = 96486.699999999997; // (var_model_parameters__F) [coulomb_per_mole] + NV_Ith_S(this->mParameters, 11) = 8314.2999999999993; // (var_model_parameters__R) [joule_per_kilomole_kelvin] + NV_Ith_S(this->mParameters, 12) = 0.00054000000000000001; // (var_ICaL__PCa) [litre_per_farad_millisecond] + NV_Ith_S(this->mParameters, 13) = 0.0089999999999999993; // (var_IClb__G_ClBk) [milliS_per_microF] + NV_Ith_S(this->mParameters, 14) = 0; // (var_membrane_data_clamp_current_conductance) [dimensionless] + NV_Ith_S(this->mParameters, 15) = 16; // (var_INa__G_INa) [milliS_per_microF] + NV_Ith_S(this->mParameters, 16) = 0; // (var_INa__perc_reduced_inact_for_IpNa) [dimensionless] + NV_Ith_S(this->mParameters, 17) = 0; // (var_INa__shift_INa_inact) [millivolt] + NV_Ith_S(this->mParameters, 18) = 0.02; // (var_Itof__G_tof) [milliS_per_microF] + NV_Ith_S(this->mParameters, 19) = 0.90000000000000002; // (var_IK1__G_K1_max) [milliS_per_microF] + NV_Ith_S(this->mParameters, 20) = 0.029999999999999999; // (var_IKr__G_IKr_const) [milliS_per_microF] + NV_Ith_S(this->mParameters, 21) = 0.070000000000000007; // (var_IKs__G_Ks_max) [milliS_per_microF] + NV_Ith_S(this->mParameters, 22) = 0.059999999999999998; // (var_Itos__G_tos) [milliS_per_microF] + NV_Ith_S(this->mParameters, 23) = 9; // (var_INaCa__V_max) [microA_per_microF] + NV_Ith_S(this->mParameters, 24) = 310; // (var_model_parameters__T) [kelvin] + } + + Dynamicshannon_wang_puglisi_weber_bers_2004FromCellMLCvodeDataClamp::~Dynamicshannon_wang_puglisi_weber_bers_2004FromCellMLCvodeDataClamp() + { + } + + + void Dynamicshannon_wang_puglisi_weber_bers_2004FromCellMLCvodeDataClamp::VerifyStateVariables() + { + + const double tol = 100*this->mAbsTol; + N_Vector rY = rGetStateVariables(); + std::string error_message = ""; + + for (unsigned i=0; i < 45; i++) + { + if(std::isnan(NV_Ith_S(rY, i))){ + error_message += "State variable " + this->rGetStateVariableNames()[i] + " is not a number\n"; + } + if(std::isinf(NV_Ith_S(rY, i))){ + error_message += "State variable " + this->rGetStateVariableNames()[i] + " has become INFINITE\n"; + } + if(this->is_concentration[i] && NV_Ith_S(rY, i) < -tol) + { + error_message += "Concentration " + this->rGetStateVariableNames()[i] + " below 0\n"; + } + if(this->is_probability[i] && NV_Ith_S(rY, i) < -tol) + { + error_message += "Probability " + this->rGetStateVariableNames()[i] + " below 0\n"; + } + if(this->is_probability[i] && NV_Ith_S(rY, i) > 1 + tol) + { + error_message += "Probability " + this->rGetStateVariableNames()[i] + " above 1\n"; + } + } + if (error_message != ""){ + EXCEPTION(DumpState(error_message)); + } + } + + double Dynamicshannon_wang_puglisi_weber_bers_2004FromCellMLCvodeDataClamp::GetIIonic(const std::vector* pStateVariables) + { + // For state variable interpolation (SVI) we read in interpolated state variables, + // otherwise for ionic current interpolation (ICI) we use the state variables of this model (node). + N_Vector rY; + bool made_new_cvode_vector = false; + if (!pStateVariables) + { + rY = rGetStateVariables(); + } + else + { + made_new_cvode_vector = true; + rY = MakeNVector(*pStateVariables); + } + double var_chaste_interface__cell__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : NV_Ith_S(rY, 0)); + // Units: millivolt; Initial value: -85.721630473733 + double var_chaste_interface__INa_h_gate__h = NV_Ith_S(rY, 2); + // Units: dimensionless; Initial value: 0.98714602875678 + double var_chaste_interface__INa_j_gate__j = NV_Ith_S(rY, 3); + // Units: dimensionless; Initial value: 0.991826348770428 + double var_chaste_interface__INa_m_gate__m = NV_Ith_S(rY, 4); + // Units: dimensionless; Initial value: 0.0013702407736465 + double var_chaste_interface__IKr_Xr_gate__Xr = NV_Ith_S(rY, 5); + // Units: dimensionless; Initial value: 0.00846906175020028 + double var_chaste_interface__IKs_Xs_gate__Xs = NV_Ith_S(rY, 6); + // Units: dimensionless; Initial value: 0.00613557812033723 + double var_chaste_interface__Itos_X_gate__X_tos = NV_Ith_S(rY, 7); + // Units: dimensionless; Initial value: 0.00401072468238921 + double var_chaste_interface__Itos_Y_gate__Y_tos = NV_Ith_S(rY, 8); + // Units: dimensionless; Initial value: 0.31555225368514 + double var_chaste_interface__Itos_R_gate__R_tos = NV_Ith_S(rY, 9); + // Units: dimensionless; Initial value: 0.402577243036347 + double var_chaste_interface__Itof_X_gate__X_tof = NV_Ith_S(rY, 10); + // Units: dimensionless; Initial value: 0.00401068798369438 + double var_chaste_interface__Itof_Y_gate__Y_tof = NV_Ith_S(rY, 11); + // Units: dimensionless; Initial value: 0.994632857675454 + double var_chaste_interface__ICaL_d_gate__d = NV_Ith_S(rY, 12); + // Units: dimensionless; Initial value: 6.99526086177479e-06 + double var_chaste_interface__ICaL_f_gate__f = NV_Ith_S(rY, 13); + // Units: dimensionless; Initial value: 1.00067601563206 + double var_chaste_interface__ICaL_fCa_gate__fCaB_SL = NV_Ith_S(rY, 14); + // Units: dimensionless; Initial value: 0.0150193299768419 + double var_chaste_interface__ICaL_fCa_gate__fCaB_jct = NV_Ith_S(rY, 15); + // Units: dimensionless; Initial value: 0.0244048782575591 + double var_chaste_interface__Na_buffer__Na_SL = NV_Ith_S(rY, 19); + // Units: millimolar; Initial value: 8.87161932058707 + double var_chaste_interface__Na_buffer__Na_jct = NV_Ith_S(rY, 20); + // Units: millimolar; Initial value: 8.87031835089116 + double var_chaste_interface__Na_buffer__Nai = NV_Ith_S(rY, 23); + // Units: millimolar; Initial value: 8.87200572571131 + double var_chaste_interface__Ca_buffer__Ca_SL = NV_Ith_S(rY, 25); + // Units: millimolar; Initial value: 0.000104971310105451 + double var_chaste_interface__Ca_buffer__Ca_jct = NV_Ith_S(rY, 26); + // Units: millimolar; Initial value: 0.000174045152623969 + + const double var_ICaL__Fx_ICaL_SL = 0.10000000000000001; // dimensionless + const double var_ICaL__Fx_ICaL_jct = 0.90000000000000002; // dimensionless + const double var_ICaL__PK = 2.7000000000000001e-7; // litre_per_farad_millisecond + const double var_ICaL__PNa = 1.4999999999999999e-8; // litre_per_farad_millisecond + const double var_ICaL__Q10_CaL = 1.8; // dimensionless + const double var_ICaL__gamma_Cai = 0.34100000000000003; // dimensionless + const double var_ICaL__gamma_Cao = 0.34100000000000003; // dimensionless + const double var_ICaL__gamma_Ki = 0.75; // dimensionless + const double var_ICaL__gamma_Ko = 0.75; // dimensionless + const double var_ICaL__gamma_Nai = 0.75; // dimensionless + const double var_ICaL__gamma_Nao = 0.75; // dimensionless + const double var_ICaL_fCa_gate__fCa_SL = 1 - var_chaste_interface__ICaL_fCa_gate__fCaB_SL; // dimensionless + const double var_ICaL_fCa_gate__fCa_jct = 1 - var_chaste_interface__ICaL_fCa_gate__fCaB_jct; // dimensionless + const double var_ICab__Fx_CaBk_SL = 0.89000000000000001; // dimensionless + const double var_ICab__Fx_CaBk_jct = 0.11; // dimensionless + const double var_ICab__G_CaBk = 0.00025129999999999998; // milliS_per_microF + const double var_ICap__Fx_SLCaP_SL = 0.89000000000000001; // dimensionless + const double var_ICap__Fx_SLCaP_jct = 0.11; // dimensionless + const double var_ICap__H = 1.6000000000000001; // dimensionless + const double var_ICap__Km = 0.00050000000000000001; // millimolar + const double var_ICap__Q10_SLCaP = 2.3500000000000001; // dimensionless + const double var_ICap__V_maxAF = 0.067299999999999999; // microA_per_microF + const double var_ICl_Ca__Fx_Cl_SL = 0.89000000000000001; // dimensionless + const double var_ICl_Ca__Fx_Cl_jct = 0.11; // dimensionless + const double var_ICl_Ca__G_Cl = 0.109625; // milliS_per_microF + const double var_ICl_Ca__Kd_ClCa = 0.10000000000000001; // millimolar + const double var_IKs__Fx_Ks_SL = 0.89000000000000001; // dimensionless + const double var_IKs__Fx_Ks_jct = 0.11; // dimensionless + const double var_IKs__pCa_SL = 3 - log10(var_chaste_interface__Ca_buffer__Ca_SL); // dimensionless + const double var_IKs__G_Ks_SL = (0.057000000000000002 + 0.19 / (1 + exp(-12 + 1.6666666666666667 * var_IKs__pCa_SL))) * NV_Ith_S(mParameters, 21); // milliS_per_microF + const double var_IKs__pCa_jct = 3 - log10(var_chaste_interface__Ca_buffer__Ca_jct); // dimensionless + const double var_IKs__G_Ks_jct = (0.057000000000000002 + 0.19 / (1 + exp(-12 + 1.6666666666666667 * var_IKs__pCa_jct))) * NV_Ith_S(mParameters, 21); // milliS_per_microF + const double var_IKs__pKNa = 0.018329999999999999; // dimensionless + const double var_INa__Fx_Na_SL = 0.89000000000000001; // dimensionless + const double var_INa__Fx_Na_jct = 0.11; // dimensionless + const double var_INaCa__Fx_NCX_SL = 0.89000000000000001; // dimensionless + const double var_INaCa__Fx_NCX_jct = 0.11; // dimensionless + const double var_INaCa__HNa = 3; // dimensionless + const double var_INaCa__K_mCai = 0.0035899999999999999; // millimolar + const double var_INaCa__K_mCao = 1.3; // millimolar + const double var_INaCa__K_mNai = 12.289999999999999; // millimolar + const double var_INaCa__K_mNao = 87.5; // millimolar + const double var_INaCa__Kd_act = 0.00025599999999999999; // millimolar + const double var_INaCa__Ka_SL = 1 / (1 + pow(var_INaCa__Kd_act, 3) / pow(var_chaste_interface__Ca_buffer__Ca_SL, 3)); // dimensionless + const double var_INaCa__Ka_jct = 1 / (1 + pow(var_INaCa__Kd_act, 3) / pow(var_chaste_interface__Ca_buffer__Ca_jct, 3)); // dimensionless + const double var_INaCa__Q10_NCX = 1.5700000000000001; // dimensionless + const double var_INaCa__eta = 0.34999999999999998; // dimensionless + const double var_INaCa__ksat = 0.27000000000000002; // dimensionless + const double var_INaK__Fx_NaK_SL = 0.89000000000000001; // dimensionless + const double var_INaK__Fx_NaK_jct = 0.11; // dimensionless + const double var_INaK__H_NaK = 4; // dimensionless + const double var_INaK__I_NaK_max = 1.9099999999999999; // microA_per_microF + const double var_INaK__Km_Ko = 1.5; // millimolar + const double var_INaK__Km_Nai = 11; // millimolar + const double var_INaK__Q10_Km_Nai = 1.49; // dimensionless + const double var_INaK__Q10_NaK = 1.6299999999999999; // dimensionless + const double var_INa__openProb = pow(var_chaste_interface__INa_m_gate__m, 3) * var_chaste_interface__INa_h_gate__h * var_chaste_interface__INa_j_gate__j; // dimensionless + const double var_INab__Fx_NaBk_SL = 0.89000000000000001; // dimensionless + const double var_INab__Fx_NaBk_jct = 0.11; // dimensionless + const double var_INab__G_NaBk = 0.00029700000000000001; // milliS_per_microF + const double var_IKr_Rr_gate__Rr = 1 / (1 + exp(1.4732142857142858 + 0.044642857142857144 * var_chaste_interface__cell__V)); // dimensionless + const double var_IK1__G_K1 = 0.43033148291193518 * sqrt(NV_Ith_S(mParameters, 8)) * NV_Ith_S(mParameters, 19); // milliS_per_microF + const double var_IKr__G_IKr = 0.43033148291193518 * sqrt(NV_Ith_S(mParameters, 8)) * NV_Ith_S(mParameters, 20); // milliS_per_microF + const double var_INaK__sigma = -0.14285714285714285 + 0.14285714285714285 * exp(0.01485884101040119 * NV_Ith_S(mParameters, 9)); // dimensionless + const double var_ICaL__Q_CaL = pow(var_ICaL__Q10_CaL, (-31 + 0.10000000000000001 * NV_Ith_S(mParameters, 24))); // dimensionless + const double var_ICaL__temp = 0.45000000000000001 * pow(NV_Ith_S(mParameters, 10), 2) * var_ICaL__Q_CaL * var_chaste_interface__ICaL_d_gate__d * var_chaste_interface__ICaL_f_gate__f * var_chaste_interface__cell__V / (NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 24)); // coulomb_per_mole + const double var_ICaL__i_CaL_Ca_SL = 4 * (-var_ICaL__gamma_Cao * NV_Ith_S(mParameters, 6) + var_chaste_interface__Ca_buffer__Ca_SL * var_ICaL__gamma_Cai * exp(2 * var_chaste_interface__cell__V * NV_Ith_S(mParameters, 10) / (NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 24)))) * var_ICaL__Fx_ICaL_SL * NV_Ith_S(mParameters, 12) * var_ICaL__temp * var_ICaL_fCa_gate__fCa_SL / (-1 + exp(2 * var_chaste_interface__cell__V * NV_Ith_S(mParameters, 10) / (NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 24)))); // microA_per_microF + const double var_ICaL__i_CaL_Ca_jct = 4 * (-var_ICaL__gamma_Cao * NV_Ith_S(mParameters, 6) + var_chaste_interface__Ca_buffer__Ca_jct * var_ICaL__gamma_Cai * exp(2 * var_chaste_interface__cell__V * NV_Ith_S(mParameters, 10) / (NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 24)))) * var_ICaL__Fx_ICaL_jct * NV_Ith_S(mParameters, 12) * var_ICaL__temp * var_ICaL_fCa_gate__fCa_jct / (-1 + exp(2 * var_chaste_interface__cell__V * NV_Ith_S(mParameters, 10) / (NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 24)))); // microA_per_microF + const double var_ICaL__i_CaL_K = (var_ICaL__Fx_ICaL_SL * var_ICaL_fCa_gate__fCa_SL + var_ICaL__Fx_ICaL_jct * var_ICaL_fCa_gate__fCa_jct) * (-var_ICaL__gamma_Ko * NV_Ith_S(mParameters, 8) + var_ICaL__gamma_Ki * NV_Ith_S(mParameters, 5) * exp(var_chaste_interface__cell__V * NV_Ith_S(mParameters, 10) / (NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 24)))) * var_ICaL__PK * var_ICaL__temp / (-1 + exp(var_chaste_interface__cell__V * NV_Ith_S(mParameters, 10) / (NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 24)))); // microA_per_microF + const double var_ICaL__i_CaL_Na_SL = (-var_ICaL__gamma_Nao * NV_Ith_S(mParameters, 9) + var_ICaL__gamma_Nai * var_chaste_interface__Na_buffer__Na_SL * exp(var_chaste_interface__cell__V * NV_Ith_S(mParameters, 10) / (NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 24)))) * var_ICaL__Fx_ICaL_SL * var_ICaL__PNa * var_ICaL__temp * var_ICaL_fCa_gate__fCa_SL / (-1 + exp(var_chaste_interface__cell__V * NV_Ith_S(mParameters, 10) / (NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 24)))); // microA_per_microF + const double var_ICaL__i_CaL_Na_jct = (-var_ICaL__gamma_Nao * NV_Ith_S(mParameters, 9) + var_ICaL__gamma_Nai * var_chaste_interface__Na_buffer__Na_jct * exp(var_chaste_interface__cell__V * NV_Ith_S(mParameters, 10) / (NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 24)))) * var_ICaL__Fx_ICaL_jct * var_ICaL__PNa * var_ICaL__temp * var_ICaL_fCa_gate__fCa_jct / (-1 + exp(var_chaste_interface__cell__V * NV_Ith_S(mParameters, 10) / (NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 24)))); // microA_per_microF + const double var_ICaL__i_CaL = var_ICaL__i_CaL_Ca_SL + var_ICaL__i_CaL_Ca_jct + var_ICaL__i_CaL_K + var_ICaL__i_CaL_Na_SL + var_ICaL__i_CaL_Na_jct; // microA_per_microF + const double var_ICaL__i_CaL_converted = HeartConfig::Instance()->GetCapacitance() * var_ICaL__i_CaL; // uA_per_cm2 + const double var_ICap__Q_SLCaP = pow(var_ICap__Q10_SLCaP, (-31 + 0.10000000000000001 * NV_Ith_S(mParameters, 24))); // dimensionless + const double var_ICap__i_Cap_SL = var_ICap__Fx_SLCaP_SL * var_ICap__Q_SLCaP * var_ICap__V_maxAF / (1 + pow((var_ICap__Km / var_chaste_interface__Ca_buffer__Ca_SL), var_ICap__H)); // microA_per_microF + const double var_ICap__i_Cap_jct = var_ICap__Fx_SLCaP_jct * var_ICap__Q_SLCaP * var_ICap__V_maxAF / (1 + pow((var_ICap__Km / var_chaste_interface__Ca_buffer__Ca_jct), var_ICap__H)); // microA_per_microF + const double var_ICap__i_Cap = var_ICap__i_Cap_SL + var_ICap__i_Cap_jct; // microA_per_microF + const double var_ICap__i_Cap_converted = HeartConfig::Instance()->GetCapacitance() * var_ICap__i_Cap; // uA_per_cm2 + const double var_IKs__E_Ks = NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 24) * log((var_IKs__pKNa * NV_Ith_S(mParameters, 9) + NV_Ith_S(mParameters, 8)) / (var_IKs__pKNa * var_chaste_interface__Na_buffer__Nai + NV_Ith_S(mParameters, 5))) / NV_Ith_S(mParameters, 10); // millivolt + const double var_IKs__i_Ks_SL = pow(var_chaste_interface__IKs_Xs_gate__Xs, 2) * (-var_IKs__E_Ks + var_chaste_interface__cell__V) * var_IKs__Fx_Ks_SL * var_IKs__G_Ks_SL; // microA_per_microF + const double var_IKs__i_Ks_jct = pow(var_chaste_interface__IKs_Xs_gate__Xs, 2) * (-var_IKs__E_Ks + var_chaste_interface__cell__V) * var_IKs__Fx_Ks_jct * var_IKs__G_Ks_jct; // microA_per_microF + const double var_IKs__i_Ks = var_IKs__i_Ks_SL + var_IKs__i_Ks_jct; // microA_per_microF + const double var_IKs__i_Ks_converted = HeartConfig::Instance()->GetCapacitance() * var_IKs__i_Ks; // uA_per_cm2 + const double var_INaCa__Q_NCX = pow(var_INaCa__Q10_NCX, (-31 + 0.10000000000000001 * NV_Ith_S(mParameters, 24))); // dimensionless + const double var_INaCa__temp_SL = (pow(var_chaste_interface__Na_buffer__Na_SL, var_INaCa__HNa) * NV_Ith_S(mParameters, 6) * exp(var_INaCa__eta * var_chaste_interface__cell__V * NV_Ith_S(mParameters, 10) / (NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 24))) - pow(NV_Ith_S(mParameters, 9), var_INaCa__HNa) * var_chaste_interface__Ca_buffer__Ca_SL * exp((-1 + var_INaCa__eta) * var_chaste_interface__cell__V * NV_Ith_S(mParameters, 10) / (NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 24)))) / (1 + var_INaCa__ksat * exp((-1 + var_INaCa__eta) * var_chaste_interface__cell__V * NV_Ith_S(mParameters, 10) / (NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 24)))); // millimolar4 + const double var_INaCa__i_NaCa_SL = var_INaCa__Fx_NCX_SL * var_INaCa__Ka_SL * var_INaCa__Q_NCX * NV_Ith_S(mParameters, 23) * var_INaCa__temp_SL / (pow(var_chaste_interface__Na_buffer__Na_SL, var_INaCa__HNa) * var_INaCa__K_mCao + pow(var_chaste_interface__Na_buffer__Na_SL, var_INaCa__HNa) * NV_Ith_S(mParameters, 6) + pow(NV_Ith_S(mParameters, 9), var_INaCa__HNa) * var_chaste_interface__Ca_buffer__Ca_SL + pow(var_INaCa__K_mNao, var_INaCa__HNa) * (1 + var_chaste_interface__Ca_buffer__Ca_SL / var_INaCa__K_mCai) * var_chaste_interface__Ca_buffer__Ca_SL + pow(NV_Ith_S(mParameters, 9), var_INaCa__HNa) * (1 + pow((var_chaste_interface__Na_buffer__Na_SL / var_INaCa__K_mNai), var_INaCa__HNa)) * var_INaCa__K_mCai); // microA_per_microF + const double var_INaCa__temp_jct = (pow(var_chaste_interface__Na_buffer__Na_jct, var_INaCa__HNa) * NV_Ith_S(mParameters, 6) * exp(var_INaCa__eta * var_chaste_interface__cell__V * NV_Ith_S(mParameters, 10) / (NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 24))) - pow(NV_Ith_S(mParameters, 9), var_INaCa__HNa) * var_chaste_interface__Ca_buffer__Ca_jct * exp((-1 + var_INaCa__eta) * var_chaste_interface__cell__V * NV_Ith_S(mParameters, 10) / (NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 24)))) / (1 + var_INaCa__ksat * exp((-1 + var_INaCa__eta) * var_chaste_interface__cell__V * NV_Ith_S(mParameters, 10) / (NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 24)))); // millimolar4 + const double var_INaCa__i_NaCa_jct = var_INaCa__Fx_NCX_jct * var_INaCa__Ka_jct * var_INaCa__Q_NCX * NV_Ith_S(mParameters, 23) * var_INaCa__temp_jct / (pow(var_chaste_interface__Na_buffer__Na_jct, var_INaCa__HNa) * var_INaCa__K_mCao + pow(var_chaste_interface__Na_buffer__Na_jct, var_INaCa__HNa) * NV_Ith_S(mParameters, 6) + pow(NV_Ith_S(mParameters, 9), var_INaCa__HNa) * var_chaste_interface__Ca_buffer__Ca_jct + pow(var_INaCa__K_mNao, var_INaCa__HNa) * (1 + var_chaste_interface__Ca_buffer__Ca_jct / var_INaCa__K_mCai) * var_chaste_interface__Ca_buffer__Ca_jct + pow(NV_Ith_S(mParameters, 9), var_INaCa__HNa) * (1 + pow((var_chaste_interface__Na_buffer__Na_jct / var_INaCa__K_mNai), var_INaCa__HNa)) * var_INaCa__K_mCai); // microA_per_microF + const double var_INaCa__i_NaCa = var_INaCa__i_NaCa_SL + var_INaCa__i_NaCa_jct; // microA_per_microF + const double var_INaCa__i_NaCa_converted = HeartConfig::Instance()->GetCapacitance() * var_INaCa__i_NaCa; // uA_per_cm2 + const double var_INaK__Q_Km_Nai = pow(var_INaK__Q10_Km_Nai, (-31 + 0.10000000000000001 * NV_Ith_S(mParameters, 24))); // dimensionless + const double var_INaK__Q_NaK = pow(var_INaK__Q10_NaK, (-31 + 0.10000000000000001 * NV_Ith_S(mParameters, 24))); // dimensionless + const double var_INaK__f_NaK = 1 / (1 + 0.1245 * exp(-0.10000000000000001 * var_chaste_interface__cell__V * NV_Ith_S(mParameters, 10) / (NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 24))) + 0.036499999999999998 * var_INaK__sigma * exp(-var_chaste_interface__cell__V * NV_Ith_S(mParameters, 10) / (NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 24)))); // dimensionless + const double var_INaK__i_NaK_SL = var_INaK__Fx_NaK_SL * var_INaK__I_NaK_max * var_INaK__Q_NaK * var_INaK__f_NaK * NV_Ith_S(mParameters, 8) / ((1 + pow((var_INaK__Km_Nai * var_INaK__Q_Km_Nai / var_chaste_interface__Na_buffer__Na_SL), var_INaK__H_NaK)) * (var_INaK__Km_Ko + NV_Ith_S(mParameters, 8))); // microA_per_microF + const double var_INaK__i_NaK_jct = var_INaK__Fx_NaK_jct * var_INaK__I_NaK_max * var_INaK__Q_NaK * var_INaK__f_NaK * NV_Ith_S(mParameters, 8) / ((1 + pow((var_INaK__Km_Nai * var_INaK__Q_Km_Nai / var_chaste_interface__Na_buffer__Na_jct), var_INaK__H_NaK)) * (var_INaK__Km_Ko + NV_Ith_S(mParameters, 8))); // microA_per_microF + const double var_INaK__i_NaK = var_INaK__i_NaK_SL + var_INaK__i_NaK_jct; // microA_per_microF + const double var_reversal_potentials__E_Ca_SL = 0.5 * NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 24) * log(NV_Ith_S(mParameters, 6) / var_chaste_interface__Ca_buffer__Ca_SL) / NV_Ith_S(mParameters, 10); // millivolt + const double var_ICab__i_Cab_SL = (-var_reversal_potentials__E_Ca_SL + var_chaste_interface__cell__V) * var_ICab__Fx_CaBk_SL * var_ICab__G_CaBk; // microA_per_microF + const double var_reversal_potentials__E_Ca_jct = 0.5 * NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 24) * log(NV_Ith_S(mParameters, 6) / var_chaste_interface__Ca_buffer__Ca_jct) / NV_Ith_S(mParameters, 10); // millivolt + const double var_ICab__i_Cab_jct = (-var_reversal_potentials__E_Ca_jct + var_chaste_interface__cell__V) * var_ICab__Fx_CaBk_jct * var_ICab__G_CaBk; // microA_per_microF + const double var_ICab__i_Cab = var_ICab__i_Cab_SL + var_ICab__i_Cab_jct; // microA_per_microF + const double var_ICab__i_Cab_converted = HeartConfig::Instance()->GetCapacitance() * var_ICab__i_Cab; // uA_per_cm2 + const double var_reversal_potentials__E_Cl = -NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 24) * log(NV_Ith_S(mParameters, 7) / NV_Ith_S(mParameters, 4)) / NV_Ith_S(mParameters, 10); // millivolt + const double var_ICl_Ca__i_Cl_Ca = (-var_reversal_potentials__E_Cl + var_chaste_interface__cell__V) * (var_ICl_Ca__Fx_Cl_SL / (1 + var_ICl_Ca__Kd_ClCa / var_chaste_interface__Ca_buffer__Ca_SL) + var_ICl_Ca__Fx_Cl_jct / (1 + var_ICl_Ca__Kd_ClCa / var_chaste_interface__Ca_buffer__Ca_jct)) * var_ICl_Ca__G_Cl; // microA_per_microF + const double var_IClb__i_Clb = (-var_reversal_potentials__E_Cl + var_chaste_interface__cell__V) * NV_Ith_S(mParameters, 13); // microA_per_microF + const double var_IClb__i_Clb_converted = HeartConfig::Instance()->GetCapacitance() * var_IClb__i_Clb; // uA_per_cm2 + const double var_reversal_potentials__E_K = NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 24) * log(NV_Ith_S(mParameters, 8) / NV_Ith_S(mParameters, 5)) / NV_Ith_S(mParameters, 10); // millivolt + const double var_IK1_K1_gate__alpha_K1 = 1.02 / (1 + exp(-14.1227775 + 0.23849999999999999 * var_chaste_interface__cell__V - 0.23849999999999999 * var_reversal_potentials__E_K)); // per_millisecond + const double var_IK1_K1_gate__beta_K1 = (exp(-36.698642499999998 + 0.061749999999999999 * var_chaste_interface__cell__V - 0.061749999999999999 * var_reversal_potentials__E_K) + 0.49124000000000001 * exp(0.43983232 + 0.080320000000000003 * var_chaste_interface__cell__V - 0.080320000000000003 * var_reversal_potentials__E_K)) / (1 + exp(-2.4444678999999998 + 0.51429999999999998 * var_reversal_potentials__E_K - 0.51429999999999998 * var_chaste_interface__cell__V)); // per_millisecond + const double var_IK1_K1_gate__K1_infinity = var_IK1_K1_gate__alpha_K1 / (var_IK1_K1_gate__alpha_K1 + var_IK1_K1_gate__beta_K1); // dimensionless + const double var_IK1__i_K1 = (-var_reversal_potentials__E_K + var_chaste_interface__cell__V) * var_IK1__G_K1 * var_IK1_K1_gate__K1_infinity; // microA_per_microF + const double var_IK1__i_K1_converted = HeartConfig::Instance()->GetCapacitance() * var_IK1__i_K1; // uA_per_cm2 + const double var_IKr__i_Kr = (-var_reversal_potentials__E_K + var_chaste_interface__cell__V) * var_IKr__G_IKr * var_IKr_Rr_gate__Rr * var_chaste_interface__IKr_Xr_gate__Xr; // microA_per_microF + const double var_IKr__i_Kr_converted = HeartConfig::Instance()->GetCapacitance() * var_IKr__i_Kr; // uA_per_cm2 + const double var_Itof__i_tof = (-var_reversal_potentials__E_K + var_chaste_interface__cell__V) * NV_Ith_S(mParameters, 18) * var_chaste_interface__Itof_X_gate__X_tof * var_chaste_interface__Itof_Y_gate__Y_tof; // microA_per_microF + const double var_Itof__i_tof_converted = HeartConfig::Instance()->GetCapacitance() * var_Itof__i_tof; // uA_per_cm2 + const double var_Itos__i_tos = (-var_reversal_potentials__E_K + var_chaste_interface__cell__V) * (0.5 * var_chaste_interface__Itos_R_gate__R_tos + var_chaste_interface__Itos_Y_gate__Y_tos) * NV_Ith_S(mParameters, 22) * var_chaste_interface__Itos_X_gate__X_tos; // microA_per_microF + const double var_Itos__i_tos_converted = HeartConfig::Instance()->GetCapacitance() * var_Itos__i_tos; // uA_per_cm2 + const double var_reversal_potentials__E_Na_SL = NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 24) * log(NV_Ith_S(mParameters, 9) / var_chaste_interface__Na_buffer__Na_SL) / NV_Ith_S(mParameters, 10); // millivolt + const double var_INa__i_Na_SL = (-var_reversal_potentials__E_Na_SL + var_chaste_interface__cell__V) * var_INa__Fx_Na_SL * NV_Ith_S(mParameters, 15) * var_INa__openProb; // microA_per_microF + const double var_INab__i_Nab_SL = (-var_reversal_potentials__E_Na_SL + var_chaste_interface__cell__V) * var_INab__Fx_NaBk_SL * var_INab__G_NaBk; // microA_per_microF + const double var_reversal_potentials__E_Na_jct = NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 24) * log(NV_Ith_S(mParameters, 9) / var_chaste_interface__Na_buffer__Na_jct) / NV_Ith_S(mParameters, 10); // millivolt + const double var_INa__i_Na_jct = (-var_reversal_potentials__E_Na_jct + var_chaste_interface__cell__V) * var_INa__Fx_Na_jct * NV_Ith_S(mParameters, 15) * var_INa__openProb; // microA_per_microF + const double var_INa__i_Na = var_INa__i_Na_SL + var_INa__i_Na_jct; // microA_per_microF + const double var_INa__i_Na_converted = HeartConfig::Instance()->GetCapacitance() * var_INa__i_Na; // uA_per_cm2 + const double var_INab__i_Nab_jct = (-var_reversal_potentials__E_Na_jct + var_chaste_interface__cell__V) * var_INab__Fx_NaBk_jct * var_INab__G_NaBk; // microA_per_microF + const double var_INab__i_Nab = var_INab__i_Nab_SL + var_INab__i_Nab_jct; // microA_per_microF + const double var_INab__i_Nab_converted = HeartConfig::Instance()->GetCapacitance() * var_INab__i_Nab; // uA_per_cm2 + const double var_chaste_interface__i_ionic = HeartConfig::Instance()->GetCapacitance() * var_ICl_Ca__i_Cl_Ca + HeartConfig::Instance()->GetCapacitance() * var_INaK__i_NaK + var_ICaL__i_CaL_converted + var_ICab__i_Cab_converted + var_ICap__i_Cap_converted + var_IClb__i_Clb_converted + var_IK1__i_K1_converted + var_IKr__i_Kr_converted + var_IKs__i_Ks_converted + var_INa__i_Na_converted + var_INaCa__i_NaCa_converted + var_INab__i_Nab_converted + var_Itof__i_tof_converted + var_Itos__i_tos_converted; // uA_per_cm2 + + const double i_ionic = var_chaste_interface__i_ionic; + if (made_new_cvode_vector) + { + DeleteVector(rY); + } + EXCEPT_IF_NOT(!std::isnan(i_ionic)); + return i_ionic; + } + + void Dynamicshannon_wang_puglisi_weber_bers_2004FromCellMLCvodeDataClamp::EvaluateYDerivatives(double var_chaste_interface__environment__time, const N_Vector rY, N_Vector rDY) + { + // Inputs: + // Time units: millisecond + double var_chaste_interface__cell__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : NV_Ith_S(rY, 0)); + // Units: millivolt; Initial value: -85.721630473733 + double var_chaste_interface__Ca_buffer__Cai = NV_Ith_S(rY, 1); + // Units: millimolar; Initial value: 8.6504944644883e-05 + double var_chaste_interface__INa_h_gate__h = NV_Ith_S(rY, 2); + // Units: dimensionless; Initial value: 0.98714602875678 + double var_chaste_interface__INa_j_gate__j = NV_Ith_S(rY, 3); + // Units: dimensionless; Initial value: 0.991826348770428 + double var_chaste_interface__INa_m_gate__m = NV_Ith_S(rY, 4); + // Units: dimensionless; Initial value: 0.0013702407736465 + double var_chaste_interface__IKr_Xr_gate__Xr = NV_Ith_S(rY, 5); + // Units: dimensionless; Initial value: 0.00846906175020028 + double var_chaste_interface__IKs_Xs_gate__Xs = NV_Ith_S(rY, 6); + // Units: dimensionless; Initial value: 0.00613557812033723 + double var_chaste_interface__Itos_X_gate__X_tos = NV_Ith_S(rY, 7); + // Units: dimensionless; Initial value: 0.00401072468238921 + double var_chaste_interface__Itos_Y_gate__Y_tos = NV_Ith_S(rY, 8); + // Units: dimensionless; Initial value: 0.31555225368514 + double var_chaste_interface__Itos_R_gate__R_tos = NV_Ith_S(rY, 9); + // Units: dimensionless; Initial value: 0.402577243036347 + double var_chaste_interface__Itof_X_gate__X_tof = NV_Ith_S(rY, 10); + // Units: dimensionless; Initial value: 0.00401068798369438 + double var_chaste_interface__Itof_Y_gate__Y_tof = NV_Ith_S(rY, 11); + // Units: dimensionless; Initial value: 0.994632857675454 + double var_chaste_interface__ICaL_d_gate__d = NV_Ith_S(rY, 12); + // Units: dimensionless; Initial value: 6.99526086177479e-06 + double var_chaste_interface__ICaL_f_gate__f = NV_Ith_S(rY, 13); + // Units: dimensionless; Initial value: 1.00067601563206 + double var_chaste_interface__ICaL_fCa_gate__fCaB_SL = NV_Ith_S(rY, 14); + // Units: dimensionless; Initial value: 0.0150193299768419 + double var_chaste_interface__ICaL_fCa_gate__fCaB_jct = NV_Ith_S(rY, 15); + // Units: dimensionless; Initial value: 0.0244048782575591 + double var_chaste_interface__Jrel_SR__R = NV_Ith_S(rY, 16); + // Units: dimensionless; Initial value: 0.890917121306535 + double var_chaste_interface__Jrel_SR__I = NV_Ith_S(rY, 17); + // Units: dimensionless; Initial value: 8.71752603681652e-08 + double var_chaste_interface__Jrel_SR__O = NV_Ith_S(rY, 18); + // Units: dimensionless; Initial value: 7.1199533741995e-07 + double var_chaste_interface__Na_buffer__Na_SL = NV_Ith_S(rY, 19); + // Units: millimolar; Initial value: 8.87161932058707 + double var_chaste_interface__Na_buffer__Na_jct = NV_Ith_S(rY, 20); + // Units: millimolar; Initial value: 8.87031835089116 + double var_chaste_interface__Na_buffer__Na_SL_buf = NV_Ith_S(rY, 21); + // Units: millimolar; Initial value: 0.77606800956492 + double var_chaste_interface__Na_buffer__Na_jct_buf = NV_Ith_S(rY, 22); + // Units: millimolar; Initial value: 3.55668431730337 + double var_chaste_interface__Na_buffer__Nai = NV_Ith_S(rY, 23); + // Units: millimolar; Initial value: 8.87200572571131 + double var_chaste_interface__Ca_buffer__Ca_SR = NV_Ith_S(rY, 24); + // Units: millimolar; Initial value: 0.547125831028543 + double var_chaste_interface__Ca_buffer__Ca_SL = NV_Ith_S(rY, 25); + // Units: millimolar; Initial value: 0.000104971310105451 + double var_chaste_interface__Ca_buffer__Ca_jct = NV_Ith_S(rY, 26); + // Units: millimolar; Initial value: 0.000174045152623969 + double var_chaste_interface__Ca_buffer__Ca_SLB_SL = NV_Ith_S(rY, 27); + // Units: millimolar; Initial value: 0.00973710481246467 + double var_chaste_interface__Ca_buffer__Ca_SLB_jct = NV_Ith_S(rY, 28); + // Units: millimolar; Initial value: 0.00774564218017916 + double var_chaste_interface__Ca_buffer__Ca_SLHigh_SL = NV_Ith_S(rY, 29); + // Units: millimolar; Initial value: 0.113168405274355 + double var_chaste_interface__Ca_buffer__Ca_SLHigh_jct = NV_Ith_S(rY, 30); + // Units: millimolar; Initial value: 0.0772568134367606 + double var_chaste_interface__Ca_buffer__Ca_Calsequestrin = NV_Ith_S(rY, 31); + // Units: millimolar; Initial value: 1.18828527890062 + double var_chaste_interface__cytosolic_Ca_buffer__Ca_TroponinC = NV_Ith_S(rY, 32); + // Units: millimolar; Initial value: 0.00886665040283094 + double var_chaste_interface__cytosolic_Ca_buffer__Ca_TroponinC_Ca_Mg = NV_Ith_S(rY, 33); + // Units: millimolar; Initial value: 0.117873278193472 + double var_chaste_interface__cytosolic_Ca_buffer__Mg_TroponinC_Ca_Mg = NV_Ith_S(rY, 34); + // Units: millimolar; Initial value: 0.0103906683506505 + double var_chaste_interface__cytosolic_Ca_buffer__Ca_Calmodulin = NV_Ith_S(rY, 35); + // Units: millimolar; Initial value: 0.000293073957804278 + double var_chaste_interface__cytosolic_Ca_buffer__Ca_Myosin = NV_Ith_S(rY, 36); + // Units: millimolar; Initial value: 0.00195899238146509 + double var_chaste_interface__cytosolic_Ca_buffer__Mg_Myosin = NV_Ith_S(rY, 37); + // Units: millimolar; Initial value: 0.137523520981802 + double var_chaste_interface__cytosolic_Ca_buffer__Ca_SRB = NV_Ith_S(rY, 38); + // Units: millimolar; Initial value: 0.00215728901718264 + double var_chaste_interface__indo_fluo_Ca_buffer_not_connected__Ca_Indo1_Cytosol = NV_Ith_S(rY, 39); + // Units: millimolar; Initial value: 0.0 + double var_chaste_interface__indo_fluo_Ca_buffer_not_connected__Ca_Indo1_SL = NV_Ith_S(rY, 40); + // Units: millimolar; Initial value: 0.0 + double var_chaste_interface__indo_fluo_Ca_buffer_not_connected__Ca_Indo1_jct = NV_Ith_S(rY, 41); + // Units: millimolar; Initial value: 0.0 + double var_chaste_interface__indo_fluo_Ca_buffer_not_connected__Ca_Fluo3_Cytosol = NV_Ith_S(rY, 42); + // Units: millimolar; Initial value: 0.0 + double var_chaste_interface__indo_fluo_Ca_buffer_not_connected__Ca_Fluo3_SL = NV_Ith_S(rY, 43); + // Units: millimolar; Initial value: 0.0 + double var_chaste_interface__indo_fluo_Ca_buffer_not_connected__Ca_Fluo3_jct = NV_Ith_S(rY, 44); + // Units: millimolar; Initial value: 0.0 + + // Mathematics + double d_dt_chaste_interface_var_cell__V; + const double var_Ca_buffer__Bmax_Calsequestrin = 0.14000000000000001; // millimolar + const double var_Ca_buffer__Bmax_SLB_SL = 0.037400000000000003; // millimolar + const double var_Ca_buffer__Bmax_SLB_jct = 0.0045999999999999999; // millimolar + const double var_Ca_buffer__Bmax_SLHigh_SL = 0.0134; // millimolar + const double var_Ca_buffer__Bmax_SLHigh_jct = 0.00165; // millimolar + const double var_Ca_buffer__koff_Calsequestrin = 65; // per_millisecond + const double var_Ca_buffer__koff_SLB = 1.3; // per_millisecond + const double var_Ca_buffer__koff_SLHigh = 0.029999999999999999; // per_millisecond + const double var_Ca_buffer__kon_Calsequestrin = 100; // per_millimolar_per_millisecond + const double var_Ca_buffer__kon_SL = 100; // per_millimolar_per_millisecond + const double var_ICaL__Fx_ICaL_SL = 0.10000000000000001; // dimensionless + const double var_ICaL__Fx_ICaL_jct = 0.90000000000000002; // dimensionless + const double var_ICaL__PNa = 1.4999999999999999e-8; // litre_per_farad_millisecond + const double var_ICaL__Q10_CaL = 1.8; // dimensionless + const double var_ICaL__gamma_Cai = 0.34100000000000003; // dimensionless + const double var_ICaL__gamma_Cao = 0.34100000000000003; // dimensionless + const double var_ICaL__gamma_Nai = 0.75; // dimensionless + const double var_ICaL__gamma_Nao = 0.75; // dimensionless + const double d_dt_chaste_interface_var_ICaL_fCa_gate__fCaB_SL = -0.011900000000000001 * var_chaste_interface__ICaL_fCa_gate__fCaB_SL + 1.7 * (1 - var_chaste_interface__ICaL_fCa_gate__fCaB_SL) * var_chaste_interface__Ca_buffer__Ca_SL; // 1 / millisecond + const double d_dt_chaste_interface_var_ICaL_fCa_gate__fCaB_jct = -0.011900000000000001 * var_chaste_interface__ICaL_fCa_gate__fCaB_jct + 1.7 * (1 - var_chaste_interface__ICaL_fCa_gate__fCaB_jct) * var_chaste_interface__Ca_buffer__Ca_jct; // 1 / millisecond + const double var_ICaL_fCa_gate__fCa_SL = 1 - var_chaste_interface__ICaL_fCa_gate__fCaB_SL; // dimensionless + const double var_ICaL_fCa_gate__fCa_jct = 1 - var_chaste_interface__ICaL_fCa_gate__fCaB_jct; // dimensionless + const double var_ICab__Fx_CaBk_SL = 0.89000000000000001; // dimensionless + const double var_ICab__Fx_CaBk_jct = 0.11; // dimensionless + const double var_ICab__G_CaBk = 0.00025129999999999998; // milliS_per_microF + const double var_ICap__Fx_SLCaP_SL = 0.89000000000000001; // dimensionless + const double var_ICap__Fx_SLCaP_jct = 0.11; // dimensionless + const double var_ICap__H = 1.6000000000000001; // dimensionless + const double var_ICap__Km = 0.00050000000000000001; // millimolar + const double var_ICap__Q10_SLCaP = 2.3500000000000001; // dimensionless + const double var_ICap__V_maxAF = 0.067299999999999999; // microA_per_microF + const double var_INa__Fx_Na_SL = 0.89000000000000001; // dimensionless + const double var_INa__Fx_Na_jct = 0.11; // dimensionless + const double var_INaCa__Fx_NCX_SL = 0.89000000000000001; // dimensionless + const double var_INaCa__Fx_NCX_jct = 0.11; // dimensionless + const double var_INaCa__HNa = 3; // dimensionless + const double var_INaCa__K_mCai = 0.0035899999999999999; // millimolar + const double var_INaCa__K_mCao = 1.3; // millimolar + const double var_INaCa__K_mNai = 12.289999999999999; // millimolar + const double var_INaCa__K_mNao = 87.5; // millimolar + const double var_INaCa__Kd_act = 0.00025599999999999999; // millimolar + const double var_INaCa__Ka_SL = 1 / (1 + pow(var_INaCa__Kd_act, 3) / pow(var_chaste_interface__Ca_buffer__Ca_SL, 3)); // dimensionless + const double var_INaCa__Ka_jct = 1 / (1 + pow(var_INaCa__Kd_act, 3) / pow(var_chaste_interface__Ca_buffer__Ca_jct, 3)); // dimensionless + const double var_INaCa__Q10_NCX = 1.5700000000000001; // dimensionless + const double var_INaCa__eta = 0.34999999999999998; // dimensionless + const double var_INaCa__ksat = 0.27000000000000002; // dimensionless + const double var_INaK__Fx_NaK_SL = 0.89000000000000001; // dimensionless + const double var_INaK__Fx_NaK_jct = 0.11; // dimensionless + const double var_INaK__H_NaK = 4; // dimensionless + const double var_INaK__I_NaK_max = 1.9099999999999999; // microA_per_microF + const double var_INaK__Km_Ko = 1.5; // millimolar + const double var_INaK__Km_Nai = 11; // millimolar + const double var_INaK__Q10_Km_Nai = 1.49; // dimensionless + const double var_INaK__Q10_NaK = 1.6299999999999999; // dimensionless + const double var_INa__openProb = pow(var_chaste_interface__INa_m_gate__m, 3) * var_chaste_interface__INa_h_gate__h * var_chaste_interface__INa_j_gate__j; // dimensionless + const double var_INab__Fx_NaBk_SL = 0.89000000000000001; // dimensionless + const double var_INab__Fx_NaBk_jct = 0.11; // dimensionless + const double var_INab__G_NaBk = 0.00029700000000000001; // milliS_per_microF + const double var_Jleak_SR__j_leak_SR = (-var_chaste_interface__Ca_buffer__Ca_jct + var_chaste_interface__Ca_buffer__Ca_SR) * NV_Ith_S(mParameters, 0); // millimolar_per_millisecond + const double var_Jpump_SR__H = 1.7869999999999999; // dimensionless + const double var_Jpump_SR__Kmf = 0.00024600000000000002; // millimolar + const double var_Jpump_SR__Kmr = 1.7; // millimolar + const double var_Jpump_SR__Q10_SRCaP = 2.6000000000000001; // dimensionless + const double var_Jrel_SR__EC50_SR = 0.45000000000000001; // millimolar + const double var_Jrel_SR__HSR = 2.5; // dimensionless + const double var_Jrel_SR__Max_SR = 15; // dimensionless + const double var_Jrel_SR__Min_SR = 1; // dimensionless + const double var_Jrel_SR__RI = 1 - var_chaste_interface__Jrel_SR__I - var_chaste_interface__Jrel_SR__O - var_chaste_interface__Jrel_SR__R; // dimensionless + const double var_Jrel_SR__kCaSR = -(-var_Jrel_SR__Min_SR + var_Jrel_SR__Max_SR) / (1 + pow((var_Jrel_SR__EC50_SR / var_chaste_interface__Ca_buffer__Ca_SR), var_Jrel_SR__HSR)) + var_Jrel_SR__Max_SR; // dimensionless + const double var_Jrel_SR__kiCa = 0.5; // per_millimolar_per_millisecond + const double var_Jrel_SR__kiSRCa = var_Jrel_SR__kCaSR * var_Jrel_SR__kiCa; // per_millimolar_per_millisecond + const double var_Jrel_SR__kim = 0.0050000000000000001; // per_millisecond + const double var_Jrel_SR__koCa = 10; // per_millimolar2_per_millisecond + const double var_Jrel_SR__koSRCa = var_Jrel_SR__koCa / var_Jrel_SR__kCaSR; // per_millimolar2_per_millisecond + const double var_Jrel_SR__kom = 0.059999999999999998; // per_millisecond + const double d_dt_chaste_interface_var_Jrel_SR__I = -var_chaste_interface__Jrel_SR__I * var_Jrel_SR__kim - var_chaste_interface__Jrel_SR__I * var_Jrel_SR__kom + pow(var_chaste_interface__Ca_buffer__Ca_jct, 2) * var_Jrel_SR__RI * var_Jrel_SR__koSRCa + var_chaste_interface__Ca_buffer__Ca_jct * var_chaste_interface__Jrel_SR__O * var_Jrel_SR__kiSRCa; // 1 / millisecond + const double d_dt_chaste_interface_var_Jrel_SR__O = var_chaste_interface__Jrel_SR__I * var_Jrel_SR__kim - var_chaste_interface__Jrel_SR__O * var_Jrel_SR__kom + pow(var_chaste_interface__Ca_buffer__Ca_jct, 2) * var_chaste_interface__Jrel_SR__R * var_Jrel_SR__koSRCa - var_chaste_interface__Ca_buffer__Ca_jct * var_chaste_interface__Jrel_SR__O * var_Jrel_SR__kiSRCa; // 1 / millisecond + const double d_dt_chaste_interface_var_Jrel_SR__R = var_chaste_interface__Jrel_SR__O * var_Jrel_SR__kom + var_Jrel_SR__RI * var_Jrel_SR__kim - pow(var_chaste_interface__Ca_buffer__Ca_jct, 2) * var_chaste_interface__Jrel_SR__R * var_Jrel_SR__koSRCa - var_chaste_interface__Ca_buffer__Ca_jct * var_chaste_interface__Jrel_SR__R * var_Jrel_SR__kiSRCa; // 1 / millisecond + const double var_Jrel_SR__j_rel_SR = (-var_chaste_interface__Ca_buffer__Ca_jct + var_chaste_interface__Ca_buffer__Ca_SR) * var_chaste_interface__Jrel_SR__O * NV_Ith_S(mParameters, 1); // millimolar_per_millisecond + const double var_Na_buffer__Bmax_SL = 1.6499999999999999; // millimolar + const double var_Na_buffer__Bmax_jct = 7.5609999999999999; // millimolar + const double var_Na_buffer__koff = 0.001; // per_millisecond + const double var_Na_buffer__kon = 0.0001; // per_millimolar_per_millisecond + const double var_Na_buffer__dNa_SL_buf = -var_chaste_interface__Na_buffer__Na_SL_buf * var_Na_buffer__koff + (-var_chaste_interface__Na_buffer__Na_SL_buf + var_Na_buffer__Bmax_SL) * var_chaste_interface__Na_buffer__Na_SL * var_Na_buffer__kon; // millimolar_per_millisecond + const double d_dt_chaste_interface_var_Na_buffer__Na_SL_buf = var_Na_buffer__dNa_SL_buf; // millimolar / millisecond + const double var_Na_buffer__dNa_jct_buf = -var_chaste_interface__Na_buffer__Na_jct_buf * var_Na_buffer__koff + (-var_chaste_interface__Na_buffer__Na_jct_buf + var_Na_buffer__Bmax_jct) * var_chaste_interface__Na_buffer__Na_jct * var_Na_buffer__kon; // millimolar_per_millisecond + const double d_dt_chaste_interface_var_Na_buffer__Na_jct_buf = var_Na_buffer__dNa_jct_buf; // millimolar / millisecond + const double var_ICaL_d_gate__d_infinity = 1 / (1 + exp(-2.4166666666666665 - 0.16666666666666666 * var_chaste_interface__cell__V)); // dimensionless + const double var_ICaL_d_gate__tau_d = 28.571428571428569 * (1 - exp(-2.4166666666666665 - 0.16666666666666666 * var_chaste_interface__cell__V)) * var_ICaL_d_gate__d_infinity / (14.5 + var_chaste_interface__cell__V); // millisecond + const double d_dt_chaste_interface_var_ICaL_d_gate__d = (-var_chaste_interface__ICaL_d_gate__d + var_ICaL_d_gate__d_infinity) / var_ICaL_d_gate__tau_d; // 1 / millisecond + const double var_ICaL_f_gate__f_infinity = 1 / (1 + exp(9.7388888888888889 + 0.27777777777777779 * var_chaste_interface__cell__V)) + 0.59999999999999998 / (1 + exp(2.5 - 0.050000000000000003 * var_chaste_interface__cell__V)); // dimensionless + const double var_ICaL_f_gate__tau_f = 1 / (0.02 + 0.019699999999999999 * exp(-0.23877882250000002 * pow((1 + 0.068965517241379309 * var_chaste_interface__cell__V), 2))); // millisecond + const double d_dt_chaste_interface_var_ICaL_f_gate__f = (-var_chaste_interface__ICaL_f_gate__f + var_ICaL_f_gate__f_infinity) / var_ICaL_f_gate__tau_f; // 1 / millisecond + const double var_IKr_Xr_gate__Xr_infinity = 1 / (1 + exp(-6.666666666666667 - 0.13333333333333333 * var_chaste_interface__cell__V)); // dimensionless + const double var_IKr_Xr_gate__tau_Xr = 1 / (0.00060999999999999997 * (10 + var_chaste_interface__cell__V) / (-1 + exp(1.45 + 0.14499999999999999 * var_chaste_interface__cell__V)) + 0.0013799999999999999 * (7 + var_chaste_interface__cell__V) / (1 - exp(-0.86099999999999999 - 0.123 * var_chaste_interface__cell__V))); // millisecond + const double d_dt_chaste_interface_var_IKr_Xr_gate__Xr = (-var_chaste_interface__IKr_Xr_gate__Xr + var_IKr_Xr_gate__Xr_infinity) / var_IKr_Xr_gate__tau_Xr; // 1 / millisecond + const double var_IKs_Xs_gate__Xs_infinity = 1 / (1 + exp(0.089820359281437126 - 0.059880239520958084 * var_chaste_interface__cell__V)); // dimensionless + const double var_IKs_Xs_gate__tau_Xs = 1 / (0.00013100000000000001 * (30 + var_chaste_interface__cell__V) / (-1 + exp(2.0609999999999999 + 0.068699999999999997 * var_chaste_interface__cell__V)) + 7.1899999999999999e-5 * (30 + var_chaste_interface__cell__V) / (1 - exp(-4.4399999999999995 - 0.14799999999999999 * var_chaste_interface__cell__V))); // millisecond + const double d_dt_chaste_interface_var_IKs_Xs_gate__Xs = (-var_chaste_interface__IKs_Xs_gate__Xs + var_IKs_Xs_gate__Xs_infinity) / var_IKs_Xs_gate__tau_Xs; // 1 / millisecond + const double var_INa_h_gate__alpha_h = ((var_chaste_interface__cell__V < -40) ? (0.13500000000000001 * exp(-11.764705882352942 + 0.14705882352941177 * NV_Ith_S(mParameters, 17) - 0.14705882352941177 * var_chaste_interface__cell__V)) : (0)); // per_millisecond + const double var_INa_h_gate__beta_h = ((var_chaste_interface__cell__V < -40) ? (310000 * exp(0.34999999999999998 * var_chaste_interface__cell__V - 0.34999999999999998 * NV_Ith_S(mParameters, 17)) + 3.5600000000000001 * exp(0.079000000000000001 * var_chaste_interface__cell__V - 0.079000000000000001 * NV_Ith_S(mParameters, 17))) : (7.6923076923076916 / (1 + exp(-0.96036036036036043 + 0.0900900900900901 * NV_Ith_S(mParameters, 17) - 0.0900900900900901 * var_chaste_interface__cell__V)))); // per_millisecond + const double var_INa_h_gate__h_infinity = 0.01 * NV_Ith_S(mParameters, 16) + (1 - 0.01 * NV_Ith_S(mParameters, 16)) * var_INa_h_gate__alpha_h / (var_INa_h_gate__alpha_h + var_INa_h_gate__beta_h); // dimensionless + const double var_INa_h_gate__tau_h = 1 / (var_INa_h_gate__alpha_h + var_INa_h_gate__beta_h); // millisecond + const double d_dt_chaste_interface_var_INa_h_gate__h = (-var_chaste_interface__INa_h_gate__h + var_INa_h_gate__h_infinity) / var_INa_h_gate__tau_h; // 1 / millisecond + const double var_INa_j_gate__alpha_j = ((var_chaste_interface__cell__V < -40) ? ((37.780000000000001 + var_chaste_interface__cell__V) * (-127140 * exp(0.24440000000000001 * var_chaste_interface__cell__V - 0.24440000000000001 * NV_Ith_S(mParameters, 17)) - 3.4740000000000003e-5 * exp(0.043909999999999998 * NV_Ith_S(mParameters, 17) - 0.043909999999999998 * var_chaste_interface__cell__V)) / (1 + exp(24.640530000000002 + 0.311 * var_chaste_interface__cell__V - 0.311 * NV_Ith_S(mParameters, 17)))) : (0)); // per_millisecond + const double var_INa_j_gate__beta_j = ((var_chaste_interface__cell__V < -40) ? (0.1212 * exp(0.01052 * NV_Ith_S(mParameters, 17) - 0.01052 * var_chaste_interface__cell__V) / (1 + exp(-5.5312920000000005 + 0.13780000000000001 * NV_Ith_S(mParameters, 17) - 0.13780000000000001 * var_chaste_interface__cell__V))) : (0.29999999999999999 * exp(2.5349999999999999e-7 * NV_Ith_S(mParameters, 17) - 2.5349999999999999e-7 * var_chaste_interface__cell__V) / (1 + exp(-3.2000000000000002 + 0.10000000000000001 * NV_Ith_S(mParameters, 17) - 0.10000000000000001 * var_chaste_interface__cell__V)))); // per_millisecond + const double var_INa_j_gate__j_infinity = 0.01 * NV_Ith_S(mParameters, 16) + (1 - 0.01 * NV_Ith_S(mParameters, 16)) * var_INa_j_gate__alpha_j / (var_INa_j_gate__alpha_j + var_INa_j_gate__beta_j); // dimensionless + const double var_INa_j_gate__tau_j = 1 / (var_INa_j_gate__alpha_j + var_INa_j_gate__beta_j); // millisecond + const double d_dt_chaste_interface_var_INa_j_gate__j = (-var_chaste_interface__INa_j_gate__j + var_INa_j_gate__j_infinity) / var_INa_j_gate__tau_j; // 1 / millisecond + const double var_INa_m_gate__alpha_m = 0.32000000000000001 * (47.130000000000003 + var_chaste_interface__cell__V) / (1 - exp(-4.7130000000000001 - 0.10000000000000001 * var_chaste_interface__cell__V)); // per_millisecond + const double var_INa_m_gate__beta_m = 0.080000000000000002 * exp(-0.090909090909090912 * var_chaste_interface__cell__V); // per_millisecond + const double var_INa_m_gate__m_infinity = var_INa_m_gate__alpha_m / (var_INa_m_gate__alpha_m + var_INa_m_gate__beta_m); // dimensionless + const double var_INa_m_gate__tau_m = 1 / (var_INa_m_gate__alpha_m + var_INa_m_gate__beta_m); // millisecond + const double d_dt_chaste_interface_var_INa_m_gate__m = (-var_chaste_interface__INa_m_gate__m + var_INa_m_gate__m_infinity) / var_INa_m_gate__tau_m; // 1 / millisecond + const double var_Itof_X_gate__X_tof_infinity = 1 / (1 + exp(-0.20000000000000001 - 0.066666666666666666 * var_chaste_interface__cell__V)); // dimensionless + const double var_Itof_X_gate__tau_X_tof = 1.5 + 3.5 * exp(-0.0011111111111111111 * pow(var_chaste_interface__cell__V, 2)); // millisecond + const double d_dt_chaste_interface_var_Itof_X_gate__X_tof = (-var_chaste_interface__Itof_X_gate__X_tof + var_Itof_X_gate__X_tof_infinity) / var_Itof_X_gate__tau_X_tof; // 1 / millisecond + const double var_Itof_Y_gate__Y_tof_infinity = 1 / (1 + exp(3.3500000000000001 + 0.10000000000000001 * var_chaste_interface__cell__V)); // dimensionless + const double var_Itof_Y_gate__tau_Y_tof = 20 + 20 / (1 + exp(3.3500000000000001 + 0.10000000000000001 * var_chaste_interface__cell__V)); // millisecond + const double d_dt_chaste_interface_var_Itof_Y_gate__Y_tof = (-var_chaste_interface__Itof_Y_gate__Y_tof + var_Itof_Y_gate__Y_tof_infinity) / var_Itof_Y_gate__tau_Y_tof; // 1 / millisecond + const double var_Itos_R_gate__R_tos_infinity = 1 / (1 + exp(3.3500000000000001 + 0.10000000000000001 * var_chaste_interface__cell__V)); // dimensionless + const double var_Itos_R_gate__tau_R_tos = 220 + 2800 / (1 + exp(6 + 0.10000000000000001 * var_chaste_interface__cell__V)); // millisecond + const double d_dt_chaste_interface_var_Itos_R_gate__R_tos = (-var_chaste_interface__Itos_R_gate__R_tos + var_Itos_R_gate__R_tos_infinity) / var_Itos_R_gate__tau_R_tos; // 1 / millisecond + const double var_Itos_X_gate__X_tos_infinity = 1 / (1 + exp(-0.20000000000000001 - 0.066666666666666666 * var_chaste_interface__cell__V)); // dimensionless + const double var_Itos_X_gate__tau_X_tos = 0.5 + 9 / (1 + exp(0.20000000000000001 + 0.066666666666666666 * var_chaste_interface__cell__V)); // millisecond + const double d_dt_chaste_interface_var_Itos_X_gate__X_tos = (-var_chaste_interface__Itos_X_gate__X_tos + var_Itos_X_gate__X_tos_infinity) / var_Itos_X_gate__tau_X_tos; // 1 / millisecond + const double var_Itos_Y_gate__Y_tos_infinity = 1 / (1 + exp(3.3500000000000001 + 0.10000000000000001 * var_chaste_interface__cell__V)); // dimensionless + const double var_Itos_Y_gate__tau_Y_tos = 30 + 3000 / (1 + exp(6 + 0.10000000000000001 * var_chaste_interface__cell__V)); // millisecond + const double d_dt_chaste_interface_var_Itos_Y_gate__Y_tos = (-var_chaste_interface__Itos_Y_gate__Y_tos + var_Itos_Y_gate__Y_tos_infinity) / var_Itos_Y_gate__tau_Y_tos; // 1 / millisecond + const double var_cytosolic_Ca_buffer__Bmax_Calmodulin = 0.024; // millimolar + const double var_cytosolic_Ca_buffer__Bmax_Myosin_Ca = 0.14000000000000001; // millimolar + const double var_cytosolic_Ca_buffer__Bmax_Myosin_Mg = 0.14000000000000001; // millimolar + const double var_cytosolic_Ca_buffer__Bmax_SRB = 0.017100000000000001; // millimolar + const double var_cytosolic_Ca_buffer__Bmax_TroponinC = 0.070000000000000007; // millimolar + const double var_cytosolic_Ca_buffer__Bmax_TroponinC_Ca_Mg_Ca = 0.14000000000000001; // millimolar + const double var_cytosolic_Ca_buffer__Bmax_TroponinC_Ca_Mg_Mg = 0.14000000000000001; // millimolar + const double var_cytosolic_Ca_buffer__koff_Calmodulin = 0.23799999999999999; // per_millisecond + const double var_cytosolic_Ca_buffer__koff_Myosin_Ca = 0.00046000000000000001; // per_millisecond + const double var_cytosolic_Ca_buffer__koff_Myosin_Mg = 5.7000000000000003e-5; // per_millisecond + const double var_cytosolic_Ca_buffer__koff_SRB = 0.059999999999999998; // per_millisecond + const double var_cytosolic_Ca_buffer__koff_TroponinC = 0.019599999999999999; // per_millisecond + const double var_cytosolic_Ca_buffer__koff_TroponinC_Ca_Mg_Ca = 3.1999999999999999e-5; // per_millisecond + const double var_cytosolic_Ca_buffer__koff_TroponinC_Ca_Mg_Mg = 0.0033300000000000001; // per_millisecond + const double var_cytosolic_Ca_buffer__kon_Calmodulin = 34; // per_millimolar_per_millisecond + const double var_cytosolic_Ca_buffer__dCa_Calmodulin = -var_chaste_interface__cytosolic_Ca_buffer__Ca_Calmodulin * var_cytosolic_Ca_buffer__koff_Calmodulin + (-var_chaste_interface__cytosolic_Ca_buffer__Ca_Calmodulin + var_cytosolic_Ca_buffer__Bmax_Calmodulin) * var_chaste_interface__Ca_buffer__Cai * var_cytosolic_Ca_buffer__kon_Calmodulin; // millimolar_per_millisecond + const double d_dt_chaste_interface_var_cytosolic_Ca_buffer__Ca_Calmodulin = var_cytosolic_Ca_buffer__dCa_Calmodulin; // millimolar / millisecond + const double var_cytosolic_Ca_buffer__kon_Myosin_Ca = 13.800000000000001; // per_millimolar_per_millisecond + const double var_cytosolic_Ca_buffer__dCa_Myosin = -var_chaste_interface__cytosolic_Ca_buffer__Ca_Myosin * var_cytosolic_Ca_buffer__koff_Myosin_Ca + (-var_chaste_interface__cytosolic_Ca_buffer__Ca_Myosin - var_chaste_interface__cytosolic_Ca_buffer__Mg_Myosin + var_cytosolic_Ca_buffer__Bmax_Myosin_Ca) * var_chaste_interface__Ca_buffer__Cai * var_cytosolic_Ca_buffer__kon_Myosin_Ca; // millimolar_per_millisecond + const double d_dt_chaste_interface_var_cytosolic_Ca_buffer__Ca_Myosin = var_cytosolic_Ca_buffer__dCa_Myosin; // millimolar / millisecond + const double var_cytosolic_Ca_buffer__kon_Myosin_Mg = 0.015699999999999999; // per_millimolar_per_millisecond + const double var_cytosolic_Ca_buffer__kon_SRB = 100; // per_millimolar_per_millisecond + const double var_cytosolic_Ca_buffer__dCa_SRB = -var_chaste_interface__cytosolic_Ca_buffer__Ca_SRB * var_cytosolic_Ca_buffer__koff_SRB + (-var_chaste_interface__cytosolic_Ca_buffer__Ca_SRB + var_cytosolic_Ca_buffer__Bmax_SRB) * var_chaste_interface__Ca_buffer__Cai * var_cytosolic_Ca_buffer__kon_SRB; // millimolar_per_millisecond + const double d_dt_chaste_interface_var_cytosolic_Ca_buffer__Ca_SRB = var_cytosolic_Ca_buffer__dCa_SRB; // millimolar / millisecond + const double var_cytosolic_Ca_buffer__kon_TroponinC = 32.700000000000003; // per_millimolar_per_millisecond + const double var_cytosolic_Ca_buffer__dCa_TroponinC = -var_chaste_interface__cytosolic_Ca_buffer__Ca_TroponinC * var_cytosolic_Ca_buffer__koff_TroponinC + (-var_chaste_interface__cytosolic_Ca_buffer__Ca_TroponinC + var_cytosolic_Ca_buffer__Bmax_TroponinC) * var_chaste_interface__Ca_buffer__Cai * var_cytosolic_Ca_buffer__kon_TroponinC; // millimolar_per_millisecond + const double d_dt_chaste_interface_var_cytosolic_Ca_buffer__Ca_TroponinC = var_cytosolic_Ca_buffer__dCa_TroponinC; // millimolar / millisecond + const double var_cytosolic_Ca_buffer__kon_TroponinC_Ca_Mg_Ca = 2.3700000000000001; // per_millimolar_per_millisecond + const double var_cytosolic_Ca_buffer__dCa_TroponinC_Ca_Mg = -var_chaste_interface__cytosolic_Ca_buffer__Ca_TroponinC_Ca_Mg * var_cytosolic_Ca_buffer__koff_TroponinC_Ca_Mg_Ca + (-var_chaste_interface__cytosolic_Ca_buffer__Ca_TroponinC_Ca_Mg - var_chaste_interface__cytosolic_Ca_buffer__Mg_TroponinC_Ca_Mg + var_cytosolic_Ca_buffer__Bmax_TroponinC_Ca_Mg_Ca) * var_chaste_interface__Ca_buffer__Cai * var_cytosolic_Ca_buffer__kon_TroponinC_Ca_Mg_Ca; // millimolar_per_millisecond + const double d_dt_chaste_interface_var_cytosolic_Ca_buffer__Ca_TroponinC_Ca_Mg = var_cytosolic_Ca_buffer__dCa_TroponinC_Ca_Mg; // millimolar / millisecond + const double var_cytosolic_Ca_buffer__kon_TroponinC_Ca_Mg_Mg = 0.0030000000000000001; // per_millimolar_per_millisecond + const double var_indo_fluo_Ca_buffer_not_connected__Bmax_Fluo3_Cytosol = 0.025000000000000001; // millimolar + const double var_indo_fluo_Ca_buffer_not_connected__Bmax_Fluo3_SL = 0.00076999999999999996; // millimolar + const double var_indo_fluo_Ca_buffer_not_connected__Bmax_Fluo3_jct = 2.0000000000000002e-5; // millimolar + const double var_indo_fluo_Ca_buffer_not_connected__Bmax_Indo1_Cytosol = 0.025000000000000001; // millimolar + const double var_indo_fluo_Ca_buffer_not_connected__Bmax_Indo1_SL = 0.00076999999999999996; // millimolar + const double var_indo_fluo_Ca_buffer_not_connected__Bmax_Indo1_jct = 2.0000000000000002e-5; // millimolar + const double var_indo_fluo_Ca_buffer_not_connected__Fluo3 = 0; // millimolar + const double var_indo_fluo_Ca_buffer_not_connected__Indo1 = 0; // millimolar + const double var_indo_fluo_Ca_buffer_not_connected__koff_Fluo3 = 0.11; // per_millisecond + const double var_indo_fluo_Ca_buffer_not_connected__koff_Indo1 = 0.059999999999999998; // per_millisecond + const double var_indo_fluo_Ca_buffer_not_connected__kon_Fluo3 = 100; // per_millimolar2_per_millisecond + const double var_indo_fluo_Ca_buffer_not_connected__kon_Indo1 = 100; // per_millimolar2_per_millisecond + const double var_ion_diffusion__J_Ca_SL_cytosol = 3.7243000000000002e-12 * var_chaste_interface__Ca_buffer__Ca_SL - 3.7243000000000002e-12 * var_chaste_interface__Ca_buffer__Cai; // millimole_per_millisecond + const double var_ion_diffusion__J_Ca_jct_SL = 8.2413000000000004e-13 * var_chaste_interface__Ca_buffer__Ca_jct - 8.2413000000000004e-13 * var_chaste_interface__Ca_buffer__Ca_SL; // millimole_per_millisecond + const double var_ion_diffusion__J_Na_SL_cytosol = 1.6385999999999999e-12 * var_chaste_interface__Na_buffer__Na_SL - 1.6385999999999999e-12 * var_chaste_interface__Na_buffer__Nai; // millimole_per_millisecond + const double var_ion_diffusion__J_Na_jct_SL = 1.8312999999999999e-14 * var_chaste_interface__Na_buffer__Na_jct - 1.8312999999999999e-14 * var_chaste_interface__Na_buffer__Na_SL; // millimole_per_millisecond + const double var_model_parameters__Cm_per_area = 1.9999999999999999e-6; // farad_per_cm2 + const double var_model_parameters__Mgi = 1; // millimolar + const double var_cytosolic_Ca_buffer__dMg_Myosin = -var_chaste_interface__cytosolic_Ca_buffer__Mg_Myosin * var_cytosolic_Ca_buffer__koff_Myosin_Mg + (-var_chaste_interface__cytosolic_Ca_buffer__Ca_Myosin - var_chaste_interface__cytosolic_Ca_buffer__Mg_Myosin + var_cytosolic_Ca_buffer__Bmax_Myosin_Mg) * var_cytosolic_Ca_buffer__kon_Myosin_Mg * var_model_parameters__Mgi; // millimolar_per_millisecond + const double d_dt_chaste_interface_var_cytosolic_Ca_buffer__Mg_Myosin = var_cytosolic_Ca_buffer__dMg_Myosin; // millimolar / millisecond + const double var_cytosolic_Ca_buffer__dMg_TroponinC_Ca_Mg = -var_chaste_interface__cytosolic_Ca_buffer__Mg_TroponinC_Ca_Mg * var_cytosolic_Ca_buffer__koff_TroponinC_Ca_Mg_Mg + (-var_chaste_interface__cytosolic_Ca_buffer__Ca_TroponinC_Ca_Mg - var_chaste_interface__cytosolic_Ca_buffer__Mg_TroponinC_Ca_Mg + var_cytosolic_Ca_buffer__Bmax_TroponinC_Ca_Mg_Mg) * var_cytosolic_Ca_buffer__kon_TroponinC_Ca_Mg_Mg * var_model_parameters__Mgi; // millimolar_per_millisecond + const double d_dt_chaste_interface_var_cytosolic_Ca_buffer__Mg_TroponinC_Ca_Mg = var_cytosolic_Ca_buffer__dMg_TroponinC_Ca_Mg; // millimolar / millisecond + const double var_cytosolic_Ca_buffer__dCa_cytosol_tot_bound = var_cytosolic_Ca_buffer__dCa_Calmodulin + var_cytosolic_Ca_buffer__dCa_Myosin + var_cytosolic_Ca_buffer__dCa_SRB + var_cytosolic_Ca_buffer__dCa_TroponinC + var_cytosolic_Ca_buffer__dCa_TroponinC_Ca_Mg + var_cytosolic_Ca_buffer__dMg_Myosin + var_cytosolic_Ca_buffer__dMg_TroponinC_Ca_Mg; // millimolar_per_millisecond + const double var_INaK__sigma = -0.14285714285714285 + 0.14285714285714285 * exp(0.01485884101040119 * NV_Ith_S(mParameters, 9)); // dimensionless + const double var_ICaL__Q_CaL = pow(var_ICaL__Q10_CaL, (-31 + 0.10000000000000001 * NV_Ith_S(mParameters, 24))); // dimensionless + const double var_ICaL__temp = 0.45000000000000001 * pow(NV_Ith_S(mParameters, 10), 2) * var_ICaL__Q_CaL * var_chaste_interface__ICaL_d_gate__d * var_chaste_interface__ICaL_f_gate__f * var_chaste_interface__cell__V / (NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 24)); // coulomb_per_mole + const double var_ICaL__i_CaL_Ca_SL = 4 * (-var_ICaL__gamma_Cao * NV_Ith_S(mParameters, 6) + var_chaste_interface__Ca_buffer__Ca_SL * var_ICaL__gamma_Cai * exp(2 * var_chaste_interface__cell__V * NV_Ith_S(mParameters, 10) / (NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 24)))) * var_ICaL__Fx_ICaL_SL * NV_Ith_S(mParameters, 12) * var_ICaL__temp * var_ICaL_fCa_gate__fCa_SL / (-1 + exp(2 * var_chaste_interface__cell__V * NV_Ith_S(mParameters, 10) / (NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 24)))); // microA_per_microF + const double var_ICaL__i_CaL_Ca_jct = 4 * (-var_ICaL__gamma_Cao * NV_Ith_S(mParameters, 6) + var_chaste_interface__Ca_buffer__Ca_jct * var_ICaL__gamma_Cai * exp(2 * var_chaste_interface__cell__V * NV_Ith_S(mParameters, 10) / (NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 24)))) * var_ICaL__Fx_ICaL_jct * NV_Ith_S(mParameters, 12) * var_ICaL__temp * var_ICaL_fCa_gate__fCa_jct / (-1 + exp(2 * var_chaste_interface__cell__V * NV_Ith_S(mParameters, 10) / (NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 24)))); // microA_per_microF + const double var_ICaL__i_CaL_Na_SL = (-var_ICaL__gamma_Nao * NV_Ith_S(mParameters, 9) + var_ICaL__gamma_Nai * var_chaste_interface__Na_buffer__Na_SL * exp(var_chaste_interface__cell__V * NV_Ith_S(mParameters, 10) / (NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 24)))) * var_ICaL__Fx_ICaL_SL * var_ICaL__PNa * var_ICaL__temp * var_ICaL_fCa_gate__fCa_SL / (-1 + exp(var_chaste_interface__cell__V * NV_Ith_S(mParameters, 10) / (NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 24)))); // microA_per_microF + const double var_ICaL__i_CaL_Na_jct = (-var_ICaL__gamma_Nao * NV_Ith_S(mParameters, 9) + var_ICaL__gamma_Nai * var_chaste_interface__Na_buffer__Na_jct * exp(var_chaste_interface__cell__V * NV_Ith_S(mParameters, 10) / (NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 24)))) * var_ICaL__Fx_ICaL_jct * var_ICaL__PNa * var_ICaL__temp * var_ICaL_fCa_gate__fCa_jct / (-1 + exp(var_chaste_interface__cell__V * NV_Ith_S(mParameters, 10) / (NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 24)))); // microA_per_microF + const double var_ICap__Q_SLCaP = pow(var_ICap__Q10_SLCaP, (-31 + 0.10000000000000001 * NV_Ith_S(mParameters, 24))); // dimensionless + const double var_ICap__i_Cap_SL = var_ICap__Fx_SLCaP_SL * var_ICap__Q_SLCaP * var_ICap__V_maxAF / (1 + pow((var_ICap__Km / var_chaste_interface__Ca_buffer__Ca_SL), var_ICap__H)); // microA_per_microF + const double var_ICap__i_Cap_jct = var_ICap__Fx_SLCaP_jct * var_ICap__Q_SLCaP * var_ICap__V_maxAF / (1 + pow((var_ICap__Km / var_chaste_interface__Ca_buffer__Ca_jct), var_ICap__H)); // microA_per_microF + const double var_INaCa__Q_NCX = pow(var_INaCa__Q10_NCX, (-31 + 0.10000000000000001 * NV_Ith_S(mParameters, 24))); // dimensionless + const double var_INaCa__temp_SL = (pow(var_chaste_interface__Na_buffer__Na_SL, var_INaCa__HNa) * NV_Ith_S(mParameters, 6) * exp(var_INaCa__eta * var_chaste_interface__cell__V * NV_Ith_S(mParameters, 10) / (NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 24))) - pow(NV_Ith_S(mParameters, 9), var_INaCa__HNa) * var_chaste_interface__Ca_buffer__Ca_SL * exp((-1 + var_INaCa__eta) * var_chaste_interface__cell__V * NV_Ith_S(mParameters, 10) / (NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 24)))) / (1 + var_INaCa__ksat * exp((-1 + var_INaCa__eta) * var_chaste_interface__cell__V * NV_Ith_S(mParameters, 10) / (NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 24)))); // millimolar4 + const double var_INaCa__i_NaCa_SL = var_INaCa__Fx_NCX_SL * var_INaCa__Ka_SL * var_INaCa__Q_NCX * NV_Ith_S(mParameters, 23) * var_INaCa__temp_SL / (pow(var_chaste_interface__Na_buffer__Na_SL, var_INaCa__HNa) * var_INaCa__K_mCao + pow(var_chaste_interface__Na_buffer__Na_SL, var_INaCa__HNa) * NV_Ith_S(mParameters, 6) + pow(NV_Ith_S(mParameters, 9), var_INaCa__HNa) * var_chaste_interface__Ca_buffer__Ca_SL + pow(var_INaCa__K_mNao, var_INaCa__HNa) * (1 + var_chaste_interface__Ca_buffer__Ca_SL / var_INaCa__K_mCai) * var_chaste_interface__Ca_buffer__Ca_SL + pow(NV_Ith_S(mParameters, 9), var_INaCa__HNa) * (1 + pow((var_chaste_interface__Na_buffer__Na_SL / var_INaCa__K_mNai), var_INaCa__HNa)) * var_INaCa__K_mCai); // microA_per_microF + const double var_INaCa__temp_jct = (pow(var_chaste_interface__Na_buffer__Na_jct, var_INaCa__HNa) * NV_Ith_S(mParameters, 6) * exp(var_INaCa__eta * var_chaste_interface__cell__V * NV_Ith_S(mParameters, 10) / (NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 24))) - pow(NV_Ith_S(mParameters, 9), var_INaCa__HNa) * var_chaste_interface__Ca_buffer__Ca_jct * exp((-1 + var_INaCa__eta) * var_chaste_interface__cell__V * NV_Ith_S(mParameters, 10) / (NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 24)))) / (1 + var_INaCa__ksat * exp((-1 + var_INaCa__eta) * var_chaste_interface__cell__V * NV_Ith_S(mParameters, 10) / (NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 24)))); // millimolar4 + const double var_INaCa__i_NaCa_jct = var_INaCa__Fx_NCX_jct * var_INaCa__Ka_jct * var_INaCa__Q_NCX * NV_Ith_S(mParameters, 23) * var_INaCa__temp_jct / (pow(var_chaste_interface__Na_buffer__Na_jct, var_INaCa__HNa) * var_INaCa__K_mCao + pow(var_chaste_interface__Na_buffer__Na_jct, var_INaCa__HNa) * NV_Ith_S(mParameters, 6) + pow(NV_Ith_S(mParameters, 9), var_INaCa__HNa) * var_chaste_interface__Ca_buffer__Ca_jct + pow(var_INaCa__K_mNao, var_INaCa__HNa) * (1 + var_chaste_interface__Ca_buffer__Ca_jct / var_INaCa__K_mCai) * var_chaste_interface__Ca_buffer__Ca_jct + pow(NV_Ith_S(mParameters, 9), var_INaCa__HNa) * (1 + pow((var_chaste_interface__Na_buffer__Na_jct / var_INaCa__K_mNai), var_INaCa__HNa)) * var_INaCa__K_mCai); // microA_per_microF + const double var_INaK__Q_Km_Nai = pow(var_INaK__Q10_Km_Nai, (-31 + 0.10000000000000001 * NV_Ith_S(mParameters, 24))); // dimensionless + const double var_INaK__Q_NaK = pow(var_INaK__Q10_NaK, (-31 + 0.10000000000000001 * NV_Ith_S(mParameters, 24))); // dimensionless + const double var_INaK__f_NaK = 1 / (1 + 0.1245 * exp(-0.10000000000000001 * var_chaste_interface__cell__V * NV_Ith_S(mParameters, 10) / (NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 24))) + 0.036499999999999998 * var_INaK__sigma * exp(-var_chaste_interface__cell__V * NV_Ith_S(mParameters, 10) / (NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 24)))); // dimensionless + const double var_INaK__i_NaK_SL = var_INaK__Fx_NaK_SL * var_INaK__I_NaK_max * var_INaK__Q_NaK * var_INaK__f_NaK * NV_Ith_S(mParameters, 8) / ((1 + pow((var_INaK__Km_Nai * var_INaK__Q_Km_Nai / var_chaste_interface__Na_buffer__Na_SL), var_INaK__H_NaK)) * (var_INaK__Km_Ko + NV_Ith_S(mParameters, 8))); // microA_per_microF + const double var_INaK__i_NaK_jct = var_INaK__Fx_NaK_jct * var_INaK__I_NaK_max * var_INaK__Q_NaK * var_INaK__f_NaK * NV_Ith_S(mParameters, 8) / ((1 + pow((var_INaK__Km_Nai * var_INaK__Q_Km_Nai / var_chaste_interface__Na_buffer__Na_jct), var_INaK__H_NaK)) * (var_INaK__Km_Ko + NV_Ith_S(mParameters, 8))); // microA_per_microF + const double var_Jpump_SR__Q_SRCaP = pow(var_Jpump_SR__Q10_SRCaP, (-31 + 0.10000000000000001 * NV_Ith_S(mParameters, 24))); // dimensionless + const double var_model_parameters__cell_length = 100; // micrometre + const double var_model_parameters__cell_radius = 10.25; // micrometre + const double var_model_parameters__Cm = 2.0e-8 * M_PI * var_model_parameters__Cm_per_area * var_model_parameters__cell_length * var_model_parameters__cell_radius; // farad + const double var_model_parameters__Vol_Cell = 3.1415926540000002e-15 * pow(var_model_parameters__cell_radius, 2) * var_model_parameters__cell_length; // liter + const double var_model_parameters__Vol_SL = 0.02 * var_model_parameters__Vol_Cell; // liter + const double var_model_parameters__Vol_SR = 0.035000000000000003 * var_model_parameters__Vol_Cell; // liter + const double var_model_parameters__Vol_cytosol = 0.65000000000000002 * var_model_parameters__Vol_Cell; // liter + const double var_Ca_buffer__dCa_SLB_SL = -var_chaste_interface__Ca_buffer__Ca_SLB_SL * var_Ca_buffer__koff_SLB + (-var_chaste_interface__Ca_buffer__Ca_SLB_SL + var_Ca_buffer__Bmax_SLB_SL * var_model_parameters__Vol_cytosol / var_model_parameters__Vol_SL) * var_chaste_interface__Ca_buffer__Ca_SL * var_Ca_buffer__kon_SL; // millimolar_per_millisecond + const double var_Ca_buffer__dCa_SLHigh_SL = -var_chaste_interface__Ca_buffer__Ca_SLHigh_SL * var_Ca_buffer__koff_SLHigh + (-var_chaste_interface__Ca_buffer__Ca_SLHigh_SL + var_Ca_buffer__Bmax_SLHigh_SL * var_model_parameters__Vol_cytosol / var_model_parameters__Vol_SL) * var_chaste_interface__Ca_buffer__Ca_SL * var_Ca_buffer__kon_SL; // millimolar_per_millisecond + const double var_Ca_buffer__dCa_SL_tot_bound = var_Ca_buffer__dCa_SLB_SL + var_Ca_buffer__dCa_SLHigh_SL; // millimolar_per_millisecond + const double var_Ca_buffer__dCalsequestrin = -var_chaste_interface__Ca_buffer__Ca_Calsequestrin * var_Ca_buffer__koff_Calsequestrin + (-var_chaste_interface__Ca_buffer__Ca_Calsequestrin + var_Ca_buffer__Bmax_Calsequestrin * var_model_parameters__Vol_cytosol / var_model_parameters__Vol_SR) * var_chaste_interface__Ca_buffer__Ca_SR * var_Ca_buffer__kon_Calsequestrin; // millimolar_per_millisecond + const double d_dt_chaste_interface_var_Ca_buffer__Ca_Calsequestrin = var_Ca_buffer__dCalsequestrin; // millimolar / millisecond + const double d_dt_chaste_interface_var_Ca_buffer__Ca_SLB_SL = var_Ca_buffer__dCa_SLB_SL; // millimolar / millisecond + const double d_dt_chaste_interface_var_Ca_buffer__Ca_SLHigh_SL = var_Ca_buffer__dCa_SLHigh_SL; // millimolar / millisecond + const double d_dt_chaste_interface_var_Na_buffer__Nai = NV_Ith_S(mParameters, 3) * var_ion_diffusion__J_Na_SL_cytosol / var_model_parameters__Vol_cytosol; // millimolar / millisecond + const double var_Jpump_SR__j_pump_SR = (pow((var_chaste_interface__Ca_buffer__Cai / var_Jpump_SR__Kmf), var_Jpump_SR__H) - pow((var_chaste_interface__Ca_buffer__Ca_SR / var_Jpump_SR__Kmr), var_Jpump_SR__H)) * var_Jpump_SR__Q_SRCaP * NV_Ith_S(mParameters, 2) * var_model_parameters__Vol_cytosol / ((1 + pow((var_chaste_interface__Ca_buffer__Cai / var_Jpump_SR__Kmf), var_Jpump_SR__H) + pow((var_chaste_interface__Ca_buffer__Ca_SR / var_Jpump_SR__Kmr), var_Jpump_SR__H)) * var_model_parameters__Vol_SR); // millimolar_per_millisecond + const double d_dt_chaste_interface_var_Ca_buffer__Ca_SR = -var_Ca_buffer__dCalsequestrin - var_Jrel_SR__j_rel_SR - var_Jleak_SR__j_leak_SR * var_model_parameters__Vol_cytosol / var_model_parameters__Vol_SR + var_Jpump_SR__j_pump_SR; // millimolar / millisecond + const double d_dt_chaste_interface_var_Ca_buffer__Cai = -var_cytosolic_Ca_buffer__dCa_cytosol_tot_bound + var_ion_diffusion__J_Ca_SL_cytosol / var_model_parameters__Vol_cytosol - var_Jpump_SR__j_pump_SR * var_model_parameters__Vol_SR / var_model_parameters__Vol_cytosol; // millimolar / millisecond + const double var_model_parameters__Vol_jct = 0.00051000000000000004 * var_model_parameters__Vol_Cell; // liter + const double var_Ca_buffer__dCa_SLB_jct = -var_chaste_interface__Ca_buffer__Ca_SLB_jct * var_Ca_buffer__koff_SLB + (-var_chaste_interface__Ca_buffer__Ca_SLB_jct + 0.10000000000000001 * var_Ca_buffer__Bmax_SLB_jct * var_model_parameters__Vol_cytosol / var_model_parameters__Vol_jct) * var_chaste_interface__Ca_buffer__Ca_jct * var_Ca_buffer__kon_SL; // millimolar_per_millisecond + const double var_Ca_buffer__dCa_SLHigh_jct = -var_chaste_interface__Ca_buffer__Ca_SLHigh_jct * var_Ca_buffer__koff_SLHigh + (-var_chaste_interface__Ca_buffer__Ca_SLHigh_jct + 0.10000000000000001 * var_Ca_buffer__Bmax_SLHigh_jct * var_model_parameters__Vol_cytosol / var_model_parameters__Vol_jct) * var_chaste_interface__Ca_buffer__Ca_jct * var_Ca_buffer__kon_SL; // millimolar_per_millisecond + const double var_Ca_buffer__dCa_jct_tot_bound = var_Ca_buffer__dCa_SLB_jct + var_Ca_buffer__dCa_SLHigh_jct; // millimolar_per_millisecond + const double d_dt_chaste_interface_var_Ca_buffer__Ca_SLB_jct = var_Ca_buffer__dCa_SLB_jct; // millimolar / millisecond + const double d_dt_chaste_interface_var_Ca_buffer__Ca_SLHigh_jct = var_Ca_buffer__dCa_SLHigh_jct; // millimolar / millisecond + const double var_indo_fluo_Ca_buffer_not_connected__Fluo3Bound = var_chaste_interface__indo_fluo_Ca_buffer_not_connected__Ca_Fluo3_SL * var_model_parameters__Vol_SL / var_model_parameters__Vol_cytosol + var_chaste_interface__indo_fluo_Ca_buffer_not_connected__Ca_Fluo3_jct * var_model_parameters__Vol_jct / var_model_parameters__Vol_cytosol + var_chaste_interface__indo_fluo_Ca_buffer_not_connected__Ca_Fluo3_Cytosol; // millimolar + const double var_indo_fluo_Ca_buffer_not_connected__Indo1Bound = var_chaste_interface__indo_fluo_Ca_buffer_not_connected__Ca_Indo1_SL * var_model_parameters__Vol_SL / var_model_parameters__Vol_cytosol + var_chaste_interface__indo_fluo_Ca_buffer_not_connected__Ca_Indo1_jct * var_model_parameters__Vol_jct / var_model_parameters__Vol_cytosol + var_chaste_interface__indo_fluo_Ca_buffer_not_connected__Ca_Indo1_Cytosol; // millimolar + const double var_indo_fluo_Ca_buffer_not_connected__dCa_Fluo3_Cytosol = -var_chaste_interface__indo_fluo_Ca_buffer_not_connected__Ca_Fluo3_Cytosol * var_indo_fluo_Ca_buffer_not_connected__koff_Fluo3 + (-var_chaste_interface__indo_fluo_Ca_buffer_not_connected__Ca_Fluo3_Cytosol + var_indo_fluo_Ca_buffer_not_connected__Bmax_Fluo3_Cytosol) * (-var_indo_fluo_Ca_buffer_not_connected__Fluo3Bound + var_indo_fluo_Ca_buffer_not_connected__Fluo3) * var_chaste_interface__Ca_buffer__Cai * var_indo_fluo_Ca_buffer_not_connected__kon_Fluo3; // millimolar_per_millisecond + const double d_dt_chaste_interface_var_indo_fluo_Ca_buffer_not_connected__Ca_Fluo3_Cytosol = var_indo_fluo_Ca_buffer_not_connected__dCa_Fluo3_Cytosol; // millimolar / millisecond + const double var_indo_fluo_Ca_buffer_not_connected__dCa_Fluo3_SL = -var_chaste_interface__indo_fluo_Ca_buffer_not_connected__Ca_Fluo3_SL * var_indo_fluo_Ca_buffer_not_connected__koff_Fluo3 + (-var_chaste_interface__indo_fluo_Ca_buffer_not_connected__Ca_Fluo3_SL + var_indo_fluo_Ca_buffer_not_connected__Bmax_Fluo3_SL * var_model_parameters__Vol_cytosol / var_model_parameters__Vol_SL) * (-var_indo_fluo_Ca_buffer_not_connected__Fluo3Bound + var_indo_fluo_Ca_buffer_not_connected__Fluo3) * var_chaste_interface__Ca_buffer__Ca_SL * var_indo_fluo_Ca_buffer_not_connected__kon_Fluo3; // millimolar_per_millisecond + const double d_dt_chaste_interface_var_indo_fluo_Ca_buffer_not_connected__Ca_Fluo3_SL = var_indo_fluo_Ca_buffer_not_connected__dCa_Fluo3_SL; // millimolar / millisecond + const double var_indo_fluo_Ca_buffer_not_connected__dCa_Fluo3_jct = -var_chaste_interface__indo_fluo_Ca_buffer_not_connected__Ca_Fluo3_jct * var_indo_fluo_Ca_buffer_not_connected__koff_Fluo3 + (-var_chaste_interface__indo_fluo_Ca_buffer_not_connected__Ca_Fluo3_jct + var_indo_fluo_Ca_buffer_not_connected__Bmax_Fluo3_jct * var_model_parameters__Vol_cytosol / var_model_parameters__Vol_jct) * (-var_indo_fluo_Ca_buffer_not_connected__Fluo3Bound + var_indo_fluo_Ca_buffer_not_connected__Fluo3) * var_chaste_interface__Ca_buffer__Ca_jct * var_indo_fluo_Ca_buffer_not_connected__kon_Fluo3; // millimolar_per_millisecond + const double d_dt_chaste_interface_var_indo_fluo_Ca_buffer_not_connected__Ca_Fluo3_jct = var_indo_fluo_Ca_buffer_not_connected__dCa_Fluo3_jct; // millimolar / millisecond + const double var_indo_fluo_Ca_buffer_not_connected__dCa_Indo1_Cytosol = -var_chaste_interface__indo_fluo_Ca_buffer_not_connected__Ca_Indo1_Cytosol * var_indo_fluo_Ca_buffer_not_connected__koff_Indo1 + (-var_chaste_interface__indo_fluo_Ca_buffer_not_connected__Ca_Indo1_Cytosol + var_indo_fluo_Ca_buffer_not_connected__Bmax_Indo1_Cytosol) * (-var_indo_fluo_Ca_buffer_not_connected__Indo1Bound + var_indo_fluo_Ca_buffer_not_connected__Indo1) * var_chaste_interface__Ca_buffer__Cai * var_indo_fluo_Ca_buffer_not_connected__kon_Indo1; // millimolar_per_millisecond + const double d_dt_chaste_interface_var_indo_fluo_Ca_buffer_not_connected__Ca_Indo1_Cytosol = var_indo_fluo_Ca_buffer_not_connected__dCa_Indo1_Cytosol; // millimolar / millisecond + const double var_indo_fluo_Ca_buffer_not_connected__dCa_Indo1_SL = -var_chaste_interface__indo_fluo_Ca_buffer_not_connected__Ca_Indo1_SL * var_indo_fluo_Ca_buffer_not_connected__koff_Indo1 + (-var_chaste_interface__indo_fluo_Ca_buffer_not_connected__Ca_Indo1_SL + var_indo_fluo_Ca_buffer_not_connected__Bmax_Indo1_SL * var_model_parameters__Vol_cytosol / var_model_parameters__Vol_SL) * (-var_indo_fluo_Ca_buffer_not_connected__Indo1Bound + var_indo_fluo_Ca_buffer_not_connected__Indo1) * var_chaste_interface__Ca_buffer__Ca_SL * var_indo_fluo_Ca_buffer_not_connected__kon_Indo1; // millimolar_per_millisecond + const double d_dt_chaste_interface_var_indo_fluo_Ca_buffer_not_connected__Ca_Indo1_SL = var_indo_fluo_Ca_buffer_not_connected__dCa_Indo1_SL; // millimolar / millisecond + const double var_indo_fluo_Ca_buffer_not_connected__dCa_Indo1_jct = -var_chaste_interface__indo_fluo_Ca_buffer_not_connected__Ca_Indo1_jct * var_indo_fluo_Ca_buffer_not_connected__koff_Indo1 + (-var_chaste_interface__indo_fluo_Ca_buffer_not_connected__Ca_Indo1_jct + var_indo_fluo_Ca_buffer_not_connected__Bmax_Indo1_jct * var_model_parameters__Vol_cytosol / var_model_parameters__Vol_jct) * (-var_indo_fluo_Ca_buffer_not_connected__Indo1Bound + var_indo_fluo_Ca_buffer_not_connected__Indo1) * var_chaste_interface__Ca_buffer__Ca_jct * var_indo_fluo_Ca_buffer_not_connected__kon_Indo1; // millimolar_per_millisecond + const double d_dt_chaste_interface_var_indo_fluo_Ca_buffer_not_connected__Ca_Indo1_jct = var_indo_fluo_Ca_buffer_not_connected__dCa_Indo1_jct; // millimolar / millisecond + const double var_reversal_potentials__E_Ca_SL = 0.5 * NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 24) * log(NV_Ith_S(mParameters, 6) / var_chaste_interface__Ca_buffer__Ca_SL) / NV_Ith_S(mParameters, 10); // millivolt + const double var_ICab__i_Cab_SL = (-var_reversal_potentials__E_Ca_SL + var_chaste_interface__cell__V) * var_ICab__Fx_CaBk_SL * var_ICab__G_CaBk; // microA_per_microF + const double var_Ca_buffer__i_Ca_SL_tot = -2 * var_INaCa__i_NaCa_SL + var_ICaL__i_CaL_Ca_SL + var_ICab__i_Cab_SL + var_ICap__i_Cap_SL; // microA_per_microF + const double d_dt_chaste_interface_var_Ca_buffer__Ca_SL = -var_Ca_buffer__dCa_SL_tot_bound + (-var_ion_diffusion__J_Ca_SL_cytosol + var_ion_diffusion__J_Ca_jct_SL) / var_model_parameters__Vol_SL - 0.5 * var_Ca_buffer__i_Ca_SL_tot * var_model_parameters__Cm / (NV_Ith_S(mParameters, 10) * var_model_parameters__Vol_SL); // millimolar / millisecond + const double var_reversal_potentials__E_Ca_jct = 0.5 * NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 24) * log(NV_Ith_S(mParameters, 6) / var_chaste_interface__Ca_buffer__Ca_jct) / NV_Ith_S(mParameters, 10); // millivolt + const double var_ICab__i_Cab_jct = (-var_reversal_potentials__E_Ca_jct + var_chaste_interface__cell__V) * var_ICab__Fx_CaBk_jct * var_ICab__G_CaBk; // microA_per_microF + const double var_Ca_buffer__i_Ca_jct_tot = -2 * var_INaCa__i_NaCa_jct + var_ICaL__i_CaL_Ca_jct + var_ICab__i_Cab_jct + var_ICap__i_Cap_jct; // microA_per_microF + const double d_dt_chaste_interface_var_Ca_buffer__Ca_jct = -var_Ca_buffer__dCa_jct_tot_bound - var_ion_diffusion__J_Ca_jct_SL / var_model_parameters__Vol_jct + var_Jleak_SR__j_leak_SR * var_model_parameters__Vol_cytosol / var_model_parameters__Vol_jct + var_Jrel_SR__j_rel_SR * var_model_parameters__Vol_SR / var_model_parameters__Vol_jct - 0.5 * var_Ca_buffer__i_Ca_jct_tot * var_model_parameters__Cm / (NV_Ith_S(mParameters, 10) * var_model_parameters__Vol_jct); // millimolar / millisecond + const double var_reversal_potentials__E_Na_SL = NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 24) * log(NV_Ith_S(mParameters, 9) / var_chaste_interface__Na_buffer__Na_SL) / NV_Ith_S(mParameters, 10); // millivolt + const double var_INa__i_Na_SL = (-var_reversal_potentials__E_Na_SL + var_chaste_interface__cell__V) * var_INa__Fx_Na_SL * NV_Ith_S(mParameters, 15) * var_INa__openProb; // microA_per_microF + const double var_INab__i_Nab_SL = (-var_reversal_potentials__E_Na_SL + var_chaste_interface__cell__V) * var_INab__Fx_NaBk_SL * var_INab__G_NaBk; // microA_per_microF + const double d_dt_chaste_interface_var_Na_buffer__Na_SL = (-var_Na_buffer__dNa_SL_buf + (-var_ion_diffusion__J_Na_SL_cytosol + var_ion_diffusion__J_Na_jct_SL) / var_model_parameters__Vol_SL - (3 * var_INaCa__i_NaCa_SL + 3 * var_INaK__i_NaK_SL + var_ICaL__i_CaL_Na_SL + var_INa__i_Na_SL + var_INab__i_Nab_SL) * var_model_parameters__Cm / (NV_Ith_S(mParameters, 10) * var_model_parameters__Vol_SL)) * NV_Ith_S(mParameters, 3); // millimolar / millisecond + const double var_reversal_potentials__E_Na_jct = NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 24) * log(NV_Ith_S(mParameters, 9) / var_chaste_interface__Na_buffer__Na_jct) / NV_Ith_S(mParameters, 10); // millivolt + const double var_INa__i_Na_jct = (-var_reversal_potentials__E_Na_jct + var_chaste_interface__cell__V) * var_INa__Fx_Na_jct * NV_Ith_S(mParameters, 15) * var_INa__openProb; // microA_per_microF + const double var_INab__i_Nab_jct = (-var_reversal_potentials__E_Na_jct + var_chaste_interface__cell__V) * var_INab__Fx_NaBk_jct * var_INab__G_NaBk; // microA_per_microF + const double d_dt_chaste_interface_var_Na_buffer__Na_jct = (-var_Na_buffer__dNa_jct_buf - var_ion_diffusion__J_Na_jct_SL / var_model_parameters__Vol_jct - (3 * var_INaCa__i_NaCa_jct + 3 * var_INaK__i_NaK_jct + var_ICaL__i_CaL_Na_jct + var_INa__i_Na_jct + var_INab__i_Nab_jct) * var_model_parameters__Cm / (NV_Ith_S(mParameters, 10) * var_model_parameters__Vol_jct)) * NV_Ith_S(mParameters, 3); // millimolar / millisecond + + if (mSetVoltageDerivativeToZero) + { + d_dt_chaste_interface_var_cell__V = 0.0; + } + else + { + const double var_ICaL__PK = 2.7000000000000001e-7; // litre_per_farad_millisecond + const double var_ICaL__gamma_Ki = 0.75; // dimensionless + const double var_ICaL__gamma_Ko = 0.75; // dimensionless + const double var_ICl_Ca__Fx_Cl_SL = 0.89000000000000001; // dimensionless + const double var_ICl_Ca__Fx_Cl_jct = 0.11; // dimensionless + const double var_ICl_Ca__G_Cl = 0.109625; // milliS_per_microF + const double var_ICl_Ca__Kd_ClCa = 0.10000000000000001; // millimolar + const double var_IKs__Fx_Ks_SL = 0.89000000000000001; // dimensionless + const double var_IKs__Fx_Ks_jct = 0.11; // dimensionless + const double var_IKs__pCa_SL = 3 - log10(var_chaste_interface__Ca_buffer__Ca_SL); // dimensionless + const double var_IKs__G_Ks_SL = (0.057000000000000002 + 0.19 / (1 + exp(-12 + 1.6666666666666667 * var_IKs__pCa_SL))) * NV_Ith_S(mParameters, 21); // milliS_per_microF + const double var_IKs__pCa_jct = 3 - log10(var_chaste_interface__Ca_buffer__Ca_jct); // dimensionless + const double var_IKs__G_Ks_jct = (0.057000000000000002 + 0.19 / (1 + exp(-12 + 1.6666666666666667 * var_IKs__pCa_jct))) * NV_Ith_S(mParameters, 21); // milliS_per_microF + const double var_IKs__pKNa = 0.018329999999999999; // dimensionless + const double var_IKr_Rr_gate__Rr = 1 / (1 + exp(1.4732142857142858 + 0.044642857142857144 * var_chaste_interface__cell__V)); // dimensionless + const double var_cell__i_Stim_converted = GetIntracellularAreaStimulus(var_chaste_interface__environment__time); // uA_per_cm2 + const double var_cell__i_Stim = var_cell__i_Stim_converted / HeartConfig::Instance()->GetCapacitance(); // microA_per_microF + const double var_IK1__G_K1 = 0.43033148291193518 * sqrt(NV_Ith_S(mParameters, 8)) * NV_Ith_S(mParameters, 19); // milliS_per_microF + const double var_IKr__G_IKr = 0.43033148291193518 * sqrt(NV_Ith_S(mParameters, 8)) * NV_Ith_S(mParameters, 20); // milliS_per_microF + const double var_ICaL__i_CaL_K = (var_ICaL__Fx_ICaL_SL * var_ICaL_fCa_gate__fCa_SL + var_ICaL__Fx_ICaL_jct * var_ICaL_fCa_gate__fCa_jct) * (-var_ICaL__gamma_Ko * NV_Ith_S(mParameters, 8) + var_ICaL__gamma_Ki * NV_Ith_S(mParameters, 5) * exp(var_chaste_interface__cell__V * NV_Ith_S(mParameters, 10) / (NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 24)))) * var_ICaL__PK * var_ICaL__temp / (-1 + exp(var_chaste_interface__cell__V * NV_Ith_S(mParameters, 10) / (NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 24)))); // microA_per_microF + const double var_ICaL__i_CaL = var_ICaL__i_CaL_Ca_SL + var_ICaL__i_CaL_Ca_jct + var_ICaL__i_CaL_K + var_ICaL__i_CaL_Na_SL + var_ICaL__i_CaL_Na_jct; // microA_per_microF + const double var_ICap__i_Cap = var_ICap__i_Cap_SL + var_ICap__i_Cap_jct; // microA_per_microF + const double var_IKs__E_Ks = NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 24) * log((var_IKs__pKNa * NV_Ith_S(mParameters, 9) + NV_Ith_S(mParameters, 8)) / (var_IKs__pKNa * var_chaste_interface__Na_buffer__Nai + NV_Ith_S(mParameters, 5))) / NV_Ith_S(mParameters, 10); // millivolt + const double var_IKs__i_Ks_SL = pow(var_chaste_interface__IKs_Xs_gate__Xs, 2) * (-var_IKs__E_Ks + var_chaste_interface__cell__V) * var_IKs__Fx_Ks_SL * var_IKs__G_Ks_SL; // microA_per_microF + const double var_IKs__i_Ks_jct = pow(var_chaste_interface__IKs_Xs_gate__Xs, 2) * (-var_IKs__E_Ks + var_chaste_interface__cell__V) * var_IKs__Fx_Ks_jct * var_IKs__G_Ks_jct; // microA_per_microF + const double var_IKs__i_Ks = var_IKs__i_Ks_SL + var_IKs__i_Ks_jct; // microA_per_microF + const double var_INaCa__i_NaCa = var_INaCa__i_NaCa_SL + var_INaCa__i_NaCa_jct; // microA_per_microF + const double var_INaK__i_NaK = var_INaK__i_NaK_SL + var_INaK__i_NaK_jct; // microA_per_microF + const double var_ICab__i_Cab = var_ICab__i_Cab_SL + var_ICab__i_Cab_jct; // microA_per_microF + const double var_reversal_potentials__E_Cl = -NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 24) * log(NV_Ith_S(mParameters, 7) / NV_Ith_S(mParameters, 4)) / NV_Ith_S(mParameters, 10); // millivolt + const double var_ICl_Ca__i_Cl_Ca = (-var_reversal_potentials__E_Cl + var_chaste_interface__cell__V) * (var_ICl_Ca__Fx_Cl_SL / (1 + var_ICl_Ca__Kd_ClCa / var_chaste_interface__Ca_buffer__Ca_SL) + var_ICl_Ca__Fx_Cl_jct / (1 + var_ICl_Ca__Kd_ClCa / var_chaste_interface__Ca_buffer__Ca_jct)) * var_ICl_Ca__G_Cl; // microA_per_microF + const double var_IClb__i_Clb = (-var_reversal_potentials__E_Cl + var_chaste_interface__cell__V) * NV_Ith_S(mParameters, 13); // microA_per_microF + const double var_reversal_potentials__E_K = NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 24) * log(NV_Ith_S(mParameters, 8) / NV_Ith_S(mParameters, 5)) / NV_Ith_S(mParameters, 10); // millivolt + const double var_IK1_K1_gate__alpha_K1 = 1.02 / (1 + exp(-14.1227775 + 0.23849999999999999 * var_chaste_interface__cell__V - 0.23849999999999999 * var_reversal_potentials__E_K)); // per_millisecond + const double var_IK1_K1_gate__beta_K1 = (exp(-36.698642499999998 + 0.061749999999999999 * var_chaste_interface__cell__V - 0.061749999999999999 * var_reversal_potentials__E_K) + 0.49124000000000001 * exp(0.43983232 + 0.080320000000000003 * var_chaste_interface__cell__V - 0.080320000000000003 * var_reversal_potentials__E_K)) / (1 + exp(-2.4444678999999998 + 0.51429999999999998 * var_reversal_potentials__E_K - 0.51429999999999998 * var_chaste_interface__cell__V)); // per_millisecond + const double var_IK1_K1_gate__K1_infinity = var_IK1_K1_gate__alpha_K1 / (var_IK1_K1_gate__alpha_K1 + var_IK1_K1_gate__beta_K1); // dimensionless + const double var_IK1__i_K1 = (-var_reversal_potentials__E_K + var_chaste_interface__cell__V) * var_IK1__G_K1 * var_IK1_K1_gate__K1_infinity; // microA_per_microF + const double var_IKr__i_Kr = (-var_reversal_potentials__E_K + var_chaste_interface__cell__V) * var_IKr__G_IKr * var_IKr_Rr_gate__Rr * var_chaste_interface__IKr_Xr_gate__Xr; // microA_per_microF + const double var_Itof__i_tof = (-var_reversal_potentials__E_K + var_chaste_interface__cell__V) * NV_Ith_S(mParameters, 18) * var_chaste_interface__Itof_X_gate__X_tof * var_chaste_interface__Itof_Y_gate__Y_tof; // microA_per_microF + const double var_Itos__i_tos = (-var_reversal_potentials__E_K + var_chaste_interface__cell__V) * (0.5 * var_chaste_interface__Itos_R_gate__R_tos + var_chaste_interface__Itos_Y_gate__Y_tos) * NV_Ith_S(mParameters, 22) * var_chaste_interface__Itos_X_gate__X_tos; // microA_per_microF + const double var_INa__i_Na = var_INa__i_Na_SL + var_INa__i_Na_jct; // microA_per_microF + const double var_INab__i_Nab = var_INab__i_Nab_SL + var_INab__i_Nab_jct; // microA_per_microF + // Special handling of data clamp current here + // (we want to save expense of calling the interpolation method if possible.) + double var_chaste_interface__membrane_data_clamp_current = 0.0; + if (mDataClampIsOn) + { + var_chaste_interface__membrane_data_clamp_current = (-GetExperimentalVoltageAtTimeT(var_chaste_interface__environment__time) + var_chaste_interface__cell__V) * NV_Ith_S(mParameters, 14); // uA_per_cm2 + } + d_dt_chaste_interface_var_cell__V = -var_ICaL__i_CaL - var_ICab__i_Cab - var_ICap__i_Cap - var_ICl_Ca__i_Cl_Ca - var_IClb__i_Clb - var_IK1__i_K1 - var_IKr__i_Kr - var_IKs__i_Ks - var_INa__i_Na - var_INaCa__i_NaCa - var_INaK__i_NaK - var_INab__i_Nab - var_Itof__i_tof - var_Itos__i_tos - var_cell__i_Stim - var_chaste_interface__membrane_data_clamp_current; // millivolt / millisecond + } + + NV_Ith_S(rDY,0) = d_dt_chaste_interface_var_cell__V; + NV_Ith_S(rDY,1) = d_dt_chaste_interface_var_Ca_buffer__Cai; + NV_Ith_S(rDY,2) = d_dt_chaste_interface_var_INa_h_gate__h; + NV_Ith_S(rDY,3) = d_dt_chaste_interface_var_INa_j_gate__j; + NV_Ith_S(rDY,4) = d_dt_chaste_interface_var_INa_m_gate__m; + NV_Ith_S(rDY,5) = d_dt_chaste_interface_var_IKr_Xr_gate__Xr; + NV_Ith_S(rDY,6) = d_dt_chaste_interface_var_IKs_Xs_gate__Xs; + NV_Ith_S(rDY,7) = d_dt_chaste_interface_var_Itos_X_gate__X_tos; + NV_Ith_S(rDY,8) = d_dt_chaste_interface_var_Itos_Y_gate__Y_tos; + NV_Ith_S(rDY,9) = d_dt_chaste_interface_var_Itos_R_gate__R_tos; + NV_Ith_S(rDY,10) = d_dt_chaste_interface_var_Itof_X_gate__X_tof; + NV_Ith_S(rDY,11) = d_dt_chaste_interface_var_Itof_Y_gate__Y_tof; + NV_Ith_S(rDY,12) = d_dt_chaste_interface_var_ICaL_d_gate__d; + NV_Ith_S(rDY,13) = d_dt_chaste_interface_var_ICaL_f_gate__f; + NV_Ith_S(rDY,14) = d_dt_chaste_interface_var_ICaL_fCa_gate__fCaB_SL; + NV_Ith_S(rDY,15) = d_dt_chaste_interface_var_ICaL_fCa_gate__fCaB_jct; + NV_Ith_S(rDY,16) = d_dt_chaste_interface_var_Jrel_SR__R; + NV_Ith_S(rDY,17) = d_dt_chaste_interface_var_Jrel_SR__I; + NV_Ith_S(rDY,18) = d_dt_chaste_interface_var_Jrel_SR__O; + NV_Ith_S(rDY,19) = d_dt_chaste_interface_var_Na_buffer__Na_SL; + NV_Ith_S(rDY,20) = d_dt_chaste_interface_var_Na_buffer__Na_jct; + NV_Ith_S(rDY,21) = d_dt_chaste_interface_var_Na_buffer__Na_SL_buf; + NV_Ith_S(rDY,22) = d_dt_chaste_interface_var_Na_buffer__Na_jct_buf; + NV_Ith_S(rDY,23) = d_dt_chaste_interface_var_Na_buffer__Nai; + NV_Ith_S(rDY,24) = d_dt_chaste_interface_var_Ca_buffer__Ca_SR; + NV_Ith_S(rDY,25) = d_dt_chaste_interface_var_Ca_buffer__Ca_SL; + NV_Ith_S(rDY,26) = d_dt_chaste_interface_var_Ca_buffer__Ca_jct; + NV_Ith_S(rDY,27) = d_dt_chaste_interface_var_Ca_buffer__Ca_SLB_SL; + NV_Ith_S(rDY,28) = d_dt_chaste_interface_var_Ca_buffer__Ca_SLB_jct; + NV_Ith_S(rDY,29) = d_dt_chaste_interface_var_Ca_buffer__Ca_SLHigh_SL; + NV_Ith_S(rDY,30) = d_dt_chaste_interface_var_Ca_buffer__Ca_SLHigh_jct; + NV_Ith_S(rDY,31) = d_dt_chaste_interface_var_Ca_buffer__Ca_Calsequestrin; + NV_Ith_S(rDY,32) = d_dt_chaste_interface_var_cytosolic_Ca_buffer__Ca_TroponinC; + NV_Ith_S(rDY,33) = d_dt_chaste_interface_var_cytosolic_Ca_buffer__Ca_TroponinC_Ca_Mg; + NV_Ith_S(rDY,34) = d_dt_chaste_interface_var_cytosolic_Ca_buffer__Mg_TroponinC_Ca_Mg; + NV_Ith_S(rDY,35) = d_dt_chaste_interface_var_cytosolic_Ca_buffer__Ca_Calmodulin; + NV_Ith_S(rDY,36) = d_dt_chaste_interface_var_cytosolic_Ca_buffer__Ca_Myosin; + NV_Ith_S(rDY,37) = d_dt_chaste_interface_var_cytosolic_Ca_buffer__Mg_Myosin; + NV_Ith_S(rDY,38) = d_dt_chaste_interface_var_cytosolic_Ca_buffer__Ca_SRB; + NV_Ith_S(rDY,39) = d_dt_chaste_interface_var_indo_fluo_Ca_buffer_not_connected__Ca_Indo1_Cytosol; + NV_Ith_S(rDY,40) = d_dt_chaste_interface_var_indo_fluo_Ca_buffer_not_connected__Ca_Indo1_SL; + NV_Ith_S(rDY,41) = d_dt_chaste_interface_var_indo_fluo_Ca_buffer_not_connected__Ca_Indo1_jct; + NV_Ith_S(rDY,42) = d_dt_chaste_interface_var_indo_fluo_Ca_buffer_not_connected__Ca_Fluo3_Cytosol; + NV_Ith_S(rDY,43) = d_dt_chaste_interface_var_indo_fluo_Ca_buffer_not_connected__Ca_Fluo3_SL; + NV_Ith_S(rDY,44) = d_dt_chaste_interface_var_indo_fluo_Ca_buffer_not_connected__Ca_Fluo3_jct; + } + + N_Vector Dynamicshannon_wang_puglisi_weber_bers_2004FromCellMLCvodeDataClamp::ComputeDerivedQuantities(double var_chaste_interface__environment__time, const N_Vector & rY) + { + // Inputs: + // Time units: millisecond + double var_chaste_interface__cell__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : NV_Ith_S(rY, 0)); + // Units: millivolt; Initial value: -85.721630473733 + double var_chaste_interface__INa_h_gate__h = NV_Ith_S(rY, 2); + // Units: dimensionless; Initial value: 0.98714602875678 + double var_chaste_interface__INa_j_gate__j = NV_Ith_S(rY, 3); + // Units: dimensionless; Initial value: 0.991826348770428 + double var_chaste_interface__INa_m_gate__m = NV_Ith_S(rY, 4); + // Units: dimensionless; Initial value: 0.0013702407736465 + double var_chaste_interface__IKr_Xr_gate__Xr = NV_Ith_S(rY, 5); + // Units: dimensionless; Initial value: 0.00846906175020028 + double var_chaste_interface__IKs_Xs_gate__Xs = NV_Ith_S(rY, 6); + // Units: dimensionless; Initial value: 0.00613557812033723 + double var_chaste_interface__Itos_X_gate__X_tos = NV_Ith_S(rY, 7); + // Units: dimensionless; Initial value: 0.00401072468238921 + double var_chaste_interface__Itos_Y_gate__Y_tos = NV_Ith_S(rY, 8); + // Units: dimensionless; Initial value: 0.31555225368514 + double var_chaste_interface__Itos_R_gate__R_tos = NV_Ith_S(rY, 9); + // Units: dimensionless; Initial value: 0.402577243036347 + double var_chaste_interface__Itof_X_gate__X_tof = NV_Ith_S(rY, 10); + // Units: dimensionless; Initial value: 0.00401068798369438 + double var_chaste_interface__Itof_Y_gate__Y_tof = NV_Ith_S(rY, 11); + // Units: dimensionless; Initial value: 0.994632857675454 + double var_chaste_interface__ICaL_d_gate__d = NV_Ith_S(rY, 12); + // Units: dimensionless; Initial value: 6.99526086177479e-06 + double var_chaste_interface__ICaL_f_gate__f = NV_Ith_S(rY, 13); + // Units: dimensionless; Initial value: 1.00067601563206 + double var_chaste_interface__ICaL_fCa_gate__fCaB_SL = NV_Ith_S(rY, 14); + // Units: dimensionless; Initial value: 0.0150193299768419 + double var_chaste_interface__ICaL_fCa_gate__fCaB_jct = NV_Ith_S(rY, 15); + // Units: dimensionless; Initial value: 0.0244048782575591 + double var_chaste_interface__Jrel_SR__O = NV_Ith_S(rY, 18); + // Units: dimensionless; Initial value: 7.1199533741995e-07 + double var_chaste_interface__Na_buffer__Na_SL = NV_Ith_S(rY, 19); + // Units: millimolar; Initial value: 8.87161932058707 + double var_chaste_interface__Na_buffer__Na_jct = NV_Ith_S(rY, 20); + // Units: millimolar; Initial value: 8.87031835089116 + double var_chaste_interface__Na_buffer__Nai = NV_Ith_S(rY, 23); + // Units: millimolar; Initial value: 8.87200572571131 + double var_chaste_interface__Ca_buffer__Ca_SR = NV_Ith_S(rY, 24); + // Units: millimolar; Initial value: 0.547125831028543 + double var_chaste_interface__Ca_buffer__Ca_SL = NV_Ith_S(rY, 25); + // Units: millimolar; Initial value: 0.000104971310105451 + double var_chaste_interface__Ca_buffer__Ca_jct = NV_Ith_S(rY, 26); + // Units: millimolar; Initial value: 0.000174045152623969 + + // Mathematics + const double var_ICaL__Fx_ICaL_SL = 0.10000000000000001; // dimensionless + const double var_ICaL__Fx_ICaL_jct = 0.90000000000000002; // dimensionless + const double var_ICaL__PK = 2.7000000000000001e-7; // litre_per_farad_millisecond + const double var_ICaL__PNa = 1.4999999999999999e-8; // litre_per_farad_millisecond + const double var_ICaL__Q10_CaL = 1.8; // dimensionless + const double var_ICaL__gamma_Cai = 0.34100000000000003; // dimensionless + const double var_ICaL__gamma_Cao = 0.34100000000000003; // dimensionless + const double var_ICaL__gamma_Ki = 0.75; // dimensionless + const double var_ICaL__gamma_Ko = 0.75; // dimensionless + const double var_ICaL__gamma_Nai = 0.75; // dimensionless + const double var_ICaL__gamma_Nao = 0.75; // dimensionless + const double var_ICaL_fCa_gate__fCa_SL = 1 - var_chaste_interface__ICaL_fCa_gate__fCaB_SL; // dimensionless + const double var_ICaL_fCa_gate__fCa_jct = 1 - var_chaste_interface__ICaL_fCa_gate__fCaB_jct; // dimensionless + const double var_ICab__Fx_CaBk_SL = 0.89000000000000001; // dimensionless + const double var_ICab__Fx_CaBk_jct = 0.11; // dimensionless + const double var_ICab__G_CaBk = 0.00025129999999999998; // milliS_per_microF + const double var_ICap__Fx_SLCaP_SL = 0.89000000000000001; // dimensionless + const double var_ICap__Fx_SLCaP_jct = 0.11; // dimensionless + const double var_ICap__H = 1.6000000000000001; // dimensionless + const double var_ICap__Km = 0.00050000000000000001; // millimolar + const double var_ICap__Q10_SLCaP = 2.3500000000000001; // dimensionless + const double var_ICap__V_maxAF = 0.067299999999999999; // microA_per_microF + const double var_IKs__Fx_Ks_SL = 0.89000000000000001; // dimensionless + const double var_IKs__Fx_Ks_jct = 0.11; // dimensionless + const double var_IKs__pCa_SL = 3 - log10(var_chaste_interface__Ca_buffer__Ca_SL); // dimensionless + const double var_IKs__G_Ks_SL = (0.057000000000000002 + 0.19 / (1 + exp(-12 + 1.6666666666666667 * var_IKs__pCa_SL))) * NV_Ith_S(mParameters, 21); // milliS_per_microF + const double var_IKs__pCa_jct = 3 - log10(var_chaste_interface__Ca_buffer__Ca_jct); // dimensionless + const double var_IKs__G_Ks_jct = (0.057000000000000002 + 0.19 / (1 + exp(-12 + 1.6666666666666667 * var_IKs__pCa_jct))) * NV_Ith_S(mParameters, 21); // milliS_per_microF + const double var_IKs__pKNa = 0.018329999999999999; // dimensionless + const double var_INa__Fx_Na_SL = 0.89000000000000001; // dimensionless + const double var_INa__Fx_Na_jct = 0.11; // dimensionless + const double var_INaCa__Fx_NCX_SL = 0.89000000000000001; // dimensionless + const double var_INaCa__Fx_NCX_jct = 0.11; // dimensionless + const double var_INaCa__HNa = 3; // dimensionless + const double var_INaCa__K_mCai = 0.0035899999999999999; // millimolar + const double var_INaCa__K_mCao = 1.3; // millimolar + const double var_INaCa__K_mNai = 12.289999999999999; // millimolar + const double var_INaCa__K_mNao = 87.5; // millimolar + const double var_INaCa__Kd_act = 0.00025599999999999999; // millimolar + const double var_INaCa__Ka_SL = 1 / (1 + pow(var_INaCa__Kd_act, 3) / pow(var_chaste_interface__Ca_buffer__Ca_SL, 3)); // dimensionless + const double var_INaCa__Ka_jct = 1 / (1 + pow(var_INaCa__Kd_act, 3) / pow(var_chaste_interface__Ca_buffer__Ca_jct, 3)); // dimensionless + const double var_INaCa__Q10_NCX = 1.5700000000000001; // dimensionless + const double var_INaCa__eta = 0.34999999999999998; // dimensionless + const double var_INaCa__ksat = 0.27000000000000002; // dimensionless + const double var_INa__openProb = pow(var_chaste_interface__INa_m_gate__m, 3) * var_chaste_interface__INa_h_gate__h * var_chaste_interface__INa_j_gate__j; // dimensionless + const double var_INab__Fx_NaBk_SL = 0.89000000000000001; // dimensionless + const double var_INab__Fx_NaBk_jct = 0.11; // dimensionless + const double var_INab__G_NaBk = 0.00029700000000000001; // milliS_per_microF + const double var_Jrel_SR__j_rel_SR = (-var_chaste_interface__Ca_buffer__Ca_jct + var_chaste_interface__Ca_buffer__Ca_SR) * var_chaste_interface__Jrel_SR__O * NV_Ith_S(mParameters, 1); // millimolar_per_millisecond + const double var_ICaL_f_gate__tau_f = 1 / (0.02 + 0.019699999999999999 * exp(-0.23877882250000002 * pow((1 + 0.068965517241379309 * var_chaste_interface__cell__V), 2))); // millisecond + const double var_IKr_Rr_gate__Rr = 1 / (1 + exp(1.4732142857142858 + 0.044642857142857144 * var_chaste_interface__cell__V)); // dimensionless + const double var_INa_h_gate__alpha_h = ((var_chaste_interface__cell__V < -40) ? (0.13500000000000001 * exp(-11.764705882352942 + 0.14705882352941177 * NV_Ith_S(mParameters, 17) - 0.14705882352941177 * var_chaste_interface__cell__V)) : (0)); // per_millisecond + const double var_INa_h_gate__beta_h = ((var_chaste_interface__cell__V < -40) ? (310000 * exp(0.34999999999999998 * var_chaste_interface__cell__V - 0.34999999999999998 * NV_Ith_S(mParameters, 17)) + 3.5600000000000001 * exp(0.079000000000000001 * var_chaste_interface__cell__V - 0.079000000000000001 * NV_Ith_S(mParameters, 17))) : (7.6923076923076916 / (1 + exp(-0.96036036036036043 + 0.0900900900900901 * NV_Ith_S(mParameters, 17) - 0.0900900900900901 * var_chaste_interface__cell__V)))); // per_millisecond + const double var_INa_h_gate__tau_h = 1 / (var_INa_h_gate__alpha_h + var_INa_h_gate__beta_h); // millisecond + const double var_INa_j_gate__alpha_j = ((var_chaste_interface__cell__V < -40) ? ((37.780000000000001 + var_chaste_interface__cell__V) * (-127140 * exp(0.24440000000000001 * var_chaste_interface__cell__V - 0.24440000000000001 * NV_Ith_S(mParameters, 17)) - 3.4740000000000003e-5 * exp(0.043909999999999998 * NV_Ith_S(mParameters, 17) - 0.043909999999999998 * var_chaste_interface__cell__V)) / (1 + exp(24.640530000000002 + 0.311 * var_chaste_interface__cell__V - 0.311 * NV_Ith_S(mParameters, 17)))) : (0)); // per_millisecond + const double var_INa_j_gate__beta_j = ((var_chaste_interface__cell__V < -40) ? (0.1212 * exp(0.01052 * NV_Ith_S(mParameters, 17) - 0.01052 * var_chaste_interface__cell__V) / (1 + exp(-5.5312920000000005 + 0.13780000000000001 * NV_Ith_S(mParameters, 17) - 0.13780000000000001 * var_chaste_interface__cell__V))) : (0.29999999999999999 * exp(2.5349999999999999e-7 * NV_Ith_S(mParameters, 17) - 2.5349999999999999e-7 * var_chaste_interface__cell__V) / (1 + exp(-3.2000000000000002 + 0.10000000000000001 * NV_Ith_S(mParameters, 17) - 0.10000000000000001 * var_chaste_interface__cell__V)))); // per_millisecond + const double var_INa_j_gate__tau_j = 1 / (var_INa_j_gate__alpha_j + var_INa_j_gate__beta_j); // millisecond + const double var_cell__i_Stim_converted = GetIntracellularAreaStimulus(var_chaste_interface__environment__time); // uA_per_cm2 + // Special handling of data clamp current here + // (we want to save expense of calling the interpolation method if possible.) + double var_chaste_interface__membrane_data_clamp_current = 0.0; + if (mDataClampIsOn) + { + var_chaste_interface__membrane_data_clamp_current = (-GetExperimentalVoltageAtTimeT(var_chaste_interface__environment__time) + var_chaste_interface__cell__V) * NV_Ith_S(mParameters, 14); // uA_per_cm2 + } + const double var_model_parameters__Cm_per_area = 1.9999999999999999e-6; // farad_per_cm2 + const double var_IK1__G_K1 = 0.43033148291193518 * sqrt(NV_Ith_S(mParameters, 8)) * NV_Ith_S(mParameters, 19); // milliS_per_microF + const double var_IKr__G_IKr = 0.43033148291193518 * sqrt(NV_Ith_S(mParameters, 8)) * NV_Ith_S(mParameters, 20); // milliS_per_microF + const double var_ICaL__Q_CaL = pow(var_ICaL__Q10_CaL, (-31 + 0.10000000000000001 * NV_Ith_S(mParameters, 24))); // dimensionless + const double var_ICaL__temp = 0.45000000000000001 * pow(NV_Ith_S(mParameters, 10), 2) * var_ICaL__Q_CaL * var_chaste_interface__ICaL_d_gate__d * var_chaste_interface__ICaL_f_gate__f * var_chaste_interface__cell__V / (NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 24)); // coulomb_per_mole + const double var_ICaL__i_CaL_Ca_SL = 4 * (-var_ICaL__gamma_Cao * NV_Ith_S(mParameters, 6) + var_chaste_interface__Ca_buffer__Ca_SL * var_ICaL__gamma_Cai * exp(2 * var_chaste_interface__cell__V * NV_Ith_S(mParameters, 10) / (NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 24)))) * var_ICaL__Fx_ICaL_SL * NV_Ith_S(mParameters, 12) * var_ICaL__temp * var_ICaL_fCa_gate__fCa_SL / (-1 + exp(2 * var_chaste_interface__cell__V * NV_Ith_S(mParameters, 10) / (NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 24)))); // microA_per_microF + const double var_ICaL__i_CaL_Ca_jct = 4 * (-var_ICaL__gamma_Cao * NV_Ith_S(mParameters, 6) + var_chaste_interface__Ca_buffer__Ca_jct * var_ICaL__gamma_Cai * exp(2 * var_chaste_interface__cell__V * NV_Ith_S(mParameters, 10) / (NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 24)))) * var_ICaL__Fx_ICaL_jct * NV_Ith_S(mParameters, 12) * var_ICaL__temp * var_ICaL_fCa_gate__fCa_jct / (-1 + exp(2 * var_chaste_interface__cell__V * NV_Ith_S(mParameters, 10) / (NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 24)))); // microA_per_microF + const double var_ICaL__i_CaL_K = (var_ICaL__Fx_ICaL_SL * var_ICaL_fCa_gate__fCa_SL + var_ICaL__Fx_ICaL_jct * var_ICaL_fCa_gate__fCa_jct) * (-var_ICaL__gamma_Ko * NV_Ith_S(mParameters, 8) + var_ICaL__gamma_Ki * NV_Ith_S(mParameters, 5) * exp(var_chaste_interface__cell__V * NV_Ith_S(mParameters, 10) / (NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 24)))) * var_ICaL__PK * var_ICaL__temp / (-1 + exp(var_chaste_interface__cell__V * NV_Ith_S(mParameters, 10) / (NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 24)))); // microA_per_microF + const double var_ICaL__i_CaL_Na_SL = (-var_ICaL__gamma_Nao * NV_Ith_S(mParameters, 9) + var_ICaL__gamma_Nai * var_chaste_interface__Na_buffer__Na_SL * exp(var_chaste_interface__cell__V * NV_Ith_S(mParameters, 10) / (NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 24)))) * var_ICaL__Fx_ICaL_SL * var_ICaL__PNa * var_ICaL__temp * var_ICaL_fCa_gate__fCa_SL / (-1 + exp(var_chaste_interface__cell__V * NV_Ith_S(mParameters, 10) / (NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 24)))); // microA_per_microF + const double var_ICaL__i_CaL_Na_jct = (-var_ICaL__gamma_Nao * NV_Ith_S(mParameters, 9) + var_ICaL__gamma_Nai * var_chaste_interface__Na_buffer__Na_jct * exp(var_chaste_interface__cell__V * NV_Ith_S(mParameters, 10) / (NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 24)))) * var_ICaL__Fx_ICaL_jct * var_ICaL__PNa * var_ICaL__temp * var_ICaL_fCa_gate__fCa_jct / (-1 + exp(var_chaste_interface__cell__V * NV_Ith_S(mParameters, 10) / (NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 24)))); // microA_per_microF + const double var_ICaL__i_CaL = var_ICaL__i_CaL_Ca_SL + var_ICaL__i_CaL_Ca_jct + var_ICaL__i_CaL_K + var_ICaL__i_CaL_Na_SL + var_ICaL__i_CaL_Na_jct; // microA_per_microF + const double var_ICaL__i_CaL_converted = HeartConfig::Instance()->GetCapacitance() * var_ICaL__i_CaL; // uA_per_cm2 + const double var_ICap__Q_SLCaP = pow(var_ICap__Q10_SLCaP, (-31 + 0.10000000000000001 * NV_Ith_S(mParameters, 24))); // dimensionless + const double var_ICap__i_Cap_SL = var_ICap__Fx_SLCaP_SL * var_ICap__Q_SLCaP * var_ICap__V_maxAF / (1 + pow((var_ICap__Km / var_chaste_interface__Ca_buffer__Ca_SL), var_ICap__H)); // microA_per_microF + const double var_ICap__i_Cap_jct = var_ICap__Fx_SLCaP_jct * var_ICap__Q_SLCaP * var_ICap__V_maxAF / (1 + pow((var_ICap__Km / var_chaste_interface__Ca_buffer__Ca_jct), var_ICap__H)); // microA_per_microF + const double var_ICap__i_Cap = var_ICap__i_Cap_SL + var_ICap__i_Cap_jct; // microA_per_microF + const double var_ICap__i_Cap_converted = HeartConfig::Instance()->GetCapacitance() * var_ICap__i_Cap; // uA_per_cm2 + const double var_IKs__E_Ks = NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 24) * log((var_IKs__pKNa * NV_Ith_S(mParameters, 9) + NV_Ith_S(mParameters, 8)) / (var_IKs__pKNa * var_chaste_interface__Na_buffer__Nai + NV_Ith_S(mParameters, 5))) / NV_Ith_S(mParameters, 10); // millivolt + const double var_IKs__i_Ks_SL = pow(var_chaste_interface__IKs_Xs_gate__Xs, 2) * (-var_IKs__E_Ks + var_chaste_interface__cell__V) * var_IKs__Fx_Ks_SL * var_IKs__G_Ks_SL; // microA_per_microF + const double var_IKs__i_Ks_jct = pow(var_chaste_interface__IKs_Xs_gate__Xs, 2) * (-var_IKs__E_Ks + var_chaste_interface__cell__V) * var_IKs__Fx_Ks_jct * var_IKs__G_Ks_jct; // microA_per_microF + const double var_IKs__i_Ks = var_IKs__i_Ks_SL + var_IKs__i_Ks_jct; // microA_per_microF + const double var_IKs__i_Ks_converted = HeartConfig::Instance()->GetCapacitance() * var_IKs__i_Ks; // uA_per_cm2 + const double var_INaCa__Q_NCX = pow(var_INaCa__Q10_NCX, (-31 + 0.10000000000000001 * NV_Ith_S(mParameters, 24))); // dimensionless + const double var_INaCa__temp_SL = (pow(var_chaste_interface__Na_buffer__Na_SL, var_INaCa__HNa) * NV_Ith_S(mParameters, 6) * exp(var_INaCa__eta * var_chaste_interface__cell__V * NV_Ith_S(mParameters, 10) / (NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 24))) - pow(NV_Ith_S(mParameters, 9), var_INaCa__HNa) * var_chaste_interface__Ca_buffer__Ca_SL * exp((-1 + var_INaCa__eta) * var_chaste_interface__cell__V * NV_Ith_S(mParameters, 10) / (NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 24)))) / (1 + var_INaCa__ksat * exp((-1 + var_INaCa__eta) * var_chaste_interface__cell__V * NV_Ith_S(mParameters, 10) / (NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 24)))); // millimolar4 + const double var_INaCa__i_NaCa_SL = var_INaCa__Fx_NCX_SL * var_INaCa__Ka_SL * var_INaCa__Q_NCX * NV_Ith_S(mParameters, 23) * var_INaCa__temp_SL / (pow(var_chaste_interface__Na_buffer__Na_SL, var_INaCa__HNa) * var_INaCa__K_mCao + pow(var_chaste_interface__Na_buffer__Na_SL, var_INaCa__HNa) * NV_Ith_S(mParameters, 6) + pow(NV_Ith_S(mParameters, 9), var_INaCa__HNa) * var_chaste_interface__Ca_buffer__Ca_SL + pow(var_INaCa__K_mNao, var_INaCa__HNa) * (1 + var_chaste_interface__Ca_buffer__Ca_SL / var_INaCa__K_mCai) * var_chaste_interface__Ca_buffer__Ca_SL + pow(NV_Ith_S(mParameters, 9), var_INaCa__HNa) * (1 + pow((var_chaste_interface__Na_buffer__Na_SL / var_INaCa__K_mNai), var_INaCa__HNa)) * var_INaCa__K_mCai); // microA_per_microF + const double var_INaCa__temp_jct = (pow(var_chaste_interface__Na_buffer__Na_jct, var_INaCa__HNa) * NV_Ith_S(mParameters, 6) * exp(var_INaCa__eta * var_chaste_interface__cell__V * NV_Ith_S(mParameters, 10) / (NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 24))) - pow(NV_Ith_S(mParameters, 9), var_INaCa__HNa) * var_chaste_interface__Ca_buffer__Ca_jct * exp((-1 + var_INaCa__eta) * var_chaste_interface__cell__V * NV_Ith_S(mParameters, 10) / (NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 24)))) / (1 + var_INaCa__ksat * exp((-1 + var_INaCa__eta) * var_chaste_interface__cell__V * NV_Ith_S(mParameters, 10) / (NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 24)))); // millimolar4 + const double var_INaCa__i_NaCa_jct = var_INaCa__Fx_NCX_jct * var_INaCa__Ka_jct * var_INaCa__Q_NCX * NV_Ith_S(mParameters, 23) * var_INaCa__temp_jct / (pow(var_chaste_interface__Na_buffer__Na_jct, var_INaCa__HNa) * var_INaCa__K_mCao + pow(var_chaste_interface__Na_buffer__Na_jct, var_INaCa__HNa) * NV_Ith_S(mParameters, 6) + pow(NV_Ith_S(mParameters, 9), var_INaCa__HNa) * var_chaste_interface__Ca_buffer__Ca_jct + pow(var_INaCa__K_mNao, var_INaCa__HNa) * (1 + var_chaste_interface__Ca_buffer__Ca_jct / var_INaCa__K_mCai) * var_chaste_interface__Ca_buffer__Ca_jct + pow(NV_Ith_S(mParameters, 9), var_INaCa__HNa) * (1 + pow((var_chaste_interface__Na_buffer__Na_jct / var_INaCa__K_mNai), var_INaCa__HNa)) * var_INaCa__K_mCai); // microA_per_microF + const double var_INaCa__i_NaCa = var_INaCa__i_NaCa_SL + var_INaCa__i_NaCa_jct; // microA_per_microF + const double var_INaCa__i_NaCa_converted = HeartConfig::Instance()->GetCapacitance() * var_INaCa__i_NaCa; // uA_per_cm2 + const double var_model_parameters__cell_length = 100; // micrometre + const double var_model_parameters__cell_radius = 10.25; // micrometre + const double var_model_parameters__Cm = 2.0e-8 * M_PI * var_model_parameters__Cm_per_area * var_model_parameters__cell_length * var_model_parameters__cell_radius; // farad + const double var_model_parameters__Cm_converted = 1000000 * var_model_parameters__Cm; // uF + const double var_reversal_potentials__E_Ca_SL = 0.5 * NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 24) * log(NV_Ith_S(mParameters, 6) / var_chaste_interface__Ca_buffer__Ca_SL) / NV_Ith_S(mParameters, 10); // millivolt + const double var_ICab__i_Cab_SL = (-var_reversal_potentials__E_Ca_SL + var_chaste_interface__cell__V) * var_ICab__Fx_CaBk_SL * var_ICab__G_CaBk; // microA_per_microF + const double var_reversal_potentials__E_Ca_jct = 0.5 * NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 24) * log(NV_Ith_S(mParameters, 6) / var_chaste_interface__Ca_buffer__Ca_jct) / NV_Ith_S(mParameters, 10); // millivolt + const double var_ICab__i_Cab_jct = (-var_reversal_potentials__E_Ca_jct + var_chaste_interface__cell__V) * var_ICab__Fx_CaBk_jct * var_ICab__G_CaBk; // microA_per_microF + const double var_ICab__i_Cab = var_ICab__i_Cab_SL + var_ICab__i_Cab_jct; // microA_per_microF + const double var_ICab__i_Cab_converted = HeartConfig::Instance()->GetCapacitance() * var_ICab__i_Cab; // uA_per_cm2 + const double var_reversal_potentials__E_Cl = -NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 24) * log(NV_Ith_S(mParameters, 7) / NV_Ith_S(mParameters, 4)) / NV_Ith_S(mParameters, 10); // millivolt + const double var_IClb__i_Clb = (-var_reversal_potentials__E_Cl + var_chaste_interface__cell__V) * NV_Ith_S(mParameters, 13); // microA_per_microF + const double var_IClb__i_Clb_converted = HeartConfig::Instance()->GetCapacitance() * var_IClb__i_Clb; // uA_per_cm2 + const double var_reversal_potentials__E_K = NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 24) * log(NV_Ith_S(mParameters, 8) / NV_Ith_S(mParameters, 5)) / NV_Ith_S(mParameters, 10); // millivolt + const double var_IK1_K1_gate__alpha_K1 = 1.02 / (1 + exp(-14.1227775 + 0.23849999999999999 * var_chaste_interface__cell__V - 0.23849999999999999 * var_reversal_potentials__E_K)); // per_millisecond + const double var_IK1_K1_gate__beta_K1 = (exp(-36.698642499999998 + 0.061749999999999999 * var_chaste_interface__cell__V - 0.061749999999999999 * var_reversal_potentials__E_K) + 0.49124000000000001 * exp(0.43983232 + 0.080320000000000003 * var_chaste_interface__cell__V - 0.080320000000000003 * var_reversal_potentials__E_K)) / (1 + exp(-2.4444678999999998 + 0.51429999999999998 * var_reversal_potentials__E_K - 0.51429999999999998 * var_chaste_interface__cell__V)); // per_millisecond + const double var_IK1_K1_gate__K1_infinity = var_IK1_K1_gate__alpha_K1 / (var_IK1_K1_gate__alpha_K1 + var_IK1_K1_gate__beta_K1); // dimensionless + const double var_IK1__i_K1 = (-var_reversal_potentials__E_K + var_chaste_interface__cell__V) * var_IK1__G_K1 * var_IK1_K1_gate__K1_infinity; // microA_per_microF + const double var_IK1__i_K1_converted = HeartConfig::Instance()->GetCapacitance() * var_IK1__i_K1; // uA_per_cm2 + const double var_IKr__i_Kr = (-var_reversal_potentials__E_K + var_chaste_interface__cell__V) * var_IKr__G_IKr * var_IKr_Rr_gate__Rr * var_chaste_interface__IKr_Xr_gate__Xr; // microA_per_microF + const double var_IKr__i_Kr_converted = HeartConfig::Instance()->GetCapacitance() * var_IKr__i_Kr; // uA_per_cm2 + const double var_Itof__i_tof = (-var_reversal_potentials__E_K + var_chaste_interface__cell__V) * NV_Ith_S(mParameters, 18) * var_chaste_interface__Itof_X_gate__X_tof * var_chaste_interface__Itof_Y_gate__Y_tof; // microA_per_microF + const double var_Itof__i_tof_converted = HeartConfig::Instance()->GetCapacitance() * var_Itof__i_tof; // uA_per_cm2 + const double var_Itos__i_tos = (-var_reversal_potentials__E_K + var_chaste_interface__cell__V) * (0.5 * var_chaste_interface__Itos_R_gate__R_tos + var_chaste_interface__Itos_Y_gate__Y_tos) * NV_Ith_S(mParameters, 22) * var_chaste_interface__Itos_X_gate__X_tos; // microA_per_microF + const double var_Itos__i_tos_converted = HeartConfig::Instance()->GetCapacitance() * var_Itos__i_tos; // uA_per_cm2 + const double var_reversal_potentials__E_Na_SL = NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 24) * log(NV_Ith_S(mParameters, 9) / var_chaste_interface__Na_buffer__Na_SL) / NV_Ith_S(mParameters, 10); // millivolt + const double var_INa__i_Na_SL = (-var_reversal_potentials__E_Na_SL + var_chaste_interface__cell__V) * var_INa__Fx_Na_SL * NV_Ith_S(mParameters, 15) * var_INa__openProb; // microA_per_microF + const double var_INab__i_Nab_SL = (-var_reversal_potentials__E_Na_SL + var_chaste_interface__cell__V) * var_INab__Fx_NaBk_SL * var_INab__G_NaBk; // microA_per_microF + const double var_reversal_potentials__E_Na_jct = NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 24) * log(NV_Ith_S(mParameters, 9) / var_chaste_interface__Na_buffer__Na_jct) / NV_Ith_S(mParameters, 10); // millivolt + const double var_INa__i_Na_jct = (-var_reversal_potentials__E_Na_jct + var_chaste_interface__cell__V) * var_INa__Fx_Na_jct * NV_Ith_S(mParameters, 15) * var_INa__openProb; // microA_per_microF + const double var_INa__i_Na = var_INa__i_Na_SL + var_INa__i_Na_jct; // microA_per_microF + const double var_INa__i_Na_converted = HeartConfig::Instance()->GetCapacitance() * var_INa__i_Na; // uA_per_cm2 + const double var_INab__i_Nab_jct = (-var_reversal_potentials__E_Na_jct + var_chaste_interface__cell__V) * var_INab__Fx_NaBk_jct * var_INab__G_NaBk; // microA_per_microF + const double var_INab__i_Nab = var_INab__i_Nab_SL + var_INab__i_Nab_jct; // microA_per_microF + const double var_INab__i_Nab_converted = HeartConfig::Instance()->GetCapacitance() * var_INab__i_Nab; // uA_per_cm2 + +#if CHASTE_SUNDIALS_VERSION >= 60000 + N_Vector dqs = N_VNew_Serial(24, CvodeContextManager::Instance()->GetSundialsContext()); +#else + N_Vector dqs = N_VNew_Serial(24); +#endif + NV_Ith_S(dqs, 0) = var_Jrel_SR__j_rel_SR; + NV_Ith_S(dqs, 1) = var_reversal_potentials__E_Cl; + NV_Ith_S(dqs, 2) = var_ICaL__i_CaL_converted; + NV_Ith_S(dqs, 3) = var_ICaL_fCa_gate__fCa_SL; + NV_Ith_S(dqs, 4) = var_ICaL_f_gate__tau_f; + NV_Ith_S(dqs, 5) = var_ICab__i_Cab_converted; + NV_Ith_S(dqs, 6) = var_IClb__i_Clb_converted; + NV_Ith_S(dqs, 7) = var_INab__i_Nab_converted; + NV_Ith_S(dqs, 8) = var_ICap__i_Cap_converted; + NV_Ith_S(dqs, 9) = var_model_parameters__Cm_converted; + NV_Ith_S(dqs, 10) = var_chaste_interface__membrane_data_clamp_current; + NV_Ith_S(dqs, 11) = var_INa__i_Na_converted; + NV_Ith_S(dqs, 12) = var_INa_h_gate__tau_h; + NV_Ith_S(dqs, 13) = var_INa_j_gate__tau_j; + NV_Ith_S(dqs, 14) = var_Itof__i_tof_converted; + NV_Ith_S(dqs, 15) = var_IK1__i_K1_converted; + NV_Ith_S(dqs, 16) = var_IK1__G_K1; + NV_Ith_S(dqs, 17) = var_IKr__i_Kr_converted; + NV_Ith_S(dqs, 18) = var_IKs__i_Ks_converted; + NV_Ith_S(dqs, 19) = var_Itos__i_tos_converted; + NV_Ith_S(dqs, 20) = var_INaCa__i_NaCa_converted; + NV_Ith_S(dqs, 21) = var_cell__i_Stim_converted; + NV_Ith_S(dqs, 22) = var_reversal_potentials__E_K; + NV_Ith_S(dqs, 23) = var_chaste_interface__environment__time; + return dqs; + } + +template<> +void OdeSystemInformation::Initialise(void) +{ + this->mSystemName = "shannon_wang_puglisi_weber_bers_2004_model_updated"; + this->mFreeVariableName = "time"; + this->mFreeVariableUnits = "millisecond"; + + // NV_Ith_S(rY, 0): + this->mVariableNames.push_back("membrane_voltage"); + this->mVariableUnits.push_back("millivolt"); + this->mInitialConditions.push_back(-85.721630473733); + + // NV_Ith_S(rY, 1): + this->mVariableNames.push_back("cytosolic_calcium_concentration"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(8.6504944644883e-05); + + // NV_Ith_S(rY, 2): + this->mVariableNames.push_back("membrane_fast_sodium_current_h_gate"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.98714602875678); + + // NV_Ith_S(rY, 3): + this->mVariableNames.push_back("membrane_fast_sodium_current_j_gate"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.991826348770428); + + // NV_Ith_S(rY, 4): + this->mVariableNames.push_back("membrane_fast_sodium_current_m_gate"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.0013702407736465); + + // NV_Ith_S(rY, 5): + this->mVariableNames.push_back("IKr_Xr_gate__Xr"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.00846906175020028); + + // NV_Ith_S(rY, 6): + this->mVariableNames.push_back("IKs_Xs_gate__Xs"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.00613557812033723); + + // NV_Ith_S(rY, 7): + this->mVariableNames.push_back("Itos_X_gate__X_tos"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.00401072468238921); + + // NV_Ith_S(rY, 8): + this->mVariableNames.push_back("Itos_Y_gate__Y_tos"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.31555225368514); + + // NV_Ith_S(rY, 9): + this->mVariableNames.push_back("Itos_R_gate__R_tos"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.402577243036347); + + // NV_Ith_S(rY, 10): + this->mVariableNames.push_back("Itof_X_gate__X_tof"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.00401068798369438); + + // NV_Ith_S(rY, 11): + this->mVariableNames.push_back("Itof_Y_gate__Y_tof"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.994632857675454); + + // NV_Ith_S(rY, 12): + this->mVariableNames.push_back("membrane_L_type_calcium_current_d_gate"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(6.99526086177479e-06); + + // NV_Ith_S(rY, 13): + this->mVariableNames.push_back("membrane_L_type_calcium_current_f_gate"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(1.00067601563206); + + // NV_Ith_S(rY, 14): + this->mVariableNames.push_back("ICaL_fCa_gate__fCaB_SL"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.0150193299768419); + + // NV_Ith_S(rY, 15): + this->mVariableNames.push_back("ICaL_fCa_gate__fCaB_jct"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.0244048782575591); + + // NV_Ith_S(rY, 16): + this->mVariableNames.push_back("Jrel_SR__R"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.890917121306535); + + // NV_Ith_S(rY, 17): + this->mVariableNames.push_back("Jrel_SR__I"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(8.71752603681652e-08); + + // NV_Ith_S(rY, 18): + this->mVariableNames.push_back("Jrel_SR__O"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(7.1199533741995e-07); + + // NV_Ith_S(rY, 19): + this->mVariableNames.push_back("submembrane_space_sodium_concentration"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(8.87161932058707); + + // NV_Ith_S(rY, 20): + this->mVariableNames.push_back("dyadic_space_sodium_concentration"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(8.87031835089116); + + // NV_Ith_S(rY, 21): + this->mVariableNames.push_back("Na_buffer__Na_SL_buf"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(0.77606800956492); + + // NV_Ith_S(rY, 22): + this->mVariableNames.push_back("Na_buffer__Na_jct_buf"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(3.55668431730337); + + // NV_Ith_S(rY, 23): + this->mVariableNames.push_back("cytosolic_sodium_concentration"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(8.87200572571131); + + // NV_Ith_S(rY, 24): + this->mVariableNames.push_back("JSR_calcium_concentration"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(0.547125831028543); + + // NV_Ith_S(rY, 25): + this->mVariableNames.push_back("submembrane_space_calcium_concentration"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(0.000104971310105451); + + // NV_Ith_S(rY, 26): + this->mVariableNames.push_back("dyadic_space_calcium_concentration"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(0.000174045152623969); + + // NV_Ith_S(rY, 27): + this->mVariableNames.push_back("Ca_buffer__Ca_SLB_SL"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(0.00973710481246467); + + // NV_Ith_S(rY, 28): + this->mVariableNames.push_back("Ca_buffer__Ca_SLB_jct"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(0.00774564218017916); + + // NV_Ith_S(rY, 29): + this->mVariableNames.push_back("Ca_buffer__Ca_SLHigh_SL"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(0.113168405274355); + + // NV_Ith_S(rY, 30): + this->mVariableNames.push_back("Ca_buffer__Ca_SLHigh_jct"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(0.0772568134367606); + + // NV_Ith_S(rY, 31): + this->mVariableNames.push_back("Ca_buffer__Ca_Calsequestrin"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(1.18828527890062); + + // NV_Ith_S(rY, 32): + this->mVariableNames.push_back("cytosolic_Ca_buffer__Ca_TroponinC"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(0.00886665040283094); + + // NV_Ith_S(rY, 33): + this->mVariableNames.push_back("cytosolic_Ca_buffer__Ca_TroponinC_Ca_Mg"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(0.117873278193472); + + // NV_Ith_S(rY, 34): + this->mVariableNames.push_back("cytosolic_Ca_buffer__Mg_TroponinC_Ca_Mg"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(0.0103906683506505); + + // NV_Ith_S(rY, 35): + this->mVariableNames.push_back("cytosolic_Ca_buffer__Ca_Calmodulin"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(0.000293073957804278); + + // NV_Ith_S(rY, 36): + this->mVariableNames.push_back("cytosolic_Ca_buffer__Ca_Myosin"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(0.00195899238146509); + + // NV_Ith_S(rY, 37): + this->mVariableNames.push_back("cytosolic_Ca_buffer__Mg_Myosin"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(0.137523520981802); + + // NV_Ith_S(rY, 38): + this->mVariableNames.push_back("cytosolic_Ca_buffer__Ca_SRB"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(0.00215728901718264); + + // NV_Ith_S(rY, 39): + this->mVariableNames.push_back("indo_fluo_Ca_buffer_not_connected__Ca_Indo1_Cytosol"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(0.0); + + // NV_Ith_S(rY, 40): + this->mVariableNames.push_back("indo_fluo_Ca_buffer_not_connected__Ca_Indo1_SL"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(0.0); + + // NV_Ith_S(rY, 41): + this->mVariableNames.push_back("indo_fluo_Ca_buffer_not_connected__Ca_Indo1_jct"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(0.0); + + // NV_Ith_S(rY, 42): + this->mVariableNames.push_back("indo_fluo_Ca_buffer_not_connected__Ca_Fluo3_Cytosol"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(0.0); + + // NV_Ith_S(rY, 43): + this->mVariableNames.push_back("indo_fluo_Ca_buffer_not_connected__Ca_Fluo3_SL"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(0.0); + + // NV_Ith_S(rY, 44): + this->mVariableNames.push_back("indo_fluo_Ca_buffer_not_connected__Ca_Fluo3_jct"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(0.0); + + // mParameters[0]: + this->mParameterNames.push_back("SR_leak_current_max"); + this->mParameterUnits.push_back("per_millisecond"); + + // mParameters[1]: + this->mParameterNames.push_back("SR_release_current_max"); + this->mParameterUnits.push_back("per_millisecond"); + + // mParameters[2]: + this->mParameterNames.push_back("SR_uptake_current_max"); + this->mParameterUnits.push_back("millimolar_per_millisecond"); + + // mParameters[3]: + this->mParameterNames.push_back("concentration_clamp_onoff"); + this->mParameterUnits.push_back("dimensionless"); + + // mParameters[4]: + this->mParameterNames.push_back("cytosolic_chloride_concentration"); + this->mParameterUnits.push_back("millimolar"); + + // mParameters[5]: + this->mParameterNames.push_back("cytosolic_potassium_concentration"); + this->mParameterUnits.push_back("millimolar"); + + // mParameters[6]: + this->mParameterNames.push_back("extracellular_calcium_concentration"); + this->mParameterUnits.push_back("millimolar"); + + // mParameters[7]: + this->mParameterNames.push_back("extracellular_chloride_concentration"); + this->mParameterUnits.push_back("millimolar"); + + // mParameters[8]: + this->mParameterNames.push_back("extracellular_potassium_concentration"); + this->mParameterUnits.push_back("millimolar"); + + // mParameters[9]: + this->mParameterNames.push_back("extracellular_sodium_concentration"); + this->mParameterUnits.push_back("millimolar"); + + // mParameters[10]: + this->mParameterNames.push_back("faraday_constant"); + this->mParameterUnits.push_back("coulomb_per_mole"); + + // mParameters[11]: + this->mParameterNames.push_back("gas_constant"); + this->mParameterUnits.push_back("joule_per_kilomole_kelvin"); + + // mParameters[12]: + this->mParameterNames.push_back("membrane_L_type_calcium_current_conductance"); + this->mParameterUnits.push_back("litre_per_farad_millisecond"); + + // mParameters[13]: + this->mParameterNames.push_back("membrane_background_chloride_current_conductance"); + this->mParameterUnits.push_back("milliS_per_microF"); + + // mParameters[14]: + this->mParameterNames.push_back("membrane_data_clamp_current_conductance"); + this->mParameterUnits.push_back("dimensionless"); + + // mParameters[15]: + this->mParameterNames.push_back("membrane_fast_sodium_current_conductance"); + this->mParameterUnits.push_back("milliS_per_microF"); + + // mParameters[16]: + this->mParameterNames.push_back("membrane_fast_sodium_current_reduced_inactivation"); + this->mParameterUnits.push_back("dimensionless"); + + // mParameters[17]: + this->mParameterNames.push_back("membrane_fast_sodium_current_shift_inactivation"); + this->mParameterUnits.push_back("millivolt"); + + // mParameters[18]: + this->mParameterNames.push_back("membrane_fast_transient_outward_current_conductance"); + this->mParameterUnits.push_back("milliS_per_microF"); + + // mParameters[19]: + this->mParameterNames.push_back("membrane_inward_rectifier_potassium_current_conductance_scaling_factor"); + this->mParameterUnits.push_back("milliS_per_microF"); + + // mParameters[20]: + this->mParameterNames.push_back("membrane_rapid_delayed_rectifier_potassium_current_conductance"); + this->mParameterUnits.push_back("milliS_per_microF"); + + // mParameters[21]: + this->mParameterNames.push_back("membrane_slow_delayed_rectifier_potassium_current_conductance"); + this->mParameterUnits.push_back("milliS_per_microF"); + + // mParameters[22]: + this->mParameterNames.push_back("membrane_slow_transient_outward_current_conductance"); + this->mParameterUnits.push_back("milliS_per_microF"); + + // mParameters[23]: + this->mParameterNames.push_back("membrane_sodium_calcium_exchanger_current_conductance"); + this->mParameterUnits.push_back("microA_per_microF"); + + // mParameters[24]: + this->mParameterNames.push_back("temperature"); + this->mParameterUnits.push_back("kelvin"); + + // Derived Quantity index [0]: + this->mDerivedQuantityNames.push_back("SR_release_current"); + this->mDerivedQuantityUnits.push_back("millimolar_per_millisecond"); + + // Derived Quantity index [1]: + this->mDerivedQuantityNames.push_back("chloride_reversal_potential"); + this->mDerivedQuantityUnits.push_back("millivolt"); + + // Derived Quantity index [2]: + this->mDerivedQuantityNames.push_back("membrane_L_type_calcium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [3]: + this->mDerivedQuantityNames.push_back("membrane_L_type_calcium_current_fCa_gate"); + this->mDerivedQuantityUnits.push_back("dimensionless"); + + // Derived Quantity index [4]: + this->mDerivedQuantityNames.push_back("membrane_L_type_calcium_current_f_gate_tau"); + this->mDerivedQuantityUnits.push_back("millisecond"); + + // Derived Quantity index [5]: + this->mDerivedQuantityNames.push_back("membrane_background_calcium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [6]: + this->mDerivedQuantityNames.push_back("membrane_background_chloride_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [7]: + this->mDerivedQuantityNames.push_back("membrane_background_sodium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [8]: + this->mDerivedQuantityNames.push_back("membrane_calcium_pump_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [9]: + this->mDerivedQuantityNames.push_back("membrane_capacitance"); + this->mDerivedQuantityUnits.push_back("uF"); + + // Derived Quantity index [10]: + this->mDerivedQuantityNames.push_back("membrane_data_clamp_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [11]: + this->mDerivedQuantityNames.push_back("membrane_fast_sodium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [12]: + this->mDerivedQuantityNames.push_back("membrane_fast_sodium_current_h_gate_tau"); + this->mDerivedQuantityUnits.push_back("millisecond"); + + // Derived Quantity index [13]: + this->mDerivedQuantityNames.push_back("membrane_fast_sodium_current_j_gate_tau"); + this->mDerivedQuantityUnits.push_back("millisecond"); + + // Derived Quantity index [14]: + this->mDerivedQuantityNames.push_back("membrane_fast_transient_outward_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [15]: + this->mDerivedQuantityNames.push_back("membrane_inward_rectifier_potassium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [16]: + this->mDerivedQuantityNames.push_back("membrane_inward_rectifier_potassium_current_conductance"); + this->mDerivedQuantityUnits.push_back("milliS_per_microF"); + + // Derived Quantity index [17]: + this->mDerivedQuantityNames.push_back("membrane_rapid_delayed_rectifier_potassium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [18]: + this->mDerivedQuantityNames.push_back("membrane_slow_delayed_rectifier_potassium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [19]: + this->mDerivedQuantityNames.push_back("membrane_slow_transient_outward_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [20]: + this->mDerivedQuantityNames.push_back("membrane_sodium_calcium_exchanger_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [21]: + this->mDerivedQuantityNames.push_back("membrane_stimulus_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [22]: + this->mDerivedQuantityNames.push_back("potassium_reversal_potential"); + this->mDerivedQuantityUnits.push_back("millivolt"); + + // Derived Quantity index [23]: + this->mDerivedQuantityNames.push_back("time"); + this->mDerivedQuantityUnits.push_back("millisecond"); + + this->mInitialised = true; +} + +// Serialization for Boost >= 1.36 +#include "SerializationExportWrapperForCpp.hpp" +CHASTE_CLASS_EXPORT(Dynamicshannon_wang_puglisi_weber_bers_2004FromCellMLCvodeDataClamp) +extern "C" +{ + AbstractCardiacCellInterface* MakeCardiacCell( + boost::shared_ptr pSolver, + boost::shared_ptr pStimulus) + { + return new Dynamicshannon_wang_puglisi_weber_bers_2004FromCellMLCvodeDataClamp(pSolver, pStimulus); + } + +} +#endif // CHASTE_CVODE diff --git a/chaste_codegen/tests/numerical/baseline/CVODE_DATA_CLAMP/dynamic_Shannon2004.hpp b/chaste_codegen/tests/numerical/baseline/CVODE_DATA_CLAMP/dynamic_Shannon2004.hpp new file mode 100644 index 00000000..4071989a --- /dev/null +++ b/chaste_codegen/tests/numerical/baseline/CVODE_DATA_CLAMP/dynamic_Shannon2004.hpp @@ -0,0 +1,87 @@ +#ifdef CHASTE_CVODE +#ifndef DYNAMICSHANNON_WANG_PUGLISI_WEBER_BERS_2004FROMCELLMLCVODEDATACLAMP_HPP_ +#define DYNAMICSHANNON_WANG_PUGLISI_WEBER_BERS_2004FROMCELLMLCVODEDATACLAMP_HPP_ + +//! @file +//! +//! This source file was generated from CellML by chaste_codegen version (version omitted as unimportant) +//! +//! Model: shannon_wang_puglisi_weber_bers_2004_model_updated +//! +//! Processed by chaste_codegen: https://github.com/ModellingWebLab/chaste-codegen +//! (translator: chaste_codegen, model type: CvodeCellWithDataClamp) +//! on (date omitted as unimportant) +//! +//! + +#include "ChasteSerialization.hpp" +#include +#include "AbstractDynamicallyLoadableEntity.hpp" +#include "AbstractStimulusFunction.hpp" +#include "AbstractCvodeCellWithDataClamp.hpp" + +class Dynamicshannon_wang_puglisi_weber_bers_2004FromCellMLCvodeDataClamp : public AbstractCvodeCellWithDataClamp, public AbstractDynamicallyLoadableEntity +{ + friend class boost::serialization::access; + template + void serialize(Archive & archive, const unsigned int version) + { + archive & boost::serialization::base_object(*this); + archive & boost::serialization::base_object(*this); + } + + // + // Settable parameters and readable variables + // + + +private: +const bool is_concentration[45] = {false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, true, false, false, true, true, true, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false}; +const bool is_probability[45] = {false, false, true, true, true, false, false, false, false, false, false, false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false}; +public: + + boost::shared_ptr UseCellMLDefaultStimulus(); + double GetIntracellularCalciumConcentration(); + Dynamicshannon_wang_puglisi_weber_bers_2004FromCellMLCvodeDataClamp(boost::shared_ptr pOdeSolver /* unused; should be empty */, boost::shared_ptr pIntracellularStimulus); + ~Dynamicshannon_wang_puglisi_weber_bers_2004FromCellMLCvodeDataClamp(); + void VerifyStateVariables(); + double GetIIonic(const std::vector* pStateVariables=NULL); + void EvaluateYDerivatives(double var_chaste_interface__environment__time, const N_Vector rY, N_Vector rDY); + N_Vector ComputeDerivedQuantities(double var_chaste_interface__environment__time, const N_Vector & rY); +}; + +// Needs to be included last +#include "SerializationExportWrapper.hpp" +CHASTE_CLASS_EXPORT(Dynamicshannon_wang_puglisi_weber_bers_2004FromCellMLCvodeDataClamp) + +namespace boost +{ + namespace serialization + { + template + inline void save_construct_data( + Archive & ar, const Dynamicshannon_wang_puglisi_weber_bers_2004FromCellMLCvodeDataClamp * t, const unsigned int fileVersion) + { + const boost::shared_ptr p_solver = t->GetSolver(); + const boost::shared_ptr p_stimulus = t->GetStimulusFunction(); + ar << p_solver; + ar << p_stimulus; + } + + template + inline void load_construct_data( + Archive & ar, Dynamicshannon_wang_puglisi_weber_bers_2004FromCellMLCvodeDataClamp * t, const unsigned int fileVersion) + { + boost::shared_ptr p_solver; + boost::shared_ptr p_stimulus; + ar >> p_solver; + ar >> p_stimulus; + ::new(t)Dynamicshannon_wang_puglisi_weber_bers_2004FromCellMLCvodeDataClamp(p_solver, p_stimulus); + } + + } + +} + +#endif // DYNAMICSHANNON_WANG_PUGLISI_WEBER_BERS_2004FROMCELLMLCVODEDATACLAMP_HPP_ +#endif // CHASTE_CVODE \ No newline at end of file diff --git a/chaste_codegen/tests/numerical/baseline/CVODE_DATA_CLAMP/grandi_pasqualini_bers_2010_ssCvodeDataClamp.cpp b/chaste_codegen/tests/numerical/baseline/CVODE_DATA_CLAMP/grandi_pasqualini_bers_2010_ssCvodeDataClamp.cpp new file mode 100644 index 00000000..2168088f --- /dev/null +++ b/chaste_codegen/tests/numerical/baseline/CVODE_DATA_CLAMP/grandi_pasqualini_bers_2010_ssCvodeDataClamp.cpp @@ -0,0 +1,1312 @@ +#ifdef CHASTE_CVODE +//! @file +//! +//! This source file was generated from CellML by chaste_codegen version (version omitted as unimportant) +//! +//! Model: grandi_pasqualini_bers_2010_epi +//! +//! Processed by chaste_codegen: https://github.com/ModellingWebLab/chaste-codegen +//! (translator: chaste_codegen, model type: CvodeCellWithDataClamp) +//! on (date omitted as unimportant) +//! +//! + +#include "grandi_pasqualini_bers_2010_ssCvodeDataClamp.hpp" +#include +#include +#include +#include +#include "Exception.hpp" +#include "OdeSystemInformation.hpp" +#include "RegularStimulus.hpp" +#include "HeartConfig.hpp" +#include "IsNan.hpp" +#include "MathsCustomFunctions.hpp" + +#if CHASTE_SUNDIALS_VERSION >= 60000 +#include "CvodeContextManager.hpp" +#endif + +#include "ModelFactory.hpp" + +AbstractCvodeCellWithDataClamp* Cellgrandi_pasqualini_bers_2010_ssFromCellMLCvodeDataClamp::CreateMethod(boost::shared_ptr p_solver, boost::shared_ptr p_stimulus) { + return new Cellgrandi_pasqualini_bers_2010_ssFromCellMLCvodeDataClamp(p_solver, p_stimulus); +} + +bool Cellgrandi_pasqualini_bers_2010_ssFromCellMLCvodeDataClamp::registered = ModelFactory::Register("grandi_pasqualini_bers_2010_ss", "CvodeCellWithDataClamp", (ModelFactory::TCreateMethod)Cellgrandi_pasqualini_bers_2010_ssFromCellMLCvodeDataClamp::CreateMethod); + + + + boost::shared_ptr Cellgrandi_pasqualini_bers_2010_ssFromCellMLCvodeDataClamp::UseCellMLDefaultStimulus() + { + // Use the default stimulus specified by CellML metadata + const double var_chaste_interface__membrane_potential__stim_amplitude_converted = -9.5 * HeartConfig::Instance()->GetCapacitance(); // uA_per_cm2 + const double var_chaste_interface__membrane_potential__stim_duration = 5; // msec + const double var_chaste_interface__membrane_potential__stim_period = 1000; // msec + const double var_chaste_interface__membrane_potential__stim_start = 100; // msec + boost::shared_ptr p_cellml_stim(new RegularStimulus( + -fabs(var_chaste_interface__membrane_potential__stim_amplitude_converted), + var_chaste_interface__membrane_potential__stim_duration, + var_chaste_interface__membrane_potential__stim_period, + var_chaste_interface__membrane_potential__stim_start + )); + mpIntracellularStimulus = p_cellml_stim; + return p_cellml_stim; + } + + double Cellgrandi_pasqualini_bers_2010_ssFromCellMLCvodeDataClamp::GetIntracellularCalciumConcentration() + { + return NV_Ith_S(mStateVariables, 1); + } + + Cellgrandi_pasqualini_bers_2010_ssFromCellMLCvodeDataClamp::Cellgrandi_pasqualini_bers_2010_ssFromCellMLCvodeDataClamp(boost::shared_ptr pOdeSolver /* unused; should be empty */, boost::shared_ptr pIntracellularStimulus) + : AbstractCvodeCellWithDataClamp( + pOdeSolver, + 39, + 0, + pIntracellularStimulus) + { + // Time units: millisecond + // + this->mpSystemInfo = OdeSystemInformation::Instance(); + Init(); + + // We have a default stimulus specified in the CellML file metadata + this->mHasDefaultStimulusFromCellML = true; + + NV_Ith_S(this->mParameters, 0) = 5.3480000000000003e-6; // (var_SR_Fluxes__SR_leak_max) [per_msec] + NV_Ith_S(this->mParameters, 1) = 25; // (var_parameters__ks) [per_msec] + NV_Ith_S(this->mParameters, 2) = 0.0053114; // (var_parameters__Vmax_SRCaP) [mM_per_msec] + NV_Ith_S(this->mParameters, 3) = 1; // (var_Na_Concentrations__conc_clamp) [dimensionless] + NV_Ith_S(this->mParameters, 4) = 15; // (var_parameters__Cli) [mM] + NV_Ith_S(this->mParameters, 5) = 1.8; // (var_parameters__Cao) [mM] + NV_Ith_S(this->mParameters, 6) = 150; // (var_parameters__Clo) [mM] + NV_Ith_S(this->mParameters, 7) = 5.4000000000000004; // (var_parameters__Ko) [mM] + NV_Ith_S(this->mParameters, 8) = 140; // (var_parameters__Nao) [mM] + NV_Ith_S(this->mParameters, 9) = 96485; // (var_parameters__Frdy) [coulomb_per_mole] + NV_Ith_S(this->mParameters, 10) = 8314; // (var_parameters__R) [joule_per_kelvin_per_kilomole] + NV_Ith_S(this->mParameters, 11) = 0.5; // (var_parameters__pCa_max) [cm_per_sec] + NV_Ith_S(this->mParameters, 12) = 0; // (var_membrane_data_clamp_current_conductance) [dimensionless] + NV_Ith_S(this->mParameters, 13) = 23; // (var_parameters__GNa) [mS_per_uF] + NV_Ith_S(this->mParameters, 14) = 0; // (var_I_Na__perc_reduced_inact_for_IpNa) [dimensionless] + NV_Ith_S(this->mParameters, 15) = 0; // (var_I_Na__shift_INa_inact) [mV] + NV_Ith_S(this->mParameters, 16) = 1; // (var_I_to__GtoFast_factor) [dimensionless] + NV_Ith_S(this->mParameters, 17) = 0.34999999999999998; // (var_I_Ki__g_ki_factor) [mS_per_uF] + NV_Ith_S(this->mParameters, 18) = 0.035000000000000003; // (var_I_Kr__gkr_max) [mS_per_uF] + NV_Ith_S(this->mParameters, 19) = 1; // (var_I_Ks__GKs_factor) [dimensionless] + NV_Ith_S(this->mParameters, 20) = 1; // (var_I_to__GtoSlow_factor) [dimensionless] + NV_Ith_S(this->mParameters, 21) = 4.5; // (var_parameters__IbarNCX) [uA_per_uF] + NV_Ith_S(this->mParameters, 22) = 1.8; // (var_parameters__IbarNaK) [uA_per_uF] + NV_Ith_S(this->mParameters, 23) = 1.3809999999999999e-10; // (var_parameters__Cmem) [farad] + NV_Ith_S(this->mParameters, 24) = 310; // (var_parameters__Temp) [kelvin] + } + + Cellgrandi_pasqualini_bers_2010_ssFromCellMLCvodeDataClamp::~Cellgrandi_pasqualini_bers_2010_ssFromCellMLCvodeDataClamp() + { + } + + + void Cellgrandi_pasqualini_bers_2010_ssFromCellMLCvodeDataClamp::VerifyStateVariables() + { + + const double tol = 100*this->mAbsTol; + N_Vector rY = rGetStateVariables(); + std::string error_message = ""; + + for (unsigned i=0; i < 39; i++) + { + if(std::isnan(NV_Ith_S(rY, i))){ + error_message += "State variable " + this->rGetStateVariableNames()[i] + " is not a number\n"; + } + if(std::isinf(NV_Ith_S(rY, i))){ + error_message += "State variable " + this->rGetStateVariableNames()[i] + " has become INFINITE\n"; + } + if(this->is_concentration[i] && NV_Ith_S(rY, i) < -tol) + { + error_message += "Concentration " + this->rGetStateVariableNames()[i] + " below 0\n"; + } + if(this->is_probability[i] && NV_Ith_S(rY, i) < -tol) + { + error_message += "Probability " + this->rGetStateVariableNames()[i] + " below 0\n"; + } + if(this->is_probability[i] && NV_Ith_S(rY, i) > 1 + tol) + { + error_message += "Probability " + this->rGetStateVariableNames()[i] + " above 1\n"; + } + } + if (error_message != ""){ + EXCEPTION(DumpState(error_message)); + } + } + + double Cellgrandi_pasqualini_bers_2010_ssFromCellMLCvodeDataClamp::GetIIonic(const std::vector* pStateVariables) + { + // For state variable interpolation (SVI) we read in interpolated state variables, + // otherwise for ionic current interpolation (ICI) we use the state variables of this model (node). + N_Vector rY; + bool made_new_cvode_vector = false; + if (!pStateVariables) + { + rY = rGetStateVariables(); + } + else + { + made_new_cvode_vector = true; + rY = MakeNVector(*pStateVariables); + } + double var_chaste_interface__membrane_potential__V_m = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : NV_Ith_S(rY, 0)); + // Units: mV; Initial value: -81.4229700631461 + double var_chaste_interface__I_Na__m = NV_Ith_S(rY, 2); + // Units: dimensionless; Initial value: 0.00381858135062259 + double var_chaste_interface__I_Na__h = NV_Ith_S(rY, 3); + // Units: dimensionless; Initial value: 0.625086621635645 + double var_chaste_interface__I_Na__j = NV_Ith_S(rY, 4); + // Units: dimensionless; Initial value: 0.62332507235506 + double var_chaste_interface__I_Kr__x_kr = NV_Ith_S(rY, 5); + // Units: dimensionless; Initial value: 0.021733554982663 + double var_chaste_interface__I_Ks__x_ks = NV_Ith_S(rY, 6); + // Units: dimensionless; Initial value: 0.00428981903391989 + double var_chaste_interface__I_to__x_to_s = NV_Ith_S(rY, 7); + // Units: dimensionless; Initial value: 0.000441539203559411 + double var_chaste_interface__I_to__y_to_s = NV_Ith_S(rY, 8); + // Units: dimensionless; Initial value: 0.784875334693892 + double var_chaste_interface__I_to__x_to_f = NV_Ith_S(rY, 9); + // Units: dimensionless; Initial value: 0.000441531250866821 + double var_chaste_interface__I_to__y_to_f = NV_Ith_S(rY, 10); + // Units: dimensionless; Initial value: 0.999995817153572 + double var_chaste_interface__I_Ca__d = NV_Ith_S(rY, 11); + // Units: dimensionless; Initial value: 2.93982287251302e-06 + double var_chaste_interface__I_Ca__f = NV_Ith_S(rY, 12); + // Units: dimensionless; Initial value: 0.99511673495949 + double var_chaste_interface__I_Ca__f_Ca_Bj = NV_Ith_S(rY, 13); + // Units: dimensionless; Initial value: 0.0246142436477748 + double var_chaste_interface__I_Ca__f_Ca_Bsl = NV_Ith_S(rY, 14); + // Units: dimensionless; Initial value: 0.0152416826209301 + double var_chaste_interface__Na_Concentrations__Na_j = NV_Ith_S(rY, 33); + // Units: mM; Initial value: 8.3215690202059 + double var_chaste_interface__Na_Concentrations__Na_sl = NV_Ith_S(rY, 34); + // Units: mM; Initial value: 8.32094589677861 + double var_chaste_interface__Na_Concentrations__Na_i = NV_Ith_S(rY, 35); + // Units: mM; Initial value: 8.32114502072456 + double var_chaste_interface__K_Concentration__K_i = NV_Ith_S(rY, 36); + // Units: mM; Initial value: 120.0 + double var_chaste_interface__Ca_Concentrations__Ca_j = NV_Ith_S(rY, 37); + // Units: mM; Initial value: 0.000175415190830688 + double var_chaste_interface__Ca_Concentrations__Ca_sl = NV_Ith_S(rY, 38); + // Units: mM; Initial value: 0.000106544589194246 + + const double var_I_Ca__fcaCaMSL = 0; // dimensionless + const double var_I_Ca__fcaCaj = 0; // dimensionless + const double var_I_Ks__gks_junc = 0.0035000000000000001; // mS_per_uF + const double var_I_Ks__gks_sl = 0.0035000000000000001; // mS_per_uF + const double var_I_Kp__kp_kp = 1 / (1 + exp(7.4880000000000004 - 0.16722408026755853 * var_chaste_interface__membrane_potential__V_m)); // dimensionless + const double var_I_Kr__rkr = 1 / (1 + exp(3.0833333333333335 + 0.041666666666666664 * var_chaste_interface__membrane_potential__V_m)); // dimensionless + const double var_parameters__Fjunc = 0.11; // dimensionless + const double var_parameters__Fjunc_CaL = 0.90000000000000002; // dimensionless + const double var_parameters__Fsl = 1 - var_parameters__Fjunc; // dimensionless + const double var_I_Ks__GKs_total = (var_I_Ks__gks_junc * var_parameters__Fjunc + var_I_Ks__gks_sl * var_parameters__Fsl) * NV_Ith_S(mParameters, 19); // mS_per_uF + const double var_parameters__Fsl_CaL = 1 - var_parameters__Fjunc_CaL; // dimensionless + const double var_parameters__GCaB = 0.00055130000000000001; // mS_per_uF + const double var_parameters__GClB = 0.0089999999999999993; // mS_per_uF + const double var_parameters__GClCa = 0.0548125; // mS_per_uF + const double var_parameters__GNaB = 0.00059699999999999998; // mS_per_uF + const double var_parameters__IbarSLCaP = 0.067299999999999999; // uA_per_uF + const double var_parameters__KdClCa = 0.10000000000000001; // mM + const double var_parameters__Kdact = 0.00014999999999999999; // mM + const double var_I_NCX__Ka_junc = 1 / (1 + pow(var_parameters__Kdact, 2) / pow(var_chaste_interface__Ca_Concentrations__Ca_j, 2)); // dimensionless + const double var_I_NCX__Ka_sl = 1 / (1 + pow(var_parameters__Kdact, 2) / pow(var_chaste_interface__Ca_Concentrations__Ca_sl, 2)); // dimensionless + const double var_parameters__KmCai = 0.0035899999999999999; // mM + const double var_parameters__KmCao = 1.3; // mM + const double var_parameters__KmKo = 1.5; // mM + const double var_parameters__KmNai = 12.289999999999999; // mM + const double var_parameters__KmNaip = 11; // mM + const double var_parameters__KmNao = 87.5; // mM + const double var_parameters__KmPCa = 0.00050000000000000001; // mM + const double var_I_Ki__g_K1 = 0.43033148291193518 * sqrt(NV_Ith_S(mParameters, 7)) * NV_Ith_S(mParameters, 17); // mS_per_uF + const double var_I_Kr__gkr = 0.43033148291193518 * sqrt(NV_Ith_S(mParameters, 7)) * NV_Ith_S(mParameters, 18); // mS_per_uF + const double var_I_NCX__s3_junc = pow(var_chaste_interface__Na_Concentrations__Na_j, 3) * NV_Ith_S(mParameters, 5) + pow(var_chaste_interface__Na_Concentrations__Na_j, 3) * var_parameters__KmCao + pow(NV_Ith_S(mParameters, 8), 3) * var_chaste_interface__Ca_Concentrations__Ca_j + pow(var_parameters__KmNao, 3) * (1 + var_chaste_interface__Ca_Concentrations__Ca_j / var_parameters__KmCai) * var_chaste_interface__Ca_Concentrations__Ca_j + pow(NV_Ith_S(mParameters, 8), 3) * (1 + pow(var_chaste_interface__Na_Concentrations__Na_j, 3) / pow(var_parameters__KmNai, 3)) * var_parameters__KmCai; // mM4 + const double var_I_NCX__s3_sl = pow(var_chaste_interface__Na_Concentrations__Na_sl, 3) * NV_Ith_S(mParameters, 5) + pow(var_chaste_interface__Na_Concentrations__Na_sl, 3) * var_parameters__KmCao + pow(NV_Ith_S(mParameters, 8), 3) * var_chaste_interface__Ca_Concentrations__Ca_sl + pow(var_parameters__KmNao, 3) * (1 + var_chaste_interface__Ca_Concentrations__Ca_sl / var_parameters__KmCai) * var_chaste_interface__Ca_Concentrations__Ca_sl + pow(NV_Ith_S(mParameters, 8), 3) * (1 + pow(var_chaste_interface__Na_Concentrations__Na_sl, 3) / pow(var_parameters__KmNai, 3)) * var_parameters__KmCai; // mM4 + const double var_I_NaK__sigma = -0.14285714285714285 + 0.14285714285714285 * exp(0.01485884101040119 * NV_Ith_S(mParameters, 8)); // dimensionless + const double var_parameters__Q10CaL = 1.8; // dimensionless + const double var_parameters__Q10NCX = 1.5700000000000001; // dimensionless + const double var_parameters__Q10SLCaP = 2.3500000000000001; // dimensionless + const double var_parameters__FoRT = NV_Ith_S(mParameters, 9) / (NV_Ith_S(mParameters, 10) * NV_Ith_S(mParameters, 24)); // per_mV + const double var_I_NaK__fnak = 1 / (1 + 0.1245 * exp(-0.10000000000000001 * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT) + 0.036499999999999998 * var_I_NaK__sigma * exp(-var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT)); // dimensionless + const double var_I_NaK__I_nak_junc = var_I_NaK__fnak * var_parameters__Fjunc * NV_Ith_S(mParameters, 22) * NV_Ith_S(mParameters, 7) / ((1 + pow(var_parameters__KmNaip, 4) / pow(var_chaste_interface__Na_Concentrations__Na_j, 4)) * (var_parameters__KmKo + NV_Ith_S(mParameters, 7))); // uA_per_uF + const double var_I_NaK__I_nak_sl = var_I_NaK__fnak * var_parameters__Fsl * NV_Ith_S(mParameters, 22) * NV_Ith_S(mParameters, 7) / ((1 + pow(var_parameters__KmNaip, 4) / pow(var_chaste_interface__Na_Concentrations__Na_sl, 4)) * (var_parameters__KmKo + NV_Ith_S(mParameters, 7))); // uA_per_uF + const double var_I_NaK__I_nak = var_I_NaK__I_nak_junc + var_I_NaK__I_nak_sl; // uA_per_uF + const double var_parameters__Qpow = -31 + 0.10000000000000001 * NV_Ith_S(mParameters, 24); // dimensionless + const double var_I_PCa__I_pca_junc = pow(var_chaste_interface__Ca_Concentrations__Ca_j, 1.6000000000000001) * pow(var_parameters__Q10SLCaP, var_parameters__Qpow) * var_parameters__Fjunc * var_parameters__IbarSLCaP / (pow(var_chaste_interface__Ca_Concentrations__Ca_j, 1.6000000000000001) + pow(var_parameters__KmPCa, 1.6000000000000001)); // uA_per_uF + const double var_I_PCa__I_pca_sl = pow(var_chaste_interface__Ca_Concentrations__Ca_sl, 1.6000000000000001) * pow(var_parameters__Q10SLCaP, var_parameters__Qpow) * var_parameters__Fsl * var_parameters__IbarSLCaP / (pow(var_chaste_interface__Ca_Concentrations__Ca_sl, 1.6000000000000001) + pow(var_parameters__KmPCa, 1.6000000000000001)); // uA_per_uF + const double var_parameters__eca_junc = 0.5 * log(NV_Ith_S(mParameters, 5) / var_chaste_interface__Ca_Concentrations__Ca_j) / var_parameters__FoRT; // mV + const double var_I_CaBK__I_cabk_junc = (-var_parameters__eca_junc + var_chaste_interface__membrane_potential__V_m) * var_parameters__Fjunc * var_parameters__GCaB; // uA_per_uF + const double var_parameters__eca_sl = 0.5 * log(NV_Ith_S(mParameters, 5) / var_chaste_interface__Ca_Concentrations__Ca_sl) / var_parameters__FoRT; // mV + const double var_I_CaBK__I_cabk_sl = (-var_parameters__eca_sl + var_chaste_interface__membrane_potential__V_m) * var_parameters__Fsl * var_parameters__GCaB; // uA_per_uF + const double var_parameters__ecl = log(NV_Ith_S(mParameters, 4) / NV_Ith_S(mParameters, 6)) / var_parameters__FoRT; // mV + const double var_I_ClCa__I_ClCa_junc = (-var_parameters__ecl + var_chaste_interface__membrane_potential__V_m) * var_parameters__Fjunc * var_parameters__GClCa / (1 + var_parameters__KdClCa / var_chaste_interface__Ca_Concentrations__Ca_j); // uA_per_uF + const double var_I_ClCa__I_ClCa_sl = (-var_parameters__ecl + var_chaste_interface__membrane_potential__V_m) * var_parameters__Fsl * var_parameters__GClCa / (1 + var_parameters__KdClCa / var_chaste_interface__Ca_Concentrations__Ca_sl); // uA_per_uF + const double var_I_ClCa__I_ClCa = var_I_ClCa__I_ClCa_junc + var_I_ClCa__I_ClCa_sl; // uA_per_uF + const double var_I_ClCa__I_Clbk = (-var_parameters__ecl + var_chaste_interface__membrane_potential__V_m) * var_parameters__GClB; // uA_per_uF + const double var_membrane_potential__I_Cl_tot = var_I_ClCa__I_ClCa + var_I_ClCa__I_Clbk; // uA_per_uF + const double var_parameters__ek = log(NV_Ith_S(mParameters, 7) / var_chaste_interface__K_Concentration__K_i) / var_parameters__FoRT; // mV + const double var_I_Ki__aki = 1.02 / (1 + exp(-14.1227775 + 0.23849999999999999 * var_chaste_interface__membrane_potential__V_m - 0.23849999999999999 * var_parameters__ek)); // dimensionless + const double var_I_Ki__bki = (0.49124000000000001 * exp(0.43983232 + 0.080320000000000003 * var_chaste_interface__membrane_potential__V_m - 0.080320000000000003 * var_parameters__ek) + exp(-36.698642499999998 + 0.061749999999999999 * var_chaste_interface__membrane_potential__V_m - 0.061749999999999999 * var_parameters__ek)) / (1 + exp(-2.4444678999999998 + 0.51429999999999998 * var_parameters__ek - 0.51429999999999998 * var_chaste_interface__membrane_potential__V_m)); // dimensionless + const double var_I_Ki__kiss = var_I_Ki__aki / (var_I_Ki__aki + var_I_Ki__bki); // dimensionless + const double var_I_Ki__I_ki = (-var_parameters__ek + var_chaste_interface__membrane_potential__V_m) * var_I_Ki__g_K1 * var_I_Ki__kiss; // uA_per_uF + const double var_I_Kr__I_kr = (-var_parameters__ek + var_chaste_interface__membrane_potential__V_m) * var_I_Kr__gkr * var_I_Kr__rkr * var_chaste_interface__I_Kr__x_kr; // uA_per_uF + const double var_parameters__ena_junc = log(NV_Ith_S(mParameters, 8) / var_chaste_interface__Na_Concentrations__Na_j) / var_parameters__FoRT; // mV + const double var_I_Na__I_Na_junc = pow(var_chaste_interface__I_Na__m, 3) * (-var_parameters__ena_junc + var_chaste_interface__membrane_potential__V_m) * var_chaste_interface__I_Na__h * var_chaste_interface__I_Na__j * var_parameters__Fjunc * NV_Ith_S(mParameters, 13); // uA_per_uF + const double var_I_NaBK__I_nabk_junc = (-var_parameters__ena_junc + var_chaste_interface__membrane_potential__V_m) * var_parameters__Fjunc * var_parameters__GNaB; // uA_per_uF + const double var_parameters__ena_sl = log(NV_Ith_S(mParameters, 8) / var_chaste_interface__Na_Concentrations__Na_sl) / var_parameters__FoRT; // mV + const double var_I_Na__I_Na_sl = pow(var_chaste_interface__I_Na__m, 3) * (-var_parameters__ena_sl + var_chaste_interface__membrane_potential__V_m) * var_chaste_interface__I_Na__h * var_chaste_interface__I_Na__j * var_parameters__Fsl * NV_Ith_S(mParameters, 13); // uA_per_uF + const double var_I_NaBK__I_nabk_sl = (-var_parameters__ena_sl + var_chaste_interface__membrane_potential__V_m) * var_parameters__Fsl * var_parameters__GNaB; // uA_per_uF + const double var_parameters__epi = 1; // dimensionless + const double var_I_to__GtoFast = ((var_parameters__epi == 1) ? (0.1144 * NV_Ith_S(mParameters, 16)) : (0.0014039999999999999 * NV_Ith_S(mParameters, 16))); // mS_per_uF + const double var_I_to__GtoSlow = ((var_parameters__epi == 1) ? (0.015599999999999999 * NV_Ith_S(mParameters, 20)) : (0.037595999999999997 * NV_Ith_S(mParameters, 20))); // mS_per_uF + const double var_I_to__I_tof = (-var_parameters__ek + var_chaste_interface__membrane_potential__V_m) * var_I_to__GtoFast * var_chaste_interface__I_to__x_to_f * var_chaste_interface__I_to__y_to_f; // uA_per_uF + const double var_I_to__I_tos = (-var_parameters__ek + var_chaste_interface__membrane_potential__V_m) * var_I_to__GtoSlow * var_chaste_interface__I_to__x_to_s * var_chaste_interface__I_to__y_to_s; // uA_per_uF + const double var_I_to__I_to = var_I_to__I_tof + var_I_to__I_tos; // uA_per_uF + const double var_parameters__gkp = 0.002; // mS_per_uF + const double var_I_Kp__I_kp_junc = (-var_parameters__ek + var_chaste_interface__membrane_potential__V_m) * var_I_Kp__kp_kp * var_parameters__Fjunc * var_parameters__gkp; // uA_per_uF + const double var_I_Kp__I_kp_sl = (-var_parameters__ek + var_chaste_interface__membrane_potential__V_m) * var_I_Kp__kp_kp * var_parameters__Fsl * var_parameters__gkp; // uA_per_uF + const double var_I_Kp__I_kp = var_I_Kp__I_kp_junc + var_I_Kp__I_kp_sl; // uA_per_uF + const double var_parameters__ksat = 0.32000000000000001; // dimensionless + const double var_parameters__nu = 0.27000000000000002; // dimensionless + const double var_I_NCX__s1_junc = pow(var_chaste_interface__Na_Concentrations__Na_j, 3) * NV_Ith_S(mParameters, 5) * exp(var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT * var_parameters__nu); // mM4 + const double var_I_NCX__s1_sl = pow(var_chaste_interface__Na_Concentrations__Na_sl, 3) * NV_Ith_S(mParameters, 5) * exp(var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT * var_parameters__nu); // mM4 + const double var_I_NCX__s2_junc = pow(NV_Ith_S(mParameters, 8), 3) * var_chaste_interface__Ca_Concentrations__Ca_j * exp((-1 + var_parameters__nu) * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT); // mM4 + const double var_I_NCX__I_ncx_junc = pow(var_parameters__Q10NCX, var_parameters__Qpow) * (-var_I_NCX__s2_junc + var_I_NCX__s1_junc) * var_I_NCX__Ka_junc * var_parameters__Fjunc * NV_Ith_S(mParameters, 21) / ((1 + var_parameters__ksat * exp((-1 + var_parameters__nu) * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT)) * var_I_NCX__s3_junc); // uA_per_uF + const double var_I_NCX__s2_sl = pow(NV_Ith_S(mParameters, 8), 3) * var_chaste_interface__Ca_Concentrations__Ca_sl * exp((-1 + var_parameters__nu) * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT); // mM4 + const double var_I_NCX__I_ncx_sl = pow(var_parameters__Q10NCX, var_parameters__Qpow) * (-var_I_NCX__s2_sl + var_I_NCX__s1_sl) * var_I_NCX__Ka_sl * var_parameters__Fsl * NV_Ith_S(mParameters, 21) / ((1 + var_parameters__ksat * exp((-1 + var_parameters__nu) * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT)) * var_I_NCX__s3_sl); // uA_per_uF + const double var_parameters__pCa = 0.00054000000000000001 * NV_Ith_S(mParameters, 11); // cm_per_sec + const double var_I_Ca__ibarca_j = 4 * (-0.34100000000000003 * NV_Ith_S(mParameters, 5) + 0.34100000000000003 * var_chaste_interface__Ca_Concentrations__Ca_j * exp(2 * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT)) * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT * NV_Ith_S(mParameters, 9) * var_parameters__pCa / (-1 + exp(2 * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT)); // uA_per_uF + const double var_I_Ca__I_Ca_junc = 0.45000000000000001 * pow(var_parameters__Q10CaL, var_parameters__Qpow) * (1 - var_chaste_interface__I_Ca__f_Ca_Bj + var_I_Ca__fcaCaj) * var_chaste_interface__I_Ca__d * var_chaste_interface__I_Ca__f * var_I_Ca__ibarca_j * var_parameters__Fjunc_CaL; // uA_per_uF + const double var_Ca_Concentrations__I_Ca_tot_junc = -2 * var_I_NCX__I_ncx_junc + var_I_Ca__I_Ca_junc + var_I_CaBK__I_cabk_junc + var_I_PCa__I_pca_junc; // uA_per_uF + const double var_I_Ca__ibarca_sl = 4 * (-0.34100000000000003 * NV_Ith_S(mParameters, 5) + 0.34100000000000003 * var_chaste_interface__Ca_Concentrations__Ca_sl * exp(2 * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT)) * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT * NV_Ith_S(mParameters, 9) * var_parameters__pCa / (-1 + exp(2 * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT)); // uA_per_uF + const double var_I_Ca__I_Ca_sl = 0.45000000000000001 * pow(var_parameters__Q10CaL, var_parameters__Qpow) * (1 - var_chaste_interface__I_Ca__f_Ca_Bsl + var_I_Ca__fcaCaMSL) * var_chaste_interface__I_Ca__d * var_chaste_interface__I_Ca__f * var_I_Ca__ibarca_sl * var_parameters__Fsl_CaL; // uA_per_uF + const double var_Ca_Concentrations__I_Ca_tot_sl = -2 * var_I_NCX__I_ncx_sl + var_I_Ca__I_Ca_sl + var_I_CaBK__I_cabk_sl + var_I_PCa__I_pca_sl; // uA_per_uF + const double var_membrane_potential__I_Ca_tot = var_Ca_Concentrations__I_Ca_tot_junc + var_Ca_Concentrations__I_Ca_tot_sl; // uA_per_uF + const double var_parameters__pK = 1.35e-7; // cm_per_sec + const double var_I_Ca__ibark = (-0.75 * NV_Ith_S(mParameters, 7) + 0.75 * var_chaste_interface__K_Concentration__K_i * exp(var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT)) * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT * NV_Ith_S(mParameters, 9) * var_parameters__pK / (-1 + exp(var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT)); // uA_per_uF + const double var_I_Ca__I_CaK = 0.45000000000000001 * pow(var_parameters__Q10CaL, var_parameters__Qpow) * ((1 - var_chaste_interface__I_Ca__f_Ca_Bj + var_I_Ca__fcaCaj) * var_parameters__Fjunc_CaL + (1 - var_chaste_interface__I_Ca__f_Ca_Bsl + var_I_Ca__fcaCaMSL) * var_parameters__Fsl_CaL) * var_chaste_interface__I_Ca__d * var_chaste_interface__I_Ca__f * var_I_Ca__ibark; // uA_per_uF + const double var_parameters__pNa = 7.4999999999999993e-9; // cm_per_sec + const double var_I_Ca__ibarna_j = (-0.75 * NV_Ith_S(mParameters, 8) + 0.75 * var_chaste_interface__Na_Concentrations__Na_j * exp(var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT)) * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT * NV_Ith_S(mParameters, 9) * var_parameters__pNa / (-1 + exp(var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT)); // uA_per_uF + const double var_I_Ca__I_CaNa_junc = 0.45000000000000001 * pow(var_parameters__Q10CaL, var_parameters__Qpow) * (1 - var_chaste_interface__I_Ca__f_Ca_Bj + var_I_Ca__fcaCaj) * var_chaste_interface__I_Ca__d * var_chaste_interface__I_Ca__f * var_I_Ca__ibarna_j * var_parameters__Fjunc_CaL; // uA_per_uF + const double var_I_Ca__ibarna_sl = (-0.75 * NV_Ith_S(mParameters, 8) + 0.75 * var_chaste_interface__Na_Concentrations__Na_sl * exp(var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT)) * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT * NV_Ith_S(mParameters, 9) * var_parameters__pNa / (-1 + exp(var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT)); // uA_per_uF + const double var_I_Ca__I_CaNa_sl = 0.45000000000000001 * pow(var_parameters__Q10CaL, var_parameters__Qpow) * (1 - var_chaste_interface__I_Ca__f_Ca_Bsl + var_I_Ca__fcaCaMSL) * var_chaste_interface__I_Ca__d * var_chaste_interface__I_Ca__f * var_I_Ca__ibarna_sl * var_parameters__Fsl_CaL; // uA_per_uF + const double var_Na_Concentrations__I_Na_tot_junc = 3 * var_I_NCX__I_ncx_junc + 3 * var_I_NaK__I_nak_junc + var_I_Ca__I_CaNa_junc + var_I_Na__I_Na_junc + var_I_NaBK__I_nabk_junc; // uA_per_uF + const double var_Na_Concentrations__I_Na_tot_sl = 3 * var_I_NCX__I_ncx_sl + 3 * var_I_NaK__I_nak_sl + var_I_Ca__I_CaNa_sl + var_I_Na__I_Na_sl + var_I_NaBK__I_nabk_sl; // uA_per_uF + const double var_membrane_potential__I_Na_tot = var_Na_Concentrations__I_Na_tot_junc + var_Na_Concentrations__I_Na_tot_sl; // uA_per_uF + const double var_parameters__pNaK = 0.018329999999999999; // dimensionless + const double var_I_Ks__eks = log((NV_Ith_S(mParameters, 8) * var_parameters__pNaK + NV_Ith_S(mParameters, 7)) / (var_chaste_interface__Na_Concentrations__Na_i * var_parameters__pNaK + var_chaste_interface__K_Concentration__K_i)) / var_parameters__FoRT; // mV + const double var_I_Ks__I_ks = pow(var_chaste_interface__I_Ks__x_ks, 2) * (-var_I_Ks__eks + var_chaste_interface__membrane_potential__V_m) * var_I_Ks__GKs_total; // uA_per_uF + const double var_K_Concentration__I_K_tot = -2 * var_I_NaK__I_nak + var_I_Ca__I_CaK + var_I_Ki__I_ki + var_I_Kp__I_kp + var_I_Kr__I_kr + var_I_Ks__I_ks + var_I_to__I_to; // uA_per_uF + const double var_membrane_potential__I_tot = var_K_Concentration__I_K_tot + var_membrane_potential__I_Ca_tot + var_membrane_potential__I_Cl_tot + var_membrane_potential__I_Na_tot; // uA_per_uF + const double var_chaste_interface__i_ionic = HeartConfig::Instance()->GetCapacitance() * var_membrane_potential__I_tot; // uA_per_cm2 + + const double i_ionic = var_chaste_interface__i_ionic; + if (made_new_cvode_vector) + { + DeleteVector(rY); + } + EXCEPT_IF_NOT(!std::isnan(i_ionic)); + return i_ionic; + } + + void Cellgrandi_pasqualini_bers_2010_ssFromCellMLCvodeDataClamp::EvaluateYDerivatives(double var_chaste_interface__environment__time, const N_Vector rY, N_Vector rDY) + { + // Inputs: + // Time units: millisecond + double var_chaste_interface__membrane_potential__V_m = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : NV_Ith_S(rY, 0)); + // Units: mV; Initial value: -81.4229700631461 + double var_chaste_interface__Ca_Concentrations__Ca_i = NV_Ith_S(rY, 1); + // Units: mM; Initial value: 8.72745589849657e-05 + double var_chaste_interface__I_Na__m = NV_Ith_S(rY, 2); + // Units: dimensionless; Initial value: 0.00381858135062259 + double var_chaste_interface__I_Na__h = NV_Ith_S(rY, 3); + // Units: dimensionless; Initial value: 0.625086621635645 + double var_chaste_interface__I_Na__j = NV_Ith_S(rY, 4); + // Units: dimensionless; Initial value: 0.62332507235506 + double var_chaste_interface__I_Kr__x_kr = NV_Ith_S(rY, 5); + // Units: dimensionless; Initial value: 0.021733554982663 + double var_chaste_interface__I_Ks__x_ks = NV_Ith_S(rY, 6); + // Units: dimensionless; Initial value: 0.00428981903391989 + double var_chaste_interface__I_to__x_to_s = NV_Ith_S(rY, 7); + // Units: dimensionless; Initial value: 0.000441539203559411 + double var_chaste_interface__I_to__y_to_s = NV_Ith_S(rY, 8); + // Units: dimensionless; Initial value: 0.784875334693892 + double var_chaste_interface__I_to__x_to_f = NV_Ith_S(rY, 9); + // Units: dimensionless; Initial value: 0.000441531250866821 + double var_chaste_interface__I_to__y_to_f = NV_Ith_S(rY, 10); + // Units: dimensionless; Initial value: 0.999995817153572 + double var_chaste_interface__I_Ca__d = NV_Ith_S(rY, 11); + // Units: dimensionless; Initial value: 2.93982287251302e-06 + double var_chaste_interface__I_Ca__f = NV_Ith_S(rY, 12); + // Units: dimensionless; Initial value: 0.99511673495949 + double var_chaste_interface__I_Ca__f_Ca_Bj = NV_Ith_S(rY, 13); + // Units: dimensionless; Initial value: 0.0246142436477748 + double var_chaste_interface__I_Ca__f_Ca_Bsl = NV_Ith_S(rY, 14); + // Units: dimensionless; Initial value: 0.0152416826209301 + double var_chaste_interface__SR_Fluxes__Ry_Rr = NV_Ith_S(rY, 15); + // Units: mM; Initial value: 0.891022230597263 + double var_chaste_interface__SR_Fluxes__Ry_Ro = NV_Ith_S(rY, 16); + // Units: mM; Initial value: 7.37484660389498e-07 + double var_chaste_interface__SR_Fluxes__Ry_Ri = NV_Ith_S(rY, 17); + // Units: mM; Initial value: 9.01984485847386e-08 + double var_chaste_interface__Na_Buffers__Na_Bj = NV_Ith_S(rY, 18); + // Units: mM; Initial value: 3.43545459048316 + double var_chaste_interface__Na_Buffers__Na_Bsl = NV_Ith_S(rY, 19); + // Units: mM; Initial value: 0.749601264899653 + double var_chaste_interface__Cytosolic_Ca_Buffers__Tn_CL = NV_Ith_S(rY, 20); + // Units: mM; Initial value: 0.00893708435270205 + double var_chaste_interface__Cytosolic_Ca_Buffers__Tn_CHc = NV_Ith_S(rY, 21); + // Units: mM; Initial value: 0.117445983314504 + double var_chaste_interface__Cytosolic_Ca_Buffers__Tn_CHm = NV_Ith_S(rY, 22); + // Units: mM; Initial value: 0.0105996734077994 + double var_chaste_interface__Cytosolic_Ca_Buffers__CaM = NV_Ith_S(rY, 23); + // Units: mM; Initial value: 0.000295653619580701 + double var_chaste_interface__Cytosolic_Ca_Buffers__Myo_c = NV_Ith_S(rY, 24); + // Units: mM; Initial value: 0.00192645052472679 + double var_chaste_interface__Cytosolic_Ca_Buffers__Myo_m = NV_Ith_S(rY, 25); + // Units: mM; Initial value: 0.137557201546068 + double var_chaste_interface__Cytosolic_Ca_Buffers__SRB = NV_Ith_S(rY, 26); + // Units: mM; Initial value: 0.00217414510791738 + double var_chaste_interface__Junctional_and_SL_Ca_Buffers__SLL_j = NV_Ith_S(rY, 27); + // Units: mM; Initial value: 0.00738583890572642 + double var_chaste_interface__Junctional_and_SL_Ca_Buffers__SLL_sl = NV_Ith_S(rY, 28); + // Units: mM; Initial value: 0.00988178900584875 + double var_chaste_interface__Junctional_and_SL_Ca_Buffers__SLH_j = NV_Ith_S(rY, 29); + // Units: mM; Initial value: 0.0734662466011574 + double var_chaste_interface__Junctional_and_SL_Ca_Buffers__SLH_sl = NV_Ith_S(rY, 30); + // Units: mM; Initial value: 0.114400081504523 + double var_chaste_interface__SR_Ca_Concentrations__Csqn_b = NV_Ith_S(rY, 31); + // Units: mM; Initial value: 1.19772047585784 + double var_chaste_interface__SR_Ca_Concentrations__Ca_sr = NV_Ith_S(rY, 32); + // Units: mM; Initial value: 0.555180633859957 + double var_chaste_interface__Na_Concentrations__Na_j = NV_Ith_S(rY, 33); + // Units: mM; Initial value: 8.3215690202059 + double var_chaste_interface__Na_Concentrations__Na_sl = NV_Ith_S(rY, 34); + // Units: mM; Initial value: 8.32094589677861 + double var_chaste_interface__Na_Concentrations__Na_i = NV_Ith_S(rY, 35); + // Units: mM; Initial value: 8.32114502072456 + double var_chaste_interface__K_Concentration__K_i = NV_Ith_S(rY, 36); + // Units: mM; Initial value: 120.0 + double var_chaste_interface__Ca_Concentrations__Ca_j = NV_Ith_S(rY, 37); + // Units: mM; Initial value: 0.000175415190830688 + double var_chaste_interface__Ca_Concentrations__Ca_sl = NV_Ith_S(rY, 38); + // Units: mM; Initial value: 0.000106544589194246 + + // Mathematics + double d_dt_chaste_interface_var_membrane_potential__V_m; + const double d_dt_chaste_interface_var_K_Concentration__K_i = 0; // mM / msec + const double d_dt_chaste_interface_var_I_Ca__f_Ca_Bj = -0.011900000000000001 * var_chaste_interface__I_Ca__f_Ca_Bj + 1.7 * (1 - var_chaste_interface__I_Ca__f_Ca_Bj) * var_chaste_interface__Ca_Concentrations__Ca_j; // 1 / msec + const double d_dt_chaste_interface_var_I_Ca__f_Ca_Bsl = -0.011900000000000001 * var_chaste_interface__I_Ca__f_Ca_Bsl + 1.7 * (1 - var_chaste_interface__I_Ca__f_Ca_Bsl) * var_chaste_interface__Ca_Concentrations__Ca_sl; // 1 / msec + const double var_I_Ca__fcaCaMSL = 0; // dimensionless + const double var_I_Ca__fcaCaj = 0; // dimensionless + const double var_SR_Fluxes__MaxSR = 15; // dimensionless + const double var_SR_Fluxes__MinSR = 1; // dimensionless + const double var_SR_Fluxes__RI = 1 - var_chaste_interface__SR_Fluxes__Ry_Ri - var_chaste_interface__SR_Fluxes__Ry_Ro - var_chaste_interface__SR_Fluxes__Ry_Rr; // mM + const double var_SR_Fluxes__J_SRleak = (-var_chaste_interface__Ca_Concentrations__Ca_j + var_chaste_interface__SR_Ca_Concentrations__Ca_sr) * NV_Ith_S(mParameters, 0); // mM_per_msec + const double var_I_Ca__dss = 1 / (1 + exp(-0.83333333333333337 - 0.16666666666666666 * var_chaste_interface__membrane_potential__V_m)); // dimensionless + const double var_I_Ca__fss = 1 / (1 + exp(3.8888888888888888 + 0.1111111111111111 * var_chaste_interface__membrane_potential__V_m)) + 0.59999999999999998 / (1 + exp(2.5 - 0.050000000000000003 * var_chaste_interface__membrane_potential__V_m)); // dimensionless + const double var_I_Ca__taud = 28.571428571428569 * (1 - exp(-0.83333333333333337 - 0.16666666666666666 * var_chaste_interface__membrane_potential__V_m)) * var_I_Ca__dss / (5 + var_chaste_interface__membrane_potential__V_m); // msec + const double d_dt_chaste_interface_var_I_Ca__d = (-var_chaste_interface__I_Ca__d + var_I_Ca__dss) / var_I_Ca__taud; // 1 / msec + const double var_I_Ca__tauf = 1 / (0.02 + 0.019699999999999999 * exp(-0.23877882250000002 * pow((1 + 0.068965517241379309 * var_chaste_interface__membrane_potential__V_m), 2))); // msec + const double d_dt_chaste_interface_var_I_Ca__f = (-var_chaste_interface__I_Ca__f + var_I_Ca__fss) / var_I_Ca__tauf; // 1 / msec + const double var_I_Kr__tauxr = 230 / (1 + exp(2 + 0.050000000000000003 * var_chaste_interface__membrane_potential__V_m)) + 3300 / ((1 + exp(1.2222222222222223 + 0.1111111111111111 * var_chaste_interface__membrane_potential__V_m)) * (1 + exp(-2.4444444444444446 - 0.1111111111111111 * var_chaste_interface__membrane_potential__V_m))); // msec + const double var_I_Kr__xrss = 1 / (1 + exp(-2 - 0.20000000000000001 * var_chaste_interface__membrane_potential__V_m)); // dimensionless + const double d_dt_chaste_interface_var_I_Kr__x_kr = (-var_chaste_interface__I_Kr__x_kr + var_I_Kr__xrss) / var_I_Kr__tauxr; // 1 / msec + const double var_I_Ks__tauxs = 990.10000000000002 / (1 + exp(-0.17252124645892353 - 0.070821529745042494 * var_chaste_interface__membrane_potential__V_m)); // msec + const double var_I_Ks__xsss = 1 / (1 + exp(-0.26666666666666666 - 0.070175438596491224 * var_chaste_interface__membrane_potential__V_m)); // dimensionless + const double d_dt_chaste_interface_var_I_Ks__x_ks = (-var_chaste_interface__I_Ks__x_ks + var_I_Ks__xsss) / var_I_Ks__tauxs; // 1 / msec + const double var_I_Na__ah = ((var_chaste_interface__membrane_potential__V_m >= -40) ? (0) : (0.057000000000000002 * exp(-11.764705882352942 + 0.14705882352941177 * NV_Ith_S(mParameters, 15) - 0.14705882352941177 * var_chaste_interface__membrane_potential__V_m))); // dimensionless + const double var_I_Na__aj = ((var_chaste_interface__membrane_potential__V_m >= -40) ? (0) : ((37.780000000000001 + var_chaste_interface__membrane_potential__V_m) * (-25428 * exp(0.24440000000000001 * var_chaste_interface__membrane_potential__V_m - 0.24440000000000001 * NV_Ith_S(mParameters, 15)) - 6.9480000000000002e-6 * exp(0.043909999999999998 * NV_Ith_S(mParameters, 15) - 0.043909999999999998 * var_chaste_interface__membrane_potential__V_m)) / (1 + exp(24.640530000000002 + 0.311 * var_chaste_interface__membrane_potential__V_m - 0.311 * NV_Ith_S(mParameters, 15))))); // dimensionless + const double var_I_Na__bh = ((var_chaste_interface__membrane_potential__V_m >= -40) ? (5.9230769230769234 / (1 + exp(-0.96036036036036043 + 0.0900900900900901 * NV_Ith_S(mParameters, 15) - 0.0900900900900901 * var_chaste_interface__membrane_potential__V_m))) : (310000 * exp(0.34849999999999998 * var_chaste_interface__membrane_potential__V_m - 0.34849999999999998 * NV_Ith_S(mParameters, 15)) + 2.7000000000000002 * exp(0.079000000000000001 * var_chaste_interface__membrane_potential__V_m - 0.079000000000000001 * NV_Ith_S(mParameters, 15)))); // dimensionless + const double var_I_Na__bj = ((var_chaste_interface__membrane_potential__V_m >= -40) ? (0.59999999999999998 * exp(0.057000000000000002 * var_chaste_interface__membrane_potential__V_m - 0.057000000000000002 * NV_Ith_S(mParameters, 15)) / (1 + exp(-3.2000000000000002 + 0.10000000000000001 * NV_Ith_S(mParameters, 15) - 0.10000000000000001 * var_chaste_interface__membrane_potential__V_m))) : (0.024240000000000001 * exp(0.01052 * NV_Ith_S(mParameters, 15) - 0.01052 * var_chaste_interface__membrane_potential__V_m) / (1 + exp(-5.5312920000000005 + 0.13780000000000001 * NV_Ith_S(mParameters, 15) - 0.13780000000000001 * var_chaste_interface__membrane_potential__V_m)))); // dimensionless + const double var_I_Na__hss = 0.01 * NV_Ith_S(mParameters, 14) + (1 - 0.01 * NV_Ith_S(mParameters, 14)) / pow((1 + exp(9.6298788694481825 + 0.13458950201884254 * var_chaste_interface__membrane_potential__V_m - 0.13458950201884254 * NV_Ith_S(mParameters, 15))), 2); // dimensionless + const double var_I_Na__jss = 0.01 * NV_Ith_S(mParameters, 14) + (1 - 0.01 * NV_Ith_S(mParameters, 14)) / pow((1 + exp(9.6298788694481825 + 0.13458950201884254 * var_chaste_interface__membrane_potential__V_m - 0.13458950201884254 * NV_Ith_S(mParameters, 15))), 2); // dimensionless + const double var_I_Na__mss = 1 / pow((1 + exp(-6.2967884828349945 - 0.11074197120708749 * var_chaste_interface__membrane_potential__V_m)), 2); // dimensionless + const double var_I_Na__tauh = 1 / (var_I_Na__ah + var_I_Na__bh); // msec + const double d_dt_chaste_interface_var_I_Na__h = (-var_chaste_interface__I_Na__h + var_I_Na__hss) / var_I_Na__tauh; // 1 / msec + const double var_I_Na__tauj = 1 / (var_I_Na__aj + var_I_Na__bj); // msec + const double d_dt_chaste_interface_var_I_Na__j = (-var_chaste_interface__I_Na__j + var_I_Na__jss) / var_I_Na__tauj; // 1 / msec + const double var_I_Na__taum = 0.12920000000000001 * exp(-8.682389366752302 * pow((1 + 0.021838829438742085 * var_chaste_interface__membrane_potential__V_m), 2)) + 0.064869999999999997 * exp(-0.0089012876052174655 * pow((-1 + 0.2073398299813394 * var_chaste_interface__membrane_potential__V_m), 2)); // msec + const double d_dt_chaste_interface_var_I_Na__m = (-var_chaste_interface__I_Na__m + var_I_Na__mss) / var_I_Na__taum; // 1 / msec + const double var_I_to__tauxtof = 0.5 + 8.5 * exp(-0.81000000000000005 * pow((1 + 0.022222222222222223 * var_chaste_interface__membrane_potential__V_m), 2)); // msec + const double var_I_to__tauxtos = 0.5 + 9 / (1 + exp(0.20000000000000001 + 0.066666666666666666 * var_chaste_interface__membrane_potential__V_m)); // msec + const double var_I_to__tauytof = 7 + 85 * exp(-7.2727272727272725 * pow((1 + 0.025000000000000001 * var_chaste_interface__membrane_potential__V_m), 2)); // msec + const double var_I_to__tauytos = 30 + 800 / (1 + exp(6 + 0.10000000000000001 * var_chaste_interface__membrane_potential__V_m)); // msec + const double var_I_to__xtoss = 1 / (1 + exp(1.4615384615384615 - 0.076923076923076927 * var_chaste_interface__membrane_potential__V_m)); // dimensionless + const double d_dt_chaste_interface_var_I_to__x_to_f = (-var_chaste_interface__I_to__x_to_f + var_I_to__xtoss) / var_I_to__tauxtof; // 1 / msec + const double d_dt_chaste_interface_var_I_to__x_to_s = (-var_chaste_interface__I_to__x_to_s + var_I_to__xtoss) / var_I_to__tauxtos; // 1 / msec + const double var_I_to__ytoss = 1 / (1 + exp(3.8999999999999999 + 0.20000000000000001 * var_chaste_interface__membrane_potential__V_m)); // dimensionless + const double d_dt_chaste_interface_var_I_to__y_to_f = (-var_chaste_interface__I_to__y_to_f + var_I_to__ytoss) / var_I_to__tauytof; // 1 / msec + const double d_dt_chaste_interface_var_I_to__y_to_s = (-var_chaste_interface__I_to__y_to_s + var_I_to__ytoss) / var_I_to__tauytos; // 1 / msec + const double var_parameters__Bmax_CaM = 0.024; // mM + const double var_parameters__Bmax_Naj = 7.5609999999999999; // mM + const double var_parameters__Bmax_Nasl = 1.6499999999999999; // mM + const double var_parameters__Bmax_SR = 0.017100000000000001; // mM + const double var_parameters__Bmax_TnChigh = 0.14000000000000001; // mM + const double var_parameters__Bmax_TnClow = 0.070000000000000007; // mM + const double var_parameters__Bmax_myosin = 0.14000000000000001; // mM + const double var_parameters__Fjunc = 0.11; // dimensionless + const double var_parameters__Fjunc_CaL = 0.90000000000000002; // dimensionless + const double var_parameters__Fsl = 1 - var_parameters__Fjunc; // dimensionless + const double var_parameters__Fsl_CaL = 1 - var_parameters__Fjunc_CaL; // dimensionless + const double var_parameters__GCaB = 0.00055130000000000001; // mS_per_uF + const double var_parameters__GNaB = 0.00059699999999999998; // mS_per_uF + const double var_parameters__IbarSLCaP = 0.067299999999999999; // uA_per_uF + const double var_parameters__J_ca_juncsl = 8.2413000000000004e-13; // liters_per_msec + const double var_parameters__J_ca_slmyo = 3.2742999999999999e-12; // liters_per_msec + const double var_parameters__J_na_juncsl = 1.8312999999999999e-14; // liters_per_msec + const double var_parameters__J_na_slmyo = 1.6385999999999999e-12; // liters_per_msec + const double var_parameters__Kdact = 0.00014999999999999999; // mM + const double var_I_NCX__Ka_junc = 1 / (1 + pow(var_parameters__Kdact, 2) / pow(var_chaste_interface__Ca_Concentrations__Ca_j, 2)); // dimensionless + const double var_I_NCX__Ka_sl = 1 / (1 + pow(var_parameters__Kdact, 2) / pow(var_chaste_interface__Ca_Concentrations__Ca_sl, 2)); // dimensionless + const double var_parameters__KmCai = 0.0035899999999999999; // mM + const double var_parameters__KmCao = 1.3; // mM + const double var_parameters__KmKo = 1.5; // mM + const double var_parameters__KmNai = 12.289999999999999; // mM + const double var_parameters__KmNaip = 11; // mM + const double var_parameters__KmNao = 87.5; // mM + const double var_parameters__KmPCa = 0.00050000000000000001; // mM + const double var_parameters__Kmf = 0.00024600000000000002; // mM + const double var_parameters__Kmr = 1.7; // mM + const double var_parameters__Mgi = 1; // mM + const double var_I_NCX__s3_junc = pow(var_chaste_interface__Na_Concentrations__Na_j, 3) * NV_Ith_S(mParameters, 5) + pow(var_chaste_interface__Na_Concentrations__Na_j, 3) * var_parameters__KmCao + pow(NV_Ith_S(mParameters, 8), 3) * var_chaste_interface__Ca_Concentrations__Ca_j + pow(var_parameters__KmNao, 3) * (1 + var_chaste_interface__Ca_Concentrations__Ca_j / var_parameters__KmCai) * var_chaste_interface__Ca_Concentrations__Ca_j + pow(NV_Ith_S(mParameters, 8), 3) * (1 + pow(var_chaste_interface__Na_Concentrations__Na_j, 3) / pow(var_parameters__KmNai, 3)) * var_parameters__KmCai; // mM4 + const double var_I_NCX__s3_sl = pow(var_chaste_interface__Na_Concentrations__Na_sl, 3) * NV_Ith_S(mParameters, 5) + pow(var_chaste_interface__Na_Concentrations__Na_sl, 3) * var_parameters__KmCao + pow(NV_Ith_S(mParameters, 8), 3) * var_chaste_interface__Ca_Concentrations__Ca_sl + pow(var_parameters__KmNao, 3) * (1 + var_chaste_interface__Ca_Concentrations__Ca_sl / var_parameters__KmCai) * var_chaste_interface__Ca_Concentrations__Ca_sl + pow(NV_Ith_S(mParameters, 8), 3) * (1 + pow(var_chaste_interface__Na_Concentrations__Na_sl, 3) / pow(var_parameters__KmNai, 3)) * var_parameters__KmCai; // mM4 + const double var_I_NaK__sigma = -0.14285714285714285 + 0.14285714285714285 * exp(0.01485884101040119 * NV_Ith_S(mParameters, 8)); // dimensionless + const double var_parameters__Q10CaL = 1.8; // dimensionless + const double var_parameters__Q10NCX = 1.5700000000000001; // dimensionless + const double var_parameters__Q10SLCaP = 2.3500000000000001; // dimensionless + const double var_parameters__Q10SRCaP = 2.6000000000000001; // dimensionless + const double var_parameters__FoRT = NV_Ith_S(mParameters, 9) / (NV_Ith_S(mParameters, 10) * NV_Ith_S(mParameters, 24)); // per_mV + const double var_I_NaK__fnak = 1 / (1 + 0.1245 * exp(-0.10000000000000001 * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT) + 0.036499999999999998 * var_I_NaK__sigma * exp(-var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT)); // dimensionless + const double var_I_NaK__I_nak_junc = var_I_NaK__fnak * var_parameters__Fjunc * NV_Ith_S(mParameters, 22) * NV_Ith_S(mParameters, 7) / ((1 + pow(var_parameters__KmNaip, 4) / pow(var_chaste_interface__Na_Concentrations__Na_j, 4)) * (var_parameters__KmKo + NV_Ith_S(mParameters, 7))); // uA_per_uF + const double var_I_NaK__I_nak_sl = var_I_NaK__fnak * var_parameters__Fsl * NV_Ith_S(mParameters, 22) * NV_Ith_S(mParameters, 7) / ((1 + pow(var_parameters__KmNaip, 4) / pow(var_chaste_interface__Na_Concentrations__Na_sl, 4)) * (var_parameters__KmKo + NV_Ith_S(mParameters, 7))); // uA_per_uF + const double var_parameters__Qpow = -31 + 0.10000000000000001 * NV_Ith_S(mParameters, 24); // dimensionless + const double var_I_PCa__I_pca_junc = pow(var_chaste_interface__Ca_Concentrations__Ca_j, 1.6000000000000001) * pow(var_parameters__Q10SLCaP, var_parameters__Qpow) * var_parameters__Fjunc * var_parameters__IbarSLCaP / (pow(var_chaste_interface__Ca_Concentrations__Ca_j, 1.6000000000000001) + pow(var_parameters__KmPCa, 1.6000000000000001)); // uA_per_uF + const double var_I_PCa__I_pca_sl = pow(var_chaste_interface__Ca_Concentrations__Ca_sl, 1.6000000000000001) * pow(var_parameters__Q10SLCaP, var_parameters__Qpow) * var_parameters__Fsl * var_parameters__IbarSLCaP / (pow(var_chaste_interface__Ca_Concentrations__Ca_sl, 1.6000000000000001) + pow(var_parameters__KmPCa, 1.6000000000000001)); // uA_per_uF + const double var_parameters__cellLength = 100; // um + const double var_parameters__cellRadius = 10.25; // um + const double var_parameters__Vcell = 1.0000000000000001e-15 * M_PI * pow(var_parameters__cellRadius, 2) * var_parameters__cellLength; // liter + const double var_parameters__Vjunc = 0.00053900000000000009 * var_parameters__Vcell; // liter + const double var_parameters__Vmyo = 0.65000000000000002 * var_parameters__Vcell; // liter + const double d_dt_chaste_interface_var_Na_Concentrations__Na_i = (-var_chaste_interface__Na_Concentrations__Na_i + var_chaste_interface__Na_Concentrations__Na_sl) * NV_Ith_S(mParameters, 3) * var_parameters__J_na_slmyo / var_parameters__Vmyo; // mM / msec + const double var_parameters__Bmax_SLhighj = 0.000165 * var_parameters__Vmyo / var_parameters__Vjunc; // mM + const double var_parameters__Bmax_SLlowj = 0.00046000000000000001 * var_parameters__Vmyo / var_parameters__Vjunc; // mM + const double var_parameters__Vsl = 0.02 * var_parameters__Vcell; // liter + const double var_parameters__Bmax_SLhighsl = 0.0134 * var_parameters__Vmyo / var_parameters__Vsl; // mM + const double var_parameters__Bmax_SLlowsl = 0.037400000000000003 * var_parameters__Vmyo / var_parameters__Vsl; // mM + const double var_parameters__Vsr = 0.035000000000000003 * var_parameters__Vcell; // liter + const double var_parameters__Bmax_Csqn = 0.14000000000000001 * var_parameters__Vmyo / var_parameters__Vsr; // mM + const double var_parameters__ec50SR = 0.45000000000000001; // mM + const double var_SR_Fluxes__kCaSR = -(-var_SR_Fluxes__MinSR + var_SR_Fluxes__MaxSR) / (1 + pow((var_parameters__ec50SR / var_chaste_interface__SR_Ca_Concentrations__Ca_sr), 2.5)) + var_SR_Fluxes__MaxSR; // dimensionless + const double var_parameters__eca_junc = 0.5 * log(NV_Ith_S(mParameters, 5) / var_chaste_interface__Ca_Concentrations__Ca_j) / var_parameters__FoRT; // mV + const double var_I_CaBK__I_cabk_junc = (-var_parameters__eca_junc + var_chaste_interface__membrane_potential__V_m) * var_parameters__Fjunc * var_parameters__GCaB; // uA_per_uF + const double var_parameters__eca_sl = 0.5 * log(NV_Ith_S(mParameters, 5) / var_chaste_interface__Ca_Concentrations__Ca_sl) / var_parameters__FoRT; // mV + const double var_I_CaBK__I_cabk_sl = (-var_parameters__eca_sl + var_chaste_interface__membrane_potential__V_m) * var_parameters__Fsl * var_parameters__GCaB; // uA_per_uF + const double var_parameters__ena_junc = log(NV_Ith_S(mParameters, 8) / var_chaste_interface__Na_Concentrations__Na_j) / var_parameters__FoRT; // mV + const double var_I_Na__I_Na_junc = pow(var_chaste_interface__I_Na__m, 3) * (-var_parameters__ena_junc + var_chaste_interface__membrane_potential__V_m) * var_chaste_interface__I_Na__h * var_chaste_interface__I_Na__j * var_parameters__Fjunc * NV_Ith_S(mParameters, 13); // uA_per_uF + const double var_I_NaBK__I_nabk_junc = (-var_parameters__ena_junc + var_chaste_interface__membrane_potential__V_m) * var_parameters__Fjunc * var_parameters__GNaB; // uA_per_uF + const double var_parameters__ena_sl = log(NV_Ith_S(mParameters, 8) / var_chaste_interface__Na_Concentrations__Na_sl) / var_parameters__FoRT; // mV + const double var_I_Na__I_Na_sl = pow(var_chaste_interface__I_Na__m, 3) * (-var_parameters__ena_sl + var_chaste_interface__membrane_potential__V_m) * var_chaste_interface__I_Na__h * var_chaste_interface__I_Na__j * var_parameters__Fsl * NV_Ith_S(mParameters, 13); // uA_per_uF + const double var_I_NaBK__I_nabk_sl = (-var_parameters__ena_sl + var_chaste_interface__membrane_potential__V_m) * var_parameters__Fsl * var_parameters__GNaB; // uA_per_uF + const double var_parameters__hillSRCaP = 1.7869999999999999; // dimensionless + const double var_SR_Fluxes__J_serca = pow(var_parameters__Q10SRCaP, var_parameters__Qpow) * (pow((var_chaste_interface__Ca_Concentrations__Ca_i / var_parameters__Kmf), var_parameters__hillSRCaP) - pow((var_chaste_interface__SR_Ca_Concentrations__Ca_sr / var_parameters__Kmr), var_parameters__hillSRCaP)) * NV_Ith_S(mParameters, 2) / (1 + pow((var_chaste_interface__Ca_Concentrations__Ca_i / var_parameters__Kmf), var_parameters__hillSRCaP) + pow((var_chaste_interface__SR_Ca_Concentrations__Ca_sr / var_parameters__Kmr), var_parameters__hillSRCaP)); // mM_per_msec + const double var_parameters__kiCa = 0.5; // per_mM_per_msec + const double var_SR_Fluxes__kiSRCa = var_SR_Fluxes__kCaSR * var_parameters__kiCa; // per_mM_per_msec + const double var_parameters__kim = 0.0050000000000000001; // per_msec + const double var_parameters__koCa = 10; // per_mM2_per_msec + const double var_SR_Fluxes__koSRCa = var_parameters__koCa / var_SR_Fluxes__kCaSR; // per_mM2_per_msec + const double var_parameters__koff_cam = 0.23799999999999999; // per_msec + const double var_parameters__koff_csqn = 65; // per_msec + const double var_parameters__koff_myoca = 0.00046000000000000001; // per_msec + const double var_parameters__koff_myomg = 5.7000000000000003e-5; // per_msec + const double var_parameters__koff_na = 0.001; // per_msec + const double var_parameters__koff_slh = 0.029999999999999999; // per_msec + const double var_parameters__koff_sll = 1.3; // per_msec + const double var_parameters__koff_sr = 0.059999999999999998; // per_msec + const double var_parameters__koff_tnchca = 3.1999999999999999e-5; // per_msec + const double var_parameters__koff_tnchmg = 0.0033300000000000001; // per_msec + const double var_parameters__koff_tncl = 0.019599999999999999; // per_msec + const double var_parameters__kom = 0.059999999999999998; // per_msec + const double d_dt_chaste_interface_var_SR_Fluxes__Ry_Ri = -var_chaste_interface__SR_Fluxes__Ry_Ri * var_parameters__kim - var_chaste_interface__SR_Fluxes__Ry_Ri * var_parameters__kom + pow(var_chaste_interface__Ca_Concentrations__Ca_j, 2) * var_SR_Fluxes__RI * var_SR_Fluxes__koSRCa + var_chaste_interface__Ca_Concentrations__Ca_j * var_chaste_interface__SR_Fluxes__Ry_Ro * var_SR_Fluxes__kiSRCa; // mM / msec + const double d_dt_chaste_interface_var_SR_Fluxes__Ry_Ro = var_chaste_interface__SR_Fluxes__Ry_Ri * var_parameters__kim - var_chaste_interface__SR_Fluxes__Ry_Ro * var_parameters__kom + pow(var_chaste_interface__Ca_Concentrations__Ca_j, 2) * var_chaste_interface__SR_Fluxes__Ry_Rr * var_SR_Fluxes__koSRCa - var_chaste_interface__Ca_Concentrations__Ca_j * var_chaste_interface__SR_Fluxes__Ry_Ro * var_SR_Fluxes__kiSRCa; // mM / msec + const double d_dt_chaste_interface_var_SR_Fluxes__Ry_Rr = var_SR_Fluxes__RI * var_parameters__kim + var_chaste_interface__SR_Fluxes__Ry_Ro * var_parameters__kom - pow(var_chaste_interface__Ca_Concentrations__Ca_j, 2) * var_chaste_interface__SR_Fluxes__Ry_Rr * var_SR_Fluxes__koSRCa - var_chaste_interface__Ca_Concentrations__Ca_j * var_chaste_interface__SR_Fluxes__Ry_Rr * var_SR_Fluxes__kiSRCa; // mM / msec + const double var_parameters__kon_cam = 34; // per_mM_per_msec + const double d_dt_chaste_interface_var_Cytosolic_Ca_Buffers__CaM = -var_chaste_interface__Cytosolic_Ca_Buffers__CaM * var_parameters__koff_cam + (-var_chaste_interface__Cytosolic_Ca_Buffers__CaM + var_parameters__Bmax_CaM) * var_chaste_interface__Ca_Concentrations__Ca_i * var_parameters__kon_cam; // mM / msec + const double var_parameters__kon_csqn = 100; // per_mM_per_msec + const double d_dt_chaste_interface_var_SR_Ca_Concentrations__Csqn_b = -var_chaste_interface__SR_Ca_Concentrations__Csqn_b * var_parameters__koff_csqn + (-var_chaste_interface__SR_Ca_Concentrations__Csqn_b + var_parameters__Bmax_Csqn) * var_chaste_interface__SR_Ca_Concentrations__Ca_sr * var_parameters__kon_csqn; // mM / msec + const double var_parameters__kon_myoca = 13.800000000000001; // per_mM_per_msec + const double d_dt_chaste_interface_var_Cytosolic_Ca_Buffers__Myo_c = -var_chaste_interface__Cytosolic_Ca_Buffers__Myo_c * var_parameters__koff_myoca + (-var_chaste_interface__Cytosolic_Ca_Buffers__Myo_c - var_chaste_interface__Cytosolic_Ca_Buffers__Myo_m + var_parameters__Bmax_myosin) * var_chaste_interface__Ca_Concentrations__Ca_i * var_parameters__kon_myoca; // mM / msec + const double var_parameters__kon_myomg = 0.015699999999999999; // per_mM_per_msec + const double d_dt_chaste_interface_var_Cytosolic_Ca_Buffers__Myo_m = -var_chaste_interface__Cytosolic_Ca_Buffers__Myo_m * var_parameters__koff_myomg + (-var_chaste_interface__Cytosolic_Ca_Buffers__Myo_c - var_chaste_interface__Cytosolic_Ca_Buffers__Myo_m + var_parameters__Bmax_myosin) * var_parameters__Mgi * var_parameters__kon_myomg; // mM / msec + const double var_parameters__kon_na = 0.0001; // per_mM_per_msec + const double var_Na_Buffers__dNa_Bj_dt = -var_chaste_interface__Na_Buffers__Na_Bj * var_parameters__koff_na + (-var_chaste_interface__Na_Buffers__Na_Bj + var_parameters__Bmax_Naj) * var_chaste_interface__Na_Concentrations__Na_j * var_parameters__kon_na; // mM_per_msec + const double d_dt_chaste_interface_var_Na_Buffers__Na_Bj = var_Na_Buffers__dNa_Bj_dt; // mM / msec + const double var_Na_Buffers__dNa_Bsl_dt = -var_chaste_interface__Na_Buffers__Na_Bsl * var_parameters__koff_na + (-var_chaste_interface__Na_Buffers__Na_Bsl + var_parameters__Bmax_Nasl) * var_chaste_interface__Na_Concentrations__Na_sl * var_parameters__kon_na; // mM_per_msec + const double d_dt_chaste_interface_var_Na_Buffers__Na_Bsl = var_Na_Buffers__dNa_Bsl_dt; // mM / msec + const double var_parameters__kon_slh = 100; // per_mM_per_msec + const double d_dt_chaste_interface_var_Junctional_and_SL_Ca_Buffers__SLH_j = -var_chaste_interface__Junctional_and_SL_Ca_Buffers__SLH_j * var_parameters__koff_slh + (-var_chaste_interface__Junctional_and_SL_Ca_Buffers__SLH_j + var_parameters__Bmax_SLhighj) * var_chaste_interface__Ca_Concentrations__Ca_j * var_parameters__kon_slh; // mM / msec + const double d_dt_chaste_interface_var_Junctional_and_SL_Ca_Buffers__SLH_sl = -var_chaste_interface__Junctional_and_SL_Ca_Buffers__SLH_sl * var_parameters__koff_slh + (-var_chaste_interface__Junctional_and_SL_Ca_Buffers__SLH_sl + var_parameters__Bmax_SLhighsl) * var_chaste_interface__Ca_Concentrations__Ca_sl * var_parameters__kon_slh; // mM / msec + const double var_parameters__kon_sll = 100; // per_mM_per_msec + const double d_dt_chaste_interface_var_Junctional_and_SL_Ca_Buffers__SLL_j = -var_chaste_interface__Junctional_and_SL_Ca_Buffers__SLL_j * var_parameters__koff_sll + (-var_chaste_interface__Junctional_and_SL_Ca_Buffers__SLL_j + var_parameters__Bmax_SLlowj) * var_chaste_interface__Ca_Concentrations__Ca_j * var_parameters__kon_sll; // mM / msec + const double d_dt_chaste_interface_var_Junctional_and_SL_Ca_Buffers__SLL_sl = -var_chaste_interface__Junctional_and_SL_Ca_Buffers__SLL_sl * var_parameters__koff_sll + (-var_chaste_interface__Junctional_and_SL_Ca_Buffers__SLL_sl + var_parameters__Bmax_SLlowsl) * var_chaste_interface__Ca_Concentrations__Ca_sl * var_parameters__kon_sll; // mM / msec + const double var_Junctional_and_SL_Ca_Buffers__J_CaB_junction = -var_chaste_interface__Junctional_and_SL_Ca_Buffers__SLH_j * var_parameters__koff_slh - var_chaste_interface__Junctional_and_SL_Ca_Buffers__SLL_j * var_parameters__koff_sll + (-var_chaste_interface__Junctional_and_SL_Ca_Buffers__SLH_j + var_parameters__Bmax_SLhighj) * var_chaste_interface__Ca_Concentrations__Ca_j * var_parameters__kon_slh + (-var_chaste_interface__Junctional_and_SL_Ca_Buffers__SLL_j + var_parameters__Bmax_SLlowj) * var_chaste_interface__Ca_Concentrations__Ca_j * var_parameters__kon_sll; // mM_per_msec + const double var_Junctional_and_SL_Ca_Buffers__J_CaB_sl = -var_chaste_interface__Junctional_and_SL_Ca_Buffers__SLH_sl * var_parameters__koff_slh - var_chaste_interface__Junctional_and_SL_Ca_Buffers__SLL_sl * var_parameters__koff_sll + (-var_chaste_interface__Junctional_and_SL_Ca_Buffers__SLH_sl + var_parameters__Bmax_SLhighsl) * var_chaste_interface__Ca_Concentrations__Ca_sl * var_parameters__kon_slh + (-var_chaste_interface__Junctional_and_SL_Ca_Buffers__SLL_sl + var_parameters__Bmax_SLlowsl) * var_chaste_interface__Ca_Concentrations__Ca_sl * var_parameters__kon_sll; // mM_per_msec + const double var_parameters__kon_sr = 100; // per_mM_per_msec + const double d_dt_chaste_interface_var_Cytosolic_Ca_Buffers__SRB = -var_chaste_interface__Cytosolic_Ca_Buffers__SRB * var_parameters__koff_sr + (-var_chaste_interface__Cytosolic_Ca_Buffers__SRB + var_parameters__Bmax_SR) * var_chaste_interface__Ca_Concentrations__Ca_i * var_parameters__kon_sr; // mM / msec + const double var_parameters__kon_tnchca = 2.3700000000000001; // per_mM_per_msec + const double d_dt_chaste_interface_var_Cytosolic_Ca_Buffers__Tn_CHc = -var_chaste_interface__Cytosolic_Ca_Buffers__Tn_CHc * var_parameters__koff_tnchca + (-var_chaste_interface__Cytosolic_Ca_Buffers__Tn_CHc - var_chaste_interface__Cytosolic_Ca_Buffers__Tn_CHm + var_parameters__Bmax_TnChigh) * var_chaste_interface__Ca_Concentrations__Ca_i * var_parameters__kon_tnchca; // mM / msec + const double var_parameters__kon_tnchmg = 0.0030000000000000001; // per_mM_per_msec + const double d_dt_chaste_interface_var_Cytosolic_Ca_Buffers__Tn_CHm = -var_chaste_interface__Cytosolic_Ca_Buffers__Tn_CHm * var_parameters__koff_tnchmg + (-var_chaste_interface__Cytosolic_Ca_Buffers__Tn_CHc - var_chaste_interface__Cytosolic_Ca_Buffers__Tn_CHm + var_parameters__Bmax_TnChigh) * var_parameters__Mgi * var_parameters__kon_tnchmg; // mM / msec + const double var_parameters__kon_tncl = 32.700000000000003; // per_mM_per_msec + const double var_Cytosolic_Ca_Buffers__J_CaB_cytosol = -var_chaste_interface__Cytosolic_Ca_Buffers__CaM * var_parameters__koff_cam - var_chaste_interface__Cytosolic_Ca_Buffers__Myo_c * var_parameters__koff_myoca - var_chaste_interface__Cytosolic_Ca_Buffers__Myo_m * var_parameters__koff_myomg - var_chaste_interface__Cytosolic_Ca_Buffers__SRB * var_parameters__koff_sr - var_chaste_interface__Cytosolic_Ca_Buffers__Tn_CHc * var_parameters__koff_tnchca - var_chaste_interface__Cytosolic_Ca_Buffers__Tn_CHm * var_parameters__koff_tnchmg - var_chaste_interface__Cytosolic_Ca_Buffers__Tn_CL * var_parameters__koff_tncl + (-var_chaste_interface__Cytosolic_Ca_Buffers__CaM + var_parameters__Bmax_CaM) * var_chaste_interface__Ca_Concentrations__Ca_i * var_parameters__kon_cam + (-var_chaste_interface__Cytosolic_Ca_Buffers__SRB + var_parameters__Bmax_SR) * var_chaste_interface__Ca_Concentrations__Ca_i * var_parameters__kon_sr + (-var_chaste_interface__Cytosolic_Ca_Buffers__Tn_CL + var_parameters__Bmax_TnClow) * var_chaste_interface__Ca_Concentrations__Ca_i * var_parameters__kon_tncl + (-var_chaste_interface__Cytosolic_Ca_Buffers__Myo_c - var_chaste_interface__Cytosolic_Ca_Buffers__Myo_m + var_parameters__Bmax_myosin) * var_chaste_interface__Ca_Concentrations__Ca_i * var_parameters__kon_myoca + (-var_chaste_interface__Cytosolic_Ca_Buffers__Myo_c - var_chaste_interface__Cytosolic_Ca_Buffers__Myo_m + var_parameters__Bmax_myosin) * var_parameters__Mgi * var_parameters__kon_myomg + (-var_chaste_interface__Cytosolic_Ca_Buffers__Tn_CHc - var_chaste_interface__Cytosolic_Ca_Buffers__Tn_CHm + var_parameters__Bmax_TnChigh) * var_chaste_interface__Ca_Concentrations__Ca_i * var_parameters__kon_tnchca + (-var_chaste_interface__Cytosolic_Ca_Buffers__Tn_CHc - var_chaste_interface__Cytosolic_Ca_Buffers__Tn_CHm + var_parameters__Bmax_TnChigh) * var_parameters__Mgi * var_parameters__kon_tnchmg; // mM_per_msec + const double d_dt_chaste_interface_var_Ca_Concentrations__Ca_i = -var_Cytosolic_Ca_Buffers__J_CaB_cytosol + (-var_chaste_interface__Ca_Concentrations__Ca_i + var_chaste_interface__Ca_Concentrations__Ca_sl) * var_parameters__J_ca_slmyo / var_parameters__Vmyo - var_SR_Fluxes__J_serca * var_parameters__Vsr / var_parameters__Vmyo; // mM / msec + const double d_dt_chaste_interface_var_Cytosolic_Ca_Buffers__Tn_CL = -var_chaste_interface__Cytosolic_Ca_Buffers__Tn_CL * var_parameters__koff_tncl + (-var_chaste_interface__Cytosolic_Ca_Buffers__Tn_CL + var_parameters__Bmax_TnClow) * var_chaste_interface__Ca_Concentrations__Ca_i * var_parameters__kon_tncl; // mM / msec + const double var_SR_Fluxes__J_SRCarel = (-var_chaste_interface__Ca_Concentrations__Ca_j + var_chaste_interface__SR_Ca_Concentrations__Ca_sr) * var_chaste_interface__SR_Fluxes__Ry_Ro * NV_Ith_S(mParameters, 1); // mM_per_msec + const double d_dt_chaste_interface_var_SR_Ca_Concentrations__Ca_sr = -var_SR_Fluxes__J_SRCarel + var_chaste_interface__SR_Ca_Concentrations__Csqn_b * var_parameters__koff_csqn - var_SR_Fluxes__J_SRleak * var_parameters__Vmyo / var_parameters__Vsr - (-var_chaste_interface__SR_Ca_Concentrations__Csqn_b + var_parameters__Bmax_Csqn) * var_chaste_interface__SR_Ca_Concentrations__Ca_sr * var_parameters__kon_csqn + var_SR_Fluxes__J_serca; // mM / msec + const double var_parameters__ksat = 0.32000000000000001; // dimensionless + const double var_parameters__nu = 0.27000000000000002; // dimensionless + const double var_I_NCX__s1_junc = pow(var_chaste_interface__Na_Concentrations__Na_j, 3) * NV_Ith_S(mParameters, 5) * exp(var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT * var_parameters__nu); // mM4 + const double var_I_NCX__s1_sl = pow(var_chaste_interface__Na_Concentrations__Na_sl, 3) * NV_Ith_S(mParameters, 5) * exp(var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT * var_parameters__nu); // mM4 + const double var_I_NCX__s2_junc = pow(NV_Ith_S(mParameters, 8), 3) * var_chaste_interface__Ca_Concentrations__Ca_j * exp((-1 + var_parameters__nu) * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT); // mM4 + const double var_I_NCX__I_ncx_junc = pow(var_parameters__Q10NCX, var_parameters__Qpow) * (-var_I_NCX__s2_junc + var_I_NCX__s1_junc) * var_I_NCX__Ka_junc * var_parameters__Fjunc * NV_Ith_S(mParameters, 21) / ((1 + var_parameters__ksat * exp((-1 + var_parameters__nu) * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT)) * var_I_NCX__s3_junc); // uA_per_uF + const double var_I_NCX__s2_sl = pow(NV_Ith_S(mParameters, 8), 3) * var_chaste_interface__Ca_Concentrations__Ca_sl * exp((-1 + var_parameters__nu) * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT); // mM4 + const double var_I_NCX__I_ncx_sl = pow(var_parameters__Q10NCX, var_parameters__Qpow) * (-var_I_NCX__s2_sl + var_I_NCX__s1_sl) * var_I_NCX__Ka_sl * var_parameters__Fsl * NV_Ith_S(mParameters, 21) / ((1 + var_parameters__ksat * exp((-1 + var_parameters__nu) * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT)) * var_I_NCX__s3_sl); // uA_per_uF + const double var_parameters__pCa = 0.00054000000000000001 * NV_Ith_S(mParameters, 11); // cm_per_sec + const double var_I_Ca__ibarca_j = 4 * (-0.34100000000000003 * NV_Ith_S(mParameters, 5) + 0.34100000000000003 * var_chaste_interface__Ca_Concentrations__Ca_j * exp(2 * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT)) * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT * NV_Ith_S(mParameters, 9) * var_parameters__pCa / (-1 + exp(2 * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT)); // uA_per_uF + const double var_I_Ca__I_Ca_junc = 0.45000000000000001 * pow(var_parameters__Q10CaL, var_parameters__Qpow) * (1 - var_chaste_interface__I_Ca__f_Ca_Bj + var_I_Ca__fcaCaj) * var_chaste_interface__I_Ca__d * var_chaste_interface__I_Ca__f * var_I_Ca__ibarca_j * var_parameters__Fjunc_CaL; // uA_per_uF + const double var_Ca_Concentrations__I_Ca_tot_junc = -2 * var_I_NCX__I_ncx_junc + var_I_Ca__I_Ca_junc + var_I_CaBK__I_cabk_junc + var_I_PCa__I_pca_junc; // uA_per_uF + const double d_dt_chaste_interface_var_Ca_Concentrations__Ca_j = -var_Junctional_and_SL_Ca_Buffers__J_CaB_junction + (-var_chaste_interface__Ca_Concentrations__Ca_j + var_chaste_interface__Ca_Concentrations__Ca_sl) * var_parameters__J_ca_juncsl / var_parameters__Vjunc + var_SR_Fluxes__J_SRCarel * var_parameters__Vsr / var_parameters__Vjunc + var_SR_Fluxes__J_SRleak * var_parameters__Vmyo / var_parameters__Vjunc - 0.5 * var_Ca_Concentrations__I_Ca_tot_junc * NV_Ith_S(mParameters, 23) / (NV_Ith_S(mParameters, 9) * var_parameters__Vjunc); // mM / msec + const double var_I_Ca__ibarca_sl = 4 * (-0.34100000000000003 * NV_Ith_S(mParameters, 5) + 0.34100000000000003 * var_chaste_interface__Ca_Concentrations__Ca_sl * exp(2 * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT)) * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT * NV_Ith_S(mParameters, 9) * var_parameters__pCa / (-1 + exp(2 * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT)); // uA_per_uF + const double var_I_Ca__I_Ca_sl = 0.45000000000000001 * pow(var_parameters__Q10CaL, var_parameters__Qpow) * (1 - var_chaste_interface__I_Ca__f_Ca_Bsl + var_I_Ca__fcaCaMSL) * var_chaste_interface__I_Ca__d * var_chaste_interface__I_Ca__f * var_I_Ca__ibarca_sl * var_parameters__Fsl_CaL; // uA_per_uF + const double var_Ca_Concentrations__I_Ca_tot_sl = -2 * var_I_NCX__I_ncx_sl + var_I_Ca__I_Ca_sl + var_I_CaBK__I_cabk_sl + var_I_PCa__I_pca_sl; // uA_per_uF + const double d_dt_chaste_interface_var_Ca_Concentrations__Ca_sl = -var_Junctional_and_SL_Ca_Buffers__J_CaB_sl + (-var_chaste_interface__Ca_Concentrations__Ca_sl + var_chaste_interface__Ca_Concentrations__Ca_i) * var_parameters__J_ca_slmyo / var_parameters__Vsl + (-var_chaste_interface__Ca_Concentrations__Ca_sl + var_chaste_interface__Ca_Concentrations__Ca_j) * var_parameters__J_ca_juncsl / var_parameters__Vsl - 0.5 * var_Ca_Concentrations__I_Ca_tot_sl * NV_Ith_S(mParameters, 23) / (NV_Ith_S(mParameters, 9) * var_parameters__Vsl); // mM / msec + const double var_parameters__pNa = 7.4999999999999993e-9; // cm_per_sec + const double var_I_Ca__ibarna_j = (-0.75 * NV_Ith_S(mParameters, 8) + 0.75 * var_chaste_interface__Na_Concentrations__Na_j * exp(var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT)) * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT * NV_Ith_S(mParameters, 9) * var_parameters__pNa / (-1 + exp(var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT)); // uA_per_uF + const double var_I_Ca__I_CaNa_junc = 0.45000000000000001 * pow(var_parameters__Q10CaL, var_parameters__Qpow) * (1 - var_chaste_interface__I_Ca__f_Ca_Bj + var_I_Ca__fcaCaj) * var_chaste_interface__I_Ca__d * var_chaste_interface__I_Ca__f * var_I_Ca__ibarna_j * var_parameters__Fjunc_CaL; // uA_per_uF + const double var_I_Ca__ibarna_sl = (-0.75 * NV_Ith_S(mParameters, 8) + 0.75 * var_chaste_interface__Na_Concentrations__Na_sl * exp(var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT)) * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT * NV_Ith_S(mParameters, 9) * var_parameters__pNa / (-1 + exp(var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT)); // uA_per_uF + const double var_I_Ca__I_CaNa_sl = 0.45000000000000001 * pow(var_parameters__Q10CaL, var_parameters__Qpow) * (1 - var_chaste_interface__I_Ca__f_Ca_Bsl + var_I_Ca__fcaCaMSL) * var_chaste_interface__I_Ca__d * var_chaste_interface__I_Ca__f * var_I_Ca__ibarna_sl * var_parameters__Fsl_CaL; // uA_per_uF + const double var_Na_Concentrations__I_Na_tot_junc = 3 * var_I_NCX__I_ncx_junc + 3 * var_I_NaK__I_nak_junc + var_I_Ca__I_CaNa_junc + var_I_Na__I_Na_junc + var_I_NaBK__I_nabk_junc; // uA_per_uF + const double d_dt_chaste_interface_var_Na_Concentrations__Na_j = (-var_Na_Buffers__dNa_Bj_dt + (-var_chaste_interface__Na_Concentrations__Na_j + var_chaste_interface__Na_Concentrations__Na_sl) * var_parameters__J_na_juncsl / var_parameters__Vjunc - var_Na_Concentrations__I_Na_tot_junc * NV_Ith_S(mParameters, 23) / (NV_Ith_S(mParameters, 9) * var_parameters__Vjunc)) * NV_Ith_S(mParameters, 3); // mM / msec + const double var_Na_Concentrations__I_Na_tot_sl = 3 * var_I_NCX__I_ncx_sl + 3 * var_I_NaK__I_nak_sl + var_I_Ca__I_CaNa_sl + var_I_Na__I_Na_sl + var_I_NaBK__I_nabk_sl; // uA_per_uF + const double d_dt_chaste_interface_var_Na_Concentrations__Na_sl = (-var_Na_Buffers__dNa_Bsl_dt + (-var_chaste_interface__Na_Concentrations__Na_sl + var_chaste_interface__Na_Concentrations__Na_i) * var_parameters__J_na_slmyo / var_parameters__Vsl + (-var_chaste_interface__Na_Concentrations__Na_sl + var_chaste_interface__Na_Concentrations__Na_j) * var_parameters__J_na_juncsl / var_parameters__Vsl - var_Na_Concentrations__I_Na_tot_sl * NV_Ith_S(mParameters, 23) / (NV_Ith_S(mParameters, 9) * var_parameters__Vsl)) * NV_Ith_S(mParameters, 3); // mM / msec + + if (mSetVoltageDerivativeToZero) + { + d_dt_chaste_interface_var_membrane_potential__V_m = 0.0; + } + else + { + const double var_I_Ks__gks_junc = 0.0035000000000000001; // mS_per_uF + const double var_I_Ks__gks_sl = 0.0035000000000000001; // mS_per_uF + const double var_I_Kp__kp_kp = 1 / (1 + exp(7.4880000000000004 - 0.16722408026755853 * var_chaste_interface__membrane_potential__V_m)); // dimensionless + const double var_I_Kr__rkr = 1 / (1 + exp(3.0833333333333335 + 0.041666666666666664 * var_chaste_interface__membrane_potential__V_m)); // dimensionless + const double var_membrane_potential__i_Stim_converted = GetIntracellularAreaStimulus(var_chaste_interface__environment__time); // uA_per_cm2 + const double var_membrane_potential__i_Stim = var_membrane_potential__i_Stim_converted / HeartConfig::Instance()->GetCapacitance(); // uA_per_uF + const double var_I_Ks__GKs_total = (var_I_Ks__gks_junc * var_parameters__Fjunc + var_I_Ks__gks_sl * var_parameters__Fsl) * NV_Ith_S(mParameters, 19); // mS_per_uF + const double var_parameters__GClB = 0.0089999999999999993; // mS_per_uF + const double var_parameters__GClCa = 0.0548125; // mS_per_uF + const double var_parameters__KdClCa = 0.10000000000000001; // mM + const double var_I_Ki__g_K1 = 0.43033148291193518 * sqrt(NV_Ith_S(mParameters, 7)) * NV_Ith_S(mParameters, 17); // mS_per_uF + const double var_I_Kr__gkr = 0.43033148291193518 * sqrt(NV_Ith_S(mParameters, 7)) * NV_Ith_S(mParameters, 18); // mS_per_uF + const double var_I_NaK__I_nak = var_I_NaK__I_nak_junc + var_I_NaK__I_nak_sl; // uA_per_uF + const double var_parameters__ecl = log(NV_Ith_S(mParameters, 4) / NV_Ith_S(mParameters, 6)) / var_parameters__FoRT; // mV + const double var_I_ClCa__I_ClCa_junc = (-var_parameters__ecl + var_chaste_interface__membrane_potential__V_m) * var_parameters__Fjunc * var_parameters__GClCa / (1 + var_parameters__KdClCa / var_chaste_interface__Ca_Concentrations__Ca_j); // uA_per_uF + const double var_I_ClCa__I_ClCa_sl = (-var_parameters__ecl + var_chaste_interface__membrane_potential__V_m) * var_parameters__Fsl * var_parameters__GClCa / (1 + var_parameters__KdClCa / var_chaste_interface__Ca_Concentrations__Ca_sl); // uA_per_uF + const double var_I_ClCa__I_ClCa = var_I_ClCa__I_ClCa_junc + var_I_ClCa__I_ClCa_sl; // uA_per_uF + const double var_I_ClCa__I_Clbk = (-var_parameters__ecl + var_chaste_interface__membrane_potential__V_m) * var_parameters__GClB; // uA_per_uF + const double var_membrane_potential__I_Cl_tot = var_I_ClCa__I_ClCa + var_I_ClCa__I_Clbk; // uA_per_uF + const double var_parameters__ek = log(NV_Ith_S(mParameters, 7) / var_chaste_interface__K_Concentration__K_i) / var_parameters__FoRT; // mV + const double var_I_Ki__aki = 1.02 / (1 + exp(-14.1227775 + 0.23849999999999999 * var_chaste_interface__membrane_potential__V_m - 0.23849999999999999 * var_parameters__ek)); // dimensionless + const double var_I_Ki__bki = (0.49124000000000001 * exp(0.43983232 + 0.080320000000000003 * var_chaste_interface__membrane_potential__V_m - 0.080320000000000003 * var_parameters__ek) + exp(-36.698642499999998 + 0.061749999999999999 * var_chaste_interface__membrane_potential__V_m - 0.061749999999999999 * var_parameters__ek)) / (1 + exp(-2.4444678999999998 + 0.51429999999999998 * var_parameters__ek - 0.51429999999999998 * var_chaste_interface__membrane_potential__V_m)); // dimensionless + const double var_I_Ki__kiss = var_I_Ki__aki / (var_I_Ki__aki + var_I_Ki__bki); // dimensionless + const double var_I_Ki__I_ki = (-var_parameters__ek + var_chaste_interface__membrane_potential__V_m) * var_I_Ki__g_K1 * var_I_Ki__kiss; // uA_per_uF + const double var_I_Kr__I_kr = (-var_parameters__ek + var_chaste_interface__membrane_potential__V_m) * var_I_Kr__gkr * var_I_Kr__rkr * var_chaste_interface__I_Kr__x_kr; // uA_per_uF + const double var_parameters__epi = 1; // dimensionless + const double var_I_to__GtoFast = ((var_parameters__epi == 1) ? (0.1144 * NV_Ith_S(mParameters, 16)) : (0.0014039999999999999 * NV_Ith_S(mParameters, 16))); // mS_per_uF + const double var_I_to__GtoSlow = ((var_parameters__epi == 1) ? (0.015599999999999999 * NV_Ith_S(mParameters, 20)) : (0.037595999999999997 * NV_Ith_S(mParameters, 20))); // mS_per_uF + const double var_I_to__I_tof = (-var_parameters__ek + var_chaste_interface__membrane_potential__V_m) * var_I_to__GtoFast * var_chaste_interface__I_to__x_to_f * var_chaste_interface__I_to__y_to_f; // uA_per_uF + const double var_I_to__I_tos = (-var_parameters__ek + var_chaste_interface__membrane_potential__V_m) * var_I_to__GtoSlow * var_chaste_interface__I_to__x_to_s * var_chaste_interface__I_to__y_to_s; // uA_per_uF + const double var_I_to__I_to = var_I_to__I_tof + var_I_to__I_tos; // uA_per_uF + const double var_parameters__gkp = 0.002; // mS_per_uF + const double var_I_Kp__I_kp_junc = (-var_parameters__ek + var_chaste_interface__membrane_potential__V_m) * var_I_Kp__kp_kp * var_parameters__Fjunc * var_parameters__gkp; // uA_per_uF + const double var_I_Kp__I_kp_sl = (-var_parameters__ek + var_chaste_interface__membrane_potential__V_m) * var_I_Kp__kp_kp * var_parameters__Fsl * var_parameters__gkp; // uA_per_uF + const double var_I_Kp__I_kp = var_I_Kp__I_kp_junc + var_I_Kp__I_kp_sl; // uA_per_uF + const double var_membrane_potential__I_Ca_tot = var_Ca_Concentrations__I_Ca_tot_junc + var_Ca_Concentrations__I_Ca_tot_sl; // uA_per_uF + const double var_parameters__pK = 1.35e-7; // cm_per_sec + const double var_I_Ca__ibark = (-0.75 * NV_Ith_S(mParameters, 7) + 0.75 * var_chaste_interface__K_Concentration__K_i * exp(var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT)) * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT * NV_Ith_S(mParameters, 9) * var_parameters__pK / (-1 + exp(var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT)); // uA_per_uF + const double var_I_Ca__I_CaK = 0.45000000000000001 * pow(var_parameters__Q10CaL, var_parameters__Qpow) * ((1 - var_chaste_interface__I_Ca__f_Ca_Bj + var_I_Ca__fcaCaj) * var_parameters__Fjunc_CaL + (1 - var_chaste_interface__I_Ca__f_Ca_Bsl + var_I_Ca__fcaCaMSL) * var_parameters__Fsl_CaL) * var_chaste_interface__I_Ca__d * var_chaste_interface__I_Ca__f * var_I_Ca__ibark; // uA_per_uF + const double var_membrane_potential__I_Na_tot = var_Na_Concentrations__I_Na_tot_junc + var_Na_Concentrations__I_Na_tot_sl; // uA_per_uF + const double var_parameters__pNaK = 0.018329999999999999; // dimensionless + const double var_I_Ks__eks = log((NV_Ith_S(mParameters, 8) * var_parameters__pNaK + NV_Ith_S(mParameters, 7)) / (var_chaste_interface__Na_Concentrations__Na_i * var_parameters__pNaK + var_chaste_interface__K_Concentration__K_i)) / var_parameters__FoRT; // mV + const double var_I_Ks__I_ks = pow(var_chaste_interface__I_Ks__x_ks, 2) * (-var_I_Ks__eks + var_chaste_interface__membrane_potential__V_m) * var_I_Ks__GKs_total; // uA_per_uF + const double var_K_Concentration__I_K_tot = -2 * var_I_NaK__I_nak + var_I_Ca__I_CaK + var_I_Ki__I_ki + var_I_Kp__I_kp + var_I_Kr__I_kr + var_I_Ks__I_ks + var_I_to__I_to; // uA_per_uF + const double var_membrane_potential__I_tot = var_K_Concentration__I_K_tot + var_membrane_potential__I_Ca_tot + var_membrane_potential__I_Cl_tot + var_membrane_potential__I_Na_tot; // uA_per_uF + // Special handling of data clamp current here + // (we want to save expense of calling the interpolation method if possible.) + double var_chaste_interface__membrane_data_clamp_current = 0.0; + if (mDataClampIsOn) + { + var_chaste_interface__membrane_data_clamp_current = (-GetExperimentalVoltageAtTimeT(var_chaste_interface__environment__time) + var_chaste_interface__membrane_potential__V_m) * NV_Ith_S(mParameters, 12); // uA_per_cm2 + } + d_dt_chaste_interface_var_membrane_potential__V_m = -var_chaste_interface__membrane_data_clamp_current - var_membrane_potential__I_tot - var_membrane_potential__i_Stim; // mV / msec + } + + NV_Ith_S(rDY,0) = d_dt_chaste_interface_var_membrane_potential__V_m; + NV_Ith_S(rDY,1) = d_dt_chaste_interface_var_Ca_Concentrations__Ca_i; + NV_Ith_S(rDY,2) = d_dt_chaste_interface_var_I_Na__m; + NV_Ith_S(rDY,3) = d_dt_chaste_interface_var_I_Na__h; + NV_Ith_S(rDY,4) = d_dt_chaste_interface_var_I_Na__j; + NV_Ith_S(rDY,5) = d_dt_chaste_interface_var_I_Kr__x_kr; + NV_Ith_S(rDY,6) = d_dt_chaste_interface_var_I_Ks__x_ks; + NV_Ith_S(rDY,7) = d_dt_chaste_interface_var_I_to__x_to_s; + NV_Ith_S(rDY,8) = d_dt_chaste_interface_var_I_to__y_to_s; + NV_Ith_S(rDY,9) = d_dt_chaste_interface_var_I_to__x_to_f; + NV_Ith_S(rDY,10) = d_dt_chaste_interface_var_I_to__y_to_f; + NV_Ith_S(rDY,11) = d_dt_chaste_interface_var_I_Ca__d; + NV_Ith_S(rDY,12) = d_dt_chaste_interface_var_I_Ca__f; + NV_Ith_S(rDY,13) = d_dt_chaste_interface_var_I_Ca__f_Ca_Bj; + NV_Ith_S(rDY,14) = d_dt_chaste_interface_var_I_Ca__f_Ca_Bsl; + NV_Ith_S(rDY,15) = d_dt_chaste_interface_var_SR_Fluxes__Ry_Rr; + NV_Ith_S(rDY,16) = d_dt_chaste_interface_var_SR_Fluxes__Ry_Ro; + NV_Ith_S(rDY,17) = d_dt_chaste_interface_var_SR_Fluxes__Ry_Ri; + NV_Ith_S(rDY,18) = d_dt_chaste_interface_var_Na_Buffers__Na_Bj; + NV_Ith_S(rDY,19) = d_dt_chaste_interface_var_Na_Buffers__Na_Bsl; + NV_Ith_S(rDY,20) = d_dt_chaste_interface_var_Cytosolic_Ca_Buffers__Tn_CL; + NV_Ith_S(rDY,21) = d_dt_chaste_interface_var_Cytosolic_Ca_Buffers__Tn_CHc; + NV_Ith_S(rDY,22) = d_dt_chaste_interface_var_Cytosolic_Ca_Buffers__Tn_CHm; + NV_Ith_S(rDY,23) = d_dt_chaste_interface_var_Cytosolic_Ca_Buffers__CaM; + NV_Ith_S(rDY,24) = d_dt_chaste_interface_var_Cytosolic_Ca_Buffers__Myo_c; + NV_Ith_S(rDY,25) = d_dt_chaste_interface_var_Cytosolic_Ca_Buffers__Myo_m; + NV_Ith_S(rDY,26) = d_dt_chaste_interface_var_Cytosolic_Ca_Buffers__SRB; + NV_Ith_S(rDY,27) = d_dt_chaste_interface_var_Junctional_and_SL_Ca_Buffers__SLL_j; + NV_Ith_S(rDY,28) = d_dt_chaste_interface_var_Junctional_and_SL_Ca_Buffers__SLL_sl; + NV_Ith_S(rDY,29) = d_dt_chaste_interface_var_Junctional_and_SL_Ca_Buffers__SLH_j; + NV_Ith_S(rDY,30) = d_dt_chaste_interface_var_Junctional_and_SL_Ca_Buffers__SLH_sl; + NV_Ith_S(rDY,31) = d_dt_chaste_interface_var_SR_Ca_Concentrations__Csqn_b; + NV_Ith_S(rDY,32) = d_dt_chaste_interface_var_SR_Ca_Concentrations__Ca_sr; + NV_Ith_S(rDY,33) = d_dt_chaste_interface_var_Na_Concentrations__Na_j; + NV_Ith_S(rDY,34) = d_dt_chaste_interface_var_Na_Concentrations__Na_sl; + NV_Ith_S(rDY,35) = d_dt_chaste_interface_var_Na_Concentrations__Na_i; + NV_Ith_S(rDY,36) = d_dt_chaste_interface_var_K_Concentration__K_i; + NV_Ith_S(rDY,37) = d_dt_chaste_interface_var_Ca_Concentrations__Ca_j; + NV_Ith_S(rDY,38) = d_dt_chaste_interface_var_Ca_Concentrations__Ca_sl; + } + + N_Vector Cellgrandi_pasqualini_bers_2010_ssFromCellMLCvodeDataClamp::ComputeDerivedQuantities(double var_chaste_interface__environment__time, const N_Vector & rY) + { + // Inputs: + // Time units: millisecond + double var_chaste_interface__membrane_potential__V_m = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : NV_Ith_S(rY, 0)); + // Units: mV; Initial value: -81.4229700631461 + double var_chaste_interface__Ca_Concentrations__Ca_i = NV_Ith_S(rY, 1); + // Units: mM; Initial value: 8.72745589849657e-05 + double var_chaste_interface__I_Na__m = NV_Ith_S(rY, 2); + // Units: dimensionless; Initial value: 0.00381858135062259 + double var_chaste_interface__I_Na__h = NV_Ith_S(rY, 3); + // Units: dimensionless; Initial value: 0.625086621635645 + double var_chaste_interface__I_Na__j = NV_Ith_S(rY, 4); + // Units: dimensionless; Initial value: 0.62332507235506 + double var_chaste_interface__I_Kr__x_kr = NV_Ith_S(rY, 5); + // Units: dimensionless; Initial value: 0.021733554982663 + double var_chaste_interface__I_Ks__x_ks = NV_Ith_S(rY, 6); + // Units: dimensionless; Initial value: 0.00428981903391989 + double var_chaste_interface__I_to__x_to_s = NV_Ith_S(rY, 7); + // Units: dimensionless; Initial value: 0.000441539203559411 + double var_chaste_interface__I_to__y_to_s = NV_Ith_S(rY, 8); + // Units: dimensionless; Initial value: 0.784875334693892 + double var_chaste_interface__I_to__x_to_f = NV_Ith_S(rY, 9); + // Units: dimensionless; Initial value: 0.000441531250866821 + double var_chaste_interface__I_to__y_to_f = NV_Ith_S(rY, 10); + // Units: dimensionless; Initial value: 0.999995817153572 + double var_chaste_interface__I_Ca__d = NV_Ith_S(rY, 11); + // Units: dimensionless; Initial value: 2.93982287251302e-06 + double var_chaste_interface__I_Ca__f = NV_Ith_S(rY, 12); + // Units: dimensionless; Initial value: 0.99511673495949 + double var_chaste_interface__I_Ca__f_Ca_Bj = NV_Ith_S(rY, 13); + // Units: dimensionless; Initial value: 0.0246142436477748 + double var_chaste_interface__I_Ca__f_Ca_Bsl = NV_Ith_S(rY, 14); + // Units: dimensionless; Initial value: 0.0152416826209301 + double var_chaste_interface__SR_Fluxes__Ry_Ro = NV_Ith_S(rY, 16); + // Units: mM; Initial value: 7.37484660389498e-07 + double var_chaste_interface__SR_Ca_Concentrations__Ca_sr = NV_Ith_S(rY, 32); + // Units: mM; Initial value: 0.555180633859957 + double var_chaste_interface__Na_Concentrations__Na_j = NV_Ith_S(rY, 33); + // Units: mM; Initial value: 8.3215690202059 + double var_chaste_interface__Na_Concentrations__Na_sl = NV_Ith_S(rY, 34); + // Units: mM; Initial value: 8.32094589677861 + double var_chaste_interface__Na_Concentrations__Na_i = NV_Ith_S(rY, 35); + // Units: mM; Initial value: 8.32114502072456 + double var_chaste_interface__K_Concentration__K_i = NV_Ith_S(rY, 36); + // Units: mM; Initial value: 120.0 + double var_chaste_interface__Ca_Concentrations__Ca_j = NV_Ith_S(rY, 37); + // Units: mM; Initial value: 0.000175415190830688 + double var_chaste_interface__Ca_Concentrations__Ca_sl = NV_Ith_S(rY, 38); + // Units: mM; Initial value: 0.000106544589194246 + + // Mathematics + const double var_I_Ca__fcaCaMSL = 0; // dimensionless + const double var_I_Ca__fcaCaj = 0; // dimensionless + const double var_I_Ks__gks_junc = 0.0035000000000000001; // mS_per_uF + const double var_I_Ks__gks_sl = 0.0035000000000000001; // mS_per_uF + const double var_SR_Fluxes__J_SRleak = (-var_chaste_interface__Ca_Concentrations__Ca_j + var_chaste_interface__SR_Ca_Concentrations__Ca_sr) * NV_Ith_S(mParameters, 0); // mM_per_msec + const double var_I_Ca__tauf = 1 / (0.02 + 0.019699999999999999 * exp(-0.23877882250000002 * pow((1 + 0.068965517241379309 * var_chaste_interface__membrane_potential__V_m), 2))); // msec + const double var_I_Kr__rkr = 1 / (1 + exp(3.0833333333333335 + 0.041666666666666664 * var_chaste_interface__membrane_potential__V_m)); // dimensionless + const double var_I_Na__ah = ((var_chaste_interface__membrane_potential__V_m >= -40) ? (0) : (0.057000000000000002 * exp(-11.764705882352942 + 0.14705882352941177 * NV_Ith_S(mParameters, 15) - 0.14705882352941177 * var_chaste_interface__membrane_potential__V_m))); // dimensionless + const double var_I_Na__aj = ((var_chaste_interface__membrane_potential__V_m >= -40) ? (0) : ((37.780000000000001 + var_chaste_interface__membrane_potential__V_m) * (-25428 * exp(0.24440000000000001 * var_chaste_interface__membrane_potential__V_m - 0.24440000000000001 * NV_Ith_S(mParameters, 15)) - 6.9480000000000002e-6 * exp(0.043909999999999998 * NV_Ith_S(mParameters, 15) - 0.043909999999999998 * var_chaste_interface__membrane_potential__V_m)) / (1 + exp(24.640530000000002 + 0.311 * var_chaste_interface__membrane_potential__V_m - 0.311 * NV_Ith_S(mParameters, 15))))); // dimensionless + const double var_I_Na__bh = ((var_chaste_interface__membrane_potential__V_m >= -40) ? (5.9230769230769234 / (1 + exp(-0.96036036036036043 + 0.0900900900900901 * NV_Ith_S(mParameters, 15) - 0.0900900900900901 * var_chaste_interface__membrane_potential__V_m))) : (310000 * exp(0.34849999999999998 * var_chaste_interface__membrane_potential__V_m - 0.34849999999999998 * NV_Ith_S(mParameters, 15)) + 2.7000000000000002 * exp(0.079000000000000001 * var_chaste_interface__membrane_potential__V_m - 0.079000000000000001 * NV_Ith_S(mParameters, 15)))); // dimensionless + const double var_I_Na__bj = ((var_chaste_interface__membrane_potential__V_m >= -40) ? (0.59999999999999998 * exp(0.057000000000000002 * var_chaste_interface__membrane_potential__V_m - 0.057000000000000002 * NV_Ith_S(mParameters, 15)) / (1 + exp(-3.2000000000000002 + 0.10000000000000001 * NV_Ith_S(mParameters, 15) - 0.10000000000000001 * var_chaste_interface__membrane_potential__V_m))) : (0.024240000000000001 * exp(0.01052 * NV_Ith_S(mParameters, 15) - 0.01052 * var_chaste_interface__membrane_potential__V_m) / (1 + exp(-5.5312920000000005 + 0.13780000000000001 * NV_Ith_S(mParameters, 15) - 0.13780000000000001 * var_chaste_interface__membrane_potential__V_m)))); // dimensionless + const double var_I_Na__tauh = 1 / (var_I_Na__ah + var_I_Na__bh); // msec + const double var_I_Na__tauj = 1 / (var_I_Na__aj + var_I_Na__bj); // msec + // Special handling of data clamp current here + // (we want to save expense of calling the interpolation method if possible.) + double var_chaste_interface__membrane_data_clamp_current = 0.0; + if (mDataClampIsOn) + { + var_chaste_interface__membrane_data_clamp_current = (-GetExperimentalVoltageAtTimeT(var_chaste_interface__environment__time) + var_chaste_interface__membrane_potential__V_m) * NV_Ith_S(mParameters, 12); // uA_per_cm2 + } + const double var_membrane_potential__i_Stim_converted = GetIntracellularAreaStimulus(var_chaste_interface__environment__time); // uA_per_cm2 + const double var_parameters__Cmem_converted = 1000000 * NV_Ith_S(mParameters, 23); // uF + const double var_parameters__Fjunc = 0.11; // dimensionless + const double var_parameters__Fjunc_CaL = 0.90000000000000002; // dimensionless + const double var_parameters__Fsl = 1 - var_parameters__Fjunc; // dimensionless + const double var_I_Ks__GKs_total = (var_I_Ks__gks_junc * var_parameters__Fjunc + var_I_Ks__gks_sl * var_parameters__Fsl) * NV_Ith_S(mParameters, 19); // mS_per_uF + const double var_parameters__Fsl_CaL = 1 - var_parameters__Fjunc_CaL; // dimensionless + const double var_parameters__IbarSLCaP = 0.067299999999999999; // uA_per_uF + const double var_parameters__Kdact = 0.00014999999999999999; // mM + const double var_I_NCX__Ka_junc = 1 / (1 + pow(var_parameters__Kdact, 2) / pow(var_chaste_interface__Ca_Concentrations__Ca_j, 2)); // dimensionless + const double var_I_NCX__Ka_sl = 1 / (1 + pow(var_parameters__Kdact, 2) / pow(var_chaste_interface__Ca_Concentrations__Ca_sl, 2)); // dimensionless + const double var_parameters__KmCai = 0.0035899999999999999; // mM + const double var_parameters__KmCao = 1.3; // mM + const double var_parameters__KmKo = 1.5; // mM + const double var_parameters__KmNai = 12.289999999999999; // mM + const double var_parameters__KmNaip = 11; // mM + const double var_parameters__KmNao = 87.5; // mM + const double var_parameters__KmPCa = 0.00050000000000000001; // mM + const double var_parameters__Kmf = 0.00024600000000000002; // mM + const double var_parameters__Kmr = 1.7; // mM + const double var_I_Ki__g_K1 = 0.43033148291193518 * sqrt(NV_Ith_S(mParameters, 7)) * NV_Ith_S(mParameters, 17); // mS_per_uF + const double var_I_Kr__gkr = 0.43033148291193518 * sqrt(NV_Ith_S(mParameters, 7)) * NV_Ith_S(mParameters, 18); // mS_per_uF + const double var_I_NCX__s3_junc = pow(var_chaste_interface__Na_Concentrations__Na_j, 3) * NV_Ith_S(mParameters, 5) + pow(var_chaste_interface__Na_Concentrations__Na_j, 3) * var_parameters__KmCao + pow(NV_Ith_S(mParameters, 8), 3) * var_chaste_interface__Ca_Concentrations__Ca_j + pow(var_parameters__KmNao, 3) * (1 + var_chaste_interface__Ca_Concentrations__Ca_j / var_parameters__KmCai) * var_chaste_interface__Ca_Concentrations__Ca_j + pow(NV_Ith_S(mParameters, 8), 3) * (1 + pow(var_chaste_interface__Na_Concentrations__Na_j, 3) / pow(var_parameters__KmNai, 3)) * var_parameters__KmCai; // mM4 + const double var_I_NCX__s3_sl = pow(var_chaste_interface__Na_Concentrations__Na_sl, 3) * NV_Ith_S(mParameters, 5) + pow(var_chaste_interface__Na_Concentrations__Na_sl, 3) * var_parameters__KmCao + pow(NV_Ith_S(mParameters, 8), 3) * var_chaste_interface__Ca_Concentrations__Ca_sl + pow(var_parameters__KmNao, 3) * (1 + var_chaste_interface__Ca_Concentrations__Ca_sl / var_parameters__KmCai) * var_chaste_interface__Ca_Concentrations__Ca_sl + pow(NV_Ith_S(mParameters, 8), 3) * (1 + pow(var_chaste_interface__Na_Concentrations__Na_sl, 3) / pow(var_parameters__KmNai, 3)) * var_parameters__KmCai; // mM4 + const double var_I_NaK__sigma = -0.14285714285714285 + 0.14285714285714285 * exp(0.01485884101040119 * NV_Ith_S(mParameters, 8)); // dimensionless + const double var_parameters__Q10CaL = 1.8; // dimensionless + const double var_parameters__Q10NCX = 1.5700000000000001; // dimensionless + const double var_parameters__Q10SLCaP = 2.3500000000000001; // dimensionless + const double var_parameters__Q10SRCaP = 2.6000000000000001; // dimensionless + const double var_parameters__FoRT = NV_Ith_S(mParameters, 9) / (NV_Ith_S(mParameters, 10) * NV_Ith_S(mParameters, 24)); // per_mV + const double var_I_NaK__fnak = 1 / (1 + 0.1245 * exp(-0.10000000000000001 * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT) + 0.036499999999999998 * var_I_NaK__sigma * exp(-var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT)); // dimensionless + const double var_I_NaK__I_nak_junc = var_I_NaK__fnak * var_parameters__Fjunc * NV_Ith_S(mParameters, 22) * NV_Ith_S(mParameters, 7) / ((1 + pow(var_parameters__KmNaip, 4) / pow(var_chaste_interface__Na_Concentrations__Na_j, 4)) * (var_parameters__KmKo + NV_Ith_S(mParameters, 7))); // uA_per_uF + const double var_I_NaK__I_nak_sl = var_I_NaK__fnak * var_parameters__Fsl * NV_Ith_S(mParameters, 22) * NV_Ith_S(mParameters, 7) / ((1 + pow(var_parameters__KmNaip, 4) / pow(var_chaste_interface__Na_Concentrations__Na_sl, 4)) * (var_parameters__KmKo + NV_Ith_S(mParameters, 7))); // uA_per_uF + const double var_I_NaK__I_nak = var_I_NaK__I_nak_junc + var_I_NaK__I_nak_sl; // uA_per_uF + const double var_I_NaK__I_nak_converted = HeartConfig::Instance()->GetCapacitance() * var_I_NaK__I_nak; // uA_per_cm2 + const double var_parameters__Qpow = -31 + 0.10000000000000001 * NV_Ith_S(mParameters, 24); // dimensionless + const double var_I_PCa__I_pca_junc = pow(var_chaste_interface__Ca_Concentrations__Ca_j, 1.6000000000000001) * pow(var_parameters__Q10SLCaP, var_parameters__Qpow) * var_parameters__Fjunc * var_parameters__IbarSLCaP / (pow(var_chaste_interface__Ca_Concentrations__Ca_j, 1.6000000000000001) + pow(var_parameters__KmPCa, 1.6000000000000001)); // uA_per_uF + const double var_I_PCa__I_pca_sl = pow(var_chaste_interface__Ca_Concentrations__Ca_sl, 1.6000000000000001) * pow(var_parameters__Q10SLCaP, var_parameters__Qpow) * var_parameters__Fsl * var_parameters__IbarSLCaP / (pow(var_chaste_interface__Ca_Concentrations__Ca_sl, 1.6000000000000001) + pow(var_parameters__KmPCa, 1.6000000000000001)); // uA_per_uF + const double var_I_PCa__I_pca = var_I_PCa__I_pca_junc + var_I_PCa__I_pca_sl; // uA_per_uF + const double var_I_PCa__I_pca_converted = HeartConfig::Instance()->GetCapacitance() * var_I_PCa__I_pca; // uA_per_cm2 + const double var_parameters__ecl = log(NV_Ith_S(mParameters, 4) / NV_Ith_S(mParameters, 6)) / var_parameters__FoRT; // mV + const double var_parameters__ek = log(NV_Ith_S(mParameters, 7) / var_chaste_interface__K_Concentration__K_i) / var_parameters__FoRT; // mV + const double var_I_Ki__aki = 1.02 / (1 + exp(-14.1227775 + 0.23849999999999999 * var_chaste_interface__membrane_potential__V_m - 0.23849999999999999 * var_parameters__ek)); // dimensionless + const double var_I_Ki__bki = (0.49124000000000001 * exp(0.43983232 + 0.080320000000000003 * var_chaste_interface__membrane_potential__V_m - 0.080320000000000003 * var_parameters__ek) + exp(-36.698642499999998 + 0.061749999999999999 * var_chaste_interface__membrane_potential__V_m - 0.061749999999999999 * var_parameters__ek)) / (1 + exp(-2.4444678999999998 + 0.51429999999999998 * var_parameters__ek - 0.51429999999999998 * var_chaste_interface__membrane_potential__V_m)); // dimensionless + const double var_I_Ki__kiss = var_I_Ki__aki / (var_I_Ki__aki + var_I_Ki__bki); // dimensionless + const double var_I_Ki__I_ki = (-var_parameters__ek + var_chaste_interface__membrane_potential__V_m) * var_I_Ki__g_K1 * var_I_Ki__kiss; // uA_per_uF + const double var_I_Ki__I_ki_converted = HeartConfig::Instance()->GetCapacitance() * var_I_Ki__I_ki; // uA_per_cm2 + const double var_I_Kr__I_kr = (-var_parameters__ek + var_chaste_interface__membrane_potential__V_m) * var_I_Kr__gkr * var_I_Kr__rkr * var_chaste_interface__I_Kr__x_kr; // uA_per_uF + const double var_I_Kr__I_kr_converted = HeartConfig::Instance()->GetCapacitance() * var_I_Kr__I_kr; // uA_per_cm2 + const double var_parameters__ena_junc = log(NV_Ith_S(mParameters, 8) / var_chaste_interface__Na_Concentrations__Na_j) / var_parameters__FoRT; // mV + const double var_I_Na__I_Na_junc = pow(var_chaste_interface__I_Na__m, 3) * (-var_parameters__ena_junc + var_chaste_interface__membrane_potential__V_m) * var_chaste_interface__I_Na__h * var_chaste_interface__I_Na__j * var_parameters__Fjunc * NV_Ith_S(mParameters, 13); // uA_per_uF + const double var_parameters__ena_sl = log(NV_Ith_S(mParameters, 8) / var_chaste_interface__Na_Concentrations__Na_sl) / var_parameters__FoRT; // mV + const double var_I_Na__I_Na_sl = pow(var_chaste_interface__I_Na__m, 3) * (-var_parameters__ena_sl + var_chaste_interface__membrane_potential__V_m) * var_chaste_interface__I_Na__h * var_chaste_interface__I_Na__j * var_parameters__Fsl * NV_Ith_S(mParameters, 13); // uA_per_uF + const double var_I_Na__I_Na = var_I_Na__I_Na_junc + var_I_Na__I_Na_sl; // uA_per_uF + const double var_I_Na__I_Na_converted = HeartConfig::Instance()->GetCapacitance() * var_I_Na__I_Na; // uA_per_cm2 + const double var_parameters__epi = 1; // dimensionless + const double var_I_to__GtoFast = ((var_parameters__epi == 1) ? (0.1144 * NV_Ith_S(mParameters, 16)) : (0.0014039999999999999 * NV_Ith_S(mParameters, 16))); // mS_per_uF + const double var_I_to__GtoSlow = ((var_parameters__epi == 1) ? (0.015599999999999999 * NV_Ith_S(mParameters, 20)) : (0.037595999999999997 * NV_Ith_S(mParameters, 20))); // mS_per_uF + const double var_I_to__I_tof = (-var_parameters__ek + var_chaste_interface__membrane_potential__V_m) * var_I_to__GtoFast * var_chaste_interface__I_to__x_to_f * var_chaste_interface__I_to__y_to_f; // uA_per_uF + const double var_I_to__I_tof_converted = HeartConfig::Instance()->GetCapacitance() * var_I_to__I_tof; // uA_per_cm2 + const double var_I_to__I_tos = (-var_parameters__ek + var_chaste_interface__membrane_potential__V_m) * var_I_to__GtoSlow * var_chaste_interface__I_to__x_to_s * var_chaste_interface__I_to__y_to_s; // uA_per_uF + const double var_I_to__I_to = var_I_to__I_tof + var_I_to__I_tos; // uA_per_uF + const double var_I_to__I_to_converted = HeartConfig::Instance()->GetCapacitance() * var_I_to__I_to; // uA_per_cm2 + const double var_I_to__I_tos_converted = HeartConfig::Instance()->GetCapacitance() * var_I_to__I_tos; // uA_per_cm2 + const double var_parameters__hillSRCaP = 1.7869999999999999; // dimensionless + const double var_SR_Fluxes__J_serca = pow(var_parameters__Q10SRCaP, var_parameters__Qpow) * (pow((var_chaste_interface__Ca_Concentrations__Ca_i / var_parameters__Kmf), var_parameters__hillSRCaP) - pow((var_chaste_interface__SR_Ca_Concentrations__Ca_sr / var_parameters__Kmr), var_parameters__hillSRCaP)) * NV_Ith_S(mParameters, 2) / (1 + pow((var_chaste_interface__Ca_Concentrations__Ca_i / var_parameters__Kmf), var_parameters__hillSRCaP) + pow((var_chaste_interface__SR_Ca_Concentrations__Ca_sr / var_parameters__Kmr), var_parameters__hillSRCaP)); // mM_per_msec + const double var_SR_Fluxes__J_SRCarel = (-var_chaste_interface__Ca_Concentrations__Ca_j + var_chaste_interface__SR_Ca_Concentrations__Ca_sr) * var_chaste_interface__SR_Fluxes__Ry_Ro * NV_Ith_S(mParameters, 1); // mM_per_msec + const double var_parameters__ksat = 0.32000000000000001; // dimensionless + const double var_parameters__nu = 0.27000000000000002; // dimensionless + const double var_I_NCX__s1_junc = pow(var_chaste_interface__Na_Concentrations__Na_j, 3) * NV_Ith_S(mParameters, 5) * exp(var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT * var_parameters__nu); // mM4 + const double var_I_NCX__s1_sl = pow(var_chaste_interface__Na_Concentrations__Na_sl, 3) * NV_Ith_S(mParameters, 5) * exp(var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT * var_parameters__nu); // mM4 + const double var_I_NCX__s2_junc = pow(NV_Ith_S(mParameters, 8), 3) * var_chaste_interface__Ca_Concentrations__Ca_j * exp((-1 + var_parameters__nu) * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT); // mM4 + const double var_I_NCX__I_ncx_junc = pow(var_parameters__Q10NCX, var_parameters__Qpow) * (-var_I_NCX__s2_junc + var_I_NCX__s1_junc) * var_I_NCX__Ka_junc * var_parameters__Fjunc * NV_Ith_S(mParameters, 21) / ((1 + var_parameters__ksat * exp((-1 + var_parameters__nu) * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT)) * var_I_NCX__s3_junc); // uA_per_uF + const double var_I_NCX__s2_sl = pow(NV_Ith_S(mParameters, 8), 3) * var_chaste_interface__Ca_Concentrations__Ca_sl * exp((-1 + var_parameters__nu) * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT); // mM4 + const double var_I_NCX__I_ncx_sl = pow(var_parameters__Q10NCX, var_parameters__Qpow) * (-var_I_NCX__s2_sl + var_I_NCX__s1_sl) * var_I_NCX__Ka_sl * var_parameters__Fsl * NV_Ith_S(mParameters, 21) / ((1 + var_parameters__ksat * exp((-1 + var_parameters__nu) * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT)) * var_I_NCX__s3_sl); // uA_per_uF + const double var_I_NCX__I_ncx = var_I_NCX__I_ncx_junc + var_I_NCX__I_ncx_sl; // uA_per_uF + const double var_I_NCX__I_ncx_converted = HeartConfig::Instance()->GetCapacitance() * var_I_NCX__I_ncx; // uA_per_cm2 + const double var_parameters__pCa = 0.00054000000000000001 * NV_Ith_S(mParameters, 11); // cm_per_sec + const double var_I_Ca__ibarca_j = 4 * (-0.34100000000000003 * NV_Ith_S(mParameters, 5) + 0.34100000000000003 * var_chaste_interface__Ca_Concentrations__Ca_j * exp(2 * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT)) * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT * NV_Ith_S(mParameters, 9) * var_parameters__pCa / (-1 + exp(2 * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT)); // uA_per_uF + const double var_I_Ca__I_Ca_junc = 0.45000000000000001 * pow(var_parameters__Q10CaL, var_parameters__Qpow) * (1 - var_chaste_interface__I_Ca__f_Ca_Bj + var_I_Ca__fcaCaj) * var_chaste_interface__I_Ca__d * var_chaste_interface__I_Ca__f * var_I_Ca__ibarca_j * var_parameters__Fjunc_CaL; // uA_per_uF + const double var_I_Ca__ibarca_sl = 4 * (-0.34100000000000003 * NV_Ith_S(mParameters, 5) + 0.34100000000000003 * var_chaste_interface__Ca_Concentrations__Ca_sl * exp(2 * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT)) * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT * NV_Ith_S(mParameters, 9) * var_parameters__pCa / (-1 + exp(2 * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT)); // uA_per_uF + const double var_I_Ca__I_Ca_sl = 0.45000000000000001 * pow(var_parameters__Q10CaL, var_parameters__Qpow) * (1 - var_chaste_interface__I_Ca__f_Ca_Bsl + var_I_Ca__fcaCaMSL) * var_chaste_interface__I_Ca__d * var_chaste_interface__I_Ca__f * var_I_Ca__ibarca_sl * var_parameters__Fsl_CaL; // uA_per_uF + const double var_I_Ca__I_Ca = var_I_Ca__I_Ca_junc + var_I_Ca__I_Ca_sl; // uA_per_uF + const double var_I_Ca__I_Ca_converted = HeartConfig::Instance()->GetCapacitance() * var_I_Ca__I_Ca; // uA_per_cm2 + const double var_parameters__pNaK = 0.018329999999999999; // dimensionless + const double var_I_Ks__eks = log((NV_Ith_S(mParameters, 8) * var_parameters__pNaK + NV_Ith_S(mParameters, 7)) / (var_chaste_interface__Na_Concentrations__Na_i * var_parameters__pNaK + var_chaste_interface__K_Concentration__K_i)) / var_parameters__FoRT; // mV + const double var_I_Ks__I_ks = pow(var_chaste_interface__I_Ks__x_ks, 2) * (-var_I_Ks__eks + var_chaste_interface__membrane_potential__V_m) * var_I_Ks__GKs_total; // uA_per_uF + const double var_I_Ks__I_ks_converted = HeartConfig::Instance()->GetCapacitance() * var_I_Ks__I_ks; // uA_per_cm2 + +#if CHASTE_SUNDIALS_VERSION >= 60000 + N_Vector dqs = N_VNew_Serial(27, CvodeContextManager::Instance()->GetSundialsContext()); +#else + N_Vector dqs = N_VNew_Serial(27); +#endif + NV_Ith_S(dqs, 0) = var_SR_Fluxes__J_SRleak; + NV_Ith_S(dqs, 1) = var_SR_Fluxes__J_SRCarel; + NV_Ith_S(dqs, 2) = var_SR_Fluxes__J_serca; + NV_Ith_S(dqs, 3) = var_parameters__ecl; + NV_Ith_S(dqs, 4) = var_I_Ca__I_Ca_converted; + NV_Ith_S(dqs, 5) = var_I_Ca__tauf; + NV_Ith_S(dqs, 6) = var_I_PCa__I_pca_converted; + NV_Ith_S(dqs, 7) = var_parameters__Cmem_converted; + NV_Ith_S(dqs, 8) = var_chaste_interface__membrane_data_clamp_current; + NV_Ith_S(dqs, 9) = var_I_Na__I_Na_converted; + NV_Ith_S(dqs, 10) = var_I_Na__tauh; + NV_Ith_S(dqs, 11) = var_I_Na__tauj; + NV_Ith_S(dqs, 12) = var_I_to__I_tof_converted; + NV_Ith_S(dqs, 13) = var_I_to__GtoFast; + NV_Ith_S(dqs, 14) = var_I_Ki__I_ki_converted; + NV_Ith_S(dqs, 15) = var_I_Ki__g_K1; + NV_Ith_S(dqs, 16) = var_I_Kr__I_kr_converted; + NV_Ith_S(dqs, 17) = var_I_Ks__I_ks_converted; + NV_Ith_S(dqs, 18) = var_I_Ks__GKs_total; + NV_Ith_S(dqs, 19) = var_I_to__I_tos_converted; + NV_Ith_S(dqs, 20) = var_I_to__GtoSlow; + NV_Ith_S(dqs, 21) = var_I_NCX__I_ncx_converted; + NV_Ith_S(dqs, 22) = var_I_NaK__I_nak_converted; + NV_Ith_S(dqs, 23) = var_membrane_potential__i_Stim_converted; + NV_Ith_S(dqs, 24) = var_I_to__I_to_converted; + NV_Ith_S(dqs, 25) = var_parameters__ek; + NV_Ith_S(dqs, 26) = var_chaste_interface__environment__time; + return dqs; + } + +template<> +void OdeSystemInformation::Initialise(void) +{ + this->mSystemName = "grandi_pasqualini_bers_2010_epi"; + this->mFreeVariableName = "time"; + this->mFreeVariableUnits = "msec"; + + // NV_Ith_S(rY, 0): + this->mVariableNames.push_back("membrane_voltage"); + this->mVariableUnits.push_back("mV"); + this->mInitialConditions.push_back(-81.4229700631461); + + // NV_Ith_S(rY, 1): + this->mVariableNames.push_back("cytosolic_calcium_concentration"); + this->mVariableUnits.push_back("mM"); + this->mInitialConditions.push_back(8.72745589849657e-05); + + // NV_Ith_S(rY, 2): + this->mVariableNames.push_back("membrane_fast_sodium_current_m_gate"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.00381858135062259); + + // NV_Ith_S(rY, 3): + this->mVariableNames.push_back("membrane_fast_sodium_current_h_gate"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.625086621635645); + + // NV_Ith_S(rY, 4): + this->mVariableNames.push_back("membrane_fast_sodium_current_j_gate"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.62332507235506); + + // NV_Ith_S(rY, 5): + this->mVariableNames.push_back("I_Kr__x_kr"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.021733554982663); + + // NV_Ith_S(rY, 6): + this->mVariableNames.push_back("I_Ks__x_ks"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.00428981903391989); + + // NV_Ith_S(rY, 7): + this->mVariableNames.push_back("I_to__x_to_s"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.000441539203559411); + + // NV_Ith_S(rY, 8): + this->mVariableNames.push_back("I_to__y_to_s"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.784875334693892); + + // NV_Ith_S(rY, 9): + this->mVariableNames.push_back("I_to__x_to_f"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.000441531250866821); + + // NV_Ith_S(rY, 10): + this->mVariableNames.push_back("I_to__y_to_f"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.999995817153572); + + // NV_Ith_S(rY, 11): + this->mVariableNames.push_back("membrane_L_type_calcium_current_d_gate"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(2.93982287251302e-06); + + // NV_Ith_S(rY, 12): + this->mVariableNames.push_back("membrane_L_type_calcium_current_f_gate"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.99511673495949); + + // NV_Ith_S(rY, 13): + this->mVariableNames.push_back("I_Ca__f_Ca_Bj"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.0246142436477748); + + // NV_Ith_S(rY, 14): + this->mVariableNames.push_back("membrane_L_type_calcium_current_fCa_gate"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.0152416826209301); + + // NV_Ith_S(rY, 15): + this->mVariableNames.push_back("SR_Fluxes__Ry_Rr"); + this->mVariableUnits.push_back("mM"); + this->mInitialConditions.push_back(0.891022230597263); + + // NV_Ith_S(rY, 16): + this->mVariableNames.push_back("SR_Fluxes__Ry_Ro"); + this->mVariableUnits.push_back("mM"); + this->mInitialConditions.push_back(7.37484660389498e-07); + + // NV_Ith_S(rY, 17): + this->mVariableNames.push_back("SR_Fluxes__Ry_Ri"); + this->mVariableUnits.push_back("mM"); + this->mInitialConditions.push_back(9.01984485847386e-08); + + // NV_Ith_S(rY, 18): + this->mVariableNames.push_back("Na_Buffers__Na_Bj"); + this->mVariableUnits.push_back("mM"); + this->mInitialConditions.push_back(3.43545459048316); + + // NV_Ith_S(rY, 19): + this->mVariableNames.push_back("Na_Buffers__Na_Bsl"); + this->mVariableUnits.push_back("mM"); + this->mInitialConditions.push_back(0.749601264899653); + + // NV_Ith_S(rY, 20): + this->mVariableNames.push_back("Cytosolic_Ca_Buffers__Tn_CL"); + this->mVariableUnits.push_back("mM"); + this->mInitialConditions.push_back(0.00893708435270205); + + // NV_Ith_S(rY, 21): + this->mVariableNames.push_back("Cytosolic_Ca_Buffers__Tn_CHc"); + this->mVariableUnits.push_back("mM"); + this->mInitialConditions.push_back(0.117445983314504); + + // NV_Ith_S(rY, 22): + this->mVariableNames.push_back("Cytosolic_Ca_Buffers__Tn_CHm"); + this->mVariableUnits.push_back("mM"); + this->mInitialConditions.push_back(0.0105996734077994); + + // NV_Ith_S(rY, 23): + this->mVariableNames.push_back("Cytosolic_Ca_Buffers__CaM"); + this->mVariableUnits.push_back("mM"); + this->mInitialConditions.push_back(0.000295653619580701); + + // NV_Ith_S(rY, 24): + this->mVariableNames.push_back("Cytosolic_Ca_Buffers__Myo_c"); + this->mVariableUnits.push_back("mM"); + this->mInitialConditions.push_back(0.00192645052472679); + + // NV_Ith_S(rY, 25): + this->mVariableNames.push_back("Cytosolic_Ca_Buffers__Myo_m"); + this->mVariableUnits.push_back("mM"); + this->mInitialConditions.push_back(0.137557201546068); + + // NV_Ith_S(rY, 26): + this->mVariableNames.push_back("Cytosolic_Ca_Buffers__SRB"); + this->mVariableUnits.push_back("mM"); + this->mInitialConditions.push_back(0.00217414510791738); + + // NV_Ith_S(rY, 27): + this->mVariableNames.push_back("Junctional_and_SL_Ca_Buffers__SLL_j"); + this->mVariableUnits.push_back("mM"); + this->mInitialConditions.push_back(0.00738583890572642); + + // NV_Ith_S(rY, 28): + this->mVariableNames.push_back("Junctional_and_SL_Ca_Buffers__SLL_sl"); + this->mVariableUnits.push_back("mM"); + this->mInitialConditions.push_back(0.00988178900584875); + + // NV_Ith_S(rY, 29): + this->mVariableNames.push_back("Junctional_and_SL_Ca_Buffers__SLH_j"); + this->mVariableUnits.push_back("mM"); + this->mInitialConditions.push_back(0.0734662466011574); + + // NV_Ith_S(rY, 30): + this->mVariableNames.push_back("Junctional_and_SL_Ca_Buffers__SLH_sl"); + this->mVariableUnits.push_back("mM"); + this->mInitialConditions.push_back(0.114400081504523); + + // NV_Ith_S(rY, 31): + this->mVariableNames.push_back("SR_Ca_Concentrations__Csqn_b"); + this->mVariableUnits.push_back("mM"); + this->mInitialConditions.push_back(1.19772047585784); + + // NV_Ith_S(rY, 32): + this->mVariableNames.push_back("JSR_calcium_concentration"); + this->mVariableUnits.push_back("mM"); + this->mInitialConditions.push_back(0.555180633859957); + + // NV_Ith_S(rY, 33): + this->mVariableNames.push_back("dyadic_space_sodium_concentration"); + this->mVariableUnits.push_back("mM"); + this->mInitialConditions.push_back(8.3215690202059); + + // NV_Ith_S(rY, 34): + this->mVariableNames.push_back("submembrane_space_sodium_concentration"); + this->mVariableUnits.push_back("mM"); + this->mInitialConditions.push_back(8.32094589677861); + + // NV_Ith_S(rY, 35): + this->mVariableNames.push_back("cytosolic_sodium_concentration"); + this->mVariableUnits.push_back("mM"); + this->mInitialConditions.push_back(8.32114502072456); + + // NV_Ith_S(rY, 36): + this->mVariableNames.push_back("cytosolic_potassium_concentration"); + this->mVariableUnits.push_back("mM"); + this->mInitialConditions.push_back(120.0); + + // NV_Ith_S(rY, 37): + this->mVariableNames.push_back("dyadic_space_calcium_concentration"); + this->mVariableUnits.push_back("mM"); + this->mInitialConditions.push_back(0.000175415190830688); + + // NV_Ith_S(rY, 38): + this->mVariableNames.push_back("submembrane_space_calcium_concentration"); + this->mVariableUnits.push_back("mM"); + this->mInitialConditions.push_back(0.000106544589194246); + + // mParameters[0]: + this->mParameterNames.push_back("SR_leak_current_max"); + this->mParameterUnits.push_back("per_msec"); + + // mParameters[1]: + this->mParameterNames.push_back("SR_release_current_max"); + this->mParameterUnits.push_back("per_msec"); + + // mParameters[2]: + this->mParameterNames.push_back("SR_uptake_current_max"); + this->mParameterUnits.push_back("mM_per_msec"); + + // mParameters[3]: + this->mParameterNames.push_back("concentration_clamp_onoff"); + this->mParameterUnits.push_back("dimensionless"); + + // mParameters[4]: + this->mParameterNames.push_back("cytosolic_chloride_concentration"); + this->mParameterUnits.push_back("mM"); + + // mParameters[5]: + this->mParameterNames.push_back("extracellular_calcium_concentration"); + this->mParameterUnits.push_back("mM"); + + // mParameters[6]: + this->mParameterNames.push_back("extracellular_chloride_concentration"); + this->mParameterUnits.push_back("mM"); + + // mParameters[7]: + this->mParameterNames.push_back("extracellular_potassium_concentration"); + this->mParameterUnits.push_back("mM"); + + // mParameters[8]: + this->mParameterNames.push_back("extracellular_sodium_concentration"); + this->mParameterUnits.push_back("mM"); + + // mParameters[9]: + this->mParameterNames.push_back("faraday_constant"); + this->mParameterUnits.push_back("coulomb_per_mole"); + + // mParameters[10]: + this->mParameterNames.push_back("gas_constant"); + this->mParameterUnits.push_back("joule_per_kelvin_per_kilomole"); + + // mParameters[11]: + this->mParameterNames.push_back("membrane_L_type_calcium_current_conductance"); + this->mParameterUnits.push_back("cm_per_sec"); + + // mParameters[12]: + this->mParameterNames.push_back("membrane_data_clamp_current_conductance"); + this->mParameterUnits.push_back("dimensionless"); + + // mParameters[13]: + this->mParameterNames.push_back("membrane_fast_sodium_current_conductance"); + this->mParameterUnits.push_back("mS_per_uF"); + + // mParameters[14]: + this->mParameterNames.push_back("membrane_fast_sodium_current_reduced_inactivation"); + this->mParameterUnits.push_back("dimensionless"); + + // mParameters[15]: + this->mParameterNames.push_back("membrane_fast_sodium_current_shift_inactivation"); + this->mParameterUnits.push_back("mV"); + + // mParameters[16]: + this->mParameterNames.push_back("membrane_fast_transient_outward_current_conductance_scaling_factor"); + this->mParameterUnits.push_back("dimensionless"); + + // mParameters[17]: + this->mParameterNames.push_back("membrane_inward_rectifier_potassium_current_conductance_scaling_factor"); + this->mParameterUnits.push_back("mS_per_uF"); + + // mParameters[18]: + this->mParameterNames.push_back("membrane_rapid_delayed_rectifier_potassium_current_conductance"); + this->mParameterUnits.push_back("mS_per_uF"); + + // mParameters[19]: + this->mParameterNames.push_back("membrane_slow_delayed_rectifier_potassium_current_conductance_scaling_factor"); + this->mParameterUnits.push_back("dimensionless"); + + // mParameters[20]: + this->mParameterNames.push_back("membrane_slow_transient_outward_current_conductance_scaling_factor"); + this->mParameterUnits.push_back("dimensionless"); + + // mParameters[21]: + this->mParameterNames.push_back("membrane_sodium_calcium_exchanger_current_conductance"); + this->mParameterUnits.push_back("uA_per_uF"); + + // mParameters[22]: + this->mParameterNames.push_back("membrane_sodium_potassium_pump_current_permeability"); + this->mParameterUnits.push_back("uA_per_uF"); + + // mParameters[23]: + this->mParameterNames.push_back("parameters__Cmem"); + this->mParameterUnits.push_back("farad"); + + // mParameters[24]: + this->mParameterNames.push_back("temperature"); + this->mParameterUnits.push_back("kelvin"); + + // Derived Quantity index [0]: + this->mDerivedQuantityNames.push_back("SR_leak_current"); + this->mDerivedQuantityUnits.push_back("mM_per_msec"); + + // Derived Quantity index [1]: + this->mDerivedQuantityNames.push_back("SR_release_current"); + this->mDerivedQuantityUnits.push_back("mM_per_msec"); + + // Derived Quantity index [2]: + this->mDerivedQuantityNames.push_back("SR_uptake_current"); + this->mDerivedQuantityUnits.push_back("mM_per_msec"); + + // Derived Quantity index [3]: + this->mDerivedQuantityNames.push_back("chloride_reversal_potential"); + this->mDerivedQuantityUnits.push_back("mV"); + + // Derived Quantity index [4]: + this->mDerivedQuantityNames.push_back("membrane_L_type_calcium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [5]: + this->mDerivedQuantityNames.push_back("membrane_L_type_calcium_current_f_gate_tau"); + this->mDerivedQuantityUnits.push_back("msec"); + + // Derived Quantity index [6]: + this->mDerivedQuantityNames.push_back("membrane_calcium_pump_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [7]: + this->mDerivedQuantityNames.push_back("membrane_capacitance"); + this->mDerivedQuantityUnits.push_back("uF"); + + // Derived Quantity index [8]: + this->mDerivedQuantityNames.push_back("membrane_data_clamp_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [9]: + this->mDerivedQuantityNames.push_back("membrane_fast_sodium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [10]: + this->mDerivedQuantityNames.push_back("membrane_fast_sodium_current_h_gate_tau"); + this->mDerivedQuantityUnits.push_back("msec"); + + // Derived Quantity index [11]: + this->mDerivedQuantityNames.push_back("membrane_fast_sodium_current_j_gate_tau"); + this->mDerivedQuantityUnits.push_back("msec"); + + // Derived Quantity index [12]: + this->mDerivedQuantityNames.push_back("membrane_fast_transient_outward_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [13]: + this->mDerivedQuantityNames.push_back("membrane_fast_transient_outward_current_conductance"); + this->mDerivedQuantityUnits.push_back("mS_per_uF"); + + // Derived Quantity index [14]: + this->mDerivedQuantityNames.push_back("membrane_inward_rectifier_potassium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [15]: + this->mDerivedQuantityNames.push_back("membrane_inward_rectifier_potassium_current_conductance"); + this->mDerivedQuantityUnits.push_back("mS_per_uF"); + + // Derived Quantity index [16]: + this->mDerivedQuantityNames.push_back("membrane_rapid_delayed_rectifier_potassium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [17]: + this->mDerivedQuantityNames.push_back("membrane_slow_delayed_rectifier_potassium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [18]: + this->mDerivedQuantityNames.push_back("membrane_slow_delayed_rectifier_potassium_current_conductance"); + this->mDerivedQuantityUnits.push_back("mS_per_uF"); + + // Derived Quantity index [19]: + this->mDerivedQuantityNames.push_back("membrane_slow_transient_outward_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [20]: + this->mDerivedQuantityNames.push_back("membrane_slow_transient_outward_current_conductance"); + this->mDerivedQuantityUnits.push_back("mS_per_uF"); + + // Derived Quantity index [21]: + this->mDerivedQuantityNames.push_back("membrane_sodium_calcium_exchanger_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [22]: + this->mDerivedQuantityNames.push_back("membrane_sodium_potassium_pump_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [23]: + this->mDerivedQuantityNames.push_back("membrane_stimulus_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [24]: + this->mDerivedQuantityNames.push_back("membrane_transient_outward_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [25]: + this->mDerivedQuantityNames.push_back("potassium_reversal_potential"); + this->mDerivedQuantityUnits.push_back("mV"); + + // Derived Quantity index [26]: + this->mDerivedQuantityNames.push_back("time"); + this->mDerivedQuantityUnits.push_back("msec"); + + this->mInitialised = true; +} + +// Serialization for Boost >= 1.36 +#include "SerializationExportWrapperForCpp.hpp" +CHASTE_CLASS_EXPORT(Cellgrandi_pasqualini_bers_2010_ssFromCellMLCvodeDataClamp) + +#endif // CHASTE_CVODE diff --git a/chaste_codegen/tests/numerical/baseline/CVODE_DATA_CLAMP/grandi_pasqualini_bers_2010_ssCvodeDataClamp.hpp b/chaste_codegen/tests/numerical/baseline/CVODE_DATA_CLAMP/grandi_pasqualini_bers_2010_ssCvodeDataClamp.hpp new file mode 100644 index 00000000..fbad54e3 --- /dev/null +++ b/chaste_codegen/tests/numerical/baseline/CVODE_DATA_CLAMP/grandi_pasqualini_bers_2010_ssCvodeDataClamp.hpp @@ -0,0 +1,88 @@ +#ifdef CHASTE_CVODE +#ifndef CELLGRANDI_PASQUALINI_BERS_2010_SSFROMCELLMLCVODEDATACLAMP_HPP_ +#define CELLGRANDI_PASQUALINI_BERS_2010_SSFROMCELLMLCVODEDATACLAMP_HPP_ + +//! @file +//! +//! This source file was generated from CellML by chaste_codegen version (version omitted as unimportant) +//! +//! Model: grandi_pasqualini_bers_2010_epi +//! +//! Processed by chaste_codegen: https://github.com/ModellingWebLab/chaste-codegen +//! (translator: chaste_codegen, model type: CvodeCellWithDataClamp) +//! on (date omitted as unimportant) +//! +//! + +#include "ChasteSerialization.hpp" +#include +#include "AbstractStimulusFunction.hpp" +#include "AbstractCvodeCellWithDataClamp.hpp" + +class Cellgrandi_pasqualini_bers_2010_ssFromCellMLCvodeDataClamp : public AbstractCvodeCellWithDataClamp +{ + friend class boost::serialization::access; + template + void serialize(Archive & archive, const unsigned int version) + { + archive & boost::serialization::base_object(*this); + + } + + // + // Settable parameters and readable variables + // + +private: + static AbstractCvodeCellWithDataClamp* CreateMethod(boost::shared_ptr p_solver, boost::shared_ptr p_stimulus); + static bool registered; +private: +const bool is_concentration[39] = {false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, true, true, true, true, true, true}; +const bool is_probability[39] = {false, false, true, true, true, false, false, false, false, false, false, true, true, false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false}; +public: + + boost::shared_ptr UseCellMLDefaultStimulus(); + double GetIntracellularCalciumConcentration(); + Cellgrandi_pasqualini_bers_2010_ssFromCellMLCvodeDataClamp(boost::shared_ptr pOdeSolver /* unused; should be empty */, boost::shared_ptr pIntracellularStimulus); + ~Cellgrandi_pasqualini_bers_2010_ssFromCellMLCvodeDataClamp(); + void VerifyStateVariables(); + double GetIIonic(const std::vector* pStateVariables=NULL); + void EvaluateYDerivatives(double var_chaste_interface__environment__time, const N_Vector rY, N_Vector rDY); + N_Vector ComputeDerivedQuantities(double var_chaste_interface__environment__time, const N_Vector & rY); +}; + +// Needs to be included last +#include "SerializationExportWrapper.hpp" +CHASTE_CLASS_EXPORT(Cellgrandi_pasqualini_bers_2010_ssFromCellMLCvodeDataClamp) + +namespace boost +{ + namespace serialization + { + template + inline void save_construct_data( + Archive & ar, const Cellgrandi_pasqualini_bers_2010_ssFromCellMLCvodeDataClamp * t, const unsigned int fileVersion) + { + const boost::shared_ptr p_solver = t->GetSolver(); + const boost::shared_ptr p_stimulus = t->GetStimulusFunction(); + ar << p_solver; + ar << p_stimulus; + } + + template + inline void load_construct_data( + Archive & ar, Cellgrandi_pasqualini_bers_2010_ssFromCellMLCvodeDataClamp * t, const unsigned int fileVersion) + { + boost::shared_ptr p_solver; + boost::shared_ptr p_stimulus; + ar >> p_solver; + ar >> p_stimulus; + ::new(t)Cellgrandi_pasqualini_bers_2010_ssFromCellMLCvodeDataClamp(p_solver, p_stimulus); + } + + } + +} + +#endif // CELLGRANDI_PASQUALINI_BERS_2010_SSFROMCELLMLCVODEDATACLAMP_HPP_ +#endif // CHASTE_CVODE \ No newline at end of file diff --git a/chaste_codegen/tests/numerical/baseline/CVODE_DATA_CLAMP/hodgkin_huxley_squid_axon_model_1952_modified.cpp b/chaste_codegen/tests/numerical/baseline/CVODE_DATA_CLAMP/hodgkin_huxley_squid_axon_model_1952_modified.cpp new file mode 100644 index 00000000..518f18b5 --- /dev/null +++ b/chaste_codegen/tests/numerical/baseline/CVODE_DATA_CLAMP/hodgkin_huxley_squid_axon_model_1952_modified.cpp @@ -0,0 +1,338 @@ +#ifdef CHASTE_CVODE +//! @file +//! +//! This source file was generated from CellML by chaste_codegen version (version omitted as unimportant) +//! +//! Model: hodgkin_huxley_squid_axon_model_1952_modified +//! +//! Processed by chaste_codegen: https://github.com/ModellingWebLab/chaste-codegen +//! (translator: chaste_codegen, model type: CvodeCellWithDataClamp) +//! on (date omitted as unimportant) +//! +//! + +#include "hodgkin_huxley_squid_axon_model_1952_modified.hpp" +#include +#include +#include +#include +#include "Exception.hpp" +#include "OdeSystemInformation.hpp" +#include "RegularStimulus.hpp" +#include "HeartConfig.hpp" +#include "IsNan.hpp" +#include "MathsCustomFunctions.hpp" + +#if CHASTE_SUNDIALS_VERSION >= 60000 +#include "CvodeContextManager.hpp" +#endif + + + + + + boost::shared_ptr Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLCvodeDataClamp::UseCellMLDefaultStimulus() + { + // Use the default stimulus specified by CellML metadata + const double var_chaste_interface__membrane__stim_amplitude = -20; // microA_per_cm2 + const double var_chaste_interface__membrane__stim_duration = 0.5; // millisecond + const double var_chaste_interface__membrane__stim_period = 1000; // millisecond + const double var_chaste_interface__membrane__stim_start = 10; // millisecond + boost::shared_ptr p_cellml_stim(new RegularStimulus( + -fabs(var_chaste_interface__membrane__stim_amplitude), + var_chaste_interface__membrane__stim_duration, + var_chaste_interface__membrane__stim_period, + var_chaste_interface__membrane__stim_start + )); + mpIntracellularStimulus = p_cellml_stim; + return p_cellml_stim; + } + + Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLCvodeDataClamp::Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLCvodeDataClamp(boost::shared_ptr pOdeSolver /* unused; should be empty */, boost::shared_ptr pIntracellularStimulus) + : AbstractCvodeCellWithDataClamp( + pOdeSolver, + 4, + 0, + pIntracellularStimulus) + { + // Time units: millisecond + // + this->mpSystemInfo = OdeSystemInformation::Instance(); + Init(); + + // We have a default stimulus specified in the CellML file metadata + this->mHasDefaultStimulusFromCellML = true; + + NV_Ith_S(this->mParameters, 0) = 1; // (var_membrane__Cm) [microF_per_cm2] + NV_Ith_S(this->mParameters, 1) = 0; // (var_membrane_data_clamp_current_conductance) [dimensionless] + NV_Ith_S(this->mParameters, 2) = 120; // (var_sodium_channel__g_Na) [milliS_per_cm2] + NV_Ith_S(this->mParameters, 3) = 0.29999999999999999; // (var_leakage_current__g_L) [milliS_per_cm2] + NV_Ith_S(this->mParameters, 4) = 36; // (var_potassium_channel__g_K) [milliS_per_cm2] + } + + Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLCvodeDataClamp::~Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLCvodeDataClamp() + { + } + + + void Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLCvodeDataClamp::VerifyStateVariables() + { + + const double tol = 100*this->mAbsTol; + N_Vector rY = rGetStateVariables(); + std::string error_message = ""; + + for (unsigned i=0; i < 4; i++) + { + if(std::isnan(NV_Ith_S(rY, i))){ + error_message += "State variable " + this->rGetStateVariableNames()[i] + " is not a number\n"; + } + if(std::isinf(NV_Ith_S(rY, i))){ + error_message += "State variable " + this->rGetStateVariableNames()[i] + " has become INFINITE\n"; + } + if(this->is_concentration[i] && NV_Ith_S(rY, i) < -tol) + { + error_message += "Concentration " + this->rGetStateVariableNames()[i] + " below 0\n"; + } + if(this->is_probability[i] && NV_Ith_S(rY, i) < -tol) + { + error_message += "Probability " + this->rGetStateVariableNames()[i] + " below 0\n"; + } + if(this->is_probability[i] && NV_Ith_S(rY, i) > 1 + tol) + { + error_message += "Probability " + this->rGetStateVariableNames()[i] + " above 1\n"; + } + } + if (error_message != ""){ + EXCEPTION(DumpState(error_message)); + } + } + + double Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLCvodeDataClamp::GetIIonic(const std::vector* pStateVariables) + { + // For state variable interpolation (SVI) we read in interpolated state variables, + // otherwise for ionic current interpolation (ICI) we use the state variables of this model (node). + N_Vector rY; + bool made_new_cvode_vector = false; + if (!pStateVariables) + { + rY = rGetStateVariables(); + } + else + { + made_new_cvode_vector = true; + rY = MakeNVector(*pStateVariables); + } + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : NV_Ith_S(rY, 0)); + // Units: millivolt; Initial value: -75.0 + double var_chaste_interface__sodium_channel_m_gate__m = NV_Ith_S(rY, 1); + // Units: dimensionless; Initial value: 0.05 + double var_chaste_interface__sodium_channel_h_gate__h = NV_Ith_S(rY, 2); + // Units: dimensionless; Initial value: 0.6 + double var_chaste_interface__potassium_channel_n_gate__n = NV_Ith_S(rY, 3); + // Units: dimensionless; Initial value: 0.325 + + const double var_membrane__E_R = -75; // millivolt + const double var_leakage_current__E_L = 10.613 + var_membrane__E_R; // millivolt + const double var_leakage_current__i_L = (-var_leakage_current__E_L + var_chaste_interface__membrane__V) * NV_Ith_S(mParameters, 3); // microA_per_cm2 + const double var_potassium_channel__E_K = -12 + var_membrane__E_R; // millivolt + const double var_potassium_channel__i_K = pow(var_chaste_interface__potassium_channel_n_gate__n, 4) * (-var_potassium_channel__E_K + var_chaste_interface__membrane__V) * NV_Ith_S(mParameters, 4); // microA_per_cm2 + const double var_sodium_channel__E_Na = 115 + var_membrane__E_R; // millivolt + const double var_sodium_channel__i_Na = pow(var_chaste_interface__sodium_channel_m_gate__m, 3) * (-var_sodium_channel__E_Na + var_chaste_interface__membrane__V) * NV_Ith_S(mParameters, 2) * var_chaste_interface__sodium_channel_h_gate__h; // microA_per_cm2 + const double var_chaste_interface__i_ionic = var_leakage_current__i_L + var_potassium_channel__i_K + var_sodium_channel__i_Na; // uA_per_cm2 + + const double i_ionic = var_chaste_interface__i_ionic; + if (made_new_cvode_vector) + { + DeleteVector(rY); + } + EXCEPT_IF_NOT(!std::isnan(i_ionic)); + return i_ionic; + } + + void Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLCvodeDataClamp::EvaluateYDerivatives(double var_chaste_interface__environment__time, const N_Vector rY, N_Vector rDY) + { + // Inputs: + // Time units: millisecond + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : NV_Ith_S(rY, 0)); + // Units: millivolt; Initial value: -75.0 + double var_chaste_interface__sodium_channel_m_gate__m = NV_Ith_S(rY, 1); + // Units: dimensionless; Initial value: 0.05 + double var_chaste_interface__sodium_channel_h_gate__h = NV_Ith_S(rY, 2); + // Units: dimensionless; Initial value: 0.6 + double var_chaste_interface__potassium_channel_n_gate__n = NV_Ith_S(rY, 3); + // Units: dimensionless; Initial value: 0.325 + + // Mathematics + double d_dt_chaste_interface_var_membrane__V; + const double var_potassium_channel_n_gate__B = -0.10000000000000001; // per_millivolt + const double var_potassium_channel_n_gate__A = -0.01 / var_potassium_channel_n_gate__B; // per_millisecond + const double var_potassium_channel_n_gate__beta_n = 0.125 * exp(0.9375 + 0.012500000000000001 * var_chaste_interface__membrane__V); // per_millisecond + const double var_potassium_channel_n_gate__v0 = -65; // millivolt + const double var_potassium_channel_n_gate__U = (-var_potassium_channel_n_gate__v0 + var_chaste_interface__membrane__V) * var_potassium_channel_n_gate__B; // dimensionless + const double var_potassium_channel_n_gate__alpha_n = (((var_potassium_channel_n_gate__U >= -9.9999999999999995e-8) && (var_potassium_channel_n_gate__U <= 9.9999999999999995e-8)) ? ((1 - 0.5 * var_potassium_channel_n_gate__U) * var_potassium_channel_n_gate__A) : (var_potassium_channel_n_gate__A * var_potassium_channel_n_gate__U / (-1 + exp(var_potassium_channel_n_gate__U)))); // per_millisecond + const double d_dt_chaste_interface_var_potassium_channel_n_gate__n = (1 - var_chaste_interface__potassium_channel_n_gate__n) * var_potassium_channel_n_gate__alpha_n - var_potassium_channel_n_gate__beta_n * var_chaste_interface__potassium_channel_n_gate__n; // 1 / millisecond + const double var_sodium_channel_h_gate__alpha_h = 0.070000000000000007 * exp(-3.75 - 0.050000000000000003 * var_chaste_interface__membrane__V); // per_millisecond + const double var_sodium_channel_h_gate__beta_h = 1 / (1 + exp(-4.5 - 0.10000000000000001 * var_chaste_interface__membrane__V)); // per_millisecond + const double d_dt_chaste_interface_var_sodium_channel_h_gate__h = (1 - var_chaste_interface__sodium_channel_h_gate__h) * var_sodium_channel_h_gate__alpha_h - var_sodium_channel_h_gate__beta_h * var_chaste_interface__sodium_channel_h_gate__h; // 1 / millisecond + const double var_sodium_channel_m_gate__B = -0.10000000000000001; // per_millivolt + const double var_sodium_channel_m_gate__A = -0.10000000000000001 / var_sodium_channel_m_gate__B; // per_millisecond + const double var_sodium_channel_m_gate__beta_m = 4 * exp(-4.166666666666667 - 0.055555555555555552 * var_chaste_interface__membrane__V); // per_millisecond + const double var_sodium_channel_m_gate__v0 = -50; // millivolt + const double var_sodium_channel_m_gate__U = (-var_sodium_channel_m_gate__v0 + var_chaste_interface__membrane__V) * var_sodium_channel_m_gate__B; // dimensionless + const double var_sodium_channel_m_gate__alpha_m = (((var_sodium_channel_m_gate__U >= -9.9999999999999995e-8) && (var_sodium_channel_m_gate__U <= 9.9999999999999995e-8)) ? ((1 - 0.5 * var_sodium_channel_m_gate__U) * var_sodium_channel_m_gate__A) : (var_sodium_channel_m_gate__A * var_sodium_channel_m_gate__U / (-1 + exp(var_sodium_channel_m_gate__U)))); // per_millisecond + const double d_dt_chaste_interface_var_sodium_channel_m_gate__m = (1 - var_chaste_interface__sodium_channel_m_gate__m) * var_sodium_channel_m_gate__alpha_m - var_sodium_channel_m_gate__beta_m * var_chaste_interface__sodium_channel_m_gate__m; // 1 / millisecond + + if (mSetVoltageDerivativeToZero) + { + d_dt_chaste_interface_var_membrane__V = 0.0; + } + else + { + const double var_membrane__E_R = -75; // millivolt + const double var_leakage_current__E_L = 10.613 + var_membrane__E_R; // millivolt + const double var_leakage_current__i_L = (-var_leakage_current__E_L + var_chaste_interface__membrane__V) * NV_Ith_S(mParameters, 3); // microA_per_cm2 + const double var_membrane__i_Stim = GetIntracellularAreaStimulus(var_chaste_interface__environment__time); // microA_per_cm2 + const double var_potassium_channel__E_K = -12 + var_membrane__E_R; // millivolt + const double var_potassium_channel__i_K = pow(var_chaste_interface__potassium_channel_n_gate__n, 4) * (-var_potassium_channel__E_K + var_chaste_interface__membrane__V) * NV_Ith_S(mParameters, 4); // microA_per_cm2 + const double var_sodium_channel__E_Na = 115 + var_membrane__E_R; // millivolt + const double var_sodium_channel__i_Na = pow(var_chaste_interface__sodium_channel_m_gate__m, 3) * (-var_sodium_channel__E_Na + var_chaste_interface__membrane__V) * NV_Ith_S(mParameters, 2) * var_chaste_interface__sodium_channel_h_gate__h; // microA_per_cm2 + // Special handling of data clamp current here + // (we want to save expense of calling the interpolation method if possible.) + double var_chaste_interface__membrane_data_clamp_current = 0.0; + if (mDataClampIsOn) + { + var_chaste_interface__membrane_data_clamp_current = (-GetExperimentalVoltageAtTimeT(var_chaste_interface__environment__time) + var_chaste_interface__membrane__V) * NV_Ith_S(mParameters, 1); // uA_per_cm2 + } + d_dt_chaste_interface_var_membrane__V = (-var_leakage_current__i_L - var_membrane__i_Stim - var_chaste_interface__membrane_data_clamp_current - var_potassium_channel__i_K - var_sodium_channel__i_Na) / NV_Ith_S(mParameters, 0); // millivolt / millisecond + } + + NV_Ith_S(rDY,0) = d_dt_chaste_interface_var_membrane__V; + NV_Ith_S(rDY,1) = d_dt_chaste_interface_var_sodium_channel_m_gate__m; + NV_Ith_S(rDY,2) = d_dt_chaste_interface_var_sodium_channel_h_gate__h; + NV_Ith_S(rDY,3) = d_dt_chaste_interface_var_potassium_channel_n_gate__n; + } + + N_Vector Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLCvodeDataClamp::ComputeDerivedQuantities(double var_chaste_interface__environment__time, const N_Vector & rY) + { + // Inputs: + // Time units: millisecond + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : NV_Ith_S(rY, 0)); + // Units: millivolt; Initial value: -75.0 + double var_chaste_interface__sodium_channel_m_gate__m = NV_Ith_S(rY, 1); + // Units: dimensionless; Initial value: 0.05 + double var_chaste_interface__sodium_channel_h_gate__h = NV_Ith_S(rY, 2); + // Units: dimensionless; Initial value: 0.6 + double var_chaste_interface__potassium_channel_n_gate__n = NV_Ith_S(rY, 3); + // Units: dimensionless; Initial value: 0.325 + + // Mathematics + const double var_membrane__E_R = -75; // millivolt + const double var_leakage_current__E_L = 10.613 + var_membrane__E_R; // millivolt + const double var_leakage_current__i_L = (-var_leakage_current__E_L + var_chaste_interface__membrane__V) * NV_Ith_S(mParameters, 3); // microA_per_cm2 + const double var_membrane__i_Stim = GetIntracellularAreaStimulus(var_chaste_interface__environment__time); // microA_per_cm2 + // Special handling of data clamp current here + // (we want to save expense of calling the interpolation method if possible.) + double var_chaste_interface__membrane_data_clamp_current = 0.0; + if (mDataClampIsOn) + { + var_chaste_interface__membrane_data_clamp_current = (-GetExperimentalVoltageAtTimeT(var_chaste_interface__environment__time) + var_chaste_interface__membrane__V) * NV_Ith_S(mParameters, 1); // uA_per_cm2 + } + const double var_potassium_channel__E_K = -12 + var_membrane__E_R; // millivolt + const double var_potassium_channel__i_K = pow(var_chaste_interface__potassium_channel_n_gate__n, 4) * (-var_potassium_channel__E_K + var_chaste_interface__membrane__V) * NV_Ith_S(mParameters, 4); // microA_per_cm2 + const double var_sodium_channel__E_Na = 115 + var_membrane__E_R; // millivolt + const double var_sodium_channel__i_Na = pow(var_chaste_interface__sodium_channel_m_gate__m, 3) * (-var_sodium_channel__E_Na + var_chaste_interface__membrane__V) * NV_Ith_S(mParameters, 2) * var_chaste_interface__sodium_channel_h_gate__h; // microA_per_cm2 + +#if CHASTE_SUNDIALS_VERSION >= 60000 + N_Vector dqs = N_VNew_Serial(6, CvodeContextManager::Instance()->GetSundialsContext()); +#else + N_Vector dqs = N_VNew_Serial(6); +#endif + NV_Ith_S(dqs, 0) = var_chaste_interface__membrane_data_clamp_current; + NV_Ith_S(dqs, 1) = var_sodium_channel__i_Na; + NV_Ith_S(dqs, 2) = var_leakage_current__i_L; + NV_Ith_S(dqs, 3) = var_potassium_channel__i_K; + NV_Ith_S(dqs, 4) = var_membrane__i_Stim; + NV_Ith_S(dqs, 5) = var_chaste_interface__environment__time; + return dqs; + } + +template<> +void OdeSystemInformation::Initialise(void) +{ + this->mSystemName = "hodgkin_huxley_squid_axon_model_1952_modified"; + this->mFreeVariableName = "time"; + this->mFreeVariableUnits = "millisecond"; + + // NV_Ith_S(rY, 0): + this->mVariableNames.push_back("membrane_voltage"); + this->mVariableUnits.push_back("millivolt"); + this->mInitialConditions.push_back(-75.0); + + // NV_Ith_S(rY, 1): + this->mVariableNames.push_back("sodium_channel_m_gate__m"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.05); + + // NV_Ith_S(rY, 2): + this->mVariableNames.push_back("sodium_channel_h_gate__h"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.6); + + // NV_Ith_S(rY, 3): + this->mVariableNames.push_back("potassium_channel_n_gate__n"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.325); + + // mParameters[0]: + this->mParameterNames.push_back("membrane_capacitance"); + this->mParameterUnits.push_back("microF_per_cm2"); + + // mParameters[1]: + this->mParameterNames.push_back("membrane_data_clamp_current_conductance"); + this->mParameterUnits.push_back("dimensionless"); + + // mParameters[2]: + this->mParameterNames.push_back("membrane_fast_sodium_current_conductance"); + this->mParameterUnits.push_back("milliS_per_cm2"); + + // mParameters[3]: + this->mParameterNames.push_back("membrane_leakage_current_conductance"); + this->mParameterUnits.push_back("milliS_per_cm2"); + + // mParameters[4]: + this->mParameterNames.push_back("membrane_potassium_current_conductance"); + this->mParameterUnits.push_back("milliS_per_cm2"); + + // Derived Quantity index [0]: + this->mDerivedQuantityNames.push_back("membrane_data_clamp_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [1]: + this->mDerivedQuantityNames.push_back("membrane_fast_sodium_current"); + this->mDerivedQuantityUnits.push_back("microA_per_cm2"); + + // Derived Quantity index [2]: + this->mDerivedQuantityNames.push_back("membrane_leakage_current"); + this->mDerivedQuantityUnits.push_back("microA_per_cm2"); + + // Derived Quantity index [3]: + this->mDerivedQuantityNames.push_back("membrane_potassium_current"); + this->mDerivedQuantityUnits.push_back("microA_per_cm2"); + + // Derived Quantity index [4]: + this->mDerivedQuantityNames.push_back("membrane_stimulus_current"); + this->mDerivedQuantityUnits.push_back("microA_per_cm2"); + + // Derived Quantity index [5]: + this->mDerivedQuantityNames.push_back("time"); + this->mDerivedQuantityUnits.push_back("millisecond"); + + this->mInitialised = true; +} + +// Serialization for Boost >= 1.36 +#include "SerializationExportWrapperForCpp.hpp" +CHASTE_CLASS_EXPORT(Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLCvodeDataClamp) + +#endif // CHASTE_CVODE diff --git a/chaste_codegen/tests/numerical/baseline/CVODE_DATA_CLAMP/hodgkin_huxley_squid_axon_model_1952_modified.hpp b/chaste_codegen/tests/numerical/baseline/CVODE_DATA_CLAMP/hodgkin_huxley_squid_axon_model_1952_modified.hpp new file mode 100644 index 00000000..66abfeb0 --- /dev/null +++ b/chaste_codegen/tests/numerical/baseline/CVODE_DATA_CLAMP/hodgkin_huxley_squid_axon_model_1952_modified.hpp @@ -0,0 +1,85 @@ +#ifdef CHASTE_CVODE +#ifndef CELLHODGKIN_HUXLEY_SQUID_AXON_MODEL_1952_MODIFIEDFROMCELLMLCVODEDATACLAMP_HPP_ +#define CELLHODGKIN_HUXLEY_SQUID_AXON_MODEL_1952_MODIFIEDFROMCELLMLCVODEDATACLAMP_HPP_ + +//! @file +//! +//! This source file was generated from CellML by chaste_codegen version (version omitted as unimportant) +//! +//! Model: hodgkin_huxley_squid_axon_model_1952_modified +//! +//! Processed by chaste_codegen: https://github.com/ModellingWebLab/chaste-codegen +//! (translator: chaste_codegen, model type: CvodeCellWithDataClamp) +//! on (date omitted as unimportant) +//! +//! + +#include "ChasteSerialization.hpp" +#include +#include "AbstractStimulusFunction.hpp" +#include "AbstractCvodeCellWithDataClamp.hpp" + +class Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLCvodeDataClamp : public AbstractCvodeCellWithDataClamp +{ + friend class boost::serialization::access; + template + void serialize(Archive & archive, const unsigned int version) + { + archive & boost::serialization::base_object(*this); + + } + + // + // Settable parameters and readable variables + // + + +private: +const bool is_concentration[4] = {false, false, false, false}; +const bool is_probability[4] = {false, false, false, false}; +public: + + boost::shared_ptr UseCellMLDefaultStimulus(); + Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLCvodeDataClamp(boost::shared_ptr pOdeSolver /* unused; should be empty */, boost::shared_ptr pIntracellularStimulus); + ~Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLCvodeDataClamp(); + void VerifyStateVariables(); + double GetIIonic(const std::vector* pStateVariables=NULL); + void EvaluateYDerivatives(double var_chaste_interface__environment__time, const N_Vector rY, N_Vector rDY); + N_Vector ComputeDerivedQuantities(double var_chaste_interface__environment__time, const N_Vector & rY); +}; + +// Needs to be included last +#include "SerializationExportWrapper.hpp" +CHASTE_CLASS_EXPORT(Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLCvodeDataClamp) + +namespace boost +{ + namespace serialization + { + template + inline void save_construct_data( + Archive & ar, const Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLCvodeDataClamp * t, const unsigned int fileVersion) + { + const boost::shared_ptr p_solver = t->GetSolver(); + const boost::shared_ptr p_stimulus = t->GetStimulusFunction(); + ar << p_solver; + ar << p_stimulus; + } + + template + inline void load_construct_data( + Archive & ar, Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLCvodeDataClamp * t, const unsigned int fileVersion) + { + boost::shared_ptr p_solver; + boost::shared_ptr p_stimulus; + ar >> p_solver; + ar >> p_stimulus; + ::new(t)Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLCvodeDataClamp(p_solver, p_stimulus); + } + + } + +} + +#endif // CELLHODGKIN_HUXLEY_SQUID_AXON_MODEL_1952_MODIFIEDFROMCELLMLCVODEDATACLAMP_HPP_ +#endif // CHASTE_CVODE \ No newline at end of file diff --git a/chaste_codegen/tests/numerical/baseline/CVODE_DATA_CLAMP_OPT/grandi_pasqualini_bers_2010_ssCvodeDataClampOpt.cpp b/chaste_codegen/tests/numerical/baseline/CVODE_DATA_CLAMP_OPT/grandi_pasqualini_bers_2010_ssCvodeDataClampOpt.cpp new file mode 100644 index 00000000..e42e23fd --- /dev/null +++ b/chaste_codegen/tests/numerical/baseline/CVODE_DATA_CLAMP_OPT/grandi_pasqualini_bers_2010_ssCvodeDataClampOpt.cpp @@ -0,0 +1,1426 @@ +#ifdef CHASTE_CVODE +//! @file +//! +//! This source file was generated from CellML by chaste_codegen version (version omitted as unimportant) +//! +//! Model: grandi_pasqualini_bers_2010_epi +//! +//! Processed by chaste_codegen: https://github.com/ModellingWebLab/chaste-codegen +//! (translator: chaste_codegen, model type: CvodeCellWithDataClampOpt) +//! on (date omitted as unimportant) +//! +//! + +#include "grandi_pasqualini_bers_2010_ssCvodeDataClampOpt.hpp" +#include +#include +#include +#include +#include "Exception.hpp" +#include "OdeSystemInformation.hpp" +#include "RegularStimulus.hpp" +#include "HeartConfig.hpp" +#include "IsNan.hpp" +#include "MathsCustomFunctions.hpp" + +#if CHASTE_SUNDIALS_VERSION >= 60000 +#include "CvodeContextManager.hpp" +#endif + +#include "ModelFactory.hpp" + +AbstractCvodeCellWithDataClamp* Cellgrandi_pasqualini_bers_2010_ssFromCellMLCvodeDataClampOpt::CreateMethod(boost::shared_ptr p_solver, boost::shared_ptr p_stimulus) { + return new Cellgrandi_pasqualini_bers_2010_ssFromCellMLCvodeDataClampOpt(p_solver, p_stimulus); +} + +bool Cellgrandi_pasqualini_bers_2010_ssFromCellMLCvodeDataClampOpt::registered = ModelFactory::Register("grandi_pasqualini_bers_2010_ss", "CvodeCellWithDataClampOpt", (ModelFactory::TCreateMethod)Cellgrandi_pasqualini_bers_2010_ssFromCellMLCvodeDataClampOpt::CreateMethod); + +class Cellgrandi_pasqualini_bers_2010_ssFromCellMLCvodeDataClampOpt_LookupTables : public AbstractLookupTableCollection +{ +public: + static Cellgrandi_pasqualini_bers_2010_ssFromCellMLCvodeDataClampOpt_LookupTables* Instance() + { + if (mpInstance.get() == NULL) + { + mpInstance.reset(new Cellgrandi_pasqualini_bers_2010_ssFromCellMLCvodeDataClampOpt_LookupTables); + } + return mpInstance.get(); + } + + void FreeMemory() + { + + if (_lookup_table_0) + { + delete[] _lookup_table_0; + _lookup_table_0 = NULL; + } + + mNeedsRegeneration.assign(mNeedsRegeneration.size(), true); + } + + // Row lookup methods + // using linear-interpolation + + double* _lookup_0_row(unsigned i, double _factor_) + { + for (unsigned j=0; j<19; j++) + { + const double y1 = _lookup_table_0[i][j]; + const double y2 = _lookup_table_0[i+1][j]; + _lookup_table_0_row[j] = y1 + (y2-y1)*_factor_; + } + return _lookup_table_0_row; + } + + + const double * IndexTable0(double var_chaste_interface__membrane_potential__V_m) + { + const double _offset_0 = var_chaste_interface__membrane_potential__V_m - mTableMins[0]; + const double _offset_0_over_table_step = _offset_0 * mTableStepInverses[0]; + const unsigned _table_index_0 = (unsigned)(_offset_0_over_table_step); + const double _factor_0 = _offset_0_over_table_step - _table_index_0; + const double* const _lt_0_row = Cellgrandi_pasqualini_bers_2010_ssFromCellMLCvodeDataClampOpt_LookupTables::Instance()->_lookup_0_row(_table_index_0, _factor_0); + return _lt_0_row; + } + + +// LCOV_EXCL_START + bool CheckIndex0(double& var_chaste_interface__membrane_potential__V_m) + { + bool _oob_0 = false; + if (var_chaste_interface__membrane_potential__V_m>mTableMaxs[0] || var_chaste_interface__membrane_potential__V_m mpInstance; + + // Row lookup methods memory + double _lookup_table_0_row[19]; + + // Lookup tables + double (*_lookup_table_0)[19]; + int _lookup_table_0_num_misshit_piecewise[19] = {0}; + +}; + +std::shared_ptr Cellgrandi_pasqualini_bers_2010_ssFromCellMLCvodeDataClampOpt_LookupTables::mpInstance; + + + boost::shared_ptr Cellgrandi_pasqualini_bers_2010_ssFromCellMLCvodeDataClampOpt::UseCellMLDefaultStimulus() + { + // Use the default stimulus specified by CellML metadata + const double var_chaste_interface__membrane_potential__stim_amplitude_converted = -9.5 * HeartConfig::Instance()->GetCapacitance(); // uA_per_cm2 + const double var_chaste_interface__membrane_potential__stim_duration = 5; // msec + const double var_chaste_interface__membrane_potential__stim_period = 1000; // msec + const double var_chaste_interface__membrane_potential__stim_start = 100; // msec + boost::shared_ptr p_cellml_stim(new RegularStimulus( + -fabs(var_chaste_interface__membrane_potential__stim_amplitude_converted), + var_chaste_interface__membrane_potential__stim_duration, + var_chaste_interface__membrane_potential__stim_period, + var_chaste_interface__membrane_potential__stim_start + )); + mpIntracellularStimulus = p_cellml_stim; + return p_cellml_stim; + } + + double Cellgrandi_pasqualini_bers_2010_ssFromCellMLCvodeDataClampOpt::GetIntracellularCalciumConcentration() + { + return NV_Ith_S(mStateVariables, 1); + } + + Cellgrandi_pasqualini_bers_2010_ssFromCellMLCvodeDataClampOpt::Cellgrandi_pasqualini_bers_2010_ssFromCellMLCvodeDataClampOpt(boost::shared_ptr pOdeSolver /* unused; should be empty */, boost::shared_ptr pIntracellularStimulus) + : AbstractCvodeCellWithDataClamp( + pOdeSolver, + 39, + 0, + pIntracellularStimulus) + { + // Time units: millisecond + // + this->mpSystemInfo = OdeSystemInformation::Instance(); + Init(); + + // We have a default stimulus specified in the CellML file metadata + this->mHasDefaultStimulusFromCellML = true; + + NV_Ith_S(this->mParameters, 0) = 5.3480000000000003e-6; // (var_SR_Fluxes__SR_leak_max) [per_msec] + NV_Ith_S(this->mParameters, 1) = 25; // (var_parameters__ks) [per_msec] + NV_Ith_S(this->mParameters, 2) = 0.0053114; // (var_parameters__Vmax_SRCaP) [mM_per_msec] + NV_Ith_S(this->mParameters, 3) = 1; // (var_Na_Concentrations__conc_clamp) [dimensionless] + NV_Ith_S(this->mParameters, 4) = 15; // (var_parameters__Cli) [mM] + NV_Ith_S(this->mParameters, 5) = 1.8; // (var_parameters__Cao) [mM] + NV_Ith_S(this->mParameters, 6) = 150; // (var_parameters__Clo) [mM] + NV_Ith_S(this->mParameters, 7) = 5.4000000000000004; // (var_parameters__Ko) [mM] + NV_Ith_S(this->mParameters, 8) = 140; // (var_parameters__Nao) [mM] + NV_Ith_S(this->mParameters, 9) = 96485; // (var_parameters__Frdy) [coulomb_per_mole] + NV_Ith_S(this->mParameters, 10) = 8314; // (var_parameters__R) [joule_per_kelvin_per_kilomole] + NV_Ith_S(this->mParameters, 11) = 0.5; // (var_parameters__pCa_max) [cm_per_sec] + NV_Ith_S(this->mParameters, 12) = 0; // (var_membrane_data_clamp_current_conductance) [dimensionless] + NV_Ith_S(this->mParameters, 13) = 23; // (var_parameters__GNa) [mS_per_uF] + NV_Ith_S(this->mParameters, 14) = 0; // (var_I_Na__perc_reduced_inact_for_IpNa) [dimensionless] + NV_Ith_S(this->mParameters, 15) = 0; // (var_I_Na__shift_INa_inact) [mV] + NV_Ith_S(this->mParameters, 16) = 1; // (var_I_to__GtoFast_factor) [dimensionless] + NV_Ith_S(this->mParameters, 17) = 0.34999999999999998; // (var_I_Ki__g_ki_factor) [mS_per_uF] + NV_Ith_S(this->mParameters, 18) = 0.035000000000000003; // (var_I_Kr__gkr_max) [mS_per_uF] + NV_Ith_S(this->mParameters, 19) = 1; // (var_I_Ks__GKs_factor) [dimensionless] + NV_Ith_S(this->mParameters, 20) = 1; // (var_I_to__GtoSlow_factor) [dimensionless] + NV_Ith_S(this->mParameters, 21) = 4.5; // (var_parameters__IbarNCX) [uA_per_uF] + NV_Ith_S(this->mParameters, 22) = 1.8; // (var_parameters__IbarNaK) [uA_per_uF] + NV_Ith_S(this->mParameters, 23) = 1.3809999999999999e-10; // (var_parameters__Cmem) [farad] + NV_Ith_S(this->mParameters, 24) = 310; // (var_parameters__Temp) [kelvin] + } + + Cellgrandi_pasqualini_bers_2010_ssFromCellMLCvodeDataClampOpt::~Cellgrandi_pasqualini_bers_2010_ssFromCellMLCvodeDataClampOpt() + { + } + + AbstractLookupTableCollection* Cellgrandi_pasqualini_bers_2010_ssFromCellMLCvodeDataClampOpt::GetLookupTableCollection() + { + return Cellgrandi_pasqualini_bers_2010_ssFromCellMLCvodeDataClampOpt_LookupTables::Instance(); + } + + void Cellgrandi_pasqualini_bers_2010_ssFromCellMLCvodeDataClampOpt::VerifyStateVariables() + { + + const double tol = 100*this->mAbsTol; + N_Vector rY = rGetStateVariables(); + std::string error_message = ""; + + for (unsigned i=0; i < 39; i++) + { + if(std::isnan(NV_Ith_S(rY, i))){ + error_message += "State variable " + this->rGetStateVariableNames()[i] + " is not a number\n"; + } + if(std::isinf(NV_Ith_S(rY, i))){ + error_message += "State variable " + this->rGetStateVariableNames()[i] + " has become INFINITE\n"; + } + if(this->is_concentration[i] && NV_Ith_S(rY, i) < -tol) + { + error_message += "Concentration " + this->rGetStateVariableNames()[i] + " below 0\n"; + } + if(this->is_probability[i] && NV_Ith_S(rY, i) < -tol) + { + error_message += "Probability " + this->rGetStateVariableNames()[i] + " below 0\n"; + } + if(this->is_probability[i] && NV_Ith_S(rY, i) > 1 + tol) + { + error_message += "Probability " + this->rGetStateVariableNames()[i] + " above 1\n"; + } + } + if (error_message != ""){ + EXCEPTION(DumpState(error_message)); + } + } + + double Cellgrandi_pasqualini_bers_2010_ssFromCellMLCvodeDataClampOpt::GetIIonic(const std::vector* pStateVariables) + { + // For state variable interpolation (SVI) we read in interpolated state variables, + // otherwise for ionic current interpolation (ICI) we use the state variables of this model (node). + N_Vector rY; + bool made_new_cvode_vector = false; + if (!pStateVariables) + { + rY = rGetStateVariables(); + } + else + { + made_new_cvode_vector = true; + rY = MakeNVector(*pStateVariables); + } + double var_chaste_interface__membrane_potential__V_m = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : NV_Ith_S(rY, 0)); + // Units: mV; Initial value: -81.4229700631461 + double var_chaste_interface__I_Na__m = NV_Ith_S(rY, 2); + // Units: dimensionless; Initial value: 0.00381858135062259 + double var_chaste_interface__I_Na__h = NV_Ith_S(rY, 3); + // Units: dimensionless; Initial value: 0.625086621635645 + double var_chaste_interface__I_Na__j = NV_Ith_S(rY, 4); + // Units: dimensionless; Initial value: 0.62332507235506 + double var_chaste_interface__I_Kr__x_kr = NV_Ith_S(rY, 5); + // Units: dimensionless; Initial value: 0.021733554982663 + double var_chaste_interface__I_Ks__x_ks = NV_Ith_S(rY, 6); + // Units: dimensionless; Initial value: 0.00428981903391989 + double var_chaste_interface__I_to__x_to_s = NV_Ith_S(rY, 7); + // Units: dimensionless; Initial value: 0.000441539203559411 + double var_chaste_interface__I_to__y_to_s = NV_Ith_S(rY, 8); + // Units: dimensionless; Initial value: 0.784875334693892 + double var_chaste_interface__I_to__x_to_f = NV_Ith_S(rY, 9); + // Units: dimensionless; Initial value: 0.000441531250866821 + double var_chaste_interface__I_to__y_to_f = NV_Ith_S(rY, 10); + // Units: dimensionless; Initial value: 0.999995817153572 + double var_chaste_interface__I_Ca__d = NV_Ith_S(rY, 11); + // Units: dimensionless; Initial value: 2.93982287251302e-06 + double var_chaste_interface__I_Ca__f = NV_Ith_S(rY, 12); + // Units: dimensionless; Initial value: 0.99511673495949 + double var_chaste_interface__I_Ca__f_Ca_Bj = NV_Ith_S(rY, 13); + // Units: dimensionless; Initial value: 0.0246142436477748 + double var_chaste_interface__I_Ca__f_Ca_Bsl = NV_Ith_S(rY, 14); + // Units: dimensionless; Initial value: 0.0152416826209301 + double var_chaste_interface__Na_Concentrations__Na_j = NV_Ith_S(rY, 33); + // Units: mM; Initial value: 8.3215690202059 + double var_chaste_interface__Na_Concentrations__Na_sl = NV_Ith_S(rY, 34); + // Units: mM; Initial value: 8.32094589677861 + double var_chaste_interface__Na_Concentrations__Na_i = NV_Ith_S(rY, 35); + // Units: mM; Initial value: 8.32114502072456 + double var_chaste_interface__K_Concentration__K_i = NV_Ith_S(rY, 36); + // Units: mM; Initial value: 120.0 + double var_chaste_interface__Ca_Concentrations__Ca_j = NV_Ith_S(rY, 37); + // Units: mM; Initial value: 0.000175415190830688 + double var_chaste_interface__Ca_Concentrations__Ca_sl = NV_Ith_S(rY, 38); + // Units: mM; Initial value: 0.000106544589194246 + + // Lookup table indexing + const bool _oob_0 = Cellgrandi_pasqualini_bers_2010_ssFromCellMLCvodeDataClampOpt_LookupTables::Instance()->CheckIndex0(var_chaste_interface__membrane_potential__V_m); +// LCOV_EXCL_START + if (_oob_0) + EXCEPTION(DumpState("membrane_voltage outside lookup table range", rY)); +// LCOV_EXCL_STOP + const double* const _lt_0_row = Cellgrandi_pasqualini_bers_2010_ssFromCellMLCvodeDataClampOpt_LookupTables::Instance()->IndexTable0(var_chaste_interface__membrane_potential__V_m); + + const double var_I_Ca__fcaCaMSL = 0; // dimensionless + const double var_I_Ca__fcaCaj = 0; // dimensionless + const double var_I_Kp__kp_kp = _lt_0_row[0]; // dimensionless + const double var_parameters__FoRT = NV_Ith_S(mParameters, 9) / (NV_Ith_S(mParameters, 10) * NV_Ith_S(mParameters, 24)); // per_mV + const double var_I_NaK__fnak = 1 / (1 + 0.1245 * exp(-0.10000000000000001 * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT) + 0.036499999999999998 * (-0.14285714285714285 + 0.14285714285714285 * exp(0.01485884101040119 * NV_Ith_S(mParameters, 8))) * exp(-var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT)); // dimensionless + const double var_I_NaK__I_nak_junc = 0.11 * var_I_NaK__fnak * NV_Ith_S(mParameters, 22) * NV_Ith_S(mParameters, 7) / ((1 + 14641 / pow(var_chaste_interface__Na_Concentrations__Na_j, 4)) * (1.5 + NV_Ith_S(mParameters, 7))); // uA_per_uF + const double var_I_NaK__I_nak_sl = 0.89000000000000001 * var_I_NaK__fnak * NV_Ith_S(mParameters, 22) * NV_Ith_S(mParameters, 7) / ((1 + 14641 / pow(var_chaste_interface__Na_Concentrations__Na_sl, 4)) * (1.5 + NV_Ith_S(mParameters, 7))); // uA_per_uF + const double var_parameters__Qpow = -31 + 0.10000000000000001 * NV_Ith_S(mParameters, 24); // dimensionless + const double var_parameters__ecl = log(NV_Ith_S(mParameters, 4) / NV_Ith_S(mParameters, 6)) / var_parameters__FoRT; // mV + const double var_parameters__ek = log(NV_Ith_S(mParameters, 7) / var_chaste_interface__K_Concentration__K_i) / var_parameters__FoRT; // mV + const double var_parameters__ena_junc = log(NV_Ith_S(mParameters, 8) / var_chaste_interface__Na_Concentrations__Na_j) / var_parameters__FoRT; // mV + const double var_parameters__ena_sl = log(NV_Ith_S(mParameters, 8) / var_chaste_interface__Na_Concentrations__Na_sl) / var_parameters__FoRT; // mV + const double var_I_NCX__I_ncx_junc = 0.11 * pow(1.5700000000000001, var_parameters__Qpow) * (pow(var_chaste_interface__Na_Concentrations__Na_j, 3) * NV_Ith_S(mParameters, 5) * exp(0.27000000000000002 * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT) - pow(NV_Ith_S(mParameters, 8), 3) * var_chaste_interface__Ca_Concentrations__Ca_j * exp(-0.72999999999999998 * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT)) * NV_Ith_S(mParameters, 21) / ((1 + 0.32000000000000001 * exp(-0.72999999999999998 * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT)) * (1 + 2.2499999999999996e-8 / pow(var_chaste_interface__Ca_Concentrations__Ca_j, 2)) * (1.3 * pow(var_chaste_interface__Na_Concentrations__Na_j, 3) + pow(var_chaste_interface__Na_Concentrations__Na_j, 3) * NV_Ith_S(mParameters, 5) + pow(NV_Ith_S(mParameters, 8), 3) * var_chaste_interface__Ca_Concentrations__Ca_j + 669921.875 * (1 + 278.55153203342621 * var_chaste_interface__Ca_Concentrations__Ca_j) * var_chaste_interface__Ca_Concentrations__Ca_j + 0.0035899999999999999 * pow(NV_Ith_S(mParameters, 8), 3) * (1 + 0.00053869674493876331 * pow(var_chaste_interface__Na_Concentrations__Na_j, 3)))); // uA_per_uF + const double var_I_NCX__I_ncx_sl = 0.89000000000000001 * pow(1.5700000000000001, var_parameters__Qpow) * (pow(var_chaste_interface__Na_Concentrations__Na_sl, 3) * NV_Ith_S(mParameters, 5) * exp(0.27000000000000002 * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT) - pow(NV_Ith_S(mParameters, 8), 3) * var_chaste_interface__Ca_Concentrations__Ca_sl * exp(-0.72999999999999998 * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT)) * NV_Ith_S(mParameters, 21) / ((1 + 0.32000000000000001 * exp(-0.72999999999999998 * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT)) * (1 + 2.2499999999999996e-8 / pow(var_chaste_interface__Ca_Concentrations__Ca_sl, 2)) * (1.3 * pow(var_chaste_interface__Na_Concentrations__Na_sl, 3) + pow(var_chaste_interface__Na_Concentrations__Na_sl, 3) * NV_Ith_S(mParameters, 5) + pow(NV_Ith_S(mParameters, 8), 3) * var_chaste_interface__Ca_Concentrations__Ca_sl + 669921.875 * (1 + 278.55153203342621 * var_chaste_interface__Ca_Concentrations__Ca_sl) * var_chaste_interface__Ca_Concentrations__Ca_sl + 0.0035899999999999999 * pow(NV_Ith_S(mParameters, 8), 3) * (1 + 0.00053869674493876331 * pow(var_chaste_interface__Na_Concentrations__Na_sl, 3)))); // uA_per_uF + const double var_parameters__pCa = 0.00054000000000000001 * NV_Ith_S(mParameters, 11); // cm_per_sec + const double var_membrane_potential__I_tot = var_I_NCX__I_ncx_junc + var_I_NCX__I_ncx_sl + var_I_NaK__I_nak_junc + var_I_NaK__I_nak_sl + 0.010148299999999999 * var_chaste_interface__membrane_potential__V_m - 0.0089999999999999993 * var_parameters__ecl - 6.567e-5 * var_parameters__ena_junc - 0.00053133 * var_parameters__ena_sl + 0.002 * (-var_parameters__ek + var_chaste_interface__membrane_potential__V_m) * var_I_Kp__kp_kp + 0.006029375 * (-var_parameters__ecl + var_chaste_interface__membrane_potential__V_m) / (1 + 0.10000000000000001 / var_chaste_interface__Ca_Concentrations__Ca_j) + 0.048783124999999997 * (-var_parameters__ecl + var_chaste_interface__membrane_potential__V_m) / (1 + 0.10000000000000001 / var_chaste_interface__Ca_Concentrations__Ca_sl) - 3.0321500000000001e-5 * log(NV_Ith_S(mParameters, 5) / var_chaste_interface__Ca_Concentrations__Ca_j) / var_parameters__FoRT - 0.00024532850000000001 * log(NV_Ith_S(mParameters, 5) / var_chaste_interface__Ca_Concentrations__Ca_sl) / var_parameters__FoRT + 0.0035000000000000001 * pow(var_chaste_interface__I_Ks__x_ks, 2) * (-log((0.018329999999999999 * NV_Ith_S(mParameters, 8) + NV_Ith_S(mParameters, 7)) / (0.018329999999999999 * var_chaste_interface__Na_Concentrations__Na_i + var_chaste_interface__K_Concentration__K_i)) / var_parameters__FoRT + var_chaste_interface__membrane_potential__V_m) * NV_Ith_S(mParameters, 19) + 0.0074029999999999999 * pow(2.3500000000000001, var_parameters__Qpow) * pow(var_chaste_interface__Ca_Concentrations__Ca_j, 1.6000000000000001) / (5.2281977629563632e-6 + pow(var_chaste_interface__Ca_Concentrations__Ca_j, 1.6000000000000001)) + 0.059896999999999999 * pow(2.3500000000000001, var_parameters__Qpow) * pow(var_chaste_interface__Ca_Concentrations__Ca_sl, 1.6000000000000001) / (5.2281977629563632e-6 + pow(var_chaste_interface__Ca_Concentrations__Ca_sl, 1.6000000000000001)) + 0.1144 * (-var_parameters__ek + var_chaste_interface__membrane_potential__V_m) * NV_Ith_S(mParameters, 16) * var_chaste_interface__I_to__x_to_f * var_chaste_interface__I_to__y_to_f + 0.015599999999999999 * (-var_parameters__ek + var_chaste_interface__membrane_potential__V_m) * NV_Ith_S(mParameters, 20) * var_chaste_interface__I_to__x_to_s * var_chaste_interface__I_to__y_to_s + 0.11 * pow(var_chaste_interface__I_Na__m, 3) * (-var_parameters__ena_junc + var_chaste_interface__membrane_potential__V_m) * var_chaste_interface__I_Na__h * var_chaste_interface__I_Na__j * NV_Ith_S(mParameters, 13) + 0.43033148291193518 * sqrt(NV_Ith_S(mParameters, 7)) * (-var_parameters__ek + var_chaste_interface__membrane_potential__V_m) * NV_Ith_S(mParameters, 18) * var_chaste_interface__I_Kr__x_kr / (_lt_0_row[1]) + 0.89000000000000001 * pow(var_chaste_interface__I_Na__m, 3) * (-var_parameters__ena_sl + var_chaste_interface__membrane_potential__V_m) * var_chaste_interface__I_Na__h * var_chaste_interface__I_Na__j * NV_Ith_S(mParameters, 13) + 0.4389381125701739 * sqrt(NV_Ith_S(mParameters, 7)) * (-var_parameters__ek + var_chaste_interface__membrane_potential__V_m) * NV_Ith_S(mParameters, 17) / ((1 + exp(-14.1227775 + 0.23849999999999999 * var_chaste_interface__membrane_potential__V_m - 0.23849999999999999 * var_parameters__ek)) * (1.02 / (1 + exp(-14.1227775 + 0.23849999999999999 * var_chaste_interface__membrane_potential__V_m - 0.23849999999999999 * var_parameters__ek)) + (0.49124000000000001 * exp(0.43983232 + 0.080320000000000003 * var_chaste_interface__membrane_potential__V_m - 0.080320000000000003 * var_parameters__ek) + exp(-36.698642499999998 + 0.061749999999999999 * var_chaste_interface__membrane_potential__V_m - 0.061749999999999999 * var_parameters__ek)) / (1 + exp(-2.4444678999999998 + 0.51429999999999998 * var_parameters__ek - 0.51429999999999998 * var_chaste_interface__membrane_potential__V_m)))) + 3.3749999999999992e-10 * pow(1.8, var_parameters__Qpow) * (-0.75 * NV_Ith_S(mParameters, 8) + 0.75 * var_chaste_interface__Na_Concentrations__Na_sl * exp(var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT)) * (1 - var_chaste_interface__I_Ca__f_Ca_Bsl + var_I_Ca__fcaCaMSL) * var_chaste_interface__I_Ca__d * var_chaste_interface__I_Ca__f * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT * NV_Ith_S(mParameters, 9) / (-1 + exp(var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT)) + 6.0749999999999998e-8 * pow(1.8, var_parameters__Qpow) * (-0.75 * NV_Ith_S(mParameters, 7) + 0.75 * var_chaste_interface__K_Concentration__K_i * exp(var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT)) * (1 + 0.099999999999999978 * var_I_Ca__fcaCaMSL + 0.90000000000000002 * var_I_Ca__fcaCaj - 0.099999999999999978 * var_chaste_interface__I_Ca__f_Ca_Bsl - 0.90000000000000002 * var_chaste_interface__I_Ca__f_Ca_Bj) * var_chaste_interface__I_Ca__d * var_chaste_interface__I_Ca__f * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT * NV_Ith_S(mParameters, 9) / (-1 + exp(var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT)) + 3.0374999999999999e-9 * pow(1.8, var_parameters__Qpow) * (-0.75 * NV_Ith_S(mParameters, 8) + 0.75 * var_chaste_interface__Na_Concentrations__Na_j * exp(var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT)) * (1 - var_chaste_interface__I_Ca__f_Ca_Bj + var_I_Ca__fcaCaj) * var_chaste_interface__I_Ca__d * var_chaste_interface__I_Ca__f * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT * NV_Ith_S(mParameters, 9) / (-1 + exp(var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT)) + 0.17999999999999997 * pow(1.8, var_parameters__Qpow) * (-0.34100000000000003 * NV_Ith_S(mParameters, 5) + 0.34100000000000003 * var_chaste_interface__Ca_Concentrations__Ca_sl * exp(2 * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT)) * (1 - var_chaste_interface__I_Ca__f_Ca_Bsl + var_I_Ca__fcaCaMSL) * var_chaste_interface__I_Ca__d * var_chaste_interface__I_Ca__f * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT * NV_Ith_S(mParameters, 9) * var_parameters__pCa / (-1 + exp(2 * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT)) + 1.6200000000000001 * pow(1.8, var_parameters__Qpow) * (-0.34100000000000003 * NV_Ith_S(mParameters, 5) + 0.34100000000000003 * var_chaste_interface__Ca_Concentrations__Ca_j * exp(2 * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT)) * (1 - var_chaste_interface__I_Ca__f_Ca_Bj + var_I_Ca__fcaCaj) * var_chaste_interface__I_Ca__d * var_chaste_interface__I_Ca__f * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT * NV_Ith_S(mParameters, 9) * var_parameters__pCa / (-1 + exp(2 * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT)); // uA_per_uF + const double var_chaste_interface__i_ionic = HeartConfig::Instance()->GetCapacitance() * var_membrane_potential__I_tot; // uA_per_cm2 + + const double i_ionic = var_chaste_interface__i_ionic; + if (made_new_cvode_vector) + { + DeleteVector(rY); + } + EXCEPT_IF_NOT(!std::isnan(i_ionic)); + return i_ionic; + } + + void Cellgrandi_pasqualini_bers_2010_ssFromCellMLCvodeDataClampOpt::EvaluateYDerivatives(double var_chaste_interface__environment__time, const N_Vector rY, N_Vector rDY) + { + // Inputs: + // Time units: millisecond + double var_chaste_interface__membrane_potential__V_m = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : NV_Ith_S(rY, 0)); + // Units: mV; Initial value: -81.4229700631461 + double var_chaste_interface__Ca_Concentrations__Ca_i = NV_Ith_S(rY, 1); + // Units: mM; Initial value: 8.72745589849657e-05 + double var_chaste_interface__I_Na__m = NV_Ith_S(rY, 2); + // Units: dimensionless; Initial value: 0.00381858135062259 + double var_chaste_interface__I_Na__h = NV_Ith_S(rY, 3); + // Units: dimensionless; Initial value: 0.625086621635645 + double var_chaste_interface__I_Na__j = NV_Ith_S(rY, 4); + // Units: dimensionless; Initial value: 0.62332507235506 + double var_chaste_interface__I_Kr__x_kr = NV_Ith_S(rY, 5); + // Units: dimensionless; Initial value: 0.021733554982663 + double var_chaste_interface__I_Ks__x_ks = NV_Ith_S(rY, 6); + // Units: dimensionless; Initial value: 0.00428981903391989 + double var_chaste_interface__I_to__x_to_s = NV_Ith_S(rY, 7); + // Units: dimensionless; Initial value: 0.000441539203559411 + double var_chaste_interface__I_to__y_to_s = NV_Ith_S(rY, 8); + // Units: dimensionless; Initial value: 0.784875334693892 + double var_chaste_interface__I_to__x_to_f = NV_Ith_S(rY, 9); + // Units: dimensionless; Initial value: 0.000441531250866821 + double var_chaste_interface__I_to__y_to_f = NV_Ith_S(rY, 10); + // Units: dimensionless; Initial value: 0.999995817153572 + double var_chaste_interface__I_Ca__d = NV_Ith_S(rY, 11); + // Units: dimensionless; Initial value: 2.93982287251302e-06 + double var_chaste_interface__I_Ca__f = NV_Ith_S(rY, 12); + // Units: dimensionless; Initial value: 0.99511673495949 + double var_chaste_interface__I_Ca__f_Ca_Bj = NV_Ith_S(rY, 13); + // Units: dimensionless; Initial value: 0.0246142436477748 + double var_chaste_interface__I_Ca__f_Ca_Bsl = NV_Ith_S(rY, 14); + // Units: dimensionless; Initial value: 0.0152416826209301 + double var_chaste_interface__SR_Fluxes__Ry_Rr = NV_Ith_S(rY, 15); + // Units: mM; Initial value: 0.891022230597263 + double var_chaste_interface__SR_Fluxes__Ry_Ro = NV_Ith_S(rY, 16); + // Units: mM; Initial value: 7.37484660389498e-07 + double var_chaste_interface__SR_Fluxes__Ry_Ri = NV_Ith_S(rY, 17); + // Units: mM; Initial value: 9.01984485847386e-08 + double var_chaste_interface__Na_Buffers__Na_Bj = NV_Ith_S(rY, 18); + // Units: mM; Initial value: 3.43545459048316 + double var_chaste_interface__Na_Buffers__Na_Bsl = NV_Ith_S(rY, 19); + // Units: mM; Initial value: 0.749601264899653 + double var_chaste_interface__Cytosolic_Ca_Buffers__Tn_CL = NV_Ith_S(rY, 20); + // Units: mM; Initial value: 0.00893708435270205 + double var_chaste_interface__Cytosolic_Ca_Buffers__Tn_CHc = NV_Ith_S(rY, 21); + // Units: mM; Initial value: 0.117445983314504 + double var_chaste_interface__Cytosolic_Ca_Buffers__Tn_CHm = NV_Ith_S(rY, 22); + // Units: mM; Initial value: 0.0105996734077994 + double var_chaste_interface__Cytosolic_Ca_Buffers__CaM = NV_Ith_S(rY, 23); + // Units: mM; Initial value: 0.000295653619580701 + double var_chaste_interface__Cytosolic_Ca_Buffers__Myo_c = NV_Ith_S(rY, 24); + // Units: mM; Initial value: 0.00192645052472679 + double var_chaste_interface__Cytosolic_Ca_Buffers__Myo_m = NV_Ith_S(rY, 25); + // Units: mM; Initial value: 0.137557201546068 + double var_chaste_interface__Cytosolic_Ca_Buffers__SRB = NV_Ith_S(rY, 26); + // Units: mM; Initial value: 0.00217414510791738 + double var_chaste_interface__Junctional_and_SL_Ca_Buffers__SLL_j = NV_Ith_S(rY, 27); + // Units: mM; Initial value: 0.00738583890572642 + double var_chaste_interface__Junctional_and_SL_Ca_Buffers__SLL_sl = NV_Ith_S(rY, 28); + // Units: mM; Initial value: 0.00988178900584875 + double var_chaste_interface__Junctional_and_SL_Ca_Buffers__SLH_j = NV_Ith_S(rY, 29); + // Units: mM; Initial value: 0.0734662466011574 + double var_chaste_interface__Junctional_and_SL_Ca_Buffers__SLH_sl = NV_Ith_S(rY, 30); + // Units: mM; Initial value: 0.114400081504523 + double var_chaste_interface__SR_Ca_Concentrations__Csqn_b = NV_Ith_S(rY, 31); + // Units: mM; Initial value: 1.19772047585784 + double var_chaste_interface__SR_Ca_Concentrations__Ca_sr = NV_Ith_S(rY, 32); + // Units: mM; Initial value: 0.555180633859957 + double var_chaste_interface__Na_Concentrations__Na_j = NV_Ith_S(rY, 33); + // Units: mM; Initial value: 8.3215690202059 + double var_chaste_interface__Na_Concentrations__Na_sl = NV_Ith_S(rY, 34); + // Units: mM; Initial value: 8.32094589677861 + double var_chaste_interface__Na_Concentrations__Na_i = NV_Ith_S(rY, 35); + // Units: mM; Initial value: 8.32114502072456 + double var_chaste_interface__K_Concentration__K_i = NV_Ith_S(rY, 36); + // Units: mM; Initial value: 120.0 + double var_chaste_interface__Ca_Concentrations__Ca_j = NV_Ith_S(rY, 37); + // Units: mM; Initial value: 0.000175415190830688 + double var_chaste_interface__Ca_Concentrations__Ca_sl = NV_Ith_S(rY, 38); + // Units: mM; Initial value: 0.000106544589194246 + + // Lookup table indexing + const bool _oob_0 = Cellgrandi_pasqualini_bers_2010_ssFromCellMLCvodeDataClampOpt_LookupTables::Instance()->CheckIndex0(var_chaste_interface__membrane_potential__V_m); +// LCOV_EXCL_START + if (_oob_0) + EXCEPTION(DumpState("membrane_voltage outside lookup table range", rY , var_chaste_interface__environment__time)); +// LCOV_EXCL_STOP + const double* const _lt_0_row = Cellgrandi_pasqualini_bers_2010_ssFromCellMLCvodeDataClampOpt_LookupTables::Instance()->IndexTable0(var_chaste_interface__membrane_potential__V_m); + + // Mathematics + double d_dt_chaste_interface_var_membrane_potential__V_m; + const double d_dt_chaste_interface_var_K_Concentration__K_i = 0; // mM / msec + const double d_dt_chaste_interface_var_I_Ca__f_Ca_Bj = -0.011900000000000001 * var_chaste_interface__I_Ca__f_Ca_Bj + 1.7 * (1 - var_chaste_interface__I_Ca__f_Ca_Bj) * var_chaste_interface__Ca_Concentrations__Ca_j; // 1 / msec + const double d_dt_chaste_interface_var_I_Ca__f_Ca_Bsl = -0.011900000000000001 * var_chaste_interface__I_Ca__f_Ca_Bsl + 1.7 * (1 - var_chaste_interface__I_Ca__f_Ca_Bsl) * var_chaste_interface__Ca_Concentrations__Ca_sl; // 1 / msec + const double var_I_Ca__fcaCaMSL = 0; // dimensionless + const double var_I_Ca__fcaCaj = 0; // dimensionless + const double var_SR_Fluxes__RI = 1 - var_chaste_interface__SR_Fluxes__Ry_Ri - var_chaste_interface__SR_Fluxes__Ry_Ro - var_chaste_interface__SR_Fluxes__Ry_Rr; // mM + const double var_SR_Fluxes__J_SRleak = (-var_chaste_interface__Ca_Concentrations__Ca_j + var_chaste_interface__SR_Ca_Concentrations__Ca_sr) * NV_Ith_S(mParameters, 0); // mM_per_msec + const double var_I_Ca__dss = _lt_0_row[2]; // dimensionless + const double d_dt_chaste_interface_var_I_Ca__d = 0.035000000000000003 * (5 + var_chaste_interface__membrane_potential__V_m) * (-var_chaste_interface__I_Ca__d + var_I_Ca__dss) / ((_lt_0_row[3]) * var_I_Ca__dss); // 1 / msec + const double d_dt_chaste_interface_var_I_Ca__f = (_lt_0_row[6]) * (-var_chaste_interface__I_Ca__f + _lt_0_row[4] + _lt_0_row[5]); // 1 / msec + const double d_dt_chaste_interface_var_I_Kr__x_kr = (-var_chaste_interface__I_Kr__x_kr + _lt_0_row[7]) / (_lt_0_row[8]); // 1 / msec + const double d_dt_chaste_interface_var_I_Ks__x_ks = (_lt_0_row[10]) * (-var_chaste_interface__I_Ks__x_ks + _lt_0_row[9]); // 1 / msec + const double d_dt_chaste_interface_var_I_Na__h = (((var_chaste_interface__membrane_potential__V_m >= -40) ? (0) : (0.057000000000000002 * exp(-11.764705882352942 + 0.14705882352941177 * NV_Ith_S(mParameters, 15) - 0.14705882352941177 * var_chaste_interface__membrane_potential__V_m))) + ((var_chaste_interface__membrane_potential__V_m >= -40) ? (5.9230769230769234 / (1 + exp(-0.96036036036036043 + 0.0900900900900901 * NV_Ith_S(mParameters, 15) - 0.0900900900900901 * var_chaste_interface__membrane_potential__V_m))) : (310000 * exp(0.34849999999999998 * var_chaste_interface__membrane_potential__V_m - 0.34849999999999998 * NV_Ith_S(mParameters, 15)) + 2.7000000000000002 * exp(0.079000000000000001 * var_chaste_interface__membrane_potential__V_m - 0.079000000000000001 * NV_Ith_S(mParameters, 15))))) * (-var_chaste_interface__I_Na__h + 0.01 * NV_Ith_S(mParameters, 14) + (1 - 0.01 * NV_Ith_S(mParameters, 14)) / pow((1 + exp(9.6298788694481825 + 0.13458950201884254 * var_chaste_interface__membrane_potential__V_m - 0.13458950201884254 * NV_Ith_S(mParameters, 15))), 2)); // 1 / msec + const double d_dt_chaste_interface_var_I_Na__j = (((var_chaste_interface__membrane_potential__V_m >= -40) ? (0) : ((37.780000000000001 + var_chaste_interface__membrane_potential__V_m) * (-25428 * exp(0.24440000000000001 * var_chaste_interface__membrane_potential__V_m - 0.24440000000000001 * NV_Ith_S(mParameters, 15)) - 6.9480000000000002e-6 * exp(0.043909999999999998 * NV_Ith_S(mParameters, 15) - 0.043909999999999998 * var_chaste_interface__membrane_potential__V_m)) / (1 + exp(24.640530000000002 + 0.311 * var_chaste_interface__membrane_potential__V_m - 0.311 * NV_Ith_S(mParameters, 15))))) + ((var_chaste_interface__membrane_potential__V_m >= -40) ? (0.59999999999999998 * exp(0.057000000000000002 * var_chaste_interface__membrane_potential__V_m - 0.057000000000000002 * NV_Ith_S(mParameters, 15)) / (1 + exp(-3.2000000000000002 + 0.10000000000000001 * NV_Ith_S(mParameters, 15) - 0.10000000000000001 * var_chaste_interface__membrane_potential__V_m))) : (0.024240000000000001 * exp(0.01052 * NV_Ith_S(mParameters, 15) - 0.01052 * var_chaste_interface__membrane_potential__V_m) / (1 + exp(-5.5312920000000005 + 0.13780000000000001 * NV_Ith_S(mParameters, 15) - 0.13780000000000001 * var_chaste_interface__membrane_potential__V_m))))) * (-var_chaste_interface__I_Na__j + 0.01 * NV_Ith_S(mParameters, 14) + (1 - 0.01 * NV_Ith_S(mParameters, 14)) / pow((1 + exp(9.6298788694481825 + 0.13458950201884254 * var_chaste_interface__membrane_potential__V_m - 0.13458950201884254 * NV_Ith_S(mParameters, 15))), 2)); // 1 / msec + const double d_dt_chaste_interface_var_I_Na__m = (-var_chaste_interface__I_Na__m + _lt_0_row[11]) / (_lt_0_row[12]); // 1 / msec + const double var_I_to__xtoss = _lt_0_row[13]; // dimensionless + const double d_dt_chaste_interface_var_I_to__x_to_f = (-var_chaste_interface__I_to__x_to_f + var_I_to__xtoss) / (_lt_0_row[14]); // 1 / msec + const double d_dt_chaste_interface_var_I_to__x_to_s = (-var_chaste_interface__I_to__x_to_s + var_I_to__xtoss) / (_lt_0_row[15]); // 1 / msec + const double var_I_to__ytoss = _lt_0_row[16]; // dimensionless + const double d_dt_chaste_interface_var_I_to__y_to_f = (-var_chaste_interface__I_to__y_to_f + var_I_to__ytoss) / (_lt_0_row[17]); // 1 / msec + const double d_dt_chaste_interface_var_I_to__y_to_s = (-var_chaste_interface__I_to__y_to_s + var_I_to__ytoss) / (_lt_0_row[18]); // 1 / msec + const double var_parameters__FoRT = NV_Ith_S(mParameters, 9) / (NV_Ith_S(mParameters, 10) * NV_Ith_S(mParameters, 24)); // per_mV + const double var_I_NaK__fnak = 1 / (1 + 0.1245 * exp(-0.10000000000000001 * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT) + 0.036499999999999998 * (-0.14285714285714285 + 0.14285714285714285 * exp(0.01485884101040119 * NV_Ith_S(mParameters, 8))) * exp(-var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT)); // dimensionless + const double var_I_NaK__I_nak_junc = 0.11 * var_I_NaK__fnak * NV_Ith_S(mParameters, 22) * NV_Ith_S(mParameters, 7) / ((1 + 14641 / pow(var_chaste_interface__Na_Concentrations__Na_j, 4)) * (1.5 + NV_Ith_S(mParameters, 7))); // uA_per_uF + const double var_I_NaK__I_nak_sl = 0.89000000000000001 * var_I_NaK__fnak * NV_Ith_S(mParameters, 22) * NV_Ith_S(mParameters, 7) / ((1 + 14641 / pow(var_chaste_interface__Na_Concentrations__Na_sl, 4)) * (1.5 + NV_Ith_S(mParameters, 7))); // uA_per_uF + const double var_parameters__Qpow = -31 + 0.10000000000000001 * NV_Ith_S(mParameters, 24); // dimensionless + const double var_parameters__Vcell = 1.0506250000000001e-11 * M_PI; // liter + const double var_parameters__Vjunc = 0.00053900000000000009 * var_parameters__Vcell; // liter + const double var_parameters__Vmyo = 0.65000000000000002 * var_parameters__Vcell; // liter + const double d_dt_chaste_interface_var_Na_Concentrations__Na_i = 1.6385999999999999e-12 * (-var_chaste_interface__Na_Concentrations__Na_i + var_chaste_interface__Na_Concentrations__Na_sl) * NV_Ith_S(mParameters, 3) / var_parameters__Vmyo; // mM / msec + const double var_parameters__Bmax_SLhighj = 0.000165 * var_parameters__Vmyo / var_parameters__Vjunc; // mM + const double var_parameters__Bmax_SLlowj = 0.00046000000000000001 * var_parameters__Vmyo / var_parameters__Vjunc; // mM + const double var_parameters__Vsl = 0.02 * var_parameters__Vcell; // liter + const double var_parameters__Bmax_SLhighsl = 0.0134 * var_parameters__Vmyo / var_parameters__Vsl; // mM + const double var_parameters__Bmax_SLlowsl = 0.037400000000000003 * var_parameters__Vmyo / var_parameters__Vsl; // mM + const double var_parameters__Vsr = 0.035000000000000003 * var_parameters__Vcell; // liter + const double var_parameters__Bmax_Csqn = 0.14000000000000001 * var_parameters__Vmyo / var_parameters__Vsr; // mM + const double var_SR_Fluxes__kCaSR = 15 - 14 / (1 + 0.13584112963311223 * pow((1 / var_chaste_interface__SR_Ca_Concentrations__Ca_sr), 2.5)); // dimensionless + const double var_parameters__ena_junc = log(NV_Ith_S(mParameters, 8) / var_chaste_interface__Na_Concentrations__Na_j) / var_parameters__FoRT; // mV + const double var_parameters__ena_sl = log(NV_Ith_S(mParameters, 8) / var_chaste_interface__Na_Concentrations__Na_sl) / var_parameters__FoRT; // mV + const double var_SR_Fluxes__J_serca = pow(2.6000000000000001, var_parameters__Qpow) * (2814485.1633595936 * pow(var_chaste_interface__Ca_Concentrations__Ca_i, 1.7869999999999999) - 0.38742512113256738 * pow(var_chaste_interface__SR_Ca_Concentrations__Ca_sr, 1.7869999999999999)) * NV_Ith_S(mParameters, 2) / (1 + 0.38742512113256738 * pow(var_chaste_interface__SR_Ca_Concentrations__Ca_sr, 1.7869999999999999) + 2814485.1633595936 * pow(var_chaste_interface__Ca_Concentrations__Ca_i, 1.7869999999999999)); // mM_per_msec + const double var_SR_Fluxes__kiSRCa = 0.5 * var_SR_Fluxes__kCaSR; // per_mM_per_msec + const double var_SR_Fluxes__koSRCa = 10 / var_SR_Fluxes__kCaSR; // per_mM2_per_msec + const double d_dt_chaste_interface_var_SR_Fluxes__Ry_Ri = -0.065000000000000002 * var_chaste_interface__SR_Fluxes__Ry_Ri + pow(var_chaste_interface__Ca_Concentrations__Ca_j, 2) * var_SR_Fluxes__RI * var_SR_Fluxes__koSRCa + var_chaste_interface__Ca_Concentrations__Ca_j * var_chaste_interface__SR_Fluxes__Ry_Ro * var_SR_Fluxes__kiSRCa; // mM / msec + const double d_dt_chaste_interface_var_SR_Fluxes__Ry_Ro = 0.0050000000000000001 * var_chaste_interface__SR_Fluxes__Ry_Ri - 0.059999999999999998 * var_chaste_interface__SR_Fluxes__Ry_Ro + pow(var_chaste_interface__Ca_Concentrations__Ca_j, 2) * var_chaste_interface__SR_Fluxes__Ry_Rr * var_SR_Fluxes__koSRCa - var_chaste_interface__Ca_Concentrations__Ca_j * var_chaste_interface__SR_Fluxes__Ry_Ro * var_SR_Fluxes__kiSRCa; // mM / msec + const double d_dt_chaste_interface_var_SR_Fluxes__Ry_Rr = 0.059999999999999998 * var_chaste_interface__SR_Fluxes__Ry_Ro + 0.0050000000000000001 * var_SR_Fluxes__RI - pow(var_chaste_interface__Ca_Concentrations__Ca_j, 2) * var_chaste_interface__SR_Fluxes__Ry_Rr * var_SR_Fluxes__koSRCa - var_chaste_interface__Ca_Concentrations__Ca_j * var_chaste_interface__SR_Fluxes__Ry_Rr * var_SR_Fluxes__kiSRCa; // mM / msec + const double d_dt_chaste_interface_var_Cytosolic_Ca_Buffers__CaM = -0.23799999999999999 * var_chaste_interface__Cytosolic_Ca_Buffers__CaM + 34 * (0.024 - var_chaste_interface__Cytosolic_Ca_Buffers__CaM) * var_chaste_interface__Ca_Concentrations__Ca_i; // mM / msec + const double d_dt_chaste_interface_var_SR_Ca_Concentrations__Csqn_b = -65 * var_chaste_interface__SR_Ca_Concentrations__Csqn_b + 100 * (-var_chaste_interface__SR_Ca_Concentrations__Csqn_b + var_parameters__Bmax_Csqn) * var_chaste_interface__SR_Ca_Concentrations__Ca_sr; // mM / msec + const double d_dt_chaste_interface_var_Cytosolic_Ca_Buffers__Myo_c = -0.00046000000000000001 * var_chaste_interface__Cytosolic_Ca_Buffers__Myo_c + 13.800000000000001 * (0.14000000000000001 - var_chaste_interface__Cytosolic_Ca_Buffers__Myo_c - var_chaste_interface__Cytosolic_Ca_Buffers__Myo_m) * var_chaste_interface__Ca_Concentrations__Ca_i; // mM / msec + const double d_dt_chaste_interface_var_Cytosolic_Ca_Buffers__Myo_m = 0.0021979999999999999 - 0.015699999999999999 * var_chaste_interface__Cytosolic_Ca_Buffers__Myo_c - 0.015757 * var_chaste_interface__Cytosolic_Ca_Buffers__Myo_m; // mM / msec + const double var_Na_Buffers__dNa_Bj_dt = -0.001 * var_chaste_interface__Na_Buffers__Na_Bj + 0.0001 * (7.5609999999999999 - var_chaste_interface__Na_Buffers__Na_Bj) * var_chaste_interface__Na_Concentrations__Na_j; // mM_per_msec + const double d_dt_chaste_interface_var_Na_Buffers__Na_Bj = var_Na_Buffers__dNa_Bj_dt; // mM / msec + const double var_Na_Buffers__dNa_Bsl_dt = -0.001 * var_chaste_interface__Na_Buffers__Na_Bsl + 0.0001 * (1.6499999999999999 - var_chaste_interface__Na_Buffers__Na_Bsl) * var_chaste_interface__Na_Concentrations__Na_sl; // mM_per_msec + const double d_dt_chaste_interface_var_Na_Buffers__Na_Bsl = var_Na_Buffers__dNa_Bsl_dt; // mM / msec + const double d_dt_chaste_interface_var_Junctional_and_SL_Ca_Buffers__SLH_j = -0.029999999999999999 * var_chaste_interface__Junctional_and_SL_Ca_Buffers__SLH_j + 100 * (-var_chaste_interface__Junctional_and_SL_Ca_Buffers__SLH_j + var_parameters__Bmax_SLhighj) * var_chaste_interface__Ca_Concentrations__Ca_j; // mM / msec + const double d_dt_chaste_interface_var_Junctional_and_SL_Ca_Buffers__SLH_sl = -0.029999999999999999 * var_chaste_interface__Junctional_and_SL_Ca_Buffers__SLH_sl + 100 * (-var_chaste_interface__Junctional_and_SL_Ca_Buffers__SLH_sl + var_parameters__Bmax_SLhighsl) * var_chaste_interface__Ca_Concentrations__Ca_sl; // mM / msec + const double d_dt_chaste_interface_var_Junctional_and_SL_Ca_Buffers__SLL_j = -1.3 * var_chaste_interface__Junctional_and_SL_Ca_Buffers__SLL_j + 100 * (-var_chaste_interface__Junctional_and_SL_Ca_Buffers__SLL_j + var_parameters__Bmax_SLlowj) * var_chaste_interface__Ca_Concentrations__Ca_j; // mM / msec + const double d_dt_chaste_interface_var_Junctional_and_SL_Ca_Buffers__SLL_sl = -1.3 * var_chaste_interface__Junctional_and_SL_Ca_Buffers__SLL_sl + 100 * (-var_chaste_interface__Junctional_and_SL_Ca_Buffers__SLL_sl + var_parameters__Bmax_SLlowsl) * var_chaste_interface__Ca_Concentrations__Ca_sl; // mM / msec + const double d_dt_chaste_interface_var_Cytosolic_Ca_Buffers__SRB = -0.059999999999999998 * var_chaste_interface__Cytosolic_Ca_Buffers__SRB + 100 * (0.017100000000000001 - var_chaste_interface__Cytosolic_Ca_Buffers__SRB) * var_chaste_interface__Ca_Concentrations__Ca_i; // mM / msec + const double d_dt_chaste_interface_var_Cytosolic_Ca_Buffers__Tn_CHc = -3.1999999999999999e-5 * var_chaste_interface__Cytosolic_Ca_Buffers__Tn_CHc + 2.3700000000000001 * (0.14000000000000001 - var_chaste_interface__Cytosolic_Ca_Buffers__Tn_CHc - var_chaste_interface__Cytosolic_Ca_Buffers__Tn_CHm) * var_chaste_interface__Ca_Concentrations__Ca_i; // mM / msec + const double d_dt_chaste_interface_var_Cytosolic_Ca_Buffers__Tn_CHm = 0.00042000000000000007 - 0.0030000000000000001 * var_chaste_interface__Cytosolic_Ca_Buffers__Tn_CHc - 0.0063300000000000006 * var_chaste_interface__Cytosolic_Ca_Buffers__Tn_CHm; // mM / msec + const double d_dt_chaste_interface_var_Ca_Concentrations__Ca_i = -0.0026180000000000001 + 0.23799999999999999 * var_chaste_interface__Cytosolic_Ca_Buffers__CaM + 0.059999999999999998 * var_chaste_interface__Cytosolic_Ca_Buffers__SRB + 0.019599999999999999 * var_chaste_interface__Cytosolic_Ca_Buffers__Tn_CL + 0.0063300000000000006 * var_chaste_interface__Cytosolic_Ca_Buffers__Tn_CHm + 0.016159999999999997 * var_chaste_interface__Cytosolic_Ca_Buffers__Myo_c + 0.003032 * var_chaste_interface__Cytosolic_Ca_Buffers__Tn_CHc + 0.015757 * var_chaste_interface__Cytosolic_Ca_Buffers__Myo_m + 3.2742999999999999e-12 * (-var_chaste_interface__Ca_Concentrations__Ca_i + var_chaste_interface__Ca_Concentrations__Ca_sl) / var_parameters__Vmyo - 34 * (0.024 - var_chaste_interface__Cytosolic_Ca_Buffers__CaM) * var_chaste_interface__Ca_Concentrations__Ca_i - 100 * (0.017100000000000001 - var_chaste_interface__Cytosolic_Ca_Buffers__SRB) * var_chaste_interface__Ca_Concentrations__Ca_i - 32.700000000000003 * (0.070000000000000007 - var_chaste_interface__Cytosolic_Ca_Buffers__Tn_CL) * var_chaste_interface__Ca_Concentrations__Ca_i - 2.3700000000000001 * (0.14000000000000001 - var_chaste_interface__Cytosolic_Ca_Buffers__Tn_CHc - var_chaste_interface__Cytosolic_Ca_Buffers__Tn_CHm) * var_chaste_interface__Ca_Concentrations__Ca_i - 13.800000000000001 * (0.14000000000000001 - var_chaste_interface__Cytosolic_Ca_Buffers__Myo_c - var_chaste_interface__Cytosolic_Ca_Buffers__Myo_m) * var_chaste_interface__Ca_Concentrations__Ca_i - var_SR_Fluxes__J_serca * var_parameters__Vsr / var_parameters__Vmyo; // mM / msec + const double d_dt_chaste_interface_var_Cytosolic_Ca_Buffers__Tn_CL = -0.019599999999999999 * var_chaste_interface__Cytosolic_Ca_Buffers__Tn_CL + 32.700000000000003 * (0.070000000000000007 - var_chaste_interface__Cytosolic_Ca_Buffers__Tn_CL) * var_chaste_interface__Ca_Concentrations__Ca_i; // mM / msec + const double var_SR_Fluxes__J_SRCarel = (-var_chaste_interface__Ca_Concentrations__Ca_j + var_chaste_interface__SR_Ca_Concentrations__Ca_sr) * var_chaste_interface__SR_Fluxes__Ry_Ro * NV_Ith_S(mParameters, 1); // mM_per_msec + const double d_dt_chaste_interface_var_SR_Ca_Concentrations__Ca_sr = -var_SR_Fluxes__J_SRCarel + 65 * var_chaste_interface__SR_Ca_Concentrations__Csqn_b - 100 * (-var_chaste_interface__SR_Ca_Concentrations__Csqn_b + var_parameters__Bmax_Csqn) * var_chaste_interface__SR_Ca_Concentrations__Ca_sr - var_SR_Fluxes__J_SRleak * var_parameters__Vmyo / var_parameters__Vsr + var_SR_Fluxes__J_serca; // mM / msec + const double var_I_NCX__I_ncx_junc = 0.11 * pow(1.5700000000000001, var_parameters__Qpow) * (pow(var_chaste_interface__Na_Concentrations__Na_j, 3) * NV_Ith_S(mParameters, 5) * exp(0.27000000000000002 * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT) - pow(NV_Ith_S(mParameters, 8), 3) * var_chaste_interface__Ca_Concentrations__Ca_j * exp(-0.72999999999999998 * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT)) * NV_Ith_S(mParameters, 21) / ((1 + 0.32000000000000001 * exp(-0.72999999999999998 * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT)) * (1 + 2.2499999999999996e-8 / pow(var_chaste_interface__Ca_Concentrations__Ca_j, 2)) * (1.3 * pow(var_chaste_interface__Na_Concentrations__Na_j, 3) + pow(var_chaste_interface__Na_Concentrations__Na_j, 3) * NV_Ith_S(mParameters, 5) + pow(NV_Ith_S(mParameters, 8), 3) * var_chaste_interface__Ca_Concentrations__Ca_j + 669921.875 * (1 + 278.55153203342621 * var_chaste_interface__Ca_Concentrations__Ca_j) * var_chaste_interface__Ca_Concentrations__Ca_j + 0.0035899999999999999 * pow(NV_Ith_S(mParameters, 8), 3) * (1 + 0.00053869674493876331 * pow(var_chaste_interface__Na_Concentrations__Na_j, 3)))); // uA_per_uF + const double var_I_NCX__I_ncx_sl = 0.89000000000000001 * pow(1.5700000000000001, var_parameters__Qpow) * (pow(var_chaste_interface__Na_Concentrations__Na_sl, 3) * NV_Ith_S(mParameters, 5) * exp(0.27000000000000002 * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT) - pow(NV_Ith_S(mParameters, 8), 3) * var_chaste_interface__Ca_Concentrations__Ca_sl * exp(-0.72999999999999998 * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT)) * NV_Ith_S(mParameters, 21) / ((1 + 0.32000000000000001 * exp(-0.72999999999999998 * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT)) * (1 + 2.2499999999999996e-8 / pow(var_chaste_interface__Ca_Concentrations__Ca_sl, 2)) * (1.3 * pow(var_chaste_interface__Na_Concentrations__Na_sl, 3) + pow(var_chaste_interface__Na_Concentrations__Na_sl, 3) * NV_Ith_S(mParameters, 5) + pow(NV_Ith_S(mParameters, 8), 3) * var_chaste_interface__Ca_Concentrations__Ca_sl + 669921.875 * (1 + 278.55153203342621 * var_chaste_interface__Ca_Concentrations__Ca_sl) * var_chaste_interface__Ca_Concentrations__Ca_sl + 0.0035899999999999999 * pow(NV_Ith_S(mParameters, 8), 3) * (1 + 0.00053869674493876331 * pow(var_chaste_interface__Na_Concentrations__Na_sl, 3)))); // uA_per_uF + const double var_parameters__pCa = 0.00054000000000000001 * NV_Ith_S(mParameters, 11); // cm_per_sec + const double var_Ca_Concentrations__I_Ca_tot_junc = 6.0643000000000002e-5 * var_chaste_interface__membrane_potential__V_m - 2 * var_I_NCX__I_ncx_junc - 3.0321500000000001e-5 * log(NV_Ith_S(mParameters, 5) / var_chaste_interface__Ca_Concentrations__Ca_j) / var_parameters__FoRT + 0.0074029999999999999 * pow(2.3500000000000001, var_parameters__Qpow) * pow(var_chaste_interface__Ca_Concentrations__Ca_j, 1.6000000000000001) / (5.2281977629563632e-6 + pow(var_chaste_interface__Ca_Concentrations__Ca_j, 1.6000000000000001)) + 1.6200000000000001 * pow(1.8, var_parameters__Qpow) * (-0.34100000000000003 * NV_Ith_S(mParameters, 5) + 0.34100000000000003 * var_chaste_interface__Ca_Concentrations__Ca_j * exp(2 * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT)) * (1 - var_chaste_interface__I_Ca__f_Ca_Bj + var_I_Ca__fcaCaj) * var_chaste_interface__I_Ca__d * var_chaste_interface__I_Ca__f * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT * NV_Ith_S(mParameters, 9) * var_parameters__pCa / (-1 + exp(2 * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT)); // uA_per_uF + const double d_dt_chaste_interface_var_Ca_Concentrations__Ca_j = 0.029999999999999999 * var_chaste_interface__Junctional_and_SL_Ca_Buffers__SLH_j + 1.3 * var_chaste_interface__Junctional_and_SL_Ca_Buffers__SLL_j + 8.2413000000000004e-13 * (-var_chaste_interface__Ca_Concentrations__Ca_j + var_chaste_interface__Ca_Concentrations__Ca_sl) / var_parameters__Vjunc - 100 * (-var_chaste_interface__Junctional_and_SL_Ca_Buffers__SLH_j + var_parameters__Bmax_SLhighj) * var_chaste_interface__Ca_Concentrations__Ca_j - 100 * (-var_chaste_interface__Junctional_and_SL_Ca_Buffers__SLL_j + var_parameters__Bmax_SLlowj) * var_chaste_interface__Ca_Concentrations__Ca_j + var_SR_Fluxes__J_SRCarel * var_parameters__Vsr / var_parameters__Vjunc + var_SR_Fluxes__J_SRleak * var_parameters__Vmyo / var_parameters__Vjunc - 0.5 * var_Ca_Concentrations__I_Ca_tot_junc * NV_Ith_S(mParameters, 23) / (NV_Ith_S(mParameters, 9) * var_parameters__Vjunc); // mM / msec + const double var_Ca_Concentrations__I_Ca_tot_sl = 0.00049065700000000003 * var_chaste_interface__membrane_potential__V_m - 2 * var_I_NCX__I_ncx_sl - 0.00024532850000000001 * log(NV_Ith_S(mParameters, 5) / var_chaste_interface__Ca_Concentrations__Ca_sl) / var_parameters__FoRT + 0.059896999999999999 * pow(2.3500000000000001, var_parameters__Qpow) * pow(var_chaste_interface__Ca_Concentrations__Ca_sl, 1.6000000000000001) / (5.2281977629563632e-6 + pow(var_chaste_interface__Ca_Concentrations__Ca_sl, 1.6000000000000001)) + 0.17999999999999997 * pow(1.8, var_parameters__Qpow) * (-0.34100000000000003 * NV_Ith_S(mParameters, 5) + 0.34100000000000003 * var_chaste_interface__Ca_Concentrations__Ca_sl * exp(2 * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT)) * (1 - var_chaste_interface__I_Ca__f_Ca_Bsl + var_I_Ca__fcaCaMSL) * var_chaste_interface__I_Ca__d * var_chaste_interface__I_Ca__f * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT * NV_Ith_S(mParameters, 9) * var_parameters__pCa / (-1 + exp(2 * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT)); // uA_per_uF + const double d_dt_chaste_interface_var_Ca_Concentrations__Ca_sl = 0.029999999999999999 * var_chaste_interface__Junctional_and_SL_Ca_Buffers__SLH_sl + 1.3 * var_chaste_interface__Junctional_and_SL_Ca_Buffers__SLL_sl + 8.2413000000000004e-13 * (-var_chaste_interface__Ca_Concentrations__Ca_sl + var_chaste_interface__Ca_Concentrations__Ca_j) / var_parameters__Vsl + 3.2742999999999999e-12 * (-var_chaste_interface__Ca_Concentrations__Ca_sl + var_chaste_interface__Ca_Concentrations__Ca_i) / var_parameters__Vsl - 100 * (-var_chaste_interface__Junctional_and_SL_Ca_Buffers__SLH_sl + var_parameters__Bmax_SLhighsl) * var_chaste_interface__Ca_Concentrations__Ca_sl - 100 * (-var_chaste_interface__Junctional_and_SL_Ca_Buffers__SLL_sl + var_parameters__Bmax_SLlowsl) * var_chaste_interface__Ca_Concentrations__Ca_sl - 0.5 * var_Ca_Concentrations__I_Ca_tot_sl * NV_Ith_S(mParameters, 23) / (NV_Ith_S(mParameters, 9) * var_parameters__Vsl); // mM / msec + const double var_Na_Concentrations__I_Na_tot_junc = 3 * var_I_NCX__I_ncx_junc + 3 * var_I_NaK__I_nak_junc + 6.567e-5 * var_chaste_interface__membrane_potential__V_m - 6.567e-5 * var_parameters__ena_junc + 0.11 * pow(var_chaste_interface__I_Na__m, 3) * (-var_parameters__ena_junc + var_chaste_interface__membrane_potential__V_m) * var_chaste_interface__I_Na__h * var_chaste_interface__I_Na__j * NV_Ith_S(mParameters, 13) + 3.0374999999999999e-9 * pow(1.8, var_parameters__Qpow) * (-0.75 * NV_Ith_S(mParameters, 8) + 0.75 * var_chaste_interface__Na_Concentrations__Na_j * exp(var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT)) * (1 - var_chaste_interface__I_Ca__f_Ca_Bj + var_I_Ca__fcaCaj) * var_chaste_interface__I_Ca__d * var_chaste_interface__I_Ca__f * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT * NV_Ith_S(mParameters, 9) / (-1 + exp(var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT)); // uA_per_uF + const double d_dt_chaste_interface_var_Na_Concentrations__Na_j = (-var_Na_Buffers__dNa_Bj_dt + 1.8312999999999999e-14 * (-var_chaste_interface__Na_Concentrations__Na_j + var_chaste_interface__Na_Concentrations__Na_sl) / var_parameters__Vjunc - var_Na_Concentrations__I_Na_tot_junc * NV_Ith_S(mParameters, 23) / (NV_Ith_S(mParameters, 9) * var_parameters__Vjunc)) * NV_Ith_S(mParameters, 3); // mM / msec + const double var_Na_Concentrations__I_Na_tot_sl = 3 * var_I_NCX__I_ncx_sl + 3 * var_I_NaK__I_nak_sl + 0.00053133 * var_chaste_interface__membrane_potential__V_m - 0.00053133 * var_parameters__ena_sl + 0.89000000000000001 * pow(var_chaste_interface__I_Na__m, 3) * (-var_parameters__ena_sl + var_chaste_interface__membrane_potential__V_m) * var_chaste_interface__I_Na__h * var_chaste_interface__I_Na__j * NV_Ith_S(mParameters, 13) + 3.3749999999999992e-10 * pow(1.8, var_parameters__Qpow) * (-0.75 * NV_Ith_S(mParameters, 8) + 0.75 * var_chaste_interface__Na_Concentrations__Na_sl * exp(var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT)) * (1 - var_chaste_interface__I_Ca__f_Ca_Bsl + var_I_Ca__fcaCaMSL) * var_chaste_interface__I_Ca__d * var_chaste_interface__I_Ca__f * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT * NV_Ith_S(mParameters, 9) / (-1 + exp(var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT)); // uA_per_uF + const double d_dt_chaste_interface_var_Na_Concentrations__Na_sl = (-var_Na_Buffers__dNa_Bsl_dt + 1.6385999999999999e-12 * (-var_chaste_interface__Na_Concentrations__Na_sl + var_chaste_interface__Na_Concentrations__Na_i) / var_parameters__Vsl + 1.8312999999999999e-14 * (-var_chaste_interface__Na_Concentrations__Na_sl + var_chaste_interface__Na_Concentrations__Na_j) / var_parameters__Vsl - var_Na_Concentrations__I_Na_tot_sl * NV_Ith_S(mParameters, 23) / (NV_Ith_S(mParameters, 9) * var_parameters__Vsl)) * NV_Ith_S(mParameters, 3); // mM / msec + + if (mSetVoltageDerivativeToZero) + { + d_dt_chaste_interface_var_membrane_potential__V_m = 0.0; + } + else + { + const double var_I_Kp__kp_kp = _lt_0_row[0]; // dimensionless + const double var_parameters__ecl = log(NV_Ith_S(mParameters, 4) / NV_Ith_S(mParameters, 6)) / var_parameters__FoRT; // mV + const double var_parameters__ek = log(NV_Ith_S(mParameters, 7) / var_chaste_interface__K_Concentration__K_i) / var_parameters__FoRT; // mV + d_dt_chaste_interface_var_membrane_potential__V_m = -var_Ca_Concentrations__I_Ca_tot_junc - var_Ca_Concentrations__I_Ca_tot_sl - var_Na_Concentrations__I_Na_tot_junc - var_Na_Concentrations__I_Na_tot_sl + 2 * var_I_NaK__I_nak_junc + 2 * var_I_NaK__I_nak_sl + 0.0089999999999999993 * var_parameters__ecl - 0.0089999999999999993 * var_chaste_interface__membrane_potential__V_m - GetIntracellularAreaStimulus(var_chaste_interface__environment__time) / HeartConfig::Instance()->GetCapacitance() - (-GetExperimentalVoltageAtTimeT(var_chaste_interface__environment__time) + var_chaste_interface__membrane_potential__V_m) * NV_Ith_S(mParameters, 12) - 0.002 * (-var_parameters__ek + var_chaste_interface__membrane_potential__V_m) * var_I_Kp__kp_kp - 0.006029375 * (-var_parameters__ecl + var_chaste_interface__membrane_potential__V_m) / (1 + 0.10000000000000001 / var_chaste_interface__Ca_Concentrations__Ca_j) - 0.048783124999999997 * (-var_parameters__ecl + var_chaste_interface__membrane_potential__V_m) / (1 + 0.10000000000000001 / var_chaste_interface__Ca_Concentrations__Ca_sl) - 0.0035000000000000001 * pow(var_chaste_interface__I_Ks__x_ks, 2) * (-log((0.018329999999999999 * NV_Ith_S(mParameters, 8) + NV_Ith_S(mParameters, 7)) / (0.018329999999999999 * var_chaste_interface__Na_Concentrations__Na_i + var_chaste_interface__K_Concentration__K_i)) / var_parameters__FoRT + var_chaste_interface__membrane_potential__V_m) * NV_Ith_S(mParameters, 19) - 0.1144 * (-var_parameters__ek + var_chaste_interface__membrane_potential__V_m) * NV_Ith_S(mParameters, 16) * var_chaste_interface__I_to__x_to_f * var_chaste_interface__I_to__y_to_f - 0.015599999999999999 * (-var_parameters__ek + var_chaste_interface__membrane_potential__V_m) * NV_Ith_S(mParameters, 20) * var_chaste_interface__I_to__x_to_s * var_chaste_interface__I_to__y_to_s - 0.43033148291193518 * sqrt(NV_Ith_S(mParameters, 7)) * (-var_parameters__ek + var_chaste_interface__membrane_potential__V_m) * NV_Ith_S(mParameters, 18) * var_chaste_interface__I_Kr__x_kr / (_lt_0_row[1]) - 0.4389381125701739 * sqrt(NV_Ith_S(mParameters, 7)) * (-var_parameters__ek + var_chaste_interface__membrane_potential__V_m) * NV_Ith_S(mParameters, 17) / ((1 + exp(-14.1227775 + 0.23849999999999999 * var_chaste_interface__membrane_potential__V_m - 0.23849999999999999 * var_parameters__ek)) * (1.02 / (1 + exp(-14.1227775 + 0.23849999999999999 * var_chaste_interface__membrane_potential__V_m - 0.23849999999999999 * var_parameters__ek)) + (0.49124000000000001 * exp(0.43983232 + 0.080320000000000003 * var_chaste_interface__membrane_potential__V_m - 0.080320000000000003 * var_parameters__ek) + exp(-36.698642499999998 + 0.061749999999999999 * var_chaste_interface__membrane_potential__V_m - 0.061749999999999999 * var_parameters__ek)) / (1 + exp(-2.4444678999999998 + 0.51429999999999998 * var_parameters__ek - 0.51429999999999998 * var_chaste_interface__membrane_potential__V_m)))) - 6.0749999999999998e-8 * pow(1.8, var_parameters__Qpow) * (-0.75 * NV_Ith_S(mParameters, 7) + 0.75 * var_chaste_interface__K_Concentration__K_i * exp(var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT)) * (1 + 0.099999999999999978 * var_I_Ca__fcaCaMSL + 0.90000000000000002 * var_I_Ca__fcaCaj - 0.099999999999999978 * var_chaste_interface__I_Ca__f_Ca_Bsl - 0.90000000000000002 * var_chaste_interface__I_Ca__f_Ca_Bj) * var_chaste_interface__I_Ca__d * var_chaste_interface__I_Ca__f * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT * NV_Ith_S(mParameters, 9) / (-1 + exp(var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT)); // mV / msec + } + + NV_Ith_S(rDY,0) = d_dt_chaste_interface_var_membrane_potential__V_m; + NV_Ith_S(rDY,1) = d_dt_chaste_interface_var_Ca_Concentrations__Ca_i; + NV_Ith_S(rDY,2) = d_dt_chaste_interface_var_I_Na__m; + NV_Ith_S(rDY,3) = d_dt_chaste_interface_var_I_Na__h; + NV_Ith_S(rDY,4) = d_dt_chaste_interface_var_I_Na__j; + NV_Ith_S(rDY,5) = d_dt_chaste_interface_var_I_Kr__x_kr; + NV_Ith_S(rDY,6) = d_dt_chaste_interface_var_I_Ks__x_ks; + NV_Ith_S(rDY,7) = d_dt_chaste_interface_var_I_to__x_to_s; + NV_Ith_S(rDY,8) = d_dt_chaste_interface_var_I_to__y_to_s; + NV_Ith_S(rDY,9) = d_dt_chaste_interface_var_I_to__x_to_f; + NV_Ith_S(rDY,10) = d_dt_chaste_interface_var_I_to__y_to_f; + NV_Ith_S(rDY,11) = d_dt_chaste_interface_var_I_Ca__d; + NV_Ith_S(rDY,12) = d_dt_chaste_interface_var_I_Ca__f; + NV_Ith_S(rDY,13) = d_dt_chaste_interface_var_I_Ca__f_Ca_Bj; + NV_Ith_S(rDY,14) = d_dt_chaste_interface_var_I_Ca__f_Ca_Bsl; + NV_Ith_S(rDY,15) = d_dt_chaste_interface_var_SR_Fluxes__Ry_Rr; + NV_Ith_S(rDY,16) = d_dt_chaste_interface_var_SR_Fluxes__Ry_Ro; + NV_Ith_S(rDY,17) = d_dt_chaste_interface_var_SR_Fluxes__Ry_Ri; + NV_Ith_S(rDY,18) = d_dt_chaste_interface_var_Na_Buffers__Na_Bj; + NV_Ith_S(rDY,19) = d_dt_chaste_interface_var_Na_Buffers__Na_Bsl; + NV_Ith_S(rDY,20) = d_dt_chaste_interface_var_Cytosolic_Ca_Buffers__Tn_CL; + NV_Ith_S(rDY,21) = d_dt_chaste_interface_var_Cytosolic_Ca_Buffers__Tn_CHc; + NV_Ith_S(rDY,22) = d_dt_chaste_interface_var_Cytosolic_Ca_Buffers__Tn_CHm; + NV_Ith_S(rDY,23) = d_dt_chaste_interface_var_Cytosolic_Ca_Buffers__CaM; + NV_Ith_S(rDY,24) = d_dt_chaste_interface_var_Cytosolic_Ca_Buffers__Myo_c; + NV_Ith_S(rDY,25) = d_dt_chaste_interface_var_Cytosolic_Ca_Buffers__Myo_m; + NV_Ith_S(rDY,26) = d_dt_chaste_interface_var_Cytosolic_Ca_Buffers__SRB; + NV_Ith_S(rDY,27) = d_dt_chaste_interface_var_Junctional_and_SL_Ca_Buffers__SLL_j; + NV_Ith_S(rDY,28) = d_dt_chaste_interface_var_Junctional_and_SL_Ca_Buffers__SLL_sl; + NV_Ith_S(rDY,29) = d_dt_chaste_interface_var_Junctional_and_SL_Ca_Buffers__SLH_j; + NV_Ith_S(rDY,30) = d_dt_chaste_interface_var_Junctional_and_SL_Ca_Buffers__SLH_sl; + NV_Ith_S(rDY,31) = d_dt_chaste_interface_var_SR_Ca_Concentrations__Csqn_b; + NV_Ith_S(rDY,32) = d_dt_chaste_interface_var_SR_Ca_Concentrations__Ca_sr; + NV_Ith_S(rDY,33) = d_dt_chaste_interface_var_Na_Concentrations__Na_j; + NV_Ith_S(rDY,34) = d_dt_chaste_interface_var_Na_Concentrations__Na_sl; + NV_Ith_S(rDY,35) = d_dt_chaste_interface_var_Na_Concentrations__Na_i; + NV_Ith_S(rDY,36) = d_dt_chaste_interface_var_K_Concentration__K_i; + NV_Ith_S(rDY,37) = d_dt_chaste_interface_var_Ca_Concentrations__Ca_j; + NV_Ith_S(rDY,38) = d_dt_chaste_interface_var_Ca_Concentrations__Ca_sl; + } + + N_Vector Cellgrandi_pasqualini_bers_2010_ssFromCellMLCvodeDataClampOpt::ComputeDerivedQuantities(double var_chaste_interface__environment__time, const N_Vector & rY) + { + // Inputs: + // Time units: millisecond + double var_chaste_interface__membrane_potential__V_m = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : NV_Ith_S(rY, 0)); + // Units: mV; Initial value: -81.4229700631461 + double var_chaste_interface__Ca_Concentrations__Ca_i = NV_Ith_S(rY, 1); + // Units: mM; Initial value: 8.72745589849657e-05 + double var_chaste_interface__I_Na__m = NV_Ith_S(rY, 2); + // Units: dimensionless; Initial value: 0.00381858135062259 + double var_chaste_interface__I_Na__h = NV_Ith_S(rY, 3); + // Units: dimensionless; Initial value: 0.625086621635645 + double var_chaste_interface__I_Na__j = NV_Ith_S(rY, 4); + // Units: dimensionless; Initial value: 0.62332507235506 + double var_chaste_interface__I_Kr__x_kr = NV_Ith_S(rY, 5); + // Units: dimensionless; Initial value: 0.021733554982663 + double var_chaste_interface__I_Ks__x_ks = NV_Ith_S(rY, 6); + // Units: dimensionless; Initial value: 0.00428981903391989 + double var_chaste_interface__I_to__x_to_s = NV_Ith_S(rY, 7); + // Units: dimensionless; Initial value: 0.000441539203559411 + double var_chaste_interface__I_to__y_to_s = NV_Ith_S(rY, 8); + // Units: dimensionless; Initial value: 0.784875334693892 + double var_chaste_interface__I_to__x_to_f = NV_Ith_S(rY, 9); + // Units: dimensionless; Initial value: 0.000441531250866821 + double var_chaste_interface__I_to__y_to_f = NV_Ith_S(rY, 10); + // Units: dimensionless; Initial value: 0.999995817153572 + double var_chaste_interface__I_Ca__d = NV_Ith_S(rY, 11); + // Units: dimensionless; Initial value: 2.93982287251302e-06 + double var_chaste_interface__I_Ca__f = NV_Ith_S(rY, 12); + // Units: dimensionless; Initial value: 0.99511673495949 + double var_chaste_interface__I_Ca__f_Ca_Bj = NV_Ith_S(rY, 13); + // Units: dimensionless; Initial value: 0.0246142436477748 + double var_chaste_interface__I_Ca__f_Ca_Bsl = NV_Ith_S(rY, 14); + // Units: dimensionless; Initial value: 0.0152416826209301 + double var_chaste_interface__SR_Fluxes__Ry_Ro = NV_Ith_S(rY, 16); + // Units: mM; Initial value: 7.37484660389498e-07 + double var_chaste_interface__SR_Ca_Concentrations__Ca_sr = NV_Ith_S(rY, 32); + // Units: mM; Initial value: 0.555180633859957 + double var_chaste_interface__Na_Concentrations__Na_j = NV_Ith_S(rY, 33); + // Units: mM; Initial value: 8.3215690202059 + double var_chaste_interface__Na_Concentrations__Na_sl = NV_Ith_S(rY, 34); + // Units: mM; Initial value: 8.32094589677861 + double var_chaste_interface__Na_Concentrations__Na_i = NV_Ith_S(rY, 35); + // Units: mM; Initial value: 8.32114502072456 + double var_chaste_interface__K_Concentration__K_i = NV_Ith_S(rY, 36); + // Units: mM; Initial value: 120.0 + double var_chaste_interface__Ca_Concentrations__Ca_j = NV_Ith_S(rY, 37); + // Units: mM; Initial value: 0.000175415190830688 + double var_chaste_interface__Ca_Concentrations__Ca_sl = NV_Ith_S(rY, 38); + // Units: mM; Initial value: 0.000106544589194246 + + // Lookup table indexing + const bool _oob_0 = Cellgrandi_pasqualini_bers_2010_ssFromCellMLCvodeDataClampOpt_LookupTables::Instance()->CheckIndex0(var_chaste_interface__membrane_potential__V_m); +// LCOV_EXCL_START + if (_oob_0) + EXCEPTION(DumpState("membrane_voltage outside lookup table range", rY , var_chaste_interface__environment__time)); +// LCOV_EXCL_STOP + const double* const _lt_0_row = Cellgrandi_pasqualini_bers_2010_ssFromCellMLCvodeDataClampOpt_LookupTables::Instance()->IndexTable0(var_chaste_interface__membrane_potential__V_m); + + // Mathematics + const double var_I_Ca__fcaCaMSL = 0; // dimensionless + const double var_I_Ca__fcaCaj = 0; // dimensionless + const double var_I_Ks__gks_junc = 0.0035000000000000001; // mS_per_uF + const double var_I_Ks__gks_sl = 0.0035000000000000001; // mS_per_uF + const double var_SR_Fluxes__J_SRleak = (-var_chaste_interface__Ca_Concentrations__Ca_j + var_chaste_interface__SR_Ca_Concentrations__Ca_sr) * NV_Ith_S(mParameters, 0); // mM_per_msec + const double var_I_Ca__tauf = 1 / (_lt_0_row[6]); // msec + const double var_I_Kr__rkr = 1 / (_lt_0_row[1]); // dimensionless + const double var_I_Na__ah = ((var_chaste_interface__membrane_potential__V_m >= -40) ? (0) : (0.057000000000000002 * exp(-11.764705882352942 + 0.14705882352941177 * NV_Ith_S(mParameters, 15) - 0.14705882352941177 * var_chaste_interface__membrane_potential__V_m))); // dimensionless + const double var_I_Na__aj = ((var_chaste_interface__membrane_potential__V_m >= -40) ? (0) : ((37.780000000000001 + var_chaste_interface__membrane_potential__V_m) * (-25428 * exp(0.24440000000000001 * var_chaste_interface__membrane_potential__V_m - 0.24440000000000001 * NV_Ith_S(mParameters, 15)) - 6.9480000000000002e-6 * exp(0.043909999999999998 * NV_Ith_S(mParameters, 15) - 0.043909999999999998 * var_chaste_interface__membrane_potential__V_m)) / (1 + exp(24.640530000000002 + 0.311 * var_chaste_interface__membrane_potential__V_m - 0.311 * NV_Ith_S(mParameters, 15))))); // dimensionless + const double var_I_Na__bh = ((var_chaste_interface__membrane_potential__V_m >= -40) ? (5.9230769230769234 / (1 + exp(-0.96036036036036043 + 0.0900900900900901 * NV_Ith_S(mParameters, 15) - 0.0900900900900901 * var_chaste_interface__membrane_potential__V_m))) : (310000 * exp(0.34849999999999998 * var_chaste_interface__membrane_potential__V_m - 0.34849999999999998 * NV_Ith_S(mParameters, 15)) + 2.7000000000000002 * exp(0.079000000000000001 * var_chaste_interface__membrane_potential__V_m - 0.079000000000000001 * NV_Ith_S(mParameters, 15)))); // dimensionless + const double var_I_Na__bj = ((var_chaste_interface__membrane_potential__V_m >= -40) ? (0.59999999999999998 * exp(0.057000000000000002 * var_chaste_interface__membrane_potential__V_m - 0.057000000000000002 * NV_Ith_S(mParameters, 15)) / (1 + exp(-3.2000000000000002 + 0.10000000000000001 * NV_Ith_S(mParameters, 15) - 0.10000000000000001 * var_chaste_interface__membrane_potential__V_m))) : (0.024240000000000001 * exp(0.01052 * NV_Ith_S(mParameters, 15) - 0.01052 * var_chaste_interface__membrane_potential__V_m) / (1 + exp(-5.5312920000000005 + 0.13780000000000001 * NV_Ith_S(mParameters, 15) - 0.13780000000000001 * var_chaste_interface__membrane_potential__V_m)))); // dimensionless + const double var_I_Na__tauh = 1 / (var_I_Na__ah + var_I_Na__bh); // msec + const double var_I_Na__tauj = 1 / (var_I_Na__aj + var_I_Na__bj); // msec + // Special handling of data clamp current here + // (we want to save expense of calling the interpolation method if possible.) + double var_chaste_interface__membrane_data_clamp_current = 0.0; + if (mDataClampIsOn) + { + var_chaste_interface__membrane_data_clamp_current = (-GetExperimentalVoltageAtTimeT(var_chaste_interface__environment__time) + var_chaste_interface__membrane_potential__V_m) * NV_Ith_S(mParameters, 12); // uA_per_cm2 + } + const double var_membrane_potential__i_Stim_converted = GetIntracellularAreaStimulus(var_chaste_interface__environment__time); // uA_per_cm2 + const double var_parameters__Cmem_converted = 1000000 * NV_Ith_S(mParameters, 23); // uF + const double var_parameters__Fjunc = 0.11; // dimensionless + const double var_parameters__Fjunc_CaL = 0.90000000000000002; // dimensionless + const double var_parameters__Fsl = 1 - var_parameters__Fjunc; // dimensionless + const double var_I_Ks__GKs_total = (var_I_Ks__gks_junc * var_parameters__Fjunc + var_I_Ks__gks_sl * var_parameters__Fsl) * NV_Ith_S(mParameters, 19); // mS_per_uF + const double var_parameters__Fsl_CaL = 1 - var_parameters__Fjunc_CaL; // dimensionless + const double var_parameters__IbarSLCaP = 0.067299999999999999; // uA_per_uF + const double var_parameters__Kdact = 0.00014999999999999999; // mM + const double var_I_NCX__Ka_junc = 1 / (1 + pow(var_parameters__Kdact, 2) / pow(var_chaste_interface__Ca_Concentrations__Ca_j, 2)); // dimensionless + const double var_I_NCX__Ka_sl = 1 / (1 + pow(var_parameters__Kdact, 2) / pow(var_chaste_interface__Ca_Concentrations__Ca_sl, 2)); // dimensionless + const double var_parameters__KmCai = 0.0035899999999999999; // mM + const double var_parameters__KmCao = 1.3; // mM + const double var_parameters__KmKo = 1.5; // mM + const double var_parameters__KmNai = 12.289999999999999; // mM + const double var_parameters__KmNaip = 11; // mM + const double var_parameters__KmNao = 87.5; // mM + const double var_parameters__KmPCa = 0.00050000000000000001; // mM + const double var_parameters__Kmf = 0.00024600000000000002; // mM + const double var_parameters__Kmr = 1.7; // mM + const double var_I_Ki__g_K1 = 0.43033148291193518 * sqrt(NV_Ith_S(mParameters, 7)) * NV_Ith_S(mParameters, 17); // mS_per_uF + const double var_I_Kr__gkr = 0.43033148291193518 * sqrt(NV_Ith_S(mParameters, 7)) * NV_Ith_S(mParameters, 18); // mS_per_uF + const double var_I_NCX__s3_junc = pow(var_chaste_interface__Na_Concentrations__Na_j, 3) * NV_Ith_S(mParameters, 5) + pow(var_chaste_interface__Na_Concentrations__Na_j, 3) * var_parameters__KmCao + pow(NV_Ith_S(mParameters, 8), 3) * var_chaste_interface__Ca_Concentrations__Ca_j + pow(var_parameters__KmNao, 3) * (1 + var_chaste_interface__Ca_Concentrations__Ca_j / var_parameters__KmCai) * var_chaste_interface__Ca_Concentrations__Ca_j + pow(NV_Ith_S(mParameters, 8), 3) * (1 + pow(var_chaste_interface__Na_Concentrations__Na_j, 3) / pow(var_parameters__KmNai, 3)) * var_parameters__KmCai; // mM4 + const double var_I_NCX__s3_sl = pow(var_chaste_interface__Na_Concentrations__Na_sl, 3) * NV_Ith_S(mParameters, 5) + pow(var_chaste_interface__Na_Concentrations__Na_sl, 3) * var_parameters__KmCao + pow(NV_Ith_S(mParameters, 8), 3) * var_chaste_interface__Ca_Concentrations__Ca_sl + pow(var_parameters__KmNao, 3) * (1 + var_chaste_interface__Ca_Concentrations__Ca_sl / var_parameters__KmCai) * var_chaste_interface__Ca_Concentrations__Ca_sl + pow(NV_Ith_S(mParameters, 8), 3) * (1 + pow(var_chaste_interface__Na_Concentrations__Na_sl, 3) / pow(var_parameters__KmNai, 3)) * var_parameters__KmCai; // mM4 + const double var_I_NaK__sigma = -0.14285714285714285 + 0.14285714285714285 * exp(0.01485884101040119 * NV_Ith_S(mParameters, 8)); // dimensionless + const double var_parameters__Q10CaL = 1.8; // dimensionless + const double var_parameters__Q10NCX = 1.5700000000000001; // dimensionless + const double var_parameters__Q10SLCaP = 2.3500000000000001; // dimensionless + const double var_parameters__Q10SRCaP = 2.6000000000000001; // dimensionless + const double var_parameters__FoRT = NV_Ith_S(mParameters, 9) / (NV_Ith_S(mParameters, 10) * NV_Ith_S(mParameters, 24)); // per_mV + const double var_I_NaK__fnak = 1 / (1 + 0.1245 * exp(-0.10000000000000001 * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT) + 0.036499999999999998 * var_I_NaK__sigma * exp(-var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT)); // dimensionless + const double var_I_NaK__I_nak_junc = var_I_NaK__fnak * var_parameters__Fjunc * NV_Ith_S(mParameters, 22) * NV_Ith_S(mParameters, 7) / ((1 + pow(var_parameters__KmNaip, 4) / pow(var_chaste_interface__Na_Concentrations__Na_j, 4)) * (var_parameters__KmKo + NV_Ith_S(mParameters, 7))); // uA_per_uF + const double var_I_NaK__I_nak_sl = var_I_NaK__fnak * var_parameters__Fsl * NV_Ith_S(mParameters, 22) * NV_Ith_S(mParameters, 7) / ((1 + pow(var_parameters__KmNaip, 4) / pow(var_chaste_interface__Na_Concentrations__Na_sl, 4)) * (var_parameters__KmKo + NV_Ith_S(mParameters, 7))); // uA_per_uF + const double var_I_NaK__I_nak = var_I_NaK__I_nak_junc + var_I_NaK__I_nak_sl; // uA_per_uF + const double var_I_NaK__I_nak_converted = HeartConfig::Instance()->GetCapacitance() * var_I_NaK__I_nak; // uA_per_cm2 + const double var_parameters__Qpow = -31 + 0.10000000000000001 * NV_Ith_S(mParameters, 24); // dimensionless + const double var_I_PCa__I_pca_junc = pow(var_chaste_interface__Ca_Concentrations__Ca_j, 1.6000000000000001) * pow(var_parameters__Q10SLCaP, var_parameters__Qpow) * var_parameters__Fjunc * var_parameters__IbarSLCaP / (pow(var_chaste_interface__Ca_Concentrations__Ca_j, 1.6000000000000001) + pow(var_parameters__KmPCa, 1.6000000000000001)); // uA_per_uF + const double var_I_PCa__I_pca_sl = pow(var_chaste_interface__Ca_Concentrations__Ca_sl, 1.6000000000000001) * pow(var_parameters__Q10SLCaP, var_parameters__Qpow) * var_parameters__Fsl * var_parameters__IbarSLCaP / (pow(var_chaste_interface__Ca_Concentrations__Ca_sl, 1.6000000000000001) + pow(var_parameters__KmPCa, 1.6000000000000001)); // uA_per_uF + const double var_I_PCa__I_pca = var_I_PCa__I_pca_junc + var_I_PCa__I_pca_sl; // uA_per_uF + const double var_I_PCa__I_pca_converted = HeartConfig::Instance()->GetCapacitance() * var_I_PCa__I_pca; // uA_per_cm2 + const double var_parameters__ecl = log(NV_Ith_S(mParameters, 4) / NV_Ith_S(mParameters, 6)) / var_parameters__FoRT; // mV + const double var_parameters__ek = log(NV_Ith_S(mParameters, 7) / var_chaste_interface__K_Concentration__K_i) / var_parameters__FoRT; // mV + const double var_I_Ki__aki = 1.02 / (1 + exp(-14.1227775 + 0.23849999999999999 * var_chaste_interface__membrane_potential__V_m - 0.23849999999999999 * var_parameters__ek)); // dimensionless + const double var_I_Ki__bki = (0.49124000000000001 * exp(0.43983232 + 0.080320000000000003 * var_chaste_interface__membrane_potential__V_m - 0.080320000000000003 * var_parameters__ek) + exp(-36.698642499999998 + 0.061749999999999999 * var_chaste_interface__membrane_potential__V_m - 0.061749999999999999 * var_parameters__ek)) / (1 + exp(-2.4444678999999998 + 0.51429999999999998 * var_parameters__ek - 0.51429999999999998 * var_chaste_interface__membrane_potential__V_m)); // dimensionless + const double var_I_Ki__kiss = var_I_Ki__aki / (var_I_Ki__aki + var_I_Ki__bki); // dimensionless + const double var_I_Ki__I_ki = (-var_parameters__ek + var_chaste_interface__membrane_potential__V_m) * var_I_Ki__g_K1 * var_I_Ki__kiss; // uA_per_uF + const double var_I_Ki__I_ki_converted = HeartConfig::Instance()->GetCapacitance() * var_I_Ki__I_ki; // uA_per_cm2 + const double var_I_Kr__I_kr = (-var_parameters__ek + var_chaste_interface__membrane_potential__V_m) * var_I_Kr__gkr * var_I_Kr__rkr * var_chaste_interface__I_Kr__x_kr; // uA_per_uF + const double var_I_Kr__I_kr_converted = HeartConfig::Instance()->GetCapacitance() * var_I_Kr__I_kr; // uA_per_cm2 + const double var_parameters__ena_junc = log(NV_Ith_S(mParameters, 8) / var_chaste_interface__Na_Concentrations__Na_j) / var_parameters__FoRT; // mV + const double var_I_Na__I_Na_junc = pow(var_chaste_interface__I_Na__m, 3) * (-var_parameters__ena_junc + var_chaste_interface__membrane_potential__V_m) * var_chaste_interface__I_Na__h * var_chaste_interface__I_Na__j * var_parameters__Fjunc * NV_Ith_S(mParameters, 13); // uA_per_uF + const double var_parameters__ena_sl = log(NV_Ith_S(mParameters, 8) / var_chaste_interface__Na_Concentrations__Na_sl) / var_parameters__FoRT; // mV + const double var_I_Na__I_Na_sl = pow(var_chaste_interface__I_Na__m, 3) * (-var_parameters__ena_sl + var_chaste_interface__membrane_potential__V_m) * var_chaste_interface__I_Na__h * var_chaste_interface__I_Na__j * var_parameters__Fsl * NV_Ith_S(mParameters, 13); // uA_per_uF + const double var_I_Na__I_Na = var_I_Na__I_Na_junc + var_I_Na__I_Na_sl; // uA_per_uF + const double var_I_Na__I_Na_converted = HeartConfig::Instance()->GetCapacitance() * var_I_Na__I_Na; // uA_per_cm2 + const double var_parameters__epi = 1; // dimensionless + const double var_I_to__GtoFast = ((var_parameters__epi == 1) ? (0.1144 * NV_Ith_S(mParameters, 16)) : (0.0014039999999999999 * NV_Ith_S(mParameters, 16))); // mS_per_uF + const double var_I_to__GtoSlow = ((var_parameters__epi == 1) ? (0.015599999999999999 * NV_Ith_S(mParameters, 20)) : (0.037595999999999997 * NV_Ith_S(mParameters, 20))); // mS_per_uF + const double var_I_to__I_tof = (-var_parameters__ek + var_chaste_interface__membrane_potential__V_m) * var_I_to__GtoFast * var_chaste_interface__I_to__x_to_f * var_chaste_interface__I_to__y_to_f; // uA_per_uF + const double var_I_to__I_tof_converted = HeartConfig::Instance()->GetCapacitance() * var_I_to__I_tof; // uA_per_cm2 + const double var_I_to__I_tos = (-var_parameters__ek + var_chaste_interface__membrane_potential__V_m) * var_I_to__GtoSlow * var_chaste_interface__I_to__x_to_s * var_chaste_interface__I_to__y_to_s; // uA_per_uF + const double var_I_to__I_to = var_I_to__I_tof + var_I_to__I_tos; // uA_per_uF + const double var_I_to__I_to_converted = HeartConfig::Instance()->GetCapacitance() * var_I_to__I_to; // uA_per_cm2 + const double var_I_to__I_tos_converted = HeartConfig::Instance()->GetCapacitance() * var_I_to__I_tos; // uA_per_cm2 + const double var_parameters__hillSRCaP = 1.7869999999999999; // dimensionless + const double var_SR_Fluxes__J_serca = pow(var_parameters__Q10SRCaP, var_parameters__Qpow) * (pow((var_chaste_interface__Ca_Concentrations__Ca_i / var_parameters__Kmf), var_parameters__hillSRCaP) - pow((var_chaste_interface__SR_Ca_Concentrations__Ca_sr / var_parameters__Kmr), var_parameters__hillSRCaP)) * NV_Ith_S(mParameters, 2) / (1 + pow((var_chaste_interface__Ca_Concentrations__Ca_i / var_parameters__Kmf), var_parameters__hillSRCaP) + pow((var_chaste_interface__SR_Ca_Concentrations__Ca_sr / var_parameters__Kmr), var_parameters__hillSRCaP)); // mM_per_msec + const double var_SR_Fluxes__J_SRCarel = (-var_chaste_interface__Ca_Concentrations__Ca_j + var_chaste_interface__SR_Ca_Concentrations__Ca_sr) * var_chaste_interface__SR_Fluxes__Ry_Ro * NV_Ith_S(mParameters, 1); // mM_per_msec + const double var_parameters__ksat = 0.32000000000000001; // dimensionless + const double var_parameters__nu = 0.27000000000000002; // dimensionless + const double var_I_NCX__s1_junc = pow(var_chaste_interface__Na_Concentrations__Na_j, 3) * NV_Ith_S(mParameters, 5) * exp(var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT * var_parameters__nu); // mM4 + const double var_I_NCX__s1_sl = pow(var_chaste_interface__Na_Concentrations__Na_sl, 3) * NV_Ith_S(mParameters, 5) * exp(var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT * var_parameters__nu); // mM4 + const double var_I_NCX__s2_junc = pow(NV_Ith_S(mParameters, 8), 3) * var_chaste_interface__Ca_Concentrations__Ca_j * exp((-1 + var_parameters__nu) * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT); // mM4 + const double var_I_NCX__I_ncx_junc = pow(var_parameters__Q10NCX, var_parameters__Qpow) * (-var_I_NCX__s2_junc + var_I_NCX__s1_junc) * var_I_NCX__Ka_junc * var_parameters__Fjunc * NV_Ith_S(mParameters, 21) / ((1 + var_parameters__ksat * exp((-1 + var_parameters__nu) * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT)) * var_I_NCX__s3_junc); // uA_per_uF + const double var_I_NCX__s2_sl = pow(NV_Ith_S(mParameters, 8), 3) * var_chaste_interface__Ca_Concentrations__Ca_sl * exp((-1 + var_parameters__nu) * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT); // mM4 + const double var_I_NCX__I_ncx_sl = pow(var_parameters__Q10NCX, var_parameters__Qpow) * (-var_I_NCX__s2_sl + var_I_NCX__s1_sl) * var_I_NCX__Ka_sl * var_parameters__Fsl * NV_Ith_S(mParameters, 21) / ((1 + var_parameters__ksat * exp((-1 + var_parameters__nu) * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT)) * var_I_NCX__s3_sl); // uA_per_uF + const double var_I_NCX__I_ncx = var_I_NCX__I_ncx_junc + var_I_NCX__I_ncx_sl; // uA_per_uF + const double var_I_NCX__I_ncx_converted = HeartConfig::Instance()->GetCapacitance() * var_I_NCX__I_ncx; // uA_per_cm2 + const double var_parameters__pCa = 0.00054000000000000001 * NV_Ith_S(mParameters, 11); // cm_per_sec + const double var_I_Ca__ibarca_j = 4 * (-0.34100000000000003 * NV_Ith_S(mParameters, 5) + 0.34100000000000003 * var_chaste_interface__Ca_Concentrations__Ca_j * exp(2 * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT)) * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT * NV_Ith_S(mParameters, 9) * var_parameters__pCa / (-1 + exp(2 * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT)); // uA_per_uF + const double var_I_Ca__I_Ca_junc = 0.45000000000000001 * pow(var_parameters__Q10CaL, var_parameters__Qpow) * (1 - var_chaste_interface__I_Ca__f_Ca_Bj + var_I_Ca__fcaCaj) * var_chaste_interface__I_Ca__d * var_chaste_interface__I_Ca__f * var_I_Ca__ibarca_j * var_parameters__Fjunc_CaL; // uA_per_uF + const double var_I_Ca__ibarca_sl = 4 * (-0.34100000000000003 * NV_Ith_S(mParameters, 5) + 0.34100000000000003 * var_chaste_interface__Ca_Concentrations__Ca_sl * exp(2 * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT)) * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT * NV_Ith_S(mParameters, 9) * var_parameters__pCa / (-1 + exp(2 * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT)); // uA_per_uF + const double var_I_Ca__I_Ca_sl = 0.45000000000000001 * pow(var_parameters__Q10CaL, var_parameters__Qpow) * (1 - var_chaste_interface__I_Ca__f_Ca_Bsl + var_I_Ca__fcaCaMSL) * var_chaste_interface__I_Ca__d * var_chaste_interface__I_Ca__f * var_I_Ca__ibarca_sl * var_parameters__Fsl_CaL; // uA_per_uF + const double var_I_Ca__I_Ca = var_I_Ca__I_Ca_junc + var_I_Ca__I_Ca_sl; // uA_per_uF + const double var_I_Ca__I_Ca_converted = HeartConfig::Instance()->GetCapacitance() * var_I_Ca__I_Ca; // uA_per_cm2 + const double var_parameters__pNaK = 0.018329999999999999; // dimensionless + const double var_I_Ks__eks = log((NV_Ith_S(mParameters, 8) * var_parameters__pNaK + NV_Ith_S(mParameters, 7)) / (var_chaste_interface__Na_Concentrations__Na_i * var_parameters__pNaK + var_chaste_interface__K_Concentration__K_i)) / var_parameters__FoRT; // mV + const double var_I_Ks__I_ks = pow(var_chaste_interface__I_Ks__x_ks, 2) * (-var_I_Ks__eks + var_chaste_interface__membrane_potential__V_m) * var_I_Ks__GKs_total; // uA_per_uF + const double var_I_Ks__I_ks_converted = HeartConfig::Instance()->GetCapacitance() * var_I_Ks__I_ks; // uA_per_cm2 + +#if CHASTE_SUNDIALS_VERSION >= 60000 + N_Vector dqs = N_VNew_Serial(27, CvodeContextManager::Instance()->GetSundialsContext()); +#else + N_Vector dqs = N_VNew_Serial(27); +#endif + NV_Ith_S(dqs, 0) = var_SR_Fluxes__J_SRleak; + NV_Ith_S(dqs, 1) = var_SR_Fluxes__J_SRCarel; + NV_Ith_S(dqs, 2) = var_SR_Fluxes__J_serca; + NV_Ith_S(dqs, 3) = var_parameters__ecl; + NV_Ith_S(dqs, 4) = var_I_Ca__I_Ca_converted; + NV_Ith_S(dqs, 5) = var_I_Ca__tauf; + NV_Ith_S(dqs, 6) = var_I_PCa__I_pca_converted; + NV_Ith_S(dqs, 7) = var_parameters__Cmem_converted; + NV_Ith_S(dqs, 8) = var_chaste_interface__membrane_data_clamp_current; + NV_Ith_S(dqs, 9) = var_I_Na__I_Na_converted; + NV_Ith_S(dqs, 10) = var_I_Na__tauh; + NV_Ith_S(dqs, 11) = var_I_Na__tauj; + NV_Ith_S(dqs, 12) = var_I_to__I_tof_converted; + NV_Ith_S(dqs, 13) = var_I_to__GtoFast; + NV_Ith_S(dqs, 14) = var_I_Ki__I_ki_converted; + NV_Ith_S(dqs, 15) = var_I_Ki__g_K1; + NV_Ith_S(dqs, 16) = var_I_Kr__I_kr_converted; + NV_Ith_S(dqs, 17) = var_I_Ks__I_ks_converted; + NV_Ith_S(dqs, 18) = var_I_Ks__GKs_total; + NV_Ith_S(dqs, 19) = var_I_to__I_tos_converted; + NV_Ith_S(dqs, 20) = var_I_to__GtoSlow; + NV_Ith_S(dqs, 21) = var_I_NCX__I_ncx_converted; + NV_Ith_S(dqs, 22) = var_I_NaK__I_nak_converted; + NV_Ith_S(dqs, 23) = var_membrane_potential__i_Stim_converted; + NV_Ith_S(dqs, 24) = var_I_to__I_to_converted; + NV_Ith_S(dqs, 25) = var_parameters__ek; + NV_Ith_S(dqs, 26) = var_chaste_interface__environment__time; + return dqs; + } + +template<> +void OdeSystemInformation::Initialise(void) +{ + this->mSystemName = "grandi_pasqualini_bers_2010_epi"; + this->mFreeVariableName = "time"; + this->mFreeVariableUnits = "msec"; + + // NV_Ith_S(rY, 0): + this->mVariableNames.push_back("membrane_voltage"); + this->mVariableUnits.push_back("mV"); + this->mInitialConditions.push_back(-81.4229700631461); + + // NV_Ith_S(rY, 1): + this->mVariableNames.push_back("cytosolic_calcium_concentration"); + this->mVariableUnits.push_back("mM"); + this->mInitialConditions.push_back(8.72745589849657e-05); + + // NV_Ith_S(rY, 2): + this->mVariableNames.push_back("membrane_fast_sodium_current_m_gate"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.00381858135062259); + + // NV_Ith_S(rY, 3): + this->mVariableNames.push_back("membrane_fast_sodium_current_h_gate"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.625086621635645); + + // NV_Ith_S(rY, 4): + this->mVariableNames.push_back("membrane_fast_sodium_current_j_gate"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.62332507235506); + + // NV_Ith_S(rY, 5): + this->mVariableNames.push_back("I_Kr__x_kr"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.021733554982663); + + // NV_Ith_S(rY, 6): + this->mVariableNames.push_back("I_Ks__x_ks"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.00428981903391989); + + // NV_Ith_S(rY, 7): + this->mVariableNames.push_back("I_to__x_to_s"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.000441539203559411); + + // NV_Ith_S(rY, 8): + this->mVariableNames.push_back("I_to__y_to_s"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.784875334693892); + + // NV_Ith_S(rY, 9): + this->mVariableNames.push_back("I_to__x_to_f"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.000441531250866821); + + // NV_Ith_S(rY, 10): + this->mVariableNames.push_back("I_to__y_to_f"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.999995817153572); + + // NV_Ith_S(rY, 11): + this->mVariableNames.push_back("membrane_L_type_calcium_current_d_gate"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(2.93982287251302e-06); + + // NV_Ith_S(rY, 12): + this->mVariableNames.push_back("membrane_L_type_calcium_current_f_gate"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.99511673495949); + + // NV_Ith_S(rY, 13): + this->mVariableNames.push_back("I_Ca__f_Ca_Bj"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.0246142436477748); + + // NV_Ith_S(rY, 14): + this->mVariableNames.push_back("membrane_L_type_calcium_current_fCa_gate"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.0152416826209301); + + // NV_Ith_S(rY, 15): + this->mVariableNames.push_back("SR_Fluxes__Ry_Rr"); + this->mVariableUnits.push_back("mM"); + this->mInitialConditions.push_back(0.891022230597263); + + // NV_Ith_S(rY, 16): + this->mVariableNames.push_back("SR_Fluxes__Ry_Ro"); + this->mVariableUnits.push_back("mM"); + this->mInitialConditions.push_back(7.37484660389498e-07); + + // NV_Ith_S(rY, 17): + this->mVariableNames.push_back("SR_Fluxes__Ry_Ri"); + this->mVariableUnits.push_back("mM"); + this->mInitialConditions.push_back(9.01984485847386e-08); + + // NV_Ith_S(rY, 18): + this->mVariableNames.push_back("Na_Buffers__Na_Bj"); + this->mVariableUnits.push_back("mM"); + this->mInitialConditions.push_back(3.43545459048316); + + // NV_Ith_S(rY, 19): + this->mVariableNames.push_back("Na_Buffers__Na_Bsl"); + this->mVariableUnits.push_back("mM"); + this->mInitialConditions.push_back(0.749601264899653); + + // NV_Ith_S(rY, 20): + this->mVariableNames.push_back("Cytosolic_Ca_Buffers__Tn_CL"); + this->mVariableUnits.push_back("mM"); + this->mInitialConditions.push_back(0.00893708435270205); + + // NV_Ith_S(rY, 21): + this->mVariableNames.push_back("Cytosolic_Ca_Buffers__Tn_CHc"); + this->mVariableUnits.push_back("mM"); + this->mInitialConditions.push_back(0.117445983314504); + + // NV_Ith_S(rY, 22): + this->mVariableNames.push_back("Cytosolic_Ca_Buffers__Tn_CHm"); + this->mVariableUnits.push_back("mM"); + this->mInitialConditions.push_back(0.0105996734077994); + + // NV_Ith_S(rY, 23): + this->mVariableNames.push_back("Cytosolic_Ca_Buffers__CaM"); + this->mVariableUnits.push_back("mM"); + this->mInitialConditions.push_back(0.000295653619580701); + + // NV_Ith_S(rY, 24): + this->mVariableNames.push_back("Cytosolic_Ca_Buffers__Myo_c"); + this->mVariableUnits.push_back("mM"); + this->mInitialConditions.push_back(0.00192645052472679); + + // NV_Ith_S(rY, 25): + this->mVariableNames.push_back("Cytosolic_Ca_Buffers__Myo_m"); + this->mVariableUnits.push_back("mM"); + this->mInitialConditions.push_back(0.137557201546068); + + // NV_Ith_S(rY, 26): + this->mVariableNames.push_back("Cytosolic_Ca_Buffers__SRB"); + this->mVariableUnits.push_back("mM"); + this->mInitialConditions.push_back(0.00217414510791738); + + // NV_Ith_S(rY, 27): + this->mVariableNames.push_back("Junctional_and_SL_Ca_Buffers__SLL_j"); + this->mVariableUnits.push_back("mM"); + this->mInitialConditions.push_back(0.00738583890572642); + + // NV_Ith_S(rY, 28): + this->mVariableNames.push_back("Junctional_and_SL_Ca_Buffers__SLL_sl"); + this->mVariableUnits.push_back("mM"); + this->mInitialConditions.push_back(0.00988178900584875); + + // NV_Ith_S(rY, 29): + this->mVariableNames.push_back("Junctional_and_SL_Ca_Buffers__SLH_j"); + this->mVariableUnits.push_back("mM"); + this->mInitialConditions.push_back(0.0734662466011574); + + // NV_Ith_S(rY, 30): + this->mVariableNames.push_back("Junctional_and_SL_Ca_Buffers__SLH_sl"); + this->mVariableUnits.push_back("mM"); + this->mInitialConditions.push_back(0.114400081504523); + + // NV_Ith_S(rY, 31): + this->mVariableNames.push_back("SR_Ca_Concentrations__Csqn_b"); + this->mVariableUnits.push_back("mM"); + this->mInitialConditions.push_back(1.19772047585784); + + // NV_Ith_S(rY, 32): + this->mVariableNames.push_back("JSR_calcium_concentration"); + this->mVariableUnits.push_back("mM"); + this->mInitialConditions.push_back(0.555180633859957); + + // NV_Ith_S(rY, 33): + this->mVariableNames.push_back("dyadic_space_sodium_concentration"); + this->mVariableUnits.push_back("mM"); + this->mInitialConditions.push_back(8.3215690202059); + + // NV_Ith_S(rY, 34): + this->mVariableNames.push_back("submembrane_space_sodium_concentration"); + this->mVariableUnits.push_back("mM"); + this->mInitialConditions.push_back(8.32094589677861); + + // NV_Ith_S(rY, 35): + this->mVariableNames.push_back("cytosolic_sodium_concentration"); + this->mVariableUnits.push_back("mM"); + this->mInitialConditions.push_back(8.32114502072456); + + // NV_Ith_S(rY, 36): + this->mVariableNames.push_back("cytosolic_potassium_concentration"); + this->mVariableUnits.push_back("mM"); + this->mInitialConditions.push_back(120.0); + + // NV_Ith_S(rY, 37): + this->mVariableNames.push_back("dyadic_space_calcium_concentration"); + this->mVariableUnits.push_back("mM"); + this->mInitialConditions.push_back(0.000175415190830688); + + // NV_Ith_S(rY, 38): + this->mVariableNames.push_back("submembrane_space_calcium_concentration"); + this->mVariableUnits.push_back("mM"); + this->mInitialConditions.push_back(0.000106544589194246); + + // mParameters[0]: + this->mParameterNames.push_back("SR_leak_current_max"); + this->mParameterUnits.push_back("per_msec"); + + // mParameters[1]: + this->mParameterNames.push_back("SR_release_current_max"); + this->mParameterUnits.push_back("per_msec"); + + // mParameters[2]: + this->mParameterNames.push_back("SR_uptake_current_max"); + this->mParameterUnits.push_back("mM_per_msec"); + + // mParameters[3]: + this->mParameterNames.push_back("concentration_clamp_onoff"); + this->mParameterUnits.push_back("dimensionless"); + + // mParameters[4]: + this->mParameterNames.push_back("cytosolic_chloride_concentration"); + this->mParameterUnits.push_back("mM"); + + // mParameters[5]: + this->mParameterNames.push_back("extracellular_calcium_concentration"); + this->mParameterUnits.push_back("mM"); + + // mParameters[6]: + this->mParameterNames.push_back("extracellular_chloride_concentration"); + this->mParameterUnits.push_back("mM"); + + // mParameters[7]: + this->mParameterNames.push_back("extracellular_potassium_concentration"); + this->mParameterUnits.push_back("mM"); + + // mParameters[8]: + this->mParameterNames.push_back("extracellular_sodium_concentration"); + this->mParameterUnits.push_back("mM"); + + // mParameters[9]: + this->mParameterNames.push_back("faraday_constant"); + this->mParameterUnits.push_back("coulomb_per_mole"); + + // mParameters[10]: + this->mParameterNames.push_back("gas_constant"); + this->mParameterUnits.push_back("joule_per_kelvin_per_kilomole"); + + // mParameters[11]: + this->mParameterNames.push_back("membrane_L_type_calcium_current_conductance"); + this->mParameterUnits.push_back("cm_per_sec"); + + // mParameters[12]: + this->mParameterNames.push_back("membrane_data_clamp_current_conductance"); + this->mParameterUnits.push_back("dimensionless"); + + // mParameters[13]: + this->mParameterNames.push_back("membrane_fast_sodium_current_conductance"); + this->mParameterUnits.push_back("mS_per_uF"); + + // mParameters[14]: + this->mParameterNames.push_back("membrane_fast_sodium_current_reduced_inactivation"); + this->mParameterUnits.push_back("dimensionless"); + + // mParameters[15]: + this->mParameterNames.push_back("membrane_fast_sodium_current_shift_inactivation"); + this->mParameterUnits.push_back("mV"); + + // mParameters[16]: + this->mParameterNames.push_back("membrane_fast_transient_outward_current_conductance_scaling_factor"); + this->mParameterUnits.push_back("dimensionless"); + + // mParameters[17]: + this->mParameterNames.push_back("membrane_inward_rectifier_potassium_current_conductance_scaling_factor"); + this->mParameterUnits.push_back("mS_per_uF"); + + // mParameters[18]: + this->mParameterNames.push_back("membrane_rapid_delayed_rectifier_potassium_current_conductance"); + this->mParameterUnits.push_back("mS_per_uF"); + + // mParameters[19]: + this->mParameterNames.push_back("membrane_slow_delayed_rectifier_potassium_current_conductance_scaling_factor"); + this->mParameterUnits.push_back("dimensionless"); + + // mParameters[20]: + this->mParameterNames.push_back("membrane_slow_transient_outward_current_conductance_scaling_factor"); + this->mParameterUnits.push_back("dimensionless"); + + // mParameters[21]: + this->mParameterNames.push_back("membrane_sodium_calcium_exchanger_current_conductance"); + this->mParameterUnits.push_back("uA_per_uF"); + + // mParameters[22]: + this->mParameterNames.push_back("membrane_sodium_potassium_pump_current_permeability"); + this->mParameterUnits.push_back("uA_per_uF"); + + // mParameters[23]: + this->mParameterNames.push_back("parameters__Cmem"); + this->mParameterUnits.push_back("farad"); + + // mParameters[24]: + this->mParameterNames.push_back("temperature"); + this->mParameterUnits.push_back("kelvin"); + + // Derived Quantity index [0]: + this->mDerivedQuantityNames.push_back("SR_leak_current"); + this->mDerivedQuantityUnits.push_back("mM_per_msec"); + + // Derived Quantity index [1]: + this->mDerivedQuantityNames.push_back("SR_release_current"); + this->mDerivedQuantityUnits.push_back("mM_per_msec"); + + // Derived Quantity index [2]: + this->mDerivedQuantityNames.push_back("SR_uptake_current"); + this->mDerivedQuantityUnits.push_back("mM_per_msec"); + + // Derived Quantity index [3]: + this->mDerivedQuantityNames.push_back("chloride_reversal_potential"); + this->mDerivedQuantityUnits.push_back("mV"); + + // Derived Quantity index [4]: + this->mDerivedQuantityNames.push_back("membrane_L_type_calcium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [5]: + this->mDerivedQuantityNames.push_back("membrane_L_type_calcium_current_f_gate_tau"); + this->mDerivedQuantityUnits.push_back("msec"); + + // Derived Quantity index [6]: + this->mDerivedQuantityNames.push_back("membrane_calcium_pump_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [7]: + this->mDerivedQuantityNames.push_back("membrane_capacitance"); + this->mDerivedQuantityUnits.push_back("uF"); + + // Derived Quantity index [8]: + this->mDerivedQuantityNames.push_back("membrane_data_clamp_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [9]: + this->mDerivedQuantityNames.push_back("membrane_fast_sodium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [10]: + this->mDerivedQuantityNames.push_back("membrane_fast_sodium_current_h_gate_tau"); + this->mDerivedQuantityUnits.push_back("msec"); + + // Derived Quantity index [11]: + this->mDerivedQuantityNames.push_back("membrane_fast_sodium_current_j_gate_tau"); + this->mDerivedQuantityUnits.push_back("msec"); + + // Derived Quantity index [12]: + this->mDerivedQuantityNames.push_back("membrane_fast_transient_outward_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [13]: + this->mDerivedQuantityNames.push_back("membrane_fast_transient_outward_current_conductance"); + this->mDerivedQuantityUnits.push_back("mS_per_uF"); + + // Derived Quantity index [14]: + this->mDerivedQuantityNames.push_back("membrane_inward_rectifier_potassium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [15]: + this->mDerivedQuantityNames.push_back("membrane_inward_rectifier_potassium_current_conductance"); + this->mDerivedQuantityUnits.push_back("mS_per_uF"); + + // Derived Quantity index [16]: + this->mDerivedQuantityNames.push_back("membrane_rapid_delayed_rectifier_potassium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [17]: + this->mDerivedQuantityNames.push_back("membrane_slow_delayed_rectifier_potassium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [18]: + this->mDerivedQuantityNames.push_back("membrane_slow_delayed_rectifier_potassium_current_conductance"); + this->mDerivedQuantityUnits.push_back("mS_per_uF"); + + // Derived Quantity index [19]: + this->mDerivedQuantityNames.push_back("membrane_slow_transient_outward_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [20]: + this->mDerivedQuantityNames.push_back("membrane_slow_transient_outward_current_conductance"); + this->mDerivedQuantityUnits.push_back("mS_per_uF"); + + // Derived Quantity index [21]: + this->mDerivedQuantityNames.push_back("membrane_sodium_calcium_exchanger_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [22]: + this->mDerivedQuantityNames.push_back("membrane_sodium_potassium_pump_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [23]: + this->mDerivedQuantityNames.push_back("membrane_stimulus_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [24]: + this->mDerivedQuantityNames.push_back("membrane_transient_outward_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [25]: + this->mDerivedQuantityNames.push_back("potassium_reversal_potential"); + this->mDerivedQuantityUnits.push_back("mV"); + + // Derived Quantity index [26]: + this->mDerivedQuantityNames.push_back("time"); + this->mDerivedQuantityUnits.push_back("msec"); + + this->mInitialised = true; +} + +// Serialization for Boost >= 1.36 +#include "SerializationExportWrapperForCpp.hpp" +CHASTE_CLASS_EXPORT(Cellgrandi_pasqualini_bers_2010_ssFromCellMLCvodeDataClampOpt) + +#endif // CHASTE_CVODE diff --git a/chaste_codegen/tests/numerical/baseline/CVODE_DATA_CLAMP_OPT/grandi_pasqualini_bers_2010_ssCvodeDataClampOpt.hpp b/chaste_codegen/tests/numerical/baseline/CVODE_DATA_CLAMP_OPT/grandi_pasqualini_bers_2010_ssCvodeDataClampOpt.hpp new file mode 100644 index 00000000..288a84e9 --- /dev/null +++ b/chaste_codegen/tests/numerical/baseline/CVODE_DATA_CLAMP_OPT/grandi_pasqualini_bers_2010_ssCvodeDataClampOpt.hpp @@ -0,0 +1,89 @@ +#ifdef CHASTE_CVODE +#ifndef CELLGRANDI_PASQUALINI_BERS_2010_SSFROMCELLMLCVODEDATACLAMPOPT_HPP_ +#define CELLGRANDI_PASQUALINI_BERS_2010_SSFROMCELLMLCVODEDATACLAMPOPT_HPP_ + +//! @file +//! +//! This source file was generated from CellML by chaste_codegen version (version omitted as unimportant) +//! +//! Model: grandi_pasqualini_bers_2010_epi +//! +//! Processed by chaste_codegen: https://github.com/ModellingWebLab/chaste-codegen +//! (translator: chaste_codegen, model type: CvodeCellWithDataClampOpt) +//! on (date omitted as unimportant) +//! +//! + +#include "ChasteSerialization.hpp" +#include +#include "AbstractStimulusFunction.hpp" +#include "AbstractCvodeCellWithDataClamp.hpp" + +class Cellgrandi_pasqualini_bers_2010_ssFromCellMLCvodeDataClampOpt : public AbstractCvodeCellWithDataClamp +{ + friend class boost::serialization::access; + template + void serialize(Archive & archive, const unsigned int version) + { + archive & boost::serialization::base_object(*this); + + } + + // + // Settable parameters and readable variables + // + +private: + static AbstractCvodeCellWithDataClamp* CreateMethod(boost::shared_ptr p_solver, boost::shared_ptr p_stimulus); + static bool registered; +private: +const bool is_concentration[39] = {false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, true, true, true, true, true, true}; +const bool is_probability[39] = {false, false, true, true, true, false, false, false, false, false, false, true, true, false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false}; +public: + + boost::shared_ptr UseCellMLDefaultStimulus(); + double GetIntracellularCalciumConcentration(); + Cellgrandi_pasqualini_bers_2010_ssFromCellMLCvodeDataClampOpt(boost::shared_ptr pOdeSolver /* unused; should be empty */, boost::shared_ptr pIntracellularStimulus); + ~Cellgrandi_pasqualini_bers_2010_ssFromCellMLCvodeDataClampOpt(); + void VerifyStateVariables(); + AbstractLookupTableCollection* GetLookupTableCollection(); + double GetIIonic(const std::vector* pStateVariables=NULL); + void EvaluateYDerivatives(double var_chaste_interface__environment__time, const N_Vector rY, N_Vector rDY); + N_Vector ComputeDerivedQuantities(double var_chaste_interface__environment__time, const N_Vector & rY); +}; + +// Needs to be included last +#include "SerializationExportWrapper.hpp" +CHASTE_CLASS_EXPORT(Cellgrandi_pasqualini_bers_2010_ssFromCellMLCvodeDataClampOpt) + +namespace boost +{ + namespace serialization + { + template + inline void save_construct_data( + Archive & ar, const Cellgrandi_pasqualini_bers_2010_ssFromCellMLCvodeDataClampOpt * t, const unsigned int fileVersion) + { + const boost::shared_ptr p_solver = t->GetSolver(); + const boost::shared_ptr p_stimulus = t->GetStimulusFunction(); + ar << p_solver; + ar << p_stimulus; + } + + template + inline void load_construct_data( + Archive & ar, Cellgrandi_pasqualini_bers_2010_ssFromCellMLCvodeDataClampOpt * t, const unsigned int fileVersion) + { + boost::shared_ptr p_solver; + boost::shared_ptr p_stimulus; + ar >> p_solver; + ar >> p_stimulus; + ::new(t)Cellgrandi_pasqualini_bers_2010_ssFromCellMLCvodeDataClampOpt(p_solver, p_stimulus); + } + + } + +} + +#endif // CELLGRANDI_PASQUALINI_BERS_2010_SSFROMCELLMLCVODEDATACLAMPOPT_HPP_ +#endif // CHASTE_CVODE \ No newline at end of file diff --git a/chaste_codegen/tests/numerical/baseline/CVODE_DATA_CLAMP_OPT/hodgkin_huxley_squid_axon_model_1952_modified.cpp b/chaste_codegen/tests/numerical/baseline/CVODE_DATA_CLAMP_OPT/hodgkin_huxley_squid_axon_model_1952_modified.cpp new file mode 100644 index 00000000..c1e38f90 --- /dev/null +++ b/chaste_codegen/tests/numerical/baseline/CVODE_DATA_CLAMP_OPT/hodgkin_huxley_squid_axon_model_1952_modified.cpp @@ -0,0 +1,543 @@ +#ifdef CHASTE_CVODE +//! @file +//! +//! This source file was generated from CellML by chaste_codegen version (version omitted as unimportant) +//! +//! Model: hodgkin_huxley_squid_axon_model_1952_modified +//! +//! Processed by chaste_codegen: https://github.com/ModellingWebLab/chaste-codegen +//! (translator: chaste_codegen, model type: CvodeCellWithDataClampOpt) +//! on (date omitted as unimportant) +//! +//! + +#include "hodgkin_huxley_squid_axon_model_1952_modified.hpp" +#include +#include +#include +#include +#include "Exception.hpp" +#include "OdeSystemInformation.hpp" +#include "RegularStimulus.hpp" +#include "HeartConfig.hpp" +#include "IsNan.hpp" +#include "MathsCustomFunctions.hpp" + +#if CHASTE_SUNDIALS_VERSION >= 60000 +#include "CvodeContextManager.hpp" +#endif + + + +class Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLCvodeDataClampOpt_LookupTables : public AbstractLookupTableCollection +{ +public: + static Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLCvodeDataClampOpt_LookupTables* Instance() + { + if (mpInstance.get() == NULL) + { + mpInstance.reset(new Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLCvodeDataClampOpt_LookupTables); + } + return mpInstance.get(); + } + + void FreeMemory() + { + + if (_lookup_table_0) + { + delete[] _lookup_table_0; + _lookup_table_0 = NULL; + } + + mNeedsRegeneration.assign(mNeedsRegeneration.size(), true); + } + + // Row lookup methods + // using linear-interpolation + + double* _lookup_0_row(unsigned i, double _factor_) + { + for (unsigned j=0; j<6; j++) + { + const double y1 = _lookup_table_0[i][j]; + const double y2 = _lookup_table_0[i+1][j]; + _lookup_table_0_row[j] = y1 + (y2-y1)*_factor_; + } + return _lookup_table_0_row; + } + + + const double * IndexTable0(double var_chaste_interface__membrane__V) + { + const double _offset_0 = var_chaste_interface__membrane__V - mTableMins[0]; + const double _offset_0_over_table_step = _offset_0 * mTableStepInverses[0]; + const unsigned _table_index_0 = (unsigned)(_offset_0_over_table_step); + const double _factor_0 = _offset_0_over_table_step - _table_index_0; + const double* const _lt_0_row = Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLCvodeDataClampOpt_LookupTables::Instance()->_lookup_0_row(_table_index_0, _factor_0); + return _lt_0_row; + } + + +// LCOV_EXCL_START + bool CheckIndex0(double& var_chaste_interface__membrane__V) + { + bool _oob_0 = false; + if (var_chaste_interface__membrane__V>mTableMaxs[0] || var_chaste_interface__membrane__V= -9.9999999999999995e-8) && (6.5 + 0.10000000000000001 * var_chaste_interface__membrane__V <= 9.9999999999999995e-8)) ? (0.42499999999999999 + 0.0050000000000000001 * var_chaste_interface__membrane__V) : (-0.099999999999999992 * (6.5 + 0.10000000000000001 * var_chaste_interface__membrane__V) / (-1 + exp(-6.5 - 0.10000000000000001 * var_chaste_interface__membrane__V)))); + }; + const double var_chaste_interface__membrane__V = mTableMins[0] + i*mTableSteps[0]; + double val = f(var_chaste_interface__membrane__V); + //Expressions which are part of a piecewise could be inf / nan, this is generally accptable, due to the piecewise, however occasionally interpolation of the lookup table from a nan/inf version can give problems. + //To avoid this values stored in the table are intrpolated. Occurances of this to at most 2 per expression. + if (!std::isfinite(val) && _lookup_table_0_num_misshit_piecewise[0] < 2){ + double left = f(var_chaste_interface__membrane__V - mTableSteps[0]); + double right = f(var_chaste_interface__membrane__V + mTableSteps[0]); + val = (left + right) / 2.0; + // count and limit number of misshits + _lookup_table_0_num_misshit_piecewise[0] +=1; + } + else if (!std::isfinite(val) && _lookup_table_0_num_misshit_piecewise[0] >= 2){ + EXCEPTION("Lookup table 0 at ["<= -9.9999999999999995e-8) && (5 + 0.10000000000000001 * var_chaste_interface__membrane__V <= 9.9999999999999995e-8)) ? (3.5 + 0.050000000000000003 * var_chaste_interface__membrane__V) : (-(5 + 0.10000000000000001 * var_chaste_interface__membrane__V) / (-1 + exp(-5 - 0.10000000000000001 * var_chaste_interface__membrane__V)))); + }; + const double var_chaste_interface__membrane__V = mTableMins[0] + i*mTableSteps[0]; + double val = f(var_chaste_interface__membrane__V); + //Expressions which are part of a piecewise could be inf / nan, this is generally accptable, due to the piecewise, however occasionally interpolation of the lookup table from a nan/inf version can give problems. + //To avoid this values stored in the table are intrpolated. Occurances of this to at most 2 per expression. + if (!std::isfinite(val) && _lookup_table_0_num_misshit_piecewise[4] < 2){ + double left = f(var_chaste_interface__membrane__V - mTableSteps[0]); + double right = f(var_chaste_interface__membrane__V + mTableSteps[0]); + val = (left + right) / 2.0; + // count and limit number of misshits + _lookup_table_0_num_misshit_piecewise[4] +=1; + } + else if (!std::isfinite(val) && _lookup_table_0_num_misshit_piecewise[4] >= 2){ + EXCEPTION("Lookup table 4 at ["< mpInstance; + + // Row lookup methods memory + double _lookup_table_0_row[6]; + + // Lookup tables + double (*_lookup_table_0)[6]; + int _lookup_table_0_num_misshit_piecewise[6] = {0}; + +}; + +std::shared_ptr Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLCvodeDataClampOpt_LookupTables::mpInstance; + + + boost::shared_ptr Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLCvodeDataClampOpt::UseCellMLDefaultStimulus() + { + // Use the default stimulus specified by CellML metadata + const double var_chaste_interface__membrane__stim_amplitude = -20; // microA_per_cm2 + const double var_chaste_interface__membrane__stim_duration = 0.5; // millisecond + const double var_chaste_interface__membrane__stim_period = 1000; // millisecond + const double var_chaste_interface__membrane__stim_start = 10; // millisecond + boost::shared_ptr p_cellml_stim(new RegularStimulus( + -fabs(var_chaste_interface__membrane__stim_amplitude), + var_chaste_interface__membrane__stim_duration, + var_chaste_interface__membrane__stim_period, + var_chaste_interface__membrane__stim_start + )); + mpIntracellularStimulus = p_cellml_stim; + return p_cellml_stim; + } + + Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLCvodeDataClampOpt::Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLCvodeDataClampOpt(boost::shared_ptr pOdeSolver /* unused; should be empty */, boost::shared_ptr pIntracellularStimulus) + : AbstractCvodeCellWithDataClamp( + pOdeSolver, + 4, + 0, + pIntracellularStimulus) + { + // Time units: millisecond + // + this->mpSystemInfo = OdeSystemInformation::Instance(); + Init(); + + // We have a default stimulus specified in the CellML file metadata + this->mHasDefaultStimulusFromCellML = true; + + NV_Ith_S(this->mParameters, 0) = 1; // (var_membrane__Cm) [microF_per_cm2] + NV_Ith_S(this->mParameters, 1) = 0; // (var_membrane_data_clamp_current_conductance) [dimensionless] + NV_Ith_S(this->mParameters, 2) = 120; // (var_sodium_channel__g_Na) [milliS_per_cm2] + NV_Ith_S(this->mParameters, 3) = 0.29999999999999999; // (var_leakage_current__g_L) [milliS_per_cm2] + NV_Ith_S(this->mParameters, 4) = 36; // (var_potassium_channel__g_K) [milliS_per_cm2] + } + + Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLCvodeDataClampOpt::~Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLCvodeDataClampOpt() + { + } + + AbstractLookupTableCollection* Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLCvodeDataClampOpt::GetLookupTableCollection() + { + return Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLCvodeDataClampOpt_LookupTables::Instance(); + } + + void Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLCvodeDataClampOpt::VerifyStateVariables() + { + + const double tol = 100*this->mAbsTol; + N_Vector rY = rGetStateVariables(); + std::string error_message = ""; + + for (unsigned i=0; i < 4; i++) + { + if(std::isnan(NV_Ith_S(rY, i))){ + error_message += "State variable " + this->rGetStateVariableNames()[i] + " is not a number\n"; + } + if(std::isinf(NV_Ith_S(rY, i))){ + error_message += "State variable " + this->rGetStateVariableNames()[i] + " has become INFINITE\n"; + } + if(this->is_concentration[i] && NV_Ith_S(rY, i) < -tol) + { + error_message += "Concentration " + this->rGetStateVariableNames()[i] + " below 0\n"; + } + if(this->is_probability[i] && NV_Ith_S(rY, i) < -tol) + { + error_message += "Probability " + this->rGetStateVariableNames()[i] + " below 0\n"; + } + if(this->is_probability[i] && NV_Ith_S(rY, i) > 1 + tol) + { + error_message += "Probability " + this->rGetStateVariableNames()[i] + " above 1\n"; + } + } + if (error_message != ""){ + EXCEPTION(DumpState(error_message)); + } + } + + double Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLCvodeDataClampOpt::GetIIonic(const std::vector* pStateVariables) + { + // For state variable interpolation (SVI) we read in interpolated state variables, + // otherwise for ionic current interpolation (ICI) we use the state variables of this model (node). + N_Vector rY; + bool made_new_cvode_vector = false; + if (!pStateVariables) + { + rY = rGetStateVariables(); + } + else + { + made_new_cvode_vector = true; + rY = MakeNVector(*pStateVariables); + } + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : NV_Ith_S(rY, 0)); + // Units: millivolt; Initial value: -75.0 + double var_chaste_interface__sodium_channel_m_gate__m = NV_Ith_S(rY, 1); + // Units: dimensionless; Initial value: 0.05 + double var_chaste_interface__sodium_channel_h_gate__h = NV_Ith_S(rY, 2); + // Units: dimensionless; Initial value: 0.6 + double var_chaste_interface__potassium_channel_n_gate__n = NV_Ith_S(rY, 3); + // Units: dimensionless; Initial value: 0.325 + + + const double var_leakage_current__i_L = (64.387 + var_chaste_interface__membrane__V) * NV_Ith_S(mParameters, 3); // microA_per_cm2 + const double var_potassium_channel__i_K = pow(var_chaste_interface__potassium_channel_n_gate__n, 4) * (87 + var_chaste_interface__membrane__V) * NV_Ith_S(mParameters, 4); // microA_per_cm2 + const double var_sodium_channel__i_Na = pow(var_chaste_interface__sodium_channel_m_gate__m, 3) * (-40 + var_chaste_interface__membrane__V) * NV_Ith_S(mParameters, 2) * var_chaste_interface__sodium_channel_h_gate__h; // microA_per_cm2 + const double var_chaste_interface__i_ionic = var_leakage_current__i_L + var_potassium_channel__i_K + var_sodium_channel__i_Na; // uA_per_cm2 + + const double i_ionic = var_chaste_interface__i_ionic; + if (made_new_cvode_vector) + { + DeleteVector(rY); + } + EXCEPT_IF_NOT(!std::isnan(i_ionic)); + return i_ionic; + } + + void Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLCvodeDataClampOpt::EvaluateYDerivatives(double var_chaste_interface__environment__time, const N_Vector rY, N_Vector rDY) + { + // Inputs: + // Time units: millisecond + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : NV_Ith_S(rY, 0)); + // Units: millivolt; Initial value: -75.0 + double var_chaste_interface__sodium_channel_m_gate__m = NV_Ith_S(rY, 1); + // Units: dimensionless; Initial value: 0.05 + double var_chaste_interface__sodium_channel_h_gate__h = NV_Ith_S(rY, 2); + // Units: dimensionless; Initial value: 0.6 + double var_chaste_interface__potassium_channel_n_gate__n = NV_Ith_S(rY, 3); + // Units: dimensionless; Initial value: 0.325 + + // Lookup table indexing + const bool _oob_0 = Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLCvodeDataClampOpt_LookupTables::Instance()->CheckIndex0(var_chaste_interface__membrane__V); +// LCOV_EXCL_START + if (_oob_0) + EXCEPTION(DumpState("membrane_voltage outside lookup table range", rY , var_chaste_interface__environment__time)); +// LCOV_EXCL_STOP + const double* const _lt_0_row = Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLCvodeDataClampOpt_LookupTables::Instance()->IndexTable0(var_chaste_interface__membrane__V); + + // Mathematics + double d_dt_chaste_interface_var_membrane__V; + const double d_dt_chaste_interface_var_potassium_channel_n_gate__n = (1 - var_chaste_interface__potassium_channel_n_gate__n) * _lt_0_row[0] - 0.125 * var_chaste_interface__potassium_channel_n_gate__n * _lt_0_row[1]; // 1 / millisecond + const double d_dt_chaste_interface_var_sodium_channel_h_gate__h = 0.070000000000000007 * (1 - var_chaste_interface__sodium_channel_h_gate__h) * _lt_0_row[2] - var_chaste_interface__sodium_channel_h_gate__h / (_lt_0_row[3]); // 1 / millisecond + const double d_dt_chaste_interface_var_sodium_channel_m_gate__m = (1 - var_chaste_interface__sodium_channel_m_gate__m) * _lt_0_row[4] - 4 * var_chaste_interface__sodium_channel_m_gate__m * _lt_0_row[5]; // 1 / millisecond + + if (mSetVoltageDerivativeToZero) + { + d_dt_chaste_interface_var_membrane__V = 0.0; + } + else + { + d_dt_chaste_interface_var_membrane__V = (-GetIntracellularAreaStimulus(var_chaste_interface__environment__time) - (64.387 + var_chaste_interface__membrane__V) * NV_Ith_S(mParameters, 3) - (-GetExperimentalVoltageAtTimeT(var_chaste_interface__environment__time) + var_chaste_interface__membrane__V) * NV_Ith_S(mParameters, 1) - pow(var_chaste_interface__potassium_channel_n_gate__n, 4) * (87 + var_chaste_interface__membrane__V) * NV_Ith_S(mParameters, 4) - pow(var_chaste_interface__sodium_channel_m_gate__m, 3) * (-40 + var_chaste_interface__membrane__V) * NV_Ith_S(mParameters, 2) * var_chaste_interface__sodium_channel_h_gate__h) / NV_Ith_S(mParameters, 0); // millivolt / millisecond + } + + NV_Ith_S(rDY,0) = d_dt_chaste_interface_var_membrane__V; + NV_Ith_S(rDY,1) = d_dt_chaste_interface_var_sodium_channel_m_gate__m; + NV_Ith_S(rDY,2) = d_dt_chaste_interface_var_sodium_channel_h_gate__h; + NV_Ith_S(rDY,3) = d_dt_chaste_interface_var_potassium_channel_n_gate__n; + } + + N_Vector Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLCvodeDataClampOpt::ComputeDerivedQuantities(double var_chaste_interface__environment__time, const N_Vector & rY) + { + // Inputs: + // Time units: millisecond + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : NV_Ith_S(rY, 0)); + // Units: millivolt; Initial value: -75.0 + double var_chaste_interface__sodium_channel_m_gate__m = NV_Ith_S(rY, 1); + // Units: dimensionless; Initial value: 0.05 + double var_chaste_interface__sodium_channel_h_gate__h = NV_Ith_S(rY, 2); + // Units: dimensionless; Initial value: 0.6 + double var_chaste_interface__potassium_channel_n_gate__n = NV_Ith_S(rY, 3); + // Units: dimensionless; Initial value: 0.325 + + + // Mathematics + const double var_membrane__E_R = -75; // millivolt + const double var_leakage_current__E_L = 10.613 + var_membrane__E_R; // millivolt + const double var_leakage_current__i_L = (-var_leakage_current__E_L + var_chaste_interface__membrane__V) * NV_Ith_S(mParameters, 3); // microA_per_cm2 + const double var_membrane__i_Stim = GetIntracellularAreaStimulus(var_chaste_interface__environment__time); // microA_per_cm2 + // Special handling of data clamp current here + // (we want to save expense of calling the interpolation method if possible.) + double var_chaste_interface__membrane_data_clamp_current = 0.0; + if (mDataClampIsOn) + { + var_chaste_interface__membrane_data_clamp_current = (-GetExperimentalVoltageAtTimeT(var_chaste_interface__environment__time) + var_chaste_interface__membrane__V) * NV_Ith_S(mParameters, 1); // uA_per_cm2 + } + const double var_potassium_channel__E_K = -12 + var_membrane__E_R; // millivolt + const double var_potassium_channel__i_K = pow(var_chaste_interface__potassium_channel_n_gate__n, 4) * (-var_potassium_channel__E_K + var_chaste_interface__membrane__V) * NV_Ith_S(mParameters, 4); // microA_per_cm2 + const double var_sodium_channel__E_Na = 115 + var_membrane__E_R; // millivolt + const double var_sodium_channel__i_Na = pow(var_chaste_interface__sodium_channel_m_gate__m, 3) * (-var_sodium_channel__E_Na + var_chaste_interface__membrane__V) * NV_Ith_S(mParameters, 2) * var_chaste_interface__sodium_channel_h_gate__h; // microA_per_cm2 + +#if CHASTE_SUNDIALS_VERSION >= 60000 + N_Vector dqs = N_VNew_Serial(6, CvodeContextManager::Instance()->GetSundialsContext()); +#else + N_Vector dqs = N_VNew_Serial(6); +#endif + NV_Ith_S(dqs, 0) = var_chaste_interface__membrane_data_clamp_current; + NV_Ith_S(dqs, 1) = var_sodium_channel__i_Na; + NV_Ith_S(dqs, 2) = var_leakage_current__i_L; + NV_Ith_S(dqs, 3) = var_potassium_channel__i_K; + NV_Ith_S(dqs, 4) = var_membrane__i_Stim; + NV_Ith_S(dqs, 5) = var_chaste_interface__environment__time; + return dqs; + } + +template<> +void OdeSystemInformation::Initialise(void) +{ + this->mSystemName = "hodgkin_huxley_squid_axon_model_1952_modified"; + this->mFreeVariableName = "time"; + this->mFreeVariableUnits = "millisecond"; + + // NV_Ith_S(rY, 0): + this->mVariableNames.push_back("membrane_voltage"); + this->mVariableUnits.push_back("millivolt"); + this->mInitialConditions.push_back(-75.0); + + // NV_Ith_S(rY, 1): + this->mVariableNames.push_back("sodium_channel_m_gate__m"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.05); + + // NV_Ith_S(rY, 2): + this->mVariableNames.push_back("sodium_channel_h_gate__h"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.6); + + // NV_Ith_S(rY, 3): + this->mVariableNames.push_back("potassium_channel_n_gate__n"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.325); + + // mParameters[0]: + this->mParameterNames.push_back("membrane_capacitance"); + this->mParameterUnits.push_back("microF_per_cm2"); + + // mParameters[1]: + this->mParameterNames.push_back("membrane_data_clamp_current_conductance"); + this->mParameterUnits.push_back("dimensionless"); + + // mParameters[2]: + this->mParameterNames.push_back("membrane_fast_sodium_current_conductance"); + this->mParameterUnits.push_back("milliS_per_cm2"); + + // mParameters[3]: + this->mParameterNames.push_back("membrane_leakage_current_conductance"); + this->mParameterUnits.push_back("milliS_per_cm2"); + + // mParameters[4]: + this->mParameterNames.push_back("membrane_potassium_current_conductance"); + this->mParameterUnits.push_back("milliS_per_cm2"); + + // Derived Quantity index [0]: + this->mDerivedQuantityNames.push_back("membrane_data_clamp_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [1]: + this->mDerivedQuantityNames.push_back("membrane_fast_sodium_current"); + this->mDerivedQuantityUnits.push_back("microA_per_cm2"); + + // Derived Quantity index [2]: + this->mDerivedQuantityNames.push_back("membrane_leakage_current"); + this->mDerivedQuantityUnits.push_back("microA_per_cm2"); + + // Derived Quantity index [3]: + this->mDerivedQuantityNames.push_back("membrane_potassium_current"); + this->mDerivedQuantityUnits.push_back("microA_per_cm2"); + + // Derived Quantity index [4]: + this->mDerivedQuantityNames.push_back("membrane_stimulus_current"); + this->mDerivedQuantityUnits.push_back("microA_per_cm2"); + + // Derived Quantity index [5]: + this->mDerivedQuantityNames.push_back("time"); + this->mDerivedQuantityUnits.push_back("millisecond"); + + this->mInitialised = true; +} + +// Serialization for Boost >= 1.36 +#include "SerializationExportWrapperForCpp.hpp" +CHASTE_CLASS_EXPORT(Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLCvodeDataClampOpt) + +#endif // CHASTE_CVODE diff --git a/chaste_codegen/tests/numerical/baseline/CVODE_DATA_CLAMP_OPT/hodgkin_huxley_squid_axon_model_1952_modified.hpp b/chaste_codegen/tests/numerical/baseline/CVODE_DATA_CLAMP_OPT/hodgkin_huxley_squid_axon_model_1952_modified.hpp new file mode 100644 index 00000000..98790b69 --- /dev/null +++ b/chaste_codegen/tests/numerical/baseline/CVODE_DATA_CLAMP_OPT/hodgkin_huxley_squid_axon_model_1952_modified.hpp @@ -0,0 +1,86 @@ +#ifdef CHASTE_CVODE +#ifndef CELLHODGKIN_HUXLEY_SQUID_AXON_MODEL_1952_MODIFIEDFROMCELLMLCVODEDATACLAMPOPT_HPP_ +#define CELLHODGKIN_HUXLEY_SQUID_AXON_MODEL_1952_MODIFIEDFROMCELLMLCVODEDATACLAMPOPT_HPP_ + +//! @file +//! +//! This source file was generated from CellML by chaste_codegen version (version omitted as unimportant) +//! +//! Model: hodgkin_huxley_squid_axon_model_1952_modified +//! +//! Processed by chaste_codegen: https://github.com/ModellingWebLab/chaste-codegen +//! (translator: chaste_codegen, model type: CvodeCellWithDataClampOpt) +//! on (date omitted as unimportant) +//! +//! + +#include "ChasteSerialization.hpp" +#include +#include "AbstractStimulusFunction.hpp" +#include "AbstractCvodeCellWithDataClamp.hpp" + +class Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLCvodeDataClampOpt : public AbstractCvodeCellWithDataClamp +{ + friend class boost::serialization::access; + template + void serialize(Archive & archive, const unsigned int version) + { + archive & boost::serialization::base_object(*this); + + } + + // + // Settable parameters and readable variables + // + + +private: +const bool is_concentration[4] = {false, false, false, false}; +const bool is_probability[4] = {false, false, false, false}; +public: + + boost::shared_ptr UseCellMLDefaultStimulus(); + Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLCvodeDataClampOpt(boost::shared_ptr pOdeSolver /* unused; should be empty */, boost::shared_ptr pIntracellularStimulus); + ~Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLCvodeDataClampOpt(); + void VerifyStateVariables(); + AbstractLookupTableCollection* GetLookupTableCollection(); + double GetIIonic(const std::vector* pStateVariables=NULL); + void EvaluateYDerivatives(double var_chaste_interface__environment__time, const N_Vector rY, N_Vector rDY); + N_Vector ComputeDerivedQuantities(double var_chaste_interface__environment__time, const N_Vector & rY); +}; + +// Needs to be included last +#include "SerializationExportWrapper.hpp" +CHASTE_CLASS_EXPORT(Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLCvodeDataClampOpt) + +namespace boost +{ + namespace serialization + { + template + inline void save_construct_data( + Archive & ar, const Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLCvodeDataClampOpt * t, const unsigned int fileVersion) + { + const boost::shared_ptr p_solver = t->GetSolver(); + const boost::shared_ptr p_stimulus = t->GetStimulusFunction(); + ar << p_solver; + ar << p_stimulus; + } + + template + inline void load_construct_data( + Archive & ar, Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLCvodeDataClampOpt * t, const unsigned int fileVersion) + { + boost::shared_ptr p_solver; + boost::shared_ptr p_stimulus; + ar >> p_solver; + ar >> p_stimulus; + ::new(t)Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLCvodeDataClampOpt(p_solver, p_stimulus); + } + + } + +} + +#endif // CELLHODGKIN_HUXLEY_SQUID_AXON_MODEL_1952_MODIFIEDFROMCELLMLCVODEDATACLAMPOPT_HPP_ +#endif // CHASTE_CVODE \ No newline at end of file diff --git a/chaste_codegen/tests/numerical/baseline/Cvode/FaberRudy2000.cpp b/chaste_codegen/tests/numerical/baseline/Cvode/FaberRudy2000.cpp new file mode 100644 index 00000000..eeecb677 --- /dev/null +++ b/chaste_codegen/tests/numerical/baseline/Cvode/FaberRudy2000.cpp @@ -0,0 +1,696 @@ +#ifdef CHASTE_CVODE +//! @file +//! +//! This source file was generated from CellML by chaste_codegen version (version omitted as unimportant) +//! +//! Model: LR_Dynamic_model_2000 +//! +//! Processed by chaste_codegen: https://github.com/ModellingWebLab/chaste-codegen +//! (translator: chaste_codegen, model type: NumericCvode) +//! on (date omitted as unimportant) +//! +//! + +#include "FaberRudy2000.hpp" +#include +#include +#include +#include "Exception.hpp" +#include "Warnings.hpp" +#include "OdeSystemInformation.hpp" +#include "RegularStimulus.hpp" +#include "HeartConfig.hpp" +#include "IsNan.hpp" +#include "MathsCustomFunctions.hpp" + +#if CHASTE_SUNDIALS_VERSION >= 60000 +#include "CvodeContextManager.hpp" +#endif + + boost::shared_ptr CellFaberRudy2000FromCellMLCvode::UseCellMLDefaultStimulus() + { + // Use the default stimulus specified by CellML metadata + const double var_chaste_interface__membrane__stim_amplitude_converted = -25.5 * HeartConfig::Instance()->GetCapacitance(); // uA_per_cm2 + const double var_chaste_interface__membrane__stim_duration_converted = 2.0; // millisecond + const double var_chaste_interface__membrane__stim_period_converted = 1000.0; // millisecond + const double var_chaste_interface__membrane__stim_start_converted = 100.0; // millisecond + boost::shared_ptr p_cellml_stim(new RegularStimulus( + -fabs(var_chaste_interface__membrane__stim_amplitude_converted), + var_chaste_interface__membrane__stim_duration_converted, + var_chaste_interface__membrane__stim_period_converted, + var_chaste_interface__membrane__stim_start_converted + )); + mpIntracellularStimulus = p_cellml_stim; + return p_cellml_stim; + } + + double CellFaberRudy2000FromCellMLCvode::GetIntracellularCalciumConcentration() + { + return NV_Ith_S(mStateVariables, 1); + } + + CellFaberRudy2000FromCellMLCvode::CellFaberRudy2000FromCellMLCvode(boost::shared_ptr pOdeSolver /* unused; should be empty */, boost::shared_ptr pIntracellularStimulus) + : AbstractCvodeCell( + pOdeSolver, + 25, + 0, + pIntracellularStimulus) + { + // Time units: millisecond + // + this->mpSystemInfo = OdeSystemInformation::Instance(); + Init(); + + // We have a default stimulus specified in the CellML file metadata + this->mHasDefaultStimulusFromCellML = true; + + NV_Ith_S(this->mParameters, 0) = 1.0; // (var_rapid_delayed_rectifier_potassium_current__ScaleFactorGkr) [dimensionless] + NV_Ith_S(this->mParameters, 1) = 1.0; // (var_slow_delayed_rectifier_potassium_current__ScaleFactorGks) [dimensionless] + NV_Ith_S(this->mParameters, 2) = 0; // (var_transient_outward_current__ScaleFactorIto) [dimensionless] + NV_Ith_S(this->mParameters, 3) = 0.001; // (var_membrane__Cm) [microF] + } + + CellFaberRudy2000FromCellMLCvode::~CellFaberRudy2000FromCellMLCvode() + { + } + + + double CellFaberRudy2000FromCellMLCvode::GetIIonic(const std::vector* pStateVariables) + { + // For state variable interpolation (SVI) we read in interpolated state variables, + // otherwise for ionic current interpolation (ICI) we use the state variables of this model (node). + N_Vector rY; + bool made_new_cvode_vector = false; + if (!pStateVariables) + { + rY = rGetStateVariables(); + } + else + { + made_new_cvode_vector = true; + rY = MakeNVector(*pStateVariables); + } + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : NV_Ith_S(rY, 0)); + // Units: millivolt; Initial value: -90.0 + double var_chaste_interface__calcium_dynamics__Cai = NV_Ith_S(rY, 1); + // Units: millimolar; Initial value: 6e-05 + double var_chaste_interface__fast_sodium_current_m_gate__m = NV_Ith_S(rY, 2); + // Units: dimensionless; Initial value: 0.0008 + double var_chaste_interface__fast_sodium_current_h_gate__h = NV_Ith_S(rY, 3); + // Units: dimensionless; Initial value: 0.993771 + double var_chaste_interface__fast_sodium_current_j_gate__j = NV_Ith_S(rY, 4); + // Units: dimensionless; Initial value: 0.995727 + double var_chaste_interface__L_type_Ca_channel_d_gate__d = NV_Ith_S(rY, 5); + // Units: dimensionless; Initial value: 3.210618e-06 + double var_chaste_interface__L_type_Ca_channel_f_gate__f = NV_Ith_S(rY, 6); + // Units: dimensionless; Initial value: 0.999837 + double var_chaste_interface__T_type_Ca_channel_b_gate__b = NV_Ith_S(rY, 7); + // Units: dimensionless; Initial value: 0.000970231 + double var_chaste_interface__T_type_Ca_channel_g_gate__g = NV_Ith_S(rY, 8); + // Units: dimensionless; Initial value: 0.994305 + double var_chaste_interface__rapid_delayed_rectifier_potassium_current_xr_gate__xr = NV_Ith_S(rY, 9); + // Units: dimensionless; Initial value: 0.000124042 + double var_chaste_interface__slow_delayed_rectifier_potassium_current_xs1_gate__xs1 = NV_Ith_S(rY, 10); + // Units: dimensionless; Initial value: 0.00445683 + double var_chaste_interface__slow_delayed_rectifier_potassium_current_xs2_gate__xs2 = NV_Ith_S(rY, 11); + // Units: dimensionless; Initial value: 0.00445683 + double var_chaste_interface__transient_outward_current_zdv_gate__zdv = NV_Ith_S(rY, 12); + // Units: dimensionless; Initial value: 0.5 + double var_chaste_interface__transient_outward_current_ydv_gate__ydv = NV_Ith_S(rY, 13); + // Units: dimensionless; Initial value: 0.5 + double var_chaste_interface__ionic_concentrations__Nai = NV_Ith_S(rY, 23); + // Units: millimolar; Initial value: 9.0 + double var_chaste_interface__ionic_concentrations__Ki = NV_Ith_S(rY, 24); + // Units: millimolar; Initial value: 141.2 + + const double var_ATP_sensitive_potassium_current__ATPi = 3.0; // millimolar + const double var_ATP_sensitive_potassium_current__hATP = 2.0; // dimensionless + const double var_ATP_sensitive_potassium_current__i_K_ATP_on = 1.0; // dimensionless + const double var_ATP_sensitive_potassium_current__kATP = 0.00025000000000000001; // millimolar + const double var_ATP_sensitive_potassium_current__nATP = 0.23999999999999999; // dimensionless + const double var_ATP_sensitive_potassium_current__nicholsarea = 5.0000000000000002e-5; // dimensionless + const double var_ATP_sensitive_potassium_current__g_K_ATP = 0.000193 * var_ATP_sensitive_potassium_current__i_K_ATP_on / var_ATP_sensitive_potassium_current__nicholsarea; // milliS_per_microF + const double var_ATP_sensitive_potassium_current__pATP = 1 / (1.0 + pow((var_ATP_sensitive_potassium_current__ATPi / var_ATP_sensitive_potassium_current__kATP), var_ATP_sensitive_potassium_current__hATP)); // dimensionless + const double var_L_type_Ca_channel__gamma_Ki = 0.75; // dimensionless + const double var_L_type_Ca_channel__gamma_Ko = 0.75; // dimensionless + const double var_L_type_Ca_channel__gamma_Nai = 0.75; // dimensionless + const double var_L_type_Ca_channel__gamma_Nao = 0.75; // dimensionless + const double var_L_type_Ca_channel_f_Ca_gate__Km_Ca = 0.00059999999999999995; // millimolar + const double var_Na_Ca_exchanger__c1 = 0.00025000000000000001; // microA_per_microF + const double var_Na_Ca_exchanger__c2 = 0.0001; // millimolar + const double var_Na_Ca_exchanger__gamma = 0.14999999999999999; // dimensionless + const double var_T_type_Ca_channel__g_CaT = 0.050000000000000003; // milliS_per_microF + const double var_calcium_background_current__g_Cab = 0.003016; // milliS_per_microF + const double var_L_type_Ca_channel_f_Ca_gate__f_Ca = 1 / (1.0 + var_chaste_interface__calcium_dynamics__Cai / var_L_type_Ca_channel_f_Ca_gate__Km_Ca); // dimensionless + const double var_calcium_dynamics__Cao = 1.8; // millimolar + const double var_fast_sodium_current__g_Na = 16.0; // milliS_per_microF + const double var_ionic_concentrations__Ko = 4.5; // millimolar + const double var_ATP_sensitive_potassium_current__GKbaraATP = pow((0.25 * var_ionic_concentrations__Ko), var_ATP_sensitive_potassium_current__nATP) * var_ATP_sensitive_potassium_current__g_K_ATP * var_ATP_sensitive_potassium_current__pATP; // milliS_per_microF + const double var_ionic_concentrations__Nao = 132.0; // millimolar + const double var_membrane__F = 96485.0; // coulomb_per_mole + const double var_membrane__R = 8314.0; // joule_per_kilomole_kelvin + const double var_membrane__T = 310.0; // kelvin + const double var_calcium_background_current__E_Ca = 0.5 * var_membrane__R * var_membrane__T * log(var_calcium_dynamics__Cao / var_chaste_interface__calcium_dynamics__Cai) / var_membrane__F; // millivolt + const double var_fast_sodium_current__E_Na = var_membrane__R * var_membrane__T * log(var_ionic_concentrations__Nao / var_chaste_interface__ionic_concentrations__Nai) / var_membrane__F; // millivolt + const double var_L_type_Ca_channel__I_CaCa = ((fabs(var_chaste_interface__membrane__V) < 1.3356169352749131e-6) ? (374358.83507802623 * (1.3356169352749131e-6 + var_chaste_interface__membrane__V) * (1.042038e-5 * (-0.61380000000000001 + var_chaste_interface__calcium_dynamics__Cai * exp(9.9999999999999995e-8)) / (-1.0 + exp(9.9999999999999995e-8)) + 1.042038e-5 * (-0.61380000000000001 + var_chaste_interface__calcium_dynamics__Cai * exp(-9.9999999999999995e-8)) / (-1.0 + exp(-9.9999999999999995e-8))) - 1.042038e-5 * (-0.61380000000000001 + var_chaste_interface__calcium_dynamics__Cai * exp(-9.9999999999999995e-8)) / (-1.0 + exp(-9.9999999999999995e-8))) : (7.8019226357407252 * (-0.61380000000000001 + var_chaste_interface__calcium_dynamics__Cai * exp(0.074871767015605231 * var_chaste_interface__membrane__V)) * var_chaste_interface__membrane__V / (-1.0 + exp(0.074871767015605231 * var_chaste_interface__membrane__V)))); // microA_per_microF + const double var_L_type_Ca_channel__I_CaK = ((fabs(var_chaste_interface__membrane__V) < 2.6712338705498262e-6) ? (187179.41753901311 * (2.6712338705498262e-6 + var_chaste_interface__membrane__V) * (1.8621604999999999e-9 * (-3.375 + 0.75 * var_chaste_interface__ionic_concentrations__Ki * exp(9.9999999999999995e-8)) / (-1.0 + exp(9.9999999999999995e-8)) + 1.8621604999999999e-9 * (-3.375 + 0.75 * var_chaste_interface__ionic_concentrations__Ki * exp(-9.9999999999999995e-8)) / (-1.0 + exp(-9.9999999999999995e-8))) - 1.8621604999999999e-9 * (-3.375 + 0.75 * var_chaste_interface__ionic_concentrations__Ki * exp(-9.9999999999999995e-8)) / (-1.0 + exp(-9.9999999999999995e-8))) : (0.00069711623550831479 * (-3.375 + 0.75 * var_chaste_interface__ionic_concentrations__Ki * exp(0.037435883507802616 * var_chaste_interface__membrane__V)) * var_chaste_interface__membrane__V / (-1.0 + exp(0.037435883507802616 * var_chaste_interface__membrane__V)))); // microA_per_microF + const double var_L_type_Ca_channel__I_CaNa = ((fabs(var_chaste_interface__membrane__V) < 2.6712338705498262e-6) ? (187179.41753901311 * (2.6712338705498262e-6 + var_chaste_interface__membrane__V) * (6.5127375e-9 * (-99.0 + 0.75 * var_chaste_interface__ionic_concentrations__Nai * exp(9.9999999999999995e-8)) / (-1.0 + exp(9.9999999999999995e-8)) + 6.5127375e-9 * (-99.0 + 0.75 * var_chaste_interface__ionic_concentrations__Nai * exp(-9.9999999999999995e-8)) / (-1.0 + exp(-9.9999999999999995e-8))) - 6.5127375e-9 * (-99.0 + 0.75 * var_chaste_interface__ionic_concentrations__Nai * exp(-9.9999999999999995e-8)) / (-1.0 + exp(-9.9999999999999995e-8))) : (0.0024381008236689767 * (-99.0 + 0.75 * var_chaste_interface__ionic_concentrations__Nai * exp(0.037435883507802616 * var_chaste_interface__membrane__V)) * var_chaste_interface__membrane__V / (-1.0 + exp(0.037435883507802616 * var_chaste_interface__membrane__V)))); // microA_per_microF + const double var_L_type_Ca_channel__i_CaCa = var_L_type_Ca_channel__I_CaCa * var_chaste_interface__L_type_Ca_channel_d_gate__d * var_L_type_Ca_channel_f_Ca_gate__f_Ca * var_chaste_interface__L_type_Ca_channel_f_gate__f; // microA_per_microF + const double var_L_type_Ca_channel__i_CaK = var_L_type_Ca_channel__I_CaK * var_chaste_interface__L_type_Ca_channel_d_gate__d * var_L_type_Ca_channel_f_Ca_gate__f_Ca * var_chaste_interface__L_type_Ca_channel_f_gate__f; // microA_per_microF + const double var_L_type_Ca_channel__i_CaNa = var_L_type_Ca_channel__I_CaNa * var_chaste_interface__L_type_Ca_channel_d_gate__d * var_L_type_Ca_channel_f_Ca_gate__f_Ca * var_chaste_interface__L_type_Ca_channel_f_gate__f; // microA_per_microF + const double var_L_type_Ca_channel__i_Ca_L = var_L_type_Ca_channel__i_CaCa + var_L_type_Ca_channel__i_CaK + var_L_type_Ca_channel__i_CaNa; // microA_per_microF + const double var_Na_Ca_exchanger__i_NaCa = (-pow(var_ionic_concentrations__Nao, 3) * var_chaste_interface__calcium_dynamics__Cai + pow(var_chaste_interface__ionic_concentrations__Nai, 3) * var_calcium_dynamics__Cao * exp(var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * var_Na_Ca_exchanger__c1 * exp((-1.0 + var_Na_Ca_exchanger__gamma) * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T)) / (1.0 + (pow(var_ionic_concentrations__Nao, 3) * var_chaste_interface__calcium_dynamics__Cai + pow(var_chaste_interface__ionic_concentrations__Nai, 3) * var_calcium_dynamics__Cao * exp(var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * var_Na_Ca_exchanger__c2 * exp((-1.0 + var_Na_Ca_exchanger__gamma) * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))); // microA_per_microF + const double var_T_type_Ca_channel__i_Ca_T = pow(var_chaste_interface__T_type_Ca_channel_b_gate__b, 2) * (-var_calcium_background_current__E_Ca + var_chaste_interface__membrane__V) * var_T_type_Ca_channel__g_CaT * var_chaste_interface__T_type_Ca_channel_g_gate__g; // microA_per_microF + const double var_calcium_background_current__i_Ca_b = (-var_calcium_background_current__E_Ca + var_chaste_interface__membrane__V) * var_calcium_background_current__g_Cab; // microA_per_microF + const double var_fast_sodium_current__i_Na = pow(var_chaste_interface__fast_sodium_current_m_gate__m, 3) * (-var_fast_sodium_current__E_Na + var_chaste_interface__membrane__V) * var_fast_sodium_current__g_Na * var_chaste_interface__fast_sodium_current_h_gate__h * var_chaste_interface__fast_sodium_current_j_gate__j; // microA_per_microF + const double var_non_specific_calcium_activated_current__K_m_ns_Ca = 0.0011999999999999999; // millimolar + const double var_non_specific_calcium_activated_current__P_ns_Ca = 0; // cm_per_second + const double var_non_specific_calcium_activated_current__I_ns_K = pow(var_membrane__F, 2) * (-var_L_type_Ca_channel__gamma_Ko * var_ionic_concentrations__Ko + var_L_type_Ca_channel__gamma_Ki * var_chaste_interface__ionic_concentrations__Ki * exp(var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * var_chaste_interface__membrane__V * var_non_specific_calcium_activated_current__P_ns_Ca / ((-1.0 + exp(var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * var_membrane__R * var_membrane__T); // microA_per_microF + const double var_non_specific_calcium_activated_current__I_ns_Na = pow(var_membrane__F, 2) * (-var_L_type_Ca_channel__gamma_Nao * var_ionic_concentrations__Nao + var_L_type_Ca_channel__gamma_Nai * var_chaste_interface__ionic_concentrations__Nai * exp(var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * var_chaste_interface__membrane__V * var_non_specific_calcium_activated_current__P_ns_Ca / ((-1.0 + exp(var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * var_membrane__R * var_membrane__T); // microA_per_microF + const double var_non_specific_calcium_activated_current__i_ns_K = var_non_specific_calcium_activated_current__I_ns_K / (1.0 + pow(var_non_specific_calcium_activated_current__K_m_ns_Ca, 3) / pow(var_chaste_interface__calcium_dynamics__Cai, 3)); // microA_per_microF + const double var_non_specific_calcium_activated_current__i_ns_Na = var_non_specific_calcium_activated_current__I_ns_Na / (1.0 + pow(var_non_specific_calcium_activated_current__K_m_ns_Ca, 3) / pow(var_chaste_interface__calcium_dynamics__Cai, 3)); // microA_per_microF + const double var_non_specific_calcium_activated_current__i_ns_Ca = var_non_specific_calcium_activated_current__i_ns_K + var_non_specific_calcium_activated_current__i_ns_Na; // microA_per_microF + const double var_plateau_potassium_current__Kp = 1 / (1.0 + exp(1.2521739130434781 - 0.16722408026755853 * var_chaste_interface__membrane__V)); // dimensionless + const double var_plateau_potassium_current__g_Kp = 0.0055199999999999997; // milliS_per_microF + const double var_rapid_delayed_rectifier_potassium_current__Rect = 1 / (1.0 + exp(0.4017857142857143 + 0.044642857142857144 * var_chaste_interface__membrane__V)); // dimensionless + const double var_rapid_delayed_rectifier_potassium_current__g_Kr = 0.011248864963317985 * sqrt(var_ionic_concentrations__Ko) * NV_Ith_S(mParameters, 0); // milliS_per_microF + const double var_sarcolemmal_calcium_pump__I_pCa = 1.1499999999999999; // microA_per_microF + const double var_sarcolemmal_calcium_pump__K_mpCa = 0.00050000000000000001; // millimolar + const double var_sarcolemmal_calcium_pump__i_p_Ca = var_chaste_interface__calcium_dynamics__Cai * var_sarcolemmal_calcium_pump__I_pCa / (var_chaste_interface__calcium_dynamics__Cai + var_sarcolemmal_calcium_pump__K_mpCa); // microA_per_microF + const double var_slow_delayed_rectifier_potassium_current__PNaK = 0.018329999999999999; // dimensionless + const double var_slow_delayed_rectifier_potassium_current__E_Ks = var_membrane__R * var_membrane__T * log((var_ionic_concentrations__Nao * var_slow_delayed_rectifier_potassium_current__PNaK + var_ionic_concentrations__Ko) / (var_chaste_interface__ionic_concentrations__Nai * var_slow_delayed_rectifier_potassium_current__PNaK + var_chaste_interface__ionic_concentrations__Ki)) / var_membrane__F; // millivolt + const double var_slow_delayed_rectifier_potassium_current__g_Ks = 0.433 * (1.0 + 0.59999999999999998 / (1.0 + 6.4818210260626455e-7 * pow((1 / var_chaste_interface__calcium_dynamics__Cai), 1.3999999999999999))) * NV_Ith_S(mParameters, 1); // milliS_per_microF + const double var_slow_delayed_rectifier_potassium_current__i_Ks = (-var_slow_delayed_rectifier_potassium_current__E_Ks + var_chaste_interface__membrane__V) * var_slow_delayed_rectifier_potassium_current__g_Ks * var_chaste_interface__slow_delayed_rectifier_potassium_current_xs1_gate__xs1 * var_chaste_interface__slow_delayed_rectifier_potassium_current_xs2_gate__xs2; // microA_per_microF + const double var_sodium_activated_potassium_current__g_K_Na = 0; // milliS_per_microF + const double var_sodium_activated_potassium_current__kdKNa = 66.0; // millimolar + const double var_sodium_activated_potassium_current__nKNa = 2.7999999999999998; // dimensionless + const double var_sodium_activated_potassium_current__pona = 0.84999999999999998 / (1.0 + pow((var_sodium_activated_potassium_current__kdKNa / var_chaste_interface__ionic_concentrations__Nai), var_sodium_activated_potassium_current__nKNa)); // dimensionless + const double var_sodium_activated_potassium_current__pov = 0.80000000000000004 - 0.65000000000000002 / (1.0 + exp(8.3333333333333339 + 0.066666666666666666 * var_chaste_interface__membrane__V)); // dimensionless + const double var_sodium_background_current__g_Nab = 0.0040000000000000001; // milliS_per_microF + const double var_sodium_background_current__i_Na_b = (-var_fast_sodium_current__E_Na + var_chaste_interface__membrane__V) * var_sodium_background_current__g_Nab; // microA_per_microF + const double var_sodium_potassium_pump__I_NaK = 2.25; // microA_per_microF + const double var_sodium_potassium_pump__K_mKo = 1.5; // millimolar + const double var_sodium_potassium_pump__K_mNai = 10.0; // millimolar + const double var_sodium_potassium_pump__sigma = -0.14285714285714285 + 0.14285714285714285 * exp(0.01485884101040119 * var_ionic_concentrations__Nao); // dimensionless + const double var_sodium_potassium_pump__f_NaK = 1 / (1.0 + 0.1245 * exp(-0.10000000000000001 * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T)) + 0.036499999999999998 * var_sodium_potassium_pump__sigma * exp(-var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))); // dimensionless + const double var_sodium_potassium_pump__i_NaK = var_ionic_concentrations__Ko * var_sodium_potassium_pump__I_NaK * var_sodium_potassium_pump__f_NaK / ((1.0 + pow(var_sodium_potassium_pump__K_mNai, 2) / pow(var_chaste_interface__ionic_concentrations__Nai, 2)) * (var_ionic_concentrations__Ko + var_sodium_potassium_pump__K_mKo)); // microA_per_microF + const double var_time_independent_potassium_current__E_K = var_membrane__R * var_membrane__T * log(var_ionic_concentrations__Ko / var_chaste_interface__ionic_concentrations__Ki) / var_membrane__F; // millivolt + const double var_ATP_sensitive_potassium_current__i_K_ATP = (-var_time_independent_potassium_current__E_K + var_chaste_interface__membrane__V) * var_ATP_sensitive_potassium_current__GKbaraATP; // microA_per_microF + const double var_plateau_potassium_current__i_Kp = (-var_time_independent_potassium_current__E_K + var_chaste_interface__membrane__V) * var_plateau_potassium_current__Kp * var_plateau_potassium_current__g_Kp; // microA_per_microF + const double var_rapid_delayed_rectifier_potassium_current__i_Kr = (-var_time_independent_potassium_current__E_K + var_chaste_interface__membrane__V) * var_rapid_delayed_rectifier_potassium_current__Rect * var_rapid_delayed_rectifier_potassium_current__g_Kr * var_chaste_interface__rapid_delayed_rectifier_potassium_current_xr_gate__xr; // microA_per_microF + const double var_sodium_activated_potassium_current__i_K_Na = (-var_time_independent_potassium_current__E_K + var_chaste_interface__membrane__V) * var_sodium_activated_potassium_current__g_K_Na * var_sodium_activated_potassium_current__pona * var_sodium_activated_potassium_current__pov; // microA_per_microF + const double var_time_independent_potassium_current__g_K1 = 0.3227486121839514 * sqrt(var_ionic_concentrations__Ko); // milliS_per_cm2 + const double var_time_independent_potassium_current_K1_gate__alpha_K1 = 1020.0 / (1.0 + exp(-14.1227775 + 0.23849999999999999 * var_chaste_interface__membrane__V - 0.23849999999999999 * var_time_independent_potassium_current__E_K)); // per_second + const double var_time_independent_potassium_current_K1_gate__beta_K1 = 1000.0 * (0.49124000000000001 * exp(0.43983232 + 0.080320000000000003 * var_chaste_interface__membrane__V - 0.080320000000000003 * var_time_independent_potassium_current__E_K) + exp(-36.698642499999998 + 0.061749999999999999 * var_chaste_interface__membrane__V - 0.061749999999999999 * var_time_independent_potassium_current__E_K)) / (1.0 + exp(-2.4444678999999998 + 0.51429999999999998 * var_time_independent_potassium_current__E_K - 0.51429999999999998 * var_chaste_interface__membrane__V)); // per_second + const double var_time_independent_potassium_current_K1_gate__K1_infinity = var_time_independent_potassium_current_K1_gate__alpha_K1 / (var_time_independent_potassium_current_K1_gate__alpha_K1 + var_time_independent_potassium_current_K1_gate__beta_K1); // dimensionless + const double var_time_independent_potassium_current__i_K1 = (-var_time_independent_potassium_current__E_K + var_chaste_interface__membrane__V) * var_time_independent_potassium_current__g_K1 * var_time_independent_potassium_current_K1_gate__K1_infinity; // microA_per_microF + const double var_transient_outward_current__g_to = 0.5 * NV_Ith_S(mParameters, 2); // milliS_per_microF + const double var_transient_outward_current__rvdv = exp(0.01 * var_chaste_interface__membrane__V); // dimensionless + const double var_transient_outward_current__i_to = pow(var_chaste_interface__transient_outward_current_zdv_gate__zdv, 3) * (-var_time_independent_potassium_current__E_K + var_chaste_interface__membrane__V) * var_transient_outward_current__g_to * var_transient_outward_current__rvdv * var_chaste_interface__transient_outward_current_ydv_gate__ydv; // microA_per_microF + const double var_chaste_interface__i_ionic = (var_ATP_sensitive_potassium_current__i_K_ATP + var_L_type_Ca_channel__i_Ca_L + var_Na_Ca_exchanger__i_NaCa + var_T_type_Ca_channel__i_Ca_T + var_calcium_background_current__i_Ca_b + var_fast_sodium_current__i_Na + var_non_specific_calcium_activated_current__i_ns_Ca + var_plateau_potassium_current__i_Kp + var_rapid_delayed_rectifier_potassium_current__i_Kr + var_sarcolemmal_calcium_pump__i_p_Ca + var_slow_delayed_rectifier_potassium_current__i_Ks + var_sodium_activated_potassium_current__i_K_Na + var_sodium_background_current__i_Na_b + var_sodium_potassium_pump__i_NaK + var_time_independent_potassium_current__i_K1 + var_transient_outward_current__i_to) * HeartConfig::Instance()->GetCapacitance(); // uA_per_cm2 + + const double i_ionic = var_chaste_interface__i_ionic; + if (made_new_cvode_vector) + { + DeleteVector(rY); + } + EXCEPT_IF_NOT(!std::isnan(i_ionic)); + return i_ionic; + } + + void CellFaberRudy2000FromCellMLCvode::EvaluateYDerivatives(double var_chaste_interface__environment__time_converted, const N_Vector rY, N_Vector rDY) + { + // Inputs: + // Time units: millisecond + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : NV_Ith_S(rY, 0)); + // Units: millivolt; Initial value: -90.0 + double var_chaste_interface__calcium_dynamics__Cai = NV_Ith_S(rY, 1); + // Units: millimolar; Initial value: 6e-05 + double var_chaste_interface__fast_sodium_current_m_gate__m = NV_Ith_S(rY, 2); + // Units: dimensionless; Initial value: 0.0008 + double var_chaste_interface__fast_sodium_current_h_gate__h = NV_Ith_S(rY, 3); + // Units: dimensionless; Initial value: 0.993771 + double var_chaste_interface__fast_sodium_current_j_gate__j = NV_Ith_S(rY, 4); + // Units: dimensionless; Initial value: 0.995727 + double var_chaste_interface__L_type_Ca_channel_d_gate__d = NV_Ith_S(rY, 5); + // Units: dimensionless; Initial value: 3.210618e-06 + double var_chaste_interface__L_type_Ca_channel_f_gate__f = NV_Ith_S(rY, 6); + // Units: dimensionless; Initial value: 0.999837 + double var_chaste_interface__T_type_Ca_channel_b_gate__b = NV_Ith_S(rY, 7); + // Units: dimensionless; Initial value: 0.000970231 + double var_chaste_interface__T_type_Ca_channel_g_gate__g = NV_Ith_S(rY, 8); + // Units: dimensionless; Initial value: 0.994305 + double var_chaste_interface__rapid_delayed_rectifier_potassium_current_xr_gate__xr = NV_Ith_S(rY, 9); + // Units: dimensionless; Initial value: 0.000124042 + double var_chaste_interface__slow_delayed_rectifier_potassium_current_xs1_gate__xs1 = NV_Ith_S(rY, 10); + // Units: dimensionless; Initial value: 0.00445683 + double var_chaste_interface__slow_delayed_rectifier_potassium_current_xs2_gate__xs2 = NV_Ith_S(rY, 11); + // Units: dimensionless; Initial value: 0.00445683 + double var_chaste_interface__transient_outward_current_zdv_gate__zdv = NV_Ith_S(rY, 12); + // Units: dimensionless; Initial value: 0.5 + double var_chaste_interface__transient_outward_current_ydv_gate__ydv = NV_Ith_S(rY, 13); + // Units: dimensionless; Initial value: 0.5 + double var_chaste_interface__calcium_dynamics__Ca_JSR = NV_Ith_S(rY, 14); + // Units: millimolar; Initial value: 1.8 + double var_chaste_interface__calcium_dynamics__Ca_NSR = NV_Ith_S(rY, 15); + // Units: millimolar; Initial value: 1.8 + double var_chaste_interface__calcium_dynamics__APtrack = NV_Ith_S(rY, 16); + // Units: dimensionless; Initial value: 0.0 + double var_chaste_interface__calcium_dynamics__APtrack2 = NV_Ith_S(rY, 17); + // Units: dimensionless; Initial value: 0.0 + double var_chaste_interface__calcium_dynamics__APtrack3 = NV_Ith_S(rY, 18); + // Units: dimensionless; Initial value: 0.0 + double var_chaste_interface__calcium_dynamics__Cainfluxtrack = NV_Ith_S(rY, 19); + // Units: dimensionless; Initial value: 0.0 + double var_chaste_interface__calcium_dynamics__OVRLDtrack = NV_Ith_S(rY, 20); + // Units: dimensionless; Initial value: 0.0 + double var_chaste_interface__calcium_dynamics__OVRLDtrack2 = NV_Ith_S(rY, 21); + // Units: dimensionless; Initial value: 0.0 + double var_chaste_interface__calcium_dynamics__OVRLDtrack3 = NV_Ith_S(rY, 22); + // Units: dimensionless; Initial value: 0.0 + double var_chaste_interface__ionic_concentrations__Nai = NV_Ith_S(rY, 23); + // Units: millimolar; Initial value: 9.0 + double var_chaste_interface__ionic_concentrations__Ki = NV_Ith_S(rY, 24); + // Units: millimolar; Initial value: 141.2 + + // Mathematics + double d_dt_chaste_interface_var_membrane__V; + const double var_ATP_sensitive_potassium_current__ATPi = 3.0; // millimolar + const double var_ATP_sensitive_potassium_current__hATP = 2.0; // dimensionless + const double var_ATP_sensitive_potassium_current__i_K_ATP_on = 1.0; // dimensionless + const double var_ATP_sensitive_potassium_current__kATP = 0.00025000000000000001; // millimolar + const double var_ATP_sensitive_potassium_current__nATP = 0.23999999999999999; // dimensionless + const double var_ATP_sensitive_potassium_current__nicholsarea = 5.0000000000000002e-5; // dimensionless + const double var_ATP_sensitive_potassium_current__g_K_ATP = 0.000193 * var_ATP_sensitive_potassium_current__i_K_ATP_on / var_ATP_sensitive_potassium_current__nicholsarea; // milliS_per_microF + const double var_ATP_sensitive_potassium_current__pATP = 1 / (1.0 + pow((var_ATP_sensitive_potassium_current__ATPi / var_ATP_sensitive_potassium_current__kATP), var_ATP_sensitive_potassium_current__hATP)); // dimensionless + const double var_L_type_Ca_channel__gamma_Ki = 0.75; // dimensionless + const double var_L_type_Ca_channel__gamma_Ko = 0.75; // dimensionless + const double var_L_type_Ca_channel__gamma_Nai = 0.75; // dimensionless + const double var_L_type_Ca_channel__gamma_Nao = 0.75; // dimensionless + const double var_L_type_Ca_channel_f_Ca_gate__Km_Ca = 0.00059999999999999995; // millimolar + const double var_Na_Ca_exchanger__c1 = 0.00025000000000000001; // microA_per_microF + const double var_Na_Ca_exchanger__c2 = 0.0001; // millimolar + const double var_Na_Ca_exchanger__gamma = 0.14999999999999999; // dimensionless + const double var_T_type_Ca_channel__g_CaT = 0.050000000000000003; // milliS_per_microF + const double var_calcium_background_current__g_Cab = 0.003016; // milliS_per_microF + const double var_calcium_dynamics__APtrack2_orig_deriv = (((var_chaste_interface__calcium_dynamics__APtrack > 0.17999999999999999) && (var_chaste_interface__calcium_dynamics__APtrack < 0.20000000000000001)) ? (100000.0 - 100500.0 * var_chaste_interface__calcium_dynamics__APtrack2) : (-500.0 * var_chaste_interface__calcium_dynamics__APtrack2)); // 1 / second + const double d_dt_chaste_interface_var_calcium_dynamics__APtrack2 = 0.001 * var_calcium_dynamics__APtrack2_orig_deriv; // 1 / millisecond + const double var_calcium_dynamics__APtrack3_orig_deriv = (((var_chaste_interface__calcium_dynamics__APtrack > 0.17999999999999999) && (var_chaste_interface__calcium_dynamics__APtrack < 0.20000000000000001)) ? (100000.0 - 100500.0 * var_chaste_interface__calcium_dynamics__APtrack3) : (-10.0 * var_chaste_interface__calcium_dynamics__APtrack3)); // 1 / second + const double d_dt_chaste_interface_var_calcium_dynamics__APtrack3 = 0.001 * var_calcium_dynamics__APtrack3_orig_deriv; // 1 / millisecond + const double var_calcium_dynamics__CMDN_max = 0.050000000000000003; // millimolar + const double var_calcium_dynamics__CSQN_max = 10.0; // millimolar + const double var_calcium_dynamics__CSQNthresh = 0.69999999999999996; // millimolar + const double var_calcium_dynamics__Ca_NSR_max = 15.0; // millimolar + const double var_L_type_Ca_channel_f_Ca_gate__f_Ca = 1 / (1.0 + var_chaste_interface__calcium_dynamics__Cai / var_L_type_Ca_channel_f_Ca_gate__Km_Ca); // dimensionless + const double var_calcium_dynamics__Cao = 1.8; // millimolar + const double var_calcium_dynamics__G_rel_max = 60000.0; // per_second + const double var_calcium_dynamics__G_rel_overload = 4000.0; // per_second + const double var_calcium_dynamics__I_up = 8.75; // millimolar_per_second + const double var_calcium_dynamics__K_leak = var_calcium_dynamics__I_up / var_calcium_dynamics__Ca_NSR_max; // per_second + const double var_calcium_dynamics__K_mCMDN = 0.0023800000000000002; // millimolar + const double var_calcium_dynamics__K_mCSQN = 0.80000000000000004; // millimolar + const double var_calcium_dynamics__K_mTn = 0.00050000000000000001; // millimolar + const double var_calcium_dynamics__K_mrel = 0.00080000000000000004; // millimolar + const double var_calcium_dynamics__K_mup = 0.00092000000000000003; // millimolar + const double var_calcium_dynamics__Logicthresh = 0.97999999999999998; // dimensionless + const double var_calcium_dynamics__OVRLDtrack2_orig_deriv = (((var_calcium_dynamics__Logicthresh > var_chaste_interface__calcium_dynamics__OVRLDtrack2) && (var_calcium_dynamics__Logicthresh < var_chaste_interface__calcium_dynamics__OVRLDtrack)) ? (50000.0 - 50000.0 * var_chaste_interface__calcium_dynamics__OVRLDtrack2) : (-500.0 * var_chaste_interface__calcium_dynamics__OVRLDtrack2)); // 1 / second + const double d_dt_chaste_interface_var_calcium_dynamics__OVRLDtrack2 = 0.001 * var_calcium_dynamics__OVRLDtrack2_orig_deriv; // 1 / millisecond + const double var_calcium_dynamics__OVRLDtrack3_orig_deriv = (((var_calcium_dynamics__Logicthresh > var_chaste_interface__calcium_dynamics__OVRLDtrack3) && (var_calcium_dynamics__Logicthresh < var_chaste_interface__calcium_dynamics__OVRLDtrack)) ? (50000.0 - 50000.0 * var_chaste_interface__calcium_dynamics__OVRLDtrack3) : (-10.0 * var_chaste_interface__calcium_dynamics__OVRLDtrack3)); // 1 / second + const double d_dt_chaste_interface_var_calcium_dynamics__OVRLDtrack3 = 0.001 * var_calcium_dynamics__OVRLDtrack3_orig_deriv; // 1 / millisecond + const double var_calcium_dynamics__OVRLDtrack_orig_deriv = (((var_chaste_interface__calcium_dynamics__APtrack3 < 0.37) && (var_chaste_interface__calcium_dynamics__OVRLDtrack3 < 0.37) && (var_calcium_dynamics__CSQNthresh < 1 / (1.0 + var_calcium_dynamics__K_mCSQN / var_chaste_interface__calcium_dynamics__Ca_JSR))) ? (50000.0 - 50000.0 * var_chaste_interface__calcium_dynamics__OVRLDtrack) : (-500.0 * var_chaste_interface__calcium_dynamics__OVRLDtrack)); // 1 / second + const double d_dt_chaste_interface_var_calcium_dynamics__OVRLDtrack = 0.001 * var_calcium_dynamics__OVRLDtrack_orig_deriv; // 1 / millisecond + const double var_calcium_dynamics__Tn_max = 0.070000000000000007; // millimolar + const double var_calcium_dynamics__delta_Ca_ith = 0.00018000000000000001; // millimolar + const double var_calcium_dynamics__G_rel = ((var_chaste_interface__calcium_dynamics__Cainfluxtrack > var_calcium_dynamics__delta_Ca_ith) ? ((1.0 - var_chaste_interface__calcium_dynamics__APtrack2) * (-var_calcium_dynamics__delta_Ca_ith + var_chaste_interface__calcium_dynamics__Cainfluxtrack) * var_chaste_interface__calcium_dynamics__APtrack2 * var_calcium_dynamics__G_rel_max / (-var_calcium_dynamics__delta_Ca_ith + var_chaste_interface__calcium_dynamics__Cainfluxtrack + var_calcium_dynamics__K_mrel)) : ((var_chaste_interface__calcium_dynamics__OVRLDtrack2 > 0) ? ((1.0 - var_chaste_interface__calcium_dynamics__OVRLDtrack2) * var_calcium_dynamics__G_rel_overload * var_chaste_interface__calcium_dynamics__OVRLDtrack2) : (0))); // per_second + const double var_calcium_dynamics__i_leak = var_chaste_interface__calcium_dynamics__Ca_NSR * var_calcium_dynamics__K_leak; // millimolar_per_second + const double var_calcium_dynamics__i_rel = (-var_chaste_interface__calcium_dynamics__Cai + var_chaste_interface__calcium_dynamics__Ca_JSR) * var_calcium_dynamics__G_rel; // millimolar_per_second + const double var_calcium_dynamics__i_up = var_chaste_interface__calcium_dynamics__Cai * var_calcium_dynamics__I_up / (var_chaste_interface__calcium_dynamics__Cai + var_calcium_dynamics__K_mup); // millimolar_per_second + const double var_calcium_dynamics__tau_tr = 0.17999999999999999; // second + const double var_calcium_dynamics__i_tr = (-var_chaste_interface__calcium_dynamics__Ca_JSR + var_chaste_interface__calcium_dynamics__Ca_NSR) / var_calcium_dynamics__tau_tr; // millimolar_per_second + const double var_calcium_dynamics__Ca_JSR_orig_deriv = (-var_calcium_dynamics__i_rel + var_calcium_dynamics__i_tr) / (1.0 + var_calcium_dynamics__CSQN_max * var_calcium_dynamics__K_mCSQN / pow((var_chaste_interface__calcium_dynamics__Ca_JSR + var_calcium_dynamics__K_mCSQN), 2)); // millimolar / second + const double d_dt_chaste_interface_var_calcium_dynamics__Ca_JSR = 0.001 * var_calcium_dynamics__Ca_JSR_orig_deriv; // millimolar / millisecond + const double var_fast_sodium_current__g_Na = 16.0; // milliS_per_microF + const double var_fast_sodium_current_m_gate__delta_m = 1.0000000000000001e-5; // millivolt + const double var_ionic_concentrations__A_cap = 1.434e-7; // mm2 + const double var_ionic_concentrations__Ko = 4.5; // millimolar + const double var_ATP_sensitive_potassium_current__GKbaraATP = pow((0.25 * var_ionic_concentrations__Ko), var_ATP_sensitive_potassium_current__nATP) * var_ATP_sensitive_potassium_current__g_K_ATP * var_ATP_sensitive_potassium_current__pATP; // milliS_per_microF + const double var_ionic_concentrations__Nao = 132.0; // millimolar + const double var_ionic_concentrations__preplength = 0.001; // mm + const double var_ionic_concentrations__radius = 0.00011; // mm + const double var_ionic_concentrations__volume = M_PI * pow(var_ionic_concentrations__radius, 2) * var_ionic_concentrations__preplength; // micro_litre + const double var_ionic_concentrations__V_myo = 0.68000000000000005 * var_ionic_concentrations__volume; // micro_litre + const double var_calcium_dynamics__V_JSR = 0.0070588235294117632 * var_ionic_concentrations__V_myo; // micro_litre + const double var_calcium_dynamics__V_NSR = 0.081176470588235281 * var_ionic_concentrations__V_myo; // micro_litre + const double var_calcium_dynamics__Ca_NSR_orig_deriv = -var_calcium_dynamics__i_leak - var_calcium_dynamics__V_JSR * var_calcium_dynamics__i_tr / var_calcium_dynamics__V_NSR + var_calcium_dynamics__i_up; // millimolar / second + const double d_dt_chaste_interface_var_calcium_dynamics__Ca_NSR = 0.001 * var_calcium_dynamics__Ca_NSR_orig_deriv; // millimolar / millisecond + const double var_membrane__F = 96485.0; // coulomb_per_mole + const double var_membrane__I_st_converted = GetIntracellularAreaStimulus(var_chaste_interface__environment__time_converted); // uA_per_cm2 + const double var_membrane__I_st = var_membrane__I_st_converted / HeartConfig::Instance()->GetCapacitance(); // microA_per_microF + const double var_membrane__R = 8314.0; // joule_per_kilomole_kelvin + const double var_membrane__T = 310.0; // kelvin + const double var_calcium_background_current__E_Ca = 0.5 * var_membrane__R * var_membrane__T * log(var_calcium_dynamics__Cao / var_chaste_interface__calcium_dynamics__Cai) / var_membrane__F; // millivolt + const double var_fast_sodium_current__E_Na = var_membrane__R * var_membrane__T * log(var_ionic_concentrations__Nao / var_chaste_interface__ionic_concentrations__Nai) / var_membrane__F; // millivolt + const double var_L_type_Ca_channel__I_CaCa = ((fabs(var_chaste_interface__membrane__V) < 1.3356169352749131e-6) ? (374358.83507802623 * (1.3356169352749131e-6 + var_chaste_interface__membrane__V) * (1.042038e-5 * (-0.61380000000000001 + var_chaste_interface__calcium_dynamics__Cai * exp(9.9999999999999995e-8)) / (-1.0 + exp(9.9999999999999995e-8)) + 1.042038e-5 * (-0.61380000000000001 + var_chaste_interface__calcium_dynamics__Cai * exp(-9.9999999999999995e-8)) / (-1.0 + exp(-9.9999999999999995e-8))) - 1.042038e-5 * (-0.61380000000000001 + var_chaste_interface__calcium_dynamics__Cai * exp(-9.9999999999999995e-8)) / (-1.0 + exp(-9.9999999999999995e-8))) : (7.8019226357407252 * (-0.61380000000000001 + var_chaste_interface__calcium_dynamics__Cai * exp(0.074871767015605231 * var_chaste_interface__membrane__V)) * var_chaste_interface__membrane__V / (-1.0 + exp(0.074871767015605231 * var_chaste_interface__membrane__V)))); // microA_per_microF + const double var_L_type_Ca_channel__I_CaK = ((fabs(var_chaste_interface__membrane__V) < 2.6712338705498262e-6) ? (187179.41753901311 * (2.6712338705498262e-6 + var_chaste_interface__membrane__V) * (1.8621604999999999e-9 * (-3.375 + 0.75 * var_chaste_interface__ionic_concentrations__Ki * exp(9.9999999999999995e-8)) / (-1.0 + exp(9.9999999999999995e-8)) + 1.8621604999999999e-9 * (-3.375 + 0.75 * var_chaste_interface__ionic_concentrations__Ki * exp(-9.9999999999999995e-8)) / (-1.0 + exp(-9.9999999999999995e-8))) - 1.8621604999999999e-9 * (-3.375 + 0.75 * var_chaste_interface__ionic_concentrations__Ki * exp(-9.9999999999999995e-8)) / (-1.0 + exp(-9.9999999999999995e-8))) : (0.00069711623550831479 * (-3.375 + 0.75 * var_chaste_interface__ionic_concentrations__Ki * exp(0.037435883507802616 * var_chaste_interface__membrane__V)) * var_chaste_interface__membrane__V / (-1.0 + exp(0.037435883507802616 * var_chaste_interface__membrane__V)))); // microA_per_microF + const double var_L_type_Ca_channel__I_CaNa = ((fabs(var_chaste_interface__membrane__V) < 2.6712338705498262e-6) ? (187179.41753901311 * (2.6712338705498262e-6 + var_chaste_interface__membrane__V) * (6.5127375e-9 * (-99.0 + 0.75 * var_chaste_interface__ionic_concentrations__Nai * exp(9.9999999999999995e-8)) / (-1.0 + exp(9.9999999999999995e-8)) + 6.5127375e-9 * (-99.0 + 0.75 * var_chaste_interface__ionic_concentrations__Nai * exp(-9.9999999999999995e-8)) / (-1.0 + exp(-9.9999999999999995e-8))) - 6.5127375e-9 * (-99.0 + 0.75 * var_chaste_interface__ionic_concentrations__Nai * exp(-9.9999999999999995e-8)) / (-1.0 + exp(-9.9999999999999995e-8))) : (0.0024381008236689767 * (-99.0 + 0.75 * var_chaste_interface__ionic_concentrations__Nai * exp(0.037435883507802616 * var_chaste_interface__membrane__V)) * var_chaste_interface__membrane__V / (-1.0 + exp(0.037435883507802616 * var_chaste_interface__membrane__V)))); // microA_per_microF + const double var_L_type_Ca_channel__i_CaCa = var_L_type_Ca_channel__I_CaCa * var_chaste_interface__L_type_Ca_channel_d_gate__d * var_L_type_Ca_channel_f_Ca_gate__f_Ca * var_chaste_interface__L_type_Ca_channel_f_gate__f; // microA_per_microF + const double var_L_type_Ca_channel__i_CaK = var_L_type_Ca_channel__I_CaK * var_chaste_interface__L_type_Ca_channel_d_gate__d * var_L_type_Ca_channel_f_Ca_gate__f_Ca * var_chaste_interface__L_type_Ca_channel_f_gate__f; // microA_per_microF + const double var_L_type_Ca_channel__i_CaNa = var_L_type_Ca_channel__I_CaNa * var_chaste_interface__L_type_Ca_channel_d_gate__d * var_L_type_Ca_channel_f_Ca_gate__f_Ca * var_chaste_interface__L_type_Ca_channel_f_gate__f; // microA_per_microF + const double var_L_type_Ca_channel__i_Ca_L = var_L_type_Ca_channel__i_CaCa + var_L_type_Ca_channel__i_CaK + var_L_type_Ca_channel__i_CaNa; // microA_per_microF + const double var_L_type_Ca_channel_d_gate__E0_d = 10.0 + var_chaste_interface__membrane__V; // millivolt + const double var_L_type_Ca_channel_d_gate__d_infinity = 1 / (1.0 + exp(-0.16025641025641024 * var_L_type_Ca_channel_d_gate__E0_d)); // dimensionless + const double var_L_type_Ca_channel_d_gate__tau_d = ((fabs(var_L_type_Ca_channel_d_gate__E0_d) < 1.0000000000000001e-5) ? (0.0045787545787545781) : (0.028571428571428571 * (1.0 - exp(-0.16025641025641024 * var_L_type_Ca_channel_d_gate__E0_d)) * var_L_type_Ca_channel_d_gate__d_infinity / var_L_type_Ca_channel_d_gate__E0_d)); // second + const double var_L_type_Ca_channel_d_gate__alpha_d = var_L_type_Ca_channel_d_gate__d_infinity / var_L_type_Ca_channel_d_gate__tau_d; // per_second + const double var_L_type_Ca_channel_d_gate__beta_d = (1.0 - var_L_type_Ca_channel_d_gate__d_infinity) / var_L_type_Ca_channel_d_gate__tau_d; // per_second + const double var_L_type_Ca_channel_d_gate__d_orig_deriv = (1.0 - var_chaste_interface__L_type_Ca_channel_d_gate__d) * var_L_type_Ca_channel_d_gate__alpha_d - var_L_type_Ca_channel_d_gate__beta_d * var_chaste_interface__L_type_Ca_channel_d_gate__d; // 1 / second + const double d_dt_chaste_interface_var_L_type_Ca_channel_d_gate__d = 0.001 * var_L_type_Ca_channel_d_gate__d_orig_deriv; // 1 / millisecond + const double var_L_type_Ca_channel_f_gate__f_infinity = 1 / (1.0 + exp(4.0 + 0.125 * var_chaste_interface__membrane__V)) + 0.59999999999999998 / (1.0 + exp(2.5 - 0.050000000000000003 * var_chaste_interface__membrane__V)); // dimensionless + const double var_L_type_Ca_channel_f_gate__tau_f = 0.001 / (0.02 + 0.019699999999999999 * exp(-0.113569 * pow((1 + 0.10000000000000001 * var_chaste_interface__membrane__V), 2))); // second + const double var_L_type_Ca_channel_f_gate__alpha_f = var_L_type_Ca_channel_f_gate__f_infinity / var_L_type_Ca_channel_f_gate__tau_f; // per_second + const double var_L_type_Ca_channel_f_gate__beta_f = (1.0 - var_L_type_Ca_channel_f_gate__f_infinity) / var_L_type_Ca_channel_f_gate__tau_f; // per_second + const double var_L_type_Ca_channel_f_gate__f_orig_deriv = (1.0 - var_chaste_interface__L_type_Ca_channel_f_gate__f) * var_L_type_Ca_channel_f_gate__alpha_f - var_L_type_Ca_channel_f_gate__beta_f * var_chaste_interface__L_type_Ca_channel_f_gate__f; // 1 / second + const double d_dt_chaste_interface_var_L_type_Ca_channel_f_gate__f = 0.001 * var_L_type_Ca_channel_f_gate__f_orig_deriv; // 1 / millisecond + const double var_Na_Ca_exchanger__i_NaCa = (-pow(var_ionic_concentrations__Nao, 3) * var_chaste_interface__calcium_dynamics__Cai + pow(var_chaste_interface__ionic_concentrations__Nai, 3) * var_calcium_dynamics__Cao * exp(var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * var_Na_Ca_exchanger__c1 * exp((-1.0 + var_Na_Ca_exchanger__gamma) * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T)) / (1.0 + (pow(var_ionic_concentrations__Nao, 3) * var_chaste_interface__calcium_dynamics__Cai + pow(var_chaste_interface__ionic_concentrations__Nai, 3) * var_calcium_dynamics__Cao * exp(var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * var_Na_Ca_exchanger__c2 * exp((-1.0 + var_Na_Ca_exchanger__gamma) * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))); // microA_per_microF + const double var_T_type_Ca_channel__i_Ca_T = pow(var_chaste_interface__T_type_Ca_channel_b_gate__b, 2) * (-var_calcium_background_current__E_Ca + var_chaste_interface__membrane__V) * var_T_type_Ca_channel__g_CaT * var_chaste_interface__T_type_Ca_channel_g_gate__g; // microA_per_microF + const double var_T_type_Ca_channel_b_gate__b_inf = 1 / (1.0 + exp(-1.2962962962962963 - 0.092592592592592587 * var_chaste_interface__membrane__V)); // dimensionless + const double var_T_type_Ca_channel_b_gate__tau_b = 0.0037000000000000002 + 0.0061000000000000004 / (1.0 + exp(5.5555555555555554 + 0.22222222222222221 * var_chaste_interface__membrane__V)); // second + const double var_T_type_Ca_channel_b_gate__b_orig_deriv = (-var_chaste_interface__T_type_Ca_channel_b_gate__b + var_T_type_Ca_channel_b_gate__b_inf) / var_T_type_Ca_channel_b_gate__tau_b; // 1 / second + const double d_dt_chaste_interface_var_T_type_Ca_channel_b_gate__b = 0.001 * var_T_type_Ca_channel_b_gate__b_orig_deriv; // 1 / millisecond + const double var_T_type_Ca_channel_g_gate__g_inf = 1 / (1.0 + exp(10.714285714285715 + 0.17857142857142858 * var_chaste_interface__membrane__V)); // dimensionless + const double var_T_type_Ca_channel_g_gate__tau_g = ((var_chaste_interface__membrane__V <= 0) ? (0.012 - 0.00087500000000000002 * var_chaste_interface__membrane__V) : (0.012)); // second + const double var_T_type_Ca_channel_g_gate__g_orig_deriv = (-var_chaste_interface__T_type_Ca_channel_g_gate__g + var_T_type_Ca_channel_g_gate__g_inf) / var_T_type_Ca_channel_g_gate__tau_g; // 1 / second + const double d_dt_chaste_interface_var_T_type_Ca_channel_g_gate__g = 0.001 * var_T_type_Ca_channel_g_gate__g_orig_deriv; // 1 / millisecond + const double var_calcium_background_current__i_Ca_b = (-var_calcium_background_current__E_Ca + var_chaste_interface__membrane__V) * var_calcium_background_current__g_Cab; // microA_per_microF + const double var_fast_sodium_current__i_Na = pow(var_chaste_interface__fast_sodium_current_m_gate__m, 3) * (-var_fast_sodium_current__E_Na + var_chaste_interface__membrane__V) * var_fast_sodium_current__g_Na * var_chaste_interface__fast_sodium_current_h_gate__h * var_chaste_interface__fast_sodium_current_j_gate__j; // microA_per_microF + const double var_fast_sodium_current_h_gate__alpha_h = ((var_chaste_interface__membrane__V < -40.0) ? (135.0 * exp(-11.764705882352942 - 0.14705882352941177 * var_chaste_interface__membrane__V)) : (0)); // per_second + const double var_fast_sodium_current_h_gate__beta_h = ((var_chaste_interface__membrane__V < -40.0) ? (3560.0 * exp(0.079000000000000001 * var_chaste_interface__membrane__V) + 310000000.0 * exp(0.34999999999999998 * var_chaste_interface__membrane__V)) : (7692.3076923076924 / (1.0 + exp(-0.96036036036036043 - 0.0900900900900901 * var_chaste_interface__membrane__V)))); // per_second + const double var_fast_sodium_current_h_gate__h_orig_deriv = (1.0 - var_chaste_interface__fast_sodium_current_h_gate__h) * var_fast_sodium_current_h_gate__alpha_h - var_fast_sodium_current_h_gate__beta_h * var_chaste_interface__fast_sodium_current_h_gate__h; // 1 / second + const double d_dt_chaste_interface_var_fast_sodium_current_h_gate__h = 0.001 * var_fast_sodium_current_h_gate__h_orig_deriv; // 1 / millisecond + const double var_fast_sodium_current_j_gate__alpha_j = ((var_chaste_interface__membrane__V < -40.0) ? (1000.0 * (37.780000000000001 + var_chaste_interface__membrane__V) * (-127140.0 * exp(0.24440000000000001 * var_chaste_interface__membrane__V) - 3.4740000000000003e-5 * exp(-0.043909999999999998 * var_chaste_interface__membrane__V)) / (1.0 + exp(24.640530000000002 + 0.311 * var_chaste_interface__membrane__V))) : (0)); // per_second + const double var_fast_sodium_current_j_gate__beta_j = ((var_chaste_interface__membrane__V < -40.0) ? (121.2 * exp(-0.01052 * var_chaste_interface__membrane__V) / (1.0 + exp(-5.5312920000000005 - 0.13780000000000001 * var_chaste_interface__membrane__V))) : (300.0 * exp(-2.5349999999999999e-7 * var_chaste_interface__membrane__V) / (1.0 + exp(-3.2000000000000002 - 0.10000000000000001 * var_chaste_interface__membrane__V)))); // per_second + const double var_fast_sodium_current_j_gate__j_orig_deriv = (1.0 - var_chaste_interface__fast_sodium_current_j_gate__j) * var_fast_sodium_current_j_gate__alpha_j - var_fast_sodium_current_j_gate__beta_j * var_chaste_interface__fast_sodium_current_j_gate__j; // 1 / second + const double d_dt_chaste_interface_var_fast_sodium_current_j_gate__j = 0.001 * var_fast_sodium_current_j_gate__j_orig_deriv; // 1 / millisecond + const double var_fast_sodium_current_m_gate__E0_m = 47.130000000000003 + var_chaste_interface__membrane__V; // millivolt + const double var_fast_sodium_current_m_gate__alpha_m = ((var_fast_sodium_current_m_gate__delta_m <= fabs(var_fast_sodium_current_m_gate__E0_m)) ? (320.0 * var_fast_sodium_current_m_gate__E0_m / (1.0 - exp(-0.10000000000000001 * var_fast_sodium_current_m_gate__E0_m))) : (3200.0)); // per_second + const double var_fast_sodium_current_m_gate__beta_m = 80.0 * exp(-0.090909090909090912 * var_chaste_interface__membrane__V); // per_second + const double var_fast_sodium_current_m_gate__m_orig_deriv = (1.0 - var_chaste_interface__fast_sodium_current_m_gate__m) * var_fast_sodium_current_m_gate__alpha_m - var_fast_sodium_current_m_gate__beta_m * var_chaste_interface__fast_sodium_current_m_gate__m; // 1 / second + const double d_dt_chaste_interface_var_fast_sodium_current_m_gate__m = 0.001 * var_fast_sodium_current_m_gate__m_orig_deriv; // 1 / millisecond + const double var_non_specific_calcium_activated_current__K_m_ns_Ca = 0.0011999999999999999; // millimolar + const double var_non_specific_calcium_activated_current__P_ns_Ca = 0; // cm_per_second + const double var_non_specific_calcium_activated_current__I_ns_K = pow(var_membrane__F, 2) * (-var_L_type_Ca_channel__gamma_Ko * var_ionic_concentrations__Ko + var_L_type_Ca_channel__gamma_Ki * var_chaste_interface__ionic_concentrations__Ki * exp(var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * var_chaste_interface__membrane__V * var_non_specific_calcium_activated_current__P_ns_Ca / ((-1.0 + exp(var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * var_membrane__R * var_membrane__T); // microA_per_microF + const double var_non_specific_calcium_activated_current__I_ns_Na = pow(var_membrane__F, 2) * (-var_L_type_Ca_channel__gamma_Nao * var_ionic_concentrations__Nao + var_L_type_Ca_channel__gamma_Nai * var_chaste_interface__ionic_concentrations__Nai * exp(var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * var_chaste_interface__membrane__V * var_non_specific_calcium_activated_current__P_ns_Ca / ((-1.0 + exp(var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * var_membrane__R * var_membrane__T); // microA_per_microF + const double var_non_specific_calcium_activated_current__i_ns_K = var_non_specific_calcium_activated_current__I_ns_K / (1.0 + pow(var_non_specific_calcium_activated_current__K_m_ns_Ca, 3) / pow(var_chaste_interface__calcium_dynamics__Cai, 3)); // microA_per_microF + const double var_non_specific_calcium_activated_current__i_ns_Na = var_non_specific_calcium_activated_current__I_ns_Na / (1.0 + pow(var_non_specific_calcium_activated_current__K_m_ns_Ca, 3) / pow(var_chaste_interface__calcium_dynamics__Cai, 3)); // microA_per_microF + const double var_non_specific_calcium_activated_current__i_ns_Ca = var_non_specific_calcium_activated_current__i_ns_K + var_non_specific_calcium_activated_current__i_ns_Na; // microA_per_microF + const double var_plateau_potassium_current__Kp = 1 / (1.0 + exp(1.2521739130434781 - 0.16722408026755853 * var_chaste_interface__membrane__V)); // dimensionless + const double var_plateau_potassium_current__g_Kp = 0.0055199999999999997; // milliS_per_microF + const double var_rapid_delayed_rectifier_potassium_current__Rect = 1 / (1.0 + exp(0.4017857142857143 + 0.044642857142857144 * var_chaste_interface__membrane__V)); // dimensionless + const double var_rapid_delayed_rectifier_potassium_current__g_Kr = 0.011248864963317985 * sqrt(var_ionic_concentrations__Ko) * NV_Ith_S(mParameters, 0); // milliS_per_microF + const double var_rapid_delayed_rectifier_potassium_current_xr_gate__tau_xr = 0.001 / (((fabs(14.199999999999999 + var_chaste_interface__membrane__V) < 8.1300813007528783e-7) ? (1.1219512195134727e-9 / (1.0 - exp(-1.0000000000011388e-7)) - 615000.00000454858 * (14.199999186991869 + var_chaste_interface__membrane__V) * (-1.1219512194943214e-9 / (1.0 - exp(9.9999999998406912e-8)) - 1.1219512195134727e-9 / (1.0 - exp(-1.0000000000011388e-7)))) : (0.0013799999999999999 * (14.199999999999999 + var_chaste_interface__membrane__V) / (1.0 - exp(-1.7465999999999999 - 0.123 * var_chaste_interface__membrane__V)))) + ((fabs(38.899999999999999 + var_chaste_interface__membrane__V) < 6.896551724422384e-7) ? (-4.2068965517283451e-10 / (-1.0 + exp(-1.000000000001e-7)) + 724999.99997009686 * (38.900000689655172 + var_chaste_interface__membrane__V) * (4.2068965517283451e-10 / (-1.0 + exp(-1.000000000001e-7)) + 4.2068965520669629e-10 / (-1.0 + exp(1.0000000000814911e-7)))) : (0.00060999999999999997 * (38.899999999999999 + var_chaste_interface__membrane__V) / (-1.0 + exp(5.6404999999999994 + 0.14499999999999999 * var_chaste_interface__membrane__V))))); // second + const double var_rapid_delayed_rectifier_potassium_current_xr_gate__xr_infinity = 1 / (1.0 + exp(-2.8666666666666667 - 0.13333333333333333 * var_chaste_interface__membrane__V)); // dimensionless + const double var_rapid_delayed_rectifier_potassium_current_xr_gate__xr_orig_deriv = (-var_chaste_interface__rapid_delayed_rectifier_potassium_current_xr_gate__xr + var_rapid_delayed_rectifier_potassium_current_xr_gate__xr_infinity) / var_rapid_delayed_rectifier_potassium_current_xr_gate__tau_xr; // 1 / second + const double d_dt_chaste_interface_var_rapid_delayed_rectifier_potassium_current_xr_gate__xr = 0.001 * var_rapid_delayed_rectifier_potassium_current_xr_gate__xr_orig_deriv; // 1 / millisecond + const double var_sarcolemmal_calcium_pump__I_pCa = 1.1499999999999999; // microA_per_microF + const double var_sarcolemmal_calcium_pump__K_mpCa = 0.00050000000000000001; // millimolar + const double var_sarcolemmal_calcium_pump__i_p_Ca = var_chaste_interface__calcium_dynamics__Cai * var_sarcolemmal_calcium_pump__I_pCa / (var_chaste_interface__calcium_dynamics__Cai + var_sarcolemmal_calcium_pump__K_mpCa); // microA_per_microF + const double var_calcium_dynamics__Cai_orig_deriv = ((-var_calcium_dynamics__i_up + var_calcium_dynamics__i_leak) * var_calcium_dynamics__V_NSR / var_ionic_concentrations__V_myo + var_calcium_dynamics__V_JSR * var_calcium_dynamics__i_rel / var_ionic_concentrations__V_myo - 0.5 * (-2.0 * var_Na_Ca_exchanger__i_NaCa + var_L_type_Ca_channel__i_CaCa + var_T_type_Ca_channel__i_Ca_T + var_calcium_background_current__i_Ca_b + var_sarcolemmal_calcium_pump__i_p_Ca) * var_ionic_concentrations__A_cap / (var_ionic_concentrations__V_myo * var_membrane__F)) / (1.0 + var_calcium_dynamics__CMDN_max * var_calcium_dynamics__K_mCMDN / pow((var_chaste_interface__calcium_dynamics__Cai + var_calcium_dynamics__K_mCMDN), 2) + var_calcium_dynamics__K_mTn * var_calcium_dynamics__Tn_max / pow((var_chaste_interface__calcium_dynamics__Cai + var_calcium_dynamics__K_mTn), 2)); // millimolar / second + const double d_dt_chaste_interface_var_calcium_dynamics__Cai = 0.001 * var_calcium_dynamics__Cai_orig_deriv; // millimolar / millisecond + const double var_calcium_dynamics__Cainfluxtrack_orig_deriv = ((var_chaste_interface__calcium_dynamics__APtrack > 0.20000000000000001) ? (-0.5 * (-var_Na_Ca_exchanger__i_NaCa + var_L_type_Ca_channel__i_CaCa + var_T_type_Ca_channel__i_Ca_T + var_calcium_background_current__i_Ca_b + var_sarcolemmal_calcium_pump__i_p_Ca) * var_ionic_concentrations__A_cap / (var_ionic_concentrations__V_myo * var_membrane__F)) : ((var_chaste_interface__calcium_dynamics__APtrack2 > 0.01) ? (0) : (-500.0 * var_chaste_interface__calcium_dynamics__Cainfluxtrack))); // 1 / second + const double d_dt_chaste_interface_var_calcium_dynamics__Cainfluxtrack = 0.001 * var_calcium_dynamics__Cainfluxtrack_orig_deriv; // 1 / millisecond + const double var_slow_delayed_rectifier_potassium_current__PNaK = 0.018329999999999999; // dimensionless + const double var_slow_delayed_rectifier_potassium_current__E_Ks = var_membrane__R * var_membrane__T * log((var_ionic_concentrations__Nao * var_slow_delayed_rectifier_potassium_current__PNaK + var_ionic_concentrations__Ko) / (var_chaste_interface__ionic_concentrations__Nai * var_slow_delayed_rectifier_potassium_current__PNaK + var_chaste_interface__ionic_concentrations__Ki)) / var_membrane__F; // millivolt + const double var_slow_delayed_rectifier_potassium_current__g_Ks = 0.433 * (1.0 + 0.59999999999999998 / (1.0 + 6.4818210260626455e-7 * pow((1 / var_chaste_interface__calcium_dynamics__Cai), 1.3999999999999999))) * NV_Ith_S(mParameters, 1); // milliS_per_microF + const double var_slow_delayed_rectifier_potassium_current_xs1_gate__tau_xs1 = 0.001 * ((fabs(30.0 + var_chaste_interface__membrane__V) < 1.455604075689676e-6) ? (1 / (-1.0465793304208771e-10 / (1.0 - exp(2.1542940320207204e-7)) - 1.9068413391534758e-10 / (-1.0 + exp(-9.9999999999880736e-8)) + 343500.00000040967 * (30.000001455604075 + var_chaste_interface__membrane__V) * (1.0465793304208771e-10 / (1.0 - exp(2.1542940320207204e-7)) + 1.0465793304208771e-10 / (1.0 - exp(-2.1542940320207204e-7)) + 1.9068413391534758e-10 / (-1.0 + exp(9.9999999999880736e-8)) + 1.9068413391534758e-10 / (-1.0 + exp(-9.9999999999880736e-8))))) : (1 / (0.00013100000000000001 * (30.0 + var_chaste_interface__membrane__V) / (-1.0 + exp(2.0609999999999999 + 0.068699999999999997 * var_chaste_interface__membrane__V)) + 7.1899999999999999e-5 * (30.0 + var_chaste_interface__membrane__V) / (1.0 - exp(-4.4399999999999995 - 0.14799999999999999 * var_chaste_interface__membrane__V))))); // second + const double var_slow_delayed_rectifier_potassium_current_xs1_gate__xs1_infinity = 1 / (1.0 + exp(0.089820359281437126 - 0.059880239520958084 * var_chaste_interface__membrane__V)); // dimensionless + const double var_slow_delayed_rectifier_potassium_current_xs1_gate__xs1_orig_deriv = (-var_chaste_interface__slow_delayed_rectifier_potassium_current_xs1_gate__xs1 + var_slow_delayed_rectifier_potassium_current_xs1_gate__xs1_infinity) / var_slow_delayed_rectifier_potassium_current_xs1_gate__tau_xs1; // 1 / second + const double d_dt_chaste_interface_var_slow_delayed_rectifier_potassium_current_xs1_gate__xs1 = 0.001 * var_slow_delayed_rectifier_potassium_current_xs1_gate__xs1_orig_deriv; // 1 / millisecond + const double var_slow_delayed_rectifier_potassium_current_xs2_gate__tau_xs2 = 0.0040000000000000001 * ((fabs(30.0 + var_chaste_interface__membrane__V) < 1.455604075689676e-6) ? (1 / (-1.0465793304208771e-10 / (1.0 - exp(2.1542940320207204e-7)) - 1.9068413391534758e-10 / (-1.0 + exp(-9.9999999999880736e-8)) + 343500.00000040967 * (30.000001455604075 + var_chaste_interface__membrane__V) * (1.0465793304208771e-10 / (1.0 - exp(2.1542940320207204e-7)) + 1.0465793304208771e-10 / (1.0 - exp(-2.1542940320207204e-7)) + 1.9068413391534758e-10 / (-1.0 + exp(9.9999999999880736e-8)) + 1.9068413391534758e-10 / (-1.0 + exp(-9.9999999999880736e-8))))) : (1 / (0.00013100000000000001 * (30.0 + var_chaste_interface__membrane__V) / (-1.0 + exp(2.0609999999999999 + 0.068699999999999997 * var_chaste_interface__membrane__V)) + 7.1899999999999999e-5 * (30.0 + var_chaste_interface__membrane__V) / (1.0 - exp(-4.4399999999999995 - 0.14799999999999999 * var_chaste_interface__membrane__V))))); // second + const double var_slow_delayed_rectifier_potassium_current__i_Ks = (-var_slow_delayed_rectifier_potassium_current__E_Ks + var_chaste_interface__membrane__V) * var_slow_delayed_rectifier_potassium_current__g_Ks * var_chaste_interface__slow_delayed_rectifier_potassium_current_xs1_gate__xs1 * var_chaste_interface__slow_delayed_rectifier_potassium_current_xs2_gate__xs2; // microA_per_microF + const double var_slow_delayed_rectifier_potassium_current_xs2_gate__xs2_infinity = 1 / (1.0 + exp(0.089820359281437126 - 0.059880239520958084 * var_chaste_interface__membrane__V)); // dimensionless + const double var_slow_delayed_rectifier_potassium_current_xs2_gate__xs2_orig_deriv = (-var_chaste_interface__slow_delayed_rectifier_potassium_current_xs2_gate__xs2 + var_slow_delayed_rectifier_potassium_current_xs2_gate__xs2_infinity) / var_slow_delayed_rectifier_potassium_current_xs2_gate__tau_xs2; // 1 / second + const double d_dt_chaste_interface_var_slow_delayed_rectifier_potassium_current_xs2_gate__xs2 = 0.001 * var_slow_delayed_rectifier_potassium_current_xs2_gate__xs2_orig_deriv; // 1 / millisecond + const double var_sodium_activated_potassium_current__g_K_Na = 0; // milliS_per_microF + const double var_sodium_activated_potassium_current__kdKNa = 66.0; // millimolar + const double var_sodium_activated_potassium_current__nKNa = 2.7999999999999998; // dimensionless + const double var_sodium_activated_potassium_current__pona = 0.84999999999999998 / (1.0 + pow((var_sodium_activated_potassium_current__kdKNa / var_chaste_interface__ionic_concentrations__Nai), var_sodium_activated_potassium_current__nKNa)); // dimensionless + const double var_sodium_activated_potassium_current__pov = 0.80000000000000004 - 0.65000000000000002 / (1.0 + exp(8.3333333333333339 + 0.066666666666666666 * var_chaste_interface__membrane__V)); // dimensionless + const double var_sodium_background_current__g_Nab = 0.0040000000000000001; // milliS_per_microF + const double var_sodium_background_current__i_Na_b = (-var_fast_sodium_current__E_Na + var_chaste_interface__membrane__V) * var_sodium_background_current__g_Nab; // microA_per_microF + const double var_sodium_potassium_pump__I_NaK = 2.25; // microA_per_microF + const double var_sodium_potassium_pump__K_mKo = 1.5; // millimolar + const double var_sodium_potassium_pump__K_mNai = 10.0; // millimolar + const double var_sodium_potassium_pump__sigma = -0.14285714285714285 + 0.14285714285714285 * exp(0.01485884101040119 * var_ionic_concentrations__Nao); // dimensionless + const double var_sodium_potassium_pump__f_NaK = 1 / (1.0 + 0.1245 * exp(-0.10000000000000001 * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T)) + 0.036499999999999998 * var_sodium_potassium_pump__sigma * exp(-var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))); // dimensionless + const double var_sodium_potassium_pump__i_NaK = var_ionic_concentrations__Ko * var_sodium_potassium_pump__I_NaK * var_sodium_potassium_pump__f_NaK / ((1.0 + pow(var_sodium_potassium_pump__K_mNai, 2) / pow(var_chaste_interface__ionic_concentrations__Nai, 2)) * (var_ionic_concentrations__Ko + var_sodium_potassium_pump__K_mKo)); // microA_per_microF + const double var_ionic_concentrations__Nai_orig_deriv = (-var_L_type_Ca_channel__i_CaNa - var_fast_sodium_current__i_Na - var_non_specific_calcium_activated_current__i_ns_Na - var_sodium_background_current__i_Na_b - 3.0 * var_Na_Ca_exchanger__i_NaCa - 3.0 * var_sodium_potassium_pump__i_NaK) * var_ionic_concentrations__A_cap / (var_ionic_concentrations__V_myo * var_membrane__F); // millimolar / second + const double d_dt_chaste_interface_var_ionic_concentrations__Nai = 0.001 * var_ionic_concentrations__Nai_orig_deriv; // millimolar / millisecond + const double var_time_independent_potassium_current__E_K = var_membrane__R * var_membrane__T * log(var_ionic_concentrations__Ko / var_chaste_interface__ionic_concentrations__Ki) / var_membrane__F; // millivolt + const double var_ATP_sensitive_potassium_current__i_K_ATP = (-var_time_independent_potassium_current__E_K + var_chaste_interface__membrane__V) * var_ATP_sensitive_potassium_current__GKbaraATP; // microA_per_microF + const double var_plateau_potassium_current__i_Kp = (-var_time_independent_potassium_current__E_K + var_chaste_interface__membrane__V) * var_plateau_potassium_current__Kp * var_plateau_potassium_current__g_Kp; // microA_per_microF + const double var_rapid_delayed_rectifier_potassium_current__i_Kr = (-var_time_independent_potassium_current__E_K + var_chaste_interface__membrane__V) * var_rapid_delayed_rectifier_potassium_current__Rect * var_rapid_delayed_rectifier_potassium_current__g_Kr * var_chaste_interface__rapid_delayed_rectifier_potassium_current_xr_gate__xr; // microA_per_microF + const double var_sodium_activated_potassium_current__i_K_Na = (-var_time_independent_potassium_current__E_K + var_chaste_interface__membrane__V) * var_sodium_activated_potassium_current__g_K_Na * var_sodium_activated_potassium_current__pona * var_sodium_activated_potassium_current__pov; // microA_per_microF + const double var_time_independent_potassium_current__g_K1 = 0.3227486121839514 * sqrt(var_ionic_concentrations__Ko); // milliS_per_cm2 + const double var_time_independent_potassium_current_K1_gate__alpha_K1 = 1020.0 / (1.0 + exp(-14.1227775 + 0.23849999999999999 * var_chaste_interface__membrane__V - 0.23849999999999999 * var_time_independent_potassium_current__E_K)); // per_second + const double var_time_independent_potassium_current_K1_gate__beta_K1 = 1000.0 * (0.49124000000000001 * exp(0.43983232 + 0.080320000000000003 * var_chaste_interface__membrane__V - 0.080320000000000003 * var_time_independent_potassium_current__E_K) + exp(-36.698642499999998 + 0.061749999999999999 * var_chaste_interface__membrane__V - 0.061749999999999999 * var_time_independent_potassium_current__E_K)) / (1.0 + exp(-2.4444678999999998 + 0.51429999999999998 * var_time_independent_potassium_current__E_K - 0.51429999999999998 * var_chaste_interface__membrane__V)); // per_second + const double var_time_independent_potassium_current_K1_gate__K1_infinity = var_time_independent_potassium_current_K1_gate__alpha_K1 / (var_time_independent_potassium_current_K1_gate__alpha_K1 + var_time_independent_potassium_current_K1_gate__beta_K1); // dimensionless + const double var_time_independent_potassium_current__i_K1 = (-var_time_independent_potassium_current__E_K + var_chaste_interface__membrane__V) * var_time_independent_potassium_current__g_K1 * var_time_independent_potassium_current_K1_gate__K1_infinity; // microA_per_microF + const double var_transient_outward_current__g_to = 0.5 * NV_Ith_S(mParameters, 2); // milliS_per_microF + const double var_transient_outward_current__rvdv = exp(0.01 * var_chaste_interface__membrane__V); // dimensionless + const double var_transient_outward_current_ydv_gate__alpha_ydv = 15.0 / (1.0 + exp(12.0 + 0.20000000000000001 * var_chaste_interface__membrane__V)); // per_second + const double var_transient_outward_current_ydv_gate__beta_ydv = 100.0 * exp(5.0 + 0.20000000000000001 * var_chaste_interface__membrane__V) / (1.0 + exp(5.0 + 0.20000000000000001 * var_chaste_interface__membrane__V)); // per_second + const double var_transient_outward_current_ydv_gate__tau_ydv = 1 / (var_transient_outward_current_ydv_gate__alpha_ydv + var_transient_outward_current_ydv_gate__beta_ydv); // second + const double var_transient_outward_current_ydv_gate__ydv_ss = var_transient_outward_current_ydv_gate__alpha_ydv / (var_transient_outward_current_ydv_gate__alpha_ydv + var_transient_outward_current_ydv_gate__beta_ydv); // dimensionless + const double var_transient_outward_current_ydv_gate__ydv_orig_deriv = (-var_chaste_interface__transient_outward_current_ydv_gate__ydv + var_transient_outward_current_ydv_gate__ydv_ss) / var_transient_outward_current_ydv_gate__tau_ydv; // 1 / second + const double d_dt_chaste_interface_var_transient_outward_current_ydv_gate__ydv = 0.001 * var_transient_outward_current_ydv_gate__ydv_orig_deriv; // 1 / millisecond + const double var_transient_outward_current_zdv_gate__alpha_zdv = 10000.0 * exp(-1.6000000000000001 + 0.040000000000000001 * var_chaste_interface__membrane__V) / (1.0 + exp(-1.6000000000000001 + 0.040000000000000001 * var_chaste_interface__membrane__V)); // per_second + const double var_transient_outward_current_zdv_gate__beta_zdv = 10000.0 * exp(-3.6000000000000001 - 0.040000000000000001 * var_chaste_interface__membrane__V) / (1.0 + exp(-3.6000000000000001 - 0.040000000000000001 * var_chaste_interface__membrane__V)); // per_second + const double var_transient_outward_current_zdv_gate__tau_zdv = 1 / (var_transient_outward_current_zdv_gate__alpha_zdv + var_transient_outward_current_zdv_gate__beta_zdv); // second + const double var_transient_outward_current__i_to = pow(var_chaste_interface__transient_outward_current_zdv_gate__zdv, 3) * (-var_time_independent_potassium_current__E_K + var_chaste_interface__membrane__V) * var_transient_outward_current__g_to * var_transient_outward_current__rvdv * var_chaste_interface__transient_outward_current_ydv_gate__ydv; // microA_per_microF + const double var_ionic_concentrations__Ki_orig_deriv = (-var_ATP_sensitive_potassium_current__i_K_ATP - var_L_type_Ca_channel__i_CaK - var_non_specific_calcium_activated_current__i_ns_K - var_plateau_potassium_current__i_Kp - var_rapid_delayed_rectifier_potassium_current__i_Kr - var_slow_delayed_rectifier_potassium_current__i_Ks - var_sodium_activated_potassium_current__i_K_Na - var_time_independent_potassium_current__i_K1 - var_transient_outward_current__i_to + 2.0 * var_sodium_potassium_pump__i_NaK) * var_ionic_concentrations__A_cap / (var_ionic_concentrations__V_myo * var_membrane__F); // millimolar / second + const double d_dt_chaste_interface_var_ionic_concentrations__Ki = 0.001 * var_ionic_concentrations__Ki_orig_deriv; // millimolar / millisecond + const double var_membrane__dVdt = -(var_ATP_sensitive_potassium_current__i_K_ATP + var_L_type_Ca_channel__i_Ca_L + var_Na_Ca_exchanger__i_NaCa + var_T_type_Ca_channel__i_Ca_T + var_calcium_background_current__i_Ca_b + var_fast_sodium_current__i_Na + var_membrane__I_st + var_non_specific_calcium_activated_current__i_ns_Ca + var_plateau_potassium_current__i_Kp + var_rapid_delayed_rectifier_potassium_current__i_Kr + var_sarcolemmal_calcium_pump__i_p_Ca + var_slow_delayed_rectifier_potassium_current__i_Ks + var_sodium_activated_potassium_current__i_K_Na + var_sodium_background_current__i_Na_b + var_sodium_potassium_pump__i_NaK + var_time_independent_potassium_current__i_K1 + var_transient_outward_current__i_to) / NV_Ith_S(mParameters, 3); // dimensionless + const double var_calcium_dynamics__APtrack_orig_deriv = ((var_membrane__dVdt > 150000.0) ? (100000.0 - 100500.0 * var_chaste_interface__calcium_dynamics__APtrack) : (-500.0 * var_chaste_interface__calcium_dynamics__APtrack)); // 1 / second + const double d_dt_chaste_interface_var_calcium_dynamics__APtrack = 0.001 * var_calcium_dynamics__APtrack_orig_deriv; // 1 / millisecond + const double var_transient_outward_current_zdv_gate__zdv_ss = var_transient_outward_current_zdv_gate__alpha_zdv / (var_transient_outward_current_zdv_gate__alpha_zdv + var_transient_outward_current_zdv_gate__beta_zdv); // dimensionless + const double var_transient_outward_current_zdv_gate__zdv_orig_deriv = (-var_chaste_interface__transient_outward_current_zdv_gate__zdv + var_transient_outward_current_zdv_gate__zdv_ss) / var_transient_outward_current_zdv_gate__tau_zdv; // 1 / second + const double d_dt_chaste_interface_var_transient_outward_current_zdv_gate__zdv = 0.001 * var_transient_outward_current_zdv_gate__zdv_orig_deriv; // 1 / millisecond + + if (mSetVoltageDerivativeToZero) + { + d_dt_chaste_interface_var_membrane__V = 0.0; + } + else + { + const double var_membrane__V_orig_deriv = -(var_ATP_sensitive_potassium_current__i_K_ATP + var_L_type_Ca_channel__i_Ca_L + var_Na_Ca_exchanger__i_NaCa + var_T_type_Ca_channel__i_Ca_T + var_calcium_background_current__i_Ca_b + var_fast_sodium_current__i_Na + var_membrane__I_st + var_non_specific_calcium_activated_current__i_ns_Ca + var_plateau_potassium_current__i_Kp + var_rapid_delayed_rectifier_potassium_current__i_Kr + var_sarcolemmal_calcium_pump__i_p_Ca + var_slow_delayed_rectifier_potassium_current__i_Ks + var_sodium_activated_potassium_current__i_K_Na + var_sodium_background_current__i_Na_b + var_sodium_potassium_pump__i_NaK + var_time_independent_potassium_current__i_K1 + var_transient_outward_current__i_to) / NV_Ith_S(mParameters, 3); // millivolt / second + d_dt_chaste_interface_var_membrane__V = 0.001 * var_membrane__V_orig_deriv; // millivolt / millisecond + } + + NV_Ith_S(rDY,0) = d_dt_chaste_interface_var_membrane__V; + NV_Ith_S(rDY,1) = d_dt_chaste_interface_var_calcium_dynamics__Cai; + NV_Ith_S(rDY,2) = d_dt_chaste_interface_var_fast_sodium_current_m_gate__m; + NV_Ith_S(rDY,3) = d_dt_chaste_interface_var_fast_sodium_current_h_gate__h; + NV_Ith_S(rDY,4) = d_dt_chaste_interface_var_fast_sodium_current_j_gate__j; + NV_Ith_S(rDY,5) = d_dt_chaste_interface_var_L_type_Ca_channel_d_gate__d; + NV_Ith_S(rDY,6) = d_dt_chaste_interface_var_L_type_Ca_channel_f_gate__f; + NV_Ith_S(rDY,7) = d_dt_chaste_interface_var_T_type_Ca_channel_b_gate__b; + NV_Ith_S(rDY,8) = d_dt_chaste_interface_var_T_type_Ca_channel_g_gate__g; + NV_Ith_S(rDY,9) = d_dt_chaste_interface_var_rapid_delayed_rectifier_potassium_current_xr_gate__xr; + NV_Ith_S(rDY,10) = d_dt_chaste_interface_var_slow_delayed_rectifier_potassium_current_xs1_gate__xs1; + NV_Ith_S(rDY,11) = d_dt_chaste_interface_var_slow_delayed_rectifier_potassium_current_xs2_gate__xs2; + NV_Ith_S(rDY,12) = d_dt_chaste_interface_var_transient_outward_current_zdv_gate__zdv; + NV_Ith_S(rDY,13) = d_dt_chaste_interface_var_transient_outward_current_ydv_gate__ydv; + NV_Ith_S(rDY,14) = d_dt_chaste_interface_var_calcium_dynamics__Ca_JSR; + NV_Ith_S(rDY,15) = d_dt_chaste_interface_var_calcium_dynamics__Ca_NSR; + NV_Ith_S(rDY,16) = d_dt_chaste_interface_var_calcium_dynamics__APtrack; + NV_Ith_S(rDY,17) = d_dt_chaste_interface_var_calcium_dynamics__APtrack2; + NV_Ith_S(rDY,18) = d_dt_chaste_interface_var_calcium_dynamics__APtrack3; + NV_Ith_S(rDY,19) = d_dt_chaste_interface_var_calcium_dynamics__Cainfluxtrack; + NV_Ith_S(rDY,20) = d_dt_chaste_interface_var_calcium_dynamics__OVRLDtrack; + NV_Ith_S(rDY,21) = d_dt_chaste_interface_var_calcium_dynamics__OVRLDtrack2; + NV_Ith_S(rDY,22) = d_dt_chaste_interface_var_calcium_dynamics__OVRLDtrack3; + NV_Ith_S(rDY,23) = d_dt_chaste_interface_var_ionic_concentrations__Nai; + NV_Ith_S(rDY,24) = d_dt_chaste_interface_var_ionic_concentrations__Ki; + } + + N_Vector CellFaberRudy2000FromCellMLCvode::ComputeDerivedQuantities(double var_chaste_interface__environment__time_converted, const N_Vector & rY) + { + // Inputs: + // Time units: millisecond + + // Mathematics + const double var_membrane__I_st_converted = GetIntracellularAreaStimulus(var_chaste_interface__environment__time_converted); // uA_per_cm2 + +#if CHASTE_SUNDIALS_VERSION >= 60000 + N_Vector dqs = N_VNew_Serial(2, CvodeContextManager::Instance()->GetSundialsContext()); +#else + N_Vector dqs = N_VNew_Serial(2); +#endif + NV_Ith_S(dqs, 0) = var_chaste_interface__environment__time_converted; + NV_Ith_S(dqs, 1) = var_membrane__I_st_converted; + return dqs; + } + +template<> +void OdeSystemInformation::Initialise(void) +{ + this->mSystemName = "LR_Dynamic_model_2000"; + this->mFreeVariableName = "environment__time"; + this->mFreeVariableUnits = "millisecond"; + + // NV_Ith_S(rY, 0): + this->mVariableNames.push_back("membrane_voltage"); + this->mVariableUnits.push_back("millivolt"); + this->mInitialConditions.push_back(-90.0); + + // NV_Ith_S(rY, 1): + this->mVariableNames.push_back("cytosolic_calcium_concentration"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(6e-05); + + // NV_Ith_S(rY, 2): + this->mVariableNames.push_back("fast_sodium_current_m_gate__m"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.0008); + + // NV_Ith_S(rY, 3): + this->mVariableNames.push_back("fast_sodium_current_h_gate__h"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.993771); + + // NV_Ith_S(rY, 4): + this->mVariableNames.push_back("fast_sodium_current_j_gate__j"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.995727); + + // NV_Ith_S(rY, 5): + this->mVariableNames.push_back("L_type_Ca_channel_d_gate__d"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(3.210618e-06); + + // NV_Ith_S(rY, 6): + this->mVariableNames.push_back("L_type_Ca_channel_f_gate__f"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.999837); + + // NV_Ith_S(rY, 7): + this->mVariableNames.push_back("T_type_Ca_channel_b_gate__b"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.000970231); + + // NV_Ith_S(rY, 8): + this->mVariableNames.push_back("T_type_Ca_channel_g_gate__g"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.994305); + + // NV_Ith_S(rY, 9): + this->mVariableNames.push_back("rapid_delayed_rectifier_potassium_current_xr_gate__xr"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.000124042); + + // NV_Ith_S(rY, 10): + this->mVariableNames.push_back("slow_delayed_rectifier_potassium_current_xs1_gate__xs1"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.00445683); + + // NV_Ith_S(rY, 11): + this->mVariableNames.push_back("slow_delayed_rectifier_potassium_current_xs2_gate__xs2"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.00445683); + + // NV_Ith_S(rY, 12): + this->mVariableNames.push_back("transient_outward_current_zdv_gate__zdv"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.5); + + // NV_Ith_S(rY, 13): + this->mVariableNames.push_back("transient_outward_current_ydv_gate__ydv"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.5); + + // NV_Ith_S(rY, 14): + this->mVariableNames.push_back("calcium_dynamics__Ca_JSR"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(1.8); + + // NV_Ith_S(rY, 15): + this->mVariableNames.push_back("calcium_dynamics__Ca_NSR"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(1.8); + + // NV_Ith_S(rY, 16): + this->mVariableNames.push_back("calcium_dynamics__APtrack"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.0); + + // NV_Ith_S(rY, 17): + this->mVariableNames.push_back("calcium_dynamics__APtrack2"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.0); + + // NV_Ith_S(rY, 18): + this->mVariableNames.push_back("calcium_dynamics__APtrack3"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.0); + + // NV_Ith_S(rY, 19): + this->mVariableNames.push_back("calcium_dynamics__Cainfluxtrack"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.0); + + // NV_Ith_S(rY, 20): + this->mVariableNames.push_back("calcium_dynamics__OVRLDtrack"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.0); + + // NV_Ith_S(rY, 21): + this->mVariableNames.push_back("calcium_dynamics__OVRLDtrack2"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.0); + + // NV_Ith_S(rY, 22): + this->mVariableNames.push_back("calcium_dynamics__OVRLDtrack3"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.0); + + // NV_Ith_S(rY, 23): + this->mVariableNames.push_back("ionic_concentrations__Nai"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(9.0); + + // NV_Ith_S(rY, 24): + this->mVariableNames.push_back("ionic_concentrations__Ki"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(141.2); + + // mParameters[0]: + this->mParameterNames.push_back("ScaleFactorGkr"); + this->mParameterUnits.push_back("dimensionless"); + + // mParameters[1]: + this->mParameterNames.push_back("ScaleFactorGks"); + this->mParameterUnits.push_back("dimensionless"); + + // mParameters[2]: + this->mParameterNames.push_back("ScaleFactorIto"); + this->mParameterUnits.push_back("dimensionless"); + + // mParameters[3]: + this->mParameterNames.push_back("membrane_capacitance"); + this->mParameterUnits.push_back("microF"); + + // Derived Quantity index [0]: + this->mDerivedQuantityNames.push_back("environment__time"); + this->mDerivedQuantityUnits.push_back("millisecond"); + + // Derived Quantity index [1]: + this->mDerivedQuantityNames.push_back("membrane_stimulus_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + this->mInitialised = true; +} + +// Serialization for Boost >= 1.36 +#include "SerializationExportWrapperForCpp.hpp" +CHASTE_CLASS_EXPORT(CellFaberRudy2000FromCellMLCvode) + +#endif // CHASTE_CVODE diff --git a/chaste_codegen/tests/numerical/baseline/Cvode/difrancesco_noble_model_1985.cpp b/chaste_codegen/tests/numerical/baseline/Cvode/difrancesco_noble_model_1985.cpp new file mode 100644 index 00000000..ec8ce516 --- /dev/null +++ b/chaste_codegen/tests/numerical/baseline/Cvode/difrancesco_noble_model_1985.cpp @@ -0,0 +1,744 @@ +#ifdef CHASTE_CVODE +//! @file +//! +//! This source file was generated from CellML by chaste_codegen version (version omitted as unimportant) +//! +//! Model: difrancesco_noble_model_1985 +//! +//! Processed by chaste_codegen: https://github.com/ModellingWebLab/chaste-codegen +//! (translator: chaste_codegen, model type: NumericCvode) +//! on (date omitted as unimportant) +//! +//! + +#include "difrancesco_noble_model_1985.hpp" +#include +#include +#include +#include +#include "Exception.hpp" +#include "OdeSystemInformation.hpp" +#include "RegularStimulus.hpp" +#include "HeartConfig.hpp" +#include "IsNan.hpp" +#include "MathsCustomFunctions.hpp" + +#if CHASTE_SUNDIALS_VERSION >= 60000 +#include "CvodeContextManager.hpp" +#endif + + + + + + boost::shared_ptr Celldifrancesco_noble_model_1985FromCellMLCvode::UseCellMLDefaultStimulus() + { + // Use the default stimulus specified by CellML metadata + const double var_chaste_interface__stimulus__stim_amplitude_converted = -0.5 * HeartConfig::Instance()->GetCapacitance() / NV_Ith_S(mParameters, 8); // uA_per_cm2 + const double var_chaste_interface__stimulus__stim_duration_converted = 5; // millisecond + const double var_chaste_interface__stimulus__stim_period_converted = 1000; // millisecond + const double var_chaste_interface__stimulus__stim_start_converted = 100; // millisecond + boost::shared_ptr p_cellml_stim(new RegularStimulus( + -fabs(var_chaste_interface__stimulus__stim_amplitude_converted), + var_chaste_interface__stimulus__stim_duration_converted, + var_chaste_interface__stimulus__stim_period_converted, + var_chaste_interface__stimulus__stim_start_converted + )); + mpIntracellularStimulus = p_cellml_stim; + return p_cellml_stim; + } + + double Celldifrancesco_noble_model_1985FromCellMLCvode::GetIntracellularCalciumConcentration() + { + return NV_Ith_S(mStateVariables, 1); + } + + Celldifrancesco_noble_model_1985FromCellMLCvode::Celldifrancesco_noble_model_1985FromCellMLCvode(boost::shared_ptr pOdeSolver /* unused; should be empty */, boost::shared_ptr pIntracellularStimulus) + : AbstractCvodeCell( + pOdeSolver, + 16, + 0, + pIntracellularStimulus) + { + // Time units: millisecond + // + this->mpSystemInfo = OdeSystemInformation::Instance(); + Init(); + + // We have a default stimulus specified in the CellML file metadata + this->mHasDefaultStimulusFromCellML = true; + + NV_Ith_S(this->mParameters, 0) = 1; // (var_intracellular_calcium_concentration__release_factor) [dimensionless] + NV_Ith_S(this->mParameters, 1) = 0.001; // (var_intracellular_calcium_concentration__K_mCa) [millimolar] + NV_Ith_S(this->mParameters, 2) = 1; // (var_intracellular_calcium_concentration__uptake_factor) [dimensionless] + NV_Ith_S(this->mParameters, 3) = 4; // (var_extracellular_potassium_concentration__Kb) [millimolar] + NV_Ith_S(this->mParameters, 4) = 1; // (var_intracellular_sodium_concentration__conc_clamp) [dimensionless] + NV_Ith_S(this->mParameters, 5) = 2; // (var_extracellular_calcium_concentration__Cao) [millimolar] + NV_Ith_S(this->mParameters, 6) = 140; // (var_extracellular_sodium_concentration__Nao) [millimolar] + NV_Ith_S(this->mParameters, 7) = 15; // (var_second_inward_current__P_si) [nanoA_per_millimolar] + NV_Ith_S(this->mParameters, 8) = 0.074999999999999997; // (var_membrane__C) [microF] + NV_Ith_S(this->mParameters, 9) = 180; // (var_time_dependent_potassium_current__i_K_max) [nanoA] + NV_Ith_S(this->mParameters, 10) = 750; // (var_fast_sodium_current__g_Na) [microS] + NV_Ith_S(this->mParameters, 11) = 0; // (var_fast_sodium_current__perc_reduced_inact_for_IpNa) [dimensionless] + NV_Ith_S(this->mParameters, 12) = 0; // (var_fast_sodium_current__shift_INa_inact) [millivolt] + NV_Ith_S(this->mParameters, 13) = 3; // (var_hyperpolarising_activated_current__g_f_K) [microS] + NV_Ith_S(this->mParameters, 14) = 3; // (var_hyperpolarising_activated_current__g_f_Na) [microS] + NV_Ith_S(this->mParameters, 15) = 920; // (var_time_independent_potassium_current__g_K1) [microS] + NV_Ith_S(this->mParameters, 16) = 0.02; // (var_Na_Ca_exchanger__K_NaCa) [nanoA] + NV_Ith_S(this->mParameters, 17) = 0.28000000000000003; // (var_transient_outward_current__g_to) [microS_per_millimolar] + } + + Celldifrancesco_noble_model_1985FromCellMLCvode::~Celldifrancesco_noble_model_1985FromCellMLCvode() + { + } + + + void Celldifrancesco_noble_model_1985FromCellMLCvode::VerifyStateVariables() + { + + const double tol = 100*this->mAbsTol; + N_Vector rY = rGetStateVariables(); + std::string error_message = ""; + + for (unsigned i=0; i < 16; i++) + { + if(std::isnan(NV_Ith_S(rY, i))){ + error_message += "State variable " + this->rGetStateVariableNames()[i] + " is not a number\n"; + } + if(std::isinf(NV_Ith_S(rY, i))){ + error_message += "State variable " + this->rGetStateVariableNames()[i] + " has become INFINITE\n"; + } + if(this->is_concentration[i] && NV_Ith_S(rY, i) < -tol) + { + error_message += "Concentration " + this->rGetStateVariableNames()[i] + " below 0\n"; + } + if(this->is_probability[i] && NV_Ith_S(rY, i) < -tol) + { + error_message += "Probability " + this->rGetStateVariableNames()[i] + " below 0\n"; + } + if(this->is_probability[i] && NV_Ith_S(rY, i) > 1 + tol) + { + error_message += "Probability " + this->rGetStateVariableNames()[i] + " above 1\n"; + } + } + if (error_message != ""){ + EXCEPTION(DumpState(error_message)); + } + } + + double Celldifrancesco_noble_model_1985FromCellMLCvode::GetIIonic(const std::vector* pStateVariables) + { + // For state variable interpolation (SVI) we read in interpolated state variables, + // otherwise for ionic current interpolation (ICI) we use the state variables of this model (node). + N_Vector rY; + bool made_new_cvode_vector = false; + if (!pStateVariables) + { + rY = rGetStateVariables(); + } + else + { + made_new_cvode_vector = true; + rY = MakeNVector(*pStateVariables); + } + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : NV_Ith_S(rY, 0)); + // Units: millivolt; Initial value: -87.0 + double var_chaste_interface__intracellular_calcium_concentration__Cai = NV_Ith_S(rY, 1); + // Units: millimolar; Initial value: 5e-05 + double var_chaste_interface__hyperpolarising_activated_current_y_gate__y = NV_Ith_S(rY, 2); + // Units: dimensionless; Initial value: 0.2 + double var_chaste_interface__time_dependent_potassium_current_x_gate__x = NV_Ith_S(rY, 3); + // Units: dimensionless; Initial value: 0.01 + double var_chaste_interface__transient_outward_current_s_gate__s = NV_Ith_S(rY, 4); + // Units: dimensionless; Initial value: 1.0 + double var_chaste_interface__fast_sodium_current_m_gate__m = NV_Ith_S(rY, 5); + // Units: dimensionless; Initial value: 0.01 + double var_chaste_interface__fast_sodium_current_h_gate__h = NV_Ith_S(rY, 6); + // Units: dimensionless; Initial value: 0.8 + double var_chaste_interface__second_inward_current_d_gate__d = NV_Ith_S(rY, 7); + // Units: dimensionless; Initial value: 0.005 + double var_chaste_interface__second_inward_current_f_gate__f = NV_Ith_S(rY, 8); + // Units: dimensionless; Initial value: 1.0 + double var_chaste_interface__second_inward_current_f2_gate__f2 = NV_Ith_S(rY, 9); + // Units: dimensionless; Initial value: 1.0 + double var_chaste_interface__intracellular_sodium_concentration__Nai = NV_Ith_S(rY, 10); + // Units: millimolar; Initial value: 8.0 + double var_chaste_interface__extracellular_potassium_concentration__Kc = NV_Ith_S(rY, 14); + // Units: millimolar; Initial value: 4.0 + double var_chaste_interface__intracellular_potassium_concentration__Ki = NV_Ith_S(rY, 15); + // Units: millimolar; Initial value: 140.0 + + const double var_Na_Ca_exchanger__d_NaCa = 0.001; // dimensionless + const double var_Na_Ca_exchanger__gamma = 0.5; // dimensionless + const double var_Na_Ca_exchanger__n_NaCa = 3; // dimensionless + const double var_calcium_background_current__g_Cab = 0.02; // microS + const double var_hyperpolarising_activated_current__Km_f = 45; // millimolar + const double var_membrane__F = 96485.341499999995; // coulomb_per_mole + const double var_membrane__R = 8314.4719999999998; // joule_per_kilomole_kelvin + const double var_membrane__T = 310; // kelvin + const double var_membrane__RTONF = var_membrane__R * var_membrane__T / var_membrane__F; // millivolt + const double var_calcium_background_current__E_Ca = 0.5 * var_membrane__RTONF * log(NV_Ith_S(mParameters, 5) / var_chaste_interface__intracellular_calcium_concentration__Cai); // millivolt + const double var_fast_sodium_current__E_mh = var_membrane__RTONF * log((NV_Ith_S(mParameters, 6) + 0.12 * var_chaste_interface__extracellular_potassium_concentration__Kc) / (var_chaste_interface__intracellular_sodium_concentration__Nai + 0.12 * var_chaste_interface__intracellular_potassium_concentration__Ki)); // millivolt + const double var_hyperpolarising_activated_current__E_K = var_membrane__RTONF * log(var_chaste_interface__extracellular_potassium_concentration__Kc / var_chaste_interface__intracellular_potassium_concentration__Ki); // millivolt + const double var_hyperpolarising_activated_current__E_Na = var_membrane__RTONF * log(NV_Ith_S(mParameters, 6) / var_chaste_interface__intracellular_sodium_concentration__Nai); // millivolt + const double var_Na_Ca_exchanger__i_NaCa = (pow(var_chaste_interface__intracellular_sodium_concentration__Nai, var_Na_Ca_exchanger__n_NaCa) * NV_Ith_S(mParameters, 5) * exp((-2 + var_Na_Ca_exchanger__n_NaCa) * var_Na_Ca_exchanger__gamma * var_chaste_interface__membrane__V / var_membrane__RTONF) - pow(NV_Ith_S(mParameters, 6), var_Na_Ca_exchanger__n_NaCa) * var_chaste_interface__intracellular_calcium_concentration__Cai * exp((-1 + var_Na_Ca_exchanger__gamma) * (-2 + var_Na_Ca_exchanger__n_NaCa) * var_chaste_interface__membrane__V / var_membrane__RTONF)) * NV_Ith_S(mParameters, 16) / ((1 + 144.92753623188406 * var_chaste_interface__intracellular_calcium_concentration__Cai) * (1 + (pow(NV_Ith_S(mParameters, 6), var_Na_Ca_exchanger__n_NaCa) * var_chaste_interface__intracellular_calcium_concentration__Cai + pow(var_chaste_interface__intracellular_sodium_concentration__Nai, var_Na_Ca_exchanger__n_NaCa) * NV_Ith_S(mParameters, 5)) * var_Na_Ca_exchanger__d_NaCa)); // nanoA + const double var_Na_Ca_exchanger__i_NaCa_converted = 0.001 * HeartConfig::Instance()->GetCapacitance() * var_Na_Ca_exchanger__i_NaCa / NV_Ith_S(mParameters, 8); // uA_per_cm2 + const double var_calcium_background_current__i_Ca_b = (-var_calcium_background_current__E_Ca + var_chaste_interface__membrane__V) * var_calcium_background_current__g_Cab; // nanoA + const double var_fast_sodium_current__i_Na = pow(var_chaste_interface__fast_sodium_current_m_gate__m, 3) * (-var_fast_sodium_current__E_mh + var_chaste_interface__membrane__V) * NV_Ith_S(mParameters, 10) * var_chaste_interface__fast_sodium_current_h_gate__h; // nanoA + const double var_fast_sodium_current__i_Na_converted = 0.001 * HeartConfig::Instance()->GetCapacitance() * var_fast_sodium_current__i_Na / NV_Ith_S(mParameters, 8); // uA_per_cm2 + const double var_hyperpolarising_activated_current__i_fK = (-var_hyperpolarising_activated_current__E_K + var_chaste_interface__membrane__V) * var_chaste_interface__extracellular_potassium_concentration__Kc * NV_Ith_S(mParameters, 13) * var_chaste_interface__hyperpolarising_activated_current_y_gate__y / (var_chaste_interface__extracellular_potassium_concentration__Kc + var_hyperpolarising_activated_current__Km_f); // nanoA + const double var_hyperpolarising_activated_current__i_fNa = (-var_hyperpolarising_activated_current__E_Na + var_chaste_interface__membrane__V) * var_chaste_interface__extracellular_potassium_concentration__Kc * NV_Ith_S(mParameters, 14) * var_chaste_interface__hyperpolarising_activated_current_y_gate__y / (var_chaste_interface__extracellular_potassium_concentration__Kc + var_hyperpolarising_activated_current__Km_f); // nanoA + const double var_hyperpolarising_activated_current__i_f = var_hyperpolarising_activated_current__i_fK + var_hyperpolarising_activated_current__i_fNa; // nanoA + const double var_hyperpolarising_activated_current__i_f_converted = 0.001 * HeartConfig::Instance()->GetCapacitance() * var_hyperpolarising_activated_current__i_f / NV_Ith_S(mParameters, 8); // uA_per_cm2 + const double var_second_inward_current__i_siCa = (((var_chaste_interface__membrane__V >= 49.999998664311967) && (var_chaste_interface__membrane__V <= 50.000001335688033)) ? (374338.90823576227 * (-49.999998664311967 + var_chaste_interface__membrane__V) * (1.9999999999556149e-7 * (var_chaste_interface__intracellular_calcium_concentration__Cai * exp(3.7433890822745473) - NV_Ith_S(mParameters, 5) * exp(9.9999999997780743e-8)) * NV_Ith_S(mParameters, 7) * var_chaste_interface__second_inward_current_d_gate__d * var_chaste_interface__second_inward_current_f2_gate__f2 * var_chaste_interface__second_inward_current_f_gate__f / (1 - exp(9.9999999997780743e-8)) + 1.9999999999556149e-7 * (var_chaste_interface__intracellular_calcium_concentration__Cai * exp(3.7433890822745473) - NV_Ith_S(mParameters, 5) * exp(-9.9999999997780743e-8)) * NV_Ith_S(mParameters, 7) * var_chaste_interface__second_inward_current_d_gate__d * var_chaste_interface__second_inward_current_f2_gate__f2 * var_chaste_interface__second_inward_current_f_gate__f / (1 - exp(-9.9999999997780743e-8))) - 1.9999999999556149e-7 * (var_chaste_interface__intracellular_calcium_concentration__Cai * exp(3.7433890822745473) - NV_Ith_S(mParameters, 5) * exp(9.9999999997780743e-8)) * NV_Ith_S(mParameters, 7) * var_chaste_interface__second_inward_current_d_gate__d * var_chaste_interface__second_inward_current_f2_gate__f2 * var_chaste_interface__second_inward_current_f_gate__f / (1 - exp(9.9999999997780743e-8))) : (0.14973556329098189 * (-50 + var_chaste_interface__membrane__V) * (var_chaste_interface__intracellular_calcium_concentration__Cai * exp(3.7433890822745473) - NV_Ith_S(mParameters, 5) * exp(3.7433890822745473 - 0.074867781645490947 * var_chaste_interface__membrane__V)) * NV_Ith_S(mParameters, 7) * var_chaste_interface__second_inward_current_d_gate__d * var_chaste_interface__second_inward_current_f2_gate__f2 * var_chaste_interface__second_inward_current_f_gate__f / (1 - exp(3.7433890822745473 - 0.074867781645490947 * var_chaste_interface__membrane__V)))); // nanoA + const double var_second_inward_current__i_siK = (((var_chaste_interface__membrane__V >= 49.999997328623934) && (var_chaste_interface__membrane__V <= 50.000002671376066)) ? (187169.45411399176 * (-49.999997328623934 + var_chaste_interface__membrane__V) * (9.9999999999858744e-10 * (var_chaste_interface__intracellular_potassium_concentration__Ki * exp(1.8716945411372736) - var_chaste_interface__extracellular_potassium_concentration__Kc * exp(9.9999999999858739e-8)) * NV_Ith_S(mParameters, 7) * var_chaste_interface__second_inward_current_d_gate__d * var_chaste_interface__second_inward_current_f2_gate__f2 * var_chaste_interface__second_inward_current_f_gate__f / (1 - exp(9.9999999999858739e-8)) + 9.9999999999858744e-10 * (var_chaste_interface__intracellular_potassium_concentration__Ki * exp(1.8716945411372736) - var_chaste_interface__extracellular_potassium_concentration__Kc * exp(-9.9999999999858739e-8)) * NV_Ith_S(mParameters, 7) * var_chaste_interface__second_inward_current_d_gate__d * var_chaste_interface__second_inward_current_f2_gate__f2 * var_chaste_interface__second_inward_current_f_gate__f / (1 - exp(-9.9999999999858739e-8))) - 9.9999999999858744e-10 * (var_chaste_interface__intracellular_potassium_concentration__Ki * exp(1.8716945411372736) - var_chaste_interface__extracellular_potassium_concentration__Kc * exp(9.9999999999858739e-8)) * NV_Ith_S(mParameters, 7) * var_chaste_interface__second_inward_current_d_gate__d * var_chaste_interface__second_inward_current_f2_gate__f2 * var_chaste_interface__second_inward_current_f_gate__f / (1 - exp(9.9999999999858739e-8))) : (0.00037433890822745472 * (-50 + var_chaste_interface__membrane__V) * (var_chaste_interface__intracellular_potassium_concentration__Ki * exp(1.8716945411372736) - var_chaste_interface__extracellular_potassium_concentration__Kc * exp(1.8716945411372736 - 0.037433890822745473 * var_chaste_interface__membrane__V)) * NV_Ith_S(mParameters, 7) * var_chaste_interface__second_inward_current_d_gate__d * var_chaste_interface__second_inward_current_f2_gate__f2 * var_chaste_interface__second_inward_current_f_gate__f / (1 - exp(1.8716945411372736 - 0.037433890822745473 * var_chaste_interface__membrane__V)))); // nanoA + const double var_second_inward_current__i_siNa = (((var_chaste_interface__membrane__V >= 49.999997328623934) && (var_chaste_interface__membrane__V <= 50.000002671376066)) ? (187169.45411399176 * (-49.999997328623934 + var_chaste_interface__membrane__V) * (9.9999999999858744e-10 * (var_chaste_interface__intracellular_sodium_concentration__Nai * exp(1.8716945411372736) - NV_Ith_S(mParameters, 6) * exp(9.9999999999858739e-8)) * NV_Ith_S(mParameters, 7) * var_chaste_interface__second_inward_current_d_gate__d * var_chaste_interface__second_inward_current_f2_gate__f2 * var_chaste_interface__second_inward_current_f_gate__f / (1 - exp(9.9999999999858739e-8)) + 9.9999999999858744e-10 * (var_chaste_interface__intracellular_sodium_concentration__Nai * exp(1.8716945411372736) - NV_Ith_S(mParameters, 6) * exp(-9.9999999999858739e-8)) * NV_Ith_S(mParameters, 7) * var_chaste_interface__second_inward_current_d_gate__d * var_chaste_interface__second_inward_current_f2_gate__f2 * var_chaste_interface__second_inward_current_f_gate__f / (1 - exp(-9.9999999999858739e-8))) - 9.9999999999858744e-10 * (var_chaste_interface__intracellular_sodium_concentration__Nai * exp(1.8716945411372736) - NV_Ith_S(mParameters, 6) * exp(9.9999999999858739e-8)) * NV_Ith_S(mParameters, 7) * var_chaste_interface__second_inward_current_d_gate__d * var_chaste_interface__second_inward_current_f2_gate__f2 * var_chaste_interface__second_inward_current_f_gate__f / (1 - exp(9.9999999999858739e-8))) : (0.00037433890822745472 * (-50 + var_chaste_interface__membrane__V) * (var_chaste_interface__intracellular_sodium_concentration__Nai * exp(1.8716945411372736) - NV_Ith_S(mParameters, 6) * exp(1.8716945411372736 - 0.037433890822745473 * var_chaste_interface__membrane__V)) * NV_Ith_S(mParameters, 7) * var_chaste_interface__second_inward_current_d_gate__d * var_chaste_interface__second_inward_current_f2_gate__f2 * var_chaste_interface__second_inward_current_f_gate__f / (1 - exp(1.8716945411372736 - 0.037433890822745473 * var_chaste_interface__membrane__V)))); // nanoA + const double var_second_inward_current__i_si = var_second_inward_current__i_siCa + var_second_inward_current__i_siK + var_second_inward_current__i_siNa; // nanoA + const double var_second_inward_current__i_si_converted = 0.001 * HeartConfig::Instance()->GetCapacitance() * var_second_inward_current__i_si / NV_Ith_S(mParameters, 8); // uA_per_cm2 + const double var_sodium_background_current__g_Nab = 0.17999999999999999; // microS + const double var_sodium_background_current__i_Na_b = (-var_hyperpolarising_activated_current__E_Na + var_chaste_interface__membrane__V) * var_sodium_background_current__g_Nab; // nanoA + const double var_sodium_potassium_pump__I_p = 125; // nanoA + const double var_sodium_potassium_pump__K_mK = 1; // millimolar + const double var_sodium_potassium_pump__K_mNa = 40; // millimolar + const double var_sodium_potassium_pump__i_p = var_chaste_interface__extracellular_potassium_concentration__Kc * var_chaste_interface__intracellular_sodium_concentration__Nai * var_sodium_potassium_pump__I_p / ((var_chaste_interface__extracellular_potassium_concentration__Kc + var_sodium_potassium_pump__K_mK) * (var_chaste_interface__intracellular_sodium_concentration__Nai + var_sodium_potassium_pump__K_mNa)); // nanoA + const double var_time_dependent_potassium_current__I_K = 0.0071428571428571426 * (-var_chaste_interface__extracellular_potassium_concentration__Kc * exp(-var_chaste_interface__membrane__V / var_membrane__RTONF) + var_chaste_interface__intracellular_potassium_concentration__Ki) * NV_Ith_S(mParameters, 9); // nanoA + const double var_time_dependent_potassium_current__i_K = var_time_dependent_potassium_current__I_K * var_chaste_interface__time_dependent_potassium_current_x_gate__x; // nanoA + const double var_time_dependent_potassium_current__i_K_converted = 0.001 * HeartConfig::Instance()->GetCapacitance() * var_time_dependent_potassium_current__i_K / NV_Ith_S(mParameters, 8); // uA_per_cm2 + const double var_time_independent_potassium_current__Km_K1 = 210; // millimolar + const double var_time_independent_potassium_current__i_K1 = (-var_hyperpolarising_activated_current__E_K + var_chaste_interface__membrane__V) * var_chaste_interface__extracellular_potassium_concentration__Kc * NV_Ith_S(mParameters, 15) / ((1 + exp(2 * (10 - var_hyperpolarising_activated_current__E_K + var_chaste_interface__membrane__V) / var_membrane__RTONF)) * (var_chaste_interface__extracellular_potassium_concentration__Kc + var_time_independent_potassium_current__Km_K1)); // nanoA + const double var_time_independent_potassium_current__i_K1_converted = 0.001 * HeartConfig::Instance()->GetCapacitance() * var_time_independent_potassium_current__i_K1 / NV_Ith_S(mParameters, 8); // uA_per_cm2 + const double var_transient_outward_current__i_to = (((var_chaste_interface__membrane__V >= -10.000000500000001) && (var_chaste_interface__membrane__V <= -9.9999994999999995)) ? (999999.99999899988 * (10.000000500000001 + var_chaste_interface__membrane__V) * (5.0000000000050004e-7 * (0.20000000000000001 + var_chaste_interface__extracellular_potassium_concentration__Kc / (10 + var_chaste_interface__extracellular_potassium_concentration__Kc)) * (var_chaste_interface__intracellular_potassium_concentration__Ki * exp(-0.18716946347220006) - var_chaste_interface__extracellular_potassium_concentration__Kc * exp(0.18716946347220006)) * var_chaste_interface__intracellular_calcium_concentration__Cai * NV_Ith_S(mParameters, 17) * var_chaste_interface__transient_outward_current_s_gate__s / ((1 - exp(1.0000000000010001e-7)) * (0.00050000000000000001 + var_chaste_interface__intracellular_calcium_concentration__Cai)) + 5.0000000000050004e-7 * (0.20000000000000001 + var_chaste_interface__extracellular_potassium_concentration__Kc / (10 + var_chaste_interface__extracellular_potassium_concentration__Kc)) * (var_chaste_interface__intracellular_potassium_concentration__Ki * exp(-0.18716944475525465) - var_chaste_interface__extracellular_potassium_concentration__Kc * exp(0.18716944475525465)) * var_chaste_interface__intracellular_calcium_concentration__Cai * NV_Ith_S(mParameters, 17) * var_chaste_interface__transient_outward_current_s_gate__s / ((1 - exp(-1.0000000000010001e-7)) * (0.00050000000000000001 + var_chaste_interface__intracellular_calcium_concentration__Cai))) - 5.0000000000050004e-7 * (0.20000000000000001 + var_chaste_interface__extracellular_potassium_concentration__Kc / (10 + var_chaste_interface__extracellular_potassium_concentration__Kc)) * (var_chaste_interface__intracellular_potassium_concentration__Ki * exp(-0.18716946347220006) - var_chaste_interface__extracellular_potassium_concentration__Kc * exp(0.18716946347220006)) * var_chaste_interface__intracellular_calcium_concentration__Cai * NV_Ith_S(mParameters, 17) * var_chaste_interface__transient_outward_current_s_gate__s / ((1 - exp(1.0000000000010001e-7)) * (0.00050000000000000001 + var_chaste_interface__intracellular_calcium_concentration__Cai))) : ((10 + var_chaste_interface__membrane__V) * (0.20000000000000001 + var_chaste_interface__extracellular_potassium_concentration__Kc / (10 + var_chaste_interface__extracellular_potassium_concentration__Kc)) * (var_chaste_interface__intracellular_potassium_concentration__Ki * exp(0.018716945411372737 * var_chaste_interface__membrane__V) - var_chaste_interface__extracellular_potassium_concentration__Kc * exp(-0.018716945411372737 * var_chaste_interface__membrane__V)) * var_chaste_interface__intracellular_calcium_concentration__Cai * NV_Ith_S(mParameters, 17) * var_chaste_interface__transient_outward_current_s_gate__s / ((1 - exp(-2 - 0.20000000000000001 * var_chaste_interface__membrane__V)) * (0.00050000000000000001 + var_chaste_interface__intracellular_calcium_concentration__Cai)))); // nanoA + const double var_transient_outward_current__i_to_converted = 0.001 * HeartConfig::Instance()->GetCapacitance() * var_transient_outward_current__i_to / NV_Ith_S(mParameters, 8); // uA_per_cm2 + const double var_chaste_interface__i_ionic = ((var_Na_Ca_exchanger__i_NaCa_converted + var_fast_sodium_current__i_Na_converted + var_hyperpolarising_activated_current__i_f_converted + var_second_inward_current__i_si_converted + var_time_dependent_potassium_current__i_K_converted + var_time_independent_potassium_current__i_K1_converted + var_transient_outward_current__i_to_converted) * NV_Ith_S(mParameters, 8) + 0.001 * HeartConfig::Instance()->GetCapacitance() * var_calcium_background_current__i_Ca_b + 0.001 * HeartConfig::Instance()->GetCapacitance() * var_sodium_background_current__i_Na_b + 0.001 * HeartConfig::Instance()->GetCapacitance() * var_sodium_potassium_pump__i_p) / NV_Ith_S(mParameters, 8); // uA_per_cm2 + + const double i_ionic = var_chaste_interface__i_ionic; + if (made_new_cvode_vector) + { + DeleteVector(rY); + } + EXCEPT_IF_NOT(!std::isnan(i_ionic)); + return i_ionic; + } + + void Celldifrancesco_noble_model_1985FromCellMLCvode::EvaluateYDerivatives(double var_chaste_interface__environment__time_converted, const N_Vector rY, N_Vector rDY) + { + // Inputs: + // Time units: millisecond + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : NV_Ith_S(rY, 0)); + // Units: millivolt; Initial value: -87.0 + double var_chaste_interface__intracellular_calcium_concentration__Cai = NV_Ith_S(rY, 1); + // Units: millimolar; Initial value: 5e-05 + double var_chaste_interface__hyperpolarising_activated_current_y_gate__y = NV_Ith_S(rY, 2); + // Units: dimensionless; Initial value: 0.2 + double var_chaste_interface__time_dependent_potassium_current_x_gate__x = NV_Ith_S(rY, 3); + // Units: dimensionless; Initial value: 0.01 + double var_chaste_interface__transient_outward_current_s_gate__s = NV_Ith_S(rY, 4); + // Units: dimensionless; Initial value: 1.0 + double var_chaste_interface__fast_sodium_current_m_gate__m = NV_Ith_S(rY, 5); + // Units: dimensionless; Initial value: 0.01 + double var_chaste_interface__fast_sodium_current_h_gate__h = NV_Ith_S(rY, 6); + // Units: dimensionless; Initial value: 0.8 + double var_chaste_interface__second_inward_current_d_gate__d = NV_Ith_S(rY, 7); + // Units: dimensionless; Initial value: 0.005 + double var_chaste_interface__second_inward_current_f_gate__f = NV_Ith_S(rY, 8); + // Units: dimensionless; Initial value: 1.0 + double var_chaste_interface__second_inward_current_f2_gate__f2 = NV_Ith_S(rY, 9); + // Units: dimensionless; Initial value: 1.0 + double var_chaste_interface__intracellular_sodium_concentration__Nai = NV_Ith_S(rY, 10); + // Units: millimolar; Initial value: 8.0 + double var_chaste_interface__intracellular_calcium_concentration__Ca_up = NV_Ith_S(rY, 11); + // Units: millimolar; Initial value: 2.0 + double var_chaste_interface__intracellular_calcium_concentration__Ca_rel = NV_Ith_S(rY, 12); + // Units: millimolar; Initial value: 1.0 + double var_chaste_interface__intracellular_calcium_concentration__p = NV_Ith_S(rY, 13); + // Units: dimensionless; Initial value: 1.0 + double var_chaste_interface__extracellular_potassium_concentration__Kc = NV_Ith_S(rY, 14); + // Units: millimolar; Initial value: 4.0 + double var_chaste_interface__intracellular_potassium_concentration__Ki = NV_Ith_S(rY, 15); + // Units: millimolar; Initial value: 140.0 + + // Mathematics + double d_dt_chaste_interface_var_membrane__V; + const double var_Na_Ca_exchanger__d_NaCa = 0.001; // dimensionless + const double var_Na_Ca_exchanger__gamma = 0.5; // dimensionless + const double var_Na_Ca_exchanger__n_NaCa = 3; // dimensionless + const double var_calcium_background_current__g_Cab = 0.02; // microS + const double var_extracellular_potassium_concentration__Ve = 0.00157; // micrometre3 + const double var_extracellular_potassium_concentration__pf = 0.69999999999999996; // per_second + const double var_fast_sodium_current_m_gate__delta_m = 1.0000000000000001e-5; // millivolt + const double var_hyperpolarising_activated_current__Km_f = 45; // millimolar + const double var_hyperpolarising_activated_current_y_gate__delta_y = 1.0000000000000001e-5; // millivolt + const double var_intracellular_calcium_concentration__Ca_up_max = 5; // millimolar + const double var_intracellular_calcium_concentration__rCa = 2; // dimensionless + const double var_intracellular_calcium_concentration__tau_rel = 0.050000000000000003; // second + const double var_intracellular_calcium_concentration__tau_rep = 2; // second + const double var_intracellular_calcium_concentration__tau_up = 0.025000000000000001; // second + const double var_intracellular_sodium_concentration__V_e_ratio = 0.10000000000000001; // dimensionless + const double var_intracellular_sodium_concentration__length = 2; // micrometre + const double var_intracellular_sodium_concentration__radius = 0.050000000000000003; // micrometre + const double var_intracellular_sodium_concentration__V_Cell = 3.1415926540000001 * pow(var_intracellular_sodium_concentration__radius, 2) * var_intracellular_sodium_concentration__length; // micrometre3 + const double var_intracellular_sodium_concentration__Vi = (1 - var_intracellular_sodium_concentration__V_e_ratio) * var_intracellular_sodium_concentration__V_Cell; // micrometre3 + const double var_intracellular_calcium_concentration__V_rel = 0.02 * var_intracellular_sodium_concentration__Vi; // micrometre3 + const double var_intracellular_calcium_concentration__V_up = 0.050000000000000003 * var_intracellular_sodium_concentration__Vi; // micrometre3 + const double var_membrane__F = 96485.341499999995; // coulomb_per_mole + const double var_intracellular_calcium_concentration__i_rel = 2 * pow(var_chaste_interface__intracellular_calcium_concentration__Cai, var_intracellular_calcium_concentration__rCa) * var_chaste_interface__intracellular_calcium_concentration__Ca_rel * var_intracellular_calcium_concentration__V_rel * NV_Ith_S(mParameters, 0) * var_membrane__F / ((pow(var_chaste_interface__intracellular_calcium_concentration__Cai, var_intracellular_calcium_concentration__rCa) + pow(NV_Ith_S(mParameters, 1), var_intracellular_calcium_concentration__rCa)) * var_intracellular_calcium_concentration__tau_rel); // nanoA + const double var_intracellular_calcium_concentration__i_tr = 2 * (-var_chaste_interface__intracellular_calcium_concentration__Ca_rel + var_chaste_interface__intracellular_calcium_concentration__Ca_up) * var_intracellular_calcium_concentration__V_rel * var_chaste_interface__intracellular_calcium_concentration__p * var_membrane__F / var_intracellular_calcium_concentration__tau_rep; // nanoA + const double var_intracellular_calcium_concentration__Ca_rel_orig_deriv = 0.5 * (-var_intracellular_calcium_concentration__i_rel + var_intracellular_calcium_concentration__i_tr) / (var_intracellular_calcium_concentration__V_rel * var_membrane__F); // millimolar / second + const double d_dt_chaste_interface_var_intracellular_calcium_concentration__Ca_rel = 0.001 * var_intracellular_calcium_concentration__Ca_rel_orig_deriv; // millimolar / millisecond + const double var_intracellular_calcium_concentration__i_up = 2 * (-var_chaste_interface__intracellular_calcium_concentration__Ca_up + var_intracellular_calcium_concentration__Ca_up_max) * var_chaste_interface__intracellular_calcium_concentration__Cai * NV_Ith_S(mParameters, 2) * var_intracellular_sodium_concentration__Vi * var_membrane__F / (var_intracellular_calcium_concentration__Ca_up_max * var_intracellular_calcium_concentration__tau_up); // nanoA + const double var_intracellular_calcium_concentration__Ca_up_orig_deriv = 0.5 * (-var_intracellular_calcium_concentration__i_tr + var_intracellular_calcium_concentration__i_up) / (var_intracellular_calcium_concentration__V_up * var_membrane__F); // millimolar / second + const double d_dt_chaste_interface_var_intracellular_calcium_concentration__Ca_up = 0.001 * var_intracellular_calcium_concentration__Ca_up_orig_deriv; // millimolar / millisecond + const double var_membrane__R = 8314.4719999999998; // joule_per_kilomole_kelvin + const double var_membrane__T = 310; // kelvin + const double var_membrane__RTONF = var_membrane__R * var_membrane__T / var_membrane__F; // millivolt + const double var_calcium_background_current__E_Ca = 0.5 * var_membrane__RTONF * log(NV_Ith_S(mParameters, 5) / var_chaste_interface__intracellular_calcium_concentration__Cai); // millivolt + const double var_fast_sodium_current__E_mh = var_membrane__RTONF * log((NV_Ith_S(mParameters, 6) + 0.12 * var_chaste_interface__extracellular_potassium_concentration__Kc) / (var_chaste_interface__intracellular_sodium_concentration__Nai + 0.12 * var_chaste_interface__intracellular_potassium_concentration__Ki)); // millivolt + const double var_hyperpolarising_activated_current__E_K = var_membrane__RTONF * log(var_chaste_interface__extracellular_potassium_concentration__Kc / var_chaste_interface__intracellular_potassium_concentration__Ki); // millivolt + const double var_hyperpolarising_activated_current__E_Na = var_membrane__RTONF * log(NV_Ith_S(mParameters, 6) / var_chaste_interface__intracellular_sodium_concentration__Nai); // millivolt + const double var_Na_Ca_exchanger__i_NaCa = (pow(var_chaste_interface__intracellular_sodium_concentration__Nai, var_Na_Ca_exchanger__n_NaCa) * NV_Ith_S(mParameters, 5) * exp((-2 + var_Na_Ca_exchanger__n_NaCa) * var_Na_Ca_exchanger__gamma * var_chaste_interface__membrane__V / var_membrane__RTONF) - pow(NV_Ith_S(mParameters, 6), var_Na_Ca_exchanger__n_NaCa) * var_chaste_interface__intracellular_calcium_concentration__Cai * exp((-1 + var_Na_Ca_exchanger__gamma) * (-2 + var_Na_Ca_exchanger__n_NaCa) * var_chaste_interface__membrane__V / var_membrane__RTONF)) * NV_Ith_S(mParameters, 16) / ((1 + 144.92753623188406 * var_chaste_interface__intracellular_calcium_concentration__Cai) * (1 + (pow(NV_Ith_S(mParameters, 6), var_Na_Ca_exchanger__n_NaCa) * var_chaste_interface__intracellular_calcium_concentration__Cai + pow(var_chaste_interface__intracellular_sodium_concentration__Nai, var_Na_Ca_exchanger__n_NaCa) * NV_Ith_S(mParameters, 5)) * var_Na_Ca_exchanger__d_NaCa)); // nanoA + const double var_calcium_background_current__i_Ca_b = (-var_calcium_background_current__E_Ca + var_chaste_interface__membrane__V) * var_calcium_background_current__g_Cab; // nanoA + const double var_fast_sodium_current__i_Na = pow(var_chaste_interface__fast_sodium_current_m_gate__m, 3) * (-var_fast_sodium_current__E_mh + var_chaste_interface__membrane__V) * NV_Ith_S(mParameters, 10) * var_chaste_interface__fast_sodium_current_h_gate__h; // nanoA + const double var_fast_sodium_current_h_gate__alpha_h = 20 * exp(-9.375 + 0.125 * NV_Ith_S(mParameters, 12) - 0.125 * var_chaste_interface__membrane__V); // per_second + const double var_fast_sodium_current_h_gate__beta_h = 2000 / (1 + 320 * exp(-7.5 + 0.10000000000000001 * NV_Ith_S(mParameters, 12) - 0.10000000000000001 * var_chaste_interface__membrane__V)); // per_second + const double var_fast_sodium_current_h_gate__h_inf = 0.01 * NV_Ith_S(mParameters, 11) + (1 - 0.01 * NV_Ith_S(mParameters, 11)) * var_fast_sodium_current_h_gate__alpha_h / (var_fast_sodium_current_h_gate__alpha_h + var_fast_sodium_current_h_gate__beta_h); // dimensionless + const double var_fast_sodium_current_h_gate__tau_h = 1 / (var_fast_sodium_current_h_gate__alpha_h + var_fast_sodium_current_h_gate__beta_h); // second + const double var_fast_sodium_current_h_gate__h_orig_deriv = (-var_chaste_interface__fast_sodium_current_h_gate__h + var_fast_sodium_current_h_gate__h_inf) / var_fast_sodium_current_h_gate__tau_h; // 1 / second + const double d_dt_chaste_interface_var_fast_sodium_current_h_gate__h = 0.001 * var_fast_sodium_current_h_gate__h_orig_deriv; // 1 / millisecond + const double var_fast_sodium_current_m_gate__E0_m = 41 + var_chaste_interface__membrane__V; // millivolt + const double var_fast_sodium_current_m_gate__alpha_m = ((var_fast_sodium_current_m_gate__delta_m > fabs(var_fast_sodium_current_m_gate__E0_m)) ? (2000) : (200 * var_fast_sodium_current_m_gate__E0_m / (1 - exp(-0.10000000000000001 * var_fast_sodium_current_m_gate__E0_m)))); // per_second + const double var_fast_sodium_current_m_gate__beta_m = 8000 * exp(-3.6960000000000002 - 0.056000000000000001 * var_chaste_interface__membrane__V); // per_second + const double var_fast_sodium_current_m_gate__m_orig_deriv = (1 - var_chaste_interface__fast_sodium_current_m_gate__m) * var_fast_sodium_current_m_gate__alpha_m - var_fast_sodium_current_m_gate__beta_m * var_chaste_interface__fast_sodium_current_m_gate__m; // 1 / second + const double d_dt_chaste_interface_var_fast_sodium_current_m_gate__m = 0.001 * var_fast_sodium_current_m_gate__m_orig_deriv; // 1 / millisecond + const double var_hyperpolarising_activated_current__i_fK = (-var_hyperpolarising_activated_current__E_K + var_chaste_interface__membrane__V) * var_chaste_interface__extracellular_potassium_concentration__Kc * NV_Ith_S(mParameters, 13) * var_chaste_interface__hyperpolarising_activated_current_y_gate__y / (var_chaste_interface__extracellular_potassium_concentration__Kc + var_hyperpolarising_activated_current__Km_f); // nanoA + const double var_hyperpolarising_activated_current__i_fNa = (-var_hyperpolarising_activated_current__E_Na + var_chaste_interface__membrane__V) * var_chaste_interface__extracellular_potassium_concentration__Kc * NV_Ith_S(mParameters, 14) * var_chaste_interface__hyperpolarising_activated_current_y_gate__y / (var_chaste_interface__extracellular_potassium_concentration__Kc + var_hyperpolarising_activated_current__Km_f); // nanoA + const double var_hyperpolarising_activated_current_y_gate__E0_y = 42 + var_chaste_interface__membrane__V; // millivolt + const double var_hyperpolarising_activated_current_y_gate__alpha_y = 0.050000000000000003 * exp(-2.8140000000000001 - 0.067000000000000004 * var_chaste_interface__membrane__V); // per_second + const double var_hyperpolarising_activated_current_y_gate__beta_y = ((var_hyperpolarising_activated_current_y_gate__delta_y > fabs(var_hyperpolarising_activated_current_y_gate__E0_y)) ? (2.5) : (var_hyperpolarising_activated_current_y_gate__E0_y / (1 - exp(-0.20000000000000001 * var_hyperpolarising_activated_current_y_gate__E0_y)))); // per_second + const double var_hyperpolarising_activated_current_y_gate__y_orig_deriv = (1 - var_chaste_interface__hyperpolarising_activated_current_y_gate__y) * var_hyperpolarising_activated_current_y_gate__alpha_y - var_hyperpolarising_activated_current_y_gate__beta_y * var_chaste_interface__hyperpolarising_activated_current_y_gate__y; // 1 / second + const double d_dt_chaste_interface_var_hyperpolarising_activated_current_y_gate__y = 0.001 * var_hyperpolarising_activated_current_y_gate__y_orig_deriv; // 1 / millisecond + const double var_intracellular_calcium_concentration__alpha_p = (((var_chaste_interface__membrane__V >= -34.000000399999998) && (var_chaste_interface__membrane__V <= -33.999999600000002)) ? (-2.5000000000718892e-7 / (-1 + exp(-1.0000000000287557e-7)) + 1249999.9999640554 * (34.000000399999998 + var_chaste_interface__membrane__V) * (2.5000000000718892e-7 / (-1 + exp(1.0000000000287557e-7)) + 2.5000000000718892e-7 / (-1 + exp(-1.0000000000287557e-7)))) : (0.625 * (34 + var_chaste_interface__membrane__V) / (-1 + exp(8.5 + 0.25 * var_chaste_interface__membrane__V)))); // per_second + const double var_intracellular_calcium_concentration__beta_p = 5 / (1 + exp(-8.5 - 0.25 * var_chaste_interface__membrane__V)); // per_second + const double var_intracellular_calcium_concentration__p_orig_deriv = (1 - var_chaste_interface__intracellular_calcium_concentration__p) * var_intracellular_calcium_concentration__alpha_p - var_intracellular_calcium_concentration__beta_p * var_chaste_interface__intracellular_calcium_concentration__p; // 1 / second + const double d_dt_chaste_interface_var_intracellular_calcium_concentration__p = 0.001 * var_intracellular_calcium_concentration__p_orig_deriv; // 1 / millisecond + const double var_second_inward_current_d_gate__E0_d = 19 + var_chaste_interface__membrane__V; // millivolt + const double var_second_inward_current_d_gate__delta_d = 0.0001; // millivolt + const double var_second_inward_current_d_gate__alpha_d = ((var_second_inward_current_d_gate__delta_d > fabs(var_second_inward_current_d_gate__E0_d)) ? (120) : (30 * var_second_inward_current_d_gate__E0_d / (1 - exp(-0.25 * var_second_inward_current_d_gate__E0_d)))); // per_second + const double var_second_inward_current_d_gate__beta_d = ((var_second_inward_current_d_gate__delta_d > fabs(var_second_inward_current_d_gate__E0_d)) ? (120) : (12 * var_second_inward_current_d_gate__E0_d / (-1 + exp(0.10000000000000001 * var_second_inward_current_d_gate__E0_d)))); // per_second + const double var_second_inward_current_d_gate__d_orig_deriv = (1 - var_chaste_interface__second_inward_current_d_gate__d) * var_second_inward_current_d_gate__alpha_d - var_second_inward_current_d_gate__beta_d * var_chaste_interface__second_inward_current_d_gate__d; // 1 / second + const double d_dt_chaste_interface_var_second_inward_current_d_gate__d = 0.001 * var_second_inward_current_d_gate__d_orig_deriv; // 1 / millisecond + const double var_second_inward_current_f2_gate__K_mf2 = 0.001; // millimolar + const double var_second_inward_current_f2_gate__alpha_f2 = 5; // per_second + const double var_second_inward_current_f2_gate__beta_f2 = var_chaste_interface__intracellular_calcium_concentration__Cai * var_second_inward_current_f2_gate__alpha_f2 / var_second_inward_current_f2_gate__K_mf2; // per_second + const double var_second_inward_current_f2_gate__f2_orig_deriv = -(var_second_inward_current_f2_gate__alpha_f2 + var_second_inward_current_f2_gate__beta_f2) * var_chaste_interface__second_inward_current_f2_gate__f2 + var_second_inward_current_f2_gate__alpha_f2; // 1 / second + const double d_dt_chaste_interface_var_second_inward_current_f2_gate__f2 = 0.001 * var_second_inward_current_f2_gate__f2_orig_deriv; // 1 / millisecond + const double var_second_inward_current_f_gate__E0_f = 34 + var_chaste_interface__membrane__V; // millivolt + const double var_second_inward_current_f_gate__beta_f = 50 / (1 + exp(-8.5 - 0.25 * var_chaste_interface__membrane__V)); // per_second + const double var_second_inward_current_f_gate__delta_f = 0.0001; // millivolt + const double var_second_inward_current_f_gate__alpha_f = ((var_second_inward_current_f_gate__delta_f > fabs(var_second_inward_current_f_gate__E0_f)) ? (25) : (6.25 * var_second_inward_current_f_gate__E0_f / (-1 + exp(0.25 * var_second_inward_current_f_gate__E0_f)))); // per_second + const double var_second_inward_current__i_siCa = (((var_chaste_interface__membrane__V >= 49.999998664311967) && (var_chaste_interface__membrane__V <= 50.000001335688033)) ? (374338.90823576227 * (-49.999998664311967 + var_chaste_interface__membrane__V) * (1.9999999999556149e-7 * (var_chaste_interface__intracellular_calcium_concentration__Cai * exp(3.7433890822745473) - NV_Ith_S(mParameters, 5) * exp(9.9999999997780743e-8)) * NV_Ith_S(mParameters, 7) * var_chaste_interface__second_inward_current_d_gate__d * var_chaste_interface__second_inward_current_f2_gate__f2 * var_chaste_interface__second_inward_current_f_gate__f / (1 - exp(9.9999999997780743e-8)) + 1.9999999999556149e-7 * (var_chaste_interface__intracellular_calcium_concentration__Cai * exp(3.7433890822745473) - NV_Ith_S(mParameters, 5) * exp(-9.9999999997780743e-8)) * NV_Ith_S(mParameters, 7) * var_chaste_interface__second_inward_current_d_gate__d * var_chaste_interface__second_inward_current_f2_gate__f2 * var_chaste_interface__second_inward_current_f_gate__f / (1 - exp(-9.9999999997780743e-8))) - 1.9999999999556149e-7 * (var_chaste_interface__intracellular_calcium_concentration__Cai * exp(3.7433890822745473) - NV_Ith_S(mParameters, 5) * exp(9.9999999997780743e-8)) * NV_Ith_S(mParameters, 7) * var_chaste_interface__second_inward_current_d_gate__d * var_chaste_interface__second_inward_current_f2_gate__f2 * var_chaste_interface__second_inward_current_f_gate__f / (1 - exp(9.9999999997780743e-8))) : (0.14973556329098189 * (-50 + var_chaste_interface__membrane__V) * (var_chaste_interface__intracellular_calcium_concentration__Cai * exp(3.7433890822745473) - NV_Ith_S(mParameters, 5) * exp(3.7433890822745473 - 0.074867781645490947 * var_chaste_interface__membrane__V)) * NV_Ith_S(mParameters, 7) * var_chaste_interface__second_inward_current_d_gate__d * var_chaste_interface__second_inward_current_f2_gate__f2 * var_chaste_interface__second_inward_current_f_gate__f / (1 - exp(3.7433890822745473 - 0.074867781645490947 * var_chaste_interface__membrane__V)))); // nanoA + const double var_intracellular_calcium_concentration__Cai_orig_deriv = -0.5 * (-var_intracellular_calcium_concentration__i_rel - 2 * var_Na_Ca_exchanger__i_NaCa / (-2 + var_Na_Ca_exchanger__n_NaCa) + var_calcium_background_current__i_Ca_b + var_intracellular_calcium_concentration__i_up + var_second_inward_current__i_siCa) / (var_intracellular_sodium_concentration__Vi * var_membrane__F); // millimolar / second + const double d_dt_chaste_interface_var_intracellular_calcium_concentration__Cai = 0.001 * var_intracellular_calcium_concentration__Cai_orig_deriv; // millimolar / millisecond + const double var_second_inward_current__i_siK = (((var_chaste_interface__membrane__V >= 49.999997328623934) && (var_chaste_interface__membrane__V <= 50.000002671376066)) ? (187169.45411399176 * (-49.999997328623934 + var_chaste_interface__membrane__V) * (9.9999999999858744e-10 * (var_chaste_interface__intracellular_potassium_concentration__Ki * exp(1.8716945411372736) - var_chaste_interface__extracellular_potassium_concentration__Kc * exp(9.9999999999858739e-8)) * NV_Ith_S(mParameters, 7) * var_chaste_interface__second_inward_current_d_gate__d * var_chaste_interface__second_inward_current_f2_gate__f2 * var_chaste_interface__second_inward_current_f_gate__f / (1 - exp(9.9999999999858739e-8)) + 9.9999999999858744e-10 * (var_chaste_interface__intracellular_potassium_concentration__Ki * exp(1.8716945411372736) - var_chaste_interface__extracellular_potassium_concentration__Kc * exp(-9.9999999999858739e-8)) * NV_Ith_S(mParameters, 7) * var_chaste_interface__second_inward_current_d_gate__d * var_chaste_interface__second_inward_current_f2_gate__f2 * var_chaste_interface__second_inward_current_f_gate__f / (1 - exp(-9.9999999999858739e-8))) - 9.9999999999858744e-10 * (var_chaste_interface__intracellular_potassium_concentration__Ki * exp(1.8716945411372736) - var_chaste_interface__extracellular_potassium_concentration__Kc * exp(9.9999999999858739e-8)) * NV_Ith_S(mParameters, 7) * var_chaste_interface__second_inward_current_d_gate__d * var_chaste_interface__second_inward_current_f2_gate__f2 * var_chaste_interface__second_inward_current_f_gate__f / (1 - exp(9.9999999999858739e-8))) : (0.00037433890822745472 * (-50 + var_chaste_interface__membrane__V) * (var_chaste_interface__intracellular_potassium_concentration__Ki * exp(1.8716945411372736) - var_chaste_interface__extracellular_potassium_concentration__Kc * exp(1.8716945411372736 - 0.037433890822745473 * var_chaste_interface__membrane__V)) * NV_Ith_S(mParameters, 7) * var_chaste_interface__second_inward_current_d_gate__d * var_chaste_interface__second_inward_current_f2_gate__f2 * var_chaste_interface__second_inward_current_f_gate__f / (1 - exp(1.8716945411372736 - 0.037433890822745473 * var_chaste_interface__membrane__V)))); // nanoA + const double var_second_inward_current__i_siNa = (((var_chaste_interface__membrane__V >= 49.999997328623934) && (var_chaste_interface__membrane__V <= 50.000002671376066)) ? (187169.45411399176 * (-49.999997328623934 + var_chaste_interface__membrane__V) * (9.9999999999858744e-10 * (var_chaste_interface__intracellular_sodium_concentration__Nai * exp(1.8716945411372736) - NV_Ith_S(mParameters, 6) * exp(9.9999999999858739e-8)) * NV_Ith_S(mParameters, 7) * var_chaste_interface__second_inward_current_d_gate__d * var_chaste_interface__second_inward_current_f2_gate__f2 * var_chaste_interface__second_inward_current_f_gate__f / (1 - exp(9.9999999999858739e-8)) + 9.9999999999858744e-10 * (var_chaste_interface__intracellular_sodium_concentration__Nai * exp(1.8716945411372736) - NV_Ith_S(mParameters, 6) * exp(-9.9999999999858739e-8)) * NV_Ith_S(mParameters, 7) * var_chaste_interface__second_inward_current_d_gate__d * var_chaste_interface__second_inward_current_f2_gate__f2 * var_chaste_interface__second_inward_current_f_gate__f / (1 - exp(-9.9999999999858739e-8))) - 9.9999999999858744e-10 * (var_chaste_interface__intracellular_sodium_concentration__Nai * exp(1.8716945411372736) - NV_Ith_S(mParameters, 6) * exp(9.9999999999858739e-8)) * NV_Ith_S(mParameters, 7) * var_chaste_interface__second_inward_current_d_gate__d * var_chaste_interface__second_inward_current_f2_gate__f2 * var_chaste_interface__second_inward_current_f_gate__f / (1 - exp(9.9999999999858739e-8))) : (0.00037433890822745472 * (-50 + var_chaste_interface__membrane__V) * (var_chaste_interface__intracellular_sodium_concentration__Nai * exp(1.8716945411372736) - NV_Ith_S(mParameters, 6) * exp(1.8716945411372736 - 0.037433890822745473 * var_chaste_interface__membrane__V)) * NV_Ith_S(mParameters, 7) * var_chaste_interface__second_inward_current_d_gate__d * var_chaste_interface__second_inward_current_f2_gate__f2 * var_chaste_interface__second_inward_current_f_gate__f / (1 - exp(1.8716945411372736 - 0.037433890822745473 * var_chaste_interface__membrane__V)))); // nanoA + const double var_second_inward_current_f_gate__f_orig_deriv = (1 - var_chaste_interface__second_inward_current_f_gate__f) * var_second_inward_current_f_gate__alpha_f - var_second_inward_current_f_gate__beta_f * var_chaste_interface__second_inward_current_f_gate__f; // 1 / second + const double d_dt_chaste_interface_var_second_inward_current_f_gate__f = 0.001 * var_second_inward_current_f_gate__f_orig_deriv; // 1 / millisecond + const double var_sodium_background_current__g_Nab = 0.17999999999999999; // microS + const double var_sodium_background_current__i_Na_b = (-var_hyperpolarising_activated_current__E_Na + var_chaste_interface__membrane__V) * var_sodium_background_current__g_Nab; // nanoA + const double var_sodium_potassium_pump__I_p = 125; // nanoA + const double var_sodium_potassium_pump__K_mK = 1; // millimolar + const double var_sodium_potassium_pump__K_mNa = 40; // millimolar + const double var_sodium_potassium_pump__i_p = var_chaste_interface__extracellular_potassium_concentration__Kc * var_chaste_interface__intracellular_sodium_concentration__Nai * var_sodium_potassium_pump__I_p / ((var_chaste_interface__extracellular_potassium_concentration__Kc + var_sodium_potassium_pump__K_mK) * (var_chaste_interface__intracellular_sodium_concentration__Nai + var_sodium_potassium_pump__K_mNa)); // nanoA + const double var_intracellular_sodium_concentration__Nai_orig_deriv = -(3 * var_sodium_potassium_pump__i_p + var_Na_Ca_exchanger__i_NaCa * var_Na_Ca_exchanger__n_NaCa / (-2 + var_Na_Ca_exchanger__n_NaCa) + var_fast_sodium_current__i_Na + var_hyperpolarising_activated_current__i_fNa + var_second_inward_current__i_siNa + var_sodium_background_current__i_Na_b) * NV_Ith_S(mParameters, 4) / (var_intracellular_sodium_concentration__Vi * var_membrane__F); // millimolar / second + const double d_dt_chaste_interface_var_intracellular_sodium_concentration__Nai = 0.001 * var_intracellular_sodium_concentration__Nai_orig_deriv; // millimolar / millisecond + const double var_time_dependent_potassium_current__I_K = 0.0071428571428571426 * (-var_chaste_interface__extracellular_potassium_concentration__Kc * exp(-var_chaste_interface__membrane__V / var_membrane__RTONF) + var_chaste_interface__intracellular_potassium_concentration__Ki) * NV_Ith_S(mParameters, 9); // nanoA + const double var_time_dependent_potassium_current_x_gate__alpha_x = 0.5 * exp(4.1300000000000008 + 0.082600000000000007 * var_chaste_interface__membrane__V) / (1 + exp(2.8500000000000001 + 0.057000000000000002 * var_chaste_interface__membrane__V)); // per_second + const double var_time_dependent_potassium_current_x_gate__beta_x = 1.3 * exp(-1.2 - 0.059999999999999998 * var_chaste_interface__membrane__V) / (1 + exp(-0.80000000000000004 - 0.040000000000000001 * var_chaste_interface__membrane__V)); // per_second + const double var_time_dependent_potassium_current__i_K = var_time_dependent_potassium_current__I_K * var_chaste_interface__time_dependent_potassium_current_x_gate__x; // nanoA + const double var_time_dependent_potassium_current_x_gate__x_orig_deriv = (1 - var_chaste_interface__time_dependent_potassium_current_x_gate__x) * var_time_dependent_potassium_current_x_gate__alpha_x - var_time_dependent_potassium_current_x_gate__beta_x * var_chaste_interface__time_dependent_potassium_current_x_gate__x; // 1 / second + const double d_dt_chaste_interface_var_time_dependent_potassium_current_x_gate__x = 0.001 * var_time_dependent_potassium_current_x_gate__x_orig_deriv; // 1 / millisecond + const double var_time_independent_potassium_current__Km_K1 = 210; // millimolar + const double var_time_independent_potassium_current__i_K1 = (-var_hyperpolarising_activated_current__E_K + var_chaste_interface__membrane__V) * var_chaste_interface__extracellular_potassium_concentration__Kc * NV_Ith_S(mParameters, 15) / ((1 + exp(2 * (10 - var_hyperpolarising_activated_current__E_K + var_chaste_interface__membrane__V) / var_membrane__RTONF)) * (var_chaste_interface__extracellular_potassium_concentration__Kc + var_time_independent_potassium_current__Km_K1)); // nanoA + const double var_transient_outward_current_s_gate__alpha_s = 0.033000000000000002 * exp(-0.058823529411764705 * var_chaste_interface__membrane__V); // per_second + const double var_transient_outward_current_s_gate__beta_s = 33 / (1 + exp(-1.25 - 0.125 * var_chaste_interface__membrane__V)); // per_second + const double var_transient_outward_current__i_to = (((var_chaste_interface__membrane__V >= -10.000000500000001) && (var_chaste_interface__membrane__V <= -9.9999994999999995)) ? (999999.99999899988 * (10.000000500000001 + var_chaste_interface__membrane__V) * (5.0000000000050004e-7 * (0.20000000000000001 + var_chaste_interface__extracellular_potassium_concentration__Kc / (10 + var_chaste_interface__extracellular_potassium_concentration__Kc)) * (var_chaste_interface__intracellular_potassium_concentration__Ki * exp(-0.18716946347220006) - var_chaste_interface__extracellular_potassium_concentration__Kc * exp(0.18716946347220006)) * var_chaste_interface__intracellular_calcium_concentration__Cai * NV_Ith_S(mParameters, 17) * var_chaste_interface__transient_outward_current_s_gate__s / ((1 - exp(1.0000000000010001e-7)) * (0.00050000000000000001 + var_chaste_interface__intracellular_calcium_concentration__Cai)) + 5.0000000000050004e-7 * (0.20000000000000001 + var_chaste_interface__extracellular_potassium_concentration__Kc / (10 + var_chaste_interface__extracellular_potassium_concentration__Kc)) * (var_chaste_interface__intracellular_potassium_concentration__Ki * exp(-0.18716944475525465) - var_chaste_interface__extracellular_potassium_concentration__Kc * exp(0.18716944475525465)) * var_chaste_interface__intracellular_calcium_concentration__Cai * NV_Ith_S(mParameters, 17) * var_chaste_interface__transient_outward_current_s_gate__s / ((1 - exp(-1.0000000000010001e-7)) * (0.00050000000000000001 + var_chaste_interface__intracellular_calcium_concentration__Cai))) - 5.0000000000050004e-7 * (0.20000000000000001 + var_chaste_interface__extracellular_potassium_concentration__Kc / (10 + var_chaste_interface__extracellular_potassium_concentration__Kc)) * (var_chaste_interface__intracellular_potassium_concentration__Ki * exp(-0.18716946347220006) - var_chaste_interface__extracellular_potassium_concentration__Kc * exp(0.18716946347220006)) * var_chaste_interface__intracellular_calcium_concentration__Cai * NV_Ith_S(mParameters, 17) * var_chaste_interface__transient_outward_current_s_gate__s / ((1 - exp(1.0000000000010001e-7)) * (0.00050000000000000001 + var_chaste_interface__intracellular_calcium_concentration__Cai))) : ((10 + var_chaste_interface__membrane__V) * (0.20000000000000001 + var_chaste_interface__extracellular_potassium_concentration__Kc / (10 + var_chaste_interface__extracellular_potassium_concentration__Kc)) * (var_chaste_interface__intracellular_potassium_concentration__Ki * exp(0.018716945411372737 * var_chaste_interface__membrane__V) - var_chaste_interface__extracellular_potassium_concentration__Kc * exp(-0.018716945411372737 * var_chaste_interface__membrane__V)) * var_chaste_interface__intracellular_calcium_concentration__Cai * NV_Ith_S(mParameters, 17) * var_chaste_interface__transient_outward_current_s_gate__s / ((1 - exp(-2 - 0.20000000000000001 * var_chaste_interface__membrane__V)) * (0.00050000000000000001 + var_chaste_interface__intracellular_calcium_concentration__Cai)))); // nanoA + const double var_extracellular_potassium_concentration__i_mK = -2 * var_sodium_potassium_pump__i_p + var_hyperpolarising_activated_current__i_fK + var_second_inward_current__i_siK + var_time_dependent_potassium_current__i_K + var_time_independent_potassium_current__i_K1 + var_transient_outward_current__i_to; // nanoA + const double var_extracellular_potassium_concentration__Kc_orig_deriv = (-(-NV_Ith_S(mParameters, 3) + var_chaste_interface__extracellular_potassium_concentration__Kc) * var_extracellular_potassium_concentration__pf + var_extracellular_potassium_concentration__i_mK / (var_extracellular_potassium_concentration__Ve * var_membrane__F)) * NV_Ith_S(mParameters, 4); // millimolar / second + const double d_dt_chaste_interface_var_extracellular_potassium_concentration__Kc = 0.001 * var_extracellular_potassium_concentration__Kc_orig_deriv; // millimolar / millisecond + const double var_intracellular_potassium_concentration__Ki_orig_deriv = -var_extracellular_potassium_concentration__i_mK * NV_Ith_S(mParameters, 4) / (var_intracellular_sodium_concentration__Vi * var_membrane__F); // millimolar / second + const double d_dt_chaste_interface_var_intracellular_potassium_concentration__Ki = 0.001 * var_intracellular_potassium_concentration__Ki_orig_deriv; // millimolar / millisecond + const double var_transient_outward_current_s_gate__s_orig_deriv = (1 - var_chaste_interface__transient_outward_current_s_gate__s) * var_transient_outward_current_s_gate__alpha_s - var_transient_outward_current_s_gate__beta_s * var_chaste_interface__transient_outward_current_s_gate__s; // 1 / second + const double d_dt_chaste_interface_var_transient_outward_current_s_gate__s = 0.001 * var_transient_outward_current_s_gate__s_orig_deriv; // 1 / millisecond + + if (mSetVoltageDerivativeToZero) + { + d_dt_chaste_interface_var_membrane__V = 0.0; + } + else + { + const double var_hyperpolarising_activated_current__i_f = var_hyperpolarising_activated_current__i_fK + var_hyperpolarising_activated_current__i_fNa; // nanoA + const double var_second_inward_current__i_si = var_second_inward_current__i_siCa + var_second_inward_current__i_siK + var_second_inward_current__i_siNa; // nanoA + const double var_stimulus__i_pulse_converted = GetIntracellularAreaStimulus(var_chaste_interface__environment__time_converted); // uA_per_cm2 + const double var_stimulus__i_pulse = 1000 * NV_Ith_S(mParameters, 8) * var_stimulus__i_pulse_converted / HeartConfig::Instance()->GetCapacitance(); // nanoA + const double var_membrane__V_orig_deriv = (-var_Na_Ca_exchanger__i_NaCa - var_calcium_background_current__i_Ca_b - var_fast_sodium_current__i_Na - var_hyperpolarising_activated_current__i_f - var_second_inward_current__i_si - var_sodium_background_current__i_Na_b - var_sodium_potassium_pump__i_p - var_stimulus__i_pulse - var_time_dependent_potassium_current__i_K - var_time_independent_potassium_current__i_K1 - var_transient_outward_current__i_to) / NV_Ith_S(mParameters, 8); // millivolt / second + d_dt_chaste_interface_var_membrane__V = 0.001 * var_membrane__V_orig_deriv; // millivolt / millisecond + } + + NV_Ith_S(rDY,0) = d_dt_chaste_interface_var_membrane__V; + NV_Ith_S(rDY,1) = d_dt_chaste_interface_var_intracellular_calcium_concentration__Cai; + NV_Ith_S(rDY,2) = d_dt_chaste_interface_var_hyperpolarising_activated_current_y_gate__y; + NV_Ith_S(rDY,3) = d_dt_chaste_interface_var_time_dependent_potassium_current_x_gate__x; + NV_Ith_S(rDY,4) = d_dt_chaste_interface_var_transient_outward_current_s_gate__s; + NV_Ith_S(rDY,5) = d_dt_chaste_interface_var_fast_sodium_current_m_gate__m; + NV_Ith_S(rDY,6) = d_dt_chaste_interface_var_fast_sodium_current_h_gate__h; + NV_Ith_S(rDY,7) = d_dt_chaste_interface_var_second_inward_current_d_gate__d; + NV_Ith_S(rDY,8) = d_dt_chaste_interface_var_second_inward_current_f_gate__f; + NV_Ith_S(rDY,9) = d_dt_chaste_interface_var_second_inward_current_f2_gate__f2; + NV_Ith_S(rDY,10) = d_dt_chaste_interface_var_intracellular_sodium_concentration__Nai; + NV_Ith_S(rDY,11) = d_dt_chaste_interface_var_intracellular_calcium_concentration__Ca_up; + NV_Ith_S(rDY,12) = d_dt_chaste_interface_var_intracellular_calcium_concentration__Ca_rel; + NV_Ith_S(rDY,13) = d_dt_chaste_interface_var_intracellular_calcium_concentration__p; + NV_Ith_S(rDY,14) = d_dt_chaste_interface_var_extracellular_potassium_concentration__Kc; + NV_Ith_S(rDY,15) = d_dt_chaste_interface_var_intracellular_potassium_concentration__Ki; + } + + N_Vector Celldifrancesco_noble_model_1985FromCellMLCvode::ComputeDerivedQuantities(double var_chaste_interface__environment__time_converted, const N_Vector & rY) + { + // Inputs: + // Time units: millisecond + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : NV_Ith_S(rY, 0)); + // Units: millivolt; Initial value: -87.0 + double var_chaste_interface__intracellular_calcium_concentration__Cai = NV_Ith_S(rY, 1); + // Units: millimolar; Initial value: 5e-05 + double var_chaste_interface__hyperpolarising_activated_current_y_gate__y = NV_Ith_S(rY, 2); + // Units: dimensionless; Initial value: 0.2 + double var_chaste_interface__time_dependent_potassium_current_x_gate__x = NV_Ith_S(rY, 3); + // Units: dimensionless; Initial value: 0.01 + double var_chaste_interface__transient_outward_current_s_gate__s = NV_Ith_S(rY, 4); + // Units: dimensionless; Initial value: 1.0 + double var_chaste_interface__fast_sodium_current_m_gate__m = NV_Ith_S(rY, 5); + // Units: dimensionless; Initial value: 0.01 + double var_chaste_interface__fast_sodium_current_h_gate__h = NV_Ith_S(rY, 6); + // Units: dimensionless; Initial value: 0.8 + double var_chaste_interface__second_inward_current_d_gate__d = NV_Ith_S(rY, 7); + // Units: dimensionless; Initial value: 0.005 + double var_chaste_interface__second_inward_current_f_gate__f = NV_Ith_S(rY, 8); + // Units: dimensionless; Initial value: 1.0 + double var_chaste_interface__second_inward_current_f2_gate__f2 = NV_Ith_S(rY, 9); + // Units: dimensionless; Initial value: 1.0 + double var_chaste_interface__intracellular_sodium_concentration__Nai = NV_Ith_S(rY, 10); + // Units: millimolar; Initial value: 8.0 + double var_chaste_interface__intracellular_calcium_concentration__Ca_rel = NV_Ith_S(rY, 12); + // Units: millimolar; Initial value: 1.0 + double var_chaste_interface__extracellular_potassium_concentration__Kc = NV_Ith_S(rY, 14); + // Units: millimolar; Initial value: 4.0 + double var_chaste_interface__intracellular_potassium_concentration__Ki = NV_Ith_S(rY, 15); + // Units: millimolar; Initial value: 140.0 + + // Mathematics + const double var_Na_Ca_exchanger__d_NaCa = 0.001; // dimensionless + const double var_Na_Ca_exchanger__gamma = 0.5; // dimensionless + const double var_Na_Ca_exchanger__n_NaCa = 3; // dimensionless + const double var_hyperpolarising_activated_current__Km_f = 45; // millimolar + const double var_intracellular_calcium_concentration__rCa = 2; // dimensionless + const double var_intracellular_calcium_concentration__tau_rel = 0.050000000000000003; // second + const double var_intracellular_sodium_concentration__V_e_ratio = 0.10000000000000001; // dimensionless + const double var_intracellular_sodium_concentration__length = 2; // micrometre + const double var_intracellular_sodium_concentration__radius = 0.050000000000000003; // micrometre + const double var_intracellular_sodium_concentration__V_Cell = 3.1415926540000001 * pow(var_intracellular_sodium_concentration__radius, 2) * var_intracellular_sodium_concentration__length; // micrometre3 + const double var_intracellular_sodium_concentration__Vi = (1 - var_intracellular_sodium_concentration__V_e_ratio) * var_intracellular_sodium_concentration__V_Cell; // micrometre3 + const double var_intracellular_calcium_concentration__V_rel = 0.02 * var_intracellular_sodium_concentration__Vi; // micrometre3 + const double var_membrane__F = 96485.341499999995; // coulomb_per_mole + const double var_intracellular_calcium_concentration__i_rel = 2 * pow(var_chaste_interface__intracellular_calcium_concentration__Cai, var_intracellular_calcium_concentration__rCa) * var_chaste_interface__intracellular_calcium_concentration__Ca_rel * var_intracellular_calcium_concentration__V_rel * NV_Ith_S(mParameters, 0) * var_membrane__F / ((pow(var_chaste_interface__intracellular_calcium_concentration__Cai, var_intracellular_calcium_concentration__rCa) + pow(NV_Ith_S(mParameters, 1), var_intracellular_calcium_concentration__rCa)) * var_intracellular_calcium_concentration__tau_rel); // nanoA + const double var_membrane__R = 8314.4719999999998; // joule_per_kilomole_kelvin + const double var_membrane__T = 310; // kelvin + const double var_membrane__RTONF = var_membrane__R * var_membrane__T / var_membrane__F; // millivolt + const double var_fast_sodium_current__E_mh = var_membrane__RTONF * log((NV_Ith_S(mParameters, 6) + 0.12 * var_chaste_interface__extracellular_potassium_concentration__Kc) / (var_chaste_interface__intracellular_sodium_concentration__Nai + 0.12 * var_chaste_interface__intracellular_potassium_concentration__Ki)); // millivolt + const double var_hyperpolarising_activated_current__E_K = var_membrane__RTONF * log(var_chaste_interface__extracellular_potassium_concentration__Kc / var_chaste_interface__intracellular_potassium_concentration__Ki); // millivolt + const double var_hyperpolarising_activated_current__E_Na = var_membrane__RTONF * log(NV_Ith_S(mParameters, 6) / var_chaste_interface__intracellular_sodium_concentration__Nai); // millivolt + const double var_Na_Ca_exchanger__i_NaCa = (pow(var_chaste_interface__intracellular_sodium_concentration__Nai, var_Na_Ca_exchanger__n_NaCa) * NV_Ith_S(mParameters, 5) * exp((-2 + var_Na_Ca_exchanger__n_NaCa) * var_Na_Ca_exchanger__gamma * var_chaste_interface__membrane__V / var_membrane__RTONF) - pow(NV_Ith_S(mParameters, 6), var_Na_Ca_exchanger__n_NaCa) * var_chaste_interface__intracellular_calcium_concentration__Cai * exp((-1 + var_Na_Ca_exchanger__gamma) * (-2 + var_Na_Ca_exchanger__n_NaCa) * var_chaste_interface__membrane__V / var_membrane__RTONF)) * NV_Ith_S(mParameters, 16) / ((1 + 144.92753623188406 * var_chaste_interface__intracellular_calcium_concentration__Cai) * (1 + (pow(NV_Ith_S(mParameters, 6), var_Na_Ca_exchanger__n_NaCa) * var_chaste_interface__intracellular_calcium_concentration__Cai + pow(var_chaste_interface__intracellular_sodium_concentration__Nai, var_Na_Ca_exchanger__n_NaCa) * NV_Ith_S(mParameters, 5)) * var_Na_Ca_exchanger__d_NaCa)); // nanoA + const double var_Na_Ca_exchanger__i_NaCa_converted = 0.001 * HeartConfig::Instance()->GetCapacitance() * var_Na_Ca_exchanger__i_NaCa / NV_Ith_S(mParameters, 8); // uA_per_cm2 + const double var_fast_sodium_current__i_Na = pow(var_chaste_interface__fast_sodium_current_m_gate__m, 3) * (-var_fast_sodium_current__E_mh + var_chaste_interface__membrane__V) * NV_Ith_S(mParameters, 10) * var_chaste_interface__fast_sodium_current_h_gate__h; // nanoA + const double var_fast_sodium_current__i_Na_converted = 0.001 * HeartConfig::Instance()->GetCapacitance() * var_fast_sodium_current__i_Na / NV_Ith_S(mParameters, 8); // uA_per_cm2 + const double var_fast_sodium_current_h_gate__alpha_h = 20 * exp(-9.375 + 0.125 * NV_Ith_S(mParameters, 12) - 0.125 * var_chaste_interface__membrane__V); // per_second + const double var_fast_sodium_current_h_gate__beta_h = 2000 / (1 + 320 * exp(-7.5 + 0.10000000000000001 * NV_Ith_S(mParameters, 12) - 0.10000000000000001 * var_chaste_interface__membrane__V)); // per_second + const double var_fast_sodium_current_h_gate__tau_h = 1 / (var_fast_sodium_current_h_gate__alpha_h + var_fast_sodium_current_h_gate__beta_h); // second + const double var_hyperpolarising_activated_current__i_fK = (-var_hyperpolarising_activated_current__E_K + var_chaste_interface__membrane__V) * var_chaste_interface__extracellular_potassium_concentration__Kc * NV_Ith_S(mParameters, 13) * var_chaste_interface__hyperpolarising_activated_current_y_gate__y / (var_chaste_interface__extracellular_potassium_concentration__Kc + var_hyperpolarising_activated_current__Km_f); // nanoA + const double var_hyperpolarising_activated_current__i_fNa = (-var_hyperpolarising_activated_current__E_Na + var_chaste_interface__membrane__V) * var_chaste_interface__extracellular_potassium_concentration__Kc * NV_Ith_S(mParameters, 14) * var_chaste_interface__hyperpolarising_activated_current_y_gate__y / (var_chaste_interface__extracellular_potassium_concentration__Kc + var_hyperpolarising_activated_current__Km_f); // nanoA + const double var_hyperpolarising_activated_current__i_f = var_hyperpolarising_activated_current__i_fK + var_hyperpolarising_activated_current__i_fNa; // nanoA + const double var_hyperpolarising_activated_current__i_f_converted = 0.001 * HeartConfig::Instance()->GetCapacitance() * var_hyperpolarising_activated_current__i_f / NV_Ith_S(mParameters, 8); // uA_per_cm2 + const double var_second_inward_current_f2_gate__K_mf2 = 0.001; // millimolar + const double var_second_inward_current_f2_gate__alpha_f2 = 5; // per_second + const double var_second_inward_current_f2_gate__beta_f2 = var_chaste_interface__intracellular_calcium_concentration__Cai * var_second_inward_current_f2_gate__alpha_f2 / var_second_inward_current_f2_gate__K_mf2; // per_second + const double var_second_inward_current_f2_gate__tau_f2 = 1 / (var_second_inward_current_f2_gate__alpha_f2 + var_second_inward_current_f2_gate__beta_f2); // second + const double var_second_inward_current_f_gate__E0_f = 34 + var_chaste_interface__membrane__V; // millivolt + const double var_second_inward_current_f_gate__beta_f = 50 / (1 + exp(-8.5 - 0.25 * var_chaste_interface__membrane__V)); // per_second + const double var_second_inward_current_f_gate__delta_f = 0.0001; // millivolt + const double var_second_inward_current_f_gate__alpha_f = ((var_second_inward_current_f_gate__delta_f > fabs(var_second_inward_current_f_gate__E0_f)) ? (25) : (6.25 * var_second_inward_current_f_gate__E0_f / (-1 + exp(0.25 * var_second_inward_current_f_gate__E0_f)))); // per_second + const double var_second_inward_current__i_siCa = (((var_chaste_interface__membrane__V >= 49.999998664311967) && (var_chaste_interface__membrane__V <= 50.000001335688033)) ? (374338.90823576227 * (-49.999998664311967 + var_chaste_interface__membrane__V) * (1.9999999999556149e-7 * (var_chaste_interface__intracellular_calcium_concentration__Cai * exp(3.7433890822745473) - NV_Ith_S(mParameters, 5) * exp(9.9999999997780743e-8)) * NV_Ith_S(mParameters, 7) * var_chaste_interface__second_inward_current_d_gate__d * var_chaste_interface__second_inward_current_f2_gate__f2 * var_chaste_interface__second_inward_current_f_gate__f / (1 - exp(9.9999999997780743e-8)) + 1.9999999999556149e-7 * (var_chaste_interface__intracellular_calcium_concentration__Cai * exp(3.7433890822745473) - NV_Ith_S(mParameters, 5) * exp(-9.9999999997780743e-8)) * NV_Ith_S(mParameters, 7) * var_chaste_interface__second_inward_current_d_gate__d * var_chaste_interface__second_inward_current_f2_gate__f2 * var_chaste_interface__second_inward_current_f_gate__f / (1 - exp(-9.9999999997780743e-8))) - 1.9999999999556149e-7 * (var_chaste_interface__intracellular_calcium_concentration__Cai * exp(3.7433890822745473) - NV_Ith_S(mParameters, 5) * exp(9.9999999997780743e-8)) * NV_Ith_S(mParameters, 7) * var_chaste_interface__second_inward_current_d_gate__d * var_chaste_interface__second_inward_current_f2_gate__f2 * var_chaste_interface__second_inward_current_f_gate__f / (1 - exp(9.9999999997780743e-8))) : (0.14973556329098189 * (-50 + var_chaste_interface__membrane__V) * (var_chaste_interface__intracellular_calcium_concentration__Cai * exp(3.7433890822745473) - NV_Ith_S(mParameters, 5) * exp(3.7433890822745473 - 0.074867781645490947 * var_chaste_interface__membrane__V)) * NV_Ith_S(mParameters, 7) * var_chaste_interface__second_inward_current_d_gate__d * var_chaste_interface__second_inward_current_f2_gate__f2 * var_chaste_interface__second_inward_current_f_gate__f / (1 - exp(3.7433890822745473 - 0.074867781645490947 * var_chaste_interface__membrane__V)))); // nanoA + const double var_second_inward_current__i_siK = (((var_chaste_interface__membrane__V >= 49.999997328623934) && (var_chaste_interface__membrane__V <= 50.000002671376066)) ? (187169.45411399176 * (-49.999997328623934 + var_chaste_interface__membrane__V) * (9.9999999999858744e-10 * (var_chaste_interface__intracellular_potassium_concentration__Ki * exp(1.8716945411372736) - var_chaste_interface__extracellular_potassium_concentration__Kc * exp(9.9999999999858739e-8)) * NV_Ith_S(mParameters, 7) * var_chaste_interface__second_inward_current_d_gate__d * var_chaste_interface__second_inward_current_f2_gate__f2 * var_chaste_interface__second_inward_current_f_gate__f / (1 - exp(9.9999999999858739e-8)) + 9.9999999999858744e-10 * (var_chaste_interface__intracellular_potassium_concentration__Ki * exp(1.8716945411372736) - var_chaste_interface__extracellular_potassium_concentration__Kc * exp(-9.9999999999858739e-8)) * NV_Ith_S(mParameters, 7) * var_chaste_interface__second_inward_current_d_gate__d * var_chaste_interface__second_inward_current_f2_gate__f2 * var_chaste_interface__second_inward_current_f_gate__f / (1 - exp(-9.9999999999858739e-8))) - 9.9999999999858744e-10 * (var_chaste_interface__intracellular_potassium_concentration__Ki * exp(1.8716945411372736) - var_chaste_interface__extracellular_potassium_concentration__Kc * exp(9.9999999999858739e-8)) * NV_Ith_S(mParameters, 7) * var_chaste_interface__second_inward_current_d_gate__d * var_chaste_interface__second_inward_current_f2_gate__f2 * var_chaste_interface__second_inward_current_f_gate__f / (1 - exp(9.9999999999858739e-8))) : (0.00037433890822745472 * (-50 + var_chaste_interface__membrane__V) * (var_chaste_interface__intracellular_potassium_concentration__Ki * exp(1.8716945411372736) - var_chaste_interface__extracellular_potassium_concentration__Kc * exp(1.8716945411372736 - 0.037433890822745473 * var_chaste_interface__membrane__V)) * NV_Ith_S(mParameters, 7) * var_chaste_interface__second_inward_current_d_gate__d * var_chaste_interface__second_inward_current_f2_gate__f2 * var_chaste_interface__second_inward_current_f_gate__f / (1 - exp(1.8716945411372736 - 0.037433890822745473 * var_chaste_interface__membrane__V)))); // nanoA + const double var_second_inward_current__i_siNa = (((var_chaste_interface__membrane__V >= 49.999997328623934) && (var_chaste_interface__membrane__V <= 50.000002671376066)) ? (187169.45411399176 * (-49.999997328623934 + var_chaste_interface__membrane__V) * (9.9999999999858744e-10 * (var_chaste_interface__intracellular_sodium_concentration__Nai * exp(1.8716945411372736) - NV_Ith_S(mParameters, 6) * exp(9.9999999999858739e-8)) * NV_Ith_S(mParameters, 7) * var_chaste_interface__second_inward_current_d_gate__d * var_chaste_interface__second_inward_current_f2_gate__f2 * var_chaste_interface__second_inward_current_f_gate__f / (1 - exp(9.9999999999858739e-8)) + 9.9999999999858744e-10 * (var_chaste_interface__intracellular_sodium_concentration__Nai * exp(1.8716945411372736) - NV_Ith_S(mParameters, 6) * exp(-9.9999999999858739e-8)) * NV_Ith_S(mParameters, 7) * var_chaste_interface__second_inward_current_d_gate__d * var_chaste_interface__second_inward_current_f2_gate__f2 * var_chaste_interface__second_inward_current_f_gate__f / (1 - exp(-9.9999999999858739e-8))) - 9.9999999999858744e-10 * (var_chaste_interface__intracellular_sodium_concentration__Nai * exp(1.8716945411372736) - NV_Ith_S(mParameters, 6) * exp(9.9999999999858739e-8)) * NV_Ith_S(mParameters, 7) * var_chaste_interface__second_inward_current_d_gate__d * var_chaste_interface__second_inward_current_f2_gate__f2 * var_chaste_interface__second_inward_current_f_gate__f / (1 - exp(9.9999999999858739e-8))) : (0.00037433890822745472 * (-50 + var_chaste_interface__membrane__V) * (var_chaste_interface__intracellular_sodium_concentration__Nai * exp(1.8716945411372736) - NV_Ith_S(mParameters, 6) * exp(1.8716945411372736 - 0.037433890822745473 * var_chaste_interface__membrane__V)) * NV_Ith_S(mParameters, 7) * var_chaste_interface__second_inward_current_d_gate__d * var_chaste_interface__second_inward_current_f2_gate__f2 * var_chaste_interface__second_inward_current_f_gate__f / (1 - exp(1.8716945411372736 - 0.037433890822745473 * var_chaste_interface__membrane__V)))); // nanoA + const double var_second_inward_current__i_si = var_second_inward_current__i_siCa + var_second_inward_current__i_siK + var_second_inward_current__i_siNa; // nanoA + const double var_second_inward_current__i_si_converted = 0.001 * HeartConfig::Instance()->GetCapacitance() * var_second_inward_current__i_si / NV_Ith_S(mParameters, 8); // uA_per_cm2 + const double var_second_inward_current_f_gate__tau_f = 1 / (var_second_inward_current_f_gate__alpha_f + var_second_inward_current_f_gate__beta_f); // second + const double var_stimulus__i_pulse_converted = GetIntracellularAreaStimulus(var_chaste_interface__environment__time_converted); // uA_per_cm2 + const double var_time_dependent_potassium_current__I_K = 0.0071428571428571426 * (-var_chaste_interface__extracellular_potassium_concentration__Kc * exp(-var_chaste_interface__membrane__V / var_membrane__RTONF) + var_chaste_interface__intracellular_potassium_concentration__Ki) * NV_Ith_S(mParameters, 9); // nanoA + const double var_time_dependent_potassium_current__i_K = var_time_dependent_potassium_current__I_K * var_chaste_interface__time_dependent_potassium_current_x_gate__x; // nanoA + const double var_time_dependent_potassium_current__i_K_converted = 0.001 * HeartConfig::Instance()->GetCapacitance() * var_time_dependent_potassium_current__i_K / NV_Ith_S(mParameters, 8); // uA_per_cm2 + const double var_time_independent_potassium_current__Km_K1 = 210; // millimolar + const double var_time_independent_potassium_current__i_K1 = (-var_hyperpolarising_activated_current__E_K + var_chaste_interface__membrane__V) * var_chaste_interface__extracellular_potassium_concentration__Kc * NV_Ith_S(mParameters, 15) / ((1 + exp(2 * (10 - var_hyperpolarising_activated_current__E_K + var_chaste_interface__membrane__V) / var_membrane__RTONF)) * (var_chaste_interface__extracellular_potassium_concentration__Kc + var_time_independent_potassium_current__Km_K1)); // nanoA + const double var_time_independent_potassium_current__i_K1_converted = 0.001 * HeartConfig::Instance()->GetCapacitance() * var_time_independent_potassium_current__i_K1 / NV_Ith_S(mParameters, 8); // uA_per_cm2 + const double var_transient_outward_current__i_to = (((var_chaste_interface__membrane__V >= -10.000000500000001) && (var_chaste_interface__membrane__V <= -9.9999994999999995)) ? (999999.99999899988 * (10.000000500000001 + var_chaste_interface__membrane__V) * (5.0000000000050004e-7 * (0.20000000000000001 + var_chaste_interface__extracellular_potassium_concentration__Kc / (10 + var_chaste_interface__extracellular_potassium_concentration__Kc)) * (var_chaste_interface__intracellular_potassium_concentration__Ki * exp(-0.18716946347220006) - var_chaste_interface__extracellular_potassium_concentration__Kc * exp(0.18716946347220006)) * var_chaste_interface__intracellular_calcium_concentration__Cai * NV_Ith_S(mParameters, 17) * var_chaste_interface__transient_outward_current_s_gate__s / ((1 - exp(1.0000000000010001e-7)) * (0.00050000000000000001 + var_chaste_interface__intracellular_calcium_concentration__Cai)) + 5.0000000000050004e-7 * (0.20000000000000001 + var_chaste_interface__extracellular_potassium_concentration__Kc / (10 + var_chaste_interface__extracellular_potassium_concentration__Kc)) * (var_chaste_interface__intracellular_potassium_concentration__Ki * exp(-0.18716944475525465) - var_chaste_interface__extracellular_potassium_concentration__Kc * exp(0.18716944475525465)) * var_chaste_interface__intracellular_calcium_concentration__Cai * NV_Ith_S(mParameters, 17) * var_chaste_interface__transient_outward_current_s_gate__s / ((1 - exp(-1.0000000000010001e-7)) * (0.00050000000000000001 + var_chaste_interface__intracellular_calcium_concentration__Cai))) - 5.0000000000050004e-7 * (0.20000000000000001 + var_chaste_interface__extracellular_potassium_concentration__Kc / (10 + var_chaste_interface__extracellular_potassium_concentration__Kc)) * (var_chaste_interface__intracellular_potassium_concentration__Ki * exp(-0.18716946347220006) - var_chaste_interface__extracellular_potassium_concentration__Kc * exp(0.18716946347220006)) * var_chaste_interface__intracellular_calcium_concentration__Cai * NV_Ith_S(mParameters, 17) * var_chaste_interface__transient_outward_current_s_gate__s / ((1 - exp(1.0000000000010001e-7)) * (0.00050000000000000001 + var_chaste_interface__intracellular_calcium_concentration__Cai))) : ((10 + var_chaste_interface__membrane__V) * (0.20000000000000001 + var_chaste_interface__extracellular_potassium_concentration__Kc / (10 + var_chaste_interface__extracellular_potassium_concentration__Kc)) * (var_chaste_interface__intracellular_potassium_concentration__Ki * exp(0.018716945411372737 * var_chaste_interface__membrane__V) - var_chaste_interface__extracellular_potassium_concentration__Kc * exp(-0.018716945411372737 * var_chaste_interface__membrane__V)) * var_chaste_interface__intracellular_calcium_concentration__Cai * NV_Ith_S(mParameters, 17) * var_chaste_interface__transient_outward_current_s_gate__s / ((1 - exp(-2 - 0.20000000000000001 * var_chaste_interface__membrane__V)) * (0.00050000000000000001 + var_chaste_interface__intracellular_calcium_concentration__Cai)))); // nanoA + const double var_transient_outward_current__i_to_converted = 0.001 * HeartConfig::Instance()->GetCapacitance() * var_transient_outward_current__i_to / NV_Ith_S(mParameters, 8); // uA_per_cm2 + +#if CHASTE_SUNDIALS_VERSION >= 60000 + N_Vector dqs = N_VNew_Serial(15, CvodeContextManager::Instance()->GetSundialsContext()); +#else + N_Vector dqs = N_VNew_Serial(15); +#endif + NV_Ith_S(dqs, 0) = var_intracellular_calcium_concentration__i_rel; + NV_Ith_S(dqs, 1) = var_second_inward_current__i_si_converted; + NV_Ith_S(dqs, 2) = var_second_inward_current_f2_gate__tau_f2; + NV_Ith_S(dqs, 3) = var_second_inward_current_f_gate__tau_f; + NV_Ith_S(dqs, 4) = var_time_dependent_potassium_current__i_K_converted; + NV_Ith_S(dqs, 5) = var_fast_sodium_current__i_Na_converted; + NV_Ith_S(dqs, 6) = var_fast_sodium_current_h_gate__tau_h; + NV_Ith_S(dqs, 7) = var_hyperpolarising_activated_current__i_f_converted; + NV_Ith_S(dqs, 8) = var_hyperpolarising_activated_current__i_fK; + NV_Ith_S(dqs, 9) = var_hyperpolarising_activated_current__i_fNa; + NV_Ith_S(dqs, 10) = var_time_independent_potassium_current__i_K1_converted; + NV_Ith_S(dqs, 11) = var_Na_Ca_exchanger__i_NaCa_converted; + NV_Ith_S(dqs, 12) = var_stimulus__i_pulse_converted; + NV_Ith_S(dqs, 13) = var_transient_outward_current__i_to_converted; + NV_Ith_S(dqs, 14) = var_chaste_interface__environment__time_converted; + return dqs; + } + +template<> +void OdeSystemInformation::Initialise(void) +{ + this->mSystemName = "difrancesco_noble_model_1985"; + this->mFreeVariableName = "time"; + this->mFreeVariableUnits = "millisecond"; + + // NV_Ith_S(rY, 0): + this->mVariableNames.push_back("membrane_voltage"); + this->mVariableUnits.push_back("millivolt"); + this->mInitialConditions.push_back(-87.0); + + // NV_Ith_S(rY, 1): + this->mVariableNames.push_back("cytosolic_calcium_concentration"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(5e-05); + + // NV_Ith_S(rY, 2): + this->mVariableNames.push_back("hyperpolarising_activated_current_y_gate__y"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.2); + + // NV_Ith_S(rY, 3): + this->mVariableNames.push_back("time_dependent_potassium_current_x_gate__x"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.01); + + // NV_Ith_S(rY, 4): + this->mVariableNames.push_back("transient_outward_current_s_gate__s"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(1.0); + + // NV_Ith_S(rY, 5): + this->mVariableNames.push_back("membrane_fast_sodium_current_m_gate"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.01); + + // NV_Ith_S(rY, 6): + this->mVariableNames.push_back("membrane_fast_sodium_current_h_gate"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.8); + + // NV_Ith_S(rY, 7): + this->mVariableNames.push_back("membrane_L_type_calcium_current_d_gate"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.005); + + // NV_Ith_S(rY, 8): + this->mVariableNames.push_back("membrane_L_type_calcium_current_f_gate"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(1.0); + + // NV_Ith_S(rY, 9): + this->mVariableNames.push_back("membrane_L_type_calcium_current_fCa_gate"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(1.0); + + // NV_Ith_S(rY, 10): + this->mVariableNames.push_back("cytosolic_sodium_concentration"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(8.0); + + // NV_Ith_S(rY, 11): + this->mVariableNames.push_back("intracellular_calcium_concentration__Ca_up"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(2.0); + + // NV_Ith_S(rY, 12): + this->mVariableNames.push_back("JSR_calcium_concentration"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(1.0); + + // NV_Ith_S(rY, 13): + this->mVariableNames.push_back("intracellular_calcium_concentration__p"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(1.0); + + // NV_Ith_S(rY, 14): + this->mVariableNames.push_back("extracellular_potassium_concentration"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(4.0); + + // NV_Ith_S(rY, 15): + this->mVariableNames.push_back("cytosolic_potassium_concentration"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(140.0); + + // mParameters[0]: + this->mParameterNames.push_back("SR_release_current_max"); + this->mParameterUnits.push_back("dimensionless"); + + // mParameters[1]: + this->mParameterNames.push_back("SR_release_kmcacyt"); + this->mParameterUnits.push_back("millimolar"); + + // mParameters[2]: + this->mParameterNames.push_back("SR_uptake_current_max"); + this->mParameterUnits.push_back("dimensionless"); + + // mParameters[3]: + this->mParameterNames.push_back("bath_potassium_concentration"); + this->mParameterUnits.push_back("millimolar"); + + // mParameters[4]: + this->mParameterNames.push_back("concentration_clamp_onoff"); + this->mParameterUnits.push_back("dimensionless"); + + // mParameters[5]: + this->mParameterNames.push_back("extracellular_calcium_concentration"); + this->mParameterUnits.push_back("millimolar"); + + // mParameters[6]: + this->mParameterNames.push_back("extracellular_sodium_concentration"); + this->mParameterUnits.push_back("millimolar"); + + // mParameters[7]: + this->mParameterNames.push_back("membrane_L_type_calcium_current_conductance"); + this->mParameterUnits.push_back("nanoA_per_millimolar"); + + // mParameters[8]: + this->mParameterNames.push_back("membrane_capacitance"); + this->mParameterUnits.push_back("microF"); + + // mParameters[9]: + this->mParameterNames.push_back("membrane_delayed_rectifier_potassium_current_conductance"); + this->mParameterUnits.push_back("nanoA"); + + // mParameters[10]: + this->mParameterNames.push_back("membrane_fast_sodium_current_conductance"); + this->mParameterUnits.push_back("microS"); + + // mParameters[11]: + this->mParameterNames.push_back("membrane_fast_sodium_current_reduced_inactivation"); + this->mParameterUnits.push_back("dimensionless"); + + // mParameters[12]: + this->mParameterNames.push_back("membrane_fast_sodium_current_shift_inactivation"); + this->mParameterUnits.push_back("millivolt"); + + // mParameters[13]: + this->mParameterNames.push_back("membrane_hyperpolarisation_activated_funny_current_potassium_component_conductance"); + this->mParameterUnits.push_back("microS"); + + // mParameters[14]: + this->mParameterNames.push_back("membrane_hyperpolarisation_activated_funny_current_sodium_component_conductance"); + this->mParameterUnits.push_back("microS"); + + // mParameters[15]: + this->mParameterNames.push_back("membrane_inward_rectifier_potassium_current_conductance"); + this->mParameterUnits.push_back("microS"); + + // mParameters[16]: + this->mParameterNames.push_back("membrane_sodium_calcium_exchanger_current_conductance"); + this->mParameterUnits.push_back("nanoA"); + + // mParameters[17]: + this->mParameterNames.push_back("membrane_transient_outward_current_conductance"); + this->mParameterUnits.push_back("microS_per_millimolar"); + + // Derived Quantity index [0]: + this->mDerivedQuantityNames.push_back("SR_release_current"); + this->mDerivedQuantityUnits.push_back("nanoA"); + + // Derived Quantity index [1]: + this->mDerivedQuantityNames.push_back("membrane_L_type_calcium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [2]: + this->mDerivedQuantityNames.push_back("membrane_L_type_calcium_current_fCa_gate_tau"); + this->mDerivedQuantityUnits.push_back("second"); + + // Derived Quantity index [3]: + this->mDerivedQuantityNames.push_back("membrane_L_type_calcium_current_f_gate_tau"); + this->mDerivedQuantityUnits.push_back("second"); + + // Derived Quantity index [4]: + this->mDerivedQuantityNames.push_back("membrane_delayed_rectifier_potassium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [5]: + this->mDerivedQuantityNames.push_back("membrane_fast_sodium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [6]: + this->mDerivedQuantityNames.push_back("membrane_fast_sodium_current_h_gate_tau"); + this->mDerivedQuantityUnits.push_back("second"); + + // Derived Quantity index [7]: + this->mDerivedQuantityNames.push_back("membrane_hyperpolarisation_activated_funny_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [8]: + this->mDerivedQuantityNames.push_back("membrane_hyperpolarisation_activated_funny_current_potassium_component"); + this->mDerivedQuantityUnits.push_back("nanoA"); + + // Derived Quantity index [9]: + this->mDerivedQuantityNames.push_back("membrane_hyperpolarisation_activated_funny_current_sodium_component"); + this->mDerivedQuantityUnits.push_back("nanoA"); + + // Derived Quantity index [10]: + this->mDerivedQuantityNames.push_back("membrane_inward_rectifier_potassium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [11]: + this->mDerivedQuantityNames.push_back("membrane_sodium_calcium_exchanger_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [12]: + this->mDerivedQuantityNames.push_back("membrane_stimulus_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [13]: + this->mDerivedQuantityNames.push_back("membrane_transient_outward_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [14]: + this->mDerivedQuantityNames.push_back("time"); + this->mDerivedQuantityUnits.push_back("millisecond"); + + + this->mAttributes["SuggestedCycleLength"] = 2000; + this->mInitialised = true; +} + +// Serialization for Boost >= 1.36 +#include "SerializationExportWrapperForCpp.hpp" +CHASTE_CLASS_EXPORT(Celldifrancesco_noble_model_1985FromCellMLCvode) + +#endif // CHASTE_CVODE diff --git a/chaste_codegen/tests/numerical/baseline/Cvode/difrancesco_noble_model_1985.hpp b/chaste_codegen/tests/numerical/baseline/Cvode/difrancesco_noble_model_1985.hpp new file mode 100644 index 00000000..c9a0a09c --- /dev/null +++ b/chaste_codegen/tests/numerical/baseline/Cvode/difrancesco_noble_model_1985.hpp @@ -0,0 +1,86 @@ +#ifdef CHASTE_CVODE +#ifndef CELLDIFRANCESCO_NOBLE_MODEL_1985FROMCELLMLCVODE_HPP_ +#define CELLDIFRANCESCO_NOBLE_MODEL_1985FROMCELLMLCVODE_HPP_ + +//! @file +//! +//! This source file was generated from CellML by chaste_codegen version (version omitted as unimportant) +//! +//! Model: difrancesco_noble_model_1985 +//! +//! Processed by chaste_codegen: https://github.com/ModellingWebLab/chaste-codegen +//! (translator: chaste_codegen, model type: NumericCvode) +//! on (date omitted as unimportant) +//! +//! + +#include "ChasteSerialization.hpp" +#include +#include "AbstractStimulusFunction.hpp" +#include "AbstractCvodeCell.hpp" + +class Celldifrancesco_noble_model_1985FromCellMLCvode : public AbstractCvodeCell +{ + friend class boost::serialization::access; + template + void serialize(Archive & archive, const unsigned int version) + { + archive & boost::serialization::base_object(*this); + + } + + // + // Settable parameters and readable variables + // + + +private: +const bool is_concentration[16] = {false, true, false, false, false, false, false, false, false, false, true, false, true, false, true, true}; +const bool is_probability[16] = {false, false, false, false, false, true, true, true, true, true, false, false, false, false, false, false}; +public: + + boost::shared_ptr UseCellMLDefaultStimulus(); + double GetIntracellularCalciumConcentration(); + Celldifrancesco_noble_model_1985FromCellMLCvode(boost::shared_ptr pOdeSolver /* unused; should be empty */, boost::shared_ptr pIntracellularStimulus); + ~Celldifrancesco_noble_model_1985FromCellMLCvode(); + void VerifyStateVariables(); + double GetIIonic(const std::vector* pStateVariables=NULL); + void EvaluateYDerivatives(double var_chaste_interface__environment__time_converted, const N_Vector rY, N_Vector rDY); + N_Vector ComputeDerivedQuantities(double var_chaste_interface__environment__time_converted, const N_Vector & rY); +}; + +// Needs to be included last +#include "SerializationExportWrapper.hpp" +CHASTE_CLASS_EXPORT(Celldifrancesco_noble_model_1985FromCellMLCvode) + +namespace boost +{ + namespace serialization + { + template + inline void save_construct_data( + Archive & ar, const Celldifrancesco_noble_model_1985FromCellMLCvode * t, const unsigned int fileVersion) + { + const boost::shared_ptr p_solver = t->GetSolver(); + const boost::shared_ptr p_stimulus = t->GetStimulusFunction(); + ar << p_solver; + ar << p_stimulus; + } + + template + inline void load_construct_data( + Archive & ar, Celldifrancesco_noble_model_1985FromCellMLCvode * t, const unsigned int fileVersion) + { + boost::shared_ptr p_solver; + boost::shared_ptr p_stimulus; + ar >> p_solver; + ar >> p_stimulus; + ::new(t)Celldifrancesco_noble_model_1985FromCellMLCvode(p_solver, p_stimulus); + } + + } + +} + +#endif // CELLDIFRANCESCO_NOBLE_MODEL_1985FROMCELLMLCVODE_HPP_ +#endif // CHASTE_CVODE \ No newline at end of file diff --git a/chaste_codegen/tests/numerical/baseline/Cvode/dynamic_mahajan_shiferaw_2008.cpp b/chaste_codegen/tests/numerical/baseline/Cvode/dynamic_mahajan_shiferaw_2008.cpp new file mode 100644 index 00000000..1320099a --- /dev/null +++ b/chaste_codegen/tests/numerical/baseline/Cvode/dynamic_mahajan_shiferaw_2008.cpp @@ -0,0 +1,1050 @@ +#ifdef CHASTE_CVODE +//! @file +//! +//! This source file was generated from CellML by chaste_codegen version (version omitted as unimportant) +//! +//! Model: MahajanShiferaw2008_units +//! +//! Processed by chaste_codegen: https://github.com/ModellingWebLab/chaste-codegen +//! (translator: chaste_codegen, model type: NumericCvode) +//! on (date omitted as unimportant) +//! +//! + +#include "dynamic_mahajan_shiferaw_2008.hpp" +#include +#include +#include +#include +#include "Exception.hpp" +#include "OdeSystemInformation.hpp" +#include "RegularStimulus.hpp" +#include "HeartConfig.hpp" +#include "IsNan.hpp" +#include "MathsCustomFunctions.hpp" + +#if CHASTE_SUNDIALS_VERSION >= 60000 +#include "CvodeContextManager.hpp" +#endif + + + + + + boost::shared_ptr Dynamicmahajan_shiferaw_2008FromCellMLCvode::UseCellMLDefaultStimulus() + { + // Use the default stimulus specified by CellML metadata + const double var_chaste_interface__cell__stim_amplitude_converted = -14.999999999999998 * HeartConfig::Instance()->GetCapacitance(); // uA_per_cm2 + const double var_chaste_interface__cell__stim_duration = 3; // ms + const double var_chaste_interface__cell__stim_offset = 100; // ms + const double var_chaste_interface__cell__stim_period = 400; // ms + boost::shared_ptr p_cellml_stim(new RegularStimulus( + -fabs(var_chaste_interface__cell__stim_amplitude_converted), + var_chaste_interface__cell__stim_duration, + var_chaste_interface__cell__stim_period, + var_chaste_interface__cell__stim_offset + )); + mpIntracellularStimulus = p_cellml_stim; + return p_cellml_stim; + } + + double Dynamicmahajan_shiferaw_2008FromCellMLCvode::GetIntracellularCalciumConcentration() + { + return NV_Ith_S(mStateVariables, 1); + } + + Dynamicmahajan_shiferaw_2008FromCellMLCvode::Dynamicmahajan_shiferaw_2008FromCellMLCvode(boost::shared_ptr pOdeSolver /* unused; should be empty */, boost::shared_ptr pIntracellularStimulus) + : AbstractCvodeCell( + pOdeSolver, + 26, + 0, + pIntracellularStimulus) + { + // Time units: millisecond + // + this->mpSystemInfo = OdeSystemInformation::Instance(); + Init(); + + // We have a default stimulus specified in the CellML file metadata + this->mHasDefaultStimulusFromCellML = true; + + NV_Ith_S(this->mParameters, 0) = 2.069e-5; // (var_Ileak_Iup_Ixfer__gleak) [per_ms] + NV_Ith_S(this->mParameters, 1) = 1; // (var_Irel__release_factor) [dimensionless] + NV_Ith_S(this->mParameters, 2) = 0.40000000000000002; // (var_Ileak_Iup_Ixfer__vup) [uM_per_ms] + NV_Ith_S(this->mParameters, 3) = 1; // (var_Na__conc_clamp) [dimensionless] + NV_Ith_S(this->mParameters, 4) = 140; // (var_reversal_potentials__K_i) [mM] + NV_Ith_S(this->mParameters, 5) = 1.8; // (var_Environment__Ca_o) [mM] + NV_Ith_S(this->mParameters, 6) = 5.4000000000000004; // (var_Environment__K_o) [mM] + NV_Ith_S(this->mParameters, 7) = 136; // (var_Environment__Na_o) [mM] + NV_Ith_S(this->mParameters, 8) = 96.485341500000004; // (var_Environment__F) [coulomb_per_mmole] + NV_Ith_S(this->mParameters, 9) = 8.3144720000000003; // (var_Environment__R) [J_per_moleK] + NV_Ith_S(this->mParameters, 10) = 0.00054000000000000001; // (var_ICaL__pca) [cm_per_s] + NV_Ith_S(this->mParameters, 11) = 12; // (var_INa__gna) [uS_per_nF] + NV_Ith_S(this->mParameters, 12) = 0; // (var_INa__perc_reduced_inact_for_IpNa) [dimensionless] + NV_Ith_S(this->mParameters, 13) = 0; // (var_INa__shift_h) [mV] + NV_Ith_S(this->mParameters, 14) = 0.11; // (var_Ito__gtof) [uS_per_nF] + NV_Ith_S(this->mParameters, 15) = 0.29999999999999999; // (var_IK1__gkix) [uS_per_nF] + NV_Ith_S(this->mParameters, 16) = 0.012500000000000001; // (var_IKr__gkr) [uS_per_nF] + NV_Ith_S(this->mParameters, 17) = 0.1386; // (var_IKs__gks) [uS_per_nF] + NV_Ith_S(this->mParameters, 18) = 0.040000000000000001; // (var_Ito__gtos) [uS_per_nF] + NV_Ith_S(this->mParameters, 19) = 0.83999999999999997; // (var_INaCa__gNaCa) [uM_per_ms] + NV_Ith_S(this->mParameters, 20) = 308; // (var_Environment__T) [kelvin] + } + + Dynamicmahajan_shiferaw_2008FromCellMLCvode::~Dynamicmahajan_shiferaw_2008FromCellMLCvode() + { + } + + + void Dynamicmahajan_shiferaw_2008FromCellMLCvode::VerifyStateVariables() + { + + const double tol = 100*this->mAbsTol; + N_Vector rY = rGetStateVariables(); + std::string error_message = ""; + + for (unsigned i=0; i < 26; i++) + { + if(std::isnan(NV_Ith_S(rY, i))){ + error_message += "State variable " + this->rGetStateVariableNames()[i] + " is not a number\n"; + } + if(std::isinf(NV_Ith_S(rY, i))){ + error_message += "State variable " + this->rGetStateVariableNames()[i] + " has become INFINITE\n"; + } + if(this->is_concentration[i] && NV_Ith_S(rY, i) < -tol) + { + error_message += "Concentration " + this->rGetStateVariableNames()[i] + " below 0\n"; + } + if(this->is_probability[i] && NV_Ith_S(rY, i) < -tol) + { + error_message += "Probability " + this->rGetStateVariableNames()[i] + " below 0\n"; + } + if(this->is_probability[i] && NV_Ith_S(rY, i) > 1 + tol) + { + error_message += "Probability " + this->rGetStateVariableNames()[i] + " above 1\n"; + } + } + if (error_message != ""){ + EXCEPTION(DumpState(error_message)); + } + } + + double Dynamicmahajan_shiferaw_2008FromCellMLCvode::GetIIonic(const std::vector* pStateVariables) + { + // For state variable interpolation (SVI) we read in interpolated state variables, + // otherwise for ionic current interpolation (ICI) we use the state variables of this model (node). + N_Vector rY; + bool made_new_cvode_vector = false; + if (!pStateVariables) + { + rY = rGetStateVariables(); + } + else + { + made_new_cvode_vector = true; + rY = MakeNVector(*pStateVariables); + } + double var_chaste_interface__cell__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : NV_Ith_S(rY, 0)); + // Units: mV; Initial value: -87.169816169406 + double var_chaste_interface__Ca__Ca_i_converted = NV_Ith_S(rY, 1); + // Units: millimolar; Initial value: 0.000256752008084 + double var_chaste_interface__INa__xm = NV_Ith_S(rY, 2); + // Units: dimensionless; Initial value: 0.001075453357 + double var_chaste_interface__INa__xh = NV_Ith_S(rY, 3); + // Units: dimensionless; Initial value: 0.990691306716 + double var_chaste_interface__INa__xj = NV_Ith_S(rY, 4); + // Units: dimensionless; Initial value: 0.993888937283 + double var_chaste_interface__ICaL__c1 = NV_Ith_S(rY, 5); + // Units: dimensionless; Initial value: 1.8211252e-05 + double var_chaste_interface__ICaL__c2 = NV_Ith_S(rY, 6); + // Units: dimensionless; Initial value: 0.979322592773 + double var_chaste_interface__ICaL__xi1ca = NV_Ith_S(rY, 7); + // Units: dimensionless; Initial value: 0.001208153482 + double var_chaste_interface__ICaL__xi1ba = NV_Ith_S(rY, 8); + // Units: dimensionless; Initial value: 3.3616596e-05 + double var_chaste_interface__ICaL__xi2ca = NV_Ith_S(rY, 9); + // Units: dimensionless; Initial value: 0.004173008466 + double var_chaste_interface__ICaL__xi2ba = NV_Ith_S(rY, 10); + // Units: dimensionless; Initial value: 0.015242594688 + double var_chaste_interface__IKr__xr = NV_Ith_S(rY, 11); + // Units: dimensionless; Initial value: 0.007074239331 + double var_chaste_interface__IKs__xs1 = NV_Ith_S(rY, 12); + // Units: dimensionless; Initial value: 0.048267587131 + double var_chaste_interface__IKs__xs2 = NV_Ith_S(rY, 13); + // Units: dimensionless; Initial value: 0.105468807033 + double var_chaste_interface__Ito__xtos = NV_Ith_S(rY, 14); + // Units: dimensionless; Initial value: 0.00364776906 + double var_chaste_interface__Ito__ytos = NV_Ith_S(rY, 15); + // Units: dimensionless; Initial value: 0.174403618112 + double var_chaste_interface__Ito__xtof = NV_Ith_S(rY, 16); + // Units: dimensionless; Initial value: 0.003643592594 + double var_chaste_interface__Ito__ytof = NV_Ith_S(rY, 17); + // Units: dimensionless; Initial value: 0.993331326442 + double var_chaste_interface__Na__Na_i = NV_Ith_S(rY, 20); + // Units: mM; Initial value: 11.441712311614 + double var_chaste_interface__Ca__Ca_submem = NV_Ith_S(rY, 22); + // Units: uM; Initial value: 0.226941113355 + + const double var_Ca__Ca_i = 1000 * var_chaste_interface__Ca__Ca_i_converted; // uM + const double var_Ca__csm = 0.001 * var_chaste_interface__Ca__Ca_submem; // mM + const double var_Environment__FonRT = NV_Ith_S(mParameters, 8) / (NV_Ith_S(mParameters, 9) * NV_Ith_S(mParameters, 20)); // per_mV + const double var_ICaL__gca = 182; // mmole_per_coulomb_cm + const double var_ICaL__po = 1 - var_chaste_interface__ICaL__c1 - var_chaste_interface__ICaL__c2 - var_chaste_interface__ICaL__xi1ba - var_chaste_interface__ICaL__xi1ca - var_chaste_interface__ICaL__xi2ba - var_chaste_interface__ICaL__xi2ca; // dimensionless + const double var_IK1__gkix_total = 0.43033148291193518 * sqrt(NV_Ith_S(mParameters, 6)) * NV_Ith_S(mParameters, 15); // uS_per_nF + const double var_IKr__gkr_total = 0.43033148291193518 * sqrt(NV_Ith_S(mParameters, 6)) * NV_Ith_S(mParameters, 16); // uS_per_nF + const double var_IKs__gksx = 1 + 0.80000000000000004 / (1 + 0.125 / pow(var_Ca__Ca_i, 3)); // dimensionless + const double var_IKs__gks_total = NV_Ith_S(mParameters, 17) * var_IKs__gksx; // uS_per_nF + const double var_INaCa__xkdna = 0.29999999999999999; // uM + const double var_INaCa__aloss = 1 / (1 + pow(var_INaCa__xkdna, 3) / pow(var_chaste_interface__Ca__Ca_submem, 3)); // dimensionless + const double var_INaCa__xmcai = 0.0035999999999999999; // mM + const double var_INaCa__xmcao = 1.3; // mM + const double var_INaCa__xmnai = 12.300000000000001; // mM + const double var_INaCa__xmnao = 87.5; // mM + const double var_INaCa__yz2 = pow(var_INaCa__xmnai, 3) * (1 + var_Ca__csm / var_INaCa__xmcai) * NV_Ith_S(mParameters, 5); // mM4 + const double var_INaK__gNaK = 1.5; // nA_per_nF + const double var_INaK__sigma = -0.14285714285714285 + 0.14285714285714285 * exp(0.01485884101040119 * NV_Ith_S(mParameters, 7)); // dimensionless + const double var_INaK__xkmko = 1.5; // mM + const double var_INaK__xkmnai = 12; // mM + const double var_INaCa__yz1 = pow(var_INaCa__xmnao, 3) * var_Ca__csm + pow(var_chaste_interface__Na__Na_i, 3) * var_INaCa__xmcao; // mM4 + const double var_INaCa__yz3 = pow(NV_Ith_S(mParameters, 7), 3) * (1 + pow(var_chaste_interface__Na__Na_i, 3) / pow(var_INaCa__xmnai, 3)) * var_INaCa__xmcai; // mM4 + const double var_INaCa__yz4 = pow(NV_Ith_S(mParameters, 7), 3) * var_Ca__csm + pow(var_chaste_interface__Na__Na_i, 3) * NV_Ith_S(mParameters, 5); // mM4 + const double var_INaCa__zw8 = var_INaCa__yz1 + var_INaCa__yz2 + var_INaCa__yz3 + var_INaCa__yz4; // mM4 + const double var_ICaL__za = 2 * var_Environment__FonRT * var_chaste_interface__cell__V; // dimensionless + const double var_ICaL__rxa = ((fabs(var_ICaL__za) < 0.001) ? (2 * (-0.34100000000000003 * NV_Ith_S(mParameters, 5) + var_Ca__csm * exp(var_ICaL__za)) * NV_Ith_S(mParameters, 8) * NV_Ith_S(mParameters, 10)) : (4 * (-0.34100000000000003 * NV_Ith_S(mParameters, 5) + var_Ca__csm * exp(var_ICaL__za)) * NV_Ith_S(mParameters, 8) * var_Environment__FonRT * NV_Ith_S(mParameters, 10) * var_chaste_interface__cell__V / (-1 + exp(var_ICaL__za)))); // mA_per_cm2 + const double var_ICaL__jca = var_ICaL__gca * var_ICaL__po * var_ICaL__rxa; // uM_per_ms + const double var_IKr__rg = 1 / (1 + exp(1.4732142857142858 + 0.044642857142857144 * var_chaste_interface__cell__V)); // dimensionless + const double var_INaCa__zw3 = pow(var_chaste_interface__Na__Na_i, 3) * NV_Ith_S(mParameters, 5) * exp(0.34999999999999998 * var_Environment__FonRT * var_chaste_interface__cell__V) - pow(NV_Ith_S(mParameters, 7), 3) * var_Ca__csm * exp(-0.65000000000000002 * var_Environment__FonRT * var_chaste_interface__cell__V); // mM4 + const double var_INaCa__zw4 = 1 + 0.20000000000000001 * exp(-0.65000000000000002 * var_Environment__FonRT * var_chaste_interface__cell__V); // dimensionless + const double var_INaCa__jNaCa = var_INaCa__aloss * NV_Ith_S(mParameters, 19) * var_INaCa__zw3 / (var_INaCa__zw4 * var_INaCa__zw8); // uM_per_ms + const double var_INaK__fNaK = 1 / (1 + 0.1245 * exp(-0.10000000000000001 * var_Environment__FonRT * var_chaste_interface__cell__V) + 0.036499999999999998 * var_INaK__sigma * exp(-var_Environment__FonRT * var_chaste_interface__cell__V)); // dimensionless + const double var_INaK__xiNaK = NV_Ith_S(mParameters, 6) * var_INaK__fNaK * var_INaK__gNaK * var_chaste_interface__Na__Na_i / ((NV_Ith_S(mParameters, 6) + var_INaK__xkmko) * (var_INaK__xkmnai + var_chaste_interface__Na__Na_i)); // nA_per_nF + const double var_Ito__rt2 = 3.3500000000000001 + 0.10000000000000001 * var_chaste_interface__cell__V; // dimensionless + const double var_Ito__rs_inf = 1 / (1 + exp(var_Ito__rt2)); // dimensionless + const double var_cell__i_Stim = 0; // nA_per_nF + const double var_cell__wca = 8; // mV_per_uM + const double var_ICaL__xica = 2 * var_ICaL__jca * var_cell__wca; // nA_per_nF + const double var_INaCa__xiNaCa = var_INaCa__jNaCa * var_cell__wca; // nA_per_nF + const double var_reversal_potentials__ek = log(NV_Ith_S(mParameters, 6) / NV_Ith_S(mParameters, 4)) / var_Environment__FonRT; // mV + const double var_IK1__aki = 1.02 / (1 + exp(-14.1227775 + 0.23849999999999999 * var_chaste_interface__cell__V - 0.23849999999999999 * var_reversal_potentials__ek)); // per_ms + const double var_IK1__bki = (exp(-36.698642499999998 + 0.061749999999999999 * var_chaste_interface__cell__V - 0.061749999999999999 * var_reversal_potentials__ek) + 0.49124000000000001 * exp(0.43983232 + 0.080320000000000003 * var_chaste_interface__cell__V - 0.080320000000000003 * var_reversal_potentials__ek)) / (1 + exp(-2.4444678999999998 + 0.51429999999999998 * var_reversal_potentials__ek - 0.51429999999999998 * var_chaste_interface__cell__V)); // per_ms + const double var_IK1__xkin = var_IK1__aki / (var_IK1__aki + var_IK1__bki); // dimensionless + const double var_IK1__xik1 = (-var_reversal_potentials__ek + var_chaste_interface__cell__V) * var_IK1__gkix_total * var_IK1__xkin; // nA_per_nF + const double var_IKr__xikr = (-var_reversal_potentials__ek + var_chaste_interface__cell__V) * var_IKr__gkr_total * var_IKr__rg * var_chaste_interface__IKr__xr; // nA_per_nF + const double var_Ito__xitof = (-var_reversal_potentials__ek + var_chaste_interface__cell__V) * NV_Ith_S(mParameters, 14) * var_chaste_interface__Ito__xtof * var_chaste_interface__Ito__ytof; // nA_per_nF + const double var_Ito__xitos = (-var_reversal_potentials__ek + var_chaste_interface__cell__V) * (0.5 * var_Ito__rs_inf + var_chaste_interface__Ito__ytos) * NV_Ith_S(mParameters, 18) * var_chaste_interface__Ito__xtos; // nA_per_nF + const double var_Ito__xito = var_Ito__xitof + var_Ito__xitos; // nA_per_nF + const double var_reversal_potentials__ena = log(NV_Ith_S(mParameters, 7) / var_chaste_interface__Na__Na_i) / var_Environment__FonRT; // mV + const double var_INa__xina = pow(var_chaste_interface__INa__xm, 3) * (-var_reversal_potentials__ena + var_chaste_interface__cell__V) * NV_Ith_S(mParameters, 11) * var_chaste_interface__INa__xh * var_chaste_interface__INa__xj; // nA_per_nF + const double var_reversal_potentials__prNaK = 0.018329999999999999; // dimensionless + const double var_reversal_potentials__eks = log((NV_Ith_S(mParameters, 7) * var_reversal_potentials__prNaK + NV_Ith_S(mParameters, 6)) / (var_chaste_interface__Na__Na_i * var_reversal_potentials__prNaK + NV_Ith_S(mParameters, 4))) / var_Environment__FonRT; // mV + const double var_IKs__xiks = (-var_reversal_potentials__eks + var_chaste_interface__cell__V) * var_IKs__gks_total * var_chaste_interface__IKs__xs1 * var_chaste_interface__IKs__xs2; // nA_per_nF + const double var_cell__Itotal = -var_ICaL__xica - var_IK1__xik1 - var_IKr__xikr - var_IKs__xiks - var_INa__xina - var_INaCa__xiNaCa - var_INaK__xiNaK - var_Ito__xito - var_cell__i_Stim; // nA_per_nF + const double var_chaste_interface__i_ionic = -0.99999999999999989 * HeartConfig::Instance()->GetCapacitance() * var_cell__Itotal; // uA_per_cm2 + + const double i_ionic = var_chaste_interface__i_ionic; + if (made_new_cvode_vector) + { + DeleteVector(rY); + } + EXCEPT_IF_NOT(!std::isnan(i_ionic)); + return i_ionic; + } + + void Dynamicmahajan_shiferaw_2008FromCellMLCvode::EvaluateYDerivatives(double var_chaste_interface__Environment__time, const N_Vector rY, N_Vector rDY) + { + // Inputs: + // Time units: millisecond + double var_chaste_interface__cell__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : NV_Ith_S(rY, 0)); + // Units: mV; Initial value: -87.169816169406 + double var_chaste_interface__Ca__Ca_i_converted = NV_Ith_S(rY, 1); + // Units: millimolar; Initial value: 0.000256752008084 + double var_chaste_interface__INa__xm = NV_Ith_S(rY, 2); + // Units: dimensionless; Initial value: 0.001075453357 + double var_chaste_interface__INa__xh = NV_Ith_S(rY, 3); + // Units: dimensionless; Initial value: 0.990691306716 + double var_chaste_interface__INa__xj = NV_Ith_S(rY, 4); + // Units: dimensionless; Initial value: 0.993888937283 + double var_chaste_interface__ICaL__c1 = NV_Ith_S(rY, 5); + // Units: dimensionless; Initial value: 1.8211252e-05 + double var_chaste_interface__ICaL__c2 = NV_Ith_S(rY, 6); + // Units: dimensionless; Initial value: 0.979322592773 + double var_chaste_interface__ICaL__xi1ca = NV_Ith_S(rY, 7); + // Units: dimensionless; Initial value: 0.001208153482 + double var_chaste_interface__ICaL__xi1ba = NV_Ith_S(rY, 8); + // Units: dimensionless; Initial value: 3.3616596e-05 + double var_chaste_interface__ICaL__xi2ca = NV_Ith_S(rY, 9); + // Units: dimensionless; Initial value: 0.004173008466 + double var_chaste_interface__ICaL__xi2ba = NV_Ith_S(rY, 10); + // Units: dimensionless; Initial value: 0.015242594688 + double var_chaste_interface__IKr__xr = NV_Ith_S(rY, 11); + // Units: dimensionless; Initial value: 0.007074239331 + double var_chaste_interface__IKs__xs1 = NV_Ith_S(rY, 12); + // Units: dimensionless; Initial value: 0.048267587131 + double var_chaste_interface__IKs__xs2 = NV_Ith_S(rY, 13); + // Units: dimensionless; Initial value: 0.105468807033 + double var_chaste_interface__Ito__xtos = NV_Ith_S(rY, 14); + // Units: dimensionless; Initial value: 0.00364776906 + double var_chaste_interface__Ito__ytos = NV_Ith_S(rY, 15); + // Units: dimensionless; Initial value: 0.174403618112 + double var_chaste_interface__Ito__xtof = NV_Ith_S(rY, 16); + // Units: dimensionless; Initial value: 0.003643592594 + double var_chaste_interface__Ito__ytof = NV_Ith_S(rY, 17); + // Units: dimensionless; Initial value: 0.993331326442 + double var_chaste_interface__Irel__Ca_JSR = NV_Ith_S(rY, 18); + // Units: uM; Initial value: 97.505463697266 + double var_chaste_interface__Irel__xir = NV_Ith_S(rY, 19); + // Units: uM_per_ms; Initial value: 0.006679257264 + double var_chaste_interface__Na__Na_i = NV_Ith_S(rY, 20); + // Units: mM; Initial value: 11.441712311614 + double var_chaste_interface__Ca__Ca_dyad = NV_Ith_S(rY, 21); + // Units: uM; Initial value: 1.716573130685 + double var_chaste_interface__Ca__Ca_submem = NV_Ith_S(rY, 22); + // Units: uM; Initial value: 0.226941113355 + double var_chaste_interface__Ca__Ca_NSR = NV_Ith_S(rY, 23); + // Units: uM; Initial value: 104.450004990523 + double var_chaste_interface__Ca__tropi = NV_Ith_S(rY, 24); + // Units: uM; Initial value: 22.171689894953 + double var_chaste_interface__Ca__trops = NV_Ith_S(rY, 25); + // Units: uM; Initial value: 19.864701949854 + + // Mathematics + double d_dt_chaste_interface_var_cell__V; + const double var_Ca__Ca_i = 1000 * var_chaste_interface__Ca__Ca_i_converted; // uM + const double var_Ca__bcal = 24; // uM + const double var_Ca__bmem = 15; // uM + const double var_Ca__bsar = 42; // uM + const double var_Ca__btrop = 70; // uM + const double var_Ca__csm = 0.001 * var_chaste_interface__Ca__Ca_submem; // mM + const double var_Ca__kmem = 0.29999999999999999; // uM + const double var_Ca__ksar = 13; // uM + const double var_Ca__mempxi = var_Ca__bmem * var_Ca__kmem / pow((var_Ca__Ca_i + var_Ca__kmem), 2); // dimensionless + const double var_Ca__mempxs = var_Ca__bmem * var_Ca__kmem / pow((var_chaste_interface__Ca__Ca_submem + var_Ca__kmem), 2); // dimensionless + const double var_Ca__sarpxi = var_Ca__bsar * var_Ca__ksar / pow((var_Ca__Ca_i + var_Ca__ksar), 2); // dimensionless + const double var_Ca__sarpxs = var_Ca__bsar * var_Ca__ksar / pow((var_chaste_interface__Ca__Ca_submem + var_Ca__ksar), 2); // dimensionless + const double var_Ca__srkd = 0.59999999999999998; // uM + const double var_Ca__srmax = 47; // uM + const double var_Ca__spxi = var_Ca__srkd * var_Ca__srmax / pow((var_Ca__Ca_i + var_Ca__srkd), 2); // dimensionless + const double var_Ca__spxs = var_Ca__srkd * var_Ca__srmax / pow((var_chaste_interface__Ca__Ca_submem + var_Ca__srkd), 2); // dimensionless + const double var_Ca__taud = 4; // ms + const double var_Ca__jd = (-var_Ca__Ca_i + var_chaste_interface__Ca__Ca_submem) / var_Ca__taud; // uM_per_ms + const double var_Ca__taups = 0.5; // ms + const double var_Ca__xkcal = 7; // uM + const double var_Ca__bpxi = var_Ca__bcal * var_Ca__xkcal / pow((var_Ca__Ca_i + var_Ca__xkcal), 2); // dimensionless + const double var_Ca__bpxs = var_Ca__bcal * var_Ca__xkcal / pow((var_chaste_interface__Ca__Ca_submem + var_Ca__xkcal), 2); // dimensionless + const double var_Ca__dciib = 1 / (1 + var_Ca__bpxi + var_Ca__mempxi + var_Ca__sarpxi + var_Ca__spxi); // dimensionless + const double var_Ca__dcsib = 1 / (1 + var_Ca__bpxs + var_Ca__mempxs + var_Ca__sarpxs + var_Ca__spxs); // dimensionless + const double var_Ca__xkoff = 0.019599999999999999; // per_ms + const double var_Ca__xkon = 0.0327; // per_uM_per_ms + const double var_Ca__xbi = -var_chaste_interface__Ca__tropi * var_Ca__xkoff + (-var_chaste_interface__Ca__tropi + var_Ca__btrop) * var_Ca__Ca_i * var_Ca__xkon; // uM_per_ms + const double var_Ca__xbs = -var_chaste_interface__Ca__trops * var_Ca__xkoff + (-var_chaste_interface__Ca__trops + var_Ca__btrop) * var_chaste_interface__Ca__Ca_submem * var_Ca__xkon; // uM_per_ms + const double d_dt_chaste_interface_var_Ca__tropi = var_Ca__xbi; // uM / ms + const double d_dt_chaste_interface_var_Ca__trops = var_Ca__xbs; // uM / ms + const double var_Environment__FonRT = NV_Ith_S(mParameters, 8) / (NV_Ith_S(mParameters, 9) * NV_Ith_S(mParameters, 20)); // per_mV + const double var_ICaL__cat = 3; // uM + const double var_ICaL__cpt = 6.0936500000000002; // uM + const double var_ICaL__fca = 1 / (1 + pow(var_ICaL__cat, 3) / pow(var_chaste_interface__Ca__Ca_dyad, 3)); // dimensionless + const double var_ICaL__gca = 182; // mmole_per_coulomb_cm + const double var_ICaL__k1 = 0.024167999999999999 * var_ICaL__fca; // per_ms + const double var_ICaL__k1t = 0.00413; // per_ms + const double var_ICaL__k2 = 0.000103615; // per_ms + const double var_ICaL__k2t = 0.0022399999999999998; // per_ms + const double var_ICaL__r1 = 0.29999999999999999; // per_ms + const double var_ICaL__r2 = 3; // per_ms + const double var_ICaL__s1 = 0.018268800000000002 * var_ICaL__fca; // per_ms + const double var_ICaL__s1t = 0.0019499999999999999; // per_ms + const double var_ICaL__s2 = var_ICaL__k2 * var_ICaL__r1 * var_ICaL__s1 / (var_ICaL__k1 * var_ICaL__r2); // per_ms + const double var_ICaL__s2t = var_ICaL__k2t * var_ICaL__r1 * var_ICaL__s1t / (var_ICaL__k1t * var_ICaL__r2); // per_ms + const double var_ICaL__s6 = 8; // mV + const double var_ICaL__sx = 3; // mV + const double var_ICaL__sy = 4; // mV + const double var_ICaL__syr = 11.32; // mV + const double var_ICaL__tau3 = 3; // ms + const double var_ICaL__taupo = 1; // ms + const double var_ICaL__tca = 78.032899999999998; // ms + const double var_ICaL__tau_ca = 0.10000000000000001 + var_ICaL__tca / (1 + pow(var_chaste_interface__Ca__Ca_dyad, 4) / pow(var_ICaL__cpt, 4)); // ms + const double var_ICaL__vth = 0; // mV + const double var_ICaL__vx = -40; // mV + const double var_ICaL__vy = -40; // mV + const double var_ICaL__vyr = -40; // mV + const double var_ICaL__po = 1 - var_chaste_interface__ICaL__c1 - var_chaste_interface__ICaL__c2 - var_chaste_interface__ICaL__xi1ba - var_chaste_interface__ICaL__xi1ca - var_chaste_interface__ICaL__xi2ba - var_chaste_interface__ICaL__xi2ca; // dimensionless + const double var_INaCa__xkdna = 0.29999999999999999; // uM + const double var_INaCa__aloss = 1 / (1 + pow(var_INaCa__xkdna, 3) / pow(var_chaste_interface__Ca__Ca_submem, 3)); // dimensionless + const double var_INaCa__xmcai = 0.0035999999999999999; // mM + const double var_INaCa__xmcao = 1.3; // mM + const double var_INaCa__xmnai = 12.300000000000001; // mM + const double var_INaCa__xmnao = 87.5; // mM + const double var_INaCa__yz2 = pow(var_INaCa__xmnai, 3) * (1 + var_Ca__csm / var_INaCa__xmcai) * NV_Ith_S(mParameters, 5); // mM4 + const double var_INaK__gNaK = 1.5; // nA_per_nF + const double var_INaK__sigma = -0.14285714285714285 + 0.14285714285714285 * exp(0.01485884101040119 * NV_Ith_S(mParameters, 7)); // dimensionless + const double var_INaK__xkmko = 1.5; // mM + const double var_INaK__xkmnai = 12; // mM + const double var_Ileak_Iup_Ixfer__cup = 0.5; // uM + const double var_Ileak_Iup_Ixfer__kj = 50; // uM + const double var_Ileak_Iup_Ixfer__jleak = pow(var_chaste_interface__Ca__Ca_NSR, 2) * (-var_Ca__Ca_i + 16.667000000000002 * var_chaste_interface__Ca__Ca_NSR) * NV_Ith_S(mParameters, 0) / (pow(var_chaste_interface__Ca__Ca_NSR, 2) + pow(var_Ileak_Iup_Ixfer__kj, 2)); // uM_per_ms + const double var_Ileak_Iup_Ixfer__jup = pow(var_Ca__Ca_i, 2) * NV_Ith_S(mParameters, 2) / (pow(var_Ca__Ca_i, 2) + pow(var_Ileak_Iup_Ixfer__cup, 2)); // uM_per_ms + const double var_Ca__Ca_i_orig_deriv = (-var_Ca__xbi - var_Ileak_Iup_Ixfer__jup + var_Ca__jd + var_Ileak_Iup_Ixfer__jleak) * var_Ca__dciib; // uM / ms + const double d_dt_chaste_interface_var_Ca__Ca_i_converted = 0.001 * var_Ca__Ca_i_orig_deriv; // millimolar / ms + const double var_Irel__av = 11.300000000000001; // per_ms + const double var_Irel__ax = 0.35759999999999997; // per_mV + const double var_Irel__ay = 0.050000000000000003; // per_mV + const double var_Irel__cstar = 90; // uM + const double var_Irel__bv = -50 + (1 - var_Irel__av) * var_Irel__cstar; // uM_per_ms + const double var_Irel__Qr0 = (((var_chaste_interface__Irel__Ca_JSR > 50) && (var_chaste_interface__Irel__Ca_JSR < var_Irel__cstar)) ? (-50 + var_chaste_interface__Irel__Ca_JSR) : ((var_chaste_interface__Irel__Ca_JSR >= var_Irel__cstar) ? (var_chaste_interface__Irel__Ca_JSR * var_Irel__av + var_Irel__bv) : (0))); // uM_per_ms + const double var_Irel__Qr = var_chaste_interface__Ca__Ca_NSR * var_Irel__Qr0 / var_Irel__cstar; // uM_per_ms + const double var_Irel__gbarsr = 26841.799999999999; // dimensionless + const double var_Irel__gdyad = 9000; // mmole_per_coulomb_cm + const double var_Irel__gryr = 2.5807899999999999; // per_ms + const double var_Irel__taua = 100; // ms + const double d_dt_chaste_interface_var_Irel__Ca_JSR = (-var_chaste_interface__Irel__Ca_JSR + var_chaste_interface__Ca__Ca_NSR) / var_Irel__taua; // uM / ms + const double var_Irel__taur = 30; // ms + const double var_Ca__dCa_JSR = -var_Ileak_Iup_Ixfer__jleak - var_chaste_interface__Irel__xir + var_Ileak_Iup_Ixfer__jup; // uM_per_ms + const double d_dt_chaste_interface_var_Ca__Ca_NSR = var_Ca__dCa_JSR; // uM / ms + const double var_INaCa__yz1 = pow(var_INaCa__xmnao, 3) * var_Ca__csm + pow(var_chaste_interface__Na__Na_i, 3) * var_INaCa__xmcao; // mM4 + const double var_INaCa__yz3 = pow(NV_Ith_S(mParameters, 7), 3) * (1 + pow(var_chaste_interface__Na__Na_i, 3) / pow(var_INaCa__xmnai, 3)) * var_INaCa__xmcai; // mM4 + const double var_INaCa__yz4 = pow(NV_Ith_S(mParameters, 7), 3) * var_Ca__csm + pow(var_chaste_interface__Na__Na_i, 3) * NV_Ith_S(mParameters, 5); // mM4 + const double var_INaCa__zw8 = var_INaCa__yz1 + var_INaCa__yz2 + var_INaCa__yz3 + var_INaCa__yz4; // mM4 + const double var_ICaL__Pr = 1 - 1 / (1 + exp((-var_chaste_interface__cell__V + var_ICaL__vy) / var_ICaL__sy)); // dimensionless + const double var_ICaL__Ps = 1 / (1 + exp((-var_chaste_interface__cell__V + var_ICaL__vyr) / var_ICaL__syr)); // dimensionless + const double var_ICaL__poi = 1 / (1 + exp((-var_chaste_interface__cell__V + var_ICaL__vx) / var_ICaL__sx)); // dimensionless + const double var_ICaL__k3 = (1 - var_ICaL__poi) / var_ICaL__tau3; // per_ms + const double var_ICaL__k3t = var_ICaL__k3; // per_ms + const double var_ICaL__poinf = 1 / (1 + exp((-var_chaste_interface__cell__V + var_ICaL__vth) / var_ICaL__s6)); // dimensionless + const double var_ICaL__alpha = var_ICaL__poinf / var_ICaL__taupo; // per_ms + const double var_ICaL__beta = (1 - var_ICaL__poinf) / var_ICaL__taupo; // per_ms + const double d_dt_chaste_interface_var_ICaL__c1 = var_ICaL__alpha * var_chaste_interface__ICaL__c2 + var_ICaL__k2 * var_chaste_interface__ICaL__xi1ca + var_ICaL__k2t * var_chaste_interface__ICaL__xi1ba + var_ICaL__po * var_ICaL__r2 - (var_ICaL__beta + var_ICaL__k1 + var_ICaL__k1t + var_ICaL__r1) * var_chaste_interface__ICaL__c1; // 1 / ms + const double var_ICaL__recov = 10 + 4954 * exp(0.064102564102564111 * var_chaste_interface__cell__V); // ms + const double var_ICaL__tauba = 450 + (-450 + var_ICaL__recov) * var_ICaL__Pr; // ms + const double var_ICaL__k5t = (1 - var_ICaL__Ps) / var_ICaL__tauba; // per_ms + const double var_ICaL__k6t = var_ICaL__Ps / var_ICaL__tauba; // per_ms + const double var_ICaL__k4t = var_ICaL__alpha * var_ICaL__k1t * var_ICaL__k3t * var_ICaL__k5t / (var_ICaL__beta * var_ICaL__k2t * var_ICaL__k6t); // per_ms + const double d_dt_chaste_interface_var_ICaL__xi1ba = var_chaste_interface__ICaL__c1 * var_ICaL__k1t + var_ICaL__k4t * var_chaste_interface__ICaL__xi2ba + var_ICaL__po * var_ICaL__s1t - (var_ICaL__k2t + var_ICaL__k3t + var_ICaL__s2t) * var_chaste_interface__ICaL__xi1ba; // 1 / ms + const double d_dt_chaste_interface_var_ICaL__xi2ba = var_chaste_interface__ICaL__c2 * var_ICaL__k6t + var_ICaL__k3t * var_chaste_interface__ICaL__xi1ba - (var_ICaL__k4t + var_ICaL__k5t) * var_chaste_interface__ICaL__xi2ba; // 1 / ms + const double var_ICaL__tauca = (-var_ICaL__tau_ca + var_ICaL__recov) * var_ICaL__Pr + var_ICaL__tau_ca; // ms + const double var_ICaL__k5 = (1 - var_ICaL__Ps) / var_ICaL__tauca; // per_ms + const double var_ICaL__k6 = var_ICaL__Ps * var_ICaL__fca / var_ICaL__tauca; // per_ms + const double d_dt_chaste_interface_var_ICaL__c2 = var_ICaL__beta * var_chaste_interface__ICaL__c1 + var_ICaL__k5 * var_chaste_interface__ICaL__xi2ca + var_ICaL__k5t * var_chaste_interface__ICaL__xi2ba - (var_ICaL__alpha + var_ICaL__k6 + var_ICaL__k6t) * var_chaste_interface__ICaL__c2; // 1 / ms + const double var_ICaL__k4 = var_ICaL__alpha * var_ICaL__k1 * var_ICaL__k3 * var_ICaL__k5 / (var_ICaL__beta * var_ICaL__k2 * var_ICaL__k6); // per_ms + const double d_dt_chaste_interface_var_ICaL__xi1ca = var_chaste_interface__ICaL__c1 * var_ICaL__k1 + var_ICaL__k4 * var_chaste_interface__ICaL__xi2ca + var_ICaL__po * var_ICaL__s1 - (var_ICaL__k2 + var_ICaL__k3 + var_ICaL__s2) * var_chaste_interface__ICaL__xi1ca; // 1 / ms + const double d_dt_chaste_interface_var_ICaL__xi2ca = var_chaste_interface__ICaL__c2 * var_ICaL__k6 + var_ICaL__k3 * var_chaste_interface__ICaL__xi1ca - (var_ICaL__k4 + var_ICaL__k5) * var_chaste_interface__ICaL__xi2ca; // 1 / ms + const double var_ICaL__za = 2 * var_Environment__FonRT * var_chaste_interface__cell__V; // dimensionless + const double var_ICaL__rxa = ((fabs(var_ICaL__za) < 0.001) ? (2 * (-0.34100000000000003 * NV_Ith_S(mParameters, 5) + var_Ca__csm * exp(var_ICaL__za)) * NV_Ith_S(mParameters, 8) * NV_Ith_S(mParameters, 10)) : (4 * (-0.34100000000000003 * NV_Ith_S(mParameters, 5) + var_Ca__csm * exp(var_ICaL__za)) * NV_Ith_S(mParameters, 8) * var_Environment__FonRT * NV_Ith_S(mParameters, 10) * var_chaste_interface__cell__V / (-1 + exp(var_ICaL__za)))); // mA_per_cm2 + const double var_ICaL__jca = var_ICaL__gca * var_ICaL__po * var_ICaL__rxa; // uM_per_ms + const double var_IKr__xkrinf = 1 / (1 + exp(-6.666666666666667 - 0.13333333333333333 * var_chaste_interface__cell__V)); // dimensionless + const double var_IKr__xkrv1 = ((fabs(7 + var_chaste_interface__cell__V) > 0.001) ? (0.0013799999999999999 * (7 + var_chaste_interface__cell__V) / (1 - exp(-0.86099999999999999 - 0.123 * var_chaste_interface__cell__V))) : (0.011219512195121951)); // per_ms + const double var_IKr__xkrv2 = ((fabs(10 + var_chaste_interface__cell__V) > 0.001) ? (0.00060999999999999997 * (10 + var_chaste_interface__cell__V) / (-1 + exp(1.45 + 0.14499999999999999 * var_chaste_interface__cell__V))) : (0.0042068965517241376)); // per_ms + const double var_IKr__taukr = 1 / (var_IKr__xkrv1 + var_IKr__xkrv2); // ms + const double d_dt_chaste_interface_var_IKr__xr = (-var_chaste_interface__IKr__xr + var_IKr__xkrinf) / var_IKr__taukr; // 1 / ms + const double var_IKs__tauxs1 = ((fabs(30 + var_chaste_interface__cell__V) < 0.014556040756914121) ? (417.94625266107982) : (1 / (0.00013100000000000001 * (30 + var_chaste_interface__cell__V) / (-1 + exp(2.0609999999999999 + 0.068699999999999997 * var_chaste_interface__cell__V)) + 7.1899999999999999e-5 * (30 + var_chaste_interface__cell__V) / (1 - exp(-4.4399999999999995 - 0.14799999999999999 * var_chaste_interface__cell__V))))); // ms + const double var_IKs__tauxs2 = 4 * var_IKs__tauxs1; // ms + const double var_IKs__xs1ss = 1 / (1 + exp(0.089820359281437126 - 0.059880239520958084 * var_chaste_interface__cell__V)); // dimensionless + const double d_dt_chaste_interface_var_IKs__xs1 = (-var_chaste_interface__IKs__xs1 + var_IKs__xs1ss) / var_IKs__tauxs1; // 1 / ms + const double var_IKs__xs2ss = var_IKs__xs1ss; // dimensionless + const double d_dt_chaste_interface_var_IKs__xs2 = (-var_chaste_interface__IKs__xs2 + var_IKs__xs2ss) / var_IKs__tauxs2; // 1 / ms + const double var_INa__ah = ((var_chaste_interface__cell__V < -40) ? (0.13500000000000001 * exp(-11.764705882352942 + 0.14705882352941177 * NV_Ith_S(mParameters, 13) - 0.14705882352941177 * var_chaste_interface__cell__V)) : (0)); // per_ms + const double var_INa__aj = ((var_chaste_interface__cell__V < -40) ? ((37.780000000000001 + var_chaste_interface__cell__V) * (-127140 * exp(0.24440000000000001 * var_chaste_interface__cell__V - 0.24440000000000001 * NV_Ith_S(mParameters, 13)) - 3.4740000000000003e-5 * exp(0.043909999999999998 * NV_Ith_S(mParameters, 13) - 0.043909999999999998 * var_chaste_interface__cell__V)) / (1 + exp(24.640530000000002 + 0.311 * var_chaste_interface__cell__V))) : (0)); // per_ms + const double var_INa__am = ((fabs(47.130000000000003 + var_chaste_interface__cell__V) > 0.001) ? (0.32000000000000001 * (47.130000000000003 + var_chaste_interface__cell__V) / (1 - exp(-4.7130000000000001 - 0.10000000000000001 * var_chaste_interface__cell__V))) : (3.2000000000000002)); // per_ms + const double var_INa__bh = ((var_chaste_interface__cell__V < -40) ? (310000 * exp(0.34999999999999998 * var_chaste_interface__cell__V - 0.34999999999999998 * NV_Ith_S(mParameters, 13)) + 3.5600000000000001 * exp(0.079000000000000001 * var_chaste_interface__cell__V - 0.079000000000000001 * NV_Ith_S(mParameters, 13))) : (7.6923076923076916 / (1 + exp(-0.96036036036036043 + 0.0900900900900901 * NV_Ith_S(mParameters, 13) - 0.0900900900900901 * var_chaste_interface__cell__V)))); // per_ms + const double var_INa__bj = ((var_chaste_interface__cell__V < -40) ? (0.1212 * exp(0.01052 * NV_Ith_S(mParameters, 13) - 0.01052 * var_chaste_interface__cell__V) / (1 + exp(-5.5312920000000005 - 0.13780000000000001 * var_chaste_interface__cell__V))) : (0.29999999999999999 * exp(2.5349999999999999e-7 * NV_Ith_S(mParameters, 13) - 2.5349999999999999e-7 * var_chaste_interface__cell__V) / (1 + exp(-3.2000000000000002 - 0.10000000000000001 * var_chaste_interface__cell__V)))); // per_ms + const double var_INa__bm = 0.080000000000000002 * exp(-0.090909090909090912 * var_chaste_interface__cell__V); // per_ms + const double d_dt_chaste_interface_var_INa__xm = (1 - var_chaste_interface__INa__xm) * var_INa__am - var_INa__bm * var_chaste_interface__INa__xm; // 1 / ms + const double var_INa__h_inf = 0.01 * NV_Ith_S(mParameters, 12) + (1 - 0.01 * NV_Ith_S(mParameters, 12)) * var_INa__ah / (var_INa__ah + var_INa__bh); // dimensionless + const double var_INa__j_inf = 0.01 * NV_Ith_S(mParameters, 12) + (1 - 0.01 * NV_Ith_S(mParameters, 12)) * var_INa__aj / (var_INa__aj + var_INa__bj); // dimensionless + const double var_INa__tau_h = 1 / (var_INa__ah + var_INa__bh); // ms + const double d_dt_chaste_interface_var_INa__xh = (-var_chaste_interface__INa__xh + var_INa__h_inf) / var_INa__tau_h; // 1 / ms + const double var_INa__tau_j = 1 / (var_INa__aj + var_INa__bj); // ms + const double d_dt_chaste_interface_var_INa__xj = (-var_chaste_interface__INa__xj + var_INa__j_inf) / var_INa__tau_j; // 1 / ms + const double var_INaCa__zw3 = pow(var_chaste_interface__Na__Na_i, 3) * NV_Ith_S(mParameters, 5) * exp(0.34999999999999998 * var_Environment__FonRT * var_chaste_interface__cell__V) - pow(NV_Ith_S(mParameters, 7), 3) * var_Ca__csm * exp(-0.65000000000000002 * var_Environment__FonRT * var_chaste_interface__cell__V); // mM4 + const double var_INaCa__zw4 = 1 + 0.20000000000000001 * exp(-0.65000000000000002 * var_Environment__FonRT * var_chaste_interface__cell__V); // dimensionless + const double var_INaCa__jNaCa = var_INaCa__aloss * NV_Ith_S(mParameters, 19) * var_INaCa__zw3 / (var_INaCa__zw4 * var_INaCa__zw8); // uM_per_ms + const double d_dt_chaste_interface_var_Ca__Ca_submem = (-var_Ca__xbs + 50 * var_INaCa__jNaCa + 50 * var_chaste_interface__Irel__xir - 50 * var_Ca__jd - 50 * var_ICaL__jca) * var_Ca__dcsib; // uM / ms + const double var_INaK__fNaK = 1 / (1 + 0.1245 * exp(-0.10000000000000001 * var_Environment__FonRT * var_chaste_interface__cell__V) + 0.036499999999999998 * var_INaK__sigma * exp(-var_Environment__FonRT * var_chaste_interface__cell__V)); // dimensionless + const double var_INaK__xiNaK = NV_Ith_S(mParameters, 6) * var_INaK__fNaK * var_INaK__gNaK * var_chaste_interface__Na__Na_i / ((NV_Ith_S(mParameters, 6) + var_INaK__xkmko) * (var_INaK__xkmnai + var_chaste_interface__Na__Na_i)); // nA_per_nF + const double var_Irel__sparkV = exp(-(30 + var_chaste_interface__cell__V) * var_Irel__ay) / (1 + exp(-(30 + var_chaste_interface__cell__V) * var_Irel__ay)); // dimensionless + const double var_Irel__spark_rate = var_ICaL__po * var_Irel__gryr * var_Irel__sparkV * fabs(var_ICaL__rxa); // per_ms + const double d_dt_chaste_interface_var_Irel__xir = var_Irel__Qr * var_Irel__spark_rate - (1 - var_Ca__dCa_JSR * var_Irel__taur / var_chaste_interface__Ca__Ca_NSR) * var_chaste_interface__Irel__xir / var_Irel__taur; // uM_per_ms / ms + const double var_Irel__xicap = var_ICaL__po * var_Irel__gdyad * fabs(var_ICaL__rxa); // uM_per_ms + const double var_Irel__xirp = var_ICaL__po * var_Irel__Qr * var_Irel__gbarsr * fabs(var_ICaL__rxa) * exp(-(30 + var_chaste_interface__cell__V) * var_Irel__ax) / (1 + exp(-(30 + var_chaste_interface__cell__V) * var_Irel__ax)); // uM_per_ms + const double var_Irel__xiryr = (var_Irel__xicap + var_Irel__xirp) * NV_Ith_S(mParameters, 1); // uM_per_ms + const double d_dt_chaste_interface_var_Ca__Ca_dyad = -(-var_chaste_interface__Ca__Ca_submem + var_chaste_interface__Ca__Ca_dyad) / var_Ca__taups + var_Irel__xiryr; // uM / ms + const double var_Ito__rt1 = -0.20000000000000001 - 0.066666666666666666 * var_chaste_interface__cell__V; // dimensionless + const double var_Ito__rt2 = 3.3500000000000001 + 0.10000000000000001 * var_chaste_interface__cell__V; // dimensionless + const double var_Ito__rt3 = 6 + 0.10000000000000001 * var_chaste_interface__cell__V; // dimensionless + const double var_Ito__rt4 = -0.0011111111111111111 * pow(var_chaste_interface__cell__V, 2); // dimensionless + const double var_Ito__rt5 = 3.3500000000000001 + 0.10000000000000001 * var_chaste_interface__cell__V; // dimensionless + const double var_Ito__txf = 1.5 + 3.5 * exp(var_Ito__rt4); // ms + const double var_Ito__txs = 0.5 + 9 / (1 + exp(-var_Ito__rt1)); // ms + const double var_Ito__tyf = 20 + 20 / (1 + exp(var_Ito__rt5)); // ms + const double var_Ito__tys = 30 + 3000 / (1 + exp(var_Ito__rt3)); // ms + const double var_Ito__xtos_inf = 1 / (1 + exp(var_Ito__rt1)); // dimensionless + const double d_dt_chaste_interface_var_Ito__xtos = (-var_chaste_interface__Ito__xtos + var_Ito__xtos_inf) / var_Ito__txs; // 1 / ms + const double var_Ito__xtof_inf = var_Ito__xtos_inf; // dimensionless + const double d_dt_chaste_interface_var_Ito__xtof = (-var_chaste_interface__Ito__xtof + var_Ito__xtof_inf) / var_Ito__txf; // 1 / ms + const double var_Ito__ytos_inf = 1 / (1 + exp(var_Ito__rt2)); // dimensionless + const double d_dt_chaste_interface_var_Ito__ytos = (-var_chaste_interface__Ito__ytos + var_Ito__ytos_inf) / var_Ito__tys; // 1 / ms + const double var_Ito__ytof_inf = var_Ito__ytos_inf; // dimensionless + const double d_dt_chaste_interface_var_Ito__ytof = (-var_chaste_interface__Ito__ytof + var_Ito__ytof_inf) / var_Ito__tyf; // 1 / ms + const double var_cell__wca = 8; // mV_per_uM + const double var_INaCa__xiNaCa = var_INaCa__jNaCa * var_cell__wca; // nA_per_nF + const double var_reversal_potentials__ena = log(NV_Ith_S(mParameters, 7) / var_chaste_interface__Na__Na_i) / var_Environment__FonRT; // mV + const double var_INa__xina = pow(var_chaste_interface__INa__xm, 3) * (-var_reversal_potentials__ena + var_chaste_interface__cell__V) * NV_Ith_S(mParameters, 11) * var_chaste_interface__INa__xh * var_chaste_interface__INa__xj; // nA_per_nF + const double d_dt_chaste_interface_var_Na__Na_i = -0.001 * (3 * var_INaCa__xiNaCa + 3 * var_INaK__xiNaK + var_INa__xina) * NV_Ith_S(mParameters, 3) / var_cell__wca; // mM / ms + + if (mSetVoltageDerivativeToZero) + { + d_dt_chaste_interface_var_cell__V = 0.0; + } + else + { + const double var_IK1__gkix_total = 0.43033148291193518 * sqrt(NV_Ith_S(mParameters, 6)) * NV_Ith_S(mParameters, 15); // uS_per_nF + const double var_IKr__gkr_total = 0.43033148291193518 * sqrt(NV_Ith_S(mParameters, 6)) * NV_Ith_S(mParameters, 16); // uS_per_nF + const double var_IKs__gksx = 1 + 0.80000000000000004 / (1 + 0.125 / pow(var_Ca__Ca_i, 3)); // dimensionless + const double var_IKs__gks_total = NV_Ith_S(mParameters, 17) * var_IKs__gksx; // uS_per_nF + const double var_IKr__rg = 1 / (1 + exp(1.4732142857142858 + 0.044642857142857144 * var_chaste_interface__cell__V)); // dimensionless + const double var_Ito__rs_inf = 1 / (1 + exp(var_Ito__rt2)); // dimensionless + const double var_cell__i_Stim_converted = GetIntracellularAreaStimulus(var_chaste_interface__Environment__time); // uA_per_cm2 + const double var_cell__i_Stim = 1.0000000000000002 * var_cell__i_Stim_converted / HeartConfig::Instance()->GetCapacitance(); // nA_per_nF + const double var_ICaL__xica = 2 * var_ICaL__jca * var_cell__wca; // nA_per_nF + const double var_reversal_potentials__ek = log(NV_Ith_S(mParameters, 6) / NV_Ith_S(mParameters, 4)) / var_Environment__FonRT; // mV + const double var_IK1__aki = 1.02 / (1 + exp(-14.1227775 + 0.23849999999999999 * var_chaste_interface__cell__V - 0.23849999999999999 * var_reversal_potentials__ek)); // per_ms + const double var_IK1__bki = (exp(-36.698642499999998 + 0.061749999999999999 * var_chaste_interface__cell__V - 0.061749999999999999 * var_reversal_potentials__ek) + 0.49124000000000001 * exp(0.43983232 + 0.080320000000000003 * var_chaste_interface__cell__V - 0.080320000000000003 * var_reversal_potentials__ek)) / (1 + exp(-2.4444678999999998 + 0.51429999999999998 * var_reversal_potentials__ek - 0.51429999999999998 * var_chaste_interface__cell__V)); // per_ms + const double var_IK1__xkin = var_IK1__aki / (var_IK1__aki + var_IK1__bki); // dimensionless + const double var_IK1__xik1 = (-var_reversal_potentials__ek + var_chaste_interface__cell__V) * var_IK1__gkix_total * var_IK1__xkin; // nA_per_nF + const double var_IKr__xikr = (-var_reversal_potentials__ek + var_chaste_interface__cell__V) * var_IKr__gkr_total * var_IKr__rg * var_chaste_interface__IKr__xr; // nA_per_nF + const double var_Ito__xitof = (-var_reversal_potentials__ek + var_chaste_interface__cell__V) * NV_Ith_S(mParameters, 14) * var_chaste_interface__Ito__xtof * var_chaste_interface__Ito__ytof; // nA_per_nF + const double var_Ito__xitos = (-var_reversal_potentials__ek + var_chaste_interface__cell__V) * (0.5 * var_Ito__rs_inf + var_chaste_interface__Ito__ytos) * NV_Ith_S(mParameters, 18) * var_chaste_interface__Ito__xtos; // nA_per_nF + const double var_Ito__xito = var_Ito__xitof + var_Ito__xitos; // nA_per_nF + const double var_reversal_potentials__prNaK = 0.018329999999999999; // dimensionless + const double var_reversal_potentials__eks = log((NV_Ith_S(mParameters, 7) * var_reversal_potentials__prNaK + NV_Ith_S(mParameters, 6)) / (var_chaste_interface__Na__Na_i * var_reversal_potentials__prNaK + NV_Ith_S(mParameters, 4))) / var_Environment__FonRT; // mV + const double var_IKs__xiks = (-var_reversal_potentials__eks + var_chaste_interface__cell__V) * var_IKs__gks_total * var_chaste_interface__IKs__xs1 * var_chaste_interface__IKs__xs2; // nA_per_nF + const double var_cell__Itotal = -var_ICaL__xica - var_IK1__xik1 - var_IKr__xikr - var_IKs__xiks - var_INa__xina - var_INaCa__xiNaCa - var_INaK__xiNaK - var_Ito__xito - var_cell__i_Stim; // nA_per_nF + d_dt_chaste_interface_var_cell__V = var_cell__Itotal; // mV / ms + } + + NV_Ith_S(rDY,0) = d_dt_chaste_interface_var_cell__V; + NV_Ith_S(rDY,1) = d_dt_chaste_interface_var_Ca__Ca_i_converted; + NV_Ith_S(rDY,2) = d_dt_chaste_interface_var_INa__xm; + NV_Ith_S(rDY,3) = d_dt_chaste_interface_var_INa__xh; + NV_Ith_S(rDY,4) = d_dt_chaste_interface_var_INa__xj; + NV_Ith_S(rDY,5) = d_dt_chaste_interface_var_ICaL__c1; + NV_Ith_S(rDY,6) = d_dt_chaste_interface_var_ICaL__c2; + NV_Ith_S(rDY,7) = d_dt_chaste_interface_var_ICaL__xi1ca; + NV_Ith_S(rDY,8) = d_dt_chaste_interface_var_ICaL__xi1ba; + NV_Ith_S(rDY,9) = d_dt_chaste_interface_var_ICaL__xi2ca; + NV_Ith_S(rDY,10) = d_dt_chaste_interface_var_ICaL__xi2ba; + NV_Ith_S(rDY,11) = d_dt_chaste_interface_var_IKr__xr; + NV_Ith_S(rDY,12) = d_dt_chaste_interface_var_IKs__xs1; + NV_Ith_S(rDY,13) = d_dt_chaste_interface_var_IKs__xs2; + NV_Ith_S(rDY,14) = d_dt_chaste_interface_var_Ito__xtos; + NV_Ith_S(rDY,15) = d_dt_chaste_interface_var_Ito__ytos; + NV_Ith_S(rDY,16) = d_dt_chaste_interface_var_Ito__xtof; + NV_Ith_S(rDY,17) = d_dt_chaste_interface_var_Ito__ytof; + NV_Ith_S(rDY,18) = d_dt_chaste_interface_var_Irel__Ca_JSR; + NV_Ith_S(rDY,19) = d_dt_chaste_interface_var_Irel__xir; + NV_Ith_S(rDY,20) = d_dt_chaste_interface_var_Na__Na_i; + NV_Ith_S(rDY,21) = d_dt_chaste_interface_var_Ca__Ca_dyad; + NV_Ith_S(rDY,22) = d_dt_chaste_interface_var_Ca__Ca_submem; + NV_Ith_S(rDY,23) = d_dt_chaste_interface_var_Ca__Ca_NSR; + NV_Ith_S(rDY,24) = d_dt_chaste_interface_var_Ca__tropi; + NV_Ith_S(rDY,25) = d_dt_chaste_interface_var_Ca__trops; + } + + N_Vector Dynamicmahajan_shiferaw_2008FromCellMLCvode::ComputeDerivedQuantities(double var_chaste_interface__Environment__time, const N_Vector & rY) + { + // Inputs: + // Time units: millisecond + double var_chaste_interface__cell__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : NV_Ith_S(rY, 0)); + // Units: mV; Initial value: -87.169816169406 + double var_chaste_interface__Ca__Ca_i_converted = NV_Ith_S(rY, 1); + // Units: millimolar; Initial value: 0.000256752008084 + double var_chaste_interface__INa__xm = NV_Ith_S(rY, 2); + // Units: dimensionless; Initial value: 0.001075453357 + double var_chaste_interface__INa__xh = NV_Ith_S(rY, 3); + // Units: dimensionless; Initial value: 0.990691306716 + double var_chaste_interface__INa__xj = NV_Ith_S(rY, 4); + // Units: dimensionless; Initial value: 0.993888937283 + double var_chaste_interface__ICaL__c1 = NV_Ith_S(rY, 5); + // Units: dimensionless; Initial value: 1.8211252e-05 + double var_chaste_interface__ICaL__c2 = NV_Ith_S(rY, 6); + // Units: dimensionless; Initial value: 0.979322592773 + double var_chaste_interface__ICaL__xi1ca = NV_Ith_S(rY, 7); + // Units: dimensionless; Initial value: 0.001208153482 + double var_chaste_interface__ICaL__xi1ba = NV_Ith_S(rY, 8); + // Units: dimensionless; Initial value: 3.3616596e-05 + double var_chaste_interface__ICaL__xi2ca = NV_Ith_S(rY, 9); + // Units: dimensionless; Initial value: 0.004173008466 + double var_chaste_interface__ICaL__xi2ba = NV_Ith_S(rY, 10); + // Units: dimensionless; Initial value: 0.015242594688 + double var_chaste_interface__IKr__xr = NV_Ith_S(rY, 11); + // Units: dimensionless; Initial value: 0.007074239331 + double var_chaste_interface__IKs__xs1 = NV_Ith_S(rY, 12); + // Units: dimensionless; Initial value: 0.048267587131 + double var_chaste_interface__IKs__xs2 = NV_Ith_S(rY, 13); + // Units: dimensionless; Initial value: 0.105468807033 + double var_chaste_interface__Ito__xtos = NV_Ith_S(rY, 14); + // Units: dimensionless; Initial value: 0.00364776906 + double var_chaste_interface__Ito__ytos = NV_Ith_S(rY, 15); + // Units: dimensionless; Initial value: 0.174403618112 + double var_chaste_interface__Ito__xtof = NV_Ith_S(rY, 16); + // Units: dimensionless; Initial value: 0.003643592594 + double var_chaste_interface__Ito__ytof = NV_Ith_S(rY, 17); + // Units: dimensionless; Initial value: 0.993331326442 + double var_chaste_interface__Irel__Ca_JSR = NV_Ith_S(rY, 18); + // Units: uM; Initial value: 97.505463697266 + double var_chaste_interface__Na__Na_i = NV_Ith_S(rY, 20); + // Units: mM; Initial value: 11.441712311614 + double var_chaste_interface__Ca__Ca_submem = NV_Ith_S(rY, 22); + // Units: uM; Initial value: 0.226941113355 + double var_chaste_interface__Ca__Ca_NSR = NV_Ith_S(rY, 23); + // Units: uM; Initial value: 104.450004990523 + + // Mathematics + const double var_Ca__Ca_i = 1000 * var_chaste_interface__Ca__Ca_i_converted; // uM + const double var_Ca__bcal = 24; // uM + const double var_Ca__bmem = 15; // uM + const double var_Ca__bsar = 42; // uM + const double var_Ca__csm = 0.001 * var_chaste_interface__Ca__Ca_submem; // mM + const double var_Ca__kmem = 0.29999999999999999; // uM + const double var_Ca__ksar = 13; // uM + const double var_Ca__mempxi = var_Ca__bmem * var_Ca__kmem / pow((var_Ca__Ca_i + var_Ca__kmem), 2); // dimensionless + const double var_Ca__mempxs = var_Ca__bmem * var_Ca__kmem / pow((var_chaste_interface__Ca__Ca_submem + var_Ca__kmem), 2); // dimensionless + const double var_Ca__sarpxi = var_Ca__bsar * var_Ca__ksar / pow((var_Ca__Ca_i + var_Ca__ksar), 2); // dimensionless + const double var_Ca__sarpxs = var_Ca__bsar * var_Ca__ksar / pow((var_chaste_interface__Ca__Ca_submem + var_Ca__ksar), 2); // dimensionless + const double var_Ca__srkd = 0.59999999999999998; // uM + const double var_Ca__srmax = 47; // uM + const double var_Ca__spxi = var_Ca__srkd * var_Ca__srmax / pow((var_Ca__Ca_i + var_Ca__srkd), 2); // dimensionless + const double var_Ca__spxs = var_Ca__srkd * var_Ca__srmax / pow((var_chaste_interface__Ca__Ca_submem + var_Ca__srkd), 2); // dimensionless + const double var_Ca__xkcal = 7; // uM + const double var_Ca__bpxi = var_Ca__bcal * var_Ca__xkcal / pow((var_Ca__Ca_i + var_Ca__xkcal), 2); // dimensionless + const double var_Ca__bpxs = var_Ca__bcal * var_Ca__xkcal / pow((var_chaste_interface__Ca__Ca_submem + var_Ca__xkcal), 2); // dimensionless + const double var_Ca__dciib = 1 / (1 + var_Ca__bpxi + var_Ca__mempxi + var_Ca__sarpxi + var_Ca__spxi); // dimensionless + const double var_Ca__dcsib = 1 / (1 + var_Ca__bpxs + var_Ca__mempxs + var_Ca__sarpxs + var_Ca__spxs); // dimensionless + const double var_Environment__FonRT = NV_Ith_S(mParameters, 8) / (NV_Ith_S(mParameters, 9) * NV_Ith_S(mParameters, 20)); // per_mV + const double var_ICaL__gca = 182; // mmole_per_coulomb_cm + const double var_ICaL__po = 1 - var_chaste_interface__ICaL__c1 - var_chaste_interface__ICaL__c2 - var_chaste_interface__ICaL__xi1ba - var_chaste_interface__ICaL__xi1ca - var_chaste_interface__ICaL__xi2ba - var_chaste_interface__ICaL__xi2ca; // dimensionless + const double var_IK1__gkix_total = 0.43033148291193518 * sqrt(NV_Ith_S(mParameters, 6)) * NV_Ith_S(mParameters, 15); // uS_per_nF + const double var_IKr__gkr_total = 0.43033148291193518 * sqrt(NV_Ith_S(mParameters, 6)) * NV_Ith_S(mParameters, 16); // uS_per_nF + const double var_IKs__gksx = 1 + 0.80000000000000004 / (1 + 0.125 / pow(var_Ca__Ca_i, 3)); // dimensionless + const double var_IKs__gks_total = NV_Ith_S(mParameters, 17) * var_IKs__gksx; // uS_per_nF + const double var_INaCa__xkdna = 0.29999999999999999; // uM + const double var_INaCa__aloss = 1 / (1 + pow(var_INaCa__xkdna, 3) / pow(var_chaste_interface__Ca__Ca_submem, 3)); // dimensionless + const double var_INaCa__xmcai = 0.0035999999999999999; // mM + const double var_INaCa__xmcao = 1.3; // mM + const double var_INaCa__xmnai = 12.300000000000001; // mM + const double var_INaCa__xmnao = 87.5; // mM + const double var_INaCa__yz2 = pow(var_INaCa__xmnai, 3) * (1 + var_Ca__csm / var_INaCa__xmcai) * NV_Ith_S(mParameters, 5); // mM4 + const double var_Ileak_Iup_Ixfer__cup = 0.5; // uM + const double var_Ileak_Iup_Ixfer__kj = 50; // uM + const double var_Ileak_Iup_Ixfer__jleak = pow(var_chaste_interface__Ca__Ca_NSR, 2) * (-var_Ca__Ca_i + 16.667000000000002 * var_chaste_interface__Ca__Ca_NSR) * NV_Ith_S(mParameters, 0) / (pow(var_chaste_interface__Ca__Ca_NSR, 2) + pow(var_Ileak_Iup_Ixfer__kj, 2)); // uM_per_ms + const double var_Ileak_Iup_Ixfer__jup = pow(var_Ca__Ca_i, 2) * NV_Ith_S(mParameters, 2) / (pow(var_Ca__Ca_i, 2) + pow(var_Ileak_Iup_Ixfer__cup, 2)); // uM_per_ms + const double var_Irel__av = 11.300000000000001; // per_ms + const double var_Irel__ax = 0.35759999999999997; // per_mV + const double var_Irel__cstar = 90; // uM + const double var_Irel__bv = -50 + (1 - var_Irel__av) * var_Irel__cstar; // uM_per_ms + const double var_Irel__Qr0 = (((var_chaste_interface__Irel__Ca_JSR > 50) && (var_chaste_interface__Irel__Ca_JSR < var_Irel__cstar)) ? (-50 + var_chaste_interface__Irel__Ca_JSR) : ((var_chaste_interface__Irel__Ca_JSR >= var_Irel__cstar) ? (var_chaste_interface__Irel__Ca_JSR * var_Irel__av + var_Irel__bv) : (0))); // uM_per_ms + const double var_Irel__Qr = var_chaste_interface__Ca__Ca_NSR * var_Irel__Qr0 / var_Irel__cstar; // uM_per_ms + const double var_Irel__gbarsr = 26841.799999999999; // dimensionless + const double var_Irel__gdyad = 9000; // mmole_per_coulomb_cm + const double var_INaCa__yz1 = pow(var_INaCa__xmnao, 3) * var_Ca__csm + pow(var_chaste_interface__Na__Na_i, 3) * var_INaCa__xmcao; // mM4 + const double var_INaCa__yz3 = pow(NV_Ith_S(mParameters, 7), 3) * (1 + pow(var_chaste_interface__Na__Na_i, 3) / pow(var_INaCa__xmnai, 3)) * var_INaCa__xmcai; // mM4 + const double var_INaCa__yz4 = pow(NV_Ith_S(mParameters, 7), 3) * var_Ca__csm + pow(var_chaste_interface__Na__Na_i, 3) * NV_Ith_S(mParameters, 5); // mM4 + const double var_INaCa__zw8 = var_INaCa__yz1 + var_INaCa__yz2 + var_INaCa__yz3 + var_INaCa__yz4; // mM4 + const double var_ICaL__za = 2 * var_Environment__FonRT * var_chaste_interface__cell__V; // dimensionless + const double var_ICaL__rxa = ((fabs(var_ICaL__za) < 0.001) ? (2 * (-0.34100000000000003 * NV_Ith_S(mParameters, 5) + var_Ca__csm * exp(var_ICaL__za)) * NV_Ith_S(mParameters, 8) * NV_Ith_S(mParameters, 10)) : (4 * (-0.34100000000000003 * NV_Ith_S(mParameters, 5) + var_Ca__csm * exp(var_ICaL__za)) * NV_Ith_S(mParameters, 8) * var_Environment__FonRT * NV_Ith_S(mParameters, 10) * var_chaste_interface__cell__V / (-1 + exp(var_ICaL__za)))); // mA_per_cm2 + const double var_ICaL__jca = var_ICaL__gca * var_ICaL__po * var_ICaL__rxa; // uM_per_ms + const double var_IKr__rg = 1 / (1 + exp(1.4732142857142858 + 0.044642857142857144 * var_chaste_interface__cell__V)); // dimensionless + const double var_INa__ah = ((var_chaste_interface__cell__V < -40) ? (0.13500000000000001 * exp(-11.764705882352942 + 0.14705882352941177 * NV_Ith_S(mParameters, 13) - 0.14705882352941177 * var_chaste_interface__cell__V)) : (0)); // per_ms + const double var_INa__aj = ((var_chaste_interface__cell__V < -40) ? ((37.780000000000001 + var_chaste_interface__cell__V) * (-127140 * exp(0.24440000000000001 * var_chaste_interface__cell__V - 0.24440000000000001 * NV_Ith_S(mParameters, 13)) - 3.4740000000000003e-5 * exp(0.043909999999999998 * NV_Ith_S(mParameters, 13) - 0.043909999999999998 * var_chaste_interface__cell__V)) / (1 + exp(24.640530000000002 + 0.311 * var_chaste_interface__cell__V))) : (0)); // per_ms + const double var_INa__bh = ((var_chaste_interface__cell__V < -40) ? (310000 * exp(0.34999999999999998 * var_chaste_interface__cell__V - 0.34999999999999998 * NV_Ith_S(mParameters, 13)) + 3.5600000000000001 * exp(0.079000000000000001 * var_chaste_interface__cell__V - 0.079000000000000001 * NV_Ith_S(mParameters, 13))) : (7.6923076923076916 / (1 + exp(-0.96036036036036043 + 0.0900900900900901 * NV_Ith_S(mParameters, 13) - 0.0900900900900901 * var_chaste_interface__cell__V)))); // per_ms + const double var_INa__bj = ((var_chaste_interface__cell__V < -40) ? (0.1212 * exp(0.01052 * NV_Ith_S(mParameters, 13) - 0.01052 * var_chaste_interface__cell__V) / (1 + exp(-5.5312920000000005 - 0.13780000000000001 * var_chaste_interface__cell__V))) : (0.29999999999999999 * exp(2.5349999999999999e-7 * NV_Ith_S(mParameters, 13) - 2.5349999999999999e-7 * var_chaste_interface__cell__V) / (1 + exp(-3.2000000000000002 - 0.10000000000000001 * var_chaste_interface__cell__V)))); // per_ms + const double var_INa__tau_h = 1 / (var_INa__ah + var_INa__bh); // ms + const double var_INa__tau_j = 1 / (var_INa__aj + var_INa__bj); // ms + const double var_INaCa__zw3 = pow(var_chaste_interface__Na__Na_i, 3) * NV_Ith_S(mParameters, 5) * exp(0.34999999999999998 * var_Environment__FonRT * var_chaste_interface__cell__V) - pow(NV_Ith_S(mParameters, 7), 3) * var_Ca__csm * exp(-0.65000000000000002 * var_Environment__FonRT * var_chaste_interface__cell__V); // mM4 + const double var_INaCa__zw4 = 1 + 0.20000000000000001 * exp(-0.65000000000000002 * var_Environment__FonRT * var_chaste_interface__cell__V); // dimensionless + const double var_INaCa__jNaCa = var_INaCa__aloss * NV_Ith_S(mParameters, 19) * var_INaCa__zw3 / (var_INaCa__zw4 * var_INaCa__zw8); // uM_per_ms + const double var_Irel__xicap = var_ICaL__po * var_Irel__gdyad * fabs(var_ICaL__rxa); // uM_per_ms + const double var_Irel__xirp = var_ICaL__po * var_Irel__Qr * var_Irel__gbarsr * fabs(var_ICaL__rxa) * exp(-(30 + var_chaste_interface__cell__V) * var_Irel__ax) / (1 + exp(-(30 + var_chaste_interface__cell__V) * var_Irel__ax)); // uM_per_ms + const double var_Irel__xiryr = (var_Irel__xicap + var_Irel__xirp) * NV_Ith_S(mParameters, 1); // uM_per_ms + const double var_Ito__rt2 = 3.3500000000000001 + 0.10000000000000001 * var_chaste_interface__cell__V; // dimensionless + const double var_Ito__rs_inf = 1 / (1 + exp(var_Ito__rt2)); // dimensionless + const double var_cell__i_Stim_converted = GetIntracellularAreaStimulus(var_chaste_interface__Environment__time); // uA_per_cm2 + const double var_cell__wca = 8; // mV_per_uM + const double var_ICaL__xica = 2 * var_ICaL__jca * var_cell__wca; // nA_per_nF + const double var_ICaL__xica_converted = 0.99999999999999989 * HeartConfig::Instance()->GetCapacitance() * var_ICaL__xica; // uA_per_cm2 + const double var_INaCa__xiNaCa = var_INaCa__jNaCa * var_cell__wca; // nA_per_nF + const double var_INaCa__xiNaCa_converted = 0.99999999999999989 * HeartConfig::Instance()->GetCapacitance() * var_INaCa__xiNaCa; // uA_per_cm2 + const double var_reversal_potentials__ek = log(NV_Ith_S(mParameters, 6) / NV_Ith_S(mParameters, 4)) / var_Environment__FonRT; // mV + const double var_IK1__aki = 1.02 / (1 + exp(-14.1227775 + 0.23849999999999999 * var_chaste_interface__cell__V - 0.23849999999999999 * var_reversal_potentials__ek)); // per_ms + const double var_IK1__bki = (exp(-36.698642499999998 + 0.061749999999999999 * var_chaste_interface__cell__V - 0.061749999999999999 * var_reversal_potentials__ek) + 0.49124000000000001 * exp(0.43983232 + 0.080320000000000003 * var_chaste_interface__cell__V - 0.080320000000000003 * var_reversal_potentials__ek)) / (1 + exp(-2.4444678999999998 + 0.51429999999999998 * var_reversal_potentials__ek - 0.51429999999999998 * var_chaste_interface__cell__V)); // per_ms + const double var_IK1__xkin = var_IK1__aki / (var_IK1__aki + var_IK1__bki); // dimensionless + const double var_IK1__xik1 = (-var_reversal_potentials__ek + var_chaste_interface__cell__V) * var_IK1__gkix_total * var_IK1__xkin; // nA_per_nF + const double var_IK1__xik1_converted = 0.99999999999999989 * HeartConfig::Instance()->GetCapacitance() * var_IK1__xik1; // uA_per_cm2 + const double var_IKr__xikr = (-var_reversal_potentials__ek + var_chaste_interface__cell__V) * var_IKr__gkr_total * var_IKr__rg * var_chaste_interface__IKr__xr; // nA_per_nF + const double var_IKr__xikr_converted = 0.99999999999999989 * HeartConfig::Instance()->GetCapacitance() * var_IKr__xikr; // uA_per_cm2 + const double var_Ito__xitof = (-var_reversal_potentials__ek + var_chaste_interface__cell__V) * NV_Ith_S(mParameters, 14) * var_chaste_interface__Ito__xtof * var_chaste_interface__Ito__ytof; // nA_per_nF + const double var_Ito__xitos = (-var_reversal_potentials__ek + var_chaste_interface__cell__V) * (0.5 * var_Ito__rs_inf + var_chaste_interface__Ito__ytos) * NV_Ith_S(mParameters, 18) * var_chaste_interface__Ito__xtos; // nA_per_nF + const double var_Ito__xito = var_Ito__xitof + var_Ito__xitos; // nA_per_nF + const double var_Ito__xito_converted = 0.99999999999999989 * HeartConfig::Instance()->GetCapacitance() * var_Ito__xito; // uA_per_cm2 + const double var_reversal_potentials__ena = log(NV_Ith_S(mParameters, 7) / var_chaste_interface__Na__Na_i) / var_Environment__FonRT; // mV + const double var_INa__xina = pow(var_chaste_interface__INa__xm, 3) * (-var_reversal_potentials__ena + var_chaste_interface__cell__V) * NV_Ith_S(mParameters, 11) * var_chaste_interface__INa__xh * var_chaste_interface__INa__xj; // nA_per_nF + const double var_INa__xina_converted = 0.99999999999999989 * HeartConfig::Instance()->GetCapacitance() * var_INa__xina; // uA_per_cm2 + const double var_reversal_potentials__prNaK = 0.018329999999999999; // dimensionless + const double var_reversal_potentials__eks = log((NV_Ith_S(mParameters, 7) * var_reversal_potentials__prNaK + NV_Ith_S(mParameters, 6)) / (var_chaste_interface__Na__Na_i * var_reversal_potentials__prNaK + NV_Ith_S(mParameters, 4))) / var_Environment__FonRT; // mV + const double var_IKs__xiks = (-var_reversal_potentials__eks + var_chaste_interface__cell__V) * var_IKs__gks_total * var_chaste_interface__IKs__xs1 * var_chaste_interface__IKs__xs2; // nA_per_nF + const double var_IKs__xiks_converted = 0.99999999999999989 * HeartConfig::Instance()->GetCapacitance() * var_IKs__xiks; // uA_per_cm2 + +#if CHASTE_SUNDIALS_VERSION >= 60000 + N_Vector dqs = N_VNew_Serial(22, CvodeContextManager::Instance()->GetSundialsContext()); +#else + N_Vector dqs = N_VNew_Serial(22); +#endif + NV_Ith_S(dqs, 0) = var_Ileak_Iup_Ixfer__jleak; + NV_Ith_S(dqs, 1) = var_Irel__xiryr; + NV_Ith_S(dqs, 2) = var_Ileak_Iup_Ixfer__jup; + NV_Ith_S(dqs, 3) = var_chaste_interface__Ca__Ca_i_converted; + NV_Ith_S(dqs, 4) = var_Ca__dciib; + NV_Ith_S(dqs, 5) = var_ICaL__xica_converted; + NV_Ith_S(dqs, 6) = var_INa__xina_converted; + NV_Ith_S(dqs, 7) = var_INa__tau_h; + NV_Ith_S(dqs, 8) = var_INa__tau_j; + NV_Ith_S(dqs, 9) = var_IK1__xik1_converted; + NV_Ith_S(dqs, 10) = var_IK1__gkix_total; + NV_Ith_S(dqs, 11) = var_IKr__xikr_converted; + NV_Ith_S(dqs, 12) = var_IKr__gkr_total; + NV_Ith_S(dqs, 13) = var_IKs__xiks_converted; + NV_Ith_S(dqs, 14) = var_IKs__gks_total; + NV_Ith_S(dqs, 15) = var_INaCa__xiNaCa_converted; + NV_Ith_S(dqs, 16) = var_cell__i_Stim_converted; + NV_Ith_S(dqs, 17) = var_Ito__xito_converted; + NV_Ith_S(dqs, 18) = var_reversal_potentials__ek; + NV_Ith_S(dqs, 19) = var_reversal_potentials__ena; + NV_Ith_S(dqs, 20) = var_Ca__dcsib; + NV_Ith_S(dqs, 21) = var_chaste_interface__Environment__time; + return dqs; + } + +template<> +void OdeSystemInformation::Initialise(void) +{ + this->mSystemName = "MahajanShiferaw2008_units"; + this->mFreeVariableName = "time"; + this->mFreeVariableUnits = "ms"; + + // NV_Ith_S(rY, 0): + this->mVariableNames.push_back("membrane_voltage"); + this->mVariableUnits.push_back("mV"); + this->mInitialConditions.push_back(-87.169816169406); + + // NV_Ith_S(rY, 1): + this->mVariableNames.push_back("cytosolic_calcium_concentration"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(0.000256752008084); + + // NV_Ith_S(rY, 2): + this->mVariableNames.push_back("membrane_fast_sodium_current_m_gate"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.001075453357); + + // NV_Ith_S(rY, 3): + this->mVariableNames.push_back("membrane_fast_sodium_current_h_gate"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.990691306716); + + // NV_Ith_S(rY, 4): + this->mVariableNames.push_back("membrane_fast_sodium_current_j_gate"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.993888937283); + + // NV_Ith_S(rY, 5): + this->mVariableNames.push_back("ICaL__c1"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(1.8211252e-05); + + // NV_Ith_S(rY, 6): + this->mVariableNames.push_back("ICaL__c2"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.979322592773); + + // NV_Ith_S(rY, 7): + this->mVariableNames.push_back("ICaL__xi1ca"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.001208153482); + + // NV_Ith_S(rY, 8): + this->mVariableNames.push_back("ICaL__xi1ba"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(3.3616596e-05); + + // NV_Ith_S(rY, 9): + this->mVariableNames.push_back("ICaL__xi2ca"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.004173008466); + + // NV_Ith_S(rY, 10): + this->mVariableNames.push_back("ICaL__xi2ba"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.015242594688); + + // NV_Ith_S(rY, 11): + this->mVariableNames.push_back("IKr__xr"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.007074239331); + + // NV_Ith_S(rY, 12): + this->mVariableNames.push_back("IKs__xs1"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.048267587131); + + // NV_Ith_S(rY, 13): + this->mVariableNames.push_back("IKs__xs2"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.105468807033); + + // NV_Ith_S(rY, 14): + this->mVariableNames.push_back("Ito__xtos"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.00364776906); + + // NV_Ith_S(rY, 15): + this->mVariableNames.push_back("Ito__ytos"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.174403618112); + + // NV_Ith_S(rY, 16): + this->mVariableNames.push_back("Ito__xtof"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.003643592594); + + // NV_Ith_S(rY, 17): + this->mVariableNames.push_back("Ito__ytof"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.993331326442); + + // NV_Ith_S(rY, 18): + this->mVariableNames.push_back("JSR_calcium_concentration"); + this->mVariableUnits.push_back("uM"); + this->mInitialConditions.push_back(97.505463697266); + + // NV_Ith_S(rY, 19): + this->mVariableNames.push_back("Irel__xir"); + this->mVariableUnits.push_back("uM_per_ms"); + this->mInitialConditions.push_back(0.006679257264); + + // NV_Ith_S(rY, 20): + this->mVariableNames.push_back("cytosolic_sodium_concentration"); + this->mVariableUnits.push_back("mM"); + this->mInitialConditions.push_back(11.441712311614); + + // NV_Ith_S(rY, 21): + this->mVariableNames.push_back("dyadic_space_calcium_concentration"); + this->mVariableUnits.push_back("uM"); + this->mInitialConditions.push_back(1.716573130685); + + // NV_Ith_S(rY, 22): + this->mVariableNames.push_back("submembrane_space_calcium_concentration"); + this->mVariableUnits.push_back("uM"); + this->mInitialConditions.push_back(0.226941113355); + + // NV_Ith_S(rY, 23): + this->mVariableNames.push_back("NSR_calcium_concentration"); + this->mVariableUnits.push_back("uM"); + this->mInitialConditions.push_back(104.450004990523); + + // NV_Ith_S(rY, 24): + this->mVariableNames.push_back("Ca__tropi"); + this->mVariableUnits.push_back("uM"); + this->mInitialConditions.push_back(22.171689894953); + + // NV_Ith_S(rY, 25): + this->mVariableNames.push_back("Ca__trops"); + this->mVariableUnits.push_back("uM"); + this->mInitialConditions.push_back(19.864701949854); + + // mParameters[0]: + this->mParameterNames.push_back("SR_leak_current_max"); + this->mParameterUnits.push_back("per_ms"); + + // mParameters[1]: + this->mParameterNames.push_back("SR_release_current_max"); + this->mParameterUnits.push_back("dimensionless"); + + // mParameters[2]: + this->mParameterNames.push_back("SR_uptake_current_max"); + this->mParameterUnits.push_back("uM_per_ms"); + + // mParameters[3]: + this->mParameterNames.push_back("concentration_clamp_onoff"); + this->mParameterUnits.push_back("dimensionless"); + + // mParameters[4]: + this->mParameterNames.push_back("cytosolic_potassium_concentration"); + this->mParameterUnits.push_back("mM"); + + // mParameters[5]: + this->mParameterNames.push_back("extracellular_calcium_concentration"); + this->mParameterUnits.push_back("mM"); + + // mParameters[6]: + this->mParameterNames.push_back("extracellular_potassium_concentration"); + this->mParameterUnits.push_back("mM"); + + // mParameters[7]: + this->mParameterNames.push_back("extracellular_sodium_concentration"); + this->mParameterUnits.push_back("mM"); + + // mParameters[8]: + this->mParameterNames.push_back("faraday_constant"); + this->mParameterUnits.push_back("coulomb_per_mmole"); + + // mParameters[9]: + this->mParameterNames.push_back("gas_constant"); + this->mParameterUnits.push_back("J_per_moleK"); + + // mParameters[10]: + this->mParameterNames.push_back("membrane_L_type_calcium_current_conductance"); + this->mParameterUnits.push_back("cm_per_s"); + + // mParameters[11]: + this->mParameterNames.push_back("membrane_fast_sodium_current_conductance"); + this->mParameterUnits.push_back("uS_per_nF"); + + // mParameters[12]: + this->mParameterNames.push_back("membrane_fast_sodium_current_reduced_inactivation"); + this->mParameterUnits.push_back("dimensionless"); + + // mParameters[13]: + this->mParameterNames.push_back("membrane_fast_sodium_current_shift_inactivation"); + this->mParameterUnits.push_back("mV"); + + // mParameters[14]: + this->mParameterNames.push_back("membrane_fast_transient_outward_current_conductance"); + this->mParameterUnits.push_back("uS_per_nF"); + + // mParameters[15]: + this->mParameterNames.push_back("membrane_inward_rectifier_potassium_current_conductance_scaling_factor"); + this->mParameterUnits.push_back("uS_per_nF"); + + // mParameters[16]: + this->mParameterNames.push_back("membrane_rapid_delayed_rectifier_potassium_current_conductance_scaling_factor"); + this->mParameterUnits.push_back("uS_per_nF"); + + // mParameters[17]: + this->mParameterNames.push_back("membrane_slow_delayed_rectifier_potassium_current_conductance_scaling_factor"); + this->mParameterUnits.push_back("uS_per_nF"); + + // mParameters[18]: + this->mParameterNames.push_back("membrane_slow_transient_outward_current_conductance"); + this->mParameterUnits.push_back("uS_per_nF"); + + // mParameters[19]: + this->mParameterNames.push_back("membrane_sodium_calcium_exchanger_current_conductance"); + this->mParameterUnits.push_back("uM_per_ms"); + + // mParameters[20]: + this->mParameterNames.push_back("temperature"); + this->mParameterUnits.push_back("kelvin"); + + // Derived Quantity index [0]: + this->mDerivedQuantityNames.push_back("SR_leak_current"); + this->mDerivedQuantityUnits.push_back("uM_per_ms"); + + // Derived Quantity index [1]: + this->mDerivedQuantityNames.push_back("SR_release_current"); + this->mDerivedQuantityUnits.push_back("uM_per_ms"); + + // Derived Quantity index [2]: + this->mDerivedQuantityNames.push_back("SR_uptake_current"); + this->mDerivedQuantityUnits.push_back("uM_per_ms"); + + // Derived Quantity index [3]: + this->mDerivedQuantityNames.push_back("cytosolic_calcium_concentration"); + this->mDerivedQuantityUnits.push_back("millimolar"); + + // Derived Quantity index [4]: + this->mDerivedQuantityNames.push_back("cytosolic_calcium_flux_scaling_from_intrinsic_buffers"); + this->mDerivedQuantityUnits.push_back("dimensionless"); + + // Derived Quantity index [5]: + this->mDerivedQuantityNames.push_back("membrane_L_type_calcium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [6]: + this->mDerivedQuantityNames.push_back("membrane_fast_sodium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [7]: + this->mDerivedQuantityNames.push_back("membrane_fast_sodium_current_h_gate_tau"); + this->mDerivedQuantityUnits.push_back("ms"); + + // Derived Quantity index [8]: + this->mDerivedQuantityNames.push_back("membrane_fast_sodium_current_j_gate_tau"); + this->mDerivedQuantityUnits.push_back("ms"); + + // Derived Quantity index [9]: + this->mDerivedQuantityNames.push_back("membrane_inward_rectifier_potassium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [10]: + this->mDerivedQuantityNames.push_back("membrane_inward_rectifier_potassium_current_conductance"); + this->mDerivedQuantityUnits.push_back("uS_per_nF"); + + // Derived Quantity index [11]: + this->mDerivedQuantityNames.push_back("membrane_rapid_delayed_rectifier_potassium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [12]: + this->mDerivedQuantityNames.push_back("membrane_rapid_delayed_rectifier_potassium_current_conductance"); + this->mDerivedQuantityUnits.push_back("uS_per_nF"); + + // Derived Quantity index [13]: + this->mDerivedQuantityNames.push_back("membrane_slow_delayed_rectifier_potassium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [14]: + this->mDerivedQuantityNames.push_back("membrane_slow_delayed_rectifier_potassium_current_conductance"); + this->mDerivedQuantityUnits.push_back("uS_per_nF"); + + // Derived Quantity index [15]: + this->mDerivedQuantityNames.push_back("membrane_sodium_calcium_exchanger_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [16]: + this->mDerivedQuantityNames.push_back("membrane_stimulus_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [17]: + this->mDerivedQuantityNames.push_back("membrane_transient_outward_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [18]: + this->mDerivedQuantityNames.push_back("potassium_reversal_potential"); + this->mDerivedQuantityUnits.push_back("mV"); + + // Derived Quantity index [19]: + this->mDerivedQuantityNames.push_back("sodium_reversal_potential"); + this->mDerivedQuantityUnits.push_back("mV"); + + // Derived Quantity index [20]: + this->mDerivedQuantityNames.push_back("submembrane_space_calcium_flux_scaling_from_intrinsic_buffers"); + this->mDerivedQuantityUnits.push_back("dimensionless"); + + // Derived Quantity index [21]: + this->mDerivedQuantityNames.push_back("time"); + this->mDerivedQuantityUnits.push_back("ms"); + + this->mInitialised = true; +} + +// Serialization for Boost >= 1.36 +#include "SerializationExportWrapperForCpp.hpp" +CHASTE_CLASS_EXPORT(Dynamicmahajan_shiferaw_2008FromCellMLCvode) +extern "C" +{ + AbstractCardiacCellInterface* MakeCardiacCell( + boost::shared_ptr pSolver, + boost::shared_ptr pStimulus) + { + return new Dynamicmahajan_shiferaw_2008FromCellMLCvode(pSolver, pStimulus); + } + +} +#endif // CHASTE_CVODE diff --git a/chaste_codegen/tests/numerical/baseline/Cvode/dynamic_mahajan_shiferaw_2008.hpp b/chaste_codegen/tests/numerical/baseline/Cvode/dynamic_mahajan_shiferaw_2008.hpp new file mode 100644 index 00000000..18b61b67 --- /dev/null +++ b/chaste_codegen/tests/numerical/baseline/Cvode/dynamic_mahajan_shiferaw_2008.hpp @@ -0,0 +1,87 @@ +#ifdef CHASTE_CVODE +#ifndef DYNAMICMAHAJAN_SHIFERAW_2008FROMCELLMLCVODE_HPP_ +#define DYNAMICMAHAJAN_SHIFERAW_2008FROMCELLMLCVODE_HPP_ + +//! @file +//! +//! This source file was generated from CellML by chaste_codegen version (version omitted as unimportant) +//! +//! Model: MahajanShiferaw2008_units +//! +//! Processed by chaste_codegen: https://github.com/ModellingWebLab/chaste-codegen +//! (translator: chaste_codegen, model type: NumericCvode) +//! on (date omitted as unimportant) +//! +//! + +#include "ChasteSerialization.hpp" +#include +#include "AbstractDynamicallyLoadableEntity.hpp" +#include "AbstractStimulusFunction.hpp" +#include "AbstractCvodeCell.hpp" + +class Dynamicmahajan_shiferaw_2008FromCellMLCvode : public AbstractCvodeCell, public AbstractDynamicallyLoadableEntity +{ + friend class boost::serialization::access; + template + void serialize(Archive & archive, const unsigned int version) + { + archive & boost::serialization::base_object(*this); + archive & boost::serialization::base_object(*this); + } + + // + // Settable parameters and readable variables + // + + +private: +const bool is_concentration[26] = {false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, false, true, true, true, true, false, false}; +const bool is_probability[26] = {false, false, true, true, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false}; +public: + + boost::shared_ptr UseCellMLDefaultStimulus(); + double GetIntracellularCalciumConcentration(); + Dynamicmahajan_shiferaw_2008FromCellMLCvode(boost::shared_ptr pOdeSolver /* unused; should be empty */, boost::shared_ptr pIntracellularStimulus); + ~Dynamicmahajan_shiferaw_2008FromCellMLCvode(); + void VerifyStateVariables(); + double GetIIonic(const std::vector* pStateVariables=NULL); + void EvaluateYDerivatives(double var_chaste_interface__Environment__time, const N_Vector rY, N_Vector rDY); + N_Vector ComputeDerivedQuantities(double var_chaste_interface__Environment__time, const N_Vector & rY); +}; + +// Needs to be included last +#include "SerializationExportWrapper.hpp" +CHASTE_CLASS_EXPORT(Dynamicmahajan_shiferaw_2008FromCellMLCvode) + +namespace boost +{ + namespace serialization + { + template + inline void save_construct_data( + Archive & ar, const Dynamicmahajan_shiferaw_2008FromCellMLCvode * t, const unsigned int fileVersion) + { + const boost::shared_ptr p_solver = t->GetSolver(); + const boost::shared_ptr p_stimulus = t->GetStimulusFunction(); + ar << p_solver; + ar << p_stimulus; + } + + template + inline void load_construct_data( + Archive & ar, Dynamicmahajan_shiferaw_2008FromCellMLCvode * t, const unsigned int fileVersion) + { + boost::shared_ptr p_solver; + boost::shared_ptr p_stimulus; + ar >> p_solver; + ar >> p_stimulus; + ::new(t)Dynamicmahajan_shiferaw_2008FromCellMLCvode(p_solver, p_stimulus); + } + + } + +} + +#endif // DYNAMICMAHAJAN_SHIFERAW_2008FROMCELLMLCVODE_HPP_ +#endif // CHASTE_CVODE \ No newline at end of file diff --git a/chaste_codegen/tests/numerical/baseline/Cvode/faber_rudy_2000.cpp b/chaste_codegen/tests/numerical/baseline/Cvode/faber_rudy_2000.cpp new file mode 100644 index 00000000..6395932d --- /dev/null +++ b/chaste_codegen/tests/numerical/baseline/Cvode/faber_rudy_2000.cpp @@ -0,0 +1,928 @@ +#ifdef CHASTE_CVODE +//! @file +//! +//! This source file was generated from CellML by chaste_codegen version (version omitted as unimportant) +//! +//! Model: faber_rudy_2000 +//! +//! Processed by chaste_codegen: https://github.com/ModellingWebLab/chaste-codegen +//! (translator: chaste_codegen, model type: NumericCvode) +//! on (date omitted as unimportant) +//! +//! + +#include "faber_rudy_2000.hpp" +#include +#include +#include +#include +#include "Exception.hpp" +#include "OdeSystemInformation.hpp" +#include "RegularStimulus.hpp" +#include "HeartConfig.hpp" +#include "IsNan.hpp" +#include "MathsCustomFunctions.hpp" + +#if CHASTE_SUNDIALS_VERSION >= 60000 +#include "CvodeContextManager.hpp" +#endif + + + + + + boost::shared_ptr Cellfaber_rudy_2000FromCellMLCvode::UseCellMLDefaultStimulus() + { + // Use the default stimulus specified by CellML metadata + const double var_chaste_interface__cell__stim_amplitude_converted = -25.5 * HeartConfig::Instance()->GetCapacitance(); // uA_per_cm2 + const double var_chaste_interface__cell__stim_duration = 2; // ms + const double var_chaste_interface__cell__stim_period = 1000; // ms + const double var_chaste_interface__cell__stim_start = 100; // ms + boost::shared_ptr p_cellml_stim(new RegularStimulus( + -fabs(var_chaste_interface__cell__stim_amplitude_converted), + var_chaste_interface__cell__stim_duration, + var_chaste_interface__cell__stim_period, + var_chaste_interface__cell__stim_start + )); + mpIntracellularStimulus = p_cellml_stim; + return p_cellml_stim; + } + + double Cellfaber_rudy_2000FromCellMLCvode::GetIntracellularCalciumConcentration() + { + return NV_Ith_S(mStateVariables, 1); + } + + Cellfaber_rudy_2000FromCellMLCvode::Cellfaber_rudy_2000FromCellMLCvode(boost::shared_ptr pOdeSolver /* unused; should be empty */, boost::shared_ptr pIntracellularStimulus) + : AbstractCvodeCell( + pOdeSolver, + 25, + 0, + pIntracellularStimulus) + { + // Time units: millisecond + // + this->mpSystemInfo = OdeSystemInformation::Instance(); + Init(); + + // We have a default stimulus specified in the CellML file metadata + this->mHasDefaultStimulusFromCellML = true; + + NV_Ith_S(this->mParameters, 0) = 1; // (var_calcium_dynamics__leak_factor) [dimensionless] + NV_Ith_S(this->mParameters, 1) = 60; // (var_calcium_dynamics__G_rel_max) [per_ms] + NV_Ith_S(this->mParameters, 2) = 0.00080000000000000004; // (var_calcium_dynamics__K_mrel) [millimolar] + NV_Ith_S(this->mParameters, 3) = 0.0087500000000000008; // (var_calcium_dynamics__I_up) [millimolar_per_ms] + NV_Ith_S(this->mParameters, 4) = 1; // (var_ionic_concentrations__conc_clamp) [dimensionless] + NV_Ith_S(this->mParameters, 5) = 1.8; // (var_calcium_dynamics__Cao) [millimolar] + NV_Ith_S(this->mParameters, 6) = 5.4000000000000004; // (var_ionic_concentrations__Ko) [millimolar] + NV_Ith_S(this->mParameters, 7) = 140; // (var_ionic_concentrations__Nao) [millimolar] + NV_Ith_S(this->mParameters, 8) = 0.00054000000000000001; // (var_L_type_Ca_channel__P_Ca) [litre_per_farad_ms] + NV_Ith_S(this->mParameters, 9) = 16; // (var_fast_sodium_current__g_Na) [milliS_per_microF] + NV_Ith_S(this->mParameters, 10) = 0; // (var_fast_sodium_current__perc_reduced_inact_for_IpNa) [dimensionless] + NV_Ith_S(this->mParameters, 11) = 0; // (var_fast_sodium_current__shift_INa_inact) [millivolt] + NV_Ith_S(this->mParameters, 12) = 0.75; // (var_time_independent_potassium_current__G_K1) [milliS_per_microF] + NV_Ith_S(this->mParameters, 13) = 0.02614; // (var_rapid_delayed_rectifier_potassium_current__G_Kr) [milliS_per_microF] + NV_Ith_S(this->mParameters, 14) = 0.433; // (var_slow_delayed_rectifier_potassium_current__G_Ks) [milliS_per_microF] + NV_Ith_S(this->mParameters, 15) = 0.00025000000000000001; // (var_Na_Ca_exchanger__c1) [microA_per_microF] + NV_Ith_S(this->mParameters, 16) = 0.5; // (var_transient_outward_current__g_to) [milliS_per_microF] + } + + Cellfaber_rudy_2000FromCellMLCvode::~Cellfaber_rudy_2000FromCellMLCvode() + { + } + + + void Cellfaber_rudy_2000FromCellMLCvode::VerifyStateVariables() + { + + const double tol = 100*this->mAbsTol; + N_Vector rY = rGetStateVariables(); + std::string error_message = ""; + + for (unsigned i=0; i < 25; i++) + { + if(std::isnan(NV_Ith_S(rY, i))){ + error_message += "State variable " + this->rGetStateVariableNames()[i] + " is not a number\n"; + } + if(std::isinf(NV_Ith_S(rY, i))){ + error_message += "State variable " + this->rGetStateVariableNames()[i] + " has become INFINITE\n"; + } + if(this->is_concentration[i] && NV_Ith_S(rY, i) < -tol) + { + error_message += "Concentration " + this->rGetStateVariableNames()[i] + " below 0\n"; + } + if(this->is_probability[i] && NV_Ith_S(rY, i) < -tol) + { + error_message += "Probability " + this->rGetStateVariableNames()[i] + " below 0\n"; + } + if(this->is_probability[i] && NV_Ith_S(rY, i) > 1 + tol) + { + error_message += "Probability " + this->rGetStateVariableNames()[i] + " above 1\n"; + } + } + if (error_message != ""){ + EXCEPTION(DumpState(error_message)); + } + } + + double Cellfaber_rudy_2000FromCellMLCvode::GetIIonic(const std::vector* pStateVariables) + { + // For state variable interpolation (SVI) we read in interpolated state variables, + // otherwise for ionic current interpolation (ICI) we use the state variables of this model (node). + N_Vector rY; + bool made_new_cvode_vector = false; + if (!pStateVariables) + { + rY = rGetStateVariables(); + } + else + { + made_new_cvode_vector = true; + rY = MakeNVector(*pStateVariables); + } + double var_chaste_interface__cell__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : NV_Ith_S(rY, 0)); + // Units: millivolt; Initial value: -85.2119207874627 + double var_chaste_interface__calcium_dynamics__Cai = NV_Ith_S(rY, 1); + // Units: millimolar; Initial value: 0.000117482029668194 + double var_chaste_interface__fast_sodium_current_m_gate__m = NV_Ith_S(rY, 2); + // Units: dimensionless; Initial value: 0.00149183115674257 + double var_chaste_interface__fast_sodium_current_h_gate__h = NV_Ith_S(rY, 3); + // Units: dimensionless; Initial value: 0.985596581239651 + double var_chaste_interface__fast_sodium_current_j_gate__j = NV_Ith_S(rY, 4); + // Units: dimensionless; Initial value: 0.990898461370389 + double var_chaste_interface__L_type_Ca_channel_d_gate__d = NV_Ith_S(rY, 5); + // Units: dimensionless; Initial value: 5.82597094505446e-06 + double var_chaste_interface__L_type_Ca_channel_f_gate__f = NV_Ith_S(rY, 6); + // Units: dimensionless; Initial value: 0.997765362821995 + double var_chaste_interface__T_type_Ca_channel_b_gate__b = NV_Ith_S(rY, 7); + // Units: dimensionless; Initial value: 0.00136737866785149 + double var_chaste_interface__T_type_Ca_channel_g_gate__g = NV_Ith_S(rY, 8); + // Units: dimensionless; Initial value: 0.98881442877378 + double var_chaste_interface__rapid_delayed_rectifier_potassium_current_xr_gate__xr = NV_Ith_S(rY, 9); + // Units: dimensionless; Initial value: 0.000204700363126417 + double var_chaste_interface__slow_delayed_rectifier_potassium_current_xs1_gate__xs1 = NV_Ith_S(rY, 10); + // Units: dimensionless; Initial value: 0.00660746743356887 + double var_chaste_interface__slow_delayed_rectifier_potassium_current_xs2_gate__xs2 = NV_Ith_S(rY, 11); + // Units: dimensionless; Initial value: 0.0303768241233812 + double var_chaste_interface__transient_outward_current_zdv_gate__zdv = NV_Ith_S(rY, 12); + // Units: dimensionless; Initial value: 0.0144622472219576 + double var_chaste_interface__transient_outward_current_ydv_gate__ydv = NV_Ith_S(rY, 13); + // Units: dimensionless; Initial value: 0.999945568566232 + double var_chaste_interface__ionic_concentrations__Nai = NV_Ith_S(rY, 23); + // Units: millimolar; Initial value: 13.3649235394859 + double var_chaste_interface__ionic_concentrations__Ki = NV_Ith_S(rY, 24); + // Units: millimolar; Initial value: 141.056872392446 + + const double var_ATP_sensitive_potassium_current__ATPi = 3; // millimolar + const double var_ATP_sensitive_potassium_current__hATP = 2; // dimensionless + const double var_ATP_sensitive_potassium_current__i_K_ATP_on = 1; // dimensionless + const double var_ATP_sensitive_potassium_current__kATP = 0.00025000000000000001; // millimolar + const double var_ATP_sensitive_potassium_current__nATP = 0.23999999999999999; // dimensionless + const double var_ATP_sensitive_potassium_current__nicholsarea = 5.0000000000000002e-5; // dimensionless + const double var_ATP_sensitive_potassium_current__g_K_ATP = 0.000193 * var_ATP_sensitive_potassium_current__i_K_ATP_on / var_ATP_sensitive_potassium_current__nicholsarea; // milliS_per_microF + const double var_ATP_sensitive_potassium_current__pATP = 1 / (1 + pow((var_ATP_sensitive_potassium_current__ATPi / var_ATP_sensitive_potassium_current__kATP), var_ATP_sensitive_potassium_current__hATP)); // dimensionless + const double var_L_type_Ca_channel_f_Ca_gate__Km_Ca = 0.00059999999999999995; // millimolar + const double var_Na_Ca_exchanger__c2 = 0.0001; // dimensionless + const double var_Na_Ca_exchanger__gamma = 0.14999999999999999; // dimensionless + const double var_T_type_Ca_channel__g_CaT = 0.050000000000000003; // milliS_per_microF + const double var_calcium_background_current__g_Cab = 0.003016; // milliS_per_microF + const double var_L_type_Ca_channel_f_Ca_gate__f_Ca = 1 / (1 + var_chaste_interface__calcium_dynamics__Cai / var_L_type_Ca_channel_f_Ca_gate__Km_Ca); // dimensionless + const double var_cell__F = 96485; // coulomb_per_mole + const double var_cell__R = 8314; // joule_per_kilomole_kelvin + const double var_cell__T = 310; // kelvin + const double var_calcium_background_current__E_Ca = 0.5 * var_cell__R * var_cell__T * log(NV_Ith_S(mParameters, 5) / var_chaste_interface__calcium_dynamics__Cai) / var_cell__F; // millivolt + const double var_L_type_Ca_channel__I_CaCa = (((var_chaste_interface__cell__V >= -1.3356169352749131e-6) && (var_chaste_interface__cell__V <= 1.3356169352749131e-6)) ? (374358.83507802623 * (1.3356169352749131e-6 + var_chaste_interface__cell__V) * (0.019296999999999998 * (-0.34100000000000003 * NV_Ith_S(mParameters, 5) + var_chaste_interface__calcium_dynamics__Cai * exp(9.9999999999999995e-8)) * NV_Ith_S(mParameters, 8) / (-1 + exp(9.9999999999999995e-8)) + 0.019296999999999998 * (-0.34100000000000003 * NV_Ith_S(mParameters, 5) + var_chaste_interface__calcium_dynamics__Cai * exp(-9.9999999999999995e-8)) * NV_Ith_S(mParameters, 8) / (-1 + exp(-9.9999999999999995e-8))) - 0.019296999999999998 * (-0.34100000000000003 * NV_Ith_S(mParameters, 5) + var_chaste_interface__calcium_dynamics__Cai * exp(-9.9999999999999995e-8)) * NV_Ith_S(mParameters, 8) / (-1 + exp(-9.9999999999999995e-8))) : (14448.004881001343 * (-0.34100000000000003 * NV_Ith_S(mParameters, 5) + var_chaste_interface__calcium_dynamics__Cai * exp(0.074871767015605231 * var_chaste_interface__cell__V)) * NV_Ith_S(mParameters, 8) * var_chaste_interface__cell__V / (-1 + exp(0.074871767015605231 * var_chaste_interface__cell__V)))); // microA_per_microF + const double var_L_type_Ca_channel__i_CaCa = var_L_type_Ca_channel__I_CaCa * var_chaste_interface__L_type_Ca_channel_d_gate__d * var_L_type_Ca_channel_f_Ca_gate__f_Ca * var_chaste_interface__L_type_Ca_channel_f_gate__f; // microA_per_microF + const double var_T_type_Ca_channel__i_Ca_T = pow(var_chaste_interface__T_type_Ca_channel_b_gate__b, 2) * (-var_calcium_background_current__E_Ca + var_chaste_interface__cell__V) * var_T_type_Ca_channel__g_CaT * var_chaste_interface__T_type_Ca_channel_g_gate__g; // microA_per_microF + const double var_calcium_background_current__i_Ca_b = (-var_calcium_background_current__E_Ca + var_chaste_interface__cell__V) * var_calcium_background_current__g_Cab; // microA_per_microF + const double var_ATP_sensitive_potassium_current__GKbaraATP = pow((0.25 * NV_Ith_S(mParameters, 6)), var_ATP_sensitive_potassium_current__nATP) * var_ATP_sensitive_potassium_current__g_K_ATP * var_ATP_sensitive_potassium_current__pATP; // milliS_per_microF + const double var_L_type_Ca_channel__I_CaK = (((var_chaste_interface__cell__V >= -2.6712338705498262e-6) && (var_chaste_interface__cell__V <= 2.6712338705498262e-6)) ? (187179.41753901311 * (2.6712338705498262e-6 + var_chaste_interface__cell__V) * (1.8621604999999999e-9 * (-0.75 * NV_Ith_S(mParameters, 6) + 0.75 * var_chaste_interface__ionic_concentrations__Ki * exp(9.9999999999999995e-8)) / (-1 + exp(9.9999999999999995e-8)) + 1.8621604999999999e-9 * (-0.75 * NV_Ith_S(mParameters, 6) + 0.75 * var_chaste_interface__ionic_concentrations__Ki * exp(-9.9999999999999995e-8)) / (-1 + exp(-9.9999999999999995e-8))) - 1.8621604999999999e-9 * (-0.75 * NV_Ith_S(mParameters, 6) + 0.75 * var_chaste_interface__ionic_concentrations__Ki * exp(-9.9999999999999995e-8)) / (-1 + exp(-9.9999999999999995e-8))) : (0.00069711623550831479 * (-0.75 * NV_Ith_S(mParameters, 6) + 0.75 * var_chaste_interface__ionic_concentrations__Ki * exp(0.037435883507802616 * var_chaste_interface__cell__V)) * var_chaste_interface__cell__V / (-1 + exp(0.037435883507802616 * var_chaste_interface__cell__V)))); // microA_per_microF + const double var_L_type_Ca_channel__i_CaK = var_L_type_Ca_channel__I_CaK * var_chaste_interface__L_type_Ca_channel_d_gate__d * var_L_type_Ca_channel_f_Ca_gate__f_Ca * var_chaste_interface__L_type_Ca_channel_f_gate__f; // microA_per_microF + const double var_L_type_Ca_channel__I_CaNa = (((var_chaste_interface__cell__V >= -2.6712338705498262e-6) && (var_chaste_interface__cell__V <= 2.6712338705498262e-6)) ? (187179.41753901311 * (2.6712338705498262e-6 + var_chaste_interface__cell__V) * (6.5127375e-9 * (-0.75 * NV_Ith_S(mParameters, 7) + 0.75 * var_chaste_interface__ionic_concentrations__Nai * exp(9.9999999999999995e-8)) / (-1 + exp(9.9999999999999995e-8)) + 6.5127375e-9 * (-0.75 * NV_Ith_S(mParameters, 7) + 0.75 * var_chaste_interface__ionic_concentrations__Nai * exp(-9.9999999999999995e-8)) / (-1 + exp(-9.9999999999999995e-8))) - 6.5127375e-9 * (-0.75 * NV_Ith_S(mParameters, 7) + 0.75 * var_chaste_interface__ionic_concentrations__Nai * exp(-9.9999999999999995e-8)) / (-1 + exp(-9.9999999999999995e-8))) : (0.0024381008236689767 * (-0.75 * NV_Ith_S(mParameters, 7) + 0.75 * var_chaste_interface__ionic_concentrations__Nai * exp(0.037435883507802616 * var_chaste_interface__cell__V)) * var_chaste_interface__cell__V / (-1 + exp(0.037435883507802616 * var_chaste_interface__cell__V)))); // microA_per_microF + const double var_L_type_Ca_channel__i_CaNa = var_L_type_Ca_channel__I_CaNa * var_chaste_interface__L_type_Ca_channel_d_gate__d * var_L_type_Ca_channel_f_Ca_gate__f_Ca * var_chaste_interface__L_type_Ca_channel_f_gate__f; // microA_per_microF + const double var_L_type_Ca_channel__i_Ca_L = var_L_type_Ca_channel__i_CaCa + var_L_type_Ca_channel__i_CaK + var_L_type_Ca_channel__i_CaNa; // microA_per_microF + const double var_L_type_Ca_channel__i_Ca_L_converted = HeartConfig::Instance()->GetCapacitance() * var_L_type_Ca_channel__i_Ca_L; // uA_per_cm2 + const double var_Na_Ca_exchanger__i_NaCa = (-pow(NV_Ith_S(mParameters, 7), 3) * var_chaste_interface__calcium_dynamics__Cai + pow(var_chaste_interface__ionic_concentrations__Nai, 3) * NV_Ith_S(mParameters, 5) * exp(var_cell__F * var_chaste_interface__cell__V / (var_cell__R * var_cell__T))) * NV_Ith_S(mParameters, 15) * exp((-1 + var_Na_Ca_exchanger__gamma) * var_cell__F * var_chaste_interface__cell__V / (var_cell__R * var_cell__T)) / (1 + (pow(NV_Ith_S(mParameters, 7), 3) * var_chaste_interface__calcium_dynamics__Cai + pow(var_chaste_interface__ionic_concentrations__Nai, 3) * NV_Ith_S(mParameters, 5) * exp(var_cell__F * var_chaste_interface__cell__V / (var_cell__R * var_cell__T))) * var_Na_Ca_exchanger__c2 * exp((-1 + var_Na_Ca_exchanger__gamma) * var_cell__F * var_chaste_interface__cell__V / (var_cell__R * var_cell__T))); // microA_per_microF + const double var_Na_Ca_exchanger__i_NaCa_converted = HeartConfig::Instance()->GetCapacitance() * var_Na_Ca_exchanger__i_NaCa; // uA_per_cm2 + const double var_fast_sodium_current__E_Na = var_cell__R * var_cell__T * log(NV_Ith_S(mParameters, 7) / var_chaste_interface__ionic_concentrations__Nai) / var_cell__F; // millivolt + const double var_fast_sodium_current__i_Na = pow(var_chaste_interface__fast_sodium_current_m_gate__m, 3) * (-var_fast_sodium_current__E_Na + var_chaste_interface__cell__V) * NV_Ith_S(mParameters, 9) * var_chaste_interface__fast_sodium_current_h_gate__h * var_chaste_interface__fast_sodium_current_j_gate__j; // microA_per_microF + const double var_fast_sodium_current__i_Na_converted = HeartConfig::Instance()->GetCapacitance() * var_fast_sodium_current__i_Na; // uA_per_cm2 + const double var_non_specific_calcium_activated_current__I_ns_K = (((var_chaste_interface__cell__V >= -2.6712338705498262e-6) && (var_chaste_interface__cell__V <= 2.6712338705498262e-6)) ? (187179.41753901311 * (2.6712338705498262e-6 + var_chaste_interface__cell__V) * (1.6884874999999999e-9 * (-0.75 * NV_Ith_S(mParameters, 6) + 0.75 * var_chaste_interface__ionic_concentrations__Ki * exp(9.9999999999999995e-8)) / (-1 + exp(9.9999999999999995e-8)) + 1.6884874999999999e-9 * (-0.75 * NV_Ith_S(mParameters, 6) + 0.75 * var_chaste_interface__ionic_concentrations__Ki * exp(-9.9999999999999995e-8)) / (-1 + exp(-9.9999999999999995e-8))) - 1.6884874999999999e-9 * (-0.75 * NV_Ith_S(mParameters, 6) + 0.75 * var_chaste_interface__ionic_concentrations__Ki * exp(-9.9999999999999995e-8)) / (-1 + exp(-9.9999999999999995e-8))) : (0.00063210021354380874 * (-0.75 * NV_Ith_S(mParameters, 6) + 0.75 * var_chaste_interface__ionic_concentrations__Ki * exp(0.037435883507802616 * var_chaste_interface__cell__V)) * var_chaste_interface__cell__V / (-1 + exp(0.037435883507802616 * var_chaste_interface__cell__V)))); // microA_per_microF + const double var_non_specific_calcium_activated_current__I_ns_Na = (((var_chaste_interface__cell__V >= -2.6712338705498262e-6) && (var_chaste_interface__cell__V <= 2.6712338705498262e-6)) ? (187179.41753901311 * (2.6712338705498262e-6 + var_chaste_interface__cell__V) * (1.6884874999999999e-9 * (-0.75 * NV_Ith_S(mParameters, 7) + 0.75 * var_chaste_interface__ionic_concentrations__Nai * exp(9.9999999999999995e-8)) / (-1 + exp(9.9999999999999995e-8)) + 1.6884874999999999e-9 * (-0.75 * NV_Ith_S(mParameters, 7) + 0.75 * var_chaste_interface__ionic_concentrations__Nai * exp(-9.9999999999999995e-8)) / (-1 + exp(-9.9999999999999995e-8))) - 1.6884874999999999e-9 * (-0.75 * NV_Ith_S(mParameters, 7) + 0.75 * var_chaste_interface__ionic_concentrations__Nai * exp(-9.9999999999999995e-8)) / (-1 + exp(-9.9999999999999995e-8))) : (0.00063210021354380874 * (-0.75 * NV_Ith_S(mParameters, 7) + 0.75 * var_chaste_interface__ionic_concentrations__Nai * exp(0.037435883507802616 * var_chaste_interface__cell__V)) * var_chaste_interface__cell__V / (-1 + exp(0.037435883507802616 * var_chaste_interface__cell__V)))); // microA_per_microF + const double var_non_specific_calcium_activated_current__K_m_ns_Ca = 0.0011999999999999999; // millimolar + const double var_non_specific_calcium_activated_current__i_ns_K = var_non_specific_calcium_activated_current__I_ns_K / (1 + pow(var_non_specific_calcium_activated_current__K_m_ns_Ca, 3) / pow(var_chaste_interface__calcium_dynamics__Cai, 3)); // microA_per_microF + const double var_non_specific_calcium_activated_current__i_ns_Na = var_non_specific_calcium_activated_current__I_ns_Na / (1 + pow(var_non_specific_calcium_activated_current__K_m_ns_Ca, 3) / pow(var_chaste_interface__calcium_dynamics__Cai, 3)); // microA_per_microF + const double var_non_specific_calcium_activated_current__i_ns_Ca = var_non_specific_calcium_activated_current__i_ns_K + var_non_specific_calcium_activated_current__i_ns_Na; // microA_per_microF + const double var_plateau_potassium_current__Kp = 1 / (1 + exp(1.2521739130434781 - 0.16722408026755853 * var_chaste_interface__cell__V)); // dimensionless + const double var_plateau_potassium_current__g_Kp = 0.0055199999999999997; // milliS_per_microF + const double var_rapid_delayed_rectifier_potassium_current__Rect = 1 / (1 + exp(0.4017857142857143 + 0.044642857142857144 * var_chaste_interface__cell__V)); // dimensionless + const double var_rapid_delayed_rectifier_potassium_current__g_Kr = 0.43033148291193518 * sqrt(NV_Ith_S(mParameters, 6)) * NV_Ith_S(mParameters, 13); // milliS_per_microF + const double var_sarcolemmal_calcium_pump__I_pCa = 1.1499999999999999; // microA_per_microF + const double var_sarcolemmal_calcium_pump__K_mpCa = 0.00050000000000000001; // millimolar + const double var_sarcolemmal_calcium_pump__i_p_Ca = var_chaste_interface__calcium_dynamics__Cai * var_sarcolemmal_calcium_pump__I_pCa / (var_chaste_interface__calcium_dynamics__Cai + var_sarcolemmal_calcium_pump__K_mpCa); // microA_per_microF + const double var_slow_delayed_rectifier_potassium_current__PNaK = 0.018329999999999999; // dimensionless + const double var_slow_delayed_rectifier_potassium_current__E_Ks = var_cell__R * var_cell__T * log((NV_Ith_S(mParameters, 7) * var_slow_delayed_rectifier_potassium_current__PNaK + NV_Ith_S(mParameters, 6)) / (var_chaste_interface__ionic_concentrations__Nai * var_slow_delayed_rectifier_potassium_current__PNaK + var_chaste_interface__ionic_concentrations__Ki)) / var_cell__F; // millivolt + const double var_slow_delayed_rectifier_potassium_current__g_Ks = (1 + 0.59999999999999998 / (1 + 6.4818210260626455e-7 * pow((1 / var_chaste_interface__calcium_dynamics__Cai), 1.3999999999999999))) * NV_Ith_S(mParameters, 14); // milliS_per_microF + const double var_slow_delayed_rectifier_potassium_current__i_Ks = (-var_slow_delayed_rectifier_potassium_current__E_Ks + var_chaste_interface__cell__V) * var_slow_delayed_rectifier_potassium_current__g_Ks * var_chaste_interface__slow_delayed_rectifier_potassium_current_xs1_gate__xs1 * var_chaste_interface__slow_delayed_rectifier_potassium_current_xs2_gate__xs2; // microA_per_microF + const double var_slow_delayed_rectifier_potassium_current__i_Ks_converted = HeartConfig::Instance()->GetCapacitance() * var_slow_delayed_rectifier_potassium_current__i_Ks; // uA_per_cm2 + const double var_sodium_activated_potassium_current__g_K_Na = 0.12848000000000001; // milliS_per_microF + const double var_sodium_activated_potassium_current__kdKNa = 66; // millimolar + const double var_sodium_activated_potassium_current__nKNa = 2.7999999999999998; // dimensionless + const double var_sodium_activated_potassium_current__pona = 0.84999999999999998 / (1 + pow((var_sodium_activated_potassium_current__kdKNa / var_chaste_interface__ionic_concentrations__Nai), var_sodium_activated_potassium_current__nKNa)); // dimensionless + const double var_sodium_activated_potassium_current__pov = 0.80000000000000004 - 0.65000000000000002 / (1 + exp(8.3333333333333339 + 0.066666666666666666 * var_chaste_interface__cell__V)); // dimensionless + const double var_sodium_background_current__g_Nab = 0.0040000000000000001; // milliS_per_microF + const double var_sodium_background_current__i_Na_b = (-var_fast_sodium_current__E_Na + var_chaste_interface__cell__V) * var_sodium_background_current__g_Nab; // microA_per_microF + const double var_sodium_potassium_pump__I_NaK = 2.25; // microA_per_microF + const double var_sodium_potassium_pump__K_mKo = 1.5; // millimolar + const double var_sodium_potassium_pump__K_mNai = 10; // millimolar + const double var_sodium_potassium_pump__sigma = -0.14285714285714285 + 0.14285714285714285 * exp(0.01485884101040119 * NV_Ith_S(mParameters, 7)); // dimensionless + const double var_sodium_potassium_pump__f_NaK = 1 / (1 + 0.1245 * exp(-0.10000000000000001 * var_cell__F * var_chaste_interface__cell__V / (var_cell__R * var_cell__T)) + 0.036499999999999998 * var_sodium_potassium_pump__sigma * exp(-var_cell__F * var_chaste_interface__cell__V / (var_cell__R * var_cell__T))); // dimensionless + const double var_sodium_potassium_pump__i_NaK = NV_Ith_S(mParameters, 6) * var_sodium_potassium_pump__I_NaK * var_sodium_potassium_pump__f_NaK / ((1 + pow(var_sodium_potassium_pump__K_mNai, 2) / pow(var_chaste_interface__ionic_concentrations__Nai, 2)) * (NV_Ith_S(mParameters, 6) + var_sodium_potassium_pump__K_mKo)); // microA_per_microF + const double var_time_independent_potassium_current__E_K = var_cell__R * var_cell__T * log(NV_Ith_S(mParameters, 6) / var_chaste_interface__ionic_concentrations__Ki) / var_cell__F; // millivolt + const double var_ATP_sensitive_potassium_current__i_K_ATP = (-var_time_independent_potassium_current__E_K + var_chaste_interface__cell__V) * var_ATP_sensitive_potassium_current__GKbaraATP; // microA_per_microF + const double var_plateau_potassium_current__i_Kp = (-var_time_independent_potassium_current__E_K + var_chaste_interface__cell__V) * var_plateau_potassium_current__Kp * var_plateau_potassium_current__g_Kp; // microA_per_microF + const double var_rapid_delayed_rectifier_potassium_current__i_Kr = (-var_time_independent_potassium_current__E_K + var_chaste_interface__cell__V) * var_rapid_delayed_rectifier_potassium_current__Rect * var_rapid_delayed_rectifier_potassium_current__g_Kr * var_chaste_interface__rapid_delayed_rectifier_potassium_current_xr_gate__xr; // microA_per_microF + const double var_rapid_delayed_rectifier_potassium_current__i_Kr_converted = HeartConfig::Instance()->GetCapacitance() * var_rapid_delayed_rectifier_potassium_current__i_Kr; // uA_per_cm2 + const double var_sodium_activated_potassium_current__i_K_Na = (-var_time_independent_potassium_current__E_K + var_chaste_interface__cell__V) * var_sodium_activated_potassium_current__g_K_Na * var_sodium_activated_potassium_current__pona * var_sodium_activated_potassium_current__pov; // microA_per_microF + const double var_time_independent_potassium_current__g_K1 = 0.43033148291193518 * sqrt(NV_Ith_S(mParameters, 6)) * NV_Ith_S(mParameters, 12); // milliS_per_microF + const double var_time_independent_potassium_current_K1_gate__alpha_K1 = 1.02 / (1 + exp(-14.1227775 + 0.23849999999999999 * var_chaste_interface__cell__V - 0.23849999999999999 * var_time_independent_potassium_current__E_K)); // per_ms + const double var_time_independent_potassium_current_K1_gate__beta_K1 = (0.49124000000000001 * exp(0.43983232 + 0.080320000000000003 * var_chaste_interface__cell__V - 0.080320000000000003 * var_time_independent_potassium_current__E_K) + exp(-36.698642499999998 + 0.061749999999999999 * var_chaste_interface__cell__V - 0.061749999999999999 * var_time_independent_potassium_current__E_K)) / (1 + exp(-2.4444678999999998 + 0.51429999999999998 * var_time_independent_potassium_current__E_K - 0.51429999999999998 * var_chaste_interface__cell__V)); // per_ms + const double var_time_independent_potassium_current_K1_gate__K1_infinity = var_time_independent_potassium_current_K1_gate__alpha_K1 / (var_time_independent_potassium_current_K1_gate__alpha_K1 + var_time_independent_potassium_current_K1_gate__beta_K1); // dimensionless + const double var_time_independent_potassium_current__i_K1 = (-var_time_independent_potassium_current__E_K + var_chaste_interface__cell__V) * var_time_independent_potassium_current__g_K1 * var_time_independent_potassium_current_K1_gate__K1_infinity; // microA_per_microF + const double var_time_independent_potassium_current__i_K1_converted = HeartConfig::Instance()->GetCapacitance() * var_time_independent_potassium_current__i_K1; // uA_per_cm2 + const double var_transient_outward_current__rvdv = exp(0.01 * var_chaste_interface__cell__V); // dimensionless + const double var_transient_outward_current__i_to = pow(var_chaste_interface__transient_outward_current_zdv_gate__zdv, 3) * (-var_time_independent_potassium_current__E_K + var_chaste_interface__cell__V) * NV_Ith_S(mParameters, 16) * var_transient_outward_current__rvdv * var_chaste_interface__transient_outward_current_ydv_gate__ydv; // microA_per_microF + const double var_transient_outward_current__i_to_converted = HeartConfig::Instance()->GetCapacitance() * var_transient_outward_current__i_to; // uA_per_cm2 + const double var_chaste_interface__i_ionic = HeartConfig::Instance()->GetCapacitance() * var_ATP_sensitive_potassium_current__i_K_ATP + HeartConfig::Instance()->GetCapacitance() * var_T_type_Ca_channel__i_Ca_T + HeartConfig::Instance()->GetCapacitance() * var_calcium_background_current__i_Ca_b + HeartConfig::Instance()->GetCapacitance() * var_non_specific_calcium_activated_current__i_ns_Ca + HeartConfig::Instance()->GetCapacitance() * var_plateau_potassium_current__i_Kp + HeartConfig::Instance()->GetCapacitance() * var_sarcolemmal_calcium_pump__i_p_Ca + HeartConfig::Instance()->GetCapacitance() * var_sodium_activated_potassium_current__i_K_Na + HeartConfig::Instance()->GetCapacitance() * var_sodium_background_current__i_Na_b + HeartConfig::Instance()->GetCapacitance() * var_sodium_potassium_pump__i_NaK + var_L_type_Ca_channel__i_Ca_L_converted + var_Na_Ca_exchanger__i_NaCa_converted + var_fast_sodium_current__i_Na_converted + var_rapid_delayed_rectifier_potassium_current__i_Kr_converted + var_slow_delayed_rectifier_potassium_current__i_Ks_converted + var_time_independent_potassium_current__i_K1_converted + var_transient_outward_current__i_to_converted; // uA_per_cm2 + + const double i_ionic = var_chaste_interface__i_ionic; + if (made_new_cvode_vector) + { + DeleteVector(rY); + } + EXCEPT_IF_NOT(!std::isnan(i_ionic)); + return i_ionic; + } + + void Cellfaber_rudy_2000FromCellMLCvode::EvaluateYDerivatives(double var_chaste_interface__environment__time, const N_Vector rY, N_Vector rDY) + { + // Inputs: + // Time units: millisecond + double var_chaste_interface__cell__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : NV_Ith_S(rY, 0)); + // Units: millivolt; Initial value: -85.2119207874627 + double var_chaste_interface__calcium_dynamics__Cai = NV_Ith_S(rY, 1); + // Units: millimolar; Initial value: 0.000117482029668194 + double var_chaste_interface__fast_sodium_current_m_gate__m = NV_Ith_S(rY, 2); + // Units: dimensionless; Initial value: 0.00149183115674257 + double var_chaste_interface__fast_sodium_current_h_gate__h = NV_Ith_S(rY, 3); + // Units: dimensionless; Initial value: 0.985596581239651 + double var_chaste_interface__fast_sodium_current_j_gate__j = NV_Ith_S(rY, 4); + // Units: dimensionless; Initial value: 0.990898461370389 + double var_chaste_interface__L_type_Ca_channel_d_gate__d = NV_Ith_S(rY, 5); + // Units: dimensionless; Initial value: 5.82597094505446e-06 + double var_chaste_interface__L_type_Ca_channel_f_gate__f = NV_Ith_S(rY, 6); + // Units: dimensionless; Initial value: 0.997765362821995 + double var_chaste_interface__T_type_Ca_channel_b_gate__b = NV_Ith_S(rY, 7); + // Units: dimensionless; Initial value: 0.00136737866785149 + double var_chaste_interface__T_type_Ca_channel_g_gate__g = NV_Ith_S(rY, 8); + // Units: dimensionless; Initial value: 0.98881442877378 + double var_chaste_interface__rapid_delayed_rectifier_potassium_current_xr_gate__xr = NV_Ith_S(rY, 9); + // Units: dimensionless; Initial value: 0.000204700363126417 + double var_chaste_interface__slow_delayed_rectifier_potassium_current_xs1_gate__xs1 = NV_Ith_S(rY, 10); + // Units: dimensionless; Initial value: 0.00660746743356887 + double var_chaste_interface__slow_delayed_rectifier_potassium_current_xs2_gate__xs2 = NV_Ith_S(rY, 11); + // Units: dimensionless; Initial value: 0.0303768241233812 + double var_chaste_interface__transient_outward_current_zdv_gate__zdv = NV_Ith_S(rY, 12); + // Units: dimensionless; Initial value: 0.0144622472219576 + double var_chaste_interface__transient_outward_current_ydv_gate__ydv = NV_Ith_S(rY, 13); + // Units: dimensionless; Initial value: 0.999945568566232 + double var_chaste_interface__calcium_dynamics__Ca_JSR = NV_Ith_S(rY, 14); + // Units: millimolar; Initial value: 1.12791401197882 + double var_chaste_interface__calcium_dynamics__Ca_NSR = NV_Ith_S(rY, 15); + // Units: millimolar; Initial value: 1.76731003671612 + double var_chaste_interface__calcium_dynamics__APtrack = NV_Ith_S(rY, 16); + // Units: dimensionless; Initial value: 9.65910542308504e-196 + double var_chaste_interface__calcium_dynamics__APtrack2 = NV_Ith_S(rY, 17); + // Units: dimensionless; Initial value: 5.33944967562997e-195 + double var_chaste_interface__calcium_dynamics__APtrack3 = NV_Ith_S(rY, 18); + // Units: dimensionless; Initial value: 0.000129515197402902 + double var_chaste_interface__calcium_dynamics__Cainfluxtrack = NV_Ith_S(rY, 19); + // Units: millimolar; Initial value: 2.69380318286645e-196 + double var_chaste_interface__calcium_dynamics__OVRLDtrack = NV_Ith_S(rY, 20); + // Units: dimensionless; Initial value: 0.0 + double var_chaste_interface__calcium_dynamics__OVRLDtrack2 = NV_Ith_S(rY, 21); + // Units: dimensionless; Initial value: 0.0 + double var_chaste_interface__calcium_dynamics__OVRLDtrack3 = NV_Ith_S(rY, 22); + // Units: dimensionless; Initial value: 0.0 + double var_chaste_interface__ionic_concentrations__Nai = NV_Ith_S(rY, 23); + // Units: millimolar; Initial value: 13.3649235394859 + double var_chaste_interface__ionic_concentrations__Ki = NV_Ith_S(rY, 24); + // Units: millimolar; Initial value: 141.056872392446 + + // Mathematics + double d_dt_chaste_interface_var_cell__V; + const double var_ATP_sensitive_potassium_current__ATPi = 3; // millimolar + const double var_ATP_sensitive_potassium_current__hATP = 2; // dimensionless + const double var_ATP_sensitive_potassium_current__i_K_ATP_on = 1; // dimensionless + const double var_ATP_sensitive_potassium_current__kATP = 0.00025000000000000001; // millimolar + const double var_ATP_sensitive_potassium_current__nATP = 0.23999999999999999; // dimensionless + const double var_ATP_sensitive_potassium_current__nicholsarea = 5.0000000000000002e-5; // dimensionless + const double var_ATP_sensitive_potassium_current__g_K_ATP = 0.000193 * var_ATP_sensitive_potassium_current__i_K_ATP_on / var_ATP_sensitive_potassium_current__nicholsarea; // milliS_per_microF + const double var_ATP_sensitive_potassium_current__pATP = 1 / (1 + pow((var_ATP_sensitive_potassium_current__ATPi / var_ATP_sensitive_potassium_current__kATP), var_ATP_sensitive_potassium_current__hATP)); // dimensionless + const double var_L_type_Ca_channel_f_Ca_gate__Km_Ca = 0.00059999999999999995; // millimolar + const double var_Na_Ca_exchanger__c2 = 0.0001; // dimensionless + const double var_Na_Ca_exchanger__gamma = 0.14999999999999999; // dimensionless + const double var_T_type_Ca_channel__g_CaT = 0.050000000000000003; // milliS_per_microF + const double var_calcium_background_current__g_Cab = 0.003016; // milliS_per_microF + const double d_dt_chaste_interface_var_calcium_dynamics__APtrack2 = (((var_chaste_interface__calcium_dynamics__APtrack > 0.17999999999999999) && (var_chaste_interface__calcium_dynamics__APtrack < 0.20000000000000001)) ? (100 - 100.5 * var_chaste_interface__calcium_dynamics__APtrack2) : (-0.5 * var_chaste_interface__calcium_dynamics__APtrack2)); // 1 / ms + const double d_dt_chaste_interface_var_calcium_dynamics__APtrack3 = (((var_chaste_interface__calcium_dynamics__APtrack > 0.17999999999999999) && (var_chaste_interface__calcium_dynamics__APtrack < 0.20000000000000001)) ? (100 - 100.5 * var_chaste_interface__calcium_dynamics__APtrack3) : (-0.01 * var_chaste_interface__calcium_dynamics__APtrack3)); // 1 / ms + const double var_calcium_dynamics__CMDN_max = 0.050000000000000003; // millimolar + const double var_calcium_dynamics__CSQN_max = 10; // millimolar + const double var_calcium_dynamics__CSQNthresh = 0.69999999999999996; // dimensionless + const double var_calcium_dynamics__Ca_NSR_max = 15; // millimolar + const double var_L_type_Ca_channel_f_Ca_gate__f_Ca = 1 / (1 + var_chaste_interface__calcium_dynamics__Cai / var_L_type_Ca_channel_f_Ca_gate__Km_Ca); // dimensionless + const double var_calcium_dynamics__K_mCMDN = 0.0023800000000000002; // millimolar + const double var_calcium_dynamics__K_mCSQN = 0.80000000000000004; // millimolar + const double var_calcium_dynamics__K_mTn = 0.00050000000000000001; // millimolar + const double var_calcium_dynamics__K_mup = 0.00092000000000000003; // millimolar + const double var_calcium_dynamics__Logicthresh = 0.97999999999999998; // dimensionless + const double d_dt_chaste_interface_var_calcium_dynamics__OVRLDtrack2 = (((var_calcium_dynamics__Logicthresh > var_chaste_interface__calcium_dynamics__OVRLDtrack2) && (var_calcium_dynamics__Logicthresh < var_chaste_interface__calcium_dynamics__OVRLDtrack)) ? (50 - 50 * var_chaste_interface__calcium_dynamics__OVRLDtrack2) : (-0.5 * var_chaste_interface__calcium_dynamics__OVRLDtrack2)); // 1 / ms + const double d_dt_chaste_interface_var_calcium_dynamics__OVRLDtrack = (((var_chaste_interface__calcium_dynamics__APtrack3 < 0.37) && (var_chaste_interface__calcium_dynamics__OVRLDtrack3 < 0.37) && (var_calcium_dynamics__CSQNthresh < 1 / (1 + var_calcium_dynamics__K_mCSQN / var_chaste_interface__calcium_dynamics__Ca_JSR))) ? (50 - 50 * var_chaste_interface__calcium_dynamics__OVRLDtrack) : (-0.5 * var_chaste_interface__calcium_dynamics__OVRLDtrack)); // 1 / ms + const double d_dt_chaste_interface_var_calcium_dynamics__OVRLDtrack3 = (((var_calcium_dynamics__Logicthresh > var_chaste_interface__calcium_dynamics__OVRLDtrack3) && (var_calcium_dynamics__Logicthresh < var_chaste_interface__calcium_dynamics__OVRLDtrack)) ? (50 - 50 * var_chaste_interface__calcium_dynamics__OVRLDtrack3) : (-0.01 * var_chaste_interface__calcium_dynamics__OVRLDtrack3)); // 1 / ms + const double var_calcium_dynamics__RyRopen = 1 / (1 + var_chaste_interface__calcium_dynamics__APtrack2 * exp(2)); // dimensionless + const double var_calcium_dynamics__RyRclose = 1 - var_calcium_dynamics__RyRopen; // dimensionless + const double var_calcium_dynamics__Tn_max = 0.070000000000000007; // millimolar + const double var_calcium_dynamics__i_up = var_chaste_interface__calcium_dynamics__Cai * NV_Ith_S(mParameters, 3) / (var_chaste_interface__calcium_dynamics__Cai + var_calcium_dynamics__K_mup); // millimolar_per_ms + const double var_calcium_dynamics__K_leak = NV_Ith_S(mParameters, 3) * NV_Ith_S(mParameters, 0) / var_calcium_dynamics__Ca_NSR_max; // per_ms + const double var_calcium_dynamics__i_leak = var_chaste_interface__calcium_dynamics__Ca_NSR * var_calcium_dynamics__K_leak; // millimolar_per_ms + const double var_calcium_dynamics__tau_tr = 180; // ms + const double var_calcium_dynamics__i_tr = (-var_chaste_interface__calcium_dynamics__Ca_JSR + var_chaste_interface__calcium_dynamics__Ca_NSR) / var_calcium_dynamics__tau_tr; // millimolar_per_ms + const double var_cell__F = 96485; // coulomb_per_mole + const double var_cell__R = 8314; // joule_per_kilomole_kelvin + const double var_cell__T = 310; // kelvin + const double var_calcium_background_current__E_Ca = 0.5 * var_cell__R * var_cell__T * log(NV_Ith_S(mParameters, 5) / var_chaste_interface__calcium_dynamics__Cai) / var_cell__F; // millivolt + const double var_L_type_Ca_channel__I_CaCa = (((var_chaste_interface__cell__V >= -1.3356169352749131e-6) && (var_chaste_interface__cell__V <= 1.3356169352749131e-6)) ? (374358.83507802623 * (1.3356169352749131e-6 + var_chaste_interface__cell__V) * (0.019296999999999998 * (-0.34100000000000003 * NV_Ith_S(mParameters, 5) + var_chaste_interface__calcium_dynamics__Cai * exp(9.9999999999999995e-8)) * NV_Ith_S(mParameters, 8) / (-1 + exp(9.9999999999999995e-8)) + 0.019296999999999998 * (-0.34100000000000003 * NV_Ith_S(mParameters, 5) + var_chaste_interface__calcium_dynamics__Cai * exp(-9.9999999999999995e-8)) * NV_Ith_S(mParameters, 8) / (-1 + exp(-9.9999999999999995e-8))) - 0.019296999999999998 * (-0.34100000000000003 * NV_Ith_S(mParameters, 5) + var_chaste_interface__calcium_dynamics__Cai * exp(-9.9999999999999995e-8)) * NV_Ith_S(mParameters, 8) / (-1 + exp(-9.9999999999999995e-8))) : (14448.004881001343 * (-0.34100000000000003 * NV_Ith_S(mParameters, 5) + var_chaste_interface__calcium_dynamics__Cai * exp(0.074871767015605231 * var_chaste_interface__cell__V)) * NV_Ith_S(mParameters, 8) * var_chaste_interface__cell__V / (-1 + exp(0.074871767015605231 * var_chaste_interface__cell__V)))); // microA_per_microF + const double var_L_type_Ca_channel__i_CaCa = var_L_type_Ca_channel__I_CaCa * var_chaste_interface__L_type_Ca_channel_d_gate__d * var_L_type_Ca_channel_f_Ca_gate__f_Ca * var_chaste_interface__L_type_Ca_channel_f_gate__f; // microA_per_microF + const double var_L_type_Ca_channel_d_gate__E0_d = 10 + var_chaste_interface__cell__V; // millivolt + const double var_L_type_Ca_channel_d_gate__d_infinity = 1 / (1 + exp(-0.16025641025641024 * var_L_type_Ca_channel_d_gate__E0_d)); // dimensionless + const double var_L_type_Ca_channel_d_gate__tau_d = ((fabs(var_L_type_Ca_channel_d_gate__E0_d) < 1.0000000000000001e-5) ? (2.2893772893772892) : (28.571428571428569 * (1 - exp(-0.16025641025641024 * var_L_type_Ca_channel_d_gate__E0_d)) * var_L_type_Ca_channel_d_gate__d_infinity / var_L_type_Ca_channel_d_gate__E0_d)); // ms + const double var_L_type_Ca_channel_d_gate__alpha_d = var_L_type_Ca_channel_d_gate__d_infinity / var_L_type_Ca_channel_d_gate__tau_d; // per_ms + const double var_L_type_Ca_channel_d_gate__beta_d = (1 - var_L_type_Ca_channel_d_gate__d_infinity) / var_L_type_Ca_channel_d_gate__tau_d; // per_ms + const double d_dt_chaste_interface_var_L_type_Ca_channel_d_gate__d = (1 - var_chaste_interface__L_type_Ca_channel_d_gate__d) * var_L_type_Ca_channel_d_gate__alpha_d - var_L_type_Ca_channel_d_gate__beta_d * var_chaste_interface__L_type_Ca_channel_d_gate__d; // 1 / ms + const double var_L_type_Ca_channel_f_gate__f_infinity = 1 / (1 + exp(4.0767441860465121 + 0.11627906976744186 * var_chaste_interface__cell__V)) + 0.59999999999999998 / (1 + exp(2.5 - 0.050000000000000003 * var_chaste_interface__cell__V)); // dimensionless + const double var_L_type_Ca_channel_f_gate__tau_f = 1 / (0.02 + 0.019699999999999999 * exp(-0.113569 * pow((1 + 0.10000000000000001 * var_chaste_interface__cell__V), 2))); // ms + const double var_L_type_Ca_channel_f_gate__alpha_f = var_L_type_Ca_channel_f_gate__f_infinity / var_L_type_Ca_channel_f_gate__tau_f; // per_ms + const double var_L_type_Ca_channel_f_gate__beta_f = (1 - var_L_type_Ca_channel_f_gate__f_infinity) / var_L_type_Ca_channel_f_gate__tau_f; // per_ms + const double d_dt_chaste_interface_var_L_type_Ca_channel_f_gate__f = (1 - var_chaste_interface__L_type_Ca_channel_f_gate__f) * var_L_type_Ca_channel_f_gate__alpha_f - var_L_type_Ca_channel_f_gate__beta_f * var_chaste_interface__L_type_Ca_channel_f_gate__f; // 1 / ms + const double var_T_type_Ca_channel__i_Ca_T = pow(var_chaste_interface__T_type_Ca_channel_b_gate__b, 2) * (-var_calcium_background_current__E_Ca + var_chaste_interface__cell__V) * var_T_type_Ca_channel__g_CaT * var_chaste_interface__T_type_Ca_channel_g_gate__g; // microA_per_microF + const double var_T_type_Ca_channel_b_gate__b_inf = 1 / (1 + exp(-1.2962962962962963 - 0.092592592592592587 * var_chaste_interface__cell__V)); // dimensionless + const double var_T_type_Ca_channel_b_gate__tau_b = 3.7000000000000002 + 6.0999999999999996 / (1 + exp(5.5555555555555554 + 0.22222222222222221 * var_chaste_interface__cell__V)); // ms + const double d_dt_chaste_interface_var_T_type_Ca_channel_b_gate__b = (-var_chaste_interface__T_type_Ca_channel_b_gate__b + var_T_type_Ca_channel_b_gate__b_inf) / var_T_type_Ca_channel_b_gate__tau_b; // 1 / ms + const double var_T_type_Ca_channel_g_gate__g_inf = 1 / (1 + exp(10.714285714285715 + 0.17857142857142858 * var_chaste_interface__cell__V)); // dimensionless + const double var_T_type_Ca_channel_g_gate__tau_g = ((var_chaste_interface__cell__V <= 0) ? (12 - 0.875 * var_chaste_interface__cell__V) : (12)); // ms + const double d_dt_chaste_interface_var_T_type_Ca_channel_g_gate__g = (-var_chaste_interface__T_type_Ca_channel_g_gate__g + var_T_type_Ca_channel_g_gate__g_inf) / var_T_type_Ca_channel_g_gate__tau_g; // 1 / ms + const double var_calcium_background_current__i_Ca_b = (-var_calcium_background_current__E_Ca + var_chaste_interface__cell__V) * var_calcium_background_current__g_Cab; // microA_per_microF + const double var_cell__I_st_converted = GetIntracellularAreaStimulus(var_chaste_interface__environment__time); // uA_per_cm2 + const double var_cell__I_st = var_cell__I_st_converted / HeartConfig::Instance()->GetCapacitance(); // microA_per_microF + const double var_fast_sodium_current_h_gate__alpha_h = ((var_chaste_interface__cell__V < -40) ? (0.13500000000000001 * exp(-11.764705882352942 + 0.14705882352941177 * NV_Ith_S(mParameters, 11) - 0.14705882352941177 * var_chaste_interface__cell__V)) : (0)); // per_ms + const double var_fast_sodium_current_h_gate__beta_h = ((var_chaste_interface__cell__V < -40) ? (310000 * exp(0.34999999999999998 * var_chaste_interface__cell__V - 0.34999999999999998 * NV_Ith_S(mParameters, 11)) + 3.5600000000000001 * exp(0.079000000000000001 * var_chaste_interface__cell__V - 0.079000000000000001 * NV_Ith_S(mParameters, 11))) : (7.6923076923076916 / (1 + exp(-0.96036036036036043 + 0.0900900900900901 * NV_Ith_S(mParameters, 11) - 0.0900900900900901 * var_chaste_interface__cell__V)))); // per_ms + const double var_fast_sodium_current_h_gate__h_inf = 0.01 * NV_Ith_S(mParameters, 10) + (1 - 0.01 * NV_Ith_S(mParameters, 10)) * var_fast_sodium_current_h_gate__alpha_h / (var_fast_sodium_current_h_gate__alpha_h + var_fast_sodium_current_h_gate__beta_h); // dimensionless + const double var_fast_sodium_current_h_gate__tau_h = 1 / (var_fast_sodium_current_h_gate__alpha_h + var_fast_sodium_current_h_gate__beta_h); // ms + const double d_dt_chaste_interface_var_fast_sodium_current_h_gate__h = (-var_chaste_interface__fast_sodium_current_h_gate__h + var_fast_sodium_current_h_gate__h_inf) / var_fast_sodium_current_h_gate__tau_h; // 1 / ms + const double var_fast_sodium_current_j_gate__alpha_j = ((var_chaste_interface__cell__V < -40) ? ((37.780000000000001 + var_chaste_interface__cell__V) * (-127140 * exp(0.24440000000000001 * var_chaste_interface__cell__V - 0.24440000000000001 * NV_Ith_S(mParameters, 11)) - 3.4740000000000003e-5 * exp(0.043909999999999998 * NV_Ith_S(mParameters, 11) - 0.043909999999999998 * var_chaste_interface__cell__V)) / (1 + exp(24.640530000000002 + 0.311 * var_chaste_interface__cell__V - 0.311 * NV_Ith_S(mParameters, 11)))) : (0)); // per_ms + const double var_fast_sodium_current_j_gate__beta_j = ((var_chaste_interface__cell__V < -40) ? (0.1212 * exp(0.01052 * NV_Ith_S(mParameters, 11) - 0.01052 * var_chaste_interface__cell__V) / (1 + exp(-5.5312920000000005 + 0.13780000000000001 * NV_Ith_S(mParameters, 11) - 0.13780000000000001 * var_chaste_interface__cell__V))) : (0.29999999999999999 * exp(2.5349999999999999e-7 * NV_Ith_S(mParameters, 11) - 2.5349999999999999e-7 * var_chaste_interface__cell__V) / (1 + exp(-3.2000000000000002 + 0.10000000000000001 * NV_Ith_S(mParameters, 11) - 0.10000000000000001 * var_chaste_interface__cell__V)))); // per_ms + const double var_fast_sodium_current_j_gate__j_inf = 0.01 * NV_Ith_S(mParameters, 10) + (1 - 0.01 * NV_Ith_S(mParameters, 10)) * var_fast_sodium_current_j_gate__alpha_j / (var_fast_sodium_current_j_gate__alpha_j + var_fast_sodium_current_j_gate__beta_j); // dimensionless + const double var_fast_sodium_current_j_gate__tau_j = 1 / (var_fast_sodium_current_j_gate__alpha_j + var_fast_sodium_current_j_gate__beta_j); // ms + const double d_dt_chaste_interface_var_fast_sodium_current_j_gate__j = (-var_chaste_interface__fast_sodium_current_j_gate__j + var_fast_sodium_current_j_gate__j_inf) / var_fast_sodium_current_j_gate__tau_j; // 1 / ms + const double var_fast_sodium_current_m_gate__E0_m = 47.130000000000003 + var_chaste_interface__cell__V; // millivolt + const double var_fast_sodium_current_m_gate__beta_m = 0.080000000000000002 * exp(-0.090909090909090912 * var_chaste_interface__cell__V); // per_ms + const double var_fast_sodium_current_m_gate__delta_m = 1.0000000000000001e-5; // millivolt + const double var_fast_sodium_current_m_gate__alpha_m = ((var_fast_sodium_current_m_gate__delta_m <= fabs(var_fast_sodium_current_m_gate__E0_m)) ? (0.32000000000000001 * var_fast_sodium_current_m_gate__E0_m / (1 - exp(-0.10000000000000001 * var_fast_sodium_current_m_gate__E0_m))) : (3.2000000000000002)); // per_ms + const double d_dt_chaste_interface_var_fast_sodium_current_m_gate__m = (1 - var_chaste_interface__fast_sodium_current_m_gate__m) * var_fast_sodium_current_m_gate__alpha_m - var_fast_sodium_current_m_gate__beta_m * var_chaste_interface__fast_sodium_current_m_gate__m; // 1 / ms + const double var_geometry__A_cap = 0.00015339999999999999; // cm2 + const double var_geometry__preplength = 0.10000000000000001; // mm + const double var_geometry__radius = 0.010999999999999999; // mm + const double var_geometry__volume = M_PI * pow(var_geometry__radius, 2) * var_geometry__preplength; // micro_litre + const double var_geometry__V_JSR = 0.0047999999999999996 * var_geometry__volume; // micro_litre + const double var_geometry__V_NSR = 0.055199999999999999 * var_geometry__volume; // micro_litre + const double d_dt_chaste_interface_var_calcium_dynamics__Ca_NSR = -var_calcium_dynamics__i_leak - var_calcium_dynamics__i_tr * var_geometry__V_JSR / var_geometry__V_NSR + var_calcium_dynamics__i_up; // millimolar / ms + const double var_geometry__V_myo = 0.68000000000000005 * var_geometry__volume; // micro_litre + const double var_ATP_sensitive_potassium_current__GKbaraATP = pow((0.25 * NV_Ith_S(mParameters, 6)), var_ATP_sensitive_potassium_current__nATP) * var_ATP_sensitive_potassium_current__g_K_ATP * var_ATP_sensitive_potassium_current__pATP; // milliS_per_microF + const double var_L_type_Ca_channel__I_CaK = (((var_chaste_interface__cell__V >= -2.6712338705498262e-6) && (var_chaste_interface__cell__V <= 2.6712338705498262e-6)) ? (187179.41753901311 * (2.6712338705498262e-6 + var_chaste_interface__cell__V) * (1.8621604999999999e-9 * (-0.75 * NV_Ith_S(mParameters, 6) + 0.75 * var_chaste_interface__ionic_concentrations__Ki * exp(9.9999999999999995e-8)) / (-1 + exp(9.9999999999999995e-8)) + 1.8621604999999999e-9 * (-0.75 * NV_Ith_S(mParameters, 6) + 0.75 * var_chaste_interface__ionic_concentrations__Ki * exp(-9.9999999999999995e-8)) / (-1 + exp(-9.9999999999999995e-8))) - 1.8621604999999999e-9 * (-0.75 * NV_Ith_S(mParameters, 6) + 0.75 * var_chaste_interface__ionic_concentrations__Ki * exp(-9.9999999999999995e-8)) / (-1 + exp(-9.9999999999999995e-8))) : (0.00069711623550831479 * (-0.75 * NV_Ith_S(mParameters, 6) + 0.75 * var_chaste_interface__ionic_concentrations__Ki * exp(0.037435883507802616 * var_chaste_interface__cell__V)) * var_chaste_interface__cell__V / (-1 + exp(0.037435883507802616 * var_chaste_interface__cell__V)))); // microA_per_microF + const double var_L_type_Ca_channel__i_CaK = var_L_type_Ca_channel__I_CaK * var_chaste_interface__L_type_Ca_channel_d_gate__d * var_L_type_Ca_channel_f_Ca_gate__f_Ca * var_chaste_interface__L_type_Ca_channel_f_gate__f; // microA_per_microF + const double var_L_type_Ca_channel__I_CaNa = (((var_chaste_interface__cell__V >= -2.6712338705498262e-6) && (var_chaste_interface__cell__V <= 2.6712338705498262e-6)) ? (187179.41753901311 * (2.6712338705498262e-6 + var_chaste_interface__cell__V) * (6.5127375e-9 * (-0.75 * NV_Ith_S(mParameters, 7) + 0.75 * var_chaste_interface__ionic_concentrations__Nai * exp(9.9999999999999995e-8)) / (-1 + exp(9.9999999999999995e-8)) + 6.5127375e-9 * (-0.75 * NV_Ith_S(mParameters, 7) + 0.75 * var_chaste_interface__ionic_concentrations__Nai * exp(-9.9999999999999995e-8)) / (-1 + exp(-9.9999999999999995e-8))) - 6.5127375e-9 * (-0.75 * NV_Ith_S(mParameters, 7) + 0.75 * var_chaste_interface__ionic_concentrations__Nai * exp(-9.9999999999999995e-8)) / (-1 + exp(-9.9999999999999995e-8))) : (0.0024381008236689767 * (-0.75 * NV_Ith_S(mParameters, 7) + 0.75 * var_chaste_interface__ionic_concentrations__Nai * exp(0.037435883507802616 * var_chaste_interface__cell__V)) * var_chaste_interface__cell__V / (-1 + exp(0.037435883507802616 * var_chaste_interface__cell__V)))); // microA_per_microF + const double var_L_type_Ca_channel__i_CaNa = var_L_type_Ca_channel__I_CaNa * var_chaste_interface__L_type_Ca_channel_d_gate__d * var_L_type_Ca_channel_f_Ca_gate__f_Ca * var_chaste_interface__L_type_Ca_channel_f_gate__f; // microA_per_microF + const double var_L_type_Ca_channel__i_Ca_L = var_L_type_Ca_channel__i_CaCa + var_L_type_Ca_channel__i_CaK + var_L_type_Ca_channel__i_CaNa; // microA_per_microF + const double var_Na_Ca_exchanger__i_NaCa = (-pow(NV_Ith_S(mParameters, 7), 3) * var_chaste_interface__calcium_dynamics__Cai + pow(var_chaste_interface__ionic_concentrations__Nai, 3) * NV_Ith_S(mParameters, 5) * exp(var_cell__F * var_chaste_interface__cell__V / (var_cell__R * var_cell__T))) * NV_Ith_S(mParameters, 15) * exp((-1 + var_Na_Ca_exchanger__gamma) * var_cell__F * var_chaste_interface__cell__V / (var_cell__R * var_cell__T)) / (1 + (pow(NV_Ith_S(mParameters, 7), 3) * var_chaste_interface__calcium_dynamics__Cai + pow(var_chaste_interface__ionic_concentrations__Nai, 3) * NV_Ith_S(mParameters, 5) * exp(var_cell__F * var_chaste_interface__cell__V / (var_cell__R * var_cell__T))) * var_Na_Ca_exchanger__c2 * exp((-1 + var_Na_Ca_exchanger__gamma) * var_cell__F * var_chaste_interface__cell__V / (var_cell__R * var_cell__T))); // microA_per_microF + const double var_fast_sodium_current__E_Na = var_cell__R * var_cell__T * log(NV_Ith_S(mParameters, 7) / var_chaste_interface__ionic_concentrations__Nai) / var_cell__F; // millivolt + const double var_fast_sodium_current__i_Na = pow(var_chaste_interface__fast_sodium_current_m_gate__m, 3) * (-var_fast_sodium_current__E_Na + var_chaste_interface__cell__V) * NV_Ith_S(mParameters, 9) * var_chaste_interface__fast_sodium_current_h_gate__h * var_chaste_interface__fast_sodium_current_j_gate__j; // microA_per_microF + const double var_non_specific_calcium_activated_current__I_ns_K = (((var_chaste_interface__cell__V >= -2.6712338705498262e-6) && (var_chaste_interface__cell__V <= 2.6712338705498262e-6)) ? (187179.41753901311 * (2.6712338705498262e-6 + var_chaste_interface__cell__V) * (1.6884874999999999e-9 * (-0.75 * NV_Ith_S(mParameters, 6) + 0.75 * var_chaste_interface__ionic_concentrations__Ki * exp(9.9999999999999995e-8)) / (-1 + exp(9.9999999999999995e-8)) + 1.6884874999999999e-9 * (-0.75 * NV_Ith_S(mParameters, 6) + 0.75 * var_chaste_interface__ionic_concentrations__Ki * exp(-9.9999999999999995e-8)) / (-1 + exp(-9.9999999999999995e-8))) - 1.6884874999999999e-9 * (-0.75 * NV_Ith_S(mParameters, 6) + 0.75 * var_chaste_interface__ionic_concentrations__Ki * exp(-9.9999999999999995e-8)) / (-1 + exp(-9.9999999999999995e-8))) : (0.00063210021354380874 * (-0.75 * NV_Ith_S(mParameters, 6) + 0.75 * var_chaste_interface__ionic_concentrations__Ki * exp(0.037435883507802616 * var_chaste_interface__cell__V)) * var_chaste_interface__cell__V / (-1 + exp(0.037435883507802616 * var_chaste_interface__cell__V)))); // microA_per_microF + const double var_non_specific_calcium_activated_current__I_ns_Na = (((var_chaste_interface__cell__V >= -2.6712338705498262e-6) && (var_chaste_interface__cell__V <= 2.6712338705498262e-6)) ? (187179.41753901311 * (2.6712338705498262e-6 + var_chaste_interface__cell__V) * (1.6884874999999999e-9 * (-0.75 * NV_Ith_S(mParameters, 7) + 0.75 * var_chaste_interface__ionic_concentrations__Nai * exp(9.9999999999999995e-8)) / (-1 + exp(9.9999999999999995e-8)) + 1.6884874999999999e-9 * (-0.75 * NV_Ith_S(mParameters, 7) + 0.75 * var_chaste_interface__ionic_concentrations__Nai * exp(-9.9999999999999995e-8)) / (-1 + exp(-9.9999999999999995e-8))) - 1.6884874999999999e-9 * (-0.75 * NV_Ith_S(mParameters, 7) + 0.75 * var_chaste_interface__ionic_concentrations__Nai * exp(-9.9999999999999995e-8)) / (-1 + exp(-9.9999999999999995e-8))) : (0.00063210021354380874 * (-0.75 * NV_Ith_S(mParameters, 7) + 0.75 * var_chaste_interface__ionic_concentrations__Nai * exp(0.037435883507802616 * var_chaste_interface__cell__V)) * var_chaste_interface__cell__V / (-1 + exp(0.037435883507802616 * var_chaste_interface__cell__V)))); // microA_per_microF + const double var_non_specific_calcium_activated_current__K_m_ns_Ca = 0.0011999999999999999; // millimolar + const double var_non_specific_calcium_activated_current__i_ns_K = var_non_specific_calcium_activated_current__I_ns_K / (1 + pow(var_non_specific_calcium_activated_current__K_m_ns_Ca, 3) / pow(var_chaste_interface__calcium_dynamics__Cai, 3)); // microA_per_microF + const double var_non_specific_calcium_activated_current__i_ns_Na = var_non_specific_calcium_activated_current__I_ns_Na / (1 + pow(var_non_specific_calcium_activated_current__K_m_ns_Ca, 3) / pow(var_chaste_interface__calcium_dynamics__Cai, 3)); // microA_per_microF + const double var_non_specific_calcium_activated_current__i_ns_Ca = var_non_specific_calcium_activated_current__i_ns_K + var_non_specific_calcium_activated_current__i_ns_Na; // microA_per_microF + const double var_plateau_potassium_current__Kp = 1 / (1 + exp(1.2521739130434781 - 0.16722408026755853 * var_chaste_interface__cell__V)); // dimensionless + const double var_plateau_potassium_current__g_Kp = 0.0055199999999999997; // milliS_per_microF + const double var_rapid_delayed_rectifier_potassium_current__Rect = 1 / (1 + exp(0.4017857142857143 + 0.044642857142857144 * var_chaste_interface__cell__V)); // dimensionless + const double var_rapid_delayed_rectifier_potassium_current__g_Kr = 0.43033148291193518 * sqrt(NV_Ith_S(mParameters, 6)) * NV_Ith_S(mParameters, 13); // milliS_per_microF + const double var_rapid_delayed_rectifier_potassium_current_xr_gate__tau_xr = 1 / ((((var_chaste_interface__cell__V >= -14.200000813008129) && (var_chaste_interface__cell__V <= -14.199999186991869)) ? (-1.1219512194943214e-9 / (1 - exp(9.9999999998406912e-8)) + 615000.00000454858 * (14.200000813008129 + var_chaste_interface__cell__V) * (1.1219512194943214e-9 / (1 - exp(9.9999999998406912e-8)) + 1.1219512195134727e-9 / (1 - exp(-1.0000000000011388e-7)))) : (0.0013799999999999999 * (14.199999999999999 + var_chaste_interface__cell__V) / (1 - exp(-1.7465999999999999 - 0.123 * var_chaste_interface__cell__V)))) + (((var_chaste_interface__cell__V >= -38.900000689655172) && (var_chaste_interface__cell__V <= -38.899999310344825)) ? (-4.2068965517283451e-10 / (-1 + exp(-1.000000000001e-7)) + 724999.99997009686 * (38.900000689655172 + var_chaste_interface__cell__V) * (4.2068965517283451e-10 / (-1 + exp(-1.000000000001e-7)) + 4.2068965520669629e-10 / (-1 + exp(1.0000000000814911e-7)))) : (0.00060999999999999997 * (38.899999999999999 + var_chaste_interface__cell__V) / (-1 + exp(5.6404999999999994 + 0.14499999999999999 * var_chaste_interface__cell__V))))); // ms + const double var_rapid_delayed_rectifier_potassium_current_xr_gate__xr_infinity = 1 / (1 + exp(-2.8666666666666667 - 0.13333333333333333 * var_chaste_interface__cell__V)); // dimensionless + const double d_dt_chaste_interface_var_rapid_delayed_rectifier_potassium_current_xr_gate__xr = (-var_chaste_interface__rapid_delayed_rectifier_potassium_current_xr_gate__xr + var_rapid_delayed_rectifier_potassium_current_xr_gate__xr_infinity) / var_rapid_delayed_rectifier_potassium_current_xr_gate__tau_xr; // 1 / ms + const double var_sarcolemmal_calcium_pump__I_pCa = 1.1499999999999999; // microA_per_microF + const double var_sarcolemmal_calcium_pump__K_mpCa = 0.00050000000000000001; // millimolar + const double var_sarcolemmal_calcium_pump__i_p_Ca = var_chaste_interface__calcium_dynamics__Cai * var_sarcolemmal_calcium_pump__I_pCa / (var_chaste_interface__calcium_dynamics__Cai + var_sarcolemmal_calcium_pump__K_mpCa); // microA_per_microF + const double d_dt_chaste_interface_var_calcium_dynamics__Cainfluxtrack = ((var_chaste_interface__calcium_dynamics__APtrack > 0.20000000000000001) ? (-0.5 * (-2 * var_Na_Ca_exchanger__i_NaCa + var_L_type_Ca_channel__i_CaCa + var_T_type_Ca_channel__i_Ca_T + var_calcium_background_current__i_Ca_b + var_sarcolemmal_calcium_pump__i_p_Ca) * var_geometry__A_cap / (var_cell__F * var_geometry__V_myo)) : ((var_chaste_interface__calcium_dynamics__APtrack2 > 0.01) ? (0) : (-0.5 * var_chaste_interface__calcium_dynamics__Cainfluxtrack))); // millimolar / ms + const double var_calcium_dynamics__G_rel = 150 * var_calcium_dynamics__RyRclose * var_calcium_dynamics__RyRopen / (1 + exp(5.5555555555555554 + 1.1111111111111112 * var_L_type_Ca_channel__i_CaCa + 1.1111111111111112 * var_T_type_Ca_channel__i_Ca_T + 1.1111111111111112 * var_calcium_background_current__i_Ca_b + 1.1111111111111112 * var_sarcolemmal_calcium_pump__i_p_Ca - 2.2222222222222223 * var_Na_Ca_exchanger__i_NaCa)); // per_ms + const double var_calcium_dynamics__i_rel = (-var_chaste_interface__calcium_dynamics__Cai + var_chaste_interface__calcium_dynamics__Ca_JSR) * var_calcium_dynamics__G_rel; // millimolar_per_ms + const double d_dt_chaste_interface_var_calcium_dynamics__Ca_JSR = (-var_calcium_dynamics__i_rel + var_calcium_dynamics__i_tr) / (1 + var_calcium_dynamics__CSQN_max * var_calcium_dynamics__K_mCSQN / pow((var_chaste_interface__calcium_dynamics__Ca_JSR + var_calcium_dynamics__K_mCSQN), 2)); // millimolar / ms + const double d_dt_chaste_interface_var_calcium_dynamics__Cai = ((-var_calcium_dynamics__i_up + var_calcium_dynamics__i_leak) * var_geometry__V_NSR / var_geometry__V_myo + var_calcium_dynamics__i_rel * var_geometry__V_JSR / var_geometry__V_myo - 0.5 * (-2 * var_Na_Ca_exchanger__i_NaCa + var_L_type_Ca_channel__i_CaCa + var_T_type_Ca_channel__i_Ca_T + var_calcium_background_current__i_Ca_b + var_sarcolemmal_calcium_pump__i_p_Ca) * var_geometry__A_cap / (var_cell__F * var_geometry__V_myo)) / (1 + var_calcium_dynamics__CMDN_max * var_calcium_dynamics__K_mCMDN / pow((var_chaste_interface__calcium_dynamics__Cai + var_calcium_dynamics__K_mCMDN), 2) + var_calcium_dynamics__K_mTn * var_calcium_dynamics__Tn_max / pow((var_chaste_interface__calcium_dynamics__Cai + var_calcium_dynamics__K_mTn), 2)); // millimolar / ms + const double var_slow_delayed_rectifier_potassium_current__PNaK = 0.018329999999999999; // dimensionless + const double var_slow_delayed_rectifier_potassium_current__E_Ks = var_cell__R * var_cell__T * log((NV_Ith_S(mParameters, 7) * var_slow_delayed_rectifier_potassium_current__PNaK + NV_Ith_S(mParameters, 6)) / (var_chaste_interface__ionic_concentrations__Nai * var_slow_delayed_rectifier_potassium_current__PNaK + var_chaste_interface__ionic_concentrations__Ki)) / var_cell__F; // millivolt + const double var_slow_delayed_rectifier_potassium_current__g_Ks = (1 + 0.59999999999999998 / (1 + 6.4818210260626455e-7 * pow((1 / var_chaste_interface__calcium_dynamics__Cai), 1.3999999999999999))) * NV_Ith_S(mParameters, 14); // milliS_per_microF + const double var_slow_delayed_rectifier_potassium_current_xs1_gate__tau_xs1 = (((var_chaste_interface__cell__V >= -30.000001455604075) && (var_chaste_interface__cell__V <= -29.999998544395925)) ? (1 / (-1.0465793304208771e-10 / (1 - exp(2.1542940320207204e-7)) - 1.9068413391534758e-10 / (-1 + exp(-9.9999999999880736e-8)) + 343500.00000040967 * (30.000001455604075 + var_chaste_interface__cell__V) * (1.0465793304208771e-10 / (1 - exp(2.1542940320207204e-7)) + 1.0465793304208771e-10 / (1 - exp(-2.1542940320207204e-7)) + 1.9068413391534758e-10 / (-1 + exp(9.9999999999880736e-8)) + 1.9068413391534758e-10 / (-1 + exp(-9.9999999999880736e-8))))) : (1 / (0.00013100000000000001 * (30 + var_chaste_interface__cell__V) / (-1 + exp(2.0609999999999999 + 0.068699999999999997 * var_chaste_interface__cell__V)) + 7.1899999999999999e-5 * (30 + var_chaste_interface__cell__V) / (1 - exp(-4.4399999999999995 - 0.14799999999999999 * var_chaste_interface__cell__V))))); // ms + const double var_slow_delayed_rectifier_potassium_current_xs1_gate__xs1_infinity = 1 / (1 + exp(0.089820359281437126 - 0.059880239520958084 * var_chaste_interface__cell__V)); // dimensionless + const double d_dt_chaste_interface_var_slow_delayed_rectifier_potassium_current_xs1_gate__xs1 = (-var_chaste_interface__slow_delayed_rectifier_potassium_current_xs1_gate__xs1 + var_slow_delayed_rectifier_potassium_current_xs1_gate__xs1_infinity) / var_slow_delayed_rectifier_potassium_current_xs1_gate__tau_xs1; // 1 / ms + const double var_slow_delayed_rectifier_potassium_current_xs2_gate__tau_xs2 = 4 * (((var_chaste_interface__cell__V >= -30.000001455604075) && (var_chaste_interface__cell__V <= -29.999998544395925)) ? (1 / (-1.0465793304208771e-10 / (1 - exp(2.1542940320207204e-7)) - 1.9068413391534758e-10 / (-1 + exp(-9.9999999999880736e-8)) + 343500.00000040967 * (30.000001455604075 + var_chaste_interface__cell__V) * (1.0465793304208771e-10 / (1 - exp(2.1542940320207204e-7)) + 1.0465793304208771e-10 / (1 - exp(-2.1542940320207204e-7)) + 1.9068413391534758e-10 / (-1 + exp(9.9999999999880736e-8)) + 1.9068413391534758e-10 / (-1 + exp(-9.9999999999880736e-8))))) : (1 / (0.00013100000000000001 * (30 + var_chaste_interface__cell__V) / (-1 + exp(2.0609999999999999 + 0.068699999999999997 * var_chaste_interface__cell__V)) + 7.1899999999999999e-5 * (30 + var_chaste_interface__cell__V) / (1 - exp(-4.4399999999999995 - 0.14799999999999999 * var_chaste_interface__cell__V))))); // ms + const double var_slow_delayed_rectifier_potassium_current__i_Ks = (-var_slow_delayed_rectifier_potassium_current__E_Ks + var_chaste_interface__cell__V) * var_slow_delayed_rectifier_potassium_current__g_Ks * var_chaste_interface__slow_delayed_rectifier_potassium_current_xs1_gate__xs1 * var_chaste_interface__slow_delayed_rectifier_potassium_current_xs2_gate__xs2; // microA_per_microF + const double var_slow_delayed_rectifier_potassium_current_xs2_gate__xs2_infinity = 1 / (1 + exp(0.089820359281437126 - 0.059880239520958084 * var_chaste_interface__cell__V)); // dimensionless + const double d_dt_chaste_interface_var_slow_delayed_rectifier_potassium_current_xs2_gate__xs2 = (-var_chaste_interface__slow_delayed_rectifier_potassium_current_xs2_gate__xs2 + var_slow_delayed_rectifier_potassium_current_xs2_gate__xs2_infinity) / var_slow_delayed_rectifier_potassium_current_xs2_gate__tau_xs2; // 1 / ms + const double var_sodium_activated_potassium_current__g_K_Na = 0.12848000000000001; // milliS_per_microF + const double var_sodium_activated_potassium_current__kdKNa = 66; // millimolar + const double var_sodium_activated_potassium_current__nKNa = 2.7999999999999998; // dimensionless + const double var_sodium_activated_potassium_current__pona = 0.84999999999999998 / (1 + pow((var_sodium_activated_potassium_current__kdKNa / var_chaste_interface__ionic_concentrations__Nai), var_sodium_activated_potassium_current__nKNa)); // dimensionless + const double var_sodium_activated_potassium_current__pov = 0.80000000000000004 - 0.65000000000000002 / (1 + exp(8.3333333333333339 + 0.066666666666666666 * var_chaste_interface__cell__V)); // dimensionless + const double var_sodium_background_current__g_Nab = 0.0040000000000000001; // milliS_per_microF + const double var_sodium_background_current__i_Na_b = (-var_fast_sodium_current__E_Na + var_chaste_interface__cell__V) * var_sodium_background_current__g_Nab; // microA_per_microF + const double var_sodium_potassium_pump__I_NaK = 2.25; // microA_per_microF + const double var_sodium_potassium_pump__K_mKo = 1.5; // millimolar + const double var_sodium_potassium_pump__K_mNai = 10; // millimolar + const double var_sodium_potassium_pump__sigma = -0.14285714285714285 + 0.14285714285714285 * exp(0.01485884101040119 * NV_Ith_S(mParameters, 7)); // dimensionless + const double var_sodium_potassium_pump__f_NaK = 1 / (1 + 0.1245 * exp(-0.10000000000000001 * var_cell__F * var_chaste_interface__cell__V / (var_cell__R * var_cell__T)) + 0.036499999999999998 * var_sodium_potassium_pump__sigma * exp(-var_cell__F * var_chaste_interface__cell__V / (var_cell__R * var_cell__T))); // dimensionless + const double var_sodium_potassium_pump__i_NaK = NV_Ith_S(mParameters, 6) * var_sodium_potassium_pump__I_NaK * var_sodium_potassium_pump__f_NaK / ((1 + pow(var_sodium_potassium_pump__K_mNai, 2) / pow(var_chaste_interface__ionic_concentrations__Nai, 2)) * (NV_Ith_S(mParameters, 6) + var_sodium_potassium_pump__K_mKo)); // microA_per_microF + const double d_dt_chaste_interface_var_ionic_concentrations__Nai = -(3 * var_Na_Ca_exchanger__i_NaCa + 3 * var_sodium_potassium_pump__i_NaK + var_L_type_Ca_channel__i_CaNa + var_fast_sodium_current__i_Na + var_non_specific_calcium_activated_current__i_ns_Na + var_sodium_background_current__i_Na_b) * var_geometry__A_cap * NV_Ith_S(mParameters, 4) / (var_cell__F * var_geometry__V_myo); // millimolar / ms + const double var_time_independent_potassium_current__E_K = var_cell__R * var_cell__T * log(NV_Ith_S(mParameters, 6) / var_chaste_interface__ionic_concentrations__Ki) / var_cell__F; // millivolt + const double var_ATP_sensitive_potassium_current__i_K_ATP = (-var_time_independent_potassium_current__E_K + var_chaste_interface__cell__V) * var_ATP_sensitive_potassium_current__GKbaraATP; // microA_per_microF + const double var_plateau_potassium_current__i_Kp = (-var_time_independent_potassium_current__E_K + var_chaste_interface__cell__V) * var_plateau_potassium_current__Kp * var_plateau_potassium_current__g_Kp; // microA_per_microF + const double var_rapid_delayed_rectifier_potassium_current__i_Kr = (-var_time_independent_potassium_current__E_K + var_chaste_interface__cell__V) * var_rapid_delayed_rectifier_potassium_current__Rect * var_rapid_delayed_rectifier_potassium_current__g_Kr * var_chaste_interface__rapid_delayed_rectifier_potassium_current_xr_gate__xr; // microA_per_microF + const double var_sodium_activated_potassium_current__i_K_Na = (-var_time_independent_potassium_current__E_K + var_chaste_interface__cell__V) * var_sodium_activated_potassium_current__g_K_Na * var_sodium_activated_potassium_current__pona * var_sodium_activated_potassium_current__pov; // microA_per_microF + const double var_time_independent_potassium_current__g_K1 = 0.43033148291193518 * sqrt(NV_Ith_S(mParameters, 6)) * NV_Ith_S(mParameters, 12); // milliS_per_microF + const double var_time_independent_potassium_current_K1_gate__alpha_K1 = 1.02 / (1 + exp(-14.1227775 + 0.23849999999999999 * var_chaste_interface__cell__V - 0.23849999999999999 * var_time_independent_potassium_current__E_K)); // per_ms + const double var_time_independent_potassium_current_K1_gate__beta_K1 = (0.49124000000000001 * exp(0.43983232 + 0.080320000000000003 * var_chaste_interface__cell__V - 0.080320000000000003 * var_time_independent_potassium_current__E_K) + exp(-36.698642499999998 + 0.061749999999999999 * var_chaste_interface__cell__V - 0.061749999999999999 * var_time_independent_potassium_current__E_K)) / (1 + exp(-2.4444678999999998 + 0.51429999999999998 * var_time_independent_potassium_current__E_K - 0.51429999999999998 * var_chaste_interface__cell__V)); // per_ms + const double var_time_independent_potassium_current_K1_gate__K1_infinity = var_time_independent_potassium_current_K1_gate__alpha_K1 / (var_time_independent_potassium_current_K1_gate__alpha_K1 + var_time_independent_potassium_current_K1_gate__beta_K1); // dimensionless + const double var_time_independent_potassium_current__i_K1 = (-var_time_independent_potassium_current__E_K + var_chaste_interface__cell__V) * var_time_independent_potassium_current__g_K1 * var_time_independent_potassium_current_K1_gate__K1_infinity; // microA_per_microF + const double var_transient_outward_current__rvdv = exp(0.01 * var_chaste_interface__cell__V); // dimensionless + const double var_transient_outward_current_ydv_gate__alpha_ydv = 0.014999999999999999 / (1 + exp(12 + 0.20000000000000001 * var_chaste_interface__cell__V)); // per_ms + const double var_transient_outward_current_ydv_gate__beta_ydv = 0.10000000000000001 * exp(5 + 0.20000000000000001 * var_chaste_interface__cell__V) / (1 + exp(5 + 0.20000000000000001 * var_chaste_interface__cell__V)); // per_ms + const double var_transient_outward_current_ydv_gate__tau_ydv = 1 / (var_transient_outward_current_ydv_gate__alpha_ydv + var_transient_outward_current_ydv_gate__beta_ydv); // ms + const double var_transient_outward_current_ydv_gate__ydv_ss = var_transient_outward_current_ydv_gate__alpha_ydv / (var_transient_outward_current_ydv_gate__alpha_ydv + var_transient_outward_current_ydv_gate__beta_ydv); // dimensionless + const double d_dt_chaste_interface_var_transient_outward_current_ydv_gate__ydv = (-var_chaste_interface__transient_outward_current_ydv_gate__ydv + var_transient_outward_current_ydv_gate__ydv_ss) / var_transient_outward_current_ydv_gate__tau_ydv; // 1 / ms + const double var_transient_outward_current_zdv_gate__alpha_zdv = 10 * exp(-1.6000000000000001 + 0.040000000000000001 * var_chaste_interface__cell__V) / (1 + exp(-1.6000000000000001 + 0.040000000000000001 * var_chaste_interface__cell__V)); // per_ms + const double var_transient_outward_current_zdv_gate__beta_zdv = 10 * exp(-3.6000000000000001 - 0.040000000000000001 * var_chaste_interface__cell__V) / (1 + exp(-3.6000000000000001 - 0.040000000000000001 * var_chaste_interface__cell__V)); // per_ms + const double var_transient_outward_current_zdv_gate__tau_zdv = 1 / (var_transient_outward_current_zdv_gate__alpha_zdv + var_transient_outward_current_zdv_gate__beta_zdv); // ms + const double var_transient_outward_current__i_to = pow(var_chaste_interface__transient_outward_current_zdv_gate__zdv, 3) * (-var_time_independent_potassium_current__E_K + var_chaste_interface__cell__V) * NV_Ith_S(mParameters, 16) * var_transient_outward_current__rvdv * var_chaste_interface__transient_outward_current_ydv_gate__ydv; // microA_per_microF + const double d_dt_chaste_interface_var_ionic_concentrations__Ki = -(-2 * var_sodium_potassium_pump__i_NaK + var_ATP_sensitive_potassium_current__i_K_ATP + var_L_type_Ca_channel__i_CaK + var_cell__I_st + var_non_specific_calcium_activated_current__i_ns_K + var_plateau_potassium_current__i_Kp + var_rapid_delayed_rectifier_potassium_current__i_Kr + var_slow_delayed_rectifier_potassium_current__i_Ks + var_sodium_activated_potassium_current__i_K_Na + var_time_independent_potassium_current__i_K1 + var_transient_outward_current__i_to) * var_geometry__A_cap * NV_Ith_S(mParameters, 4) / (var_cell__F * var_geometry__V_myo); // millimolar / ms + const double var_cell__dVdt = -var_ATP_sensitive_potassium_current__i_K_ATP - var_L_type_Ca_channel__i_Ca_L - var_Na_Ca_exchanger__i_NaCa - var_T_type_Ca_channel__i_Ca_T - var_calcium_background_current__i_Ca_b - var_cell__I_st - var_fast_sodium_current__i_Na - var_non_specific_calcium_activated_current__i_ns_Ca - var_plateau_potassium_current__i_Kp - var_rapid_delayed_rectifier_potassium_current__i_Kr - var_sarcolemmal_calcium_pump__i_p_Ca - var_slow_delayed_rectifier_potassium_current__i_Ks - var_sodium_activated_potassium_current__i_K_Na - var_sodium_background_current__i_Na_b - var_sodium_potassium_pump__i_NaK - var_time_independent_potassium_current__i_K1 - var_transient_outward_current__i_to; // microA_per_microF + const double d_dt_chaste_interface_var_calcium_dynamics__APtrack = ((var_cell__dVdt > 150) ? (100 - 100.5 * var_chaste_interface__calcium_dynamics__APtrack) : (-0.5 * var_chaste_interface__calcium_dynamics__APtrack)); // 1 / ms + const double var_transient_outward_current_zdv_gate__zdv_ss = var_transient_outward_current_zdv_gate__alpha_zdv / (var_transient_outward_current_zdv_gate__alpha_zdv + var_transient_outward_current_zdv_gate__beta_zdv); // dimensionless + const double d_dt_chaste_interface_var_transient_outward_current_zdv_gate__zdv = (-var_chaste_interface__transient_outward_current_zdv_gate__zdv + var_transient_outward_current_zdv_gate__zdv_ss) / var_transient_outward_current_zdv_gate__tau_zdv; // 1 / ms + + if (mSetVoltageDerivativeToZero) + { + d_dt_chaste_interface_var_cell__V = 0.0; + } + else + { + d_dt_chaste_interface_var_cell__V = -var_ATP_sensitive_potassium_current__i_K_ATP - var_L_type_Ca_channel__i_Ca_L - var_Na_Ca_exchanger__i_NaCa - var_T_type_Ca_channel__i_Ca_T - var_calcium_background_current__i_Ca_b - var_cell__I_st - var_fast_sodium_current__i_Na - var_non_specific_calcium_activated_current__i_ns_Ca - var_plateau_potassium_current__i_Kp - var_rapid_delayed_rectifier_potassium_current__i_Kr - var_sarcolemmal_calcium_pump__i_p_Ca - var_slow_delayed_rectifier_potassium_current__i_Ks - var_sodium_activated_potassium_current__i_K_Na - var_sodium_background_current__i_Na_b - var_sodium_potassium_pump__i_NaK - var_time_independent_potassium_current__i_K1 - var_transient_outward_current__i_to; // millivolt / ms + } + + NV_Ith_S(rDY,0) = d_dt_chaste_interface_var_cell__V; + NV_Ith_S(rDY,1) = d_dt_chaste_interface_var_calcium_dynamics__Cai; + NV_Ith_S(rDY,2) = d_dt_chaste_interface_var_fast_sodium_current_m_gate__m; + NV_Ith_S(rDY,3) = d_dt_chaste_interface_var_fast_sodium_current_h_gate__h; + NV_Ith_S(rDY,4) = d_dt_chaste_interface_var_fast_sodium_current_j_gate__j; + NV_Ith_S(rDY,5) = d_dt_chaste_interface_var_L_type_Ca_channel_d_gate__d; + NV_Ith_S(rDY,6) = d_dt_chaste_interface_var_L_type_Ca_channel_f_gate__f; + NV_Ith_S(rDY,7) = d_dt_chaste_interface_var_T_type_Ca_channel_b_gate__b; + NV_Ith_S(rDY,8) = d_dt_chaste_interface_var_T_type_Ca_channel_g_gate__g; + NV_Ith_S(rDY,9) = d_dt_chaste_interface_var_rapid_delayed_rectifier_potassium_current_xr_gate__xr; + NV_Ith_S(rDY,10) = d_dt_chaste_interface_var_slow_delayed_rectifier_potassium_current_xs1_gate__xs1; + NV_Ith_S(rDY,11) = d_dt_chaste_interface_var_slow_delayed_rectifier_potassium_current_xs2_gate__xs2; + NV_Ith_S(rDY,12) = d_dt_chaste_interface_var_transient_outward_current_zdv_gate__zdv; + NV_Ith_S(rDY,13) = d_dt_chaste_interface_var_transient_outward_current_ydv_gate__ydv; + NV_Ith_S(rDY,14) = d_dt_chaste_interface_var_calcium_dynamics__Ca_JSR; + NV_Ith_S(rDY,15) = d_dt_chaste_interface_var_calcium_dynamics__Ca_NSR; + NV_Ith_S(rDY,16) = d_dt_chaste_interface_var_calcium_dynamics__APtrack; + NV_Ith_S(rDY,17) = d_dt_chaste_interface_var_calcium_dynamics__APtrack2; + NV_Ith_S(rDY,18) = d_dt_chaste_interface_var_calcium_dynamics__APtrack3; + NV_Ith_S(rDY,19) = d_dt_chaste_interface_var_calcium_dynamics__Cainfluxtrack; + NV_Ith_S(rDY,20) = d_dt_chaste_interface_var_calcium_dynamics__OVRLDtrack; + NV_Ith_S(rDY,21) = d_dt_chaste_interface_var_calcium_dynamics__OVRLDtrack2; + NV_Ith_S(rDY,22) = d_dt_chaste_interface_var_calcium_dynamics__OVRLDtrack3; + NV_Ith_S(rDY,23) = d_dt_chaste_interface_var_ionic_concentrations__Nai; + NV_Ith_S(rDY,24) = d_dt_chaste_interface_var_ionic_concentrations__Ki; + } + + N_Vector Cellfaber_rudy_2000FromCellMLCvode::ComputeDerivedQuantities(double var_chaste_interface__environment__time, const N_Vector & rY) + { + // Inputs: + // Time units: millisecond + double var_chaste_interface__cell__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : NV_Ith_S(rY, 0)); + // Units: millivolt; Initial value: -85.2119207874627 + double var_chaste_interface__calcium_dynamics__Cai = NV_Ith_S(rY, 1); + // Units: millimolar; Initial value: 0.000117482029668194 + double var_chaste_interface__fast_sodium_current_m_gate__m = NV_Ith_S(rY, 2); + // Units: dimensionless; Initial value: 0.00149183115674257 + double var_chaste_interface__fast_sodium_current_h_gate__h = NV_Ith_S(rY, 3); + // Units: dimensionless; Initial value: 0.985596581239651 + double var_chaste_interface__fast_sodium_current_j_gate__j = NV_Ith_S(rY, 4); + // Units: dimensionless; Initial value: 0.990898461370389 + double var_chaste_interface__L_type_Ca_channel_d_gate__d = NV_Ith_S(rY, 5); + // Units: dimensionless; Initial value: 5.82597094505446e-06 + double var_chaste_interface__L_type_Ca_channel_f_gate__f = NV_Ith_S(rY, 6); + // Units: dimensionless; Initial value: 0.997765362821995 + double var_chaste_interface__T_type_Ca_channel_b_gate__b = NV_Ith_S(rY, 7); + // Units: dimensionless; Initial value: 0.00136737866785149 + double var_chaste_interface__T_type_Ca_channel_g_gate__g = NV_Ith_S(rY, 8); + // Units: dimensionless; Initial value: 0.98881442877378 + double var_chaste_interface__rapid_delayed_rectifier_potassium_current_xr_gate__xr = NV_Ith_S(rY, 9); + // Units: dimensionless; Initial value: 0.000204700363126417 + double var_chaste_interface__slow_delayed_rectifier_potassium_current_xs1_gate__xs1 = NV_Ith_S(rY, 10); + // Units: dimensionless; Initial value: 0.00660746743356887 + double var_chaste_interface__slow_delayed_rectifier_potassium_current_xs2_gate__xs2 = NV_Ith_S(rY, 11); + // Units: dimensionless; Initial value: 0.0303768241233812 + double var_chaste_interface__transient_outward_current_zdv_gate__zdv = NV_Ith_S(rY, 12); + // Units: dimensionless; Initial value: 0.0144622472219576 + double var_chaste_interface__transient_outward_current_ydv_gate__ydv = NV_Ith_S(rY, 13); + // Units: dimensionless; Initial value: 0.999945568566232 + double var_chaste_interface__calcium_dynamics__Ca_JSR = NV_Ith_S(rY, 14); + // Units: millimolar; Initial value: 1.12791401197882 + double var_chaste_interface__calcium_dynamics__APtrack2 = NV_Ith_S(rY, 17); + // Units: dimensionless; Initial value: 5.33944967562997e-195 + double var_chaste_interface__ionic_concentrations__Nai = NV_Ith_S(rY, 23); + // Units: millimolar; Initial value: 13.3649235394859 + double var_chaste_interface__ionic_concentrations__Ki = NV_Ith_S(rY, 24); + // Units: millimolar; Initial value: 141.056872392446 + + // Mathematics + const double var_L_type_Ca_channel_f_Ca_gate__Km_Ca = 0.00059999999999999995; // millimolar + const double var_Na_Ca_exchanger__c2 = 0.0001; // dimensionless + const double var_Na_Ca_exchanger__gamma = 0.14999999999999999; // dimensionless + const double var_T_type_Ca_channel__g_CaT = 0.050000000000000003; // milliS_per_microF + const double var_calcium_background_current__g_Cab = 0.003016; // milliS_per_microF + const double var_L_type_Ca_channel_f_Ca_gate__f_Ca = 1 / (1 + var_chaste_interface__calcium_dynamics__Cai / var_L_type_Ca_channel_f_Ca_gate__Km_Ca); // dimensionless + const double var_calcium_dynamics__RyRopen = 1 / (1 + var_chaste_interface__calcium_dynamics__APtrack2 * exp(2)); // dimensionless + const double var_calcium_dynamics__RyRclose = 1 - var_calcium_dynamics__RyRopen; // dimensionless + const double var_cell__F = 96485; // coulomb_per_mole + const double var_cell__R = 8314; // joule_per_kilomole_kelvin + const double var_cell__T = 310; // kelvin + const double var_calcium_background_current__E_Ca = 0.5 * var_cell__R * var_cell__T * log(NV_Ith_S(mParameters, 5) / var_chaste_interface__calcium_dynamics__Cai) / var_cell__F; // millivolt + const double var_L_type_Ca_channel__I_CaCa = (((var_chaste_interface__cell__V >= -1.3356169352749131e-6) && (var_chaste_interface__cell__V <= 1.3356169352749131e-6)) ? (374358.83507802623 * (1.3356169352749131e-6 + var_chaste_interface__cell__V) * (0.019296999999999998 * (-0.34100000000000003 * NV_Ith_S(mParameters, 5) + var_chaste_interface__calcium_dynamics__Cai * exp(9.9999999999999995e-8)) * NV_Ith_S(mParameters, 8) / (-1 + exp(9.9999999999999995e-8)) + 0.019296999999999998 * (-0.34100000000000003 * NV_Ith_S(mParameters, 5) + var_chaste_interface__calcium_dynamics__Cai * exp(-9.9999999999999995e-8)) * NV_Ith_S(mParameters, 8) / (-1 + exp(-9.9999999999999995e-8))) - 0.019296999999999998 * (-0.34100000000000003 * NV_Ith_S(mParameters, 5) + var_chaste_interface__calcium_dynamics__Cai * exp(-9.9999999999999995e-8)) * NV_Ith_S(mParameters, 8) / (-1 + exp(-9.9999999999999995e-8))) : (14448.004881001343 * (-0.34100000000000003 * NV_Ith_S(mParameters, 5) + var_chaste_interface__calcium_dynamics__Cai * exp(0.074871767015605231 * var_chaste_interface__cell__V)) * NV_Ith_S(mParameters, 8) * var_chaste_interface__cell__V / (-1 + exp(0.074871767015605231 * var_chaste_interface__cell__V)))); // microA_per_microF + const double var_L_type_Ca_channel__i_CaCa = var_L_type_Ca_channel__I_CaCa * var_chaste_interface__L_type_Ca_channel_d_gate__d * var_L_type_Ca_channel_f_Ca_gate__f_Ca * var_chaste_interface__L_type_Ca_channel_f_gate__f; // microA_per_microF + const double var_L_type_Ca_channel_f_gate__tau_f = 1 / (0.02 + 0.019699999999999999 * exp(-0.113569 * pow((1 + 0.10000000000000001 * var_chaste_interface__cell__V), 2))); // ms + const double var_T_type_Ca_channel__i_Ca_T = pow(var_chaste_interface__T_type_Ca_channel_b_gate__b, 2) * (-var_calcium_background_current__E_Ca + var_chaste_interface__cell__V) * var_T_type_Ca_channel__g_CaT * var_chaste_interface__T_type_Ca_channel_g_gate__g; // microA_per_microF + const double var_calcium_background_current__i_Ca_b = (-var_calcium_background_current__E_Ca + var_chaste_interface__cell__V) * var_calcium_background_current__g_Cab; // microA_per_microF + const double var_cell__I_st_converted = GetIntracellularAreaStimulus(var_chaste_interface__environment__time); // uA_per_cm2 + const double var_fast_sodium_current_h_gate__alpha_h = ((var_chaste_interface__cell__V < -40) ? (0.13500000000000001 * exp(-11.764705882352942 + 0.14705882352941177 * NV_Ith_S(mParameters, 11) - 0.14705882352941177 * var_chaste_interface__cell__V)) : (0)); // per_ms + const double var_fast_sodium_current_h_gate__beta_h = ((var_chaste_interface__cell__V < -40) ? (310000 * exp(0.34999999999999998 * var_chaste_interface__cell__V - 0.34999999999999998 * NV_Ith_S(mParameters, 11)) + 3.5600000000000001 * exp(0.079000000000000001 * var_chaste_interface__cell__V - 0.079000000000000001 * NV_Ith_S(mParameters, 11))) : (7.6923076923076916 / (1 + exp(-0.96036036036036043 + 0.0900900900900901 * NV_Ith_S(mParameters, 11) - 0.0900900900900901 * var_chaste_interface__cell__V)))); // per_ms + const double var_fast_sodium_current_h_gate__tau_h = 1 / (var_fast_sodium_current_h_gate__alpha_h + var_fast_sodium_current_h_gate__beta_h); // ms + const double var_fast_sodium_current_j_gate__alpha_j = ((var_chaste_interface__cell__V < -40) ? ((37.780000000000001 + var_chaste_interface__cell__V) * (-127140 * exp(0.24440000000000001 * var_chaste_interface__cell__V - 0.24440000000000001 * NV_Ith_S(mParameters, 11)) - 3.4740000000000003e-5 * exp(0.043909999999999998 * NV_Ith_S(mParameters, 11) - 0.043909999999999998 * var_chaste_interface__cell__V)) / (1 + exp(24.640530000000002 + 0.311 * var_chaste_interface__cell__V - 0.311 * NV_Ith_S(mParameters, 11)))) : (0)); // per_ms + const double var_fast_sodium_current_j_gate__beta_j = ((var_chaste_interface__cell__V < -40) ? (0.1212 * exp(0.01052 * NV_Ith_S(mParameters, 11) - 0.01052 * var_chaste_interface__cell__V) / (1 + exp(-5.5312920000000005 + 0.13780000000000001 * NV_Ith_S(mParameters, 11) - 0.13780000000000001 * var_chaste_interface__cell__V))) : (0.29999999999999999 * exp(2.5349999999999999e-7 * NV_Ith_S(mParameters, 11) - 2.5349999999999999e-7 * var_chaste_interface__cell__V) / (1 + exp(-3.2000000000000002 + 0.10000000000000001 * NV_Ith_S(mParameters, 11) - 0.10000000000000001 * var_chaste_interface__cell__V)))); // per_ms + const double var_fast_sodium_current_j_gate__tau_j = 1 / (var_fast_sodium_current_j_gate__alpha_j + var_fast_sodium_current_j_gate__beta_j); // ms + const double var_L_type_Ca_channel__I_CaK = (((var_chaste_interface__cell__V >= -2.6712338705498262e-6) && (var_chaste_interface__cell__V <= 2.6712338705498262e-6)) ? (187179.41753901311 * (2.6712338705498262e-6 + var_chaste_interface__cell__V) * (1.8621604999999999e-9 * (-0.75 * NV_Ith_S(mParameters, 6) + 0.75 * var_chaste_interface__ionic_concentrations__Ki * exp(9.9999999999999995e-8)) / (-1 + exp(9.9999999999999995e-8)) + 1.8621604999999999e-9 * (-0.75 * NV_Ith_S(mParameters, 6) + 0.75 * var_chaste_interface__ionic_concentrations__Ki * exp(-9.9999999999999995e-8)) / (-1 + exp(-9.9999999999999995e-8))) - 1.8621604999999999e-9 * (-0.75 * NV_Ith_S(mParameters, 6) + 0.75 * var_chaste_interface__ionic_concentrations__Ki * exp(-9.9999999999999995e-8)) / (-1 + exp(-9.9999999999999995e-8))) : (0.00069711623550831479 * (-0.75 * NV_Ith_S(mParameters, 6) + 0.75 * var_chaste_interface__ionic_concentrations__Ki * exp(0.037435883507802616 * var_chaste_interface__cell__V)) * var_chaste_interface__cell__V / (-1 + exp(0.037435883507802616 * var_chaste_interface__cell__V)))); // microA_per_microF + const double var_L_type_Ca_channel__i_CaK = var_L_type_Ca_channel__I_CaK * var_chaste_interface__L_type_Ca_channel_d_gate__d * var_L_type_Ca_channel_f_Ca_gate__f_Ca * var_chaste_interface__L_type_Ca_channel_f_gate__f; // microA_per_microF + const double var_L_type_Ca_channel__I_CaNa = (((var_chaste_interface__cell__V >= -2.6712338705498262e-6) && (var_chaste_interface__cell__V <= 2.6712338705498262e-6)) ? (187179.41753901311 * (2.6712338705498262e-6 + var_chaste_interface__cell__V) * (6.5127375e-9 * (-0.75 * NV_Ith_S(mParameters, 7) + 0.75 * var_chaste_interface__ionic_concentrations__Nai * exp(9.9999999999999995e-8)) / (-1 + exp(9.9999999999999995e-8)) + 6.5127375e-9 * (-0.75 * NV_Ith_S(mParameters, 7) + 0.75 * var_chaste_interface__ionic_concentrations__Nai * exp(-9.9999999999999995e-8)) / (-1 + exp(-9.9999999999999995e-8))) - 6.5127375e-9 * (-0.75 * NV_Ith_S(mParameters, 7) + 0.75 * var_chaste_interface__ionic_concentrations__Nai * exp(-9.9999999999999995e-8)) / (-1 + exp(-9.9999999999999995e-8))) : (0.0024381008236689767 * (-0.75 * NV_Ith_S(mParameters, 7) + 0.75 * var_chaste_interface__ionic_concentrations__Nai * exp(0.037435883507802616 * var_chaste_interface__cell__V)) * var_chaste_interface__cell__V / (-1 + exp(0.037435883507802616 * var_chaste_interface__cell__V)))); // microA_per_microF + const double var_L_type_Ca_channel__i_CaNa = var_L_type_Ca_channel__I_CaNa * var_chaste_interface__L_type_Ca_channel_d_gate__d * var_L_type_Ca_channel_f_Ca_gate__f_Ca * var_chaste_interface__L_type_Ca_channel_f_gate__f; // microA_per_microF + const double var_L_type_Ca_channel__i_Ca_L = var_L_type_Ca_channel__i_CaCa + var_L_type_Ca_channel__i_CaK + var_L_type_Ca_channel__i_CaNa; // microA_per_microF + const double var_L_type_Ca_channel__i_Ca_L_converted = HeartConfig::Instance()->GetCapacitance() * var_L_type_Ca_channel__i_Ca_L; // uA_per_cm2 + const double var_Na_Ca_exchanger__i_NaCa = (-pow(NV_Ith_S(mParameters, 7), 3) * var_chaste_interface__calcium_dynamics__Cai + pow(var_chaste_interface__ionic_concentrations__Nai, 3) * NV_Ith_S(mParameters, 5) * exp(var_cell__F * var_chaste_interface__cell__V / (var_cell__R * var_cell__T))) * NV_Ith_S(mParameters, 15) * exp((-1 + var_Na_Ca_exchanger__gamma) * var_cell__F * var_chaste_interface__cell__V / (var_cell__R * var_cell__T)) / (1 + (pow(NV_Ith_S(mParameters, 7), 3) * var_chaste_interface__calcium_dynamics__Cai + pow(var_chaste_interface__ionic_concentrations__Nai, 3) * NV_Ith_S(mParameters, 5) * exp(var_cell__F * var_chaste_interface__cell__V / (var_cell__R * var_cell__T))) * var_Na_Ca_exchanger__c2 * exp((-1 + var_Na_Ca_exchanger__gamma) * var_cell__F * var_chaste_interface__cell__V / (var_cell__R * var_cell__T))); // microA_per_microF + const double var_Na_Ca_exchanger__i_NaCa_converted = HeartConfig::Instance()->GetCapacitance() * var_Na_Ca_exchanger__i_NaCa; // uA_per_cm2 + const double var_fast_sodium_current__E_Na = var_cell__R * var_cell__T * log(NV_Ith_S(mParameters, 7) / var_chaste_interface__ionic_concentrations__Nai) / var_cell__F; // millivolt + const double var_fast_sodium_current__i_Na = pow(var_chaste_interface__fast_sodium_current_m_gate__m, 3) * (-var_fast_sodium_current__E_Na + var_chaste_interface__cell__V) * NV_Ith_S(mParameters, 9) * var_chaste_interface__fast_sodium_current_h_gate__h * var_chaste_interface__fast_sodium_current_j_gate__j; // microA_per_microF + const double var_fast_sodium_current__i_Na_converted = HeartConfig::Instance()->GetCapacitance() * var_fast_sodium_current__i_Na; // uA_per_cm2 + const double var_rapid_delayed_rectifier_potassium_current__Rect = 1 / (1 + exp(0.4017857142857143 + 0.044642857142857144 * var_chaste_interface__cell__V)); // dimensionless + const double var_rapid_delayed_rectifier_potassium_current__g_Kr = 0.43033148291193518 * sqrt(NV_Ith_S(mParameters, 6)) * NV_Ith_S(mParameters, 13); // milliS_per_microF + const double var_sarcolemmal_calcium_pump__I_pCa = 1.1499999999999999; // microA_per_microF + const double var_sarcolemmal_calcium_pump__K_mpCa = 0.00050000000000000001; // millimolar + const double var_sarcolemmal_calcium_pump__i_p_Ca = var_chaste_interface__calcium_dynamics__Cai * var_sarcolemmal_calcium_pump__I_pCa / (var_chaste_interface__calcium_dynamics__Cai + var_sarcolemmal_calcium_pump__K_mpCa); // microA_per_microF + const double var_calcium_dynamics__G_rel = 150 * var_calcium_dynamics__RyRclose * var_calcium_dynamics__RyRopen / (1 + exp(5.5555555555555554 + 1.1111111111111112 * var_L_type_Ca_channel__i_CaCa + 1.1111111111111112 * var_T_type_Ca_channel__i_Ca_T + 1.1111111111111112 * var_calcium_background_current__i_Ca_b + 1.1111111111111112 * var_sarcolemmal_calcium_pump__i_p_Ca - 2.2222222222222223 * var_Na_Ca_exchanger__i_NaCa)); // per_ms + const double var_calcium_dynamics__i_rel = (-var_chaste_interface__calcium_dynamics__Cai + var_chaste_interface__calcium_dynamics__Ca_JSR) * var_calcium_dynamics__G_rel; // millimolar_per_ms + const double var_slow_delayed_rectifier_potassium_current__PNaK = 0.018329999999999999; // dimensionless + const double var_slow_delayed_rectifier_potassium_current__E_Ks = var_cell__R * var_cell__T * log((NV_Ith_S(mParameters, 7) * var_slow_delayed_rectifier_potassium_current__PNaK + NV_Ith_S(mParameters, 6)) / (var_chaste_interface__ionic_concentrations__Nai * var_slow_delayed_rectifier_potassium_current__PNaK + var_chaste_interface__ionic_concentrations__Ki)) / var_cell__F; // millivolt + const double var_slow_delayed_rectifier_potassium_current__g_Ks = (1 + 0.59999999999999998 / (1 + 6.4818210260626455e-7 * pow((1 / var_chaste_interface__calcium_dynamics__Cai), 1.3999999999999999))) * NV_Ith_S(mParameters, 14); // milliS_per_microF + const double var_slow_delayed_rectifier_potassium_current__i_Ks = (-var_slow_delayed_rectifier_potassium_current__E_Ks + var_chaste_interface__cell__V) * var_slow_delayed_rectifier_potassium_current__g_Ks * var_chaste_interface__slow_delayed_rectifier_potassium_current_xs1_gate__xs1 * var_chaste_interface__slow_delayed_rectifier_potassium_current_xs2_gate__xs2; // microA_per_microF + const double var_slow_delayed_rectifier_potassium_current__i_Ks_converted = HeartConfig::Instance()->GetCapacitance() * var_slow_delayed_rectifier_potassium_current__i_Ks; // uA_per_cm2 + const double var_time_independent_potassium_current__E_K = var_cell__R * var_cell__T * log(NV_Ith_S(mParameters, 6) / var_chaste_interface__ionic_concentrations__Ki) / var_cell__F; // millivolt + const double var_rapid_delayed_rectifier_potassium_current__i_Kr = (-var_time_independent_potassium_current__E_K + var_chaste_interface__cell__V) * var_rapid_delayed_rectifier_potassium_current__Rect * var_rapid_delayed_rectifier_potassium_current__g_Kr * var_chaste_interface__rapid_delayed_rectifier_potassium_current_xr_gate__xr; // microA_per_microF + const double var_rapid_delayed_rectifier_potassium_current__i_Kr_converted = HeartConfig::Instance()->GetCapacitance() * var_rapid_delayed_rectifier_potassium_current__i_Kr; // uA_per_cm2 + const double var_time_independent_potassium_current__g_K1 = 0.43033148291193518 * sqrt(NV_Ith_S(mParameters, 6)) * NV_Ith_S(mParameters, 12); // milliS_per_microF + const double var_time_independent_potassium_current_K1_gate__alpha_K1 = 1.02 / (1 + exp(-14.1227775 + 0.23849999999999999 * var_chaste_interface__cell__V - 0.23849999999999999 * var_time_independent_potassium_current__E_K)); // per_ms + const double var_time_independent_potassium_current_K1_gate__beta_K1 = (0.49124000000000001 * exp(0.43983232 + 0.080320000000000003 * var_chaste_interface__cell__V - 0.080320000000000003 * var_time_independent_potassium_current__E_K) + exp(-36.698642499999998 + 0.061749999999999999 * var_chaste_interface__cell__V - 0.061749999999999999 * var_time_independent_potassium_current__E_K)) / (1 + exp(-2.4444678999999998 + 0.51429999999999998 * var_time_independent_potassium_current__E_K - 0.51429999999999998 * var_chaste_interface__cell__V)); // per_ms + const double var_time_independent_potassium_current_K1_gate__K1_infinity = var_time_independent_potassium_current_K1_gate__alpha_K1 / (var_time_independent_potassium_current_K1_gate__alpha_K1 + var_time_independent_potassium_current_K1_gate__beta_K1); // dimensionless + const double var_time_independent_potassium_current__i_K1 = (-var_time_independent_potassium_current__E_K + var_chaste_interface__cell__V) * var_time_independent_potassium_current__g_K1 * var_time_independent_potassium_current_K1_gate__K1_infinity; // microA_per_microF + const double var_time_independent_potassium_current__i_K1_converted = HeartConfig::Instance()->GetCapacitance() * var_time_independent_potassium_current__i_K1; // uA_per_cm2 + const double var_transient_outward_current__rvdv = exp(0.01 * var_chaste_interface__cell__V); // dimensionless + const double var_transient_outward_current__i_to = pow(var_chaste_interface__transient_outward_current_zdv_gate__zdv, 3) * (-var_time_independent_potassium_current__E_K + var_chaste_interface__cell__V) * NV_Ith_S(mParameters, 16) * var_transient_outward_current__rvdv * var_chaste_interface__transient_outward_current_ydv_gate__ydv; // microA_per_microF + const double var_transient_outward_current__i_to_converted = HeartConfig::Instance()->GetCapacitance() * var_transient_outward_current__i_to; // uA_per_cm2 + +#if CHASTE_SUNDIALS_VERSION >= 60000 + N_Vector dqs = N_VNew_Serial(17, CvodeContextManager::Instance()->GetSundialsContext()); +#else + N_Vector dqs = N_VNew_Serial(17); +#endif + NV_Ith_S(dqs, 0) = var_calcium_dynamics__i_rel; + NV_Ith_S(dqs, 1) = var_L_type_Ca_channel__i_Ca_L_converted; + NV_Ith_S(dqs, 2) = var_L_type_Ca_channel_f_Ca_gate__f_Ca; + NV_Ith_S(dqs, 3) = var_L_type_Ca_channel_f_gate__tau_f; + NV_Ith_S(dqs, 4) = var_fast_sodium_current__i_Na_converted; + NV_Ith_S(dqs, 5) = var_fast_sodium_current_h_gate__tau_h; + NV_Ith_S(dqs, 6) = var_fast_sodium_current_j_gate__tau_j; + NV_Ith_S(dqs, 7) = var_time_independent_potassium_current__i_K1_converted; + NV_Ith_S(dqs, 8) = var_time_independent_potassium_current__g_K1; + NV_Ith_S(dqs, 9) = var_rapid_delayed_rectifier_potassium_current__i_Kr_converted; + NV_Ith_S(dqs, 10) = var_rapid_delayed_rectifier_potassium_current__g_Kr; + NV_Ith_S(dqs, 11) = var_slow_delayed_rectifier_potassium_current__i_Ks_converted; + NV_Ith_S(dqs, 12) = var_slow_delayed_rectifier_potassium_current__g_Ks; + NV_Ith_S(dqs, 13) = var_Na_Ca_exchanger__i_NaCa_converted; + NV_Ith_S(dqs, 14) = var_cell__I_st_converted; + NV_Ith_S(dqs, 15) = var_transient_outward_current__i_to_converted; + NV_Ith_S(dqs, 16) = var_chaste_interface__environment__time; + return dqs; + } + +template<> +void OdeSystemInformation::Initialise(void) +{ + this->mSystemName = "faber_rudy_2000"; + this->mFreeVariableName = "time"; + this->mFreeVariableUnits = "ms"; + + // NV_Ith_S(rY, 0): + this->mVariableNames.push_back("membrane_voltage"); + this->mVariableUnits.push_back("millivolt"); + this->mInitialConditions.push_back(-85.2119207874627); + + // NV_Ith_S(rY, 1): + this->mVariableNames.push_back("cytosolic_calcium_concentration"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(0.000117482029668194); + + // NV_Ith_S(rY, 2): + this->mVariableNames.push_back("membrane_fast_sodium_current_m_gate"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.00149183115674257); + + // NV_Ith_S(rY, 3): + this->mVariableNames.push_back("membrane_fast_sodium_current_h_gate"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.985596581239651); + + // NV_Ith_S(rY, 4): + this->mVariableNames.push_back("membrane_fast_sodium_current_j_gate"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.990898461370389); + + // NV_Ith_S(rY, 5): + this->mVariableNames.push_back("membrane_L_type_calcium_current_d_gate"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(5.82597094505446e-06); + + // NV_Ith_S(rY, 6): + this->mVariableNames.push_back("membrane_L_type_calcium_current_f_gate"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.997765362821995); + + // NV_Ith_S(rY, 7): + this->mVariableNames.push_back("T_type_Ca_channel_b_gate__b"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.00136737866785149); + + // NV_Ith_S(rY, 8): + this->mVariableNames.push_back("T_type_Ca_channel_g_gate__g"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.98881442877378); + + // NV_Ith_S(rY, 9): + this->mVariableNames.push_back("rapid_delayed_rectifier_potassium_current_xr_gate__xr"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.000204700363126417); + + // NV_Ith_S(rY, 10): + this->mVariableNames.push_back("slow_delayed_rectifier_potassium_current_xs1_gate__xs1"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.00660746743356887); + + // NV_Ith_S(rY, 11): + this->mVariableNames.push_back("slow_delayed_rectifier_potassium_current_xs2_gate__xs2"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.0303768241233812); + + // NV_Ith_S(rY, 12): + this->mVariableNames.push_back("transient_outward_current_zdv_gate__zdv"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.0144622472219576); + + // NV_Ith_S(rY, 13): + this->mVariableNames.push_back("transient_outward_current_ydv_gate__ydv"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.999945568566232); + + // NV_Ith_S(rY, 14): + this->mVariableNames.push_back("JSR_calcium_concentration"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(1.12791401197882); + + // NV_Ith_S(rY, 15): + this->mVariableNames.push_back("calcium_dynamics__Ca_NSR"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(1.76731003671612); + + // NV_Ith_S(rY, 16): + this->mVariableNames.push_back("calcium_dynamics__APtrack"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(9.65910542308504e-196); + + // NV_Ith_S(rY, 17): + this->mVariableNames.push_back("calcium_dynamics__APtrack2"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(5.33944967562997e-195); + + // NV_Ith_S(rY, 18): + this->mVariableNames.push_back("calcium_dynamics__APtrack3"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.000129515197402902); + + // NV_Ith_S(rY, 19): + this->mVariableNames.push_back("calcium_dynamics__Cainfluxtrack"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(2.69380318286645e-196); + + // NV_Ith_S(rY, 20): + this->mVariableNames.push_back("calcium_dynamics__OVRLDtrack"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.0); + + // NV_Ith_S(rY, 21): + this->mVariableNames.push_back("calcium_dynamics__OVRLDtrack2"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.0); + + // NV_Ith_S(rY, 22): + this->mVariableNames.push_back("calcium_dynamics__OVRLDtrack3"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.0); + + // NV_Ith_S(rY, 23): + this->mVariableNames.push_back("cytosolic_sodium_concentration"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(13.3649235394859); + + // NV_Ith_S(rY, 24): + this->mVariableNames.push_back("cytosolic_potassium_concentration"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(141.056872392446); + + // mParameters[0]: + this->mParameterNames.push_back("SR_leak_current_max"); + this->mParameterUnits.push_back("dimensionless"); + + // mParameters[1]: + this->mParameterNames.push_back("SR_release_current_max"); + this->mParameterUnits.push_back("per_ms"); + + // mParameters[2]: + this->mParameterNames.push_back("SR_release_kmcacyt"); + this->mParameterUnits.push_back("millimolar"); + + // mParameters[3]: + this->mParameterNames.push_back("SR_uptake_current_max"); + this->mParameterUnits.push_back("millimolar_per_ms"); + + // mParameters[4]: + this->mParameterNames.push_back("concentration_clamp_onoff"); + this->mParameterUnits.push_back("dimensionless"); + + // mParameters[5]: + this->mParameterNames.push_back("extracellular_calcium_concentration"); + this->mParameterUnits.push_back("millimolar"); + + // mParameters[6]: + this->mParameterNames.push_back("extracellular_potassium_concentration"); + this->mParameterUnits.push_back("millimolar"); + + // mParameters[7]: + this->mParameterNames.push_back("extracellular_sodium_concentration"); + this->mParameterUnits.push_back("millimolar"); + + // mParameters[8]: + this->mParameterNames.push_back("membrane_L_type_calcium_current_conductance"); + this->mParameterUnits.push_back("litre_per_farad_ms"); + + // mParameters[9]: + this->mParameterNames.push_back("membrane_fast_sodium_current_conductance"); + this->mParameterUnits.push_back("milliS_per_microF"); + + // mParameters[10]: + this->mParameterNames.push_back("membrane_fast_sodium_current_reduced_inactivation"); + this->mParameterUnits.push_back("dimensionless"); + + // mParameters[11]: + this->mParameterNames.push_back("membrane_fast_sodium_current_shift_inactivation"); + this->mParameterUnits.push_back("millivolt"); + + // mParameters[12]: + this->mParameterNames.push_back("membrane_inward_rectifier_potassium_current_conductance_scaling_factor"); + this->mParameterUnits.push_back("milliS_per_microF"); + + // mParameters[13]: + this->mParameterNames.push_back("membrane_rapid_delayed_rectifier_potassium_current_conductance_scaling_factor"); + this->mParameterUnits.push_back("milliS_per_microF"); + + // mParameters[14]: + this->mParameterNames.push_back("membrane_slow_delayed_rectifier_potassium_current_conductance_scaling_factor"); + this->mParameterUnits.push_back("milliS_per_microF"); + + // mParameters[15]: + this->mParameterNames.push_back("membrane_sodium_calcium_exchanger_current_conductance"); + this->mParameterUnits.push_back("microA_per_microF"); + + // mParameters[16]: + this->mParameterNames.push_back("membrane_transient_outward_current_conductance"); + this->mParameterUnits.push_back("milliS_per_microF"); + + // Derived Quantity index [0]: + this->mDerivedQuantityNames.push_back("SR_release_current"); + this->mDerivedQuantityUnits.push_back("millimolar_per_ms"); + + // Derived Quantity index [1]: + this->mDerivedQuantityNames.push_back("membrane_L_type_calcium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [2]: + this->mDerivedQuantityNames.push_back("membrane_L_type_calcium_current_fCa_gate"); + this->mDerivedQuantityUnits.push_back("dimensionless"); + + // Derived Quantity index [3]: + this->mDerivedQuantityNames.push_back("membrane_L_type_calcium_current_f_gate_tau"); + this->mDerivedQuantityUnits.push_back("ms"); + + // Derived Quantity index [4]: + this->mDerivedQuantityNames.push_back("membrane_fast_sodium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [5]: + this->mDerivedQuantityNames.push_back("membrane_fast_sodium_current_h_gate_tau"); + this->mDerivedQuantityUnits.push_back("ms"); + + // Derived Quantity index [6]: + this->mDerivedQuantityNames.push_back("membrane_fast_sodium_current_j_gate_tau"); + this->mDerivedQuantityUnits.push_back("ms"); + + // Derived Quantity index [7]: + this->mDerivedQuantityNames.push_back("membrane_inward_rectifier_potassium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [8]: + this->mDerivedQuantityNames.push_back("membrane_inward_rectifier_potassium_current_conductance"); + this->mDerivedQuantityUnits.push_back("milliS_per_microF"); + + // Derived Quantity index [9]: + this->mDerivedQuantityNames.push_back("membrane_rapid_delayed_rectifier_potassium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [10]: + this->mDerivedQuantityNames.push_back("membrane_rapid_delayed_rectifier_potassium_current_conductance"); + this->mDerivedQuantityUnits.push_back("milliS_per_microF"); + + // Derived Quantity index [11]: + this->mDerivedQuantityNames.push_back("membrane_slow_delayed_rectifier_potassium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [12]: + this->mDerivedQuantityNames.push_back("membrane_slow_delayed_rectifier_potassium_current_conductance"); + this->mDerivedQuantityUnits.push_back("milliS_per_microF"); + + // Derived Quantity index [13]: + this->mDerivedQuantityNames.push_back("membrane_sodium_calcium_exchanger_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [14]: + this->mDerivedQuantityNames.push_back("membrane_stimulus_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [15]: + this->mDerivedQuantityNames.push_back("membrane_transient_outward_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [16]: + this->mDerivedQuantityNames.push_back("time"); + this->mDerivedQuantityUnits.push_back("ms"); + + this->mInitialised = true; +} + +// Serialization for Boost >= 1.36 +#include "SerializationExportWrapperForCpp.hpp" +CHASTE_CLASS_EXPORT(Cellfaber_rudy_2000FromCellMLCvode) + +#endif // CHASTE_CVODE diff --git a/chaste_codegen/tests/numerical/baseline/Cvode/faber_rudy_2000.hpp b/chaste_codegen/tests/numerical/baseline/Cvode/faber_rudy_2000.hpp new file mode 100644 index 00000000..7b50be6c --- /dev/null +++ b/chaste_codegen/tests/numerical/baseline/Cvode/faber_rudy_2000.hpp @@ -0,0 +1,86 @@ +#ifdef CHASTE_CVODE +#ifndef CELLFABER_RUDY_2000FROMCELLMLCVODE_HPP_ +#define CELLFABER_RUDY_2000FROMCELLMLCVODE_HPP_ + +//! @file +//! +//! This source file was generated from CellML by chaste_codegen version (version omitted as unimportant) +//! +//! Model: faber_rudy_2000 +//! +//! Processed by chaste_codegen: https://github.com/ModellingWebLab/chaste-codegen +//! (translator: chaste_codegen, model type: NumericCvode) +//! on (date omitted as unimportant) +//! +//! + +#include "ChasteSerialization.hpp" +#include +#include "AbstractStimulusFunction.hpp" +#include "AbstractCvodeCell.hpp" + +class Cellfaber_rudy_2000FromCellMLCvode : public AbstractCvodeCell +{ + friend class boost::serialization::access; + template + void serialize(Archive & archive, const unsigned int version) + { + archive & boost::serialization::base_object(*this); + + } + + // + // Settable parameters and readable variables + // + + +private: +const bool is_concentration[25] = {false, true, false, false, false, false, false, false, false, false, false, false, false, false, true, false, false, false, false, false, false, false, false, true, true}; +const bool is_probability[25] = {false, false, true, true, true, true, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false}; +public: + + boost::shared_ptr UseCellMLDefaultStimulus(); + double GetIntracellularCalciumConcentration(); + Cellfaber_rudy_2000FromCellMLCvode(boost::shared_ptr pOdeSolver /* unused; should be empty */, boost::shared_ptr pIntracellularStimulus); + ~Cellfaber_rudy_2000FromCellMLCvode(); + void VerifyStateVariables(); + double GetIIonic(const std::vector* pStateVariables=NULL); + void EvaluateYDerivatives(double var_chaste_interface__environment__time, const N_Vector rY, N_Vector rDY); + N_Vector ComputeDerivedQuantities(double var_chaste_interface__environment__time, const N_Vector & rY); +}; + +// Needs to be included last +#include "SerializationExportWrapper.hpp" +CHASTE_CLASS_EXPORT(Cellfaber_rudy_2000FromCellMLCvode) + +namespace boost +{ + namespace serialization + { + template + inline void save_construct_data( + Archive & ar, const Cellfaber_rudy_2000FromCellMLCvode * t, const unsigned int fileVersion) + { + const boost::shared_ptr p_solver = t->GetSolver(); + const boost::shared_ptr p_stimulus = t->GetStimulusFunction(); + ar << p_solver; + ar << p_stimulus; + } + + template + inline void load_construct_data( + Archive & ar, Cellfaber_rudy_2000FromCellMLCvode * t, const unsigned int fileVersion) + { + boost::shared_ptr p_solver; + boost::shared_ptr p_stimulus; + ar >> p_solver; + ar >> p_stimulus; + ::new(t)Cellfaber_rudy_2000FromCellMLCvode(p_solver, p_stimulus); + } + + } + +} + +#endif // CELLFABER_RUDY_2000FROMCELLMLCVODE_HPP_ +#endif // CHASTE_CVODE \ No newline at end of file diff --git a/chaste_codegen/tests/numerical/baseline/Cvode/hodgkin_huxley_squid_axon_model_1952_modified.cpp b/chaste_codegen/tests/numerical/baseline/Cvode/hodgkin_huxley_squid_axon_model_1952_modified.cpp new file mode 100644 index 00000000..28dcdb82 --- /dev/null +++ b/chaste_codegen/tests/numerical/baseline/Cvode/hodgkin_huxley_squid_axon_model_1952_modified.cpp @@ -0,0 +1,314 @@ +#ifdef CHASTE_CVODE +//! @file +//! +//! This source file was generated from CellML by chaste_codegen version (version omitted as unimportant) +//! +//! Model: hodgkin_huxley_squid_axon_model_1952_modified +//! +//! Processed by chaste_codegen: https://github.com/ModellingWebLab/chaste-codegen +//! (translator: chaste_codegen, model type: NumericCvode) +//! on (date omitted as unimportant) +//! +//! + +#include "hodgkin_huxley_squid_axon_model_1952_modified.hpp" +#include +#include +#include +#include +#include "Exception.hpp" +#include "OdeSystemInformation.hpp" +#include "RegularStimulus.hpp" +#include "HeartConfig.hpp" +#include "IsNan.hpp" +#include "MathsCustomFunctions.hpp" + +#if CHASTE_SUNDIALS_VERSION >= 60000 +#include "CvodeContextManager.hpp" +#endif + + + + + + boost::shared_ptr Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLCvode::UseCellMLDefaultStimulus() + { + // Use the default stimulus specified by CellML metadata + const double var_chaste_interface__membrane__stim_amplitude = -20; // microA_per_cm2 + const double var_chaste_interface__membrane__stim_duration = 0.5; // millisecond + const double var_chaste_interface__membrane__stim_period = 1000; // millisecond + const double var_chaste_interface__membrane__stim_start = 10; // millisecond + boost::shared_ptr p_cellml_stim(new RegularStimulus( + -fabs(var_chaste_interface__membrane__stim_amplitude), + var_chaste_interface__membrane__stim_duration, + var_chaste_interface__membrane__stim_period, + var_chaste_interface__membrane__stim_start + )); + mpIntracellularStimulus = p_cellml_stim; + return p_cellml_stim; + } + + Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLCvode::Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLCvode(boost::shared_ptr pOdeSolver /* unused; should be empty */, boost::shared_ptr pIntracellularStimulus) + : AbstractCvodeCell( + pOdeSolver, + 4, + 0, + pIntracellularStimulus) + { + // Time units: millisecond + // + this->mpSystemInfo = OdeSystemInformation::Instance(); + Init(); + + // We have a default stimulus specified in the CellML file metadata + this->mHasDefaultStimulusFromCellML = true; + + NV_Ith_S(this->mParameters, 0) = 1; // (var_membrane__Cm) [microF_per_cm2] + NV_Ith_S(this->mParameters, 1) = 120; // (var_sodium_channel__g_Na) [milliS_per_cm2] + NV_Ith_S(this->mParameters, 2) = 0.29999999999999999; // (var_leakage_current__g_L) [milliS_per_cm2] + NV_Ith_S(this->mParameters, 3) = 36; // (var_potassium_channel__g_K) [milliS_per_cm2] + } + + Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLCvode::~Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLCvode() + { + } + + + void Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLCvode::VerifyStateVariables() + { + + const double tol = 100*this->mAbsTol; + N_Vector rY = rGetStateVariables(); + std::string error_message = ""; + + for (unsigned i=0; i < 4; i++) + { + if(std::isnan(NV_Ith_S(rY, i))){ + error_message += "State variable " + this->rGetStateVariableNames()[i] + " is not a number\n"; + } + if(std::isinf(NV_Ith_S(rY, i))){ + error_message += "State variable " + this->rGetStateVariableNames()[i] + " has become INFINITE\n"; + } + if(this->is_concentration[i] && NV_Ith_S(rY, i) < -tol) + { + error_message += "Concentration " + this->rGetStateVariableNames()[i] + " below 0\n"; + } + if(this->is_probability[i] && NV_Ith_S(rY, i) < -tol) + { + error_message += "Probability " + this->rGetStateVariableNames()[i] + " below 0\n"; + } + if(this->is_probability[i] && NV_Ith_S(rY, i) > 1 + tol) + { + error_message += "Probability " + this->rGetStateVariableNames()[i] + " above 1\n"; + } + } + if (error_message != ""){ + EXCEPTION(DumpState(error_message)); + } + } + + double Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLCvode::GetIIonic(const std::vector* pStateVariables) + { + // For state variable interpolation (SVI) we read in interpolated state variables, + // otherwise for ionic current interpolation (ICI) we use the state variables of this model (node). + N_Vector rY; + bool made_new_cvode_vector = false; + if (!pStateVariables) + { + rY = rGetStateVariables(); + } + else + { + made_new_cvode_vector = true; + rY = MakeNVector(*pStateVariables); + } + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : NV_Ith_S(rY, 0)); + // Units: millivolt; Initial value: -75.0 + double var_chaste_interface__sodium_channel_m_gate__m = NV_Ith_S(rY, 1); + // Units: dimensionless; Initial value: 0.05 + double var_chaste_interface__sodium_channel_h_gate__h = NV_Ith_S(rY, 2); + // Units: dimensionless; Initial value: 0.6 + double var_chaste_interface__potassium_channel_n_gate__n = NV_Ith_S(rY, 3); + // Units: dimensionless; Initial value: 0.325 + + const double var_membrane__E_R = -75; // millivolt + const double var_leakage_current__E_L = 10.613 + var_membrane__E_R; // millivolt + const double var_leakage_current__i_L = (-var_leakage_current__E_L + var_chaste_interface__membrane__V) * NV_Ith_S(mParameters, 2); // microA_per_cm2 + const double var_potassium_channel__E_K = -12 + var_membrane__E_R; // millivolt + const double var_potassium_channel__i_K = pow(var_chaste_interface__potassium_channel_n_gate__n, 4) * (-var_potassium_channel__E_K + var_chaste_interface__membrane__V) * NV_Ith_S(mParameters, 3); // microA_per_cm2 + const double var_sodium_channel__E_Na = 115 + var_membrane__E_R; // millivolt + const double var_sodium_channel__i_Na = pow(var_chaste_interface__sodium_channel_m_gate__m, 3) * (-var_sodium_channel__E_Na + var_chaste_interface__membrane__V) * NV_Ith_S(mParameters, 1) * var_chaste_interface__sodium_channel_h_gate__h; // microA_per_cm2 + const double var_chaste_interface__i_ionic = var_leakage_current__i_L + var_potassium_channel__i_K + var_sodium_channel__i_Na; // uA_per_cm2 + + const double i_ionic = var_chaste_interface__i_ionic; + if (made_new_cvode_vector) + { + DeleteVector(rY); + } + EXCEPT_IF_NOT(!std::isnan(i_ionic)); + return i_ionic; + } + + void Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLCvode::EvaluateYDerivatives(double var_chaste_interface__environment__time, const N_Vector rY, N_Vector rDY) + { + // Inputs: + // Time units: millisecond + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : NV_Ith_S(rY, 0)); + // Units: millivolt; Initial value: -75.0 + double var_chaste_interface__sodium_channel_m_gate__m = NV_Ith_S(rY, 1); + // Units: dimensionless; Initial value: 0.05 + double var_chaste_interface__sodium_channel_h_gate__h = NV_Ith_S(rY, 2); + // Units: dimensionless; Initial value: 0.6 + double var_chaste_interface__potassium_channel_n_gate__n = NV_Ith_S(rY, 3); + // Units: dimensionless; Initial value: 0.325 + + // Mathematics + double d_dt_chaste_interface_var_membrane__V; + const double var_potassium_channel_n_gate__B = -0.10000000000000001; // per_millivolt + const double var_potassium_channel_n_gate__A = -0.01 / var_potassium_channel_n_gate__B; // per_millisecond + const double var_potassium_channel_n_gate__beta_n = 0.125 * exp(0.9375 + 0.012500000000000001 * var_chaste_interface__membrane__V); // per_millisecond + const double var_potassium_channel_n_gate__v0 = -65; // millivolt + const double var_potassium_channel_n_gate__U = (-var_potassium_channel_n_gate__v0 + var_chaste_interface__membrane__V) * var_potassium_channel_n_gate__B; // dimensionless + const double var_potassium_channel_n_gate__alpha_n = (((var_potassium_channel_n_gate__U >= -9.9999999999999995e-8) && (var_potassium_channel_n_gate__U <= 9.9999999999999995e-8)) ? ((1 - 0.5 * var_potassium_channel_n_gate__U) * var_potassium_channel_n_gate__A) : (var_potassium_channel_n_gate__A * var_potassium_channel_n_gate__U / (-1 + exp(var_potassium_channel_n_gate__U)))); // per_millisecond + const double d_dt_chaste_interface_var_potassium_channel_n_gate__n = (1 - var_chaste_interface__potassium_channel_n_gate__n) * var_potassium_channel_n_gate__alpha_n - var_potassium_channel_n_gate__beta_n * var_chaste_interface__potassium_channel_n_gate__n; // 1 / millisecond + const double var_sodium_channel_h_gate__alpha_h = 0.070000000000000007 * exp(-3.75 - 0.050000000000000003 * var_chaste_interface__membrane__V); // per_millisecond + const double var_sodium_channel_h_gate__beta_h = 1 / (1 + exp(-4.5 - 0.10000000000000001 * var_chaste_interface__membrane__V)); // per_millisecond + const double d_dt_chaste_interface_var_sodium_channel_h_gate__h = (1 - var_chaste_interface__sodium_channel_h_gate__h) * var_sodium_channel_h_gate__alpha_h - var_sodium_channel_h_gate__beta_h * var_chaste_interface__sodium_channel_h_gate__h; // 1 / millisecond + const double var_sodium_channel_m_gate__B = -0.10000000000000001; // per_millivolt + const double var_sodium_channel_m_gate__A = -0.10000000000000001 / var_sodium_channel_m_gate__B; // per_millisecond + const double var_sodium_channel_m_gate__beta_m = 4 * exp(-4.166666666666667 - 0.055555555555555552 * var_chaste_interface__membrane__V); // per_millisecond + const double var_sodium_channel_m_gate__v0 = -50; // millivolt + const double var_sodium_channel_m_gate__U = (-var_sodium_channel_m_gate__v0 + var_chaste_interface__membrane__V) * var_sodium_channel_m_gate__B; // dimensionless + const double var_sodium_channel_m_gate__alpha_m = (((var_sodium_channel_m_gate__U >= -9.9999999999999995e-8) && (var_sodium_channel_m_gate__U <= 9.9999999999999995e-8)) ? ((1 - 0.5 * var_sodium_channel_m_gate__U) * var_sodium_channel_m_gate__A) : (var_sodium_channel_m_gate__A * var_sodium_channel_m_gate__U / (-1 + exp(var_sodium_channel_m_gate__U)))); // per_millisecond + const double d_dt_chaste_interface_var_sodium_channel_m_gate__m = (1 - var_chaste_interface__sodium_channel_m_gate__m) * var_sodium_channel_m_gate__alpha_m - var_sodium_channel_m_gate__beta_m * var_chaste_interface__sodium_channel_m_gate__m; // 1 / millisecond + + if (mSetVoltageDerivativeToZero) + { + d_dt_chaste_interface_var_membrane__V = 0.0; + } + else + { + const double var_membrane__E_R = -75; // millivolt + const double var_leakage_current__E_L = 10.613 + var_membrane__E_R; // millivolt + const double var_leakage_current__i_L = (-var_leakage_current__E_L + var_chaste_interface__membrane__V) * NV_Ith_S(mParameters, 2); // microA_per_cm2 + const double var_membrane__i_Stim = GetIntracellularAreaStimulus(var_chaste_interface__environment__time); // microA_per_cm2 + const double var_potassium_channel__E_K = -12 + var_membrane__E_R; // millivolt + const double var_potassium_channel__i_K = pow(var_chaste_interface__potassium_channel_n_gate__n, 4) * (-var_potassium_channel__E_K + var_chaste_interface__membrane__V) * NV_Ith_S(mParameters, 3); // microA_per_cm2 + const double var_sodium_channel__E_Na = 115 + var_membrane__E_R; // millivolt + const double var_sodium_channel__i_Na = pow(var_chaste_interface__sodium_channel_m_gate__m, 3) * (-var_sodium_channel__E_Na + var_chaste_interface__membrane__V) * NV_Ith_S(mParameters, 1) * var_chaste_interface__sodium_channel_h_gate__h; // microA_per_cm2 + d_dt_chaste_interface_var_membrane__V = (-var_leakage_current__i_L - var_membrane__i_Stim - var_potassium_channel__i_K - var_sodium_channel__i_Na) / NV_Ith_S(mParameters, 0); // millivolt / millisecond + } + + NV_Ith_S(rDY,0) = d_dt_chaste_interface_var_membrane__V; + NV_Ith_S(rDY,1) = d_dt_chaste_interface_var_sodium_channel_m_gate__m; + NV_Ith_S(rDY,2) = d_dt_chaste_interface_var_sodium_channel_h_gate__h; + NV_Ith_S(rDY,3) = d_dt_chaste_interface_var_potassium_channel_n_gate__n; + } + + N_Vector Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLCvode::ComputeDerivedQuantities(double var_chaste_interface__environment__time, const N_Vector & rY) + { + // Inputs: + // Time units: millisecond + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : NV_Ith_S(rY, 0)); + // Units: millivolt; Initial value: -75.0 + double var_chaste_interface__sodium_channel_m_gate__m = NV_Ith_S(rY, 1); + // Units: dimensionless; Initial value: 0.05 + double var_chaste_interface__sodium_channel_h_gate__h = NV_Ith_S(rY, 2); + // Units: dimensionless; Initial value: 0.6 + double var_chaste_interface__potassium_channel_n_gate__n = NV_Ith_S(rY, 3); + // Units: dimensionless; Initial value: 0.325 + + // Mathematics + const double var_membrane__E_R = -75; // millivolt + const double var_leakage_current__E_L = 10.613 + var_membrane__E_R; // millivolt + const double var_leakage_current__i_L = (-var_leakage_current__E_L + var_chaste_interface__membrane__V) * NV_Ith_S(mParameters, 2); // microA_per_cm2 + const double var_membrane__i_Stim = GetIntracellularAreaStimulus(var_chaste_interface__environment__time); // microA_per_cm2 + const double var_potassium_channel__E_K = -12 + var_membrane__E_R; // millivolt + const double var_potassium_channel__i_K = pow(var_chaste_interface__potassium_channel_n_gate__n, 4) * (-var_potassium_channel__E_K + var_chaste_interface__membrane__V) * NV_Ith_S(mParameters, 3); // microA_per_cm2 + const double var_sodium_channel__E_Na = 115 + var_membrane__E_R; // millivolt + const double var_sodium_channel__i_Na = pow(var_chaste_interface__sodium_channel_m_gate__m, 3) * (-var_sodium_channel__E_Na + var_chaste_interface__membrane__V) * NV_Ith_S(mParameters, 1) * var_chaste_interface__sodium_channel_h_gate__h; // microA_per_cm2 + +#if CHASTE_SUNDIALS_VERSION >= 60000 + N_Vector dqs = N_VNew_Serial(5, CvodeContextManager::Instance()->GetSundialsContext()); +#else + N_Vector dqs = N_VNew_Serial(5); +#endif + NV_Ith_S(dqs, 0) = var_sodium_channel__i_Na; + NV_Ith_S(dqs, 1) = var_leakage_current__i_L; + NV_Ith_S(dqs, 2) = var_potassium_channel__i_K; + NV_Ith_S(dqs, 3) = var_membrane__i_Stim; + NV_Ith_S(dqs, 4) = var_chaste_interface__environment__time; + return dqs; + } + +template<> +void OdeSystemInformation::Initialise(void) +{ + this->mSystemName = "hodgkin_huxley_squid_axon_model_1952_modified"; + this->mFreeVariableName = "time"; + this->mFreeVariableUnits = "millisecond"; + + // NV_Ith_S(rY, 0): + this->mVariableNames.push_back("membrane_voltage"); + this->mVariableUnits.push_back("millivolt"); + this->mInitialConditions.push_back(-75.0); + + // NV_Ith_S(rY, 1): + this->mVariableNames.push_back("sodium_channel_m_gate__m"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.05); + + // NV_Ith_S(rY, 2): + this->mVariableNames.push_back("sodium_channel_h_gate__h"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.6); + + // NV_Ith_S(rY, 3): + this->mVariableNames.push_back("potassium_channel_n_gate__n"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.325); + + // mParameters[0]: + this->mParameterNames.push_back("membrane_capacitance"); + this->mParameterUnits.push_back("microF_per_cm2"); + + // mParameters[1]: + this->mParameterNames.push_back("membrane_fast_sodium_current_conductance"); + this->mParameterUnits.push_back("milliS_per_cm2"); + + // mParameters[2]: + this->mParameterNames.push_back("membrane_leakage_current_conductance"); + this->mParameterUnits.push_back("milliS_per_cm2"); + + // mParameters[3]: + this->mParameterNames.push_back("membrane_potassium_current_conductance"); + this->mParameterUnits.push_back("milliS_per_cm2"); + + // Derived Quantity index [0]: + this->mDerivedQuantityNames.push_back("membrane_fast_sodium_current"); + this->mDerivedQuantityUnits.push_back("microA_per_cm2"); + + // Derived Quantity index [1]: + this->mDerivedQuantityNames.push_back("membrane_leakage_current"); + this->mDerivedQuantityUnits.push_back("microA_per_cm2"); + + // Derived Quantity index [2]: + this->mDerivedQuantityNames.push_back("membrane_potassium_current"); + this->mDerivedQuantityUnits.push_back("microA_per_cm2"); + + // Derived Quantity index [3]: + this->mDerivedQuantityNames.push_back("membrane_stimulus_current"); + this->mDerivedQuantityUnits.push_back("microA_per_cm2"); + + // Derived Quantity index [4]: + this->mDerivedQuantityNames.push_back("time"); + this->mDerivedQuantityUnits.push_back("millisecond"); + + this->mInitialised = true; +} + +// Serialization for Boost >= 1.36 +#include "SerializationExportWrapperForCpp.hpp" +CHASTE_CLASS_EXPORT(Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLCvode) + +#endif // CHASTE_CVODE diff --git a/chaste_codegen/tests/numerical/baseline/Cvode/hodgkin_huxley_squid_axon_model_1952_modified.hpp b/chaste_codegen/tests/numerical/baseline/Cvode/hodgkin_huxley_squid_axon_model_1952_modified.hpp new file mode 100644 index 00000000..38130b5e --- /dev/null +++ b/chaste_codegen/tests/numerical/baseline/Cvode/hodgkin_huxley_squid_axon_model_1952_modified.hpp @@ -0,0 +1,85 @@ +#ifdef CHASTE_CVODE +#ifndef CELLHODGKIN_HUXLEY_SQUID_AXON_MODEL_1952_MODIFIEDFROMCELLMLCVODE_HPP_ +#define CELLHODGKIN_HUXLEY_SQUID_AXON_MODEL_1952_MODIFIEDFROMCELLMLCVODE_HPP_ + +//! @file +//! +//! This source file was generated from CellML by chaste_codegen version (version omitted as unimportant) +//! +//! Model: hodgkin_huxley_squid_axon_model_1952_modified +//! +//! Processed by chaste_codegen: https://github.com/ModellingWebLab/chaste-codegen +//! (translator: chaste_codegen, model type: NumericCvode) +//! on (date omitted as unimportant) +//! +//! + +#include "ChasteSerialization.hpp" +#include +#include "AbstractStimulusFunction.hpp" +#include "AbstractCvodeCell.hpp" + +class Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLCvode : public AbstractCvodeCell +{ + friend class boost::serialization::access; + template + void serialize(Archive & archive, const unsigned int version) + { + archive & boost::serialization::base_object(*this); + + } + + // + // Settable parameters and readable variables + // + + +private: +const bool is_concentration[4] = {false, false, false, false}; +const bool is_probability[4] = {false, false, false, false}; +public: + + boost::shared_ptr UseCellMLDefaultStimulus(); + Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLCvode(boost::shared_ptr pOdeSolver /* unused; should be empty */, boost::shared_ptr pIntracellularStimulus); + ~Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLCvode(); + void VerifyStateVariables(); + double GetIIonic(const std::vector* pStateVariables=NULL); + void EvaluateYDerivatives(double var_chaste_interface__environment__time, const N_Vector rY, N_Vector rDY); + N_Vector ComputeDerivedQuantities(double var_chaste_interface__environment__time, const N_Vector & rY); +}; + +// Needs to be included last +#include "SerializationExportWrapper.hpp" +CHASTE_CLASS_EXPORT(Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLCvode) + +namespace boost +{ + namespace serialization + { + template + inline void save_construct_data( + Archive & ar, const Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLCvode * t, const unsigned int fileVersion) + { + const boost::shared_ptr p_solver = t->GetSolver(); + const boost::shared_ptr p_stimulus = t->GetStimulusFunction(); + ar << p_solver; + ar << p_stimulus; + } + + template + inline void load_construct_data( + Archive & ar, Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLCvode * t, const unsigned int fileVersion) + { + boost::shared_ptr p_solver; + boost::shared_ptr p_stimulus; + ar >> p_solver; + ar >> p_stimulus; + ::new(t)Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLCvode(p_solver, p_stimulus); + } + + } + +} + +#endif // CELLHODGKIN_HUXLEY_SQUID_AXON_MODEL_1952_MODIFIEDFROMCELLMLCVODE_HPP_ +#endif // CHASTE_CVODE \ No newline at end of file diff --git a/chaste_codegen/tests/numerical/baseline/Cvode/paci_hyttinen_aaltosetala_severi_ventricularVersion.cpp b/chaste_codegen/tests/numerical/baseline/Cvode/paci_hyttinen_aaltosetala_severi_ventricularVersion.cpp new file mode 100644 index 00000000..fc4f4a6f --- /dev/null +++ b/chaste_codegen/tests/numerical/baseline/Cvode/paci_hyttinen_aaltosetala_severi_ventricularVersion.cpp @@ -0,0 +1,833 @@ +#ifdef CHASTE_CVODE +//! @file +//! +//! This source file was generated from CellML by chaste_codegen version (version omitted as unimportant) +//! +//! Model: paci_hyttinen_aaltosetala_severi_ventricularVersion +//! +//! Processed by chaste_codegen: https://github.com/ModellingWebLab/chaste-codegen +//! (translator: chaste_codegen, model type: NumericCvode) +//! on (date omitted as unimportant) +//! +//! + +#include "paci_hyttinen_aaltosetala_severi_ventricularVersion.hpp" +#include +#include +#include +#include +#include "Exception.hpp" +#include "OdeSystemInformation.hpp" +#include "RegularStimulus.hpp" +#include "HeartConfig.hpp" +#include "IsNan.hpp" +#include "MathsCustomFunctions.hpp" + +#if CHASTE_SUNDIALS_VERSION >= 60000 +#include "CvodeContextManager.hpp" +#endif + + + + + + boost::shared_ptr Cellpaci_hyttinen_aaltosetala_severi_ventricularVersionFromCellMLCvode::UseCellMLDefaultStimulus() + { + // Use the default stimulus specified by CellML metadata + const double var_chaste_interface__stim_mode__i_stim_Amplitude_converted = 5.5718264182641404 * HeartConfig::Instance()->GetCapacitance(); // uA_per_cm2 + const double var_chaste_interface__stim_mode__i_stim_Period_converted = 1000; // millisecond + const double var_chaste_interface__stim_mode__i_stim_PulseDuration_converted = 5; // millisecond + const double var_chaste_interface__stim_mode__i_stim_Start_converted = 0; // millisecond + boost::shared_ptr p_cellml_stim(new RegularStimulus( + -fabs(var_chaste_interface__stim_mode__i_stim_Amplitude_converted), + var_chaste_interface__stim_mode__i_stim_PulseDuration_converted, + var_chaste_interface__stim_mode__i_stim_Period_converted, + var_chaste_interface__stim_mode__i_stim_Start_converted + )); + mpIntracellularStimulus = p_cellml_stim; + return p_cellml_stim; + } + + double Cellpaci_hyttinen_aaltosetala_severi_ventricularVersionFromCellMLCvode::GetIntracellularCalciumConcentration() + { + return NV_Ith_S(mStateVariables, 1); + } + + Cellpaci_hyttinen_aaltosetala_severi_ventricularVersionFromCellMLCvode::Cellpaci_hyttinen_aaltosetala_severi_ventricularVersionFromCellMLCvode(boost::shared_ptr pOdeSolver /* unused; should be empty */, boost::shared_ptr pIntracellularStimulus) + : AbstractCvodeCell( + pOdeSolver, + 18, + 0, + pIntracellularStimulus) + { + // Time units: millisecond + // + this->mpSystemInfo = OdeSystemInformation::Instance(); + Init(); + + // We have a default stimulus specified in the CellML file metadata + this->mHasDefaultStimulusFromCellML = true; + + NV_Ith_S(this->mParameters, 0) = 150; // (var_model_parameters__Ki) [millimolar] + NV_Ith_S(this->mParameters, 1) = 1.8; // (var_model_parameters__Cao) [millimolar] + NV_Ith_S(this->mParameters, 2) = 5.4000000000000004; // (var_model_parameters__Ko) [millimolar] + NV_Ith_S(this->mParameters, 3) = 151; // (var_model_parameters__Nao) [millimolar] + NV_Ith_S(this->mParameters, 4) = 8.6357020000000001e-5; // (var_i_CaL__g_CaL) [metre_cube_per_F_per_s] + NV_Ith_S(this->mParameters, 5) = 3671.2302; // (var_i_Na__g_Na) [S_per_F] + NV_Ith_S(this->mParameters, 6) = 30.103120000000001; // (var_i_f__g_f) [S_per_F] + NV_Ith_S(this->mParameters, 7) = 28.1492; // (var_i_K1__g_K1) [S_per_F] + NV_Ith_S(this->mParameters, 8) = 29.866700000000002; // (var_i_Kr__g_Kr) [S_per_F] + NV_Ith_S(this->mParameters, 9) = 2.0409999999999999; // (var_i_Ks__g_Ks) [S_per_F] + NV_Ith_S(this->mParameters, 10) = 29.9038; // (var_i_to__g_to) [S_per_F] + NV_Ith_S(this->mParameters, 11) = 9.8710900000000003e-11; // (var_model_parameters__Cm) [farad] + NV_Ith_S(this->mParameters, 12) = 310; // (var_model_parameters__T) [kelvin] + } + + Cellpaci_hyttinen_aaltosetala_severi_ventricularVersionFromCellMLCvode::~Cellpaci_hyttinen_aaltosetala_severi_ventricularVersionFromCellMLCvode() + { + } + + + void Cellpaci_hyttinen_aaltosetala_severi_ventricularVersionFromCellMLCvode::VerifyStateVariables() + { + + const double tol = 100*this->mAbsTol; + N_Vector rY = rGetStateVariables(); + std::string error_message = ""; + + for (unsigned i=0; i < 18; i++) + { + if(std::isnan(NV_Ith_S(rY, i))){ + error_message += "State variable " + this->rGetStateVariableNames()[i] + " is not a number\n"; + } + if(std::isinf(NV_Ith_S(rY, i))){ + error_message += "State variable " + this->rGetStateVariableNames()[i] + " has become INFINITE\n"; + } + if(this->is_concentration[i] && NV_Ith_S(rY, i) < -tol) + { + error_message += "Concentration " + this->rGetStateVariableNames()[i] + " below 0\n"; + } + if(this->is_probability[i] && NV_Ith_S(rY, i) < -tol) + { + error_message += "Probability " + this->rGetStateVariableNames()[i] + " below 0\n"; + } + if(this->is_probability[i] && NV_Ith_S(rY, i) > 1 + tol) + { + error_message += "Probability " + this->rGetStateVariableNames()[i] + " above 1\n"; + } + } + if (error_message != ""){ + EXCEPTION(DumpState(error_message)); + } + } + + double Cellpaci_hyttinen_aaltosetala_severi_ventricularVersionFromCellMLCvode::GetIIonic(const std::vector* pStateVariables) + { + // For state variable interpolation (SVI) we read in interpolated state variables, + // otherwise for ionic current interpolation (ICI) we use the state variables of this model (node). + N_Vector rY; + bool made_new_cvode_vector = false; + if (!pStateVariables) + { + rY = rGetStateVariables(); + } + else + { + made_new_cvode_vector = true; + rY = MakeNVector(*pStateVariables); + } + double var_chaste_interface__Membrane__Vm_converted = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : NV_Ith_S(rY, 0)); + // Units: millivolt; Initial value: -74.3340057623841 + double var_chaste_interface__calcium_dynamics__Cai = NV_Ith_S(rY, 1); + // Units: millimolar; Initial value: 1.80773974140477e-05 + double var_chaste_interface__i_Na_m_gate__m = NV_Ith_S(rY, 2); + // Units: dimensionless; Initial value: 0.102953468725004 + double var_chaste_interface__i_Na_h_gate__h = NV_Ith_S(rY, 3); + // Units: dimensionless; Initial value: 0.786926637881461 + double var_chaste_interface__i_Na_j_gate__j = NV_Ith_S(rY, 4); + // Units: dimensionless; Initial value: 0.253943221774722 + double var_chaste_interface__i_CaL_d_gate__d = NV_Ith_S(rY, 5); + // Units: dimensionless; Initial value: 8.96088425225182e-05 + double var_chaste_interface__i_CaL_f1_gate__f1 = NV_Ith_S(rY, 6); + // Units: dimensionless; Initial value: 0.970411811263976 + double var_chaste_interface__i_CaL_f2_gate__f2 = NV_Ith_S(rY, 7); + // Units: dimensionless; Initial value: 0.999965815466749 + double var_chaste_interface__i_CaL_fCa_gate__fCa = NV_Ith_S(rY, 8); + // Units: dimensionless; Initial value: 0.998925296531804 + double var_chaste_interface__i_Kr_Xr1_gate__Xr1 = NV_Ith_S(rY, 9); + // Units: dimensionless; Initial value: 0.00778547011240132 + double var_chaste_interface__i_Kr_Xr2_gate__Xr2 = NV_Ith_S(rY, 10); + // Units: dimensionless; Initial value: 0.432162576531617 + double var_chaste_interface__i_Ks_Xs_gate__Xs = NV_Ith_S(rY, 11); + // Units: dimensionless; Initial value: 0.0322944866983666 + double var_chaste_interface__i_f_Xf_gate__Xf = NV_Ith_S(rY, 12); + // Units: dimensionless; Initial value: 0.100615100568753 + double var_chaste_interface__i_to_q_gate__q = NV_Ith_S(rY, 13); + // Units: dimensionless; Initial value: 0.839295925773219 + double var_chaste_interface__i_to_r_gate__r = NV_Ith_S(rY, 14); + // Units: dimensionless; Initial value: 0.00573289893326379 + double var_chaste_interface__sodium_dynamics__Nai = NV_Ith_S(rY, 15); + // Units: millimolar; Initial value: 10.9248496211574 + + const double var_Membrane__Vm = 0.001 * var_chaste_interface__Membrane__Vm_converted; // volt + const double var_current_blockers__Chromanol_iKs30 = 0; // dimensionless + const double var_current_blockers__Chromanol_iKs50 = 0; // dimensionless + const double var_current_blockers__Chromanol_iKs70 = 0; // dimensionless + const double var_current_blockers__Chromanol_iKs90 = 0; // dimensionless + const double var_current_blockers__E4031_100nM = 0; // dimensionless + const double var_current_blockers__E4031_30nM = 0; // dimensionless + const double var_current_blockers__TTX_10uM = 0; // dimensionless + const double var_current_blockers__TTX_30uM = 0; // dimensionless + const double var_current_blockers__TTX_3uM = 0; // dimensionless + const double var_electric_potentials__PkNa = 0.029999999999999999; // dimensionless + const double var_i_Kr__E4031_coeff = ((var_current_blockers__E4031_30nM == 1) ? (0.77000000000000002) : ((var_current_blockers__E4031_100nM == 1) ? (0.5) : (1))); // dimensionless + const double var_i_Ks__Chromanol_coeff = ((var_current_blockers__Chromanol_iKs30 == 1) ? (0.69999999999999996) : ((var_current_blockers__Chromanol_iKs50 == 1) ? (0.5) : ((var_current_blockers__Chromanol_iKs70 == 1) ? (0.29999999999999999) : ((var_current_blockers__Chromanol_iKs90 == 1) ? (0.10000000000000001) : (1))))); // dimensionless + const double var_i_Ks__g_Ks_total = (1 + 0.59999999999999998 / (1 + 6.4818210260626455e-7 * pow((1 / var_chaste_interface__calcium_dynamics__Cai), 1.3999999999999999))) * NV_Ith_S(mParameters, 9); // S_per_F + const double var_i_Na__TTX_coeff = ((var_current_blockers__TTX_3uM == 1) ? (0.17999999999999999) : ((var_current_blockers__TTX_10uM == 1) ? (0.059999999999999998) : ((var_current_blockers__TTX_30uM == 1) ? (0.02) : (1)))); // dimensionless + const double var_i_NaCa__KmCa = 1.3799999999999999; // millimolar + const double var_i_NaCa__KmNai = 87.5; // millimolar + const double var_i_NaCa__Ksat = 0.10000000000000001; // dimensionless + const double var_i_NaCa__alpha = 2.8571431999999999; // dimensionless + const double var_i_NaCa__gamma = 0.34999999999999998; // dimensionless + const double var_i_NaCa__kNaCa = 4900; // A_per_F + const double var_i_NaK__Km_K = 1; // millimolar + const double var_i_NaK__Km_Na = 40; // millimolar + const double var_i_NaK__PNaK = 1.8414239999999999; // A_per_F + const double var_i_PCa__KPCa = 0.00050000000000000001; // millimolar + const double var_i_PCa__g_PCa = 0.41249999999999998; // A_per_F + const double var_i_PCa__i_PCa = var_chaste_interface__calcium_dynamics__Cai * var_i_PCa__g_PCa / (var_chaste_interface__calcium_dynamics__Cai + var_i_PCa__KPCa); // A_per_F + const double var_i_PCa__i_PCa_converted = HeartConfig::Instance()->GetCapacitance() * var_i_PCa__i_PCa; // uA_per_cm2 + const double var_i_b_Ca__g_b_Ca = 0.69264000000000003; // S_per_F + const double var_i_b_Na__g_b_Na = 0.90000000000000002; // S_per_F + const double var_i_f__E_f = -0.017000000000000001; // volt + const double var_i_f__i_f = (-var_i_f__E_f + var_Membrane__Vm) * NV_Ith_S(mParameters, 6) * var_chaste_interface__i_f_Xf_gate__Xf; // A_per_F + const double var_i_f__i_f_converted = HeartConfig::Instance()->GetCapacitance() * var_i_f__i_f; // uA_per_cm2 + const double var_model_parameters__F = 96485.341499999995; // coulomb_per_mole + const double var_i_K1__g_K1_total = 0.43033148291193518 * sqrt(NV_Ith_S(mParameters, 2)) * NV_Ith_S(mParameters, 7); // S_per_F + const double var_i_Kr__g_Kr_total = 0.43033148291193518 * sqrt(NV_Ith_S(mParameters, 2)) * NV_Ith_S(mParameters, 8); // S_per_F + const double var_model_parameters__R = 8.3144720000000003; // joule_per_mole_kelvin + const double var_electric_potentials__E_Ca = 0.5 * var_model_parameters__R * NV_Ith_S(mParameters, 12) * log(NV_Ith_S(mParameters, 1) / var_chaste_interface__calcium_dynamics__Cai) / var_model_parameters__F; // volt + const double var_electric_potentials__E_K = var_model_parameters__R * NV_Ith_S(mParameters, 12) * log(NV_Ith_S(mParameters, 2) / NV_Ith_S(mParameters, 0)) / var_model_parameters__F; // volt + const double var_i_CaL__i_CaL = ((((var_Membrane__Vm >= -4.3086710741444596e-12 * NV_Ith_S(mParameters, 12)) && (var_Membrane__Vm <= 4.3086710741444596e-12 * NV_Ith_S(mParameters, 12))) || ((var_Membrane__Vm >= 4.3086710741444596e-12 * NV_Ith_S(mParameters, 12)) && (var_Membrane__Vm <= -4.3086710741444596e-12 * NV_Ith_S(mParameters, 12)))) ? (-116045061550.51096 * (-4.3086710741444596e-12 * NV_Ith_S(mParameters, 12) + var_Membrane__Vm) * (-0.019297068299999998 * (-0.34100000000000003 * NV_Ith_S(mParameters, 1) + var_chaste_interface__calcium_dynamics__Cai * exp(9.9999999999999995e-8)) * NV_Ith_S(mParameters, 4) * var_chaste_interface__i_CaL_d_gate__d * var_chaste_interface__i_CaL_f1_gate__f1 * var_chaste_interface__i_CaL_f2_gate__f2 * var_chaste_interface__i_CaL_fCa_gate__fCa / (-1 + exp(9.9999999999999995e-8)) - 0.019297068299999998 * (-0.34100000000000003 * NV_Ith_S(mParameters, 1) + var_chaste_interface__calcium_dynamics__Cai * exp(-9.9999999999999995e-8)) * NV_Ith_S(mParameters, 4) * var_chaste_interface__i_CaL_d_gate__d * var_chaste_interface__i_CaL_f1_gate__f1 * var_chaste_interface__i_CaL_f2_gate__f2 * var_chaste_interface__i_CaL_fCa_gate__fCa / (-1 + exp(-9.9999999999999995e-8))) / NV_Ith_S(mParameters, 12) + 0.019297068299999998 * (-0.34100000000000003 * NV_Ith_S(mParameters, 1) + var_chaste_interface__calcium_dynamics__Cai * exp(9.9999999999999995e-8)) * NV_Ith_S(mParameters, 4) * var_chaste_interface__i_CaL_d_gate__d * var_chaste_interface__i_CaL_f1_gate__f1 * var_chaste_interface__i_CaL_f2_gate__f2 * var_chaste_interface__i_CaL_fCa_gate__fCa / (-1 + exp(9.9999999999999995e-8))) : (4478658957.2358274 * (-0.34100000000000003 * NV_Ith_S(mParameters, 1) + var_chaste_interface__calcium_dynamics__Cai * exp(23209.012310102189 * var_Membrane__Vm / NV_Ith_S(mParameters, 12))) * var_Membrane__Vm * NV_Ith_S(mParameters, 4) * var_chaste_interface__i_CaL_d_gate__d * var_chaste_interface__i_CaL_f1_gate__f1 * var_chaste_interface__i_CaL_f2_gate__f2 * var_chaste_interface__i_CaL_fCa_gate__fCa / ((-1 + exp(23209.012310102189 * var_Membrane__Vm / NV_Ith_S(mParameters, 12))) * NV_Ith_S(mParameters, 12)))); // A_per_F + const double var_i_CaL__i_CaL_converted = HeartConfig::Instance()->GetCapacitance() * var_i_CaL__i_CaL; // uA_per_cm2 + const double var_i_K1__alpha_K1 = 3.9100000000000001 / (1 + exp(-118.83999999999999 + 594.19999999999993 * var_Membrane__Vm - 594.19999999999993 * var_electric_potentials__E_K)); // dimensionless + const double var_i_K1__beta_K1 = (-1.5089999999999999 * exp(0.02 + 0.20000000000000001 * var_Membrane__Vm - 0.20000000000000001 * var_electric_potentials__E_K) + exp(-5.8860000000000001 + 588.60000000000002 * var_Membrane__Vm - 588.60000000000002 * var_electric_potentials__E_K)) / (1 + exp(454.69999999999999 * var_Membrane__Vm - 454.69999999999999 * var_electric_potentials__E_K)); // dimensionless + const double var_i_K1__XK1_inf = var_i_K1__alpha_K1 / (var_i_K1__alpha_K1 + var_i_K1__beta_K1); // dimensionless + const double var_i_K1__i_K1 = (-var_electric_potentials__E_K + var_Membrane__Vm) * var_i_K1__XK1_inf * var_i_K1__g_K1_total; // A_per_F + const double var_i_K1__i_K1_converted = HeartConfig::Instance()->GetCapacitance() * var_i_K1__i_K1; // uA_per_cm2 + const double var_i_Kr__i_Kr = (-var_electric_potentials__E_K + var_Membrane__Vm) * var_i_Kr__E4031_coeff * var_i_Kr__g_Kr_total * var_chaste_interface__i_Kr_Xr1_gate__Xr1 * var_chaste_interface__i_Kr_Xr2_gate__Xr2; // A_per_F + const double var_i_Kr__i_Kr_converted = HeartConfig::Instance()->GetCapacitance() * var_i_Kr__i_Kr; // uA_per_cm2 + const double var_i_b_Ca__i_b_Ca = (-var_electric_potentials__E_Ca + var_Membrane__Vm) * var_i_b_Ca__g_b_Ca; // A_per_F + const double var_i_to__i_to = (-var_electric_potentials__E_K + var_Membrane__Vm) * NV_Ith_S(mParameters, 10) * var_chaste_interface__i_to_q_gate__q * var_chaste_interface__i_to_r_gate__r; // A_per_F + const double var_i_to__i_to_converted = HeartConfig::Instance()->GetCapacitance() * var_i_to__i_to; // uA_per_cm2 + const double var_electric_potentials__E_Ks = var_model_parameters__R * NV_Ith_S(mParameters, 12) * log((var_electric_potentials__PkNa * NV_Ith_S(mParameters, 3) + NV_Ith_S(mParameters, 2)) / (var_electric_potentials__PkNa * var_chaste_interface__sodium_dynamics__Nai + NV_Ith_S(mParameters, 0))) / var_model_parameters__F; // volt + const double var_electric_potentials__E_Na = var_model_parameters__R * NV_Ith_S(mParameters, 12) * log(NV_Ith_S(mParameters, 3) / var_chaste_interface__sodium_dynamics__Nai) / var_model_parameters__F; // volt + const double var_i_Ks__i_Ks = pow(var_chaste_interface__i_Ks_Xs_gate__Xs, 2) * (-var_electric_potentials__E_Ks + var_Membrane__Vm) * var_i_Ks__Chromanol_coeff * var_i_Ks__g_Ks_total; // A_per_F + const double var_i_Ks__i_Ks_converted = HeartConfig::Instance()->GetCapacitance() * var_i_Ks__i_Ks; // uA_per_cm2 + const double var_i_Na__i_Na = pow(var_chaste_interface__i_Na_m_gate__m, 3) * (-var_electric_potentials__E_Na + var_Membrane__Vm) * var_i_Na__TTX_coeff * NV_Ith_S(mParameters, 5) * var_chaste_interface__i_Na_h_gate__h * var_chaste_interface__i_Na_j_gate__j; // A_per_F + const double var_i_Na__i_Na_converted = HeartConfig::Instance()->GetCapacitance() * var_i_Na__i_Na; // uA_per_cm2 + const double var_i_NaCa__i_NaCa = (pow(var_chaste_interface__sodium_dynamics__Nai, 3) * NV_Ith_S(mParameters, 1) * exp(var_Membrane__Vm * var_i_NaCa__gamma * var_model_parameters__F / (var_model_parameters__R * NV_Ith_S(mParameters, 12))) - pow(NV_Ith_S(mParameters, 3), 3) * var_chaste_interface__calcium_dynamics__Cai * var_i_NaCa__alpha * exp((-1 + var_i_NaCa__gamma) * var_Membrane__Vm * var_model_parameters__F / (var_model_parameters__R * NV_Ith_S(mParameters, 12)))) * var_i_NaCa__kNaCa / ((1 + var_i_NaCa__Ksat * exp((-1 + var_i_NaCa__gamma) * var_Membrane__Vm * var_model_parameters__F / (var_model_parameters__R * NV_Ith_S(mParameters, 12)))) * (pow(var_i_NaCa__KmNai, 3) + pow(NV_Ith_S(mParameters, 3), 3)) * (var_i_NaCa__KmCa + NV_Ith_S(mParameters, 1))); // A_per_F + const double var_i_NaCa__i_NaCa_converted = HeartConfig::Instance()->GetCapacitance() * var_i_NaCa__i_NaCa; // uA_per_cm2 + const double var_i_NaK__i_NaK = var_i_NaK__PNaK * NV_Ith_S(mParameters, 2) * var_chaste_interface__sodium_dynamics__Nai / ((var_i_NaK__Km_K + NV_Ith_S(mParameters, 2)) * (var_i_NaK__Km_Na + var_chaste_interface__sodium_dynamics__Nai) * (1 + 0.035299999999999998 * exp(-var_Membrane__Vm * var_model_parameters__F / (var_model_parameters__R * NV_Ith_S(mParameters, 12))) + 0.1245 * exp(-0.10000000000000001 * var_Membrane__Vm * var_model_parameters__F / (var_model_parameters__R * NV_Ith_S(mParameters, 12))))); // A_per_F + const double var_i_NaK__i_NaK_converted = HeartConfig::Instance()->GetCapacitance() * var_i_NaK__i_NaK; // uA_per_cm2 + const double var_i_b_Na__i_b_Na = (-var_electric_potentials__E_Na + var_Membrane__Vm) * var_i_b_Na__g_b_Na; // A_per_F + const double var_chaste_interface__i_ionic = HeartConfig::Instance()->GetCapacitance() * var_i_b_Ca__i_b_Ca + HeartConfig::Instance()->GetCapacitance() * var_i_b_Na__i_b_Na + var_i_CaL__i_CaL_converted + var_i_K1__i_K1_converted + var_i_Kr__i_Kr_converted + var_i_Ks__i_Ks_converted + var_i_Na__i_Na_converted + var_i_NaCa__i_NaCa_converted + var_i_NaK__i_NaK_converted + var_i_PCa__i_PCa_converted + var_i_f__i_f_converted + var_i_to__i_to_converted; // uA_per_cm2 + + const double i_ionic = var_chaste_interface__i_ionic; + if (made_new_cvode_vector) + { + DeleteVector(rY); + } + EXCEPT_IF_NOT(!std::isnan(i_ionic)); + return i_ionic; + } + + void Cellpaci_hyttinen_aaltosetala_severi_ventricularVersionFromCellMLCvode::EvaluateYDerivatives(double var_chaste_interface__environment__time_converted, const N_Vector rY, N_Vector rDY) + { + // Inputs: + // Time units: millisecond + double var_chaste_interface__Membrane__Vm_converted = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : NV_Ith_S(rY, 0)); + // Units: millivolt; Initial value: -74.3340057623841 + double var_chaste_interface__calcium_dynamics__Cai = NV_Ith_S(rY, 1); + // Units: millimolar; Initial value: 1.80773974140477e-05 + double var_chaste_interface__i_Na_m_gate__m = NV_Ith_S(rY, 2); + // Units: dimensionless; Initial value: 0.102953468725004 + double var_chaste_interface__i_Na_h_gate__h = NV_Ith_S(rY, 3); + // Units: dimensionless; Initial value: 0.786926637881461 + double var_chaste_interface__i_Na_j_gate__j = NV_Ith_S(rY, 4); + // Units: dimensionless; Initial value: 0.253943221774722 + double var_chaste_interface__i_CaL_d_gate__d = NV_Ith_S(rY, 5); + // Units: dimensionless; Initial value: 8.96088425225182e-05 + double var_chaste_interface__i_CaL_f1_gate__f1 = NV_Ith_S(rY, 6); + // Units: dimensionless; Initial value: 0.970411811263976 + double var_chaste_interface__i_CaL_f2_gate__f2 = NV_Ith_S(rY, 7); + // Units: dimensionless; Initial value: 0.999965815466749 + double var_chaste_interface__i_CaL_fCa_gate__fCa = NV_Ith_S(rY, 8); + // Units: dimensionless; Initial value: 0.998925296531804 + double var_chaste_interface__i_Kr_Xr1_gate__Xr1 = NV_Ith_S(rY, 9); + // Units: dimensionless; Initial value: 0.00778547011240132 + double var_chaste_interface__i_Kr_Xr2_gate__Xr2 = NV_Ith_S(rY, 10); + // Units: dimensionless; Initial value: 0.432162576531617 + double var_chaste_interface__i_Ks_Xs_gate__Xs = NV_Ith_S(rY, 11); + // Units: dimensionless; Initial value: 0.0322944866983666 + double var_chaste_interface__i_f_Xf_gate__Xf = NV_Ith_S(rY, 12); + // Units: dimensionless; Initial value: 0.100615100568753 + double var_chaste_interface__i_to_q_gate__q = NV_Ith_S(rY, 13); + // Units: dimensionless; Initial value: 0.839295925773219 + double var_chaste_interface__i_to_r_gate__r = NV_Ith_S(rY, 14); + // Units: dimensionless; Initial value: 0.00573289893326379 + double var_chaste_interface__sodium_dynamics__Nai = NV_Ith_S(rY, 15); + // Units: millimolar; Initial value: 10.9248496211574 + double var_chaste_interface__calcium_dynamics__Ca_SR = NV_Ith_S(rY, 16); + // Units: millimolar; Initial value: 0.2734234751931 + double var_chaste_interface__calcium_dynamics__g = NV_Ith_S(rY, 17); + // Units: dimensionless; Initial value: 0.999999981028517 + + // Mathematics + double d_dt_chaste_interface_var_Membrane__Vm_converted; + const double var_Membrane__Vm = 0.001 * var_chaste_interface__Membrane__Vm_converted; // volt + const double var_calcium_dynamics__Buf_C = 0.25; // millimolar + const double var_calcium_dynamics__Buf_SR = 10; // millimolar + const double var_calcium_dynamics__Kbuf_C = 0.001; // millimolar + const double var_calcium_dynamics__Cai_bufc = 1 / (1 + var_calcium_dynamics__Buf_C * var_calcium_dynamics__Kbuf_C / pow((var_chaste_interface__calcium_dynamics__Cai + var_calcium_dynamics__Kbuf_C), 2)); // dimensionless + const double var_calcium_dynamics__Kbuf_SR = 0.29999999999999999; // millimolar + const double var_calcium_dynamics__Ca_SR_bufSR = 1 / (1 + var_calcium_dynamics__Buf_SR * var_calcium_dynamics__Kbuf_SR / pow((var_chaste_interface__calcium_dynamics__Ca_SR + var_calcium_dynamics__Kbuf_SR), 2)); // dimensionless + const double var_calcium_dynamics__Kup = 0.00025000000000000001; // millimolar + const double var_calcium_dynamics__V_leak = 0.00044443999999999999; // per_second + const double var_calcium_dynamics__VmaxUp = 0.56064000000000003; // millimolar_per_second + const double var_calcium_dynamics__a_rel = 16.463999999999999; // millimolar_per_second + const double var_calcium_dynamics__b_rel = 0.25; // millimolar + const double var_calcium_dynamics__c_rel = 8.2319999999999993; // millimolar_per_second + const double var_calcium_dynamics__g_inf = ((var_chaste_interface__calcium_dynamics__Cai <= 0.00035) ? (1 / (1 + 5.439910241481016e+20 * pow(var_chaste_interface__calcium_dynamics__Cai, 6))) : (1 / (1 + 1.9720198874049176e+55 * pow(var_chaste_interface__calcium_dynamics__Cai, 16)))); // dimensionless + const double var_calcium_dynamics__const2 = (((var_Membrane__Vm > -0.059999999999999998) && (var_chaste_interface__calcium_dynamics__g < var_calcium_dynamics__g_inf)) ? (0) : (1)); // dimensionless + const double var_calcium_dynamics__i_leak = (-var_chaste_interface__calcium_dynamics__Cai + var_chaste_interface__calcium_dynamics__Ca_SR) * var_calcium_dynamics__V_leak; // millimolar_per_second + const double var_calcium_dynamics__i_up = var_calcium_dynamics__VmaxUp / (1 + pow(var_calcium_dynamics__Kup, 2) / pow(var_chaste_interface__calcium_dynamics__Cai, 2)); // millimolar_per_second + const double var_calcium_dynamics__tau_g = 0.002; // second + const double var_calcium_dynamics__g_orig_deriv = (-var_chaste_interface__calcium_dynamics__g + var_calcium_dynamics__g_inf) * var_calcium_dynamics__const2 / var_calcium_dynamics__tau_g; // 1 / second + const double d_dt_chaste_interface_var_calcium_dynamics__g = 0.001 * var_calcium_dynamics__g_orig_deriv; // 1 / millisecond + const double var_current_blockers__TTX_10uM = 0; // dimensionless + const double var_current_blockers__TTX_30uM = 0; // dimensionless + const double var_current_blockers__TTX_3uM = 0; // dimensionless + const double var_i_CaL_d_gate__alpha_d = 0.25 + 1.3999999999999999 / (1 + exp(-2.6923076923076925 - 76.92307692307692 * var_Membrane__Vm)); // dimensionless + const double var_i_CaL_d_gate__beta_d = 1.3999999999999999 / (1 + exp(1 + 200 * var_Membrane__Vm)); // dimensionless + const double var_calcium_dynamics__i_rel = 0.041099999999999998 * (pow(var_chaste_interface__calcium_dynamics__Ca_SR, 2) * var_calcium_dynamics__a_rel / (pow(var_chaste_interface__calcium_dynamics__Ca_SR, 2) + pow(var_calcium_dynamics__b_rel, 2)) + var_calcium_dynamics__c_rel) * var_chaste_interface__calcium_dynamics__g * var_chaste_interface__i_CaL_d_gate__d; // millimolar_per_second + const double var_i_CaL_d_gate__d_infinity = 1 / (1 + exp(-1.3 - 142.85714285714286 * var_Membrane__Vm)); // dimensionless + const double var_i_CaL_d_gate__gamma_d = 1 / (1 + exp(2.5 - 50 * var_Membrane__Vm)); // dimensionless + const double var_i_CaL_d_gate__tau_d = 0.001 * var_i_CaL_d_gate__gamma_d + 0.001 * var_i_CaL_d_gate__alpha_d * var_i_CaL_d_gate__beta_d; // second + const double var_i_CaL_d_gate__d_orig_deriv = (-var_chaste_interface__i_CaL_d_gate__d + var_i_CaL_d_gate__d_infinity) / var_i_CaL_d_gate__tau_d; // 1 / second + const double d_dt_chaste_interface_var_i_CaL_d_gate__d = 0.001 * var_i_CaL_d_gate__d_orig_deriv; // 1 / millisecond + const double var_i_CaL_f1_gate__f1_inf = 1 / (1 + exp(8.6666666666666661 + 333.33333333333331 * var_Membrane__Vm)); // dimensionless + const double var_i_CaL_f1_gate__constf1 = ((-var_i_CaL_f1_gate__f1_inf + var_chaste_interface__i_CaL_f1_gate__f1 < 0) ? (0.92835000000000001 + 1433 * var_chaste_interface__calcium_dynamics__Cai) : (1)); // dimensionless + const double var_i_CaL_f1_gate__tau_f1 = 0.001 * (20 + 200 / (1 + exp(1.3 - 100 * var_Membrane__Vm)) + 180 / (1 + exp(3 + 100 * var_Membrane__Vm)) + 1102.5 * exp(-4444444444.4444447 * pow((0.027 + var_Membrane__Vm), 4))) * var_i_CaL_f1_gate__constf1; // second + const double var_i_CaL_f1_gate__f1_orig_deriv = (-var_chaste_interface__i_CaL_f1_gate__f1 + var_i_CaL_f1_gate__f1_inf) / var_i_CaL_f1_gate__tau_f1; // 1 / second + const double d_dt_chaste_interface_var_i_CaL_f1_gate__f1 = 0.001 * var_i_CaL_f1_gate__f1_orig_deriv; // 1 / millisecond + const double var_i_CaL_f2_gate__constf2 = 1; // dimensionless + const double var_i_CaL_f2_gate__f2_inf = 0.33000000000000002 + 0.67000000000000004 / (1 + exp(8.75 + 250 * var_Membrane__Vm)); // dimensionless + const double var_i_CaL_f2_gate__tau_f2 = 0.001 * (16 / (1 + exp(3 + 100 * var_Membrane__Vm)) + 31 / (1 + exp(2.5 - 100 * var_Membrane__Vm)) + 600 * exp(-5882.3529411764703 * pow((0.025000000000000001 + var_Membrane__Vm), 2))) * var_i_CaL_f2_gate__constf2; // second + const double var_i_CaL_f2_gate__f2_orig_deriv = (-var_chaste_interface__i_CaL_f2_gate__f2 + var_i_CaL_f2_gate__f2_inf) / var_i_CaL_f2_gate__tau_f2; // 1 / second + const double d_dt_chaste_interface_var_i_CaL_f2_gate__f2 = 0.001 * var_i_CaL_f2_gate__f2_orig_deriv; // 1 / millisecond + const double var_i_CaL_fCa_gate__alpha_fCa = 1 / (1 + 5.9537418076512766e+25 * pow(var_chaste_interface__calcium_dynamics__Cai, 8)); // dimensionless + const double var_i_CaL_fCa_gate__beta_fCa = 0.10000000000000001 / (1 + exp(-9 + 10000 * var_chaste_interface__calcium_dynamics__Cai)); // dimensionless + const double var_i_CaL_fCa_gate__gamma_fCa = 0.29999999999999999 / (1 + exp(-0.9375 + 1250 * var_chaste_interface__calcium_dynamics__Cai)); // dimensionless + const double var_i_CaL_fCa_gate__fCa_inf = 0.76010945576162958 * var_i_CaL_fCa_gate__alpha_fCa + 0.76010945576162958 * var_i_CaL_fCa_gate__beta_fCa + 0.76010945576162958 * var_i_CaL_fCa_gate__gamma_fCa; // dimensionless + const double var_i_CaL_fCa_gate__constfCa = (((var_Membrane__Vm > -0.059999999999999998) && (var_chaste_interface__i_CaL_fCa_gate__fCa < var_i_CaL_fCa_gate__fCa_inf)) ? (0) : (1)); // dimensionless + const double var_i_CaL_fCa_gate__tau_fCa = 0.002; // second + const double var_i_CaL_fCa_gate__fCa_orig_deriv = (-var_chaste_interface__i_CaL_fCa_gate__fCa + var_i_CaL_fCa_gate__fCa_inf) * var_i_CaL_fCa_gate__constfCa / var_i_CaL_fCa_gate__tau_fCa; // 1 / second + const double d_dt_chaste_interface_var_i_CaL_fCa_gate__fCa = 0.001 * var_i_CaL_fCa_gate__fCa_orig_deriv; // 1 / millisecond + const double var_i_Kr_Xr1_gate__L0 = 0.025000000000000001; // dimensionless + const double var_i_Kr_Xr1_gate__Q = 2.2999999999999998; // dimensionless + const double var_i_Kr_Xr1_gate__alpha_Xr1 = 450 / (1 + exp(-4.5 - 100 * var_Membrane__Vm)); // dimensionless + const double var_i_Kr_Xr1_gate__beta_Xr1 = 6 / (1 + exp(2.6086956521739131 + 86.956521739130437 * var_Membrane__Vm)); // dimensionless + const double var_i_Kr_Xr1_gate__tau_Xr1 = 0.001 * var_i_Kr_Xr1_gate__alpha_Xr1 * var_i_Kr_Xr1_gate__beta_Xr1; // second + const double var_i_Kr_Xr2_gate__Xr2_infinity = 1 / (1 + exp(1.76 + 20 * var_Membrane__Vm)); // dimensionless + const double var_i_Kr_Xr2_gate__alpha_Xr2 = 3 / (1 + exp(-3 - 50 * var_Membrane__Vm)); // dimensionless + const double var_i_Kr_Xr2_gate__beta_Xr2 = 1.1200000000000001 / (1 + exp(-3 + 50 * var_Membrane__Vm)); // dimensionless + const double var_i_Kr_Xr2_gate__tau_Xr2 = 0.001 * var_i_Kr_Xr2_gate__alpha_Xr2 * var_i_Kr_Xr2_gate__beta_Xr2; // second + const double var_i_Kr_Xr2_gate__Xr2_orig_deriv = (-var_chaste_interface__i_Kr_Xr2_gate__Xr2 + var_i_Kr_Xr2_gate__Xr2_infinity) / var_i_Kr_Xr2_gate__tau_Xr2; // 1 / second + const double d_dt_chaste_interface_var_i_Kr_Xr2_gate__Xr2 = 0.001 * var_i_Kr_Xr2_gate__Xr2_orig_deriv; // 1 / millisecond + const double var_i_Ks_Xs_gate__Xs_infinity = 1 / (1 + exp(-1.25 - 62.5 * var_Membrane__Vm)); // dimensionless + const double var_i_Ks_Xs_gate__alpha_Xs = 1100 / sqrt(1 + exp(-1.6666666666666667 - 166.66666666666666 * var_Membrane__Vm)); // dimensionless + const double var_i_Ks_Xs_gate__beta_Xs = 1 / (1 + exp(-3 + 50 * var_Membrane__Vm)); // dimensionless + const double var_i_Ks_Xs_gate__tau_Xs = 0.001 * var_i_Ks_Xs_gate__alpha_Xs * var_i_Ks_Xs_gate__beta_Xs; // second + const double var_i_Ks_Xs_gate__Xs_orig_deriv = (-var_chaste_interface__i_Ks_Xs_gate__Xs + var_i_Ks_Xs_gate__Xs_infinity) / var_i_Ks_Xs_gate__tau_Xs; // 1 / second + const double d_dt_chaste_interface_var_i_Ks_Xs_gate__Xs = 0.001 * var_i_Ks_Xs_gate__Xs_orig_deriv; // 1 / millisecond + const double var_i_Na__TTX_coeff = ((var_current_blockers__TTX_3uM == 1) ? (0.17999999999999999) : ((var_current_blockers__TTX_10uM == 1) ? (0.059999999999999998) : ((var_current_blockers__TTX_30uM == 1) ? (0.02) : (1)))); // dimensionless + const double var_i_NaCa__KmCa = 1.3799999999999999; // millimolar + const double var_i_NaCa__KmNai = 87.5; // millimolar + const double var_i_NaCa__Ksat = 0.10000000000000001; // dimensionless + const double var_i_NaCa__alpha = 2.8571431999999999; // dimensionless + const double var_i_NaCa__gamma = 0.34999999999999998; // dimensionless + const double var_i_NaCa__kNaCa = 4900; // A_per_F + const double var_i_NaK__Km_K = 1; // millimolar + const double var_i_NaK__Km_Na = 40; // millimolar + const double var_i_NaK__PNaK = 1.8414239999999999; // A_per_F + const double var_i_Na_h_gate__alpha_h = ((var_Membrane__Vm < -0.040000000000000001) ? (0.057000000000000002 * exp(-11.764705882352942 - 147.05882352941177 * var_Membrane__Vm)) : (0)); // dimensionless + const double var_i_Na_h_gate__beta_h = ((var_Membrane__Vm < -0.040000000000000001) ? (2.7000000000000002 * exp(79 * var_Membrane__Vm) + 310000 * exp(348.5 * var_Membrane__Vm)) : (5.9230769230769234 / (1 + exp(-0.96036036036036043 - 90.090090090090087 * var_Membrane__Vm)))); // dimensionless + const double var_i_Na_h_gate__h_inf = 1 / sqrt(1 + exp(12.649122807017543 + 175.43859649122805 * var_Membrane__Vm)); // dimensionless + const double var_i_Na_h_gate__tau_h = ((var_Membrane__Vm < -0.040000000000000001) ? (0.0015 / (var_i_Na_h_gate__alpha_h + var_i_Na_h_gate__beta_h)) : (0.002542)); // second + const double var_i_Na_h_gate__h_orig_deriv = (-var_chaste_interface__i_Na_h_gate__h + var_i_Na_h_gate__h_inf) / var_i_Na_h_gate__tau_h; // 1 / second + const double d_dt_chaste_interface_var_i_Na_h_gate__h = 0.001 * var_i_Na_h_gate__h_orig_deriv; // 1 / millisecond + const double var_i_Na_j_gate__alpha_j = ((var_Membrane__Vm < -0.040000000000000001) ? ((37.780000000000001 + 1000 * var_Membrane__Vm) * (-25428 * exp(244.40000000000001 * var_Membrane__Vm) - 6.9480000000000002e-6 * exp(-43.909999999999997 * var_Membrane__Vm)) / (1 + exp(24.640530000000002 + 311 * var_Membrane__Vm))) : (0)); // dimensionless + const double var_i_Na_j_gate__beta_j = ((var_Membrane__Vm < -0.040000000000000001) ? (0.024240000000000001 * exp(-10.52 * var_Membrane__Vm) / (1 + exp(-5.5312920000000005 - 137.80000000000001 * var_Membrane__Vm))) : (0.59999999999999998 * exp(57 * var_Membrane__Vm) / (1 + exp(-3.2000000000000002 - 100 * var_Membrane__Vm)))); // dimensionless + const double var_i_Na_j_gate__j_inf = 1 / sqrt(1 + exp(12.649122807017543 + 175.43859649122805 * var_Membrane__Vm)); // dimensionless + const double var_i_Na_j_gate__tau_j = 0.0070000000000000001 / (var_i_Na_j_gate__alpha_j + var_i_Na_j_gate__beta_j); // second + const double var_i_Na_j_gate__j_orig_deriv = (-var_chaste_interface__i_Na_j_gate__j + var_i_Na_j_gate__j_inf) / var_i_Na_j_gate__tau_j; // 1 / second + const double d_dt_chaste_interface_var_i_Na_j_gate__j = 0.001 * var_i_Na_j_gate__j_orig_deriv; // 1 / millisecond + const double var_i_Na_m_gate__alpha_m = 1 / (1 + exp(-12 - 200 * var_Membrane__Vm)); // dimensionless + const double var_i_Na_m_gate__beta_m = 0.10000000000000001 / (1 + exp(7 + 200 * var_Membrane__Vm)) + 0.10000000000000001 / (1 + exp(-0.25 + 5 * var_Membrane__Vm)); // dimensionless + const double var_i_Na_m_gate__m_inf = pow((1 + exp(-5.7796610169491522 - 169.4915254237288 * var_Membrane__Vm)), (-0.33333333333333331)); // dimensionless + const double var_i_Na_m_gate__tau_m = 0.001 * var_i_Na_m_gate__alpha_m * var_i_Na_m_gate__beta_m; // second + const double var_i_Na_m_gate__m_orig_deriv = (-var_chaste_interface__i_Na_m_gate__m + var_i_Na_m_gate__m_inf) / var_i_Na_m_gate__tau_m; // 1 / second + const double d_dt_chaste_interface_var_i_Na_m_gate__m = 0.001 * var_i_Na_m_gate__m_orig_deriv; // 1 / millisecond + const double var_i_PCa__KPCa = 0.00050000000000000001; // millimolar + const double var_i_PCa__g_PCa = 0.41249999999999998; // A_per_F + const double var_i_PCa__i_PCa = var_chaste_interface__calcium_dynamics__Cai * var_i_PCa__g_PCa / (var_chaste_interface__calcium_dynamics__Cai + var_i_PCa__KPCa); // A_per_F + const double var_i_b_Ca__g_b_Ca = 0.69264000000000003; // S_per_F + const double var_i_b_Na__g_b_Na = 0.90000000000000002; // S_per_F + const double var_i_f_Xf_gate__Xf_infinity = 1 / (1 + exp(15.569999999999999 + 200 * var_Membrane__Vm)); // dimensionless + const double var_i_f_Xf_gate__tau_Xf = 1.8999999999999999 / (1 + exp(1.5 + 100 * var_Membrane__Vm)); // second + const double var_i_f_Xf_gate__Xf_orig_deriv = (-var_chaste_interface__i_f_Xf_gate__Xf + var_i_f_Xf_gate__Xf_infinity) / var_i_f_Xf_gate__tau_Xf; // 1 / second + const double d_dt_chaste_interface_var_i_f_Xf_gate__Xf = 0.001 * var_i_f_Xf_gate__Xf_orig_deriv; // 1 / millisecond + const double var_i_to_q_gate__q_inf = 1 / (1 + exp(4.0769230769230766 + 76.92307692307692 * var_Membrane__Vm)); // dimensionless + const double var_i_to_q_gate__tau_q = 0.0060599999999999994 + 0.039101999999999998 / (0.065000000000000002 * exp(4.593 + 100 * var_Membrane__Vm) + 0.56999999999999995 * exp(-3.52 - 80 * var_Membrane__Vm)); // second + const double var_i_to_q_gate__q_orig_deriv = (-var_chaste_interface__i_to_q_gate__q + var_i_to_q_gate__q_inf) / var_i_to_q_gate__tau_q; // 1 / second + const double d_dt_chaste_interface_var_i_to_q_gate__q = 0.001 * var_i_to_q_gate__q_orig_deriv; // 1 / millisecond + const double var_i_to_r_gate__r_inf = 1 / (1 + exp(1.1893333333333334 - 53.333333333333336 * var_Membrane__Vm)); // dimensionless + const double var_i_to_r_gate__tau_r = 0.0027535199999999998 + 0.01440516 / (1.0369999999999999 * exp(2.7548999999999997 + 90 * var_Membrane__Vm) + 0.36899999999999999 * exp(-2.8607999999999998 - 120 * var_Membrane__Vm)); // second + const double var_i_to_r_gate__r_orig_deriv = (-var_chaste_interface__i_to_r_gate__r + var_i_to_r_gate__r_inf) / var_i_to_r_gate__tau_r; // 1 / second + const double d_dt_chaste_interface_var_i_to_r_gate__r = 0.001 * var_i_to_r_gate__r_orig_deriv; // 1 / millisecond + const double var_model_parameters__F = 96485.341499999995; // coulomb_per_mole + const double var_model_parameters__R = 8.3144720000000003; // joule_per_mole_kelvin + const double var_electric_potentials__E_Ca = 0.5 * var_model_parameters__R * NV_Ith_S(mParameters, 12) * log(NV_Ith_S(mParameters, 1) / var_chaste_interface__calcium_dynamics__Cai) / var_model_parameters__F; // volt + const double var_i_CaL__i_CaL = ((((var_Membrane__Vm >= -4.3086710741444596e-12 * NV_Ith_S(mParameters, 12)) && (var_Membrane__Vm <= 4.3086710741444596e-12 * NV_Ith_S(mParameters, 12))) || ((var_Membrane__Vm >= 4.3086710741444596e-12 * NV_Ith_S(mParameters, 12)) && (var_Membrane__Vm <= -4.3086710741444596e-12 * NV_Ith_S(mParameters, 12)))) ? (-116045061550.51096 * (-4.3086710741444596e-12 * NV_Ith_S(mParameters, 12) + var_Membrane__Vm) * (-0.019297068299999998 * (-0.34100000000000003 * NV_Ith_S(mParameters, 1) + var_chaste_interface__calcium_dynamics__Cai * exp(9.9999999999999995e-8)) * NV_Ith_S(mParameters, 4) * var_chaste_interface__i_CaL_d_gate__d * var_chaste_interface__i_CaL_f1_gate__f1 * var_chaste_interface__i_CaL_f2_gate__f2 * var_chaste_interface__i_CaL_fCa_gate__fCa / (-1 + exp(9.9999999999999995e-8)) - 0.019297068299999998 * (-0.34100000000000003 * NV_Ith_S(mParameters, 1) + var_chaste_interface__calcium_dynamics__Cai * exp(-9.9999999999999995e-8)) * NV_Ith_S(mParameters, 4) * var_chaste_interface__i_CaL_d_gate__d * var_chaste_interface__i_CaL_f1_gate__f1 * var_chaste_interface__i_CaL_f2_gate__f2 * var_chaste_interface__i_CaL_fCa_gate__fCa / (-1 + exp(-9.9999999999999995e-8))) / NV_Ith_S(mParameters, 12) + 0.019297068299999998 * (-0.34100000000000003 * NV_Ith_S(mParameters, 1) + var_chaste_interface__calcium_dynamics__Cai * exp(9.9999999999999995e-8)) * NV_Ith_S(mParameters, 4) * var_chaste_interface__i_CaL_d_gate__d * var_chaste_interface__i_CaL_f1_gate__f1 * var_chaste_interface__i_CaL_f2_gate__f2 * var_chaste_interface__i_CaL_fCa_gate__fCa / (-1 + exp(9.9999999999999995e-8))) : (4478658957.2358274 * (-0.34100000000000003 * NV_Ith_S(mParameters, 1) + var_chaste_interface__calcium_dynamics__Cai * exp(23209.012310102189 * var_Membrane__Vm / NV_Ith_S(mParameters, 12))) * var_Membrane__Vm * NV_Ith_S(mParameters, 4) * var_chaste_interface__i_CaL_d_gate__d * var_chaste_interface__i_CaL_f1_gate__f1 * var_chaste_interface__i_CaL_f2_gate__f2 * var_chaste_interface__i_CaL_fCa_gate__fCa / ((-1 + exp(23209.012310102189 * var_Membrane__Vm / NV_Ith_S(mParameters, 12))) * NV_Ith_S(mParameters, 12)))); // A_per_F + const double var_i_Kr_Xr1_gate__V_half = -19 - 1000 * (-2.1789087017666886 + log(pow((1 + 0.38461538461538458 * NV_Ith_S(mParameters, 1)), 4) / (pow((0.57999999999999996 + NV_Ith_S(mParameters, 1)), 4) * var_i_Kr_Xr1_gate__L0))) * var_model_parameters__R * NV_Ith_S(mParameters, 12) / (var_i_Kr_Xr1_gate__Q * var_model_parameters__F); // millivolt + const double var_i_Kr_Xr1_gate__Xr1_inf = 1 / (1 + exp(0.2040816326530612 * var_i_Kr_Xr1_gate__V_half - 204.08163265306121 * var_Membrane__Vm)); // dimensionless + const double var_i_Kr_Xr1_gate__Xr1_orig_deriv = (-var_chaste_interface__i_Kr_Xr1_gate__Xr1 + var_i_Kr_Xr1_gate__Xr1_inf) / var_i_Kr_Xr1_gate__tau_Xr1; // 1 / second + const double d_dt_chaste_interface_var_i_Kr_Xr1_gate__Xr1 = 0.001 * var_i_Kr_Xr1_gate__Xr1_orig_deriv; // 1 / millisecond + const double var_i_b_Ca__i_b_Ca = (-var_electric_potentials__E_Ca + var_Membrane__Vm) * var_i_b_Ca__g_b_Ca; // A_per_F + const double var_model_parameters__V_SR = 583.73000000000002; // micrometre_cube + const double var_model_parameters__Vc = 8800; // micrometre_cube + const double var_calcium_dynamics__Ca_SR_orig_deriv = (-var_calcium_dynamics__i_leak - var_calcium_dynamics__i_rel + var_calcium_dynamics__i_up) * var_calcium_dynamics__Ca_SR_bufSR * var_model_parameters__Vc / var_model_parameters__V_SR; // millimolar / second + const double d_dt_chaste_interface_var_calcium_dynamics__Ca_SR = 0.001 * var_calcium_dynamics__Ca_SR_orig_deriv; // millimolar / millisecond + const double var_electric_potentials__E_Na = var_model_parameters__R * NV_Ith_S(mParameters, 12) * log(NV_Ith_S(mParameters, 3) / var_chaste_interface__sodium_dynamics__Nai) / var_model_parameters__F; // volt + const double var_i_Na__i_Na = pow(var_chaste_interface__i_Na_m_gate__m, 3) * (-var_electric_potentials__E_Na + var_Membrane__Vm) * var_i_Na__TTX_coeff * NV_Ith_S(mParameters, 5) * var_chaste_interface__i_Na_h_gate__h * var_chaste_interface__i_Na_j_gate__j; // A_per_F + const double var_i_NaCa__i_NaCa = (pow(var_chaste_interface__sodium_dynamics__Nai, 3) * NV_Ith_S(mParameters, 1) * exp(var_Membrane__Vm * var_i_NaCa__gamma * var_model_parameters__F / (var_model_parameters__R * NV_Ith_S(mParameters, 12))) - pow(NV_Ith_S(mParameters, 3), 3) * var_chaste_interface__calcium_dynamics__Cai * var_i_NaCa__alpha * exp((-1 + var_i_NaCa__gamma) * var_Membrane__Vm * var_model_parameters__F / (var_model_parameters__R * NV_Ith_S(mParameters, 12)))) * var_i_NaCa__kNaCa / ((1 + var_i_NaCa__Ksat * exp((-1 + var_i_NaCa__gamma) * var_Membrane__Vm * var_model_parameters__F / (var_model_parameters__R * NV_Ith_S(mParameters, 12)))) * (pow(var_i_NaCa__KmNai, 3) + pow(NV_Ith_S(mParameters, 3), 3)) * (var_i_NaCa__KmCa + NV_Ith_S(mParameters, 1))); // A_per_F + const double var_calcium_dynamics__Cai_orig_deriv = (-var_calcium_dynamics__i_up - 4.9999999999999994e+17 * (-2 * var_i_NaCa__i_NaCa + var_i_CaL__i_CaL + var_i_PCa__i_PCa + var_i_b_Ca__i_b_Ca) * NV_Ith_S(mParameters, 11) / (var_model_parameters__F * var_model_parameters__Vc) + var_calcium_dynamics__i_leak + var_calcium_dynamics__i_rel) * var_calcium_dynamics__Cai_bufc; // millimolar / second + const double d_dt_chaste_interface_var_calcium_dynamics__Cai = 0.001 * var_calcium_dynamics__Cai_orig_deriv; // millimolar / millisecond + const double var_i_NaK__i_NaK = var_i_NaK__PNaK * NV_Ith_S(mParameters, 2) * var_chaste_interface__sodium_dynamics__Nai / ((var_i_NaK__Km_K + NV_Ith_S(mParameters, 2)) * (var_i_NaK__Km_Na + var_chaste_interface__sodium_dynamics__Nai) * (1 + 0.035299999999999998 * exp(-var_Membrane__Vm * var_model_parameters__F / (var_model_parameters__R * NV_Ith_S(mParameters, 12))) + 0.1245 * exp(-0.10000000000000001 * var_Membrane__Vm * var_model_parameters__F / (var_model_parameters__R * NV_Ith_S(mParameters, 12))))); // A_per_F + const double var_i_b_Na__i_b_Na = (-var_electric_potentials__E_Na + var_Membrane__Vm) * var_i_b_Na__g_b_Na; // A_per_F + const double var_sodium_dynamics__Nai_orig_deriv = -9.9999999999999987e+17 * (3 * var_i_NaCa__i_NaCa + 3 * var_i_NaK__i_NaK + var_i_Na__i_Na + var_i_b_Na__i_b_Na) * NV_Ith_S(mParameters, 11) / (var_model_parameters__F * var_model_parameters__Vc); // millimolar / second + const double d_dt_chaste_interface_var_sodium_dynamics__Nai = 0.001 * var_sodium_dynamics__Nai_orig_deriv; // millimolar / millisecond + + if (mSetVoltageDerivativeToZero) + { + d_dt_chaste_interface_var_Membrane__Vm_converted = 0.0; + } + else + { + const double var_current_blockers__Chromanol_iKs30 = 0; // dimensionless + const double var_current_blockers__Chromanol_iKs50 = 0; // dimensionless + const double var_current_blockers__Chromanol_iKs70 = 0; // dimensionless + const double var_current_blockers__Chromanol_iKs90 = 0; // dimensionless + const double var_current_blockers__E4031_100nM = 0; // dimensionless + const double var_current_blockers__E4031_30nM = 0; // dimensionless + const double var_electric_potentials__PkNa = 0.029999999999999999; // dimensionless + const double var_i_Kr__E4031_coeff = ((var_current_blockers__E4031_30nM == 1) ? (0.77000000000000002) : ((var_current_blockers__E4031_100nM == 1) ? (0.5) : (1))); // dimensionless + const double var_i_Ks__Chromanol_coeff = ((var_current_blockers__Chromanol_iKs30 == 1) ? (0.69999999999999996) : ((var_current_blockers__Chromanol_iKs50 == 1) ? (0.5) : ((var_current_blockers__Chromanol_iKs70 == 1) ? (0.29999999999999999) : ((var_current_blockers__Chromanol_iKs90 == 1) ? (0.10000000000000001) : (1))))); // dimensionless + const double var_i_Ks__g_Ks_total = (1 + 0.59999999999999998 / (1 + 6.4818210260626455e-7 * pow((1 / var_chaste_interface__calcium_dynamics__Cai), 1.3999999999999999))) * NV_Ith_S(mParameters, 9); // S_per_F + const double var_i_f__E_f = -0.017000000000000001; // volt + const double var_i_f__i_f = (-var_i_f__E_f + var_Membrane__Vm) * NV_Ith_S(mParameters, 6) * var_chaste_interface__i_f_Xf_gate__Xf; // A_per_F + const double var_i_K1__g_K1_total = 0.43033148291193518 * sqrt(NV_Ith_S(mParameters, 2)) * NV_Ith_S(mParameters, 7); // S_per_F + const double var_i_Kr__g_Kr_total = 0.43033148291193518 * sqrt(NV_Ith_S(mParameters, 2)) * NV_Ith_S(mParameters, 8); // S_per_F + const double var_electric_potentials__E_K = var_model_parameters__R * NV_Ith_S(mParameters, 12) * log(NV_Ith_S(mParameters, 2) / NV_Ith_S(mParameters, 0)) / var_model_parameters__F; // volt + const double var_i_K1__alpha_K1 = 3.9100000000000001 / (1 + exp(-118.83999999999999 + 594.19999999999993 * var_Membrane__Vm - 594.19999999999993 * var_electric_potentials__E_K)); // dimensionless + const double var_i_K1__beta_K1 = (-1.5089999999999999 * exp(0.02 + 0.20000000000000001 * var_Membrane__Vm - 0.20000000000000001 * var_electric_potentials__E_K) + exp(-5.8860000000000001 + 588.60000000000002 * var_Membrane__Vm - 588.60000000000002 * var_electric_potentials__E_K)) / (1 + exp(454.69999999999999 * var_Membrane__Vm - 454.69999999999999 * var_electric_potentials__E_K)); // dimensionless + const double var_i_K1__XK1_inf = var_i_K1__alpha_K1 / (var_i_K1__alpha_K1 + var_i_K1__beta_K1); // dimensionless + const double var_i_K1__i_K1 = (-var_electric_potentials__E_K + var_Membrane__Vm) * var_i_K1__XK1_inf * var_i_K1__g_K1_total; // A_per_F + const double var_i_Kr__i_Kr = (-var_electric_potentials__E_K + var_Membrane__Vm) * var_i_Kr__E4031_coeff * var_i_Kr__g_Kr_total * var_chaste_interface__i_Kr_Xr1_gate__Xr1 * var_chaste_interface__i_Kr_Xr2_gate__Xr2; // A_per_F + const double var_i_to__i_to = (-var_electric_potentials__E_K + var_Membrane__Vm) * NV_Ith_S(mParameters, 10) * var_chaste_interface__i_to_q_gate__q * var_chaste_interface__i_to_r_gate__r; // A_per_F + const double var_electric_potentials__E_Ks = var_model_parameters__R * NV_Ith_S(mParameters, 12) * log((var_electric_potentials__PkNa * NV_Ith_S(mParameters, 3) + NV_Ith_S(mParameters, 2)) / (var_electric_potentials__PkNa * var_chaste_interface__sodium_dynamics__Nai + NV_Ith_S(mParameters, 0))) / var_model_parameters__F; // volt + const double var_i_Ks__i_Ks = pow(var_chaste_interface__i_Ks_Xs_gate__Xs, 2) * (-var_electric_potentials__E_Ks + var_Membrane__Vm) * var_i_Ks__Chromanol_coeff * var_i_Ks__g_Ks_total; // A_per_F + const double var_stim_mode__i_stim_converted = -GetIntracellularAreaStimulus(var_chaste_interface__environment__time_converted); // uA_per_cm2 + const double var_stim_mode__i_stim = var_stim_mode__i_stim_converted / HeartConfig::Instance()->GetCapacitance(); // A_per_F + const double var_Membrane__Vm_orig_deriv = -var_i_CaL__i_CaL - var_i_K1__i_K1 - var_i_Kr__i_Kr - var_i_Ks__i_Ks - var_i_Na__i_Na - var_i_NaCa__i_NaCa - var_i_NaK__i_NaK - var_i_PCa__i_PCa - var_i_b_Ca__i_b_Ca - var_i_b_Na__i_b_Na - var_i_f__i_f - var_i_to__i_to + var_stim_mode__i_stim; // volt / second + const double var_Membrane__Vm_orig_deriv_a = 0.001 * var_Membrane__Vm_orig_deriv; // volt / millisecond + d_dt_chaste_interface_var_Membrane__Vm_converted = 1000 * var_Membrane__Vm_orig_deriv_a; // millivolt / millisecond + } + + NV_Ith_S(rDY,0) = d_dt_chaste_interface_var_Membrane__Vm_converted; + NV_Ith_S(rDY,1) = d_dt_chaste_interface_var_calcium_dynamics__Cai; + NV_Ith_S(rDY,2) = d_dt_chaste_interface_var_i_Na_m_gate__m; + NV_Ith_S(rDY,3) = d_dt_chaste_interface_var_i_Na_h_gate__h; + NV_Ith_S(rDY,4) = d_dt_chaste_interface_var_i_Na_j_gate__j; + NV_Ith_S(rDY,5) = d_dt_chaste_interface_var_i_CaL_d_gate__d; + NV_Ith_S(rDY,6) = d_dt_chaste_interface_var_i_CaL_f1_gate__f1; + NV_Ith_S(rDY,7) = d_dt_chaste_interface_var_i_CaL_f2_gate__f2; + NV_Ith_S(rDY,8) = d_dt_chaste_interface_var_i_CaL_fCa_gate__fCa; + NV_Ith_S(rDY,9) = d_dt_chaste_interface_var_i_Kr_Xr1_gate__Xr1; + NV_Ith_S(rDY,10) = d_dt_chaste_interface_var_i_Kr_Xr2_gate__Xr2; + NV_Ith_S(rDY,11) = d_dt_chaste_interface_var_i_Ks_Xs_gate__Xs; + NV_Ith_S(rDY,12) = d_dt_chaste_interface_var_i_f_Xf_gate__Xf; + NV_Ith_S(rDY,13) = d_dt_chaste_interface_var_i_to_q_gate__q; + NV_Ith_S(rDY,14) = d_dt_chaste_interface_var_i_to_r_gate__r; + NV_Ith_S(rDY,15) = d_dt_chaste_interface_var_sodium_dynamics__Nai; + NV_Ith_S(rDY,16) = d_dt_chaste_interface_var_calcium_dynamics__Ca_SR; + NV_Ith_S(rDY,17) = d_dt_chaste_interface_var_calcium_dynamics__g; + } + + N_Vector Cellpaci_hyttinen_aaltosetala_severi_ventricularVersionFromCellMLCvode::ComputeDerivedQuantities(double var_chaste_interface__environment__time_converted, const N_Vector & rY) + { + // Inputs: + // Time units: millisecond + double var_chaste_interface__Membrane__Vm_converted = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : NV_Ith_S(rY, 0)); + // Units: millivolt; Initial value: -74.3340057623841 + double var_chaste_interface__calcium_dynamics__Cai = NV_Ith_S(rY, 1); + // Units: millimolar; Initial value: 1.80773974140477e-05 + double var_chaste_interface__i_Na_m_gate__m = NV_Ith_S(rY, 2); + // Units: dimensionless; Initial value: 0.102953468725004 + double var_chaste_interface__i_Na_h_gate__h = NV_Ith_S(rY, 3); + // Units: dimensionless; Initial value: 0.786926637881461 + double var_chaste_interface__i_Na_j_gate__j = NV_Ith_S(rY, 4); + // Units: dimensionless; Initial value: 0.253943221774722 + double var_chaste_interface__i_CaL_d_gate__d = NV_Ith_S(rY, 5); + // Units: dimensionless; Initial value: 8.96088425225182e-05 + double var_chaste_interface__i_CaL_f1_gate__f1 = NV_Ith_S(rY, 6); + // Units: dimensionless; Initial value: 0.970411811263976 + double var_chaste_interface__i_CaL_f2_gate__f2 = NV_Ith_S(rY, 7); + // Units: dimensionless; Initial value: 0.999965815466749 + double var_chaste_interface__i_CaL_fCa_gate__fCa = NV_Ith_S(rY, 8); + // Units: dimensionless; Initial value: 0.998925296531804 + double var_chaste_interface__i_Kr_Xr1_gate__Xr1 = NV_Ith_S(rY, 9); + // Units: dimensionless; Initial value: 0.00778547011240132 + double var_chaste_interface__i_Kr_Xr2_gate__Xr2 = NV_Ith_S(rY, 10); + // Units: dimensionless; Initial value: 0.432162576531617 + double var_chaste_interface__i_Ks_Xs_gate__Xs = NV_Ith_S(rY, 11); + // Units: dimensionless; Initial value: 0.0322944866983666 + double var_chaste_interface__i_f_Xf_gate__Xf = NV_Ith_S(rY, 12); + // Units: dimensionless; Initial value: 0.100615100568753 + double var_chaste_interface__i_to_q_gate__q = NV_Ith_S(rY, 13); + // Units: dimensionless; Initial value: 0.839295925773219 + double var_chaste_interface__i_to_r_gate__r = NV_Ith_S(rY, 14); + // Units: dimensionless; Initial value: 0.00573289893326379 + double var_chaste_interface__sodium_dynamics__Nai = NV_Ith_S(rY, 15); + // Units: millimolar; Initial value: 10.9248496211574 + + // Mathematics + const double var_Membrane__Vm = 0.001 * var_chaste_interface__Membrane__Vm_converted; // volt + const double var_calcium_dynamics__Buf_C = 0.25; // millimolar + const double var_calcium_dynamics__Kbuf_C = 0.001; // millimolar + const double var_calcium_dynamics__Cai_bufc = 1 / (1 + var_calcium_dynamics__Buf_C * var_calcium_dynamics__Kbuf_C / pow((var_chaste_interface__calcium_dynamics__Cai + var_calcium_dynamics__Kbuf_C), 2)); // dimensionless + const double var_current_blockers__Chromanol_iKs30 = 0; // dimensionless + const double var_current_blockers__Chromanol_iKs50 = 0; // dimensionless + const double var_current_blockers__Chromanol_iKs70 = 0; // dimensionless + const double var_current_blockers__Chromanol_iKs90 = 0; // dimensionless + const double var_current_blockers__E4031_100nM = 0; // dimensionless + const double var_current_blockers__E4031_30nM = 0; // dimensionless + const double var_current_blockers__TTX_10uM = 0; // dimensionless + const double var_current_blockers__TTX_30uM = 0; // dimensionless + const double var_current_blockers__TTX_3uM = 0; // dimensionless + const double var_electric_potentials__PkNa = 0.029999999999999999; // dimensionless + const double var_i_Kr__E4031_coeff = ((var_current_blockers__E4031_30nM == 1) ? (0.77000000000000002) : ((var_current_blockers__E4031_100nM == 1) ? (0.5) : (1))); // dimensionless + const double var_i_Ks__Chromanol_coeff = ((var_current_blockers__Chromanol_iKs30 == 1) ? (0.69999999999999996) : ((var_current_blockers__Chromanol_iKs50 == 1) ? (0.5) : ((var_current_blockers__Chromanol_iKs70 == 1) ? (0.29999999999999999) : ((var_current_blockers__Chromanol_iKs90 == 1) ? (0.10000000000000001) : (1))))); // dimensionless + const double var_i_Ks__g_Ks_total = (1 + 0.59999999999999998 / (1 + 6.4818210260626455e-7 * pow((1 / var_chaste_interface__calcium_dynamics__Cai), 1.3999999999999999))) * NV_Ith_S(mParameters, 9); // S_per_F + const double var_i_Na__TTX_coeff = ((var_current_blockers__TTX_3uM == 1) ? (0.17999999999999999) : ((var_current_blockers__TTX_10uM == 1) ? (0.059999999999999998) : ((var_current_blockers__TTX_30uM == 1) ? (0.02) : (1)))); // dimensionless + const double var_i_NaCa__KmCa = 1.3799999999999999; // millimolar + const double var_i_NaCa__KmNai = 87.5; // millimolar + const double var_i_NaCa__Ksat = 0.10000000000000001; // dimensionless + const double var_i_NaCa__alpha = 2.8571431999999999; // dimensionless + const double var_i_NaCa__gamma = 0.34999999999999998; // dimensionless + const double var_i_NaCa__kNaCa = 4900; // A_per_F + const double var_i_NaK__Km_K = 1; // millimolar + const double var_i_NaK__Km_Na = 40; // millimolar + const double var_i_NaK__PNaK = 1.8414239999999999; // A_per_F + const double var_i_PCa__KPCa = 0.00050000000000000001; // millimolar + const double var_i_PCa__g_PCa = 0.41249999999999998; // A_per_F + const double var_i_PCa__i_PCa = var_chaste_interface__calcium_dynamics__Cai * var_i_PCa__g_PCa / (var_chaste_interface__calcium_dynamics__Cai + var_i_PCa__KPCa); // A_per_F + const double var_i_PCa__i_PCa_converted = HeartConfig::Instance()->GetCapacitance() * var_i_PCa__i_PCa; // uA_per_cm2 + const double var_i_f__E_f = -0.017000000000000001; // volt + const double var_i_f__i_f = (-var_i_f__E_f + var_Membrane__Vm) * NV_Ith_S(mParameters, 6) * var_chaste_interface__i_f_Xf_gate__Xf; // A_per_F + const double var_i_f__i_f_converted = HeartConfig::Instance()->GetCapacitance() * var_i_f__i_f; // uA_per_cm2 + const double var_model_parameters__Cm_converted = 1000000 * NV_Ith_S(mParameters, 11); // uF + const double var_model_parameters__F = 96485.341499999995; // coulomb_per_mole + const double var_i_K1__g_K1_total = 0.43033148291193518 * sqrt(NV_Ith_S(mParameters, 2)) * NV_Ith_S(mParameters, 7); // S_per_F + const double var_i_Kr__g_Kr_total = 0.43033148291193518 * sqrt(NV_Ith_S(mParameters, 2)) * NV_Ith_S(mParameters, 8); // S_per_F + const double var_model_parameters__R = 8.3144720000000003; // joule_per_mole_kelvin + const double var_electric_potentials__E_K = var_model_parameters__R * NV_Ith_S(mParameters, 12) * log(NV_Ith_S(mParameters, 2) / NV_Ith_S(mParameters, 0)) / var_model_parameters__F; // volt + const double var_i_CaL__i_CaL = ((((var_Membrane__Vm >= -4.3086710741444596e-12 * NV_Ith_S(mParameters, 12)) && (var_Membrane__Vm <= 4.3086710741444596e-12 * NV_Ith_S(mParameters, 12))) || ((var_Membrane__Vm >= 4.3086710741444596e-12 * NV_Ith_S(mParameters, 12)) && (var_Membrane__Vm <= -4.3086710741444596e-12 * NV_Ith_S(mParameters, 12)))) ? (-116045061550.51096 * (-4.3086710741444596e-12 * NV_Ith_S(mParameters, 12) + var_Membrane__Vm) * (-0.019297068299999998 * (-0.34100000000000003 * NV_Ith_S(mParameters, 1) + var_chaste_interface__calcium_dynamics__Cai * exp(9.9999999999999995e-8)) * NV_Ith_S(mParameters, 4) * var_chaste_interface__i_CaL_d_gate__d * var_chaste_interface__i_CaL_f1_gate__f1 * var_chaste_interface__i_CaL_f2_gate__f2 * var_chaste_interface__i_CaL_fCa_gate__fCa / (-1 + exp(9.9999999999999995e-8)) - 0.019297068299999998 * (-0.34100000000000003 * NV_Ith_S(mParameters, 1) + var_chaste_interface__calcium_dynamics__Cai * exp(-9.9999999999999995e-8)) * NV_Ith_S(mParameters, 4) * var_chaste_interface__i_CaL_d_gate__d * var_chaste_interface__i_CaL_f1_gate__f1 * var_chaste_interface__i_CaL_f2_gate__f2 * var_chaste_interface__i_CaL_fCa_gate__fCa / (-1 + exp(-9.9999999999999995e-8))) / NV_Ith_S(mParameters, 12) + 0.019297068299999998 * (-0.34100000000000003 * NV_Ith_S(mParameters, 1) + var_chaste_interface__calcium_dynamics__Cai * exp(9.9999999999999995e-8)) * NV_Ith_S(mParameters, 4) * var_chaste_interface__i_CaL_d_gate__d * var_chaste_interface__i_CaL_f1_gate__f1 * var_chaste_interface__i_CaL_f2_gate__f2 * var_chaste_interface__i_CaL_fCa_gate__fCa / (-1 + exp(9.9999999999999995e-8))) : (4478658957.2358274 * (-0.34100000000000003 * NV_Ith_S(mParameters, 1) + var_chaste_interface__calcium_dynamics__Cai * exp(23209.012310102189 * var_Membrane__Vm / NV_Ith_S(mParameters, 12))) * var_Membrane__Vm * NV_Ith_S(mParameters, 4) * var_chaste_interface__i_CaL_d_gate__d * var_chaste_interface__i_CaL_f1_gate__f1 * var_chaste_interface__i_CaL_f2_gate__f2 * var_chaste_interface__i_CaL_fCa_gate__fCa / ((-1 + exp(23209.012310102189 * var_Membrane__Vm / NV_Ith_S(mParameters, 12))) * NV_Ith_S(mParameters, 12)))); // A_per_F + const double var_i_CaL__i_CaL_converted = HeartConfig::Instance()->GetCapacitance() * var_i_CaL__i_CaL; // uA_per_cm2 + const double var_i_K1__alpha_K1 = 3.9100000000000001 / (1 + exp(-118.83999999999999 + 594.19999999999993 * var_Membrane__Vm - 594.19999999999993 * var_electric_potentials__E_K)); // dimensionless + const double var_i_K1__beta_K1 = (-1.5089999999999999 * exp(0.02 + 0.20000000000000001 * var_Membrane__Vm - 0.20000000000000001 * var_electric_potentials__E_K) + exp(-5.8860000000000001 + 588.60000000000002 * var_Membrane__Vm - 588.60000000000002 * var_electric_potentials__E_K)) / (1 + exp(454.69999999999999 * var_Membrane__Vm - 454.69999999999999 * var_electric_potentials__E_K)); // dimensionless + const double var_i_K1__XK1_inf = var_i_K1__alpha_K1 / (var_i_K1__alpha_K1 + var_i_K1__beta_K1); // dimensionless + const double var_i_K1__i_K1 = (-var_electric_potentials__E_K + var_Membrane__Vm) * var_i_K1__XK1_inf * var_i_K1__g_K1_total; // A_per_F + const double var_i_K1__i_K1_converted = HeartConfig::Instance()->GetCapacitance() * var_i_K1__i_K1; // uA_per_cm2 + const double var_i_Kr__i_Kr = (-var_electric_potentials__E_K + var_Membrane__Vm) * var_i_Kr__E4031_coeff * var_i_Kr__g_Kr_total * var_chaste_interface__i_Kr_Xr1_gate__Xr1 * var_chaste_interface__i_Kr_Xr2_gate__Xr2; // A_per_F + const double var_i_Kr__i_Kr_converted = HeartConfig::Instance()->GetCapacitance() * var_i_Kr__i_Kr; // uA_per_cm2 + const double var_i_to__i_to = (-var_electric_potentials__E_K + var_Membrane__Vm) * NV_Ith_S(mParameters, 10) * var_chaste_interface__i_to_q_gate__q * var_chaste_interface__i_to_r_gate__r; // A_per_F + const double var_i_to__i_to_converted = HeartConfig::Instance()->GetCapacitance() * var_i_to__i_to; // uA_per_cm2 + const double var_electric_potentials__E_Ks = var_model_parameters__R * NV_Ith_S(mParameters, 12) * log((var_electric_potentials__PkNa * NV_Ith_S(mParameters, 3) + NV_Ith_S(mParameters, 2)) / (var_electric_potentials__PkNa * var_chaste_interface__sodium_dynamics__Nai + NV_Ith_S(mParameters, 0))) / var_model_parameters__F; // volt + const double var_electric_potentials__E_Na = var_model_parameters__R * NV_Ith_S(mParameters, 12) * log(NV_Ith_S(mParameters, 3) / var_chaste_interface__sodium_dynamics__Nai) / var_model_parameters__F; // volt + const double var_i_Ks__i_Ks = pow(var_chaste_interface__i_Ks_Xs_gate__Xs, 2) * (-var_electric_potentials__E_Ks + var_Membrane__Vm) * var_i_Ks__Chromanol_coeff * var_i_Ks__g_Ks_total; // A_per_F + const double var_i_Ks__i_Ks_converted = HeartConfig::Instance()->GetCapacitance() * var_i_Ks__i_Ks; // uA_per_cm2 + const double var_i_Na__i_Na = pow(var_chaste_interface__i_Na_m_gate__m, 3) * (-var_electric_potentials__E_Na + var_Membrane__Vm) * var_i_Na__TTX_coeff * NV_Ith_S(mParameters, 5) * var_chaste_interface__i_Na_h_gate__h * var_chaste_interface__i_Na_j_gate__j; // A_per_F + const double var_i_Na__i_Na_converted = HeartConfig::Instance()->GetCapacitance() * var_i_Na__i_Na; // uA_per_cm2 + const double var_i_NaCa__i_NaCa = (pow(var_chaste_interface__sodium_dynamics__Nai, 3) * NV_Ith_S(mParameters, 1) * exp(var_Membrane__Vm * var_i_NaCa__gamma * var_model_parameters__F / (var_model_parameters__R * NV_Ith_S(mParameters, 12))) - pow(NV_Ith_S(mParameters, 3), 3) * var_chaste_interface__calcium_dynamics__Cai * var_i_NaCa__alpha * exp((-1 + var_i_NaCa__gamma) * var_Membrane__Vm * var_model_parameters__F / (var_model_parameters__R * NV_Ith_S(mParameters, 12)))) * var_i_NaCa__kNaCa / ((1 + var_i_NaCa__Ksat * exp((-1 + var_i_NaCa__gamma) * var_Membrane__Vm * var_model_parameters__F / (var_model_parameters__R * NV_Ith_S(mParameters, 12)))) * (pow(var_i_NaCa__KmNai, 3) + pow(NV_Ith_S(mParameters, 3), 3)) * (var_i_NaCa__KmCa + NV_Ith_S(mParameters, 1))); // A_per_F + const double var_i_NaCa__i_NaCa_converted = HeartConfig::Instance()->GetCapacitance() * var_i_NaCa__i_NaCa; // uA_per_cm2 + const double var_i_NaK__i_NaK = var_i_NaK__PNaK * NV_Ith_S(mParameters, 2) * var_chaste_interface__sodium_dynamics__Nai / ((var_i_NaK__Km_K + NV_Ith_S(mParameters, 2)) * (var_i_NaK__Km_Na + var_chaste_interface__sodium_dynamics__Nai) * (1 + 0.035299999999999998 * exp(-var_Membrane__Vm * var_model_parameters__F / (var_model_parameters__R * NV_Ith_S(mParameters, 12))) + 0.1245 * exp(-0.10000000000000001 * var_Membrane__Vm * var_model_parameters__F / (var_model_parameters__R * NV_Ith_S(mParameters, 12))))); // A_per_F + const double var_i_NaK__i_NaK_converted = HeartConfig::Instance()->GetCapacitance() * var_i_NaK__i_NaK; // uA_per_cm2 + const double var_stim_mode__i_stim_converted = -GetIntracellularAreaStimulus(var_chaste_interface__environment__time_converted); // uA_per_cm2 + +#if CHASTE_SUNDIALS_VERSION >= 60000 + N_Vector dqs = N_VNew_Serial(18, CvodeContextManager::Instance()->GetSundialsContext()); +#else + N_Vector dqs = N_VNew_Serial(18); +#endif + NV_Ith_S(dqs, 0) = var_calcium_dynamics__Cai_bufc; + NV_Ith_S(dqs, 1) = var_i_CaL__i_CaL_converted; + NV_Ith_S(dqs, 2) = var_i_PCa__i_PCa_converted; + NV_Ith_S(dqs, 3) = var_model_parameters__Cm_converted; + NV_Ith_S(dqs, 4) = var_i_Na__i_Na_converted; + NV_Ith_S(dqs, 5) = var_i_f__i_f_converted; + NV_Ith_S(dqs, 6) = var_i_K1__i_K1_converted; + NV_Ith_S(dqs, 7) = var_i_K1__g_K1_total; + NV_Ith_S(dqs, 8) = var_i_Kr__i_Kr_converted; + NV_Ith_S(dqs, 9) = var_i_Kr__g_Kr_total; + NV_Ith_S(dqs, 10) = var_i_Ks__i_Ks_converted; + NV_Ith_S(dqs, 11) = var_i_Ks__g_Ks_total; + NV_Ith_S(dqs, 12) = var_i_NaCa__i_NaCa_converted; + NV_Ith_S(dqs, 13) = var_i_NaK__i_NaK_converted; + NV_Ith_S(dqs, 14) = var_stim_mode__i_stim_converted; + NV_Ith_S(dqs, 15) = var_i_to__i_to_converted; + NV_Ith_S(dqs, 16) = var_chaste_interface__Membrane__Vm_converted; + NV_Ith_S(dqs, 17) = var_chaste_interface__environment__time_converted; + return dqs; + } + +template<> +void OdeSystemInformation::Initialise(void) +{ + this->mSystemName = "paci_hyttinen_aaltosetala_severi_ventricularVersion"; + this->mFreeVariableName = "time"; + this->mFreeVariableUnits = "millisecond"; + + // NV_Ith_S(rY, 0): + this->mVariableNames.push_back("membrane_voltage"); + this->mVariableUnits.push_back("millivolt"); + this->mInitialConditions.push_back(-74.3340057623841); + + // NV_Ith_S(rY, 1): + this->mVariableNames.push_back("cytosolic_calcium_concentration"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(1.80773974140477e-05); + + // NV_Ith_S(rY, 2): + this->mVariableNames.push_back("membrane_fast_sodium_current_m_gate"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.102953468725004); + + // NV_Ith_S(rY, 3): + this->mVariableNames.push_back("membrane_fast_sodium_current_h_gate"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.786926637881461); + + // NV_Ith_S(rY, 4): + this->mVariableNames.push_back("membrane_fast_sodium_current_j_gate"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.253943221774722); + + // NV_Ith_S(rY, 5): + this->mVariableNames.push_back("membrane_L_type_calcium_current_d_gate"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(8.96088425225182e-05); + + // NV_Ith_S(rY, 6): + this->mVariableNames.push_back("membrane_L_type_calcium_current_f_gate"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.970411811263976); + + // NV_Ith_S(rY, 7): + this->mVariableNames.push_back("membrane_L_type_calcium_current_f2_gate"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.999965815466749); + + // NV_Ith_S(rY, 8): + this->mVariableNames.push_back("membrane_L_type_calcium_current_fCa_gate"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.998925296531804); + + // NV_Ith_S(rY, 9): + this->mVariableNames.push_back("i_Kr_Xr1_gate__Xr1"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.00778547011240132); + + // NV_Ith_S(rY, 10): + this->mVariableNames.push_back("i_Kr_Xr2_gate__Xr2"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.432162576531617); + + // NV_Ith_S(rY, 11): + this->mVariableNames.push_back("i_Ks_Xs_gate__Xs"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.0322944866983666); + + // NV_Ith_S(rY, 12): + this->mVariableNames.push_back("membrane_hyperpolarisation_activated_funny_current_single_gate"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.100615100568753); + + // NV_Ith_S(rY, 13): + this->mVariableNames.push_back("i_to_q_gate__q"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.839295925773219); + + // NV_Ith_S(rY, 14): + this->mVariableNames.push_back("i_to_r_gate__r"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.00573289893326379); + + // NV_Ith_S(rY, 15): + this->mVariableNames.push_back("cytosolic_sodium_concentration"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(10.9248496211574); + + // NV_Ith_S(rY, 16): + this->mVariableNames.push_back("JSR_calcium_concentration"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(0.2734234751931); + + // NV_Ith_S(rY, 17): + this->mVariableNames.push_back("calcium_dynamics__g"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.999999981028517); + + // mParameters[0]: + this->mParameterNames.push_back("cytosolic_potassium_concentration"); + this->mParameterUnits.push_back("millimolar"); + + // mParameters[1]: + this->mParameterNames.push_back("extracellular_calcium_concentration"); + this->mParameterUnits.push_back("millimolar"); + + // mParameters[2]: + this->mParameterNames.push_back("extracellular_potassium_concentration"); + this->mParameterUnits.push_back("millimolar"); + + // mParameters[3]: + this->mParameterNames.push_back("extracellular_sodium_concentration"); + this->mParameterUnits.push_back("millimolar"); + + // mParameters[4]: + this->mParameterNames.push_back("membrane_L_type_calcium_current_conductance"); + this->mParameterUnits.push_back("metre_cube_per_F_per_s"); + + // mParameters[5]: + this->mParameterNames.push_back("membrane_fast_sodium_current_conductance"); + this->mParameterUnits.push_back("S_per_F"); + + // mParameters[6]: + this->mParameterNames.push_back("membrane_hyperpolarisation_activated_funny_current_potassium_component_conductance"); + this->mParameterUnits.push_back("S_per_F"); + + // mParameters[7]: + this->mParameterNames.push_back("membrane_inward_rectifier_potassium_current_conductance_scaling_factor"); + this->mParameterUnits.push_back("S_per_F"); + + // mParameters[8]: + this->mParameterNames.push_back("membrane_rapid_delayed_rectifier_potassium_current_conductance_scaling_factor"); + this->mParameterUnits.push_back("S_per_F"); + + // mParameters[9]: + this->mParameterNames.push_back("membrane_slow_delayed_rectifier_potassium_current_conductance_scaling_factor"); + this->mParameterUnits.push_back("S_per_F"); + + // mParameters[10]: + this->mParameterNames.push_back("membrane_transient_outward_current_conductance"); + this->mParameterUnits.push_back("S_per_F"); + + // mParameters[11]: + this->mParameterNames.push_back("model_parameters__Cm"); + this->mParameterUnits.push_back("farad"); + + // mParameters[12]: + this->mParameterNames.push_back("temperature"); + this->mParameterUnits.push_back("kelvin"); + + // Derived Quantity index [0]: + this->mDerivedQuantityNames.push_back("cytosolic_calcium_flux_scaling_from_intrinsic_buffers"); + this->mDerivedQuantityUnits.push_back("dimensionless"); + + // Derived Quantity index [1]: + this->mDerivedQuantityNames.push_back("membrane_L_type_calcium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [2]: + this->mDerivedQuantityNames.push_back("membrane_calcium_pump_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [3]: + this->mDerivedQuantityNames.push_back("membrane_capacitance"); + this->mDerivedQuantityUnits.push_back("uF"); + + // Derived Quantity index [4]: + this->mDerivedQuantityNames.push_back("membrane_fast_sodium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [5]: + this->mDerivedQuantityNames.push_back("membrane_hyperpolarisation_activated_funny_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [6]: + this->mDerivedQuantityNames.push_back("membrane_inward_rectifier_potassium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [7]: + this->mDerivedQuantityNames.push_back("membrane_inward_rectifier_potassium_current_conductance"); + this->mDerivedQuantityUnits.push_back("S_per_F"); + + // Derived Quantity index [8]: + this->mDerivedQuantityNames.push_back("membrane_rapid_delayed_rectifier_potassium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [9]: + this->mDerivedQuantityNames.push_back("membrane_rapid_delayed_rectifier_potassium_current_conductance"); + this->mDerivedQuantityUnits.push_back("S_per_F"); + + // Derived Quantity index [10]: + this->mDerivedQuantityNames.push_back("membrane_slow_delayed_rectifier_potassium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [11]: + this->mDerivedQuantityNames.push_back("membrane_slow_delayed_rectifier_potassium_current_conductance"); + this->mDerivedQuantityUnits.push_back("S_per_F"); + + // Derived Quantity index [12]: + this->mDerivedQuantityNames.push_back("membrane_sodium_calcium_exchanger_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [13]: + this->mDerivedQuantityNames.push_back("membrane_sodium_potassium_pump_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [14]: + this->mDerivedQuantityNames.push_back("membrane_stimulus_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [15]: + this->mDerivedQuantityNames.push_back("membrane_transient_outward_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [16]: + this->mDerivedQuantityNames.push_back("membrane_voltage"); + this->mDerivedQuantityUnits.push_back("millivolt"); + + // Derived Quantity index [17]: + this->mDerivedQuantityNames.push_back("time"); + this->mDerivedQuantityUnits.push_back("millisecond"); + + this->mInitialised = true; +} + +// Serialization for Boost >= 1.36 +#include "SerializationExportWrapperForCpp.hpp" +CHASTE_CLASS_EXPORT(Cellpaci_hyttinen_aaltosetala_severi_ventricularVersionFromCellMLCvode) + +#endif // CHASTE_CVODE diff --git a/chaste_codegen/tests/numerical/baseline/Cvode/paci_hyttinen_aaltosetala_severi_ventricularVersion.hpp b/chaste_codegen/tests/numerical/baseline/Cvode/paci_hyttinen_aaltosetala_severi_ventricularVersion.hpp new file mode 100644 index 00000000..81cf22b7 --- /dev/null +++ b/chaste_codegen/tests/numerical/baseline/Cvode/paci_hyttinen_aaltosetala_severi_ventricularVersion.hpp @@ -0,0 +1,86 @@ +#ifdef CHASTE_CVODE +#ifndef CELLPACI_HYTTINEN_AALTOSETALA_SEVERI_VENTRICULARVERSIONFROMCELLMLCVODE_HPP_ +#define CELLPACI_HYTTINEN_AALTOSETALA_SEVERI_VENTRICULARVERSIONFROMCELLMLCVODE_HPP_ + +//! @file +//! +//! This source file was generated from CellML by chaste_codegen version (version omitted as unimportant) +//! +//! Model: paci_hyttinen_aaltosetala_severi_ventricularVersion +//! +//! Processed by chaste_codegen: https://github.com/ModellingWebLab/chaste-codegen +//! (translator: chaste_codegen, model type: NumericCvode) +//! on (date omitted as unimportant) +//! +//! + +#include "ChasteSerialization.hpp" +#include +#include "AbstractStimulusFunction.hpp" +#include "AbstractCvodeCell.hpp" + +class Cellpaci_hyttinen_aaltosetala_severi_ventricularVersionFromCellMLCvode : public AbstractCvodeCell +{ + friend class boost::serialization::access; + template + void serialize(Archive & archive, const unsigned int version) + { + archive & boost::serialization::base_object(*this); + + } + + // + // Settable parameters and readable variables + // + + +private: +const bool is_concentration[18] = {false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, true, true, false}; +const bool is_probability[18] = {false, false, true, true, true, true, true, true, true, false, false, false, true, false, false, false, false, false}; +public: + + boost::shared_ptr UseCellMLDefaultStimulus(); + double GetIntracellularCalciumConcentration(); + Cellpaci_hyttinen_aaltosetala_severi_ventricularVersionFromCellMLCvode(boost::shared_ptr pOdeSolver /* unused; should be empty */, boost::shared_ptr pIntracellularStimulus); + ~Cellpaci_hyttinen_aaltosetala_severi_ventricularVersionFromCellMLCvode(); + void VerifyStateVariables(); + double GetIIonic(const std::vector* pStateVariables=NULL); + void EvaluateYDerivatives(double var_chaste_interface__environment__time_converted, const N_Vector rY, N_Vector rDY); + N_Vector ComputeDerivedQuantities(double var_chaste_interface__environment__time_converted, const N_Vector & rY); +}; + +// Needs to be included last +#include "SerializationExportWrapper.hpp" +CHASTE_CLASS_EXPORT(Cellpaci_hyttinen_aaltosetala_severi_ventricularVersionFromCellMLCvode) + +namespace boost +{ + namespace serialization + { + template + inline void save_construct_data( + Archive & ar, const Cellpaci_hyttinen_aaltosetala_severi_ventricularVersionFromCellMLCvode * t, const unsigned int fileVersion) + { + const boost::shared_ptr p_solver = t->GetSolver(); + const boost::shared_ptr p_stimulus = t->GetStimulusFunction(); + ar << p_solver; + ar << p_stimulus; + } + + template + inline void load_construct_data( + Archive & ar, Cellpaci_hyttinen_aaltosetala_severi_ventricularVersionFromCellMLCvode * t, const unsigned int fileVersion) + { + boost::shared_ptr p_solver; + boost::shared_ptr p_stimulus; + ar >> p_solver; + ar >> p_stimulus; + ::new(t)Cellpaci_hyttinen_aaltosetala_severi_ventricularVersionFromCellMLCvode(p_solver, p_stimulus); + } + + } + +} + +#endif // CELLPACI_HYTTINEN_AALTOSETALA_SEVERI_VENTRICULARVERSIONFROMCELLMLCVODE_HPP_ +#endif // CHASTE_CVODE \ No newline at end of file diff --git a/chaste_codegen/tests/numerical/baseline/Cvode_opt/dynamic_aslanidi_Purkinje_model_2009.cpp b/chaste_codegen/tests/numerical/baseline/Cvode_opt/dynamic_aslanidi_Purkinje_model_2009.cpp new file mode 100644 index 00000000..1d42f797 --- /dev/null +++ b/chaste_codegen/tests/numerical/baseline/Cvode_opt/dynamic_aslanidi_Purkinje_model_2009.cpp @@ -0,0 +1,1468 @@ +#ifdef CHASTE_CVODE +//! @file +//! +//! This source file was generated from CellML by chaste_codegen version (version omitted as unimportant) +//! +//! Model: aslanidi_2009 +//! +//! Processed by chaste_codegen: https://github.com/ModellingWebLab/chaste-codegen +//! (translator: chaste_codegen, model type: NumericCvodeOpt) +//! on (date omitted as unimportant) +//! +//! + +#include "dynamic_aslanidi_Purkinje_model_2009.hpp" +#include +#include +#include +#include +#include "Exception.hpp" +#include "OdeSystemInformation.hpp" +#include "RegularStimulus.hpp" +#include "HeartConfig.hpp" +#include "IsNan.hpp" +#include "MathsCustomFunctions.hpp" + +#if CHASTE_SUNDIALS_VERSION >= 60000 +#include "CvodeContextManager.hpp" +#endif + +#include "ModelFactory.hpp" + +AbstractCardiacCellWithModifiers* Dynamicaslanidi_Purkinje_model_2009FromCellMLCvodeOpt::CreateMethod(boost::shared_ptr p_solver, boost::shared_ptr p_stimulus) { + return new Dynamicaslanidi_Purkinje_model_2009FromCellMLCvodeOpt(p_solver, p_stimulus); +} + +bool Dynamicaslanidi_Purkinje_model_2009FromCellMLCvodeOpt::registered = ModelFactory::Register("dynamic_aslanidi_Purkinje_model_2009", "NumericCvodeOpt", (ModelFactory::TCreateMethod)Dynamicaslanidi_Purkinje_model_2009FromCellMLCvodeOpt::CreateMethod); + +class Dynamicaslanidi_Purkinje_model_2009FromCellMLCvodeOpt_LookupTables : public AbstractLookupTableCollection +{ +public: + static Dynamicaslanidi_Purkinje_model_2009FromCellMLCvodeOpt_LookupTables* Instance() + { + if (mpInstance.get() == NULL) + { + mpInstance.reset(new Dynamicaslanidi_Purkinje_model_2009FromCellMLCvodeOpt_LookupTables); + } + return mpInstance.get(); + } + + void FreeMemory() + { + + if (_lookup_table_0) + { + delete[] _lookup_table_0; + _lookup_table_0 = NULL; + } + + mNeedsRegeneration.assign(mNeedsRegeneration.size(), true); + } + + // Row lookup methods + // using linear-interpolation + + double* _lookup_0_row(unsigned i, double _factor_) + { + for (unsigned j=0; j<35; j++) + { + const double y1 = _lookup_table_0[i][j]; + const double y2 = _lookup_table_0[i+1][j]; + _lookup_table_0_row[j] = y1 + (y2-y1)*_factor_; + } + return _lookup_table_0_row; + } + + + const double * IndexTable0(double var_chaste_interface__membrane__V) + { + const double _offset_0 = var_chaste_interface__membrane__V - mTableMins[0]; + const double _offset_0_over_table_step = _offset_0 * mTableStepInverses[0]; + const unsigned _table_index_0 = (unsigned)(_offset_0_over_table_step); + const double _factor_0 = _offset_0_over_table_step - _table_index_0; + const double* const _lt_0_row = Dynamicaslanidi_Purkinje_model_2009FromCellMLCvodeOpt_LookupTables::Instance()->_lookup_0_row(_table_index_0, _factor_0); + return _lt_0_row; + } + + +// LCOV_EXCL_START + bool CheckIndex0(double& var_chaste_interface__membrane__V) + { + bool _oob_0 = false; + if (var_chaste_interface__membrane__V>mTableMaxs[0] || var_chaste_interface__membrane__V mpInstance; + + // Row lookup methods memory + double _lookup_table_0_row[35]; + + // Lookup tables + double (*_lookup_table_0)[35]; + int _lookup_table_0_num_misshit_piecewise[35] = {0}; + +}; + +std::shared_ptr Dynamicaslanidi_Purkinje_model_2009FromCellMLCvodeOpt_LookupTables::mpInstance; + + + boost::shared_ptr Dynamicaslanidi_Purkinje_model_2009FromCellMLCvodeOpt::UseCellMLDefaultStimulus() + { + // Use the default stimulus specified by CellML metadata + const double var_chaste_interface__membrane__stim_amplitude_converted = -80 * HeartConfig::Instance()->GetCapacitance(); // uA_per_cm2 + const double var_chaste_interface__membrane__stim_duration = 1; // millisecond + const double var_chaste_interface__membrane__stim_period = 800; // millisecond + const double var_chaste_interface__membrane__stim_start = 100; // millisecond + boost::shared_ptr p_cellml_stim(new RegularStimulus( + -fabs(var_chaste_interface__membrane__stim_amplitude_converted), + var_chaste_interface__membrane__stim_duration, + var_chaste_interface__membrane__stim_period, + var_chaste_interface__membrane__stim_start + )); + mpIntracellularStimulus = p_cellml_stim; + return p_cellml_stim; + } + + double Dynamicaslanidi_Purkinje_model_2009FromCellMLCvodeOpt::GetIntracellularCalciumConcentration() + { + return NV_Ith_S(mStateVariables, 1); + } + + Dynamicaslanidi_Purkinje_model_2009FromCellMLCvodeOpt::Dynamicaslanidi_Purkinje_model_2009FromCellMLCvodeOpt(boost::shared_ptr pOdeSolver /* unused; should be empty */, boost::shared_ptr pIntracellularStimulus) + : AbstractCardiacCellWithModifiers( + pOdeSolver, + 30, + 0, + pIntracellularStimulus) + { + // Time units: millisecond + // + this->mpSystemInfo = OdeSystemInformation::Instance(); + Init(); + + // We have a default stimulus specified in the CellML file metadata + this->mHasDefaultStimulusFromCellML = true; + + // These will get initialised to DummyModifiers in the base class method. + this->AddModifier("JSR_calcium_concentration", + mp_JSR_calcium_concentration_modifier); + this->AddModifier("SR_leak_current_max", + mp_SR_leak_current_max_modifier); + this->AddModifier("SR_release_current", + mp_SR_release_current_modifier); + this->AddModifier("SR_release_current_max", + mp_SR_release_current_max_modifier); + this->AddModifier("SR_uptake_current_max", + mp_SR_uptake_current_max_modifier); + this->AddModifier("concentration_clamp_onoff", + mp_concentration_clamp_onoff_modifier); + this->AddModifier("cytosolic_calcium_concentration", + mp_cytosolic_calcium_concentration_modifier); + this->AddModifier("cytosolic_potassium_concentration", + mp_cytosolic_potassium_concentration_modifier); + this->AddModifier("cytosolic_sodium_concentration", + mp_cytosolic_sodium_concentration_modifier); + this->AddModifier("dyadic_space_calcium_concentration", + mp_dyadic_space_calcium_concentration_modifier); + this->AddModifier("extracellular_calcium_concentration", + mp_extracellular_calcium_concentration_modifier); + this->AddModifier("extracellular_potassium_concentration", + mp_extracellular_potassium_concentration_modifier); + this->AddModifier("extracellular_sodium_concentration", + mp_extracellular_sodium_concentration_modifier); + this->AddModifier("membrane_L_type_calcium_current", + mp_i_Ca_L__i_Ca_L_modifier); + this->AddModifier("membrane_L_type_calcium_current_conductance", + mp_membrane_L_type_calcium_current_conductance_modifier); + this->AddModifier("membrane_L_type_calcium_current_d_gate", + mp_membrane_L_type_calcium_current_d_gate_modifier); + this->AddModifier("membrane_L_type_calcium_current_f2_gate", + mp_membrane_L_type_calcium_current_f2_gate_modifier); + this->AddModifier("membrane_L_type_calcium_current_f2_gate_tau", + mp_membrane_L_type_calcium_current_f2_gate_tau_modifier); + this->AddModifier("membrane_L_type_calcium_current_fCa2_gate", + mp_membrane_L_type_calcium_current_fCa2_gate_modifier); + this->AddModifier("membrane_L_type_calcium_current_fCa2_gate_tau", + mp_membrane_L_type_calcium_current_fCa2_gate_tau_modifier); + this->AddModifier("membrane_L_type_calcium_current_fCa_gate", + mp_membrane_L_type_calcium_current_fCa_gate_modifier); + this->AddModifier("membrane_L_type_calcium_current_fCa_gate_tau", + mp_membrane_L_type_calcium_current_fCa_gate_tau_modifier); + this->AddModifier("membrane_L_type_calcium_current_f_gate", + mp_membrane_L_type_calcium_current_f_gate_modifier); + this->AddModifier("membrane_L_type_calcium_current_f_gate_tau", + mp_membrane_L_type_calcium_current_f_gate_tau_modifier); + this->AddModifier("membrane_fast_sodium_current", + mp_i_Na__i_Na_modifier); + this->AddModifier("membrane_fast_sodium_current_conductance", + mp_membrane_fast_sodium_current_conductance_modifier); + this->AddModifier("membrane_fast_sodium_current_h_gate", + mp_membrane_fast_sodium_current_h_gate_modifier); + this->AddModifier("membrane_fast_sodium_current_h_gate_tau", + mp_membrane_fast_sodium_current_h_gate_tau_modifier); + this->AddModifier("membrane_fast_sodium_current_j_gate", + mp_membrane_fast_sodium_current_j_gate_modifier); + this->AddModifier("membrane_fast_sodium_current_j_gate_tau", + mp_membrane_fast_sodium_current_j_gate_tau_modifier); + this->AddModifier("membrane_fast_sodium_current_m_gate", + mp_membrane_fast_sodium_current_m_gate_modifier); + this->AddModifier("membrane_fast_sodium_current_reduced_inactivation", + mp_membrane_fast_sodium_current_reduced_inactivation_modifier); + this->AddModifier("membrane_fast_sodium_current_shift_inactivation", + mp_membrane_fast_sodium_current_shift_inactivation_modifier); + this->AddModifier("membrane_inward_rectifier_potassium_current", + mp_i_K1__i_K1_modifier); + this->AddModifier("membrane_inward_rectifier_potassium_current_conductance", + mp_membrane_inward_rectifier_potassium_current_conductance_modifier); + this->AddModifier("membrane_rapid_delayed_rectifier_potassium_current", + mp_i_Kr__i_Kr_modifier); + this->AddModifier("membrane_rapid_delayed_rectifier_potassium_current_conductance", + mp_membrane_rapid_delayed_rectifier_potassium_current_conductance_modifier); + this->AddModifier("membrane_slow_delayed_rectifier_potassium_current", + mp_i_Ks__i_Ks_modifier); + this->AddModifier("membrane_slow_delayed_rectifier_potassium_current_conductance", + mp_membrane_slow_delayed_rectifier_potassium_current_conductance_modifier); + this->AddModifier("membrane_sodium_calcium_exchanger_current", + mp_i_NaCa__i_NaCa_modifier); + this->AddModifier("membrane_sodium_calcium_exchanger_current_conductance", + mp_membrane_sodium_calcium_exchanger_current_conductance_modifier); + this->AddModifier("membrane_transient_outward_current", + mp_i_to_1__i_to_1_modifier); + this->AddModifier("membrane_transient_outward_current_conductance", + mp_membrane_transient_outward_current_conductance_modifier); + this->AddModifier("membrane_voltage", + mp_membrane_voltage_modifier); + NV_Ith_S(this->mParameters, 0) = 0.0043750000000000004; // (var_q_leak__q_leak_max) [millimolar_per_millisecond] + NV_Ith_S(this->mParameters, 1) = 3000; // (var_q_rel__g_rel_max) [per_millisecond] + NV_Ith_S(this->mParameters, 2) = 0.0043750000000000004; // (var_q_up__q_up_max) [millimolar_per_millisecond] + NV_Ith_S(this->mParameters, 3) = 1; // (var_intracellular_ion_concentrations__conc_clamp) [dimensionless] + NV_Ith_S(this->mParameters, 4) = 1.8; // (var_model_parameters__Ca_o) [millimolar] + NV_Ith_S(this->mParameters, 5) = 5.4000000000000004; // (var_model_parameters__K_o) [millimolar] + NV_Ith_S(this->mParameters, 6) = 140; // (var_model_parameters__Na_o) [millimolar] + NV_Ith_S(this->mParameters, 7) = 0.3392328; // (var_i_Ca_L__g_Ca_L) [dimensionless] + NV_Ith_S(this->mParameters, 8) = 8; // (var_i_Na__g_Na) [milliS_per_microF] + NV_Ith_S(this->mParameters, 9) = 0; // (var_i_Na__perc_reduced_inact_for_IpNa) [dimensionless] + NV_Ith_S(this->mParameters, 10) = 0; // (var_i_Na__shift_INa_inact) [millivolt] + NV_Ith_S(this->mParameters, 11) = 0.25; // (var_i_K1__g_K1_max) [milliS_per_microF] + NV_Ith_S(this->mParameters, 12) = 0.040008488000000002; // (var_i_Kr__g_Kr_max) [milliS_per_microF] + NV_Ith_S(this->mParameters, 13) = 0.052581329000000003; // (var_i_Ks__g_Ks_max) [milliS_per_microF] + NV_Ith_S(this->mParameters, 14) = 4.5; // (var_i_NaCa__i_NaCa_max) [microA_per_microF] + NV_Ith_S(this->mParameters, 15) = 0.14135944; // (var_i_to_1__g_to_1) [milliS_per_microF] + } + + Dynamicaslanidi_Purkinje_model_2009FromCellMLCvodeOpt::~Dynamicaslanidi_Purkinje_model_2009FromCellMLCvodeOpt() + { + } + + AbstractLookupTableCollection* Dynamicaslanidi_Purkinje_model_2009FromCellMLCvodeOpt::GetLookupTableCollection() + { + return Dynamicaslanidi_Purkinje_model_2009FromCellMLCvodeOpt_LookupTables::Instance(); + } + + void Dynamicaslanidi_Purkinje_model_2009FromCellMLCvodeOpt::VerifyStateVariables() + { + + const double tol = 100*this->mAbsTol; + N_Vector rY = rGetStateVariables(); + std::string error_message = ""; + + for (unsigned i=0; i < 30; i++) + { + if(std::isnan(NV_Ith_S(rY, i))){ + error_message += "State variable " + this->rGetStateVariableNames()[i] + " is not a number\n"; + } + if(std::isinf(NV_Ith_S(rY, i))){ + error_message += "State variable " + this->rGetStateVariableNames()[i] + " has become INFINITE\n"; + } + if(this->is_concentration[i] && NV_Ith_S(rY, i) < -tol) + { + error_message += "Concentration " + this->rGetStateVariableNames()[i] + " below 0\n"; + } + if(this->is_probability[i] && NV_Ith_S(rY, i) < -tol) + { + error_message += "Probability " + this->rGetStateVariableNames()[i] + " below 0\n"; + } + if(this->is_probability[i] && NV_Ith_S(rY, i) > 1 + tol) + { + error_message += "Probability " + this->rGetStateVariableNames()[i] + " above 1\n"; + } + } + if (error_message != ""){ + EXCEPTION(DumpState(error_message)); + } + } + + double Dynamicaslanidi_Purkinje_model_2009FromCellMLCvodeOpt::GetIIonic(const std::vector* pStateVariables) + { + // For state variable interpolation (SVI) we read in interpolated state variables, + // otherwise for ionic current interpolation (ICI) we use the state variables of this model (node). + N_Vector rY; + bool made_new_cvode_vector = false; + if (!pStateVariables) + { + rY = rGetStateVariables(); + } + else + { + made_new_cvode_vector = true; + rY = MakeNVector(*pStateVariables); + } + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : NV_Ith_S(rY, 0)); + // Units: millivolt; Initial value: -83.43812846286808 + double var_chaste_interface__Ca_i__Ca_i = NV_Ith_S(rY, 1); + // Units: millimolar; Initial value: 0.00022355433459434943 + double var_chaste_interface__i_Na_m_gate__m = NV_Ith_S(rY, 2); + // Units: dimensionless; Initial value: 0.002003390432234504 + double var_chaste_interface__i_Na_h_gate__h = NV_Ith_S(rY, 3); + // Units: dimensionless; Initial value: 0.9786390933308567 + double var_chaste_interface__i_Na_j_gate__j = NV_Ith_S(rY, 4); + // Units: dimensionless; Initial value: 0.09866447258167589 + double var_chaste_interface__i_Na_L_m_L_gate__m_L = NV_Ith_S(rY, 5); + // Units: dimensionless; Initial value: 0.002003390432234504 + double var_chaste_interface__i_Na_L_h_L_gate__h_L = NV_Ith_S(rY, 6); + // Units: dimensionless; Initial value: 0.8946968372659203 + double var_chaste_interface__i_Ca_L_d_gate__d = NV_Ith_S(rY, 7); + // Units: dimensionless; Initial value: 2.322223865147363e-06 + double var_chaste_interface__i_Ca_L_f_gate__f = NV_Ith_S(rY, 8); + // Units: dimensionless; Initial value: 0.9985607329462358 + double var_chaste_interface__i_Ca_L_f2_gate__f2 = NV_Ith_S(rY, 9); + // Units: dimensionless; Initial value: 0.8173435436674658 + double var_chaste_interface__i_Ca_L_f_Ca_gate__f_Ca = NV_Ith_S(rY, 10); + // Units: dimensionless; Initial value: 0.9610551285529658 + double var_chaste_interface__i_Ca_L_f_Ca2_gate__f_Ca2 = NV_Ith_S(rY, 11); + // Units: dimensionless; Initial value: 0.868690796671854 + double var_chaste_interface__i_Ca_T_b_gate__b = NV_Ith_S(rY, 12); + // Units: dimensionless; Initial value: 0.0002563937630984438 + double var_chaste_interface__i_Ca_T_g_gate__g = NV_Ith_S(rY, 13); + // Units: dimensionless; Initial value: 0.9720432601848331 + double var_chaste_interface__i_to_1_a_gate__a = NV_Ith_S(rY, 14); + // Units: dimensionless; Initial value: 0.0004238729429342389 + double var_chaste_interface__i_to_1_i_gate__i = NV_Ith_S(rY, 15); + // Units: dimensionless; Initial value: 0.9990935802459496 + double var_chaste_interface__i_to_1_i2_gate__i2 = NV_Ith_S(rY, 16); + // Units: dimensionless; Initial value: 0.9777368439681764 + double var_chaste_interface__i_Kr_xr_gate__xr = NV_Ith_S(rY, 17); + // Units: dimensionless; Initial value: 0.07084939408222911 + double var_chaste_interface__i_Ks_xs1_gate__xs1 = NV_Ith_S(rY, 18); + // Units: dimensionless; Initial value: 0.0011737654433043125 + double var_chaste_interface__i_Ks_xs2_gate__xs2 = NV_Ith_S(rY, 19); + // Units: dimensionless; Initial value: 0.001179442867470093 + double var_chaste_interface__i_to_2_a_gate__a = NV_Ith_S(rY, 20); + // Units: dimensionless; Initial value: 0.0014909437525000811 + double var_chaste_interface__intracellular_ion_concentrations__Na_i = NV_Ith_S(rY, 21); + // Units: millimolar; Initial value: 9.927155552932733 + double var_chaste_interface__intracellular_ion_concentrations__Cl_i = NV_Ith_S(rY, 22); + // Units: millimolar; Initial value: 18.904682470140408 + double var_chaste_interface__intracellular_ion_concentrations__K_i = NV_Ith_S(rY, 23); + // Units: millimolar; Initial value: 141.9670801746057 + double var_chaste_interface__Ca_r__Ca_r = NV_Ith_S(rY, 27); + // Units: millimolar; Initial value: 0.00022418117117903934 + + // Lookup table indexing + const bool _oob_0 = Dynamicaslanidi_Purkinje_model_2009FromCellMLCvodeOpt_LookupTables::Instance()->CheckIndex0(var_chaste_interface__membrane__V); +// LCOV_EXCL_START + if (_oob_0) + EXCEPTION(DumpState("membrane_voltage outside lookup table range", rY)); +// LCOV_EXCL_STOP + const double* const _lt_0_row = Dynamicaslanidi_Purkinje_model_2009FromCellMLCvodeOpt_LookupTables::Instance()->IndexTable0(var_chaste_interface__membrane__V); + + const double var_equilibrium_potentials__E_K = 26.712338705498265 * log(NV_Ith_S(mParameters, 5) / var_chaste_interface__intracellular_ion_concentrations__K_i); // millivolt + const double var_equilibrium_potentials__E_Na = 26.712338705498265 * log(NV_Ith_S(mParameters, 6) / var_chaste_interface__intracellular_ion_concentrations__Na_i); // millivolt + const double var_membrane__i_tot = 0.0077250000000000001 * var_chaste_interface__membrane__V + 0.0060102762087371094 * log(100 / var_chaste_interface__intracellular_ion_concentrations__Cl_i) - 0.0025000000000000001 * var_equilibrium_potentials__E_Na - 0.0050000000000000001 * var_equilibrium_potentials__E_K + (0.0040000000000000001 + 0.4389381125701739 * sqrt(NV_Ith_S(mParameters, 5)) * NV_Ith_S(mParameters, 11) / ((1 + exp(-14.1227775 + 0.23849999999999999 * var_chaste_interface__membrane__V - 0.23849999999999999 * var_equilibrium_potentials__E_K)) * (1.02 / (1 + exp(-14.1227775 + 0.23849999999999999 * var_chaste_interface__membrane__V - 0.23849999999999999 * var_equilibrium_potentials__E_K)) + (0.49124000000000001 * exp(0.43983232 + 0.080320000000000003 * var_chaste_interface__membrane__V - 0.080320000000000003 * var_equilibrium_potentials__E_K) + exp(-36.698642499999998 + 0.061749999999999999 * var_chaste_interface__membrane__V - 0.061749999999999999 * var_equilibrium_potentials__E_K)) / (1 + exp(-2.4444678999999998 + 0.51429999999999998 * var_equilibrium_potentials__E_K - 0.51429999999999998 * var_chaste_interface__membrane__V))))) * (-var_equilibrium_potentials__E_K + var_chaste_interface__membrane__V) + 0.0027599999999999999 * (-var_equilibrium_potentials__E_K + var_chaste_interface__membrane__V) / (_lt_0_row[0]) + 0.057500000000000002 * var_chaste_interface__Ca_i__Ca_i / (0.00050000000000000001 + var_chaste_interface__Ca_i__Ca_i) + 0.13 * (-50 + var_chaste_interface__membrane__V) * var_chaste_interface__i_Ca_T_b_gate__b * var_chaste_interface__i_Ca_T_g_gate__g + 0.037374999999999999 * pow(var_chaste_interface__i_Na_L_m_L_gate__m_L, 3) * (-var_equilibrium_potentials__E_Na + var_chaste_interface__membrane__V) * var_chaste_interface__i_Na_L_h_L_gate__h_L + 0.0028824983370007683 * (-0.34100000000000003 * NV_Ith_S(mParameters, 4) + var_chaste_interface__Ca_i__Ca_i * _lt_0_row[1]) * var_chaste_interface__membrane__V / (_lt_0_row[2]) + (-1.5 * pow(NV_Ith_S(mParameters, 6), 3) * var_chaste_interface__Ca_i__Ca_i * _lt_0_row[3] + 0.40000000000000002 * pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, 3) * NV_Ith_S(mParameters, 14) * NV_Ith_S(mParameters, 4) * _lt_0_row[4]) / ((_lt_0_row[5]) * (1 + 6.9444444444444451e-9 / pow(var_chaste_interface__Ca_i__Ca_i, 2)) * (1004882.8125 * var_chaste_interface__Ca_i__Ca_i + 1.3 * pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, 3) + pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, 3) * NV_Ith_S(mParameters, 4) + 1.5 * pow(NV_Ith_S(mParameters, 6), 3) * var_chaste_interface__Ca_i__Ca_i + 0.0035999999999999999 * pow(NV_Ith_S(mParameters, 6), 3) * (1 + 0.081300813008130079 * var_chaste_interface__intracellular_ion_concentrations__Na_i) + 1860.8670000000004 * (1 + 416.66666666666669 * var_chaste_interface__Ca_i__Ca_i) * NV_Ith_S(mParameters, 4))) + pow(var_chaste_interface__i_Na_m_gate__m, 3) * (-var_equilibrium_potentials__E_Na + var_chaste_interface__membrane__V) * (0.20000000000000001 * var_chaste_interface__i_Na_j_gate__j + 0.80000000000000004 * var_chaste_interface__i_Na_h_gate__h) * NV_Ith_S(mParameters, 8) + (-var_equilibrium_potentials__E_K + var_chaste_interface__membrane__V) * (0.20000000000000001 * var_chaste_interface__i_to_1_i2_gate__i2 + 0.80000000000000004 * var_chaste_interface__i_to_1_i_gate__i) * NV_Ith_S(mParameters, 15) * var_chaste_interface__i_to_1_a_gate__a + 0.61875000000000002 * NV_Ith_S(mParameters, 5) / ((1 + 100 / pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, 2)) * (1.5 + NV_Ith_S(mParameters, 5)) * (1 + _lt_0_row[7] + 0.036499999999999998 * (-0.14285714285714285 + 0.14285714285714285 * exp(0.01485884101040119 * NV_Ith_S(mParameters, 6))) * _lt_0_row[6])) + 0.028896009762002683 * (_lt_0_row[8] + var_chaste_interface__intracellular_ion_concentrations__Cl_i) * var_chaste_interface__i_to_2_a_gate__a * var_chaste_interface__membrane__V / (_lt_0_row[9]) + (1 + 0.59999999999999998 / (1 + 6.4818210260626455e-7 * pow((1 / var_chaste_interface__Ca_i__Ca_i), 1.3999999999999999))) * (-26.712338705498265 * log((0.018329999999999999 * NV_Ith_S(mParameters, 6) + NV_Ith_S(mParameters, 5)) / (0.018329999999999999 * var_chaste_interface__intracellular_ion_concentrations__Na_i + var_chaste_interface__intracellular_ion_concentrations__K_i)) + var_chaste_interface__membrane__V) * NV_Ith_S(mParameters, 13) * var_chaste_interface__i_Ks_xs1_gate__xs1 * var_chaste_interface__i_Ks_xs2_gate__xs2 + 0.43033148291193518 * sqrt(NV_Ith_S(mParameters, 5)) * (-var_equilibrium_potentials__E_K + var_chaste_interface__membrane__V) * NV_Ith_S(mParameters, 12) * var_chaste_interface__i_Kr_xr_gate__xr / (_lt_0_row[10]) + 3.510865186083326 * (-15 + var_chaste_interface__membrane__V) * (-0.34100000000000003 * NV_Ith_S(mParameters, 4) + var_chaste_interface__Ca_r__Ca_r * _lt_0_row[11]) * NV_Ith_S(mParameters, 7) * var_chaste_interface__i_Ca_L_d_gate__d * var_chaste_interface__i_Ca_L_f2_gate__f2 * var_chaste_interface__i_Ca_L_f_Ca2_gate__f_Ca2 * var_chaste_interface__i_Ca_L_f_Ca_gate__f_Ca * var_chaste_interface__i_Ca_L_f_gate__f / (_lt_0_row[12]); // microA_per_microF + const double var_chaste_interface__i_ionic = HeartConfig::Instance()->GetCapacitance() * var_membrane__i_tot; // uA_per_cm2 + + const double i_ionic = var_chaste_interface__i_ionic; + if (made_new_cvode_vector) + { + DeleteVector(rY); + } + EXCEPT_IF_NOT(!std::isnan(i_ionic)); + return i_ionic; + } + + void Dynamicaslanidi_Purkinje_model_2009FromCellMLCvodeOpt::EvaluateYDerivatives(double var_chaste_interface__environment__time, const N_Vector rY, N_Vector rDY) + { + // Inputs: + // Time units: millisecond + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : mp_membrane_voltage_modifier->Calc(NV_Ith_S(rY, 0), var_chaste_interface__environment__time)); + // Units: millivolt; Initial value: -83.43812846286808 + double var_chaste_interface__Ca_i__Ca_i = mp_cytosolic_calcium_concentration_modifier->Calc(NV_Ith_S(rY, 1), var_chaste_interface__environment__time); + // Units: millimolar; Initial value: 0.00022355433459434943 + double var_chaste_interface__i_Na_m_gate__m = mp_membrane_fast_sodium_current_m_gate_modifier->Calc(NV_Ith_S(rY, 2), var_chaste_interface__environment__time); + // Units: dimensionless; Initial value: 0.002003390432234504 + double var_chaste_interface__i_Na_h_gate__h = mp_membrane_fast_sodium_current_h_gate_modifier->Calc(NV_Ith_S(rY, 3), var_chaste_interface__environment__time); + // Units: dimensionless; Initial value: 0.9786390933308567 + double var_chaste_interface__i_Na_j_gate__j = mp_membrane_fast_sodium_current_j_gate_modifier->Calc(NV_Ith_S(rY, 4), var_chaste_interface__environment__time); + // Units: dimensionless; Initial value: 0.09866447258167589 + double var_chaste_interface__i_Na_L_m_L_gate__m_L = NV_Ith_S(rY, 5); + // Units: dimensionless; Initial value: 0.002003390432234504 + double var_chaste_interface__i_Na_L_h_L_gate__h_L = NV_Ith_S(rY, 6); + // Units: dimensionless; Initial value: 0.8946968372659203 + double var_chaste_interface__i_Ca_L_d_gate__d = mp_membrane_L_type_calcium_current_d_gate_modifier->Calc(NV_Ith_S(rY, 7), var_chaste_interface__environment__time); + // Units: dimensionless; Initial value: 2.322223865147363e-06 + double var_chaste_interface__i_Ca_L_f_gate__f = mp_membrane_L_type_calcium_current_f_gate_modifier->Calc(NV_Ith_S(rY, 8), var_chaste_interface__environment__time); + // Units: dimensionless; Initial value: 0.9985607329462358 + double var_chaste_interface__i_Ca_L_f2_gate__f2 = mp_membrane_L_type_calcium_current_f2_gate_modifier->Calc(NV_Ith_S(rY, 9), var_chaste_interface__environment__time); + // Units: dimensionless; Initial value: 0.8173435436674658 + double var_chaste_interface__i_Ca_L_f_Ca_gate__f_Ca = mp_membrane_L_type_calcium_current_fCa_gate_modifier->Calc(NV_Ith_S(rY, 10), var_chaste_interface__environment__time); + // Units: dimensionless; Initial value: 0.9610551285529658 + double var_chaste_interface__i_Ca_L_f_Ca2_gate__f_Ca2 = mp_membrane_L_type_calcium_current_fCa2_gate_modifier->Calc(NV_Ith_S(rY, 11), var_chaste_interface__environment__time); + // Units: dimensionless; Initial value: 0.868690796671854 + double var_chaste_interface__i_Ca_T_b_gate__b = NV_Ith_S(rY, 12); + // Units: dimensionless; Initial value: 0.0002563937630984438 + double var_chaste_interface__i_Ca_T_g_gate__g = NV_Ith_S(rY, 13); + // Units: dimensionless; Initial value: 0.9720432601848331 + double var_chaste_interface__i_to_1_a_gate__a = NV_Ith_S(rY, 14); + // Units: dimensionless; Initial value: 0.0004238729429342389 + double var_chaste_interface__i_to_1_i_gate__i = NV_Ith_S(rY, 15); + // Units: dimensionless; Initial value: 0.9990935802459496 + double var_chaste_interface__i_to_1_i2_gate__i2 = NV_Ith_S(rY, 16); + // Units: dimensionless; Initial value: 0.9777368439681764 + double var_chaste_interface__i_Kr_xr_gate__xr = NV_Ith_S(rY, 17); + // Units: dimensionless; Initial value: 0.07084939408222911 + double var_chaste_interface__i_Ks_xs1_gate__xs1 = NV_Ith_S(rY, 18); + // Units: dimensionless; Initial value: 0.0011737654433043125 + double var_chaste_interface__i_Ks_xs2_gate__xs2 = NV_Ith_S(rY, 19); + // Units: dimensionless; Initial value: 0.001179442867470093 + double var_chaste_interface__i_to_2_a_gate__a = NV_Ith_S(rY, 20); + // Units: dimensionless; Initial value: 0.0014909437525000811 + double var_chaste_interface__intracellular_ion_concentrations__Na_i = mp_cytosolic_sodium_concentration_modifier->Calc(NV_Ith_S(rY, 21), var_chaste_interface__environment__time); + // Units: millimolar; Initial value: 9.927155552932733 + double var_chaste_interface__intracellular_ion_concentrations__Cl_i = NV_Ith_S(rY, 22); + // Units: millimolar; Initial value: 18.904682470140408 + double var_chaste_interface__intracellular_ion_concentrations__K_i = mp_cytosolic_potassium_concentration_modifier->Calc(NV_Ith_S(rY, 23), var_chaste_interface__environment__time); + // Units: millimolar; Initial value: 141.9670801746057 + double var_chaste_interface__Ca_MK_act__Ca_MK_trap = NV_Ith_S(rY, 24); + // Units: dimensionless; Initial value: 8.789168284782809e-06 + double var_chaste_interface__Ca_NSR__Ca_NSR = NV_Ith_S(rY, 25); + // Units: millimolar; Initial value: 1.2132524695849454 + double var_chaste_interface__Ca_JSR__Ca_JSR = mp_JSR_calcium_concentration_modifier->Calc(NV_Ith_S(rY, 26), var_chaste_interface__environment__time); + // Units: millimolar; Initial value: 1.1433050636518596 + double var_chaste_interface__Ca_r__Ca_r = mp_dyadic_space_calcium_concentration_modifier->Calc(NV_Ith_S(rY, 27), var_chaste_interface__environment__time); + // Units: millimolar; Initial value: 0.00022418117117903934 + double var_chaste_interface__q_rel_ri_gate__ri = NV_Ith_S(rY, 28); + // Units: dimensionless; Initial value: 0.7802870066567904 + double var_chaste_interface__q_rel_ro_gate__ro = NV_Ith_S(rY, 29); + // Units: dimensionless; Initial value: 1.2785734760674763e-09 + + // Lookup table indexing + const bool _oob_0 = Dynamicaslanidi_Purkinje_model_2009FromCellMLCvodeOpt_LookupTables::Instance()->CheckIndex0(var_chaste_interface__membrane__V); +// LCOV_EXCL_START + if (_oob_0) + EXCEPTION(DumpState("membrane_voltage outside lookup table range", rY , var_chaste_interface__environment__time)); +// LCOV_EXCL_STOP + const double* const _lt_0_row = Dynamicaslanidi_Purkinje_model_2009FromCellMLCvodeOpt_LookupTables::Instance()->IndexTable0(var_chaste_interface__membrane__V); + + // Mathematics + double d_dt_chaste_interface_var_membrane__V; + const double var_Ca_MK_act__Ca_MK_bound = 0.050000000000000003 * (1 - var_chaste_interface__Ca_MK_act__Ca_MK_trap) / (1 + 0.14999999999999999 / var_chaste_interface__Ca_r__Ca_r); // dimensionless + const double var_Ca_MK_act__Ca_MK_act = var_Ca_MK_act__Ca_MK_bound + var_chaste_interface__Ca_MK_act__Ca_MK_trap; // dimensionless + const double var_Ca_r__q_diff = 5 * var_chaste_interface__Ca_r__Ca_r - 5 * var_chaste_interface__Ca_i__Ca_i; // millimolar_per_millisecond + const double d_dt_chaste_interface_var_Ca_MK_act__Ca_MK_trap = -0.00068000000000000005 * var_chaste_interface__Ca_MK_act__Ca_MK_trap + 0.050000000000000003 * (var_Ca_MK_act__Ca_MK_bound + var_chaste_interface__Ca_MK_act__Ca_MK_trap) * var_Ca_MK_act__Ca_MK_bound; // 1 / millisecond + const double var_i_Ca_p__i_Ca_p = 0.057500000000000002 * var_chaste_interface__Ca_i__Ca_i / (0.00050000000000000001 + var_chaste_interface__Ca_i__Ca_i); // microA_per_microF + const double d_dt_chaste_interface_var_i_to_2_a_gate__a = 1 / (1 + 0.1502 / var_chaste_interface__Ca_r__Ca_r) - var_chaste_interface__i_to_2_a_gate__a; // 1 / millisecond + const double d_dt_chaste_interface_var_i_Ca_L_d_gate__d = (-var_chaste_interface__i_Ca_L_d_gate__d + _lt_0_row[13]) / (_lt_0_row[14]); // 1 / millisecond + const double d_dt_chaste_interface_var_i_Ca_L_f2_gate__f2 = (-var_chaste_interface__i_Ca_L_f2_gate__f2 + _lt_0_row[15]) / (38 + 24.217200000000005 * pow((-1 + 0.053763440860215048 * var_chaste_interface__membrane__V), 2)); // 1 / millisecond + const double d_dt_chaste_interface_var_i_Ca_L_f_gate__f = (-var_chaste_interface__i_Ca_L_f_gate__f + _lt_0_row[15]) / (4 + 0.03125 * pow((-1 + 0.40000000000000002 * var_chaste_interface__membrane__V), 2)); // 1 / millisecond + const double d_dt_chaste_interface_var_i_Ca_T_b_gate__b = (-var_chaste_interface__i_Ca_T_b_gate__b + _lt_0_row[16]) * (_lt_0_row[17]); // 1 / millisecond + const double d_dt_chaste_interface_var_i_Ca_T_g_gate__g = (-var_chaste_interface__i_Ca_T_g_gate__g + _lt_0_row[18]) * (_lt_0_row[19]); // 1 / millisecond + const double d_dt_chaste_interface_var_i_Kr_xr_gate__xr = (-var_chaste_interface__i_Kr_xr_gate__xr + _lt_0_row[20]) / (_lt_0_row[21]); // 1 / millisecond + const double d_dt_chaste_interface_var_i_Ks_xs1_gate__xs1 = (-var_chaste_interface__i_Ks_xs1_gate__xs1 + _lt_0_row[22]) * (_lt_0_row[23]); // 1 / millisecond + const double d_dt_chaste_interface_var_i_Ks_xs2_gate__xs2 = (-var_chaste_interface__i_Ks_xs2_gate__xs2 + _lt_0_row[22]) * (_lt_0_row[24]); // 1 / millisecond + const double d_dt_chaste_interface_var_i_Na_L_h_L_gate__h_L = (-var_chaste_interface__i_Na_L_h_L_gate__h_L + _lt_0_row[25]) / (_lt_0_row[26]); // 1 / millisecond + const double var_i_Na_L_m_L_gate__alpha_m_L = _lt_0_row[27]; // per_millisecond + const double var_i_Na_L_m_L_gate__beta_m_L = _lt_0_row[28]; // per_millisecond + const double d_dt_chaste_interface_var_i_Na_L_m_L_gate__m_L = (-var_chaste_interface__i_Na_L_m_L_gate__m_L + var_i_Na_L_m_L_gate__alpha_m_L / (var_i_Na_L_m_L_gate__alpha_m_L + var_i_Na_L_m_L_gate__beta_m_L)) * (var_i_Na_L_m_L_gate__alpha_m_L + var_i_Na_L_m_L_gate__beta_m_L); // 1 / millisecond + const double var_i_Na_h_gate__alpha_h = ((var_chaste_interface__membrane__V < -40) ? (0.13500000000000001 * exp(-11.764705882352942 + 0.14705882352941177 * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(NV_Ith_S(mParameters, 10), var_chaste_interface__environment__time) - 0.14705882352941177 * var_chaste_interface__membrane__V)) : (0)); // per_millisecond + const double var_i_Na_h_gate__beta_h = ((var_chaste_interface__membrane__V < -40) ? (310000 * exp(0.34999999999999998 * var_chaste_interface__membrane__V - 0.34999999999999998 * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(NV_Ith_S(mParameters, 10), var_chaste_interface__environment__time)) + 3.5600000000000001 * exp(0.079000000000000001 * var_chaste_interface__membrane__V - 0.079000000000000001 * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(NV_Ith_S(mParameters, 10), var_chaste_interface__environment__time))) : (7.6923076923076916 / (1 + exp(-0.96036036036036043 + 0.0900900900900901 * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(NV_Ith_S(mParameters, 10), var_chaste_interface__environment__time) - 0.0900900900900901 * var_chaste_interface__membrane__V)))); // per_millisecond + const double d_dt_chaste_interface_var_i_Na_h_gate__h = (var_i_Na_h_gate__alpha_h + var_i_Na_h_gate__beta_h) * (-var_chaste_interface__i_Na_h_gate__h + 0.01 * mp_membrane_fast_sodium_current_reduced_inactivation_modifier->Calc(NV_Ith_S(mParameters, 9), var_chaste_interface__environment__time) + (1 - 0.01 * mp_membrane_fast_sodium_current_reduced_inactivation_modifier->Calc(NV_Ith_S(mParameters, 9), var_chaste_interface__environment__time)) * var_i_Na_h_gate__alpha_h / (var_i_Na_h_gate__alpha_h + var_i_Na_h_gate__beta_h)); // 1 / millisecond + const double var_i_Na_j_gate__alpha_j = ((var_chaste_interface__membrane__V < -40) ? ((37.780000000000001 + var_chaste_interface__membrane__V) * (-127140 * exp(0.24440000000000001 * var_chaste_interface__membrane__V - 0.24440000000000001 * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(NV_Ith_S(mParameters, 10), var_chaste_interface__environment__time)) - 3.4740000000000003e-5 * exp(0.043909999999999998 * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(NV_Ith_S(mParameters, 10), var_chaste_interface__environment__time) - 0.043909999999999998 * var_chaste_interface__membrane__V)) / (1 + exp(24.640530000000002 + 0.311 * var_chaste_interface__membrane__V - 0.311 * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(NV_Ith_S(mParameters, 10), var_chaste_interface__environment__time)))) : (0)); // per_millisecond + const double var_i_Na_j_gate__beta_j = ((var_chaste_interface__membrane__V < -40) ? (0.1212 * exp(0.01052 * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(NV_Ith_S(mParameters, 10), var_chaste_interface__environment__time) - 0.01052 * var_chaste_interface__membrane__V) / (1 + exp(-5.5312920000000005 + 0.13780000000000001 * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(NV_Ith_S(mParameters, 10), var_chaste_interface__environment__time) - 0.13780000000000001 * var_chaste_interface__membrane__V))) : (0.29999999999999999 * exp(2.5349999999999999e-7 * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(NV_Ith_S(mParameters, 10), var_chaste_interface__environment__time) - 2.5349999999999999e-7 * var_chaste_interface__membrane__V) / (1 + exp(-3.2000000000000002 + 0.10000000000000001 * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(NV_Ith_S(mParameters, 10), var_chaste_interface__environment__time) - 0.10000000000000001 * var_chaste_interface__membrane__V)))); // per_millisecond + const double d_dt_chaste_interface_var_i_Na_j_gate__j = (var_i_Na_j_gate__alpha_j + var_i_Na_j_gate__beta_j) * (-var_chaste_interface__i_Na_j_gate__j + 0.01 * mp_membrane_fast_sodium_current_reduced_inactivation_modifier->Calc(NV_Ith_S(mParameters, 9), var_chaste_interface__environment__time) + (1 - 0.01 * mp_membrane_fast_sodium_current_reduced_inactivation_modifier->Calc(NV_Ith_S(mParameters, 9), var_chaste_interface__environment__time)) * var_i_Na_j_gate__alpha_j / (var_i_Na_j_gate__alpha_j + var_i_Na_j_gate__beta_j)); // 1 / millisecond + const double var_i_Na_m_gate__alpha_m = _lt_0_row[27]; // per_millisecond + const double var_i_Na_m_gate__beta_m = _lt_0_row[28]; // per_millisecond + const double d_dt_chaste_interface_var_i_Na_m_gate__m = (-var_chaste_interface__i_Na_m_gate__m + var_i_Na_m_gate__alpha_m / (var_i_Na_m_gate__alpha_m + var_i_Na_m_gate__beta_m)) * (var_i_Na_m_gate__alpha_m + var_i_Na_m_gate__beta_m); // 1 / millisecond + const double var_i_to_1_a_gate__alpha_a = _lt_0_row[29]; // per_millisecond + const double var_i_to_1_a_gate__beta_a = _lt_0_row[30]; // per_millisecond + const double d_dt_chaste_interface_var_i_to_1_a_gate__a = (-var_chaste_interface__i_to_1_a_gate__a + var_i_to_1_a_gate__alpha_a / (var_i_to_1_a_gate__alpha_a + var_i_to_1_a_gate__beta_a)) * (var_i_to_1_a_gate__alpha_a + var_i_to_1_a_gate__beta_a); // 1 / millisecond + const double d_dt_chaste_interface_var_i_to_1_i2_gate__i2 = (-var_chaste_interface__i_to_1_i2_gate__i2 + _lt_0_row[31]) / (_lt_0_row[32]); // 1 / millisecond + const double d_dt_chaste_interface_var_i_to_1_i_gate__i = (-var_chaste_interface__i_to_1_i_gate__i + _lt_0_row[33]) / (_lt_0_row[34]); // 1 / millisecond + const double var_equilibrium_potentials__E_Cl = -26.712338705498265 * log(100 / var_chaste_interface__intracellular_ion_concentrations__Cl_i); // millivolt + const double var_background_currents__i_Cl_b = 0.00022499999999999999 * var_chaste_interface__membrane__V - 0.00022499999999999999 * var_equilibrium_potentials__E_Cl; // microA_per_microF + const double var_equilibrium_potentials__E_K = 26.712338705498265 * log(mp_extracellular_potassium_concentration_modifier->Calc(NV_Ith_S(mParameters, 5), var_chaste_interface__environment__time) / var_chaste_interface__intracellular_ion_concentrations__K_i); // millivolt + const double var_CT_K_Cl__CT_K_Cl = 7.0755999999999996e-6 * (-var_equilibrium_potentials__E_Cl + var_equilibrium_potentials__E_K) / (87.825100000000006 - var_equilibrium_potentials__E_Cl + var_equilibrium_potentials__E_K); // millimolar_per_millisecond + const double var_background_currents__i_K_b = 0.0050000000000000001 * var_chaste_interface__membrane__V - 0.0050000000000000001 * var_equilibrium_potentials__E_K; // microA_per_microF + const double var_equilibrium_potentials__E_Na = 26.712338705498265 * log(mp_extracellular_sodium_concentration_modifier->Calc(NV_Ith_S(mParameters, 6), var_chaste_interface__environment__time) / var_chaste_interface__intracellular_ion_concentrations__Na_i); // millivolt + const double var_CT_Na_Cl__CT_Na_Cl = 9.8442999999999999e-6 * pow((-var_equilibrium_potentials__E_Cl + var_equilibrium_potentials__E_Na), 4) / (59494197.640692554 + pow((-var_equilibrium_potentials__E_Cl + var_equilibrium_potentials__E_Na), 4)); // millimolar_per_millisecond + const double var_background_currents__i_Na_b = 0.0025000000000000001 * var_chaste_interface__membrane__V - 0.0025000000000000001 * var_equilibrium_potentials__E_Na; // microA_per_microF + const double var_i_K1__i_K1 = mp_i_K1__i_K1_modifier->Calc((0.0040000000000000001 + 0.4389381125701739 * sqrt(mp_extracellular_potassium_concentration_modifier->Calc(NV_Ith_S(mParameters, 5), var_chaste_interface__environment__time)) * mp_membrane_inward_rectifier_potassium_current_conductance_modifier->Calc(NV_Ith_S(mParameters, 11), var_chaste_interface__environment__time) / ((1 + exp(-14.1227775 + 0.23849999999999999 * var_chaste_interface__membrane__V - 0.23849999999999999 * var_equilibrium_potentials__E_K)) * (1.02 / (1 + exp(-14.1227775 + 0.23849999999999999 * var_chaste_interface__membrane__V - 0.23849999999999999 * var_equilibrium_potentials__E_K)) + (0.49124000000000001 * exp(0.43983232 + 0.080320000000000003 * var_chaste_interface__membrane__V - 0.080320000000000003 * var_equilibrium_potentials__E_K) + exp(-36.698642499999998 + 0.061749999999999999 * var_chaste_interface__membrane__V - 0.061749999999999999 * var_equilibrium_potentials__E_K)) / (1 + exp(-2.4444678999999998 + 0.51429999999999998 * var_equilibrium_potentials__E_K - 0.51429999999999998 * var_chaste_interface__membrane__V))))) * (-var_equilibrium_potentials__E_K + var_chaste_interface__membrane__V), var_chaste_interface__environment__time); // microA_per_microF + const double var_i_K_p__i_K_p = 0.0027599999999999999 * (-var_equilibrium_potentials__E_K + var_chaste_interface__membrane__V) / (_lt_0_row[0]); // microA_per_microF + const double var_i_Kr__i_Kr = mp_i_Kr__i_Kr_modifier->Calc(0.43033148291193518 * sqrt(mp_extracellular_potassium_concentration_modifier->Calc(NV_Ith_S(mParameters, 5), var_chaste_interface__environment__time)) * (-var_equilibrium_potentials__E_K + var_chaste_interface__membrane__V) * mp_membrane_rapid_delayed_rectifier_potassium_current_conductance_modifier->Calc(NV_Ith_S(mParameters, 12), var_chaste_interface__environment__time) * var_chaste_interface__i_Kr_xr_gate__xr / (_lt_0_row[10]), var_chaste_interface__environment__time); // microA_per_microF + const double var_i_Ks__i_Ks = mp_i_Ks__i_Ks_modifier->Calc((1 + 0.59999999999999998 / (1 + 6.4818210260626455e-7 * pow((1 / var_chaste_interface__Ca_i__Ca_i), 1.3999999999999999))) * (-26.712338705498265 * log((0.018329999999999999 * mp_extracellular_sodium_concentration_modifier->Calc(NV_Ith_S(mParameters, 6), var_chaste_interface__environment__time) + mp_extracellular_potassium_concentration_modifier->Calc(NV_Ith_S(mParameters, 5), var_chaste_interface__environment__time)) / (0.018329999999999999 * var_chaste_interface__intracellular_ion_concentrations__Na_i + var_chaste_interface__intracellular_ion_concentrations__K_i)) + var_chaste_interface__membrane__V) * mp_membrane_slow_delayed_rectifier_potassium_current_conductance_modifier->Calc(NV_Ith_S(mParameters, 13), var_chaste_interface__environment__time) * var_chaste_interface__i_Ks_xs1_gate__xs1 * var_chaste_interface__i_Ks_xs2_gate__xs2, var_chaste_interface__environment__time); // microA_per_microF + const double var_i_Na__i_Na = mp_i_Na__i_Na_modifier->Calc(pow(var_chaste_interface__i_Na_m_gate__m, 3) * (-var_equilibrium_potentials__E_Na + var_chaste_interface__membrane__V) * (0.20000000000000001 * var_chaste_interface__i_Na_j_gate__j + 0.80000000000000004 * var_chaste_interface__i_Na_h_gate__h) * mp_membrane_fast_sodium_current_conductance_modifier->Calc(NV_Ith_S(mParameters, 8), var_chaste_interface__environment__time), var_chaste_interface__environment__time); // microA_per_microF + const double var_i_NaCa__i_NaCa = mp_i_NaCa__i_NaCa_modifier->Calc((-1.5 * pow(mp_extracellular_sodium_concentration_modifier->Calc(NV_Ith_S(mParameters, 6), var_chaste_interface__environment__time), 3) * var_chaste_interface__Ca_i__Ca_i * _lt_0_row[3] + 0.40000000000000002 * pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, 3) * mp_membrane_sodium_calcium_exchanger_current_conductance_modifier->Calc(NV_Ith_S(mParameters, 14), var_chaste_interface__environment__time) * mp_extracellular_calcium_concentration_modifier->Calc(NV_Ith_S(mParameters, 4), var_chaste_interface__environment__time) * _lt_0_row[4]) / ((_lt_0_row[5]) * (1 + 6.9444444444444451e-9 / pow(var_chaste_interface__Ca_i__Ca_i, 2)) * (1004882.8125 * var_chaste_interface__Ca_i__Ca_i + 1.3 * pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, 3) + pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, 3) * mp_extracellular_calcium_concentration_modifier->Calc(NV_Ith_S(mParameters, 4), var_chaste_interface__environment__time) + 1.5 * pow(mp_extracellular_sodium_concentration_modifier->Calc(NV_Ith_S(mParameters, 6), var_chaste_interface__environment__time), 3) * var_chaste_interface__Ca_i__Ca_i + 0.0035999999999999999 * pow(mp_extracellular_sodium_concentration_modifier->Calc(NV_Ith_S(mParameters, 6), var_chaste_interface__environment__time), 3) * (1 + 0.081300813008130079 * var_chaste_interface__intracellular_ion_concentrations__Na_i) + 1860.8670000000004 * (1 + 416.66666666666669 * var_chaste_interface__Ca_i__Ca_i) * mp_extracellular_calcium_concentration_modifier->Calc(NV_Ith_S(mParameters, 4), var_chaste_interface__environment__time))), var_chaste_interface__environment__time); // microA_per_microF + const double var_i_NaK__i_NaK = 0.61875000000000002 * mp_extracellular_potassium_concentration_modifier->Calc(NV_Ith_S(mParameters, 5), var_chaste_interface__environment__time) / ((1 + 100 / pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, 2)) * (1.5 + mp_extracellular_potassium_concentration_modifier->Calc(NV_Ith_S(mParameters, 5), var_chaste_interface__environment__time)) * (1 + _lt_0_row[7] + 0.036499999999999998 * (-0.14285714285714285 + 0.14285714285714285 * exp(0.01485884101040119 * mp_extracellular_sodium_concentration_modifier->Calc(NV_Ith_S(mParameters, 6), var_chaste_interface__environment__time))) * _lt_0_row[6])); // microA_per_microF + const double var_i_Na_L__i_Na_L = 0.037374999999999999 * pow(var_chaste_interface__i_Na_L_m_L_gate__m_L, 3) * (-var_equilibrium_potentials__E_Na + var_chaste_interface__membrane__V) * var_chaste_interface__i_Na_L_h_L_gate__h_L; // microA_per_microF + const double var_i_to_1__i_to_1 = mp_i_to_1__i_to_1_modifier->Calc((-var_equilibrium_potentials__E_K + var_chaste_interface__membrane__V) * (0.20000000000000001 * var_chaste_interface__i_to_1_i2_gate__i2 + 0.80000000000000004 * var_chaste_interface__i_to_1_i_gate__i) * mp_membrane_transient_outward_current_conductance_modifier->Calc(NV_Ith_S(mParameters, 15), var_chaste_interface__environment__time) * var_chaste_interface__i_to_1_a_gate__a, var_chaste_interface__environment__time); // microA_per_microF + const double var_i_to_2__i_to_2 = 0.028896009762002683 * (_lt_0_row[8] + var_chaste_interface__intracellular_ion_concentrations__Cl_i) * var_chaste_interface__i_to_2_a_gate__a * var_chaste_interface__membrane__V / (_lt_0_row[9]); // microA_per_microF + const double d_dt_chaste_interface_var_intracellular_ion_concentrations__Cl_i = (-6.767281717060562e-9 * var_background_currents__i_Cl_b - 6.767281717060562e-9 * var_i_to_2__i_to_2 + var_CT_K_Cl__CT_K_Cl + var_CT_Na_Cl__CT_Na_Cl) * mp_concentration_clamp_onoff_modifier->Calc(NV_Ith_S(mParameters, 3), var_chaste_interface__environment__time); // millimolar / millisecond + const double d_dt_chaste_interface_var_intracellular_ion_concentrations__K_i = (1.3534563434121124e-8 * var_i_NaK__i_NaK - 6.767281717060562e-9 * var_background_currents__i_K_b - 6.767281717060562e-9 * var_i_K1__i_K1 - 6.767281717060562e-9 * var_i_K_p__i_K_p - 6.767281717060562e-9 * var_i_Kr__i_Kr - 6.767281717060562e-9 * var_i_Ks__i_Ks - 6.767281717060562e-9 * var_i_to_1__i_to_1 + var_CT_K_Cl__CT_K_Cl) * mp_concentration_clamp_onoff_modifier->Calc(NV_Ith_S(mParameters, 3), var_chaste_interface__environment__time); // millimolar / millisecond + const double d_dt_chaste_interface_var_intracellular_ion_concentrations__Na_i = (-2.0301845151181685e-8 * var_i_NaCa__i_NaCa - 2.0301845151181685e-8 * var_i_NaK__i_NaK - 6.767281717060562e-9 * var_background_currents__i_Na_b - 6.767281717060562e-9 * var_i_Na__i_Na - 6.767281717060562e-9 * var_i_Na_L__i_Na_L + var_CT_Na_Cl__CT_Na_Cl) * mp_concentration_clamp_onoff_modifier->Calc(NV_Ith_S(mParameters, 3), var_chaste_interface__environment__time); // millimolar / millisecond + const double var_background_currents__i_Ca_b = 0.0028824983370007683 * (-0.34100000000000003 * mp_extracellular_calcium_concentration_modifier->Calc(NV_Ith_S(mParameters, 4), var_chaste_interface__environment__time) + var_chaste_interface__Ca_i__Ca_i * _lt_0_row[1]) * var_chaste_interface__membrane__V / (_lt_0_row[2]); // microA_per_microF + const double var_i_Ca_L__i_Ca_L_max = 3.510865186083326 * (-15 + var_chaste_interface__membrane__V) * (-0.34100000000000003 * mp_extracellular_calcium_concentration_modifier->Calc(NV_Ith_S(mParameters, 4), var_chaste_interface__environment__time) + var_chaste_interface__Ca_r__Ca_r * _lt_0_row[11]) / (_lt_0_row[12]); // microA_per_microF + const double var_i_Ca_L__i_Ca_L = mp_i_Ca_L__i_Ca_L_modifier->Calc(mp_membrane_L_type_calcium_current_conductance_modifier->Calc(NV_Ith_S(mParameters, 7), var_chaste_interface__environment__time) * var_i_Ca_L__i_Ca_L_max * var_chaste_interface__i_Ca_L_d_gate__d * var_chaste_interface__i_Ca_L_f2_gate__f2 * var_chaste_interface__i_Ca_L_f_Ca2_gate__f_Ca2 * var_chaste_interface__i_Ca_L_f_Ca_gate__f_Ca * var_chaste_interface__i_Ca_L_f_gate__f, var_chaste_interface__environment__time); // microA_per_microF + const double d_dt_chaste_interface_var_i_Ca_L_f_Ca2_gate__f_Ca2 = (-var_chaste_interface__i_Ca_L_f_Ca2_gate__f_Ca2 + 1 / (1 - 100 * var_i_Ca_L__i_Ca_L)) / (125 + 300 / (1 + exp(-4.375 - 25 * var_i_Ca_L__i_Ca_L))); // 1 / millisecond + const double d_dt_chaste_interface_var_i_Ca_L_f_Ca_gate__f_Ca = (0.14999999999999999 - var_chaste_interface__i_Ca_L_f_Ca_gate__f_Ca + 0.55000000000000004 / (1 + 333.33333333333331 * var_chaste_interface__Ca_r__Ca_r) + 0.29999999999999999 / (1 - 20 * var_i_Ca_L__i_Ca_L)) / (0.5 + 1 / (1 + 333.33333333333331 * var_chaste_interface__Ca_r__Ca_r) + 10 * var_Ca_MK_act__Ca_MK_act / (0.14999999999999999 + var_Ca_MK_act__Ca_MK_act)); // 1 / millisecond + const double var_q_leak__q_leak = 0.066666666666666666 * var_chaste_interface__Ca_NSR__Ca_NSR * mp_SR_leak_current_max_modifier->Calc(NV_Ith_S(mParameters, 0), var_chaste_interface__environment__time); // millimolar_per_millisecond + const double var_q_rel_ri_gate__Ca_fac = 1 / (1 + exp(3.3333333333333335 + 66.666666666666671 * var_i_Ca_L__i_Ca_L)); // millimolar + const double d_dt_chaste_interface_var_q_rel_ri_gate__ri = (-var_chaste_interface__q_rel_ri_gate__ri + 1 / (1 + exp(-16 + 80 * var_q_rel_ri_gate__Ca_fac + 40000 * var_chaste_interface__Ca_r__Ca_r))) / (3 + (350 - 10 * var_Ca_MK_act__Ca_MK_act / (0.14999999999999999 + var_Ca_MK_act__Ca_MK_act)) / (1 + exp(-15 + 5000 * var_chaste_interface__Ca_r__Ca_r + 15 * var_q_rel_ri_gate__Ca_fac)) + 10 * var_Ca_MK_act__Ca_MK_act / (0.14999999999999999 + var_Ca_MK_act__Ca_MK_act)); // 1 / millisecond + const double var_q_rel__q_rel = mp_SR_release_current_modifier->Calc((-var_chaste_interface__Ca_r__Ca_r + var_chaste_interface__Ca_JSR__Ca_JSR) * mp_SR_release_current_max_modifier->Calc(NV_Ith_S(mParameters, 1), var_chaste_interface__environment__time) * var_chaste_interface__q_rel_ri_gate__ri * var_chaste_interface__q_rel_ro_gate__ro / (1 + exp(2.6000000000000001 + 0.20000000000000001 * mp_membrane_L_type_calcium_current_conductance_modifier->Calc(NV_Ith_S(mParameters, 7), var_chaste_interface__environment__time) * var_i_Ca_L__i_Ca_L_max)), var_chaste_interface__environment__time); // millimolar_per_millisecond + const double d_dt_chaste_interface_var_Ca_r__Ca_r = (-var_Ca_r__q_diff + 0.23999999999999996 * var_q_rel__q_rel - 1.1504378919002956e-7 * var_i_Ca_L__i_Ca_L) / (1 + 2.2480000000000002 * var_chaste_interface__Ca_r__Ca_r / pow((0.0086999999999999994 + var_chaste_interface__Ca_r__Ca_r), 2) + 0.094 * var_chaste_interface__Ca_r__Ca_r / pow((0.00087000000000000001 + var_chaste_interface__Ca_r__Ca_r), 2)); // millimolar / millisecond + const double d_dt_chaste_interface_var_q_rel_ro_gate__ro = -0.33333333333333331 * var_chaste_interface__q_rel_ro_gate__ro + 0.33333333333333331 * pow(var_chaste_interface__Ca_JSR__Ca_JSR, 1.8999999999999999) * pow(var_i_Ca_L__i_Ca_L, 2) / ((1 + pow(var_i_Ca_L__i_Ca_L, 2)) * (pow(var_chaste_interface__Ca_JSR__Ca_JSR, 1.8999999999999999) + 1644.6531773416521 * pow((var_chaste_interface__Ca_r__Ca_r / (0.0028 + var_chaste_interface__Ca_r__Ca_r)), 1.8999999999999999))); // 1 / millisecond + const double var_q_tr__q_tr = 0.0083333333333333332 * var_chaste_interface__Ca_NSR__Ca_NSR - 0.0083333333333333332 * var_chaste_interface__Ca_JSR__Ca_JSR; // millimolar_per_millisecond + const double d_dt_chaste_interface_var_Ca_JSR__Ca_JSR = (-var_q_rel__q_rel + var_q_tr__q_tr) / (1 + 8 / pow((0.80000000000000004 + var_chaste_interface__Ca_JSR__Ca_JSR), 2)); // millimolar / millisecond + const double var_q_up__q_up = 0.5 * (1 + 0.75 * var_Ca_MK_act__Ca_MK_act / (0.14999999999999999 + var_Ca_MK_act__Ca_MK_act)) * var_chaste_interface__Ca_i__Ca_i * mp_SR_uptake_current_max_modifier->Calc(NV_Ith_S(mParameters, 2), var_chaste_interface__environment__time) / (0.00092000000000000003 - 0.00017000000000000001 * var_Ca_MK_act__Ca_MK_act / (0.14999999999999999 + var_Ca_MK_act__Ca_MK_act) + var_chaste_interface__Ca_i__Ca_i); // millimolar_per_millisecond + const double d_dt_chaste_interface_var_Ca_NSR__Ca_NSR = -var_q_leak__q_leak - 0.086956521739130432 * var_q_tr__q_tr + var_q_up__q_up; // millimolar / millisecond + const double d_dt_chaste_interface_var_Ca_i__Ca_i = -(3.383640858530281e-9 * var_background_currents__i_Ca_b + 3.383640858530281e-9 * var_i_Ca_p__i_Ca_p + 0.081176470588235281 * var_q_up__q_up - 0.029411764705882353 * var_Ca_r__q_diff - 6.767281717060562e-9 * var_i_NaCa__i_NaCa - 0.081176470588235281 * var_q_leak__q_leak) / (1 + 0.14000000000000001 * var_chaste_interface__Ca_i__Ca_i / pow((0.00050000000000000001 + var_chaste_interface__Ca_i__Ca_i), 2) + 0.10000000000000001 * var_chaste_interface__Ca_i__Ca_i / pow((0.0023800000000000002 + var_chaste_interface__Ca_i__Ca_i), 2)); // millimolar / millisecond + + if (mSetVoltageDerivativeToZero) + { + d_dt_chaste_interface_var_membrane__V = 0.0; + } + else + { + d_dt_chaste_interface_var_membrane__V = -var_background_currents__i_Ca_b - var_background_currents__i_Cl_b - var_background_currents__i_K_b - var_background_currents__i_Na_b - var_i_Ca_L__i_Ca_L - var_i_Ca_p__i_Ca_p - var_i_K1__i_K1 - var_i_K_p__i_K_p - var_i_Kr__i_Kr - var_i_Ks__i_Ks - var_i_Na__i_Na - var_i_NaCa__i_NaCa - var_i_NaK__i_NaK - var_i_Na_L__i_Na_L - var_i_to_1__i_to_1 - var_i_to_2__i_to_2 - GetIntracellularAreaStimulus(var_chaste_interface__environment__time) / HeartConfig::Instance()->GetCapacitance() - 0.13 * (-50 + var_chaste_interface__membrane__V) * var_chaste_interface__i_Ca_T_b_gate__b * var_chaste_interface__i_Ca_T_g_gate__g; // millivolt / millisecond + } + + NV_Ith_S(rDY,0) = d_dt_chaste_interface_var_membrane__V; + NV_Ith_S(rDY,1) = d_dt_chaste_interface_var_Ca_i__Ca_i; + NV_Ith_S(rDY,2) = d_dt_chaste_interface_var_i_Na_m_gate__m; + NV_Ith_S(rDY,3) = d_dt_chaste_interface_var_i_Na_h_gate__h; + NV_Ith_S(rDY,4) = d_dt_chaste_interface_var_i_Na_j_gate__j; + NV_Ith_S(rDY,5) = d_dt_chaste_interface_var_i_Na_L_m_L_gate__m_L; + NV_Ith_S(rDY,6) = d_dt_chaste_interface_var_i_Na_L_h_L_gate__h_L; + NV_Ith_S(rDY,7) = d_dt_chaste_interface_var_i_Ca_L_d_gate__d; + NV_Ith_S(rDY,8) = d_dt_chaste_interface_var_i_Ca_L_f_gate__f; + NV_Ith_S(rDY,9) = d_dt_chaste_interface_var_i_Ca_L_f2_gate__f2; + NV_Ith_S(rDY,10) = d_dt_chaste_interface_var_i_Ca_L_f_Ca_gate__f_Ca; + NV_Ith_S(rDY,11) = d_dt_chaste_interface_var_i_Ca_L_f_Ca2_gate__f_Ca2; + NV_Ith_S(rDY,12) = d_dt_chaste_interface_var_i_Ca_T_b_gate__b; + NV_Ith_S(rDY,13) = d_dt_chaste_interface_var_i_Ca_T_g_gate__g; + NV_Ith_S(rDY,14) = d_dt_chaste_interface_var_i_to_1_a_gate__a; + NV_Ith_S(rDY,15) = d_dt_chaste_interface_var_i_to_1_i_gate__i; + NV_Ith_S(rDY,16) = d_dt_chaste_interface_var_i_to_1_i2_gate__i2; + NV_Ith_S(rDY,17) = d_dt_chaste_interface_var_i_Kr_xr_gate__xr; + NV_Ith_S(rDY,18) = d_dt_chaste_interface_var_i_Ks_xs1_gate__xs1; + NV_Ith_S(rDY,19) = d_dt_chaste_interface_var_i_Ks_xs2_gate__xs2; + NV_Ith_S(rDY,20) = d_dt_chaste_interface_var_i_to_2_a_gate__a; + NV_Ith_S(rDY,21) = d_dt_chaste_interface_var_intracellular_ion_concentrations__Na_i; + NV_Ith_S(rDY,22) = d_dt_chaste_interface_var_intracellular_ion_concentrations__Cl_i; + NV_Ith_S(rDY,23) = d_dt_chaste_interface_var_intracellular_ion_concentrations__K_i; + NV_Ith_S(rDY,24) = d_dt_chaste_interface_var_Ca_MK_act__Ca_MK_trap; + NV_Ith_S(rDY,25) = d_dt_chaste_interface_var_Ca_NSR__Ca_NSR; + NV_Ith_S(rDY,26) = d_dt_chaste_interface_var_Ca_JSR__Ca_JSR; + NV_Ith_S(rDY,27) = d_dt_chaste_interface_var_Ca_r__Ca_r; + NV_Ith_S(rDY,28) = d_dt_chaste_interface_var_q_rel_ri_gate__ri; + NV_Ith_S(rDY,29) = d_dt_chaste_interface_var_q_rel_ro_gate__ro; + } + + N_Vector Dynamicaslanidi_Purkinje_model_2009FromCellMLCvodeOpt::ComputeDerivedQuantities(double var_chaste_interface__environment__time, const N_Vector & rY) + { + // Inputs: + // Time units: millisecond + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : mp_membrane_voltage_modifier->Calc(NV_Ith_S(rY, 0), var_chaste_interface__environment__time)); + // Units: millivolt; Initial value: -83.43812846286808 + double var_chaste_interface__Ca_i__Ca_i = mp_cytosolic_calcium_concentration_modifier->Calc(NV_Ith_S(rY, 1), var_chaste_interface__environment__time); + // Units: millimolar; Initial value: 0.00022355433459434943 + double var_chaste_interface__i_Na_m_gate__m = mp_membrane_fast_sodium_current_m_gate_modifier->Calc(NV_Ith_S(rY, 2), var_chaste_interface__environment__time); + // Units: dimensionless; Initial value: 0.002003390432234504 + double var_chaste_interface__i_Na_h_gate__h = mp_membrane_fast_sodium_current_h_gate_modifier->Calc(NV_Ith_S(rY, 3), var_chaste_interface__environment__time); + // Units: dimensionless; Initial value: 0.9786390933308567 + double var_chaste_interface__i_Na_j_gate__j = mp_membrane_fast_sodium_current_j_gate_modifier->Calc(NV_Ith_S(rY, 4), var_chaste_interface__environment__time); + // Units: dimensionless; Initial value: 0.09866447258167589 + double var_chaste_interface__i_Ca_L_d_gate__d = mp_membrane_L_type_calcium_current_d_gate_modifier->Calc(NV_Ith_S(rY, 7), var_chaste_interface__environment__time); + // Units: dimensionless; Initial value: 2.322223865147363e-06 + double var_chaste_interface__i_Ca_L_f_gate__f = mp_membrane_L_type_calcium_current_f_gate_modifier->Calc(NV_Ith_S(rY, 8), var_chaste_interface__environment__time); + // Units: dimensionless; Initial value: 0.9985607329462358 + double var_chaste_interface__i_Ca_L_f2_gate__f2 = mp_membrane_L_type_calcium_current_f2_gate_modifier->Calc(NV_Ith_S(rY, 9), var_chaste_interface__environment__time); + // Units: dimensionless; Initial value: 0.8173435436674658 + double var_chaste_interface__i_Ca_L_f_Ca_gate__f_Ca = mp_membrane_L_type_calcium_current_fCa_gate_modifier->Calc(NV_Ith_S(rY, 10), var_chaste_interface__environment__time); + // Units: dimensionless; Initial value: 0.9610551285529658 + double var_chaste_interface__i_Ca_L_f_Ca2_gate__f_Ca2 = mp_membrane_L_type_calcium_current_fCa2_gate_modifier->Calc(NV_Ith_S(rY, 11), var_chaste_interface__environment__time); + // Units: dimensionless; Initial value: 0.868690796671854 + double var_chaste_interface__i_to_1_a_gate__a = NV_Ith_S(rY, 14); + // Units: dimensionless; Initial value: 0.0004238729429342389 + double var_chaste_interface__i_to_1_i_gate__i = NV_Ith_S(rY, 15); + // Units: dimensionless; Initial value: 0.9990935802459496 + double var_chaste_interface__i_to_1_i2_gate__i2 = NV_Ith_S(rY, 16); + // Units: dimensionless; Initial value: 0.9777368439681764 + double var_chaste_interface__i_Kr_xr_gate__xr = NV_Ith_S(rY, 17); + // Units: dimensionless; Initial value: 0.07084939408222911 + double var_chaste_interface__i_Ks_xs1_gate__xs1 = NV_Ith_S(rY, 18); + // Units: dimensionless; Initial value: 0.0011737654433043125 + double var_chaste_interface__i_Ks_xs2_gate__xs2 = NV_Ith_S(rY, 19); + // Units: dimensionless; Initial value: 0.001179442867470093 + double var_chaste_interface__intracellular_ion_concentrations__Na_i = mp_cytosolic_sodium_concentration_modifier->Calc(NV_Ith_S(rY, 21), var_chaste_interface__environment__time); + // Units: millimolar; Initial value: 9.927155552932733 + double var_chaste_interface__intracellular_ion_concentrations__K_i = mp_cytosolic_potassium_concentration_modifier->Calc(NV_Ith_S(rY, 23), var_chaste_interface__environment__time); + // Units: millimolar; Initial value: 141.9670801746057 + double var_chaste_interface__Ca_MK_act__Ca_MK_trap = NV_Ith_S(rY, 24); + // Units: dimensionless; Initial value: 8.789168284782809e-06 + double var_chaste_interface__Ca_JSR__Ca_JSR = mp_JSR_calcium_concentration_modifier->Calc(NV_Ith_S(rY, 26), var_chaste_interface__environment__time); + // Units: millimolar; Initial value: 1.1433050636518596 + double var_chaste_interface__Ca_r__Ca_r = mp_dyadic_space_calcium_concentration_modifier->Calc(NV_Ith_S(rY, 27), var_chaste_interface__environment__time); + // Units: millimolar; Initial value: 0.00022418117117903934 + double var_chaste_interface__q_rel_ri_gate__ri = NV_Ith_S(rY, 28); + // Units: dimensionless; Initial value: 0.7802870066567904 + double var_chaste_interface__q_rel_ro_gate__ro = NV_Ith_S(rY, 29); + // Units: dimensionless; Initial value: 1.2785734760674763e-09 + + // Lookup table indexing + const bool _oob_0 = Dynamicaslanidi_Purkinje_model_2009FromCellMLCvodeOpt_LookupTables::Instance()->CheckIndex0(var_chaste_interface__membrane__V); +// LCOV_EXCL_START + if (_oob_0) + EXCEPTION(DumpState("membrane_voltage outside lookup table range", rY , var_chaste_interface__environment__time)); +// LCOV_EXCL_STOP + const double* const _lt_0_row = Dynamicaslanidi_Purkinje_model_2009FromCellMLCvodeOpt_LookupTables::Instance()->IndexTable0(var_chaste_interface__membrane__V); + + // Mathematics + const double var_Ca_MK_act__Ca_MK_0 = 0.050000000000000003; // dimensionless + const double var_Ca_MK_act__km_Ca_MK = 0.14999999999999999; // millimolar + const double var_Ca_MK_act__Ca_MK_bound = (1 - var_chaste_interface__Ca_MK_act__Ca_MK_trap) * var_Ca_MK_act__Ca_MK_0 / (1 + var_Ca_MK_act__km_Ca_MK / var_chaste_interface__Ca_r__Ca_r); // dimensionless + const double var_Ca_MK_act__Ca_MK_act = var_Ca_MK_act__Ca_MK_bound + var_chaste_interface__Ca_MK_act__Ca_MK_trap; // dimensionless + const double var_equilibrium_potentials__r_NaK = 0.018329999999999999; // dimensionless + const double var_i_Ca_L__p_Ca = 0.000243; // cm_per_second + const double var_i_Ca_L_f_Ca_gate__tau_f_Ca = mp_membrane_L_type_calcium_current_fCa_gate_tau_modifier->Calc(0.5 + 1 / (1 + 333.33333333333331 * var_chaste_interface__Ca_r__Ca_r) + 10 * var_Ca_MK_act__Ca_MK_act / (var_Ca_MK_act__Ca_MK_act + var_Ca_MK_act__km_Ca_MK), var_chaste_interface__environment__time); // millisecond + const double var_i_Ks__g_Ks = (1 + 0.59999999999999998 / (1 + 6.4818210260626455e-7 * pow((1 / var_chaste_interface__Ca_i__Ca_i), 1.3999999999999999))) * mp_membrane_slow_delayed_rectifier_potassium_current_conductance_modifier->Calc(NV_Ith_S(mParameters, 13), var_chaste_interface__environment__time); // milliS_per_microF + const double var_i_NaCa__X_NaCa = 0.40000000000000002; // dimensionless + const double var_i_NaCa__k_sat = 0.27000000000000002; // dimensionless + const double var_i_NaCa__km_Ca_act = 0.000125; // millimolar + const double var_i_NaCa__km_Ca_i = 0.0035999999999999999; // millimolar + const double var_i_NaCa__km_Ca_o = 1.3; // millimolar + const double var_i_NaCa__km_Na_i_1 = 12.300000000000001; // millimolar + const double var_i_NaCa__km_Na_o = 87.5; // millimolar + const double var_i_Ca_L_f2_gate__tau_f2 = mp_membrane_L_type_calcium_current_f2_gate_tau_modifier->Calc(38 + 24.217200000000005 * pow((-1 + 0.053763440860215048 * var_chaste_interface__membrane__V), 2), var_chaste_interface__environment__time); // millisecond + const double var_i_Ca_L_f_gate__tau_f = mp_membrane_L_type_calcium_current_f_gate_tau_modifier->Calc(4 + 0.03125 * pow((-1 + 0.40000000000000002 * var_chaste_interface__membrane__V), 2), var_chaste_interface__environment__time); // millisecond + const double var_i_Kr__rr_infinity = 1 / (_lt_0_row[10]); // dimensionless + const double var_i_Na_h_gate__alpha_h = ((var_chaste_interface__membrane__V < -40) ? (0.13500000000000001 * exp(-11.764705882352942 + 0.14705882352941177 * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(NV_Ith_S(mParameters, 10), var_chaste_interface__environment__time) - 0.14705882352941177 * var_chaste_interface__membrane__V)) : (0)); // per_millisecond + const double var_i_Na_h_gate__beta_h = ((var_chaste_interface__membrane__V < -40) ? (310000 * exp(0.34999999999999998 * var_chaste_interface__membrane__V - 0.34999999999999998 * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(NV_Ith_S(mParameters, 10), var_chaste_interface__environment__time)) + 3.5600000000000001 * exp(0.079000000000000001 * var_chaste_interface__membrane__V - 0.079000000000000001 * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(NV_Ith_S(mParameters, 10), var_chaste_interface__environment__time))) : (7.6923076923076916 / (1 + exp(-0.96036036036036043 + 0.0900900900900901 * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(NV_Ith_S(mParameters, 10), var_chaste_interface__environment__time) - 0.0900900900900901 * var_chaste_interface__membrane__V)))); // per_millisecond + const double var_i_Na_h_gate__tau_h = mp_membrane_fast_sodium_current_h_gate_tau_modifier->Calc(1 / (var_i_Na_h_gate__alpha_h + var_i_Na_h_gate__beta_h), var_chaste_interface__environment__time); // millisecond + const double var_i_Na_j_gate__alpha_j = ((var_chaste_interface__membrane__V < -40) ? ((37.780000000000001 + var_chaste_interface__membrane__V) * (-127140 * exp(0.24440000000000001 * var_chaste_interface__membrane__V - 0.24440000000000001 * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(NV_Ith_S(mParameters, 10), var_chaste_interface__environment__time)) - 3.4740000000000003e-5 * exp(0.043909999999999998 * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(NV_Ith_S(mParameters, 10), var_chaste_interface__environment__time) - 0.043909999999999998 * var_chaste_interface__membrane__V)) / (1 + exp(24.640530000000002 + 0.311 * var_chaste_interface__membrane__V - 0.311 * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(NV_Ith_S(mParameters, 10), var_chaste_interface__environment__time)))) : (0)); // per_millisecond + const double var_i_Na_j_gate__beta_j = ((var_chaste_interface__membrane__V < -40) ? (0.1212 * exp(0.01052 * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(NV_Ith_S(mParameters, 10), var_chaste_interface__environment__time) - 0.01052 * var_chaste_interface__membrane__V) / (1 + exp(-5.5312920000000005 + 0.13780000000000001 * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(NV_Ith_S(mParameters, 10), var_chaste_interface__environment__time) - 0.13780000000000001 * var_chaste_interface__membrane__V))) : (0.29999999999999999 * exp(2.5349999999999999e-7 * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(NV_Ith_S(mParameters, 10), var_chaste_interface__environment__time) - 2.5349999999999999e-7 * var_chaste_interface__membrane__V) / (1 + exp(-3.2000000000000002 + 0.10000000000000001 * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(NV_Ith_S(mParameters, 10), var_chaste_interface__environment__time) - 0.10000000000000001 * var_chaste_interface__membrane__V)))); // per_millisecond + const double var_i_Na_j_gate__tau_j = mp_membrane_fast_sodium_current_j_gate_tau_modifier->Calc(1 / (var_i_Na_j_gate__alpha_j + var_i_Na_j_gate__beta_j), var_chaste_interface__environment__time); // millisecond + const double var_membrane__i_stim_converted = GetIntracellularAreaStimulus(var_chaste_interface__environment__time); // uA_per_cm2 + const double var_i_NaCa__dNaCa_1 = pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, 3) * var_i_NaCa__km_Ca_o + 1.5 * pow(var_i_NaCa__km_Na_o, 3) * var_chaste_interface__Ca_i__Ca_i + pow(var_i_NaCa__km_Na_i_1, 3) * (1 + 1.5 * var_chaste_interface__Ca_i__Ca_i / var_i_NaCa__km_Ca_i) * mp_extracellular_calcium_concentration_modifier->Calc(NV_Ith_S(mParameters, 4), var_chaste_interface__environment__time); // millimolar4 + const double var_model_parameters__Cm = 1; // microF_per_cm2 + const double var_model_parameters__F = 96485; // coulomb_per_mole + const double var_i_K1__g_K1 = 0.43033148291193518 * sqrt(mp_extracellular_potassium_concentration_modifier->Calc(NV_Ith_S(mParameters, 5), var_chaste_interface__environment__time)) * mp_membrane_inward_rectifier_potassium_current_conductance_modifier->Calc(NV_Ith_S(mParameters, 11), var_chaste_interface__environment__time); // milliS_per_microF + const double var_i_Kr__g_Kr = 0.43033148291193518 * sqrt(mp_extracellular_potassium_concentration_modifier->Calc(NV_Ith_S(mParameters, 5), var_chaste_interface__environment__time)) * mp_membrane_rapid_delayed_rectifier_potassium_current_conductance_modifier->Calc(NV_Ith_S(mParameters, 12), var_chaste_interface__environment__time); // milliS_per_microF + const double var_i_NaCa__dNaCa_2 = pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, 3) * mp_extracellular_calcium_concentration_modifier->Calc(NV_Ith_S(mParameters, 4), var_chaste_interface__environment__time) + 1.5 * pow(mp_extracellular_sodium_concentration_modifier->Calc(NV_Ith_S(mParameters, 6), var_chaste_interface__environment__time), 3) * var_chaste_interface__Ca_i__Ca_i + pow(mp_extracellular_sodium_concentration_modifier->Calc(NV_Ith_S(mParameters, 6), var_chaste_interface__environment__time), 3) * (1 + var_chaste_interface__intracellular_ion_concentrations__Na_i / var_i_NaCa__km_Na_i_1) * var_i_NaCa__km_Ca_i; // millimolar4 + const double var_model_parameters__R = 8314; // joule_per_kilomole_kelvin + const double var_model_parameters__T = 310; // kelvin + const double var_equilibrium_potentials__E_K = var_model_parameters__R * var_model_parameters__T * log(mp_extracellular_potassium_concentration_modifier->Calc(NV_Ith_S(mParameters, 5), var_chaste_interface__environment__time) / var_chaste_interface__intracellular_ion_concentrations__K_i) / var_model_parameters__F; // millivolt + const double var_equilibrium_potentials__E_Ks = var_model_parameters__R * var_model_parameters__T * log((var_equilibrium_potentials__r_NaK * mp_extracellular_sodium_concentration_modifier->Calc(NV_Ith_S(mParameters, 6), var_chaste_interface__environment__time) + mp_extracellular_potassium_concentration_modifier->Calc(NV_Ith_S(mParameters, 5), var_chaste_interface__environment__time)) / (var_equilibrium_potentials__r_NaK * var_chaste_interface__intracellular_ion_concentrations__Na_i + var_chaste_interface__intracellular_ion_concentrations__K_i)) / var_model_parameters__F; // millivolt + const double var_equilibrium_potentials__E_Na = var_model_parameters__R * var_model_parameters__T * log(mp_extracellular_sodium_concentration_modifier->Calc(NV_Ith_S(mParameters, 6), var_chaste_interface__environment__time) / var_chaste_interface__intracellular_ion_concentrations__Na_i) / var_model_parameters__F; // millivolt + const double var_i_K1_xK1_gate__alpha_xK1 = 1.02 / (1 + exp(-14.1227775 + 0.23849999999999999 * var_chaste_interface__membrane__V - 0.23849999999999999 * var_equilibrium_potentials__E_K)); // dimensionless + const double var_i_K1_xK1_gate__beta_xK1 = (0.49124000000000001 * exp(0.43983232 + 0.080320000000000003 * var_chaste_interface__membrane__V - 0.080320000000000003 * var_equilibrium_potentials__E_K) + exp(-36.698642499999998 + 0.061749999999999999 * var_chaste_interface__membrane__V - 0.061749999999999999 * var_equilibrium_potentials__E_K)) / (1 + exp(-2.4444678999999998 + 0.51429999999999998 * var_equilibrium_potentials__E_K - 0.51429999999999998 * var_chaste_interface__membrane__V)); // dimensionless + const double var_i_K1_xK1_gate__xK1 = var_i_K1_xK1_gate__alpha_xK1 / (var_i_K1_xK1_gate__alpha_xK1 + var_i_K1_xK1_gate__beta_xK1); // dimensionless + const double var_i_K1__i_K1 = mp_i_K1__i_K1_modifier->Calc((0.0040000000000000001 + var_i_K1__g_K1 * var_i_K1_xK1_gate__xK1) * (-var_equilibrium_potentials__E_K + var_chaste_interface__membrane__V), var_chaste_interface__environment__time); // microA_per_microF + const double var_i_K1__i_K1_converted = HeartConfig::Instance()->GetCapacitance() * var_i_K1__i_K1; // uA_per_cm2 + const double var_i_Kr__i_Kr = mp_i_Kr__i_Kr_modifier->Calc((-var_equilibrium_potentials__E_K + var_chaste_interface__membrane__V) * var_i_Kr__g_Kr * var_i_Kr__rr_infinity * var_chaste_interface__i_Kr_xr_gate__xr, var_chaste_interface__environment__time); // microA_per_microF + const double var_i_Kr__i_Kr_converted = HeartConfig::Instance()->GetCapacitance() * var_i_Kr__i_Kr; // uA_per_cm2 + const double var_i_Ks__i_Ks = mp_i_Ks__i_Ks_modifier->Calc((-var_equilibrium_potentials__E_Ks + var_chaste_interface__membrane__V) * var_i_Ks__g_Ks * var_chaste_interface__i_Ks_xs1_gate__xs1 * var_chaste_interface__i_Ks_xs2_gate__xs2, var_chaste_interface__environment__time); // microA_per_microF + const double var_i_Ks__i_Ks_converted = HeartConfig::Instance()->GetCapacitance() * var_i_Ks__i_Ks; // uA_per_cm2 + const double var_i_Na__i_Na = mp_i_Na__i_Na_modifier->Calc(pow(var_chaste_interface__i_Na_m_gate__m, 3) * (-var_equilibrium_potentials__E_Na + var_chaste_interface__membrane__V) * (0.20000000000000001 * var_chaste_interface__i_Na_j_gate__j + 0.80000000000000004 * var_chaste_interface__i_Na_h_gate__h) * mp_membrane_fast_sodium_current_conductance_modifier->Calc(NV_Ith_S(mParameters, 8), var_chaste_interface__environment__time), var_chaste_interface__environment__time); // microA_per_microF + const double var_i_Na__i_Na_converted = HeartConfig::Instance()->GetCapacitance() * var_i_Na__i_Na; // uA_per_cm2 + const double var_i_NaCa__i_NaCa = mp_i_NaCa__i_NaCa_modifier->Calc((-1.5 * pow(mp_extracellular_sodium_concentration_modifier->Calc(NV_Ith_S(mParameters, 6), var_chaste_interface__environment__time), 3) * var_chaste_interface__Ca_i__Ca_i * exp(-0.65000000000000002 * var_chaste_interface__membrane__V * var_model_parameters__F / (var_model_parameters__R * var_model_parameters__T)) + pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, 3) * var_i_NaCa__X_NaCa * mp_membrane_sodium_calcium_exchanger_current_conductance_modifier->Calc(NV_Ith_S(mParameters, 14), var_chaste_interface__environment__time) * mp_extracellular_calcium_concentration_modifier->Calc(NV_Ith_S(mParameters, 4), var_chaste_interface__environment__time) * exp(0.34999999999999998 * var_chaste_interface__membrane__V * var_model_parameters__F / (var_model_parameters__R * var_model_parameters__T))) / ((1 + var_i_NaCa__k_sat * exp(-0.65000000000000002 * var_chaste_interface__membrane__V * var_model_parameters__F / (var_model_parameters__R * var_model_parameters__T))) * (1 + 0.44444444444444442 * pow(var_i_NaCa__km_Ca_act, 2) / pow(var_chaste_interface__Ca_i__Ca_i, 2)) * (var_i_NaCa__dNaCa_1 + var_i_NaCa__dNaCa_2)), var_chaste_interface__environment__time); // microA_per_microF + const double var_i_NaCa__i_NaCa_converted = HeartConfig::Instance()->GetCapacitance() * var_i_NaCa__i_NaCa; // uA_per_cm2 + const double var_i_to_1__i_to_1 = mp_i_to_1__i_to_1_modifier->Calc((-var_equilibrium_potentials__E_K + var_chaste_interface__membrane__V) * (0.20000000000000001 * var_chaste_interface__i_to_1_i2_gate__i2 + 0.80000000000000004 * var_chaste_interface__i_to_1_i_gate__i) * mp_membrane_transient_outward_current_conductance_modifier->Calc(NV_Ith_S(mParameters, 15), var_chaste_interface__environment__time) * var_chaste_interface__i_to_1_a_gate__a, var_chaste_interface__environment__time); // microA_per_microF + const double var_i_to_1__i_to_1_converted = HeartConfig::Instance()->GetCapacitance() * var_i_to_1__i_to_1; // uA_per_cm2 + const double var_model_parameters__gamma_Cai = 1; // dimensionless + const double var_model_parameters__gamma_Cao = 0.34100000000000003; // dimensionless + const double var_model_parameters__z_Ca = 2; // dimensionless + const double var_i_Ca_L__i_Ca_L_max = pow(var_model_parameters__F, 2) * pow(var_model_parameters__z_Ca, 2) * (-15 + var_chaste_interface__membrane__V) * (-mp_extracellular_calcium_concentration_modifier->Calc(NV_Ith_S(mParameters, 4), var_chaste_interface__environment__time) * var_model_parameters__gamma_Cao + var_chaste_interface__Ca_r__Ca_r * var_model_parameters__gamma_Cai * exp((-15 + var_chaste_interface__membrane__V) * var_model_parameters__F * var_model_parameters__z_Ca / (var_model_parameters__R * var_model_parameters__T))) * var_i_Ca_L__p_Ca / ((-1 + exp((-15 + var_chaste_interface__membrane__V) * var_model_parameters__F * var_model_parameters__z_Ca / (var_model_parameters__R * var_model_parameters__T))) * var_model_parameters__Cm * var_model_parameters__R * var_model_parameters__T); // microA_per_microF + const double var_i_Ca_L__i_Ca_L = mp_i_Ca_L__i_Ca_L_modifier->Calc(mp_membrane_L_type_calcium_current_conductance_modifier->Calc(NV_Ith_S(mParameters, 7), var_chaste_interface__environment__time) * var_i_Ca_L__i_Ca_L_max * var_chaste_interface__i_Ca_L_d_gate__d * var_chaste_interface__i_Ca_L_f2_gate__f2 * var_chaste_interface__i_Ca_L_f_Ca2_gate__f_Ca2 * var_chaste_interface__i_Ca_L_f_Ca_gate__f_Ca * var_chaste_interface__i_Ca_L_f_gate__f, var_chaste_interface__environment__time); // microA_per_microF + const double var_i_Ca_L__i_Ca_L_converted = HeartConfig::Instance()->GetCapacitance() * var_i_Ca_L__i_Ca_L; // uA_per_cm2 + const double var_i_Ca_L_f_Ca2_gate__tau_f_Ca2 = mp_membrane_L_type_calcium_current_fCa2_gate_tau_modifier->Calc(125 + 300 / (1 + exp(-4.375 - 25 * var_i_Ca_L__i_Ca_L)), var_chaste_interface__environment__time); // millisecond + const double var_q_rel__vg = 1 / (1 + exp(2.6000000000000001 + 0.20000000000000001 * mp_membrane_L_type_calcium_current_conductance_modifier->Calc(NV_Ith_S(mParameters, 7), var_chaste_interface__environment__time) * var_i_Ca_L__i_Ca_L_max)); // dimensionless + const double var_q_rel__g_rel = mp_SR_release_current_max_modifier->Calc(NV_Ith_S(mParameters, 1), var_chaste_interface__environment__time) * var_q_rel__vg; // per_millisecond + const double var_q_rel__q_rel = mp_SR_release_current_modifier->Calc((-var_chaste_interface__Ca_r__Ca_r + var_chaste_interface__Ca_JSR__Ca_JSR) * var_q_rel__g_rel * var_chaste_interface__q_rel_ri_gate__ri * var_chaste_interface__q_rel_ro_gate__ro, var_chaste_interface__environment__time); // millimolar_per_millisecond + +#if CHASTE_SUNDIALS_VERSION >= 60000 + N_Vector dqs = N_VNew_Serial(16, CvodeContextManager::Instance()->GetSundialsContext()); +#else + N_Vector dqs = N_VNew_Serial(16); +#endif + NV_Ith_S(dqs, 0) = var_q_rel__q_rel; + NV_Ith_S(dqs, 1) = var_i_Ca_L__i_Ca_L_converted; + NV_Ith_S(dqs, 2) = var_i_Ca_L_f2_gate__tau_f2; + NV_Ith_S(dqs, 3) = var_i_Ca_L_f_Ca2_gate__tau_f_Ca2; + NV_Ith_S(dqs, 4) = var_i_Ca_L_f_Ca_gate__tau_f_Ca; + NV_Ith_S(dqs, 5) = var_i_Ca_L_f_gate__tau_f; + NV_Ith_S(dqs, 6) = var_i_Na__i_Na_converted; + NV_Ith_S(dqs, 7) = var_i_Na_h_gate__tau_h; + NV_Ith_S(dqs, 8) = var_i_Na_j_gate__tau_j; + NV_Ith_S(dqs, 9) = var_i_K1__i_K1_converted; + NV_Ith_S(dqs, 10) = var_i_Kr__i_Kr_converted; + NV_Ith_S(dqs, 11) = var_i_Ks__i_Ks_converted; + NV_Ith_S(dqs, 12) = var_i_NaCa__i_NaCa_converted; + NV_Ith_S(dqs, 13) = var_membrane__i_stim_converted; + NV_Ith_S(dqs, 14) = var_i_to_1__i_to_1_converted; + NV_Ith_S(dqs, 15) = var_chaste_interface__environment__time; + return dqs; + } + +template<> +void OdeSystemInformation::Initialise(void) +{ + this->mSystemName = "aslanidi_2009"; + this->mFreeVariableName = "time"; + this->mFreeVariableUnits = "millisecond"; + + // NV_Ith_S(rY, 0): + this->mVariableNames.push_back("membrane_voltage"); + this->mVariableUnits.push_back("millivolt"); + this->mInitialConditions.push_back(-83.43812846286808); + + // NV_Ith_S(rY, 1): + this->mVariableNames.push_back("cytosolic_calcium_concentration"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(0.00022355433459434943); + + // NV_Ith_S(rY, 2): + this->mVariableNames.push_back("membrane_fast_sodium_current_m_gate"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.002003390432234504); + + // NV_Ith_S(rY, 3): + this->mVariableNames.push_back("membrane_fast_sodium_current_h_gate"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.9786390933308567); + + // NV_Ith_S(rY, 4): + this->mVariableNames.push_back("membrane_fast_sodium_current_j_gate"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.09866447258167589); + + // NV_Ith_S(rY, 5): + this->mVariableNames.push_back("i_Na_L_m_L_gate__m_L"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.002003390432234504); + + // NV_Ith_S(rY, 6): + this->mVariableNames.push_back("i_Na_L_h_L_gate__h_L"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.8946968372659203); + + // NV_Ith_S(rY, 7): + this->mVariableNames.push_back("membrane_L_type_calcium_current_d_gate"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(2.322223865147363e-06); + + // NV_Ith_S(rY, 8): + this->mVariableNames.push_back("membrane_L_type_calcium_current_f_gate"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.9985607329462358); + + // NV_Ith_S(rY, 9): + this->mVariableNames.push_back("membrane_L_type_calcium_current_f2_gate"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.8173435436674658); + + // NV_Ith_S(rY, 10): + this->mVariableNames.push_back("membrane_L_type_calcium_current_fCa_gate"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.9610551285529658); + + // NV_Ith_S(rY, 11): + this->mVariableNames.push_back("membrane_L_type_calcium_current_fCa2_gate"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.868690796671854); + + // NV_Ith_S(rY, 12): + this->mVariableNames.push_back("i_Ca_T_b_gate__b"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.0002563937630984438); + + // NV_Ith_S(rY, 13): + this->mVariableNames.push_back("i_Ca_T_g_gate__g"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.9720432601848331); + + // NV_Ith_S(rY, 14): + this->mVariableNames.push_back("i_to_1_a_gate__a"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.0004238729429342389); + + // NV_Ith_S(rY, 15): + this->mVariableNames.push_back("i_to_1_i_gate__i"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.9990935802459496); + + // NV_Ith_S(rY, 16): + this->mVariableNames.push_back("i_to_1_i2_gate__i2"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.9777368439681764); + + // NV_Ith_S(rY, 17): + this->mVariableNames.push_back("i_Kr_xr_gate__xr"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.07084939408222911); + + // NV_Ith_S(rY, 18): + this->mVariableNames.push_back("i_Ks_xs1_gate__xs1"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.0011737654433043125); + + // NV_Ith_S(rY, 19): + this->mVariableNames.push_back("i_Ks_xs2_gate__xs2"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.001179442867470093); + + // NV_Ith_S(rY, 20): + this->mVariableNames.push_back("i_to_2_a_gate__a"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.0014909437525000811); + + // NV_Ith_S(rY, 21): + this->mVariableNames.push_back("cytosolic_sodium_concentration"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(9.927155552932733); + + // NV_Ith_S(rY, 22): + this->mVariableNames.push_back("intracellular_ion_concentrations__Cl_i"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(18.904682470140408); + + // NV_Ith_S(rY, 23): + this->mVariableNames.push_back("cytosolic_potassium_concentration"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(141.9670801746057); + + // NV_Ith_S(rY, 24): + this->mVariableNames.push_back("Ca_MK_act__Ca_MK_trap"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(8.789168284782809e-06); + + // NV_Ith_S(rY, 25): + this->mVariableNames.push_back("Ca_NSR__Ca_NSR"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(1.2132524695849454); + + // NV_Ith_S(rY, 26): + this->mVariableNames.push_back("JSR_calcium_concentration"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(1.1433050636518596); + + // NV_Ith_S(rY, 27): + this->mVariableNames.push_back("dyadic_space_calcium_concentration"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(0.00022418117117903934); + + // NV_Ith_S(rY, 28): + this->mVariableNames.push_back("q_rel_ri_gate__ri"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.7802870066567904); + + // NV_Ith_S(rY, 29): + this->mVariableNames.push_back("q_rel_ro_gate__ro"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(1.2785734760674763e-09); + + // mParameters[0]: + this->mParameterNames.push_back("SR_leak_current_max"); + this->mParameterUnits.push_back("millimolar_per_millisecond"); + + // mParameters[1]: + this->mParameterNames.push_back("SR_release_current_max"); + this->mParameterUnits.push_back("per_millisecond"); + + // mParameters[2]: + this->mParameterNames.push_back("SR_uptake_current_max"); + this->mParameterUnits.push_back("millimolar_per_millisecond"); + + // mParameters[3]: + this->mParameterNames.push_back("concentration_clamp_onoff"); + this->mParameterUnits.push_back("dimensionless"); + + // mParameters[4]: + this->mParameterNames.push_back("extracellular_calcium_concentration"); + this->mParameterUnits.push_back("millimolar"); + + // mParameters[5]: + this->mParameterNames.push_back("extracellular_potassium_concentration"); + this->mParameterUnits.push_back("millimolar"); + + // mParameters[6]: + this->mParameterNames.push_back("extracellular_sodium_concentration"); + this->mParameterUnits.push_back("millimolar"); + + // mParameters[7]: + this->mParameterNames.push_back("membrane_L_type_calcium_current_conductance"); + this->mParameterUnits.push_back("dimensionless"); + + // mParameters[8]: + this->mParameterNames.push_back("membrane_fast_sodium_current_conductance"); + this->mParameterUnits.push_back("milliS_per_microF"); + + // mParameters[9]: + this->mParameterNames.push_back("membrane_fast_sodium_current_reduced_inactivation"); + this->mParameterUnits.push_back("dimensionless"); + + // mParameters[10]: + this->mParameterNames.push_back("membrane_fast_sodium_current_shift_inactivation"); + this->mParameterUnits.push_back("millivolt"); + + // mParameters[11]: + this->mParameterNames.push_back("membrane_inward_rectifier_potassium_current_conductance"); + this->mParameterUnits.push_back("milliS_per_microF"); + + // mParameters[12]: + this->mParameterNames.push_back("membrane_rapid_delayed_rectifier_potassium_current_conductance"); + this->mParameterUnits.push_back("milliS_per_microF"); + + // mParameters[13]: + this->mParameterNames.push_back("membrane_slow_delayed_rectifier_potassium_current_conductance"); + this->mParameterUnits.push_back("milliS_per_microF"); + + // mParameters[14]: + this->mParameterNames.push_back("membrane_sodium_calcium_exchanger_current_conductance"); + this->mParameterUnits.push_back("microA_per_microF"); + + // mParameters[15]: + this->mParameterNames.push_back("membrane_transient_outward_current_conductance"); + this->mParameterUnits.push_back("milliS_per_microF"); + + // Derived Quantity index [0]: + this->mDerivedQuantityNames.push_back("SR_release_current"); + this->mDerivedQuantityUnits.push_back("millimolar_per_millisecond"); + + // Derived Quantity index [1]: + this->mDerivedQuantityNames.push_back("membrane_L_type_calcium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [2]: + this->mDerivedQuantityNames.push_back("membrane_L_type_calcium_current_f2_gate_tau"); + this->mDerivedQuantityUnits.push_back("millisecond"); + + // Derived Quantity index [3]: + this->mDerivedQuantityNames.push_back("membrane_L_type_calcium_current_fCa2_gate_tau"); + this->mDerivedQuantityUnits.push_back("millisecond"); + + // Derived Quantity index [4]: + this->mDerivedQuantityNames.push_back("membrane_L_type_calcium_current_fCa_gate_tau"); + this->mDerivedQuantityUnits.push_back("millisecond"); + + // Derived Quantity index [5]: + this->mDerivedQuantityNames.push_back("membrane_L_type_calcium_current_f_gate_tau"); + this->mDerivedQuantityUnits.push_back("millisecond"); + + // Derived Quantity index [6]: + this->mDerivedQuantityNames.push_back("membrane_fast_sodium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [7]: + this->mDerivedQuantityNames.push_back("membrane_fast_sodium_current_h_gate_tau"); + this->mDerivedQuantityUnits.push_back("millisecond"); + + // Derived Quantity index [8]: + this->mDerivedQuantityNames.push_back("membrane_fast_sodium_current_j_gate_tau"); + this->mDerivedQuantityUnits.push_back("millisecond"); + + // Derived Quantity index [9]: + this->mDerivedQuantityNames.push_back("membrane_inward_rectifier_potassium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [10]: + this->mDerivedQuantityNames.push_back("membrane_rapid_delayed_rectifier_potassium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [11]: + this->mDerivedQuantityNames.push_back("membrane_slow_delayed_rectifier_potassium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [12]: + this->mDerivedQuantityNames.push_back("membrane_sodium_calcium_exchanger_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [13]: + this->mDerivedQuantityNames.push_back("membrane_stimulus_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [14]: + this->mDerivedQuantityNames.push_back("membrane_transient_outward_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [15]: + this->mDerivedQuantityNames.push_back("time"); + this->mDerivedQuantityUnits.push_back("millisecond"); + + this->mInitialised = true; +} + +// Serialization for Boost >= 1.36 +#include "SerializationExportWrapperForCpp.hpp" +CHASTE_CLASS_EXPORT(Dynamicaslanidi_Purkinje_model_2009FromCellMLCvodeOpt) +extern "C" +{ + AbstractCardiacCellInterface* MakeCardiacCell( + boost::shared_ptr pSolver, + boost::shared_ptr pStimulus) + { + return new Dynamicaslanidi_Purkinje_model_2009FromCellMLCvodeOpt(pSolver, pStimulus); + } + +} +#endif // CHASTE_CVODE diff --git a/chaste_codegen/tests/numerical/baseline/Cvode_opt/dynamic_aslanidi_Purkinje_model_2009.hpp b/chaste_codegen/tests/numerical/baseline/Cvode_opt/dynamic_aslanidi_Purkinje_model_2009.hpp new file mode 100644 index 00000000..7ce5481b --- /dev/null +++ b/chaste_codegen/tests/numerical/baseline/Cvode_opt/dynamic_aslanidi_Purkinje_model_2009.hpp @@ -0,0 +1,138 @@ +#ifdef CHASTE_CVODE +#ifndef DYNAMICASLANIDI_PURKINJE_MODEL_2009FROMCELLMLCVODEOPT_HPP_ +#define DYNAMICASLANIDI_PURKINJE_MODEL_2009FROMCELLMLCVODEOPT_HPP_ + +//! @file +//! +//! This source file was generated from CellML by chaste_codegen version (version omitted as unimportant) +//! +//! Model: aslanidi_2009 +//! +//! Processed by chaste_codegen: https://github.com/ModellingWebLab/chaste-codegen +//! (translator: chaste_codegen, model type: NumericCvodeOpt) +//! on (date omitted as unimportant) +//! +//! + +#include "ChasteSerialization.hpp" +#include +#include "AbstractCardiacCellWithModifiers.hpp" +#include "AbstractModifier.hpp" +#include "AbstractDynamicallyLoadableEntity.hpp" +#include "AbstractStimulusFunction.hpp" +#include "AbstractCvodeCell.hpp" + +class Dynamicaslanidi_Purkinje_model_2009FromCellMLCvodeOpt : public AbstractCardiacCellWithModifiers, public AbstractDynamicallyLoadableEntity +{ + friend class boost::serialization::access; + template + void serialize(Archive & archive, const unsigned int version) + { + archive & boost::serialization::base_object >(*this); + archive & boost::serialization::base_object(*this); + // Despite this class having modifier member variables, they are all added to the + // abstract class by the constructor, and archived via that, instead of here. + } + + // + // Settable parameters and readable variables + // + boost::shared_ptr mp_JSR_calcium_concentration_modifier; + boost::shared_ptr mp_SR_leak_current_max_modifier; + boost::shared_ptr mp_SR_release_current_modifier; + boost::shared_ptr mp_SR_release_current_max_modifier; + boost::shared_ptr mp_SR_uptake_current_max_modifier; + boost::shared_ptr mp_concentration_clamp_onoff_modifier; + boost::shared_ptr mp_cytosolic_calcium_concentration_modifier; + boost::shared_ptr mp_cytosolic_potassium_concentration_modifier; + boost::shared_ptr mp_cytosolic_sodium_concentration_modifier; + boost::shared_ptr mp_dyadic_space_calcium_concentration_modifier; + boost::shared_ptr mp_extracellular_calcium_concentration_modifier; + boost::shared_ptr mp_extracellular_potassium_concentration_modifier; + boost::shared_ptr mp_extracellular_sodium_concentration_modifier; + boost::shared_ptr mp_i_Ca_L__i_Ca_L_modifier; + boost::shared_ptr mp_membrane_L_type_calcium_current_conductance_modifier; + boost::shared_ptr mp_membrane_L_type_calcium_current_d_gate_modifier; + boost::shared_ptr mp_membrane_L_type_calcium_current_f2_gate_modifier; + boost::shared_ptr mp_membrane_L_type_calcium_current_f2_gate_tau_modifier; + boost::shared_ptr mp_membrane_L_type_calcium_current_fCa2_gate_modifier; + boost::shared_ptr mp_membrane_L_type_calcium_current_fCa2_gate_tau_modifier; + boost::shared_ptr mp_membrane_L_type_calcium_current_fCa_gate_modifier; + boost::shared_ptr mp_membrane_L_type_calcium_current_fCa_gate_tau_modifier; + boost::shared_ptr mp_membrane_L_type_calcium_current_f_gate_modifier; + boost::shared_ptr mp_membrane_L_type_calcium_current_f_gate_tau_modifier; + boost::shared_ptr mp_i_Na__i_Na_modifier; + boost::shared_ptr mp_membrane_fast_sodium_current_conductance_modifier; + boost::shared_ptr mp_membrane_fast_sodium_current_h_gate_modifier; + boost::shared_ptr mp_membrane_fast_sodium_current_h_gate_tau_modifier; + boost::shared_ptr mp_membrane_fast_sodium_current_j_gate_modifier; + boost::shared_ptr mp_membrane_fast_sodium_current_j_gate_tau_modifier; + boost::shared_ptr mp_membrane_fast_sodium_current_m_gate_modifier; + boost::shared_ptr mp_membrane_fast_sodium_current_reduced_inactivation_modifier; + boost::shared_ptr mp_membrane_fast_sodium_current_shift_inactivation_modifier; + boost::shared_ptr mp_i_K1__i_K1_modifier; + boost::shared_ptr mp_membrane_inward_rectifier_potassium_current_conductance_modifier; + boost::shared_ptr mp_i_Kr__i_Kr_modifier; + boost::shared_ptr mp_membrane_rapid_delayed_rectifier_potassium_current_conductance_modifier; + boost::shared_ptr mp_i_Ks__i_Ks_modifier; + boost::shared_ptr mp_membrane_slow_delayed_rectifier_potassium_current_conductance_modifier; + boost::shared_ptr mp_i_NaCa__i_NaCa_modifier; + boost::shared_ptr mp_membrane_sodium_calcium_exchanger_current_conductance_modifier; + boost::shared_ptr mp_i_to_1__i_to_1_modifier; + boost::shared_ptr mp_membrane_transient_outward_current_conductance_modifier; + boost::shared_ptr mp_membrane_voltage_modifier; + +private: + static AbstractCardiacCellWithModifiers* CreateMethod(boost::shared_ptr p_solver, boost::shared_ptr p_stimulus); + static bool registered; +private: +const bool is_concentration[30] = {false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, false, true, false, false, true, true, false, false}; +const bool is_probability[30] = {false, false, true, true, true, false, false, true, true, true, true, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false}; +public: + + boost::shared_ptr UseCellMLDefaultStimulus(); + double GetIntracellularCalciumConcentration(); + Dynamicaslanidi_Purkinje_model_2009FromCellMLCvodeOpt(boost::shared_ptr pOdeSolver /* unused; should be empty */, boost::shared_ptr pIntracellularStimulus); + ~Dynamicaslanidi_Purkinje_model_2009FromCellMLCvodeOpt(); + void VerifyStateVariables(); + AbstractLookupTableCollection* GetLookupTableCollection(); + double GetIIonic(const std::vector* pStateVariables=NULL); + void EvaluateYDerivatives(double var_chaste_interface__environment__time, const N_Vector rY, N_Vector rDY); + N_Vector ComputeDerivedQuantities(double var_chaste_interface__environment__time, const N_Vector & rY); +}; + +// Needs to be included last +#include "SerializationExportWrapper.hpp" +CHASTE_CLASS_EXPORT(Dynamicaslanidi_Purkinje_model_2009FromCellMLCvodeOpt) + +namespace boost +{ + namespace serialization + { + template + inline void save_construct_data( + Archive & ar, const Dynamicaslanidi_Purkinje_model_2009FromCellMLCvodeOpt * t, const unsigned int fileVersion) + { + const boost::shared_ptr p_solver = t->GetSolver(); + const boost::shared_ptr p_stimulus = t->GetStimulusFunction(); + ar << p_solver; + ar << p_stimulus; + } + + template + inline void load_construct_data( + Archive & ar, Dynamicaslanidi_Purkinje_model_2009FromCellMLCvodeOpt * t, const unsigned int fileVersion) + { + boost::shared_ptr p_solver; + boost::shared_ptr p_stimulus; + ar >> p_solver; + ar >> p_stimulus; + ::new(t)Dynamicaslanidi_Purkinje_model_2009FromCellMLCvodeOpt(p_solver, p_stimulus); + } + + } + +} + +#endif // DYNAMICASLANIDI_PURKINJE_MODEL_2009FROMCELLMLCVODEOPT_HPP_ +#endif // CHASTE_CVODE \ No newline at end of file diff --git a/chaste_codegen/tests/numerical/baseline/Cvode_opt/hilgemann_noble_model_1987.cpp b/chaste_codegen/tests/numerical/baseline/Cvode_opt/hilgemann_noble_model_1987.cpp new file mode 100644 index 00000000..aed12e9d --- /dev/null +++ b/chaste_codegen/tests/numerical/baseline/Cvode_opt/hilgemann_noble_model_1987.cpp @@ -0,0 +1,855 @@ +#ifdef CHASTE_CVODE +//! @file +//! +//! This source file was generated from CellML by chaste_codegen version (version omitted as unimportant) +//! +//! Model: hilgemann_noble_model_1987 +//! +//! Processed by chaste_codegen: https://github.com/ModellingWebLab/chaste-codegen +//! (translator: chaste_codegen, model type: NumericCvodeOpt) +//! on (date omitted as unimportant) +//! +//! + +#include "hilgemann_noble_model_1987.hpp" +#include +#include +#include +#include +#include "Exception.hpp" +#include "OdeSystemInformation.hpp" +#include "RegularStimulus.hpp" +#include "HeartConfig.hpp" +#include "IsNan.hpp" +#include "MathsCustomFunctions.hpp" + +#if CHASTE_SUNDIALS_VERSION >= 60000 +#include "CvodeContextManager.hpp" +#endif + + + +class Cellhilgemann_noble_model_1987FromCellMLCvodeOpt_LookupTables : public AbstractLookupTableCollection +{ +public: + static Cellhilgemann_noble_model_1987FromCellMLCvodeOpt_LookupTables* Instance() + { + if (mpInstance.get() == NULL) + { + mpInstance.reset(new Cellhilgemann_noble_model_1987FromCellMLCvodeOpt_LookupTables); + } + return mpInstance.get(); + } + + void FreeMemory() + { + + if (_lookup_table_0) + { + delete[] _lookup_table_0; + _lookup_table_0 = NULL; + } + + mNeedsRegeneration.assign(mNeedsRegeneration.size(), true); + } + + // Row lookup methods + // using linear-interpolation + + double* _lookup_0_row(unsigned i, double _factor_) + { + for (unsigned j=0; j<9; j++) + { + const double y1 = _lookup_table_0[i][j]; + const double y2 = _lookup_table_0[i+1][j]; + _lookup_table_0_row[j] = y1 + (y2-y1)*_factor_; + } + return _lookup_table_0_row; + } + + + const double * IndexTable0(double var_chaste_interface__membrane__V) + { + const double _offset_0 = var_chaste_interface__membrane__V - mTableMins[0]; + const double _offset_0_over_table_step = _offset_0 * mTableStepInverses[0]; + const unsigned _table_index_0 = (unsigned)(_offset_0_over_table_step); + const double _factor_0 = _offset_0_over_table_step - _table_index_0; + const double* const _lt_0_row = Cellhilgemann_noble_model_1987FromCellMLCvodeOpt_LookupTables::Instance()->_lookup_0_row(_table_index_0, _factor_0); + return _lt_0_row; + } + + +// LCOV_EXCL_START + bool CheckIndex0(double& var_chaste_interface__membrane__V) + { + bool _oob_0 = false; + if (var_chaste_interface__membrane__V>mTableMaxs[0] || var_chaste_interface__membrane__V= 2){ + EXCEPTION("Lookup table 2 at ["<= 2){ + EXCEPTION("Lookup table 3 at ["<= 2){ + EXCEPTION("Lookup table 4 at ["<= 2){ + EXCEPTION("Lookup table 5 at ["<= 2){ + EXCEPTION("Lookup table 7 at ["< mpInstance; + + // Row lookup methods memory + double _lookup_table_0_row[9]; + + // Lookup tables + double (*_lookup_table_0)[9]; + int _lookup_table_0_num_misshit_piecewise[9] = {0}; + +}; + +std::shared_ptr Cellhilgemann_noble_model_1987FromCellMLCvodeOpt_LookupTables::mpInstance; + + + boost::shared_ptr Cellhilgemann_noble_model_1987FromCellMLCvodeOpt::UseCellMLDefaultStimulus() + { + // Use the default stimulus specified by CellML metadata + const double var_chaste_interface__membrane__stim_amplitude_converted = -0.20000000000000001 * HeartConfig::Instance()->GetCapacitance() / NV_Ith_S(mParameters, 8); // uA_per_cm2 + const double var_chaste_interface__membrane__stim_duration_converted = 2; // millisecond + const double var_chaste_interface__membrane__stim_period_converted = 1000; // millisecond + const double var_chaste_interface__membrane__stim_start_converted = 100; // millisecond + boost::shared_ptr p_cellml_stim(new RegularStimulus( + -fabs(var_chaste_interface__membrane__stim_amplitude_converted), + var_chaste_interface__membrane__stim_duration_converted, + var_chaste_interface__membrane__stim_period_converted, + var_chaste_interface__membrane__stim_start_converted + )); + mpIntracellularStimulus = p_cellml_stim; + return p_cellml_stim; + } + + double Cellhilgemann_noble_model_1987FromCellMLCvodeOpt::GetIntracellularCalciumConcentration() + { + return NV_Ith_S(mStateVariables, 1); + } + + Cellhilgemann_noble_model_1987FromCellMLCvodeOpt::Cellhilgemann_noble_model_1987FromCellMLCvodeOpt(boost::shared_ptr pOdeSolver /* unused; should be empty */, boost::shared_ptr pIntracellularStimulus) + : AbstractCvodeCell( + pOdeSolver, + 15, + 0, + pIntracellularStimulus) + { + // Time units: millisecond + // + this->mpSystemInfo = OdeSystemInformation::Instance(); + Init(); + + // We have a default stimulus specified in the CellML file metadata + this->mHasDefaultStimulusFromCellML = true; + + NV_Ith_S(this->mParameters, 0) = 0; // (var_calcium_release__K_leak_rate) [per_second] + NV_Ith_S(this->mParameters, 1) = 250; // (var_calcium_release__K_m_rel) [per_second] + NV_Ith_S(this->mParameters, 2) = 0.00050000000000000001; // (var_calcium_release__K_m_Ca) [millimolar] + NV_Ith_S(this->mParameters, 3) = 1; // (var_sarcoplasmic_reticulum_calcium_pump__uptake_factor) [dimensionless] + NV_Ith_S(this->mParameters, 4) = 1; // (var_intracellular_sodium_concentration__conc_clamp) [dimensionless] + NV_Ith_S(this->mParameters, 5) = 4; // (var_extracellular_potassium_concentration__K_c) [millimolar] + NV_Ith_S(this->mParameters, 6) = 140; // (var_extracellular_sodium_concentration__Na_o) [millimolar] + NV_Ith_S(this->mParameters, 7) = 5; // (var_second_inward_calcium_current__P_si) [nanoA_per_millimolar] + NV_Ith_S(this->mParameters, 8) = 0.0060000000000000001; // (var_membrane__C_m) [microF] + NV_Ith_S(this->mParameters, 9) = 50; // (var_fast_sodium_current__g_Na) [microS] + NV_Ith_S(this->mParameters, 10) = 0; // (var_fast_sodium_current__perc_reduced_inact_for_IpNa) [dimensionless] + NV_Ith_S(this->mParameters, 11) = 0; // (var_fast_sodium_current__shift_INa_inact) [millivolt] + NV_Ith_S(this->mParameters, 12) = 1.7; // (var_time_independent_potassium_current__g_K1) [microS] + NV_Ith_S(this->mParameters, 13) = 0.01; // (var_Na_Ca_exchanger__k_NaCa) [nanoA] + } + + Cellhilgemann_noble_model_1987FromCellMLCvodeOpt::~Cellhilgemann_noble_model_1987FromCellMLCvodeOpt() + { + } + + AbstractLookupTableCollection* Cellhilgemann_noble_model_1987FromCellMLCvodeOpt::GetLookupTableCollection() + { + return Cellhilgemann_noble_model_1987FromCellMLCvodeOpt_LookupTables::Instance(); + } + + void Cellhilgemann_noble_model_1987FromCellMLCvodeOpt::VerifyStateVariables() + { + + const double tol = 100*this->mAbsTol; + N_Vector rY = rGetStateVariables(); + std::string error_message = ""; + + for (unsigned i=0; i < 15; i++) + { + if(std::isnan(NV_Ith_S(rY, i))){ + error_message += "State variable " + this->rGetStateVariableNames()[i] + " is not a number\n"; + } + if(std::isinf(NV_Ith_S(rY, i))){ + error_message += "State variable " + this->rGetStateVariableNames()[i] + " has become INFINITE\n"; + } + if(this->is_concentration[i] && NV_Ith_S(rY, i) < -tol) + { + error_message += "Concentration " + this->rGetStateVariableNames()[i] + " below 0\n"; + } + if(this->is_probability[i] && NV_Ith_S(rY, i) < -tol) + { + error_message += "Probability " + this->rGetStateVariableNames()[i] + " below 0\n"; + } + if(this->is_probability[i] && NV_Ith_S(rY, i) > 1 + tol) + { + error_message += "Probability " + this->rGetStateVariableNames()[i] + " above 1\n"; + } + } + if (error_message != ""){ + EXCEPTION(DumpState(error_message)); + } + } + + double Cellhilgemann_noble_model_1987FromCellMLCvodeOpt::GetIIonic(const std::vector* pStateVariables) + { + // For state variable interpolation (SVI) we read in interpolated state variables, + // otherwise for ionic current interpolation (ICI) we use the state variables of this model (node). + N_Vector rY; + bool made_new_cvode_vector = false; + if (!pStateVariables) + { + rY = rGetStateVariables(); + } + else + { + made_new_cvode_vector = true; + rY = MakeNVector(*pStateVariables); + } + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : NV_Ith_S(rY, 0)); + // Units: millivolt; Initial value: -88.0 + double var_chaste_interface__intracellular_calcium_concentration__Ca_i = NV_Ith_S(rY, 1); + // Units: millimolar; Initial value: 1e-05 + double var_chaste_interface__fast_sodium_current_m_gate__m = NV_Ith_S(rY, 2); + // Units: dimensionless; Initial value: 0.076 + double var_chaste_interface__fast_sodium_current_h_gate__h = NV_Ith_S(rY, 3); + // Units: dimensionless; Initial value: 0.015 + double var_chaste_interface__second_inward_calcium_current_d_gate__d = NV_Ith_S(rY, 4); + // Units: dimensionless; Initial value: 0.0011 + double var_chaste_interface__second_inward_calcium_current_f_Ca_gate__f_Ca = NV_Ith_S(rY, 5); + // Units: dimensionless; Initial value: 0.785 + double var_chaste_interface__intracellular_sodium_concentration__Na_i = NV_Ith_S(rY, 8); + // Units: millimolar; Initial value: 6.5 + double var_chaste_interface__extracellular_calcium_concentration__Ca_o = NV_Ith_S(rY, 9); + // Units: millimolar; Initial value: 2.0 + double var_chaste_interface__intracellular_potassium_concentration__K_i = NV_Ith_S(rY, 10); + // Units: millimolar; Initial value: 140.0 + + // Lookup table indexing + const bool _oob_0 = Cellhilgemann_noble_model_1987FromCellMLCvodeOpt_LookupTables::Instance()->CheckIndex0(var_chaste_interface__membrane__V); +// LCOV_EXCL_START + if (_oob_0) + EXCEPTION(DumpState("membrane_voltage outside lookup table range", rY)); +// LCOV_EXCL_STOP + const double* const _lt_0_row = Cellhilgemann_noble_model_1987FromCellMLCvodeOpt_LookupTables::Instance()->IndexTable0(var_chaste_interface__membrane__V); + + const double var_Na_Ca_exchanger__i_NaCa_converted = 0.001 * (pow(var_chaste_interface__intracellular_sodium_concentration__Na_i, 3) * var_chaste_interface__extracellular_calcium_concentration__Ca_o * _lt_0_row[0] - pow(NV_Ith_S(mParameters, 6), 3) * var_chaste_interface__intracellular_calcium_concentration__Ca_i * _lt_0_row[1]) * HeartConfig::Instance()->GetCapacitance() * NV_Ith_S(mParameters, 13) / ((1 + 144.92753623188406 * var_chaste_interface__intracellular_calcium_concentration__Ca_i) * (1 + 0.0001 * pow(NV_Ith_S(mParameters, 6), 3) * var_chaste_interface__intracellular_calcium_concentration__Ca_i + 0.0001 * pow(var_chaste_interface__intracellular_sodium_concentration__Na_i, 3) * var_chaste_interface__extracellular_calcium_concentration__Ca_o) * NV_Ith_S(mParameters, 8)); // uA_per_cm2 + const double var_calcium_background_current__i_b_Ca = 0.0050000000000000001 * var_chaste_interface__membrane__V - 0.066784401649239128 * log(var_chaste_interface__extracellular_calcium_concentration__Ca_o / var_chaste_interface__intracellular_calcium_concentration__Ca_i); // nanoA + const double var_fast_sodium_current__i_Na_converted = 0.001 * pow(var_chaste_interface__fast_sodium_current_m_gate__m, 3) * (-26.713760659695652 * log((NV_Ith_S(mParameters, 6) + 0.12 * NV_Ith_S(mParameters, 5)) / (var_chaste_interface__intracellular_sodium_concentration__Na_i + 0.12 * var_chaste_interface__intracellular_potassium_concentration__K_i)) + var_chaste_interface__membrane__V) * HeartConfig::Instance()->GetCapacitance() * NV_Ith_S(mParameters, 9) * var_chaste_interface__fast_sodium_current_h_gate__h / NV_Ith_S(mParameters, 8); // uA_per_cm2 + const double var_second_inward_calcium_current__i_si_converted = 0.001 * ((((var_chaste_interface__membrane__V >= 49.999997328623934) && (var_chaste_interface__membrane__V <= 50.000002671376066)) ? (187169.45411399176 * (-49.999997328623934 + var_chaste_interface__membrane__V) * (9.9999999999858744e-10 * (1 - var_chaste_interface__second_inward_calcium_current_f_Ca_gate__f_Ca) * (1 - var_chaste_interface__intracellular_calcium_concentration__Ca_i / (0.001 + var_chaste_interface__intracellular_calcium_concentration__Ca_i)) * (var_chaste_interface__intracellular_sodium_concentration__Na_i * exp(1.8716945411372736) - NV_Ith_S(mParameters, 6) * exp(9.9999999999858739e-8)) * NV_Ith_S(mParameters, 7) * var_chaste_interface__second_inward_calcium_current_d_gate__d / (1 - exp(9.9999999999858739e-8)) + 9.9999999999858744e-10 * (1 - var_chaste_interface__second_inward_calcium_current_f_Ca_gate__f_Ca) * (1 - var_chaste_interface__intracellular_calcium_concentration__Ca_i / (0.001 + var_chaste_interface__intracellular_calcium_concentration__Ca_i)) * (var_chaste_interface__intracellular_sodium_concentration__Na_i * exp(1.8716945411372736) - NV_Ith_S(mParameters, 6) * exp(-9.9999999999858739e-8)) * NV_Ith_S(mParameters, 7) * var_chaste_interface__second_inward_calcium_current_d_gate__d / (1 - exp(-9.9999999999858739e-8))) - 9.9999999999858744e-10 * (1 - var_chaste_interface__second_inward_calcium_current_f_Ca_gate__f_Ca) * (1 - var_chaste_interface__intracellular_calcium_concentration__Ca_i / (0.001 + var_chaste_interface__intracellular_calcium_concentration__Ca_i)) * (var_chaste_interface__intracellular_sodium_concentration__Na_i * exp(1.8716945411372736) - NV_Ith_S(mParameters, 6) * exp(9.9999999999858739e-8)) * NV_Ith_S(mParameters, 7) * var_chaste_interface__second_inward_calcium_current_d_gate__d / (1 - exp(9.9999999999858739e-8))) : (0.00037433890822745472 * (1 - var_chaste_interface__second_inward_calcium_current_f_Ca_gate__f_Ca) * (1 - var_chaste_interface__intracellular_calcium_concentration__Ca_i / (0.001 + var_chaste_interface__intracellular_calcium_concentration__Ca_i)) * (-50 + var_chaste_interface__membrane__V) * (var_chaste_interface__intracellular_sodium_concentration__Na_i * exp(1.8716945411372736) - NV_Ith_S(mParameters, 6) * _lt_0_row[2]) * NV_Ith_S(mParameters, 7) * var_chaste_interface__second_inward_calcium_current_d_gate__d / (_lt_0_row[3]))) + (((var_chaste_interface__membrane__V >= 49.999997328623934) && (var_chaste_interface__membrane__V <= 50.000002671376066)) ? (187169.45411399176 * (-49.999997328623934 + var_chaste_interface__membrane__V) * (1.999999999997175e-10 * (1 - var_chaste_interface__second_inward_calcium_current_f_Ca_gate__f_Ca) * (1 - var_chaste_interface__intracellular_calcium_concentration__Ca_i / (0.001 + var_chaste_interface__intracellular_calcium_concentration__Ca_i)) * (var_chaste_interface__intracellular_potassium_concentration__K_i * exp(1.8716945411372736) - NV_Ith_S(mParameters, 5) * exp(9.9999999999858739e-8)) * NV_Ith_S(mParameters, 7) * var_chaste_interface__second_inward_calcium_current_d_gate__d / (1 - exp(9.9999999999858739e-8)) + 1.999999999997175e-10 * (1 - var_chaste_interface__second_inward_calcium_current_f_Ca_gate__f_Ca) * (1 - var_chaste_interface__intracellular_calcium_concentration__Ca_i / (0.001 + var_chaste_interface__intracellular_calcium_concentration__Ca_i)) * (var_chaste_interface__intracellular_potassium_concentration__K_i * exp(1.8716945411372736) - NV_Ith_S(mParameters, 5) * exp(-9.9999999999858739e-8)) * NV_Ith_S(mParameters, 7) * var_chaste_interface__second_inward_calcium_current_d_gate__d / (1 - exp(-9.9999999999858739e-8))) - 1.999999999997175e-10 * (1 - var_chaste_interface__second_inward_calcium_current_f_Ca_gate__f_Ca) * (1 - var_chaste_interface__intracellular_calcium_concentration__Ca_i / (0.001 + var_chaste_interface__intracellular_calcium_concentration__Ca_i)) * (var_chaste_interface__intracellular_potassium_concentration__K_i * exp(1.8716945411372736) - NV_Ith_S(mParameters, 5) * exp(9.9999999999858739e-8)) * NV_Ith_S(mParameters, 7) * var_chaste_interface__second_inward_calcium_current_d_gate__d / (1 - exp(9.9999999999858739e-8))) : (7.4867781645490941e-5 * (1 - var_chaste_interface__second_inward_calcium_current_f_Ca_gate__f_Ca) * (1 - var_chaste_interface__intracellular_calcium_concentration__Ca_i / (0.001 + var_chaste_interface__intracellular_calcium_concentration__Ca_i)) * (-50 + var_chaste_interface__membrane__V) * (var_chaste_interface__intracellular_potassium_concentration__K_i * exp(1.8716945411372736) - NV_Ith_S(mParameters, 5) * _lt_0_row[2]) * NV_Ith_S(mParameters, 7) * var_chaste_interface__second_inward_calcium_current_d_gate__d / (_lt_0_row[3]))) + (((var_chaste_interface__membrane__V >= 49.999998664311967) && (var_chaste_interface__membrane__V <= 50.000001335688033)) ? (374338.90823576227 * (-49.999998664311967 + var_chaste_interface__membrane__V) * (1.9999999999556149e-7 * (1 - var_chaste_interface__second_inward_calcium_current_f_Ca_gate__f_Ca) * (1 - var_chaste_interface__intracellular_calcium_concentration__Ca_i / (0.001 + var_chaste_interface__intracellular_calcium_concentration__Ca_i)) * (var_chaste_interface__intracellular_calcium_concentration__Ca_i * exp(3.7433890822745473) - var_chaste_interface__extracellular_calcium_concentration__Ca_o * exp(9.9999999997780743e-8)) * NV_Ith_S(mParameters, 7) * var_chaste_interface__second_inward_calcium_current_d_gate__d / (1 - exp(9.9999999997780743e-8)) + 1.9999999999556149e-7 * (1 - var_chaste_interface__second_inward_calcium_current_f_Ca_gate__f_Ca) * (1 - var_chaste_interface__intracellular_calcium_concentration__Ca_i / (0.001 + var_chaste_interface__intracellular_calcium_concentration__Ca_i)) * (var_chaste_interface__intracellular_calcium_concentration__Ca_i * exp(3.7433890822745473) - var_chaste_interface__extracellular_calcium_concentration__Ca_o * exp(-9.9999999997780743e-8)) * NV_Ith_S(mParameters, 7) * var_chaste_interface__second_inward_calcium_current_d_gate__d / (1 - exp(-9.9999999997780743e-8))) - 1.9999999999556149e-7 * (1 - var_chaste_interface__second_inward_calcium_current_f_Ca_gate__f_Ca) * (1 - var_chaste_interface__intracellular_calcium_concentration__Ca_i / (0.001 + var_chaste_interface__intracellular_calcium_concentration__Ca_i)) * (var_chaste_interface__intracellular_calcium_concentration__Ca_i * exp(3.7433890822745473) - var_chaste_interface__extracellular_calcium_concentration__Ca_o * exp(9.9999999997780743e-8)) * NV_Ith_S(mParameters, 7) * var_chaste_interface__second_inward_calcium_current_d_gate__d / (1 - exp(9.9999999997780743e-8))) : (0.14973556329098189 * (1 - var_chaste_interface__second_inward_calcium_current_f_Ca_gate__f_Ca) * (1 - var_chaste_interface__intracellular_calcium_concentration__Ca_i / (0.001 + var_chaste_interface__intracellular_calcium_concentration__Ca_i)) * (-50 + var_chaste_interface__membrane__V) * (var_chaste_interface__intracellular_calcium_concentration__Ca_i * exp(3.7433890822745473) - var_chaste_interface__extracellular_calcium_concentration__Ca_o * _lt_0_row[4]) * NV_Ith_S(mParameters, 7) * var_chaste_interface__second_inward_calcium_current_d_gate__d / (_lt_0_row[5])))) * HeartConfig::Instance()->GetCapacitance() / NV_Ith_S(mParameters, 8); // uA_per_cm2 + const double var_sodium_background_current__i_b_Na = 0.012 * var_chaste_interface__membrane__V - 0.32056512791634778 * log(NV_Ith_S(mParameters, 6) / var_chaste_interface__intracellular_sodium_concentration__Na_i); // nanoA + const double var_sodium_potassium_pump__i_NaK = 14 * NV_Ith_S(mParameters, 5) * var_chaste_interface__intracellular_sodium_concentration__Na_i / ((1 + NV_Ith_S(mParameters, 5)) * (40 + var_chaste_interface__intracellular_sodium_concentration__Na_i)); // nanoA + const double var_time_independent_potassium_current__E_K = 26.713760659695652 * log(NV_Ith_S(mParameters, 5) / var_chaste_interface__intracellular_potassium_concentration__K_i); // millivolt + const double var_potassium_background_current__i_b_K = 0.17000000000000001 * var_chaste_interface__membrane__V - 0.17000000000000001 * var_time_independent_potassium_current__E_K; // nanoA + const double var_time_independent_potassium_current__i_K1_converted = 0.001 * (-var_time_independent_potassium_current__E_K + var_chaste_interface__membrane__V) * HeartConfig::Instance()->GetCapacitance() * NV_Ith_S(mParameters, 5) * NV_Ith_S(mParameters, 12) / ((1 + exp(-0.74867781645490938 + 0.074867781645490947 * var_chaste_interface__membrane__V - 0.074867781645490947 * var_time_independent_potassium_current__E_K)) * (10 + NV_Ith_S(mParameters, 5)) * NV_Ith_S(mParameters, 8)); // uA_per_cm2 + const double var_chaste_interface__i_ionic = ((var_Na_Ca_exchanger__i_NaCa_converted + var_fast_sodium_current__i_Na_converted + var_second_inward_calcium_current__i_si_converted + var_time_independent_potassium_current__i_K1_converted) * NV_Ith_S(mParameters, 8) + 0.001 * HeartConfig::Instance()->GetCapacitance() * var_calcium_background_current__i_b_Ca + 0.001 * HeartConfig::Instance()->GetCapacitance() * var_potassium_background_current__i_b_K + 0.001 * HeartConfig::Instance()->GetCapacitance() * var_sodium_background_current__i_b_Na + 0.001 * HeartConfig::Instance()->GetCapacitance() * var_sodium_potassium_pump__i_NaK) / NV_Ith_S(mParameters, 8); // uA_per_cm2 + + const double i_ionic = var_chaste_interface__i_ionic; + if (made_new_cvode_vector) + { + DeleteVector(rY); + } + EXCEPT_IF_NOT(!std::isnan(i_ionic)); + return i_ionic; + } + + void Cellhilgemann_noble_model_1987FromCellMLCvodeOpt::EvaluateYDerivatives(double var_chaste_interface__environment__time_converted, const N_Vector rY, N_Vector rDY) + { + // Inputs: + // Time units: millisecond + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : NV_Ith_S(rY, 0)); + // Units: millivolt; Initial value: -88.0 + double var_chaste_interface__intracellular_calcium_concentration__Ca_i = NV_Ith_S(rY, 1); + // Units: millimolar; Initial value: 1e-05 + double var_chaste_interface__fast_sodium_current_m_gate__m = NV_Ith_S(rY, 2); + // Units: dimensionless; Initial value: 0.076 + double var_chaste_interface__fast_sodium_current_h_gate__h = NV_Ith_S(rY, 3); + // Units: dimensionless; Initial value: 0.015 + double var_chaste_interface__second_inward_calcium_current_d_gate__d = NV_Ith_S(rY, 4); + // Units: dimensionless; Initial value: 0.0011 + double var_chaste_interface__second_inward_calcium_current_f_Ca_gate__f_Ca = NV_Ith_S(rY, 5); + // Units: dimensionless; Initial value: 0.785 + double var_chaste_interface__calcium_release__ActFrac = NV_Ith_S(rY, 6); + // Units: dimensionless; Initial value: 0.0 + double var_chaste_interface__calcium_release__ProdFrac = NV_Ith_S(rY, 7); + // Units: dimensionless; Initial value: 0.0 + double var_chaste_interface__intracellular_sodium_concentration__Na_i = NV_Ith_S(rY, 8); + // Units: millimolar; Initial value: 6.5 + double var_chaste_interface__extracellular_calcium_concentration__Ca_o = NV_Ith_S(rY, 9); + // Units: millimolar; Initial value: 2.0 + double var_chaste_interface__intracellular_potassium_concentration__K_i = NV_Ith_S(rY, 10); + // Units: millimolar; Initial value: 140.0 + double var_chaste_interface__intracellular_calcium_concentration__Ca_up = NV_Ith_S(rY, 11); + // Units: millimolar; Initial value: 0.3 + double var_chaste_interface__intracellular_calcium_concentration__Ca_rel = NV_Ith_S(rY, 12); + // Units: millimolar; Initial value: 0.3 + double var_chaste_interface__intracellular_calcium_concentration__Ca_Calmod = NV_Ith_S(rY, 13); + // Units: millimolar; Initial value: 0.0005 + double var_chaste_interface__intracellular_calcium_concentration__Ca_Trop = NV_Ith_S(rY, 14); + // Units: millimolar; Initial value: 0.0015 + + // Lookup table indexing + const bool _oob_0 = Cellhilgemann_noble_model_1987FromCellMLCvodeOpt_LookupTables::Instance()->CheckIndex0(var_chaste_interface__membrane__V); +// LCOV_EXCL_START + if (_oob_0) + EXCEPTION(DumpState("membrane_voltage outside lookup table range", rY , var_chaste_interface__environment__time_converted)); +// LCOV_EXCL_STOP + const double* const _lt_0_row = Cellhilgemann_noble_model_1987FromCellMLCvodeOpt_LookupTables::Instance()->IndexTable0(var_chaste_interface__membrane__V); + + // Mathematics + double d_dt_chaste_interface_var_membrane__V; + const double var_calcium_release__RegBindSite = pow(var_chaste_interface__intracellular_calcium_concentration__Ca_i, 2) / pow((NV_Ith_S(mParameters, 2) + var_chaste_interface__intracellular_calcium_concentration__Ca_i), 2); // dimensionless + const double var_calcium_release__InactRate = 60 + 500 * var_calcium_release__RegBindSite; // per_second + const double d_dt_chaste_interface_var_calcium_release__ProdFrac = -0.00059999999999999995 * var_chaste_interface__calcium_release__ProdFrac + 0.001 * var_chaste_interface__calcium_release__ActFrac * var_calcium_release__InactRate; // 1 / millisecond + const double var_calcium_release__i_rel = (pow(var_chaste_interface__calcium_release__ActFrac, 2) * NV_Ith_S(mParameters, 1) / pow((0.25 + var_chaste_interface__calcium_release__ActFrac), 2) + NV_Ith_S(mParameters, 0)) * var_chaste_interface__intracellular_calcium_concentration__Ca_rel; // millimolar_per_second + const double var_calcium_translocation__i_trans = 50 * var_chaste_interface__intracellular_calcium_concentration__Ca_up - 50 * var_chaste_interface__intracellular_calcium_concentration__Ca_rel; // millimolar_per_second + const double d_dt_chaste_interface_var_intracellular_calcium_concentration__Ca_rel = 9.9999999999999991e-5 * var_calcium_translocation__i_trans - 0.001 * var_calcium_release__i_rel; // millimolar / millisecond + const double var_intracellular_calcium_concentration__Ca_Calmod_orig_deriv = -50 * var_chaste_interface__intracellular_calcium_concentration__Ca_Calmod + 100000 * (0.02 - var_chaste_interface__intracellular_calcium_concentration__Ca_Calmod) * var_chaste_interface__intracellular_calcium_concentration__Ca_i; // millimolar / second + const double d_dt_chaste_interface_var_intracellular_calcium_concentration__Ca_Calmod = 0.001 * var_intracellular_calcium_concentration__Ca_Calmod_orig_deriv; // millimolar / millisecond + const double var_intracellular_calcium_concentration__Ca_Trop_orig_deriv = -200 * var_chaste_interface__intracellular_calcium_concentration__Ca_Trop + 100000 * (0.14999999999999999 - var_chaste_interface__intracellular_calcium_concentration__Ca_Trop) * var_chaste_interface__intracellular_calcium_concentration__Ca_i; // millimolar / second + const double d_dt_chaste_interface_var_intracellular_calcium_concentration__Ca_Trop = 0.001 * var_intracellular_calcium_concentration__Ca_Trop_orig_deriv; // millimolar / millisecond + const double var_Na_Ca_exchanger__i_NaCa = (pow(var_chaste_interface__intracellular_sodium_concentration__Na_i, 3) * var_chaste_interface__extracellular_calcium_concentration__Ca_o * _lt_0_row[0] - pow(NV_Ith_S(mParameters, 6), 3) * var_chaste_interface__intracellular_calcium_concentration__Ca_i * _lt_0_row[1]) * NV_Ith_S(mParameters, 13) / ((1 + 144.92753623188406 * var_chaste_interface__intracellular_calcium_concentration__Ca_i) * (1 + 0.0001 * pow(NV_Ith_S(mParameters, 6), 3) * var_chaste_interface__intracellular_calcium_concentration__Ca_i + 0.0001 * pow(var_chaste_interface__intracellular_sodium_concentration__Na_i, 3) * var_chaste_interface__extracellular_calcium_concentration__Ca_o)); // nanoA + const double var_calcium_background_current__i_b_Ca = 0.0050000000000000001 * var_chaste_interface__membrane__V - 0.066784401649239128 * log(var_chaste_interface__extracellular_calcium_concentration__Ca_o / var_chaste_interface__intracellular_calcium_concentration__Ca_i); // nanoA + const double d_dt_chaste_interface_var_calcium_release__ActFrac = 0.001 * (_lt_0_row[6] + 500 * var_calcium_release__RegBindSite) * (1 - var_chaste_interface__calcium_release__ActFrac - var_chaste_interface__calcium_release__ProdFrac) - 0.001 * var_chaste_interface__calcium_release__ActFrac * var_calcium_release__InactRate; // 1 / millisecond + const double var_fast_sodium_current__i_Na = pow(var_chaste_interface__fast_sodium_current_m_gate__m, 3) * (-26.713760659695652 * log((NV_Ith_S(mParameters, 6) + 0.12 * NV_Ith_S(mParameters, 5)) / (var_chaste_interface__intracellular_sodium_concentration__Na_i + 0.12 * var_chaste_interface__intracellular_potassium_concentration__K_i)) + var_chaste_interface__membrane__V) * NV_Ith_S(mParameters, 9) * var_chaste_interface__fast_sodium_current_h_gate__h; // nanoA + const double var_fast_sodium_current_h_gate__alpha_h = 20 * exp(-9.375 + 0.125 * NV_Ith_S(mParameters, 11) - 0.125 * var_chaste_interface__membrane__V); // per_second + const double var_fast_sodium_current_h_gate__beta_h = 2000 / (1 + 320 * exp(-7.5 + 0.10000000000000001 * NV_Ith_S(mParameters, 11) - 0.10000000000000001 * var_chaste_interface__membrane__V)); // per_second + const double d_dt_chaste_interface_var_fast_sodium_current_h_gate__h = 0.001 * (var_fast_sodium_current_h_gate__alpha_h + var_fast_sodium_current_h_gate__beta_h) * (-var_chaste_interface__fast_sodium_current_h_gate__h + 0.01 * NV_Ith_S(mParameters, 10) + (1 - 0.01 * NV_Ith_S(mParameters, 10)) * var_fast_sodium_current_h_gate__alpha_h / (var_fast_sodium_current_h_gate__alpha_h + var_fast_sodium_current_h_gate__beta_h)); // 1 / millisecond + const double d_dt_chaste_interface_var_fast_sodium_current_m_gate__m = 0.001 * (1 - var_chaste_interface__fast_sodium_current_m_gate__m) * _lt_0_row[7] - 8 * var_chaste_interface__fast_sodium_current_m_gate__m * _lt_0_row[8]; // 1 / millisecond + const double var_sarcoplasmic_reticulum_calcium_pump__i_up = (3 * var_chaste_interface__intracellular_calcium_concentration__Ca_i / (0.00041999999999999996 + 0.00023999999999999998 * var_chaste_interface__intracellular_calcium_concentration__Ca_up + var_chaste_interface__intracellular_calcium_concentration__Ca_i) - 5.52e-5 * var_chaste_interface__intracellular_calcium_concentration__Ca_up / (0.00041999999999999996 + 0.00023999999999999998 * var_chaste_interface__intracellular_calcium_concentration__Ca_up + var_chaste_interface__intracellular_calcium_concentration__Ca_i)) * NV_Ith_S(mParameters, 3); // millimolar_per_second + const double d_dt_chaste_interface_var_intracellular_calcium_concentration__Ca_up = 0.048999999999999995 * var_sarcoplasmic_reticulum_calcium_pump__i_up - 0.001 * var_calcium_translocation__i_trans; // millimolar / millisecond + const double var_second_inward_calcium_current_d_gate__E0_d = 19 + var_chaste_interface__membrane__V; // millivolt + const double d_dt_chaste_interface_var_second_inward_calcium_current_d_gate__d = 0.001 * (1 - var_chaste_interface__second_inward_calcium_current_d_gate__d) * ((fabs(var_second_inward_calcium_current_d_gate__E0_d) < 0.0001) ? (120) : (30 * var_second_inward_calcium_current_d_gate__E0_d / (1 - exp(-0.25 * var_second_inward_calcium_current_d_gate__E0_d)))) - 0.001 * ((fabs(var_second_inward_calcium_current_d_gate__E0_d) < 0.0001) ? (120) : (12 * var_second_inward_calcium_current_d_gate__E0_d / (-1 + exp(0.10000000000000001 * var_second_inward_calcium_current_d_gate__E0_d)))) * var_chaste_interface__second_inward_calcium_current_d_gate__d; // 1 / millisecond + const double var_second_inward_calcium_current_f_Ca_gate__E0_f = 34 + var_chaste_interface__membrane__V; // millivolt + const double var_second_inward_calcium_current__i_siCa = (((var_chaste_interface__membrane__V >= 49.999998664311967) && (var_chaste_interface__membrane__V <= 50.000001335688033)) ? (374338.90823576227 * (-49.999998664311967 + var_chaste_interface__membrane__V) * (1.9999999999556149e-7 * (1 - var_chaste_interface__second_inward_calcium_current_f_Ca_gate__f_Ca) * (1 - var_chaste_interface__intracellular_calcium_concentration__Ca_i / (0.001 + var_chaste_interface__intracellular_calcium_concentration__Ca_i)) * (var_chaste_interface__intracellular_calcium_concentration__Ca_i * exp(3.7433890822745473) - var_chaste_interface__extracellular_calcium_concentration__Ca_o * exp(9.9999999997780743e-8)) * NV_Ith_S(mParameters, 7) * var_chaste_interface__second_inward_calcium_current_d_gate__d / (1 - exp(9.9999999997780743e-8)) + 1.9999999999556149e-7 * (1 - var_chaste_interface__second_inward_calcium_current_f_Ca_gate__f_Ca) * (1 - var_chaste_interface__intracellular_calcium_concentration__Ca_i / (0.001 + var_chaste_interface__intracellular_calcium_concentration__Ca_i)) * (var_chaste_interface__intracellular_calcium_concentration__Ca_i * exp(3.7433890822745473) - var_chaste_interface__extracellular_calcium_concentration__Ca_o * exp(-9.9999999997780743e-8)) * NV_Ith_S(mParameters, 7) * var_chaste_interface__second_inward_calcium_current_d_gate__d / (1 - exp(-9.9999999997780743e-8))) - 1.9999999999556149e-7 * (1 - var_chaste_interface__second_inward_calcium_current_f_Ca_gate__f_Ca) * (1 - var_chaste_interface__intracellular_calcium_concentration__Ca_i / (0.001 + var_chaste_interface__intracellular_calcium_concentration__Ca_i)) * (var_chaste_interface__intracellular_calcium_concentration__Ca_i * exp(3.7433890822745473) - var_chaste_interface__extracellular_calcium_concentration__Ca_o * exp(9.9999999997780743e-8)) * NV_Ith_S(mParameters, 7) * var_chaste_interface__second_inward_calcium_current_d_gate__d / (1 - exp(9.9999999997780743e-8))) : (0.14973556329098189 * (1 - var_chaste_interface__second_inward_calcium_current_f_Ca_gate__f_Ca) * (1 - var_chaste_interface__intracellular_calcium_concentration__Ca_i / (0.001 + var_chaste_interface__intracellular_calcium_concentration__Ca_i)) * (-50 + var_chaste_interface__membrane__V) * (var_chaste_interface__intracellular_calcium_concentration__Ca_i * exp(3.7433890822745473) - var_chaste_interface__extracellular_calcium_concentration__Ca_o * _lt_0_row[4]) * NV_Ith_S(mParameters, 7) * var_chaste_interface__second_inward_calcium_current_d_gate__d / (_lt_0_row[5]))); // nanoA + const double d_dt_chaste_interface_var_extracellular_calcium_concentration__Ca_o = 0.001 * (0.001 - 0.00050000000000000001 * var_chaste_interface__extracellular_calcium_concentration__Ca_o - 0.0080543192715385042 * var_Na_Ca_exchanger__i_NaCa - 0.0080543192715385042 * var_calcium_background_current__i_b_Ca - 0.0080543192715385042 * var_second_inward_calcium_current__i_siCa) * NV_Ith_S(mParameters, 4); // millimolar / millisecond + const double d_dt_chaste_interface_var_intracellular_calcium_concentration__Ca_i = 0.00020408163265306126 * var_calcium_release__i_rel + 1.3149909014756744e-5 * var_Na_Ca_exchanger__i_NaCa - 0.001 * var_intracellular_calcium_concentration__Ca_Calmod_orig_deriv - 0.001 * var_intracellular_calcium_concentration__Ca_Trop_orig_deriv - 0.001 * var_sarcoplasmic_reticulum_calcium_pump__i_up - 6.5749545073783721e-6 * var_calcium_background_current__i_b_Ca - 6.5749545073783721e-6 * var_second_inward_calcium_current__i_siCa; // millimolar / millisecond + const double var_second_inward_calcium_current__i_siK = (((var_chaste_interface__membrane__V >= 49.999997328623934) && (var_chaste_interface__membrane__V <= 50.000002671376066)) ? (187169.45411399176 * (-49.999997328623934 + var_chaste_interface__membrane__V) * (1.999999999997175e-10 * (1 - var_chaste_interface__second_inward_calcium_current_f_Ca_gate__f_Ca) * (1 - var_chaste_interface__intracellular_calcium_concentration__Ca_i / (0.001 + var_chaste_interface__intracellular_calcium_concentration__Ca_i)) * (var_chaste_interface__intracellular_potassium_concentration__K_i * exp(1.8716945411372736) - NV_Ith_S(mParameters, 5) * exp(9.9999999999858739e-8)) * NV_Ith_S(mParameters, 7) * var_chaste_interface__second_inward_calcium_current_d_gate__d / (1 - exp(9.9999999999858739e-8)) + 1.999999999997175e-10 * (1 - var_chaste_interface__second_inward_calcium_current_f_Ca_gate__f_Ca) * (1 - var_chaste_interface__intracellular_calcium_concentration__Ca_i / (0.001 + var_chaste_interface__intracellular_calcium_concentration__Ca_i)) * (var_chaste_interface__intracellular_potassium_concentration__K_i * exp(1.8716945411372736) - NV_Ith_S(mParameters, 5) * exp(-9.9999999999858739e-8)) * NV_Ith_S(mParameters, 7) * var_chaste_interface__second_inward_calcium_current_d_gate__d / (1 - exp(-9.9999999999858739e-8))) - 1.999999999997175e-10 * (1 - var_chaste_interface__second_inward_calcium_current_f_Ca_gate__f_Ca) * (1 - var_chaste_interface__intracellular_calcium_concentration__Ca_i / (0.001 + var_chaste_interface__intracellular_calcium_concentration__Ca_i)) * (var_chaste_interface__intracellular_potassium_concentration__K_i * exp(1.8716945411372736) - NV_Ith_S(mParameters, 5) * exp(9.9999999999858739e-8)) * NV_Ith_S(mParameters, 7) * var_chaste_interface__second_inward_calcium_current_d_gate__d / (1 - exp(9.9999999999858739e-8))) : (7.4867781645490941e-5 * (1 - var_chaste_interface__second_inward_calcium_current_f_Ca_gate__f_Ca) * (1 - var_chaste_interface__intracellular_calcium_concentration__Ca_i / (0.001 + var_chaste_interface__intracellular_calcium_concentration__Ca_i)) * (-50 + var_chaste_interface__membrane__V) * (var_chaste_interface__intracellular_potassium_concentration__K_i * exp(1.8716945411372736) - NV_Ith_S(mParameters, 5) * _lt_0_row[2]) * NV_Ith_S(mParameters, 7) * var_chaste_interface__second_inward_calcium_current_d_gate__d / (_lt_0_row[3]))); // nanoA + const double var_second_inward_calcium_current__i_siNa = (((var_chaste_interface__membrane__V >= 49.999997328623934) && (var_chaste_interface__membrane__V <= 50.000002671376066)) ? (187169.45411399176 * (-49.999997328623934 + var_chaste_interface__membrane__V) * (9.9999999999858744e-10 * (1 - var_chaste_interface__second_inward_calcium_current_f_Ca_gate__f_Ca) * (1 - var_chaste_interface__intracellular_calcium_concentration__Ca_i / (0.001 + var_chaste_interface__intracellular_calcium_concentration__Ca_i)) * (var_chaste_interface__intracellular_sodium_concentration__Na_i * exp(1.8716945411372736) - NV_Ith_S(mParameters, 6) * exp(9.9999999999858739e-8)) * NV_Ith_S(mParameters, 7) * var_chaste_interface__second_inward_calcium_current_d_gate__d / (1 - exp(9.9999999999858739e-8)) + 9.9999999999858744e-10 * (1 - var_chaste_interface__second_inward_calcium_current_f_Ca_gate__f_Ca) * (1 - var_chaste_interface__intracellular_calcium_concentration__Ca_i / (0.001 + var_chaste_interface__intracellular_calcium_concentration__Ca_i)) * (var_chaste_interface__intracellular_sodium_concentration__Na_i * exp(1.8716945411372736) - NV_Ith_S(mParameters, 6) * exp(-9.9999999999858739e-8)) * NV_Ith_S(mParameters, 7) * var_chaste_interface__second_inward_calcium_current_d_gate__d / (1 - exp(-9.9999999999858739e-8))) - 9.9999999999858744e-10 * (1 - var_chaste_interface__second_inward_calcium_current_f_Ca_gate__f_Ca) * (1 - var_chaste_interface__intracellular_calcium_concentration__Ca_i / (0.001 + var_chaste_interface__intracellular_calcium_concentration__Ca_i)) * (var_chaste_interface__intracellular_sodium_concentration__Na_i * exp(1.8716945411372736) - NV_Ith_S(mParameters, 6) * exp(9.9999999999858739e-8)) * NV_Ith_S(mParameters, 7) * var_chaste_interface__second_inward_calcium_current_d_gate__d / (1 - exp(9.9999999999858739e-8))) : (0.00037433890822745472 * (1 - var_chaste_interface__second_inward_calcium_current_f_Ca_gate__f_Ca) * (1 - var_chaste_interface__intracellular_calcium_concentration__Ca_i / (0.001 + var_chaste_interface__intracellular_calcium_concentration__Ca_i)) * (-50 + var_chaste_interface__membrane__V) * (var_chaste_interface__intracellular_sodium_concentration__Na_i * exp(1.8716945411372736) - NV_Ith_S(mParameters, 6) * _lt_0_row[2]) * NV_Ith_S(mParameters, 7) * var_chaste_interface__second_inward_calcium_current_d_gate__d / (_lt_0_row[3]))); // nanoA + const double d_dt_chaste_interface_var_second_inward_calcium_current_f_Ca_gate__f_Ca = 0.012 * ((1 - var_chaste_interface__second_inward_calcium_current_f_Ca_gate__f_Ca) * (1 - var_chaste_interface__intracellular_calcium_concentration__Ca_i / (0.001 + var_chaste_interface__intracellular_calcium_concentration__Ca_i)) + 120 * (1 - var_chaste_interface__second_inward_calcium_current_f_Ca_gate__f_Ca) * var_chaste_interface__intracellular_calcium_concentration__Ca_i / (0.001 + var_chaste_interface__intracellular_calcium_concentration__Ca_i)) / (1 + exp(-0.25 * var_second_inward_calcium_current_f_Ca_gate__E0_f)) - 0.001 * ((fabs(var_second_inward_calcium_current_f_Ca_gate__E0_f) < 0.0001) ? (25) : (6.25 * var_second_inward_calcium_current_f_Ca_gate__E0_f / (-1 + exp(0.25 * var_second_inward_calcium_current_f_Ca_gate__E0_f)))) * var_chaste_interface__second_inward_calcium_current_f_Ca_gate__f_Ca; // 1 / millisecond + const double var_sodium_background_current__i_b_Na = 0.012 * var_chaste_interface__membrane__V - 0.32056512791634778 * log(NV_Ith_S(mParameters, 6) / var_chaste_interface__intracellular_sodium_concentration__Na_i); // nanoA + const double var_sodium_potassium_pump__i_NaK = 14 * NV_Ith_S(mParameters, 5) * var_chaste_interface__intracellular_sodium_concentration__Na_i / ((1 + NV_Ith_S(mParameters, 5)) * (40 + var_chaste_interface__intracellular_sodium_concentration__Na_i)); // nanoA + const double d_dt_chaste_interface_var_intracellular_sodium_concentration__Na_i = -1.3149909014756744e-5 * (3 * var_Na_Ca_exchanger__i_NaCa + 3 * var_sodium_potassium_pump__i_NaK + var_fast_sodium_current__i_Na + var_second_inward_calcium_current__i_siNa + var_sodium_background_current__i_b_Na) * NV_Ith_S(mParameters, 4); // millimolar / millisecond + const double var_time_independent_potassium_current__E_K = 26.713760659695652 * log(NV_Ith_S(mParameters, 5) / var_chaste_interface__intracellular_potassium_concentration__K_i); // millivolt + const double var_potassium_background_current__i_b_K = 0.17000000000000001 * var_chaste_interface__membrane__V - 0.17000000000000001 * var_time_independent_potassium_current__E_K; // nanoA + const double var_time_independent_potassium_current__i_K1 = (-var_time_independent_potassium_current__E_K + var_chaste_interface__membrane__V) * NV_Ith_S(mParameters, 5) * NV_Ith_S(mParameters, 12) / ((1 + exp(-0.74867781645490938 + 0.074867781645490947 * var_chaste_interface__membrane__V - 0.074867781645490947 * var_time_independent_potassium_current__E_K)) * (10 + NV_Ith_S(mParameters, 5))); // nanoA + const double d_dt_chaste_interface_var_intracellular_potassium_concentration__K_i = -1.3149909014756744e-5 * (-2 * var_sodium_potassium_pump__i_NaK + var_potassium_background_current__i_b_K + var_second_inward_calcium_current__i_siK + var_time_independent_potassium_current__i_K1) * NV_Ith_S(mParameters, 4); // millimolar / millisecond + + if (mSetVoltageDerivativeToZero) + { + d_dt_chaste_interface_var_membrane__V = 0.0; + } + else + { + d_dt_chaste_interface_var_membrane__V = 0.001 * (-var_Na_Ca_exchanger__i_NaCa - var_calcium_background_current__i_b_Ca - var_fast_sodium_current__i_Na - var_potassium_background_current__i_b_K - var_second_inward_calcium_current__i_siCa - var_second_inward_calcium_current__i_siK - var_second_inward_calcium_current__i_siNa - var_sodium_background_current__i_b_Na - var_sodium_potassium_pump__i_NaK - var_time_independent_potassium_current__i_K1 - 1000 * GetIntracellularAreaStimulus(var_chaste_interface__environment__time_converted) * NV_Ith_S(mParameters, 8) / HeartConfig::Instance()->GetCapacitance()) / NV_Ith_S(mParameters, 8); // millivolt / millisecond + } + + NV_Ith_S(rDY,0) = d_dt_chaste_interface_var_membrane__V; + NV_Ith_S(rDY,1) = d_dt_chaste_interface_var_intracellular_calcium_concentration__Ca_i; + NV_Ith_S(rDY,2) = d_dt_chaste_interface_var_fast_sodium_current_m_gate__m; + NV_Ith_S(rDY,3) = d_dt_chaste_interface_var_fast_sodium_current_h_gate__h; + NV_Ith_S(rDY,4) = d_dt_chaste_interface_var_second_inward_calcium_current_d_gate__d; + NV_Ith_S(rDY,5) = d_dt_chaste_interface_var_second_inward_calcium_current_f_Ca_gate__f_Ca; + NV_Ith_S(rDY,6) = d_dt_chaste_interface_var_calcium_release__ActFrac; + NV_Ith_S(rDY,7) = d_dt_chaste_interface_var_calcium_release__ProdFrac; + NV_Ith_S(rDY,8) = d_dt_chaste_interface_var_intracellular_sodium_concentration__Na_i; + NV_Ith_S(rDY,9) = d_dt_chaste_interface_var_extracellular_calcium_concentration__Ca_o; + NV_Ith_S(rDY,10) = d_dt_chaste_interface_var_intracellular_potassium_concentration__K_i; + NV_Ith_S(rDY,11) = d_dt_chaste_interface_var_intracellular_calcium_concentration__Ca_up; + NV_Ith_S(rDY,12) = d_dt_chaste_interface_var_intracellular_calcium_concentration__Ca_rel; + NV_Ith_S(rDY,13) = d_dt_chaste_interface_var_intracellular_calcium_concentration__Ca_Calmod; + NV_Ith_S(rDY,14) = d_dt_chaste_interface_var_intracellular_calcium_concentration__Ca_Trop; + } + + N_Vector Cellhilgemann_noble_model_1987FromCellMLCvodeOpt::ComputeDerivedQuantities(double var_chaste_interface__environment__time_converted, const N_Vector & rY) + { + // Inputs: + // Time units: millisecond + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : NV_Ith_S(rY, 0)); + // Units: millivolt; Initial value: -88.0 + double var_chaste_interface__intracellular_calcium_concentration__Ca_i = NV_Ith_S(rY, 1); + // Units: millimolar; Initial value: 1e-05 + double var_chaste_interface__fast_sodium_current_m_gate__m = NV_Ith_S(rY, 2); + // Units: dimensionless; Initial value: 0.076 + double var_chaste_interface__fast_sodium_current_h_gate__h = NV_Ith_S(rY, 3); + // Units: dimensionless; Initial value: 0.015 + double var_chaste_interface__second_inward_calcium_current_d_gate__d = NV_Ith_S(rY, 4); + // Units: dimensionless; Initial value: 0.0011 + double var_chaste_interface__second_inward_calcium_current_f_Ca_gate__f_Ca = NV_Ith_S(rY, 5); + // Units: dimensionless; Initial value: 0.785 + double var_chaste_interface__calcium_release__ActFrac = NV_Ith_S(rY, 6); + // Units: dimensionless; Initial value: 0.0 + double var_chaste_interface__intracellular_sodium_concentration__Na_i = NV_Ith_S(rY, 8); + // Units: millimolar; Initial value: 6.5 + double var_chaste_interface__extracellular_calcium_concentration__Ca_o = NV_Ith_S(rY, 9); + // Units: millimolar; Initial value: 2.0 + double var_chaste_interface__intracellular_potassium_concentration__K_i = NV_Ith_S(rY, 10); + // Units: millimolar; Initial value: 140.0 + double var_chaste_interface__intracellular_calcium_concentration__Ca_rel = NV_Ith_S(rY, 12); + // Units: millimolar; Initial value: 0.3 + + // Lookup table indexing + const bool _oob_0 = Cellhilgemann_noble_model_1987FromCellMLCvodeOpt_LookupTables::Instance()->CheckIndex0(var_chaste_interface__membrane__V); +// LCOV_EXCL_START + if (_oob_0) + EXCEPTION(DumpState("membrane_voltage outside lookup table range", rY , var_chaste_interface__environment__time_converted)); +// LCOV_EXCL_STOP + const double* const _lt_0_row = Cellhilgemann_noble_model_1987FromCellMLCvodeOpt_LookupTables::Instance()->IndexTable0(var_chaste_interface__membrane__V); + + // Mathematics + const double var_Na_Ca_exchanger__d_NaCa = 0.0001; // dimensionless + const double var_Na_Ca_exchanger__gamma = 0.5; // dimensionless + const double var_Na_Ca_exchanger__n_NaCa = 3; // dimensionless + const double var_calcium_release__i_rel = (pow(var_chaste_interface__calcium_release__ActFrac, 2) * NV_Ith_S(mParameters, 1) / pow((0.25 + var_chaste_interface__calcium_release__ActFrac), 2) + NV_Ith_S(mParameters, 0)) * var_chaste_interface__intracellular_calcium_concentration__Ca_rel; // millimolar_per_second + const double var_membrane__F = 96485.341499999995; // coulomb_per_mole + const double var_membrane__R = 8314.4719999999998; // joule_per_kilomole_kelvin + const double var_membrane__T = 310; // kelvin + const double var_membrane__RTONF = var_membrane__R * var_membrane__T / var_membrane__F; // millivolt + const double var_fast_sodium_current__E_mh = var_membrane__RTONF * log((NV_Ith_S(mParameters, 6) + 0.12 * NV_Ith_S(mParameters, 5)) / (var_chaste_interface__intracellular_sodium_concentration__Na_i + 0.12 * var_chaste_interface__intracellular_potassium_concentration__K_i)); // millivolt + const double var_Na_Ca_exchanger__i_NaCa = (pow(var_chaste_interface__intracellular_sodium_concentration__Na_i, var_Na_Ca_exchanger__n_NaCa) * var_chaste_interface__extracellular_calcium_concentration__Ca_o * exp((-2 + var_Na_Ca_exchanger__n_NaCa) * var_Na_Ca_exchanger__gamma * var_chaste_interface__membrane__V / var_membrane__RTONF) - pow(NV_Ith_S(mParameters, 6), var_Na_Ca_exchanger__n_NaCa) * var_chaste_interface__intracellular_calcium_concentration__Ca_i * exp((-1 + var_Na_Ca_exchanger__gamma) * (-2 + var_Na_Ca_exchanger__n_NaCa) * var_chaste_interface__membrane__V / var_membrane__RTONF)) * NV_Ith_S(mParameters, 13) / ((1 + 144.92753623188406 * var_chaste_interface__intracellular_calcium_concentration__Ca_i) * (1 + (pow(NV_Ith_S(mParameters, 6), var_Na_Ca_exchanger__n_NaCa) * var_chaste_interface__intracellular_calcium_concentration__Ca_i + pow(var_chaste_interface__intracellular_sodium_concentration__Na_i, var_Na_Ca_exchanger__n_NaCa) * var_chaste_interface__extracellular_calcium_concentration__Ca_o) * var_Na_Ca_exchanger__d_NaCa)); // nanoA + const double var_Na_Ca_exchanger__i_NaCa_converted = 0.001 * HeartConfig::Instance()->GetCapacitance() * var_Na_Ca_exchanger__i_NaCa / NV_Ith_S(mParameters, 8); // uA_per_cm2 + const double var_fast_sodium_current__i_Na = pow(var_chaste_interface__fast_sodium_current_m_gate__m, 3) * (-var_fast_sodium_current__E_mh + var_chaste_interface__membrane__V) * NV_Ith_S(mParameters, 9) * var_chaste_interface__fast_sodium_current_h_gate__h; // nanoA + const double var_fast_sodium_current__i_Na_converted = 0.001 * HeartConfig::Instance()->GetCapacitance() * var_fast_sodium_current__i_Na / NV_Ith_S(mParameters, 8); // uA_per_cm2 + const double var_fast_sodium_current_h_gate__alpha_h = 20 * exp(-9.375 + 0.125 * NV_Ith_S(mParameters, 11) - 0.125 * var_chaste_interface__membrane__V); // per_second + const double var_fast_sodium_current_h_gate__beta_h = 2000 / (1 + 320 * exp(-7.5 + 0.10000000000000001 * NV_Ith_S(mParameters, 11) - 0.10000000000000001 * var_chaste_interface__membrane__V)); // per_second + const double var_fast_sodium_current_h_gate__tau_h = 1 / (var_fast_sodium_current_h_gate__alpha_h + var_fast_sodium_current_h_gate__beta_h); // second + const double var_membrane__i_Stim_converted = GetIntracellularAreaStimulus(var_chaste_interface__environment__time_converted); // uA_per_cm2 + const double var_second_inward_calcium_current_f_Ca_gate__E0_f = 34 + var_chaste_interface__membrane__V; // millivolt + const double var_second_inward_calcium_current_f_Ca_gate__beta_f_Ca = 12 / (1 + exp(-0.25 * var_second_inward_calcium_current_f_Ca_gate__E0_f)); // per_second + const double var_second_inward_calcium_current_f_Ca_gate__delta_f = 0.0001; // millivolt + const double var_second_inward_calcium_current_f_Ca_gate__alpha_f_Ca = ((var_second_inward_calcium_current_f_Ca_gate__delta_f > fabs(var_second_inward_calcium_current_f_Ca_gate__E0_f)) ? (25) : (6.25 * var_second_inward_calcium_current_f_Ca_gate__E0_f / (-1 + exp(0.25 * var_second_inward_calcium_current_f_Ca_gate__E0_f)))); // per_second + const double var_second_inward_calcium_current__i_siCa = (((var_chaste_interface__membrane__V >= 49.999998664311967) && (var_chaste_interface__membrane__V <= 50.000001335688033)) ? (374338.90823576227 * (-49.999998664311967 + var_chaste_interface__membrane__V) * (1.9999999999556149e-7 * (1 - var_chaste_interface__second_inward_calcium_current_f_Ca_gate__f_Ca) * (1 - var_chaste_interface__intracellular_calcium_concentration__Ca_i / (0.001 + var_chaste_interface__intracellular_calcium_concentration__Ca_i)) * (var_chaste_interface__intracellular_calcium_concentration__Ca_i * exp(3.7433890822745473) - var_chaste_interface__extracellular_calcium_concentration__Ca_o * exp(9.9999999997780743e-8)) * NV_Ith_S(mParameters, 7) * var_chaste_interface__second_inward_calcium_current_d_gate__d / (1 - exp(9.9999999997780743e-8)) + 1.9999999999556149e-7 * (1 - var_chaste_interface__second_inward_calcium_current_f_Ca_gate__f_Ca) * (1 - var_chaste_interface__intracellular_calcium_concentration__Ca_i / (0.001 + var_chaste_interface__intracellular_calcium_concentration__Ca_i)) * (var_chaste_interface__intracellular_calcium_concentration__Ca_i * exp(3.7433890822745473) - var_chaste_interface__extracellular_calcium_concentration__Ca_o * exp(-9.9999999997780743e-8)) * NV_Ith_S(mParameters, 7) * var_chaste_interface__second_inward_calcium_current_d_gate__d / (1 - exp(-9.9999999997780743e-8))) - 1.9999999999556149e-7 * (1 - var_chaste_interface__second_inward_calcium_current_f_Ca_gate__f_Ca) * (1 - var_chaste_interface__intracellular_calcium_concentration__Ca_i / (0.001 + var_chaste_interface__intracellular_calcium_concentration__Ca_i)) * (var_chaste_interface__intracellular_calcium_concentration__Ca_i * exp(3.7433890822745473) - var_chaste_interface__extracellular_calcium_concentration__Ca_o * exp(9.9999999997780743e-8)) * NV_Ith_S(mParameters, 7) * var_chaste_interface__second_inward_calcium_current_d_gate__d / (1 - exp(9.9999999997780743e-8))) : (0.14973556329098189 * (1 - var_chaste_interface__second_inward_calcium_current_f_Ca_gate__f_Ca) * (1 - var_chaste_interface__intracellular_calcium_concentration__Ca_i / (0.001 + var_chaste_interface__intracellular_calcium_concentration__Ca_i)) * (-50 + var_chaste_interface__membrane__V) * (var_chaste_interface__intracellular_calcium_concentration__Ca_i * exp(3.7433890822745473) - var_chaste_interface__extracellular_calcium_concentration__Ca_o * _lt_0_row[4]) * NV_Ith_S(mParameters, 7) * var_chaste_interface__second_inward_calcium_current_d_gate__d / (_lt_0_row[5]))); // nanoA + const double var_second_inward_calcium_current__i_siK = (((var_chaste_interface__membrane__V >= 49.999997328623934) && (var_chaste_interface__membrane__V <= 50.000002671376066)) ? (187169.45411399176 * (-49.999997328623934 + var_chaste_interface__membrane__V) * (1.999999999997175e-10 * (1 - var_chaste_interface__second_inward_calcium_current_f_Ca_gate__f_Ca) * (1 - var_chaste_interface__intracellular_calcium_concentration__Ca_i / (0.001 + var_chaste_interface__intracellular_calcium_concentration__Ca_i)) * (var_chaste_interface__intracellular_potassium_concentration__K_i * exp(1.8716945411372736) - NV_Ith_S(mParameters, 5) * exp(9.9999999999858739e-8)) * NV_Ith_S(mParameters, 7) * var_chaste_interface__second_inward_calcium_current_d_gate__d / (1 - exp(9.9999999999858739e-8)) + 1.999999999997175e-10 * (1 - var_chaste_interface__second_inward_calcium_current_f_Ca_gate__f_Ca) * (1 - var_chaste_interface__intracellular_calcium_concentration__Ca_i / (0.001 + var_chaste_interface__intracellular_calcium_concentration__Ca_i)) * (var_chaste_interface__intracellular_potassium_concentration__K_i * exp(1.8716945411372736) - NV_Ith_S(mParameters, 5) * exp(-9.9999999999858739e-8)) * NV_Ith_S(mParameters, 7) * var_chaste_interface__second_inward_calcium_current_d_gate__d / (1 - exp(-9.9999999999858739e-8))) - 1.999999999997175e-10 * (1 - var_chaste_interface__second_inward_calcium_current_f_Ca_gate__f_Ca) * (1 - var_chaste_interface__intracellular_calcium_concentration__Ca_i / (0.001 + var_chaste_interface__intracellular_calcium_concentration__Ca_i)) * (var_chaste_interface__intracellular_potassium_concentration__K_i * exp(1.8716945411372736) - NV_Ith_S(mParameters, 5) * exp(9.9999999999858739e-8)) * NV_Ith_S(mParameters, 7) * var_chaste_interface__second_inward_calcium_current_d_gate__d / (1 - exp(9.9999999999858739e-8))) : (7.4867781645490941e-5 * (1 - var_chaste_interface__second_inward_calcium_current_f_Ca_gate__f_Ca) * (1 - var_chaste_interface__intracellular_calcium_concentration__Ca_i / (0.001 + var_chaste_interface__intracellular_calcium_concentration__Ca_i)) * (-50 + var_chaste_interface__membrane__V) * (var_chaste_interface__intracellular_potassium_concentration__K_i * exp(1.8716945411372736) - NV_Ith_S(mParameters, 5) * _lt_0_row[2]) * NV_Ith_S(mParameters, 7) * var_chaste_interface__second_inward_calcium_current_d_gate__d / (_lt_0_row[3]))); // nanoA + const double var_second_inward_calcium_current__i_siNa = (((var_chaste_interface__membrane__V >= 49.999997328623934) && (var_chaste_interface__membrane__V <= 50.000002671376066)) ? (187169.45411399176 * (-49.999997328623934 + var_chaste_interface__membrane__V) * (9.9999999999858744e-10 * (1 - var_chaste_interface__second_inward_calcium_current_f_Ca_gate__f_Ca) * (1 - var_chaste_interface__intracellular_calcium_concentration__Ca_i / (0.001 + var_chaste_interface__intracellular_calcium_concentration__Ca_i)) * (var_chaste_interface__intracellular_sodium_concentration__Na_i * exp(1.8716945411372736) - NV_Ith_S(mParameters, 6) * exp(9.9999999999858739e-8)) * NV_Ith_S(mParameters, 7) * var_chaste_interface__second_inward_calcium_current_d_gate__d / (1 - exp(9.9999999999858739e-8)) + 9.9999999999858744e-10 * (1 - var_chaste_interface__second_inward_calcium_current_f_Ca_gate__f_Ca) * (1 - var_chaste_interface__intracellular_calcium_concentration__Ca_i / (0.001 + var_chaste_interface__intracellular_calcium_concentration__Ca_i)) * (var_chaste_interface__intracellular_sodium_concentration__Na_i * exp(1.8716945411372736) - NV_Ith_S(mParameters, 6) * exp(-9.9999999999858739e-8)) * NV_Ith_S(mParameters, 7) * var_chaste_interface__second_inward_calcium_current_d_gate__d / (1 - exp(-9.9999999999858739e-8))) - 9.9999999999858744e-10 * (1 - var_chaste_interface__second_inward_calcium_current_f_Ca_gate__f_Ca) * (1 - var_chaste_interface__intracellular_calcium_concentration__Ca_i / (0.001 + var_chaste_interface__intracellular_calcium_concentration__Ca_i)) * (var_chaste_interface__intracellular_sodium_concentration__Na_i * exp(1.8716945411372736) - NV_Ith_S(mParameters, 6) * exp(9.9999999999858739e-8)) * NV_Ith_S(mParameters, 7) * var_chaste_interface__second_inward_calcium_current_d_gate__d / (1 - exp(9.9999999999858739e-8))) : (0.00037433890822745472 * (1 - var_chaste_interface__second_inward_calcium_current_f_Ca_gate__f_Ca) * (1 - var_chaste_interface__intracellular_calcium_concentration__Ca_i / (0.001 + var_chaste_interface__intracellular_calcium_concentration__Ca_i)) * (-50 + var_chaste_interface__membrane__V) * (var_chaste_interface__intracellular_sodium_concentration__Na_i * exp(1.8716945411372736) - NV_Ith_S(mParameters, 6) * _lt_0_row[2]) * NV_Ith_S(mParameters, 7) * var_chaste_interface__second_inward_calcium_current_d_gate__d / (_lt_0_row[3]))); // nanoA + const double var_second_inward_calcium_current__i_si = var_second_inward_calcium_current__i_siCa + var_second_inward_calcium_current__i_siK + var_second_inward_calcium_current__i_siNa; // nanoA + const double var_second_inward_calcium_current__i_si_converted = 0.001 * HeartConfig::Instance()->GetCapacitance() * var_second_inward_calcium_current__i_si / NV_Ith_S(mParameters, 8); // uA_per_cm2 + const double var_second_inward_calcium_current_f_Ca_gate__tau_f_Ca = 1 / (var_second_inward_calcium_current_f_Ca_gate__alpha_f_Ca + var_second_inward_calcium_current_f_Ca_gate__beta_f_Ca); // second + const double var_time_independent_potassium_current__E_K = var_membrane__RTONF * log(NV_Ith_S(mParameters, 5) / var_chaste_interface__intracellular_potassium_concentration__K_i); // millivolt + const double var_time_independent_potassium_current__K_m_K1 = 10; // millimolar + const double var_time_independent_potassium_current__i_K1 = (-var_time_independent_potassium_current__E_K + var_chaste_interface__membrane__V) * NV_Ith_S(mParameters, 5) * NV_Ith_S(mParameters, 12) / ((1 + exp(2 * (-10 - var_time_independent_potassium_current__E_K + var_chaste_interface__membrane__V) / var_membrane__RTONF)) * (NV_Ith_S(mParameters, 5) + var_time_independent_potassium_current__K_m_K1)); // nanoA + const double var_time_independent_potassium_current__i_K1_converted = 0.001 * HeartConfig::Instance()->GetCapacitance() * var_time_independent_potassium_current__i_K1 / NV_Ith_S(mParameters, 8); // uA_per_cm2 + +#if CHASTE_SUNDIALS_VERSION >= 60000 + N_Vector dqs = N_VNew_Serial(9, CvodeContextManager::Instance()->GetSundialsContext()); +#else + N_Vector dqs = N_VNew_Serial(9); +#endif + NV_Ith_S(dqs, 0) = var_calcium_release__i_rel; + NV_Ith_S(dqs, 1) = var_second_inward_calcium_current__i_si_converted; + NV_Ith_S(dqs, 2) = var_second_inward_calcium_current_f_Ca_gate__tau_f_Ca; + NV_Ith_S(dqs, 3) = var_fast_sodium_current__i_Na_converted; + NV_Ith_S(dqs, 4) = var_fast_sodium_current_h_gate__tau_h; + NV_Ith_S(dqs, 5) = var_time_independent_potassium_current__i_K1_converted; + NV_Ith_S(dqs, 6) = var_Na_Ca_exchanger__i_NaCa_converted; + NV_Ith_S(dqs, 7) = var_membrane__i_Stim_converted; + NV_Ith_S(dqs, 8) = var_chaste_interface__environment__time_converted; + return dqs; + } + +template<> +void OdeSystemInformation::Initialise(void) +{ + this->mSystemName = "hilgemann_noble_model_1987"; + this->mFreeVariableName = "time"; + this->mFreeVariableUnits = "millisecond"; + + // NV_Ith_S(rY, 0): + this->mVariableNames.push_back("membrane_voltage"); + this->mVariableUnits.push_back("millivolt"); + this->mInitialConditions.push_back(-88.0); + + // NV_Ith_S(rY, 1): + this->mVariableNames.push_back("cytosolic_calcium_concentration"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(1e-05); + + // NV_Ith_S(rY, 2): + this->mVariableNames.push_back("membrane_fast_sodium_current_m_gate"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.076); + + // NV_Ith_S(rY, 3): + this->mVariableNames.push_back("membrane_fast_sodium_current_h_gate"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.015); + + // NV_Ith_S(rY, 4): + this->mVariableNames.push_back("membrane_L_type_calcium_current_d_gate"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.0011); + + // NV_Ith_S(rY, 5): + this->mVariableNames.push_back("membrane_L_type_calcium_current_fCa_gate"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.785); + + // NV_Ith_S(rY, 6): + this->mVariableNames.push_back("calcium_release__ActFrac"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.0); + + // NV_Ith_S(rY, 7): + this->mVariableNames.push_back("calcium_release__ProdFrac"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.0); + + // NV_Ith_S(rY, 8): + this->mVariableNames.push_back("cytosolic_sodium_concentration"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(6.5); + + // NV_Ith_S(rY, 9): + this->mVariableNames.push_back("extracellular_calcium_concentration"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(2.0); + + // NV_Ith_S(rY, 10): + this->mVariableNames.push_back("cytosolic_potassium_concentration"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(140.0); + + // NV_Ith_S(rY, 11): + this->mVariableNames.push_back("intracellular_calcium_concentration__Ca_up"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(0.3); + + // NV_Ith_S(rY, 12): + this->mVariableNames.push_back("JSR_calcium_concentration"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(0.3); + + // NV_Ith_S(rY, 13): + this->mVariableNames.push_back("intracellular_calcium_concentration__Ca_Calmod"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(0.0005); + + // NV_Ith_S(rY, 14): + this->mVariableNames.push_back("intracellular_calcium_concentration__Ca_Trop"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(0.0015); + + // mParameters[0]: + this->mParameterNames.push_back("SR_leak_current_max"); + this->mParameterUnits.push_back("per_second"); + + // mParameters[1]: + this->mParameterNames.push_back("SR_release_current_max"); + this->mParameterUnits.push_back("per_second"); + + // mParameters[2]: + this->mParameterNames.push_back("SR_release_kmcacyt"); + this->mParameterUnits.push_back("millimolar"); + + // mParameters[3]: + this->mParameterNames.push_back("SR_uptake_current_max"); + this->mParameterUnits.push_back("dimensionless"); + + // mParameters[4]: + this->mParameterNames.push_back("concentration_clamp_onoff"); + this->mParameterUnits.push_back("dimensionless"); + + // mParameters[5]: + this->mParameterNames.push_back("extracellular_potassium_concentration"); + this->mParameterUnits.push_back("millimolar"); + + // mParameters[6]: + this->mParameterNames.push_back("extracellular_sodium_concentration"); + this->mParameterUnits.push_back("millimolar"); + + // mParameters[7]: + this->mParameterNames.push_back("membrane_L_type_calcium_current_conductance"); + this->mParameterUnits.push_back("nanoA_per_millimolar"); + + // mParameters[8]: + this->mParameterNames.push_back("membrane_capacitance"); + this->mParameterUnits.push_back("microF"); + + // mParameters[9]: + this->mParameterNames.push_back("membrane_fast_sodium_current_conductance"); + this->mParameterUnits.push_back("microS"); + + // mParameters[10]: + this->mParameterNames.push_back("membrane_fast_sodium_current_reduced_inactivation"); + this->mParameterUnits.push_back("dimensionless"); + + // mParameters[11]: + this->mParameterNames.push_back("membrane_fast_sodium_current_shift_inactivation"); + this->mParameterUnits.push_back("millivolt"); + + // mParameters[12]: + this->mParameterNames.push_back("membrane_inward_rectifier_potassium_current_conductance"); + this->mParameterUnits.push_back("microS"); + + // mParameters[13]: + this->mParameterNames.push_back("membrane_sodium_calcium_exchanger_current_conductance"); + this->mParameterUnits.push_back("nanoA"); + + // Derived Quantity index [0]: + this->mDerivedQuantityNames.push_back("SR_release_current"); + this->mDerivedQuantityUnits.push_back("millimolar_per_second"); + + // Derived Quantity index [1]: + this->mDerivedQuantityNames.push_back("membrane_L_type_calcium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [2]: + this->mDerivedQuantityNames.push_back("membrane_L_type_calcium_current_fCa_gate_tau"); + this->mDerivedQuantityUnits.push_back("second"); + + // Derived Quantity index [3]: + this->mDerivedQuantityNames.push_back("membrane_fast_sodium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [4]: + this->mDerivedQuantityNames.push_back("membrane_fast_sodium_current_h_gate_tau"); + this->mDerivedQuantityUnits.push_back("second"); + + // Derived Quantity index [5]: + this->mDerivedQuantityNames.push_back("membrane_inward_rectifier_potassium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [6]: + this->mDerivedQuantityNames.push_back("membrane_sodium_calcium_exchanger_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [7]: + this->mDerivedQuantityNames.push_back("membrane_stimulus_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [8]: + this->mDerivedQuantityNames.push_back("time"); + this->mDerivedQuantityUnits.push_back("millisecond"); + + this->mInitialised = true; +} + +// Serialization for Boost >= 1.36 +#include "SerializationExportWrapperForCpp.hpp" +CHASTE_CLASS_EXPORT(Cellhilgemann_noble_model_1987FromCellMLCvodeOpt) + +#endif // CHASTE_CVODE diff --git a/chaste_codegen/tests/numerical/baseline/Cvode_opt/hilgemann_noble_model_1987.hpp b/chaste_codegen/tests/numerical/baseline/Cvode_opt/hilgemann_noble_model_1987.hpp new file mode 100644 index 00000000..14dfa1f0 --- /dev/null +++ b/chaste_codegen/tests/numerical/baseline/Cvode_opt/hilgemann_noble_model_1987.hpp @@ -0,0 +1,87 @@ +#ifdef CHASTE_CVODE +#ifndef CELLHILGEMANN_NOBLE_MODEL_1987FROMCELLMLCVODEOPT_HPP_ +#define CELLHILGEMANN_NOBLE_MODEL_1987FROMCELLMLCVODEOPT_HPP_ + +//! @file +//! +//! This source file was generated from CellML by chaste_codegen version (version omitted as unimportant) +//! +//! Model: hilgemann_noble_model_1987 +//! +//! Processed by chaste_codegen: https://github.com/ModellingWebLab/chaste-codegen +//! (translator: chaste_codegen, model type: NumericCvodeOpt) +//! on (date omitted as unimportant) +//! +//! + +#include "ChasteSerialization.hpp" +#include +#include "AbstractStimulusFunction.hpp" +#include "AbstractCvodeCell.hpp" + +class Cellhilgemann_noble_model_1987FromCellMLCvodeOpt : public AbstractCvodeCell +{ + friend class boost::serialization::access; + template + void serialize(Archive & archive, const unsigned int version) + { + archive & boost::serialization::base_object(*this); + + } + + // + // Settable parameters and readable variables + // + + +private: +const bool is_concentration[15] = {false, true, false, false, false, false, false, false, true, true, true, false, true, false, false}; +const bool is_probability[15] = {false, false, true, true, true, true, false, false, false, false, false, false, false, false, false}; +public: + + boost::shared_ptr UseCellMLDefaultStimulus(); + double GetIntracellularCalciumConcentration(); + Cellhilgemann_noble_model_1987FromCellMLCvodeOpt(boost::shared_ptr pOdeSolver /* unused; should be empty */, boost::shared_ptr pIntracellularStimulus); + ~Cellhilgemann_noble_model_1987FromCellMLCvodeOpt(); + void VerifyStateVariables(); + AbstractLookupTableCollection* GetLookupTableCollection(); + double GetIIonic(const std::vector* pStateVariables=NULL); + void EvaluateYDerivatives(double var_chaste_interface__environment__time_converted, const N_Vector rY, N_Vector rDY); + N_Vector ComputeDerivedQuantities(double var_chaste_interface__environment__time_converted, const N_Vector & rY); +}; + +// Needs to be included last +#include "SerializationExportWrapper.hpp" +CHASTE_CLASS_EXPORT(Cellhilgemann_noble_model_1987FromCellMLCvodeOpt) + +namespace boost +{ + namespace serialization + { + template + inline void save_construct_data( + Archive & ar, const Cellhilgemann_noble_model_1987FromCellMLCvodeOpt * t, const unsigned int fileVersion) + { + const boost::shared_ptr p_solver = t->GetSolver(); + const boost::shared_ptr p_stimulus = t->GetStimulusFunction(); + ar << p_solver; + ar << p_stimulus; + } + + template + inline void load_construct_data( + Archive & ar, Cellhilgemann_noble_model_1987FromCellMLCvodeOpt * t, const unsigned int fileVersion) + { + boost::shared_ptr p_solver; + boost::shared_ptr p_stimulus; + ar >> p_solver; + ar >> p_stimulus; + ::new(t)Cellhilgemann_noble_model_1987FromCellMLCvodeOpt(p_solver, p_stimulus); + } + + } + +} + +#endif // CELLHILGEMANN_NOBLE_MODEL_1987FROMCELLMLCVODEOPT_HPP_ +#endif // CHASTE_CVODE \ No newline at end of file diff --git a/chaste_codegen/tests/numerical/baseline/Cvode_opt_with_jacobian/hodgkin_huxley_squid_axon_model_1952_modified.cpp b/chaste_codegen/tests/numerical/baseline/Cvode_opt_with_jacobian/hodgkin_huxley_squid_axon_model_1952_modified.cpp new file mode 100644 index 00000000..35dfc9ff --- /dev/null +++ b/chaste_codegen/tests/numerical/baseline/Cvode_opt_with_jacobian/hodgkin_huxley_squid_axon_model_1952_modified.cpp @@ -0,0 +1,584 @@ +#ifdef CHASTE_CVODE +//! @file +//! +//! This source file was generated from CellML by chaste_codegen version (version omitted as unimportant) +//! +//! Model: hodgkin_huxley_squid_axon_model_1952_modified +//! +//! Processed by chaste_codegen: https://github.com/ModellingWebLab/chaste-codegen +//! (translator: chaste_codegen, model type: AnalyticCvodeOpt) +//! on (date omitted as unimportant) +//! +//! + +#include "hodgkin_huxley_squid_axon_model_1952_modified.hpp" +#include +#include +#include +#include +#include "Exception.hpp" +#include "OdeSystemInformation.hpp" +#include "RegularStimulus.hpp" +#include "HeartConfig.hpp" +#include "IsNan.hpp" +#include "MathsCustomFunctions.hpp" + +#if CHASTE_SUNDIALS_VERSION >= 60000 +#include "CvodeContextManager.hpp" +#endif + + + +class Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLCvodeOpt_LookupTables : public AbstractLookupTableCollection +{ +public: + static Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLCvodeOpt_LookupTables* Instance() + { + if (mpInstance.get() == NULL) + { + mpInstance.reset(new Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLCvodeOpt_LookupTables); + } + return mpInstance.get(); + } + + void FreeMemory() + { + + if (_lookup_table_0) + { + delete[] _lookup_table_0; + _lookup_table_0 = NULL; + } + + mNeedsRegeneration.assign(mNeedsRegeneration.size(), true); + } + + // Row lookup methods + // using linear-interpolation + + double* _lookup_0_row(unsigned i, double _factor_) + { + for (unsigned j=0; j<6; j++) + { + const double y1 = _lookup_table_0[i][j]; + const double y2 = _lookup_table_0[i+1][j]; + _lookup_table_0_row[j] = y1 + (y2-y1)*_factor_; + } + return _lookup_table_0_row; + } + + + const double * IndexTable0(double var_chaste_interface__membrane__V) + { + const double _offset_0 = var_chaste_interface__membrane__V - mTableMins[0]; + const double _offset_0_over_table_step = _offset_0 * mTableStepInverses[0]; + const unsigned _table_index_0 = (unsigned)(_offset_0_over_table_step); + const double _factor_0 = _offset_0_over_table_step - _table_index_0; + const double* const _lt_0_row = Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLCvodeOpt_LookupTables::Instance()->_lookup_0_row(_table_index_0, _factor_0); + return _lt_0_row; + } + + +// LCOV_EXCL_START + bool CheckIndex0(double& var_chaste_interface__membrane__V) + { + bool _oob_0 = false; + if (var_chaste_interface__membrane__V>mTableMaxs[0] || var_chaste_interface__membrane__V= -9.9999999999999995e-8) && (6.5 + 0.10000000000000001 * var_chaste_interface__membrane__V <= 9.9999999999999995e-8)) ? (0.42499999999999999 + 0.0050000000000000001 * var_chaste_interface__membrane__V) : (-0.099999999999999992 * (6.5 + 0.10000000000000001 * var_chaste_interface__membrane__V) / (-1 + exp(-6.5 - 0.10000000000000001 * var_chaste_interface__membrane__V)))); + }; + const double var_chaste_interface__membrane__V = mTableMins[0] + i*mTableSteps[0]; + double val = f(var_chaste_interface__membrane__V); + //Expressions which are part of a piecewise could be inf / nan, this is generally accptable, due to the piecewise, however occasionally interpolation of the lookup table from a nan/inf version can give problems. + //To avoid this values stored in the table are intrpolated. Occurances of this to at most 2 per expression. + if (!std::isfinite(val) && _lookup_table_0_num_misshit_piecewise[0] < 2){ + double left = f(var_chaste_interface__membrane__V - mTableSteps[0]); + double right = f(var_chaste_interface__membrane__V + mTableSteps[0]); + val = (left + right) / 2.0; + // count and limit number of misshits + _lookup_table_0_num_misshit_piecewise[0] +=1; + } + else if (!std::isfinite(val) && _lookup_table_0_num_misshit_piecewise[0] >= 2){ + EXCEPTION("Lookup table 0 at ["<= -9.9999999999999995e-8) && (5 + 0.10000000000000001 * var_chaste_interface__membrane__V <= 9.9999999999999995e-8)) ? (3.5 + 0.050000000000000003 * var_chaste_interface__membrane__V) : (-(5 + 0.10000000000000001 * var_chaste_interface__membrane__V) / (-1 + exp(-5 - 0.10000000000000001 * var_chaste_interface__membrane__V)))); + }; + const double var_chaste_interface__membrane__V = mTableMins[0] + i*mTableSteps[0]; + double val = f(var_chaste_interface__membrane__V); + //Expressions which are part of a piecewise could be inf / nan, this is generally accptable, due to the piecewise, however occasionally interpolation of the lookup table from a nan/inf version can give problems. + //To avoid this values stored in the table are intrpolated. Occurances of this to at most 2 per expression. + if (!std::isfinite(val) && _lookup_table_0_num_misshit_piecewise[4] < 2){ + double left = f(var_chaste_interface__membrane__V - mTableSteps[0]); + double right = f(var_chaste_interface__membrane__V + mTableSteps[0]); + val = (left + right) / 2.0; + // count and limit number of misshits + _lookup_table_0_num_misshit_piecewise[4] +=1; + } + else if (!std::isfinite(val) && _lookup_table_0_num_misshit_piecewise[4] >= 2){ + EXCEPTION("Lookup table 4 at ["< mpInstance; + + // Row lookup methods memory + double _lookup_table_0_row[6]; + + // Lookup tables + double (*_lookup_table_0)[6]; + int _lookup_table_0_num_misshit_piecewise[6] = {0}; + +}; + +std::shared_ptr Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLCvodeOpt_LookupTables::mpInstance; + + + boost::shared_ptr Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLCvodeOpt::UseCellMLDefaultStimulus() + { + // Use the default stimulus specified by CellML metadata + const double var_chaste_interface__membrane__stim_amplitude = -20; // microA_per_cm2 + const double var_chaste_interface__membrane__stim_duration = 0.5; // millisecond + const double var_chaste_interface__membrane__stim_period = 1000; // millisecond + const double var_chaste_interface__membrane__stim_start = 10; // millisecond + boost::shared_ptr p_cellml_stim(new RegularStimulus( + -fabs(var_chaste_interface__membrane__stim_amplitude), + var_chaste_interface__membrane__stim_duration, + var_chaste_interface__membrane__stim_period, + var_chaste_interface__membrane__stim_start + )); + mpIntracellularStimulus = p_cellml_stim; + return p_cellml_stim; + } + + Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLCvodeOpt::Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLCvodeOpt(boost::shared_ptr pOdeSolver /* unused; should be empty */, boost::shared_ptr pIntracellularStimulus) + : AbstractCvodeCell( + pOdeSolver, + 4, + 0, + pIntracellularStimulus) + { + // Time units: millisecond + // + this->mpSystemInfo = OdeSystemInformation::Instance(); + Init(); + + // We have a default stimulus specified in the CellML file metadata + this->mHasDefaultStimulusFromCellML = true; + mUseAnalyticJacobian = true; + mHasAnalyticJacobian = true; + + NV_Ith_S(this->mParameters, 0) = 1; // (var_membrane__Cm) [microF_per_cm2] + NV_Ith_S(this->mParameters, 1) = 120; // (var_sodium_channel__g_Na) [milliS_per_cm2] + NV_Ith_S(this->mParameters, 2) = 0.29999999999999999; // (var_leakage_current__g_L) [milliS_per_cm2] + NV_Ith_S(this->mParameters, 3) = 36; // (var_potassium_channel__g_K) [milliS_per_cm2] + } + + Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLCvodeOpt::~Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLCvodeOpt() + { + } + + AbstractLookupTableCollection* Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLCvodeOpt::GetLookupTableCollection() + { + return Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLCvodeOpt_LookupTables::Instance(); + } + + void Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLCvodeOpt::VerifyStateVariables() + { + + const double tol = 100*this->mAbsTol; + N_Vector rY = rGetStateVariables(); + std::string error_message = ""; + + for (unsigned i=0; i < 4; i++) + { + if(std::isnan(NV_Ith_S(rY, i))){ + error_message += "State variable " + this->rGetStateVariableNames()[i] + " is not a number\n"; + } + if(std::isinf(NV_Ith_S(rY, i))){ + error_message += "State variable " + this->rGetStateVariableNames()[i] + " has become INFINITE\n"; + } + if(this->is_concentration[i] && NV_Ith_S(rY, i) < -tol) + { + error_message += "Concentration " + this->rGetStateVariableNames()[i] + " below 0\n"; + } + if(this->is_probability[i] && NV_Ith_S(rY, i) < -tol) + { + error_message += "Probability " + this->rGetStateVariableNames()[i] + " below 0\n"; + } + if(this->is_probability[i] && NV_Ith_S(rY, i) > 1 + tol) + { + error_message += "Probability " + this->rGetStateVariableNames()[i] + " above 1\n"; + } + } + if (error_message != ""){ + EXCEPTION(DumpState(error_message)); + } + } + + double Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLCvodeOpt::GetIIonic(const std::vector* pStateVariables) + { + // For state variable interpolation (SVI) we read in interpolated state variables, + // otherwise for ionic current interpolation (ICI) we use the state variables of this model (node). + N_Vector rY; + bool made_new_cvode_vector = false; + if (!pStateVariables) + { + rY = rGetStateVariables(); + } + else + { + made_new_cvode_vector = true; + rY = MakeNVector(*pStateVariables); + } + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : NV_Ith_S(rY, 0)); + // Units: millivolt; Initial value: -75.0 + double var_chaste_interface__sodium_channel_m_gate__m = NV_Ith_S(rY, 1); + // Units: dimensionless; Initial value: 0.05 + double var_chaste_interface__sodium_channel_h_gate__h = NV_Ith_S(rY, 2); + // Units: dimensionless; Initial value: 0.6 + double var_chaste_interface__potassium_channel_n_gate__n = NV_Ith_S(rY, 3); + // Units: dimensionless; Initial value: 0.325 + + + const double var_leakage_current__i_L = (64.387 + var_chaste_interface__membrane__V) * NV_Ith_S(mParameters, 2); // microA_per_cm2 + const double var_potassium_channel__i_K = pow(var_chaste_interface__potassium_channel_n_gate__n, 4) * (87 + var_chaste_interface__membrane__V) * NV_Ith_S(mParameters, 3); // microA_per_cm2 + const double var_sodium_channel__i_Na = pow(var_chaste_interface__sodium_channel_m_gate__m, 3) * (-40 + var_chaste_interface__membrane__V) * NV_Ith_S(mParameters, 1) * var_chaste_interface__sodium_channel_h_gate__h; // microA_per_cm2 + const double var_chaste_interface__i_ionic = var_leakage_current__i_L + var_potassium_channel__i_K + var_sodium_channel__i_Na; // uA_per_cm2 + + const double i_ionic = var_chaste_interface__i_ionic; + if (made_new_cvode_vector) + { + DeleteVector(rY); + } + EXCEPT_IF_NOT(!std::isnan(i_ionic)); + return i_ionic; + } + + void Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLCvodeOpt::EvaluateYDerivatives(double var_chaste_interface__environment__time, const N_Vector rY, N_Vector rDY) + { + // Inputs: + // Time units: millisecond + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : NV_Ith_S(rY, 0)); + // Units: millivolt; Initial value: -75.0 + double var_chaste_interface__sodium_channel_m_gate__m = NV_Ith_S(rY, 1); + // Units: dimensionless; Initial value: 0.05 + double var_chaste_interface__sodium_channel_h_gate__h = NV_Ith_S(rY, 2); + // Units: dimensionless; Initial value: 0.6 + double var_chaste_interface__potassium_channel_n_gate__n = NV_Ith_S(rY, 3); + // Units: dimensionless; Initial value: 0.325 + + // Lookup table indexing + const bool _oob_0 = Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLCvodeOpt_LookupTables::Instance()->CheckIndex0(var_chaste_interface__membrane__V); +// LCOV_EXCL_START + if (_oob_0) + EXCEPTION(DumpState("membrane_voltage outside lookup table range", rY , var_chaste_interface__environment__time)); +// LCOV_EXCL_STOP + const double* const _lt_0_row = Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLCvodeOpt_LookupTables::Instance()->IndexTable0(var_chaste_interface__membrane__V); + + // Mathematics + double d_dt_chaste_interface_var_membrane__V; + const double d_dt_chaste_interface_var_potassium_channel_n_gate__n = (1 - var_chaste_interface__potassium_channel_n_gate__n) * _lt_0_row[0] - 0.125 * var_chaste_interface__potassium_channel_n_gate__n * _lt_0_row[1]; // 1 / millisecond + const double d_dt_chaste_interface_var_sodium_channel_h_gate__h = 0.070000000000000007 * (1 - var_chaste_interface__sodium_channel_h_gate__h) * _lt_0_row[2] - var_chaste_interface__sodium_channel_h_gate__h / (_lt_0_row[3]); // 1 / millisecond + const double d_dt_chaste_interface_var_sodium_channel_m_gate__m = (1 - var_chaste_interface__sodium_channel_m_gate__m) * _lt_0_row[4] - 4 * var_chaste_interface__sodium_channel_m_gate__m * _lt_0_row[5]; // 1 / millisecond + + if (mSetVoltageDerivativeToZero) + { + d_dt_chaste_interface_var_membrane__V = 0.0; + } + else + { + d_dt_chaste_interface_var_membrane__V = (-GetIntracellularAreaStimulus(var_chaste_interface__environment__time) - (64.387 + var_chaste_interface__membrane__V) * NV_Ith_S(mParameters, 2) - pow(var_chaste_interface__potassium_channel_n_gate__n, 4) * (87 + var_chaste_interface__membrane__V) * NV_Ith_S(mParameters, 3) - pow(var_chaste_interface__sodium_channel_m_gate__m, 3) * (-40 + var_chaste_interface__membrane__V) * NV_Ith_S(mParameters, 1) * var_chaste_interface__sodium_channel_h_gate__h) / NV_Ith_S(mParameters, 0); // millivolt / millisecond + } + + NV_Ith_S(rDY,0) = d_dt_chaste_interface_var_membrane__V; + NV_Ith_S(rDY,1) = d_dt_chaste_interface_var_sodium_channel_m_gate__m; + NV_Ith_S(rDY,2) = d_dt_chaste_interface_var_sodium_channel_h_gate__h; + NV_Ith_S(rDY,3) = d_dt_chaste_interface_var_potassium_channel_n_gate__n; + } + + void Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLCvodeOpt::EvaluateAnalyticJacobian(double var_chaste_interface__environment__time, N_Vector rY, N_Vector rDY, CHASTE_CVODE_DENSE_MATRIX rJacobian, N_Vector rTmp1, N_Vector rTmp2, N_Vector rTmp3) + { + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : NV_Ith_S(rY, 0)); + // Units: millivolt; Initial value: -75.0 + double var_chaste_interface__sodium_channel_m_gate__m = NV_Ith_S(rY, 1); + // Units: dimensionless; Initial value: 0.05 + double var_chaste_interface__sodium_channel_h_gate__h = NV_Ith_S(rY, 2); + // Units: dimensionless; Initial value: 0.6 + double var_chaste_interface__potassium_channel_n_gate__n = NV_Ith_S(rY, 3); + // Units: dimensionless; Initial value: 0.325 + + // Lookup table indexing + const bool _oob_0 = Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLCvodeOpt_LookupTables::Instance()->CheckIndex0(var_chaste_interface__membrane__V); +// LCOV_EXCL_START + if (_oob_0) + EXCEPTION(DumpState("membrane_voltage outside lookup table range", rY , var_chaste_interface__environment__time)); +// LCOV_EXCL_STOP + const double* const _lt_0_row = Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLCvodeOpt_LookupTables::Instance()->IndexTable0(var_chaste_interface__membrane__V); +const double var_x0 = 1 / NV_Ith_S(mParameters, 0); + const double var_x1 = pow(var_chaste_interface__sodium_channel_m_gate__m, 3) * NV_Ith_S(mParameters, 1); + const double var_x2 = var_x0 * (-40 + var_chaste_interface__membrane__V); + const double var_x3 = _lt_0_row[5]; + const double var_x4 = 0.10000000000000001 * var_chaste_interface__membrane__V; + const double var_x5 = 5 + var_x4; + const double var_x6 = (var_x5 >= -9.9999999999999995e-8) && (var_x5 <= 9.9999999999999995e-8); + const double var_x7 = exp(-var_x5); + const double var_x8 = -1 + var_x7; + const double var_x9 = 1 / var_x8; + const double var_x10 = 0.10000000000000001 - 0.10000000000000001 * var_chaste_interface__sodium_channel_m_gate__m; + const double var_x11 = 4 * var_x3; + const double var_x12 = _lt_0_row[2]; + const double var_x13 = exp(-4.5 - 0.10000000000000001 * var_chaste_interface__membrane__V); + const double var_x14 = 1 + var_x13; + const double var_x15 = _lt_0_row[1]; + const double var_x16 = 0.0015625000000000001 * var_x15 * var_chaste_interface__potassium_channel_n_gate__n; + const double var_x17 = 6.5 + var_x4; + const double var_x18 = (var_x17 >= -9.9999999999999995e-8) && (var_x17 <= 9.9999999999999995e-8); + const double var_x19 = exp(-var_x17); + const double var_x20 = -1 + var_x19; + const double var_x21 = 1 / var_x20; + const double var_x22 = 0.01 - 0.01 * var_chaste_interface__potassium_channel_n_gate__n; + const double var_x23 = 0.125 * var_x15; + + // Matrix entries + IJth(rJacobian, 0, 0) = mSetVoltageDerivativeToZero ? 0.0 : (var_x0 * (-NV_Ith_S(mParameters, 2) - var_x1 * var_chaste_interface__sodium_channel_h_gate__h - pow(var_chaste_interface__potassium_channel_n_gate__n, 4) * NV_Ith_S(mParameters, 3))); + IJth(rJacobian, 1, 0) = ((var_x6) ? (0.050000000000000003 - 0.050000000000000003 * var_chaste_interface__sodium_channel_m_gate__m + 0.22222222222222221 * var_x3 * var_chaste_interface__sodium_channel_m_gate__m) : (-var_x10 * var_x9 + 0.22222222222222221 * var_x3 * var_chaste_interface__sodium_channel_m_gate__m - var_x10 * var_x5 * var_x7 / pow(var_x8, 2))); + IJth(rJacobian, 2, 0) = -0.050000000000000003 * var_x12 * (0.070000000000000007 - 0.070000000000000007 * var_chaste_interface__sodium_channel_h_gate__h) - 0.10000000000000001 * var_x13 * var_chaste_interface__sodium_channel_h_gate__h / pow(var_x14, 2); + IJth(rJacobian, 3, 0) = ((var_x18) ? (0.0050000000000000001 - var_x16 - 0.0050000000000000001 * var_chaste_interface__potassium_channel_n_gate__n) : (-var_x16 - var_x21 * var_x22 - var_x17 * var_x19 * var_x22 / pow(var_x20, 2))); + IJth(rJacobian, 0, 1) = mSetVoltageDerivativeToZero ? 0.0 : (-3 * var_x2 * pow(var_chaste_interface__sodium_channel_m_gate__m, 2) * NV_Ith_S(mParameters, 1) * var_chaste_interface__sodium_channel_h_gate__h); + IJth(rJacobian, 1, 1) = ((var_x6) ? (-3.5 - var_x11 - 0.050000000000000003 * var_chaste_interface__membrane__V) : (-var_x11 + var_x5 * var_x9)); + IJth(rJacobian, 0, 2) = mSetVoltageDerivativeToZero ? 0.0 : (-var_x1 * var_x2); + IJth(rJacobian, 2, 2) = -1 / var_x14 - 0.070000000000000007 * var_x12; + IJth(rJacobian, 0, 3) = mSetVoltageDerivativeToZero ? 0.0 : (-4 * var_x0 * pow(var_chaste_interface__potassium_channel_n_gate__n, 3) * (87 + var_chaste_interface__membrane__V) * NV_Ith_S(mParameters, 3)); + IJth(rJacobian, 3, 3) = ((var_x18) ? (-0.42499999999999999 - var_x23 - 0.0050000000000000001 * var_chaste_interface__membrane__V) : (-var_x23 + 0.099999999999999992 * var_x17 * var_x21)); + } + + N_Vector Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLCvodeOpt::ComputeDerivedQuantities(double var_chaste_interface__environment__time, const N_Vector & rY) + { + // Inputs: + // Time units: millisecond + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : NV_Ith_S(rY, 0)); + // Units: millivolt; Initial value: -75.0 + double var_chaste_interface__sodium_channel_m_gate__m = NV_Ith_S(rY, 1); + // Units: dimensionless; Initial value: 0.05 + double var_chaste_interface__sodium_channel_h_gate__h = NV_Ith_S(rY, 2); + // Units: dimensionless; Initial value: 0.6 + double var_chaste_interface__potassium_channel_n_gate__n = NV_Ith_S(rY, 3); + // Units: dimensionless; Initial value: 0.325 + + + // Mathematics + const double var_membrane__E_R = -75; // millivolt + const double var_leakage_current__E_L = 10.613 + var_membrane__E_R; // millivolt + const double var_leakage_current__i_L = (-var_leakage_current__E_L + var_chaste_interface__membrane__V) * NV_Ith_S(mParameters, 2); // microA_per_cm2 + const double var_membrane__i_Stim = GetIntracellularAreaStimulus(var_chaste_interface__environment__time); // microA_per_cm2 + const double var_potassium_channel__E_K = -12 + var_membrane__E_R; // millivolt + const double var_potassium_channel__i_K = pow(var_chaste_interface__potassium_channel_n_gate__n, 4) * (-var_potassium_channel__E_K + var_chaste_interface__membrane__V) * NV_Ith_S(mParameters, 3); // microA_per_cm2 + const double var_sodium_channel__E_Na = 115 + var_membrane__E_R; // millivolt + const double var_sodium_channel__i_Na = pow(var_chaste_interface__sodium_channel_m_gate__m, 3) * (-var_sodium_channel__E_Na + var_chaste_interface__membrane__V) * NV_Ith_S(mParameters, 1) * var_chaste_interface__sodium_channel_h_gate__h; // microA_per_cm2 + +#if CHASTE_SUNDIALS_VERSION >= 60000 + N_Vector dqs = N_VNew_Serial(5, CvodeContextManager::Instance()->GetSundialsContext()); +#else + N_Vector dqs = N_VNew_Serial(5); +#endif + NV_Ith_S(dqs, 0) = var_sodium_channel__i_Na; + NV_Ith_S(dqs, 1) = var_leakage_current__i_L; + NV_Ith_S(dqs, 2) = var_potassium_channel__i_K; + NV_Ith_S(dqs, 3) = var_membrane__i_Stim; + NV_Ith_S(dqs, 4) = var_chaste_interface__environment__time; + return dqs; + } + +template<> +void OdeSystemInformation::Initialise(void) +{ + this->mSystemName = "hodgkin_huxley_squid_axon_model_1952_modified"; + this->mFreeVariableName = "time"; + this->mFreeVariableUnits = "millisecond"; + + // NV_Ith_S(rY, 0): + this->mVariableNames.push_back("membrane_voltage"); + this->mVariableUnits.push_back("millivolt"); + this->mInitialConditions.push_back(-75.0); + + // NV_Ith_S(rY, 1): + this->mVariableNames.push_back("sodium_channel_m_gate__m"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.05); + + // NV_Ith_S(rY, 2): + this->mVariableNames.push_back("sodium_channel_h_gate__h"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.6); + + // NV_Ith_S(rY, 3): + this->mVariableNames.push_back("potassium_channel_n_gate__n"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.325); + + // mParameters[0]: + this->mParameterNames.push_back("membrane_capacitance"); + this->mParameterUnits.push_back("microF_per_cm2"); + + // mParameters[1]: + this->mParameterNames.push_back("membrane_fast_sodium_current_conductance"); + this->mParameterUnits.push_back("milliS_per_cm2"); + + // mParameters[2]: + this->mParameterNames.push_back("membrane_leakage_current_conductance"); + this->mParameterUnits.push_back("milliS_per_cm2"); + + // mParameters[3]: + this->mParameterNames.push_back("membrane_potassium_current_conductance"); + this->mParameterUnits.push_back("milliS_per_cm2"); + + // Derived Quantity index [0]: + this->mDerivedQuantityNames.push_back("membrane_fast_sodium_current"); + this->mDerivedQuantityUnits.push_back("microA_per_cm2"); + + // Derived Quantity index [1]: + this->mDerivedQuantityNames.push_back("membrane_leakage_current"); + this->mDerivedQuantityUnits.push_back("microA_per_cm2"); + + // Derived Quantity index [2]: + this->mDerivedQuantityNames.push_back("membrane_potassium_current"); + this->mDerivedQuantityUnits.push_back("microA_per_cm2"); + + // Derived Quantity index [3]: + this->mDerivedQuantityNames.push_back("membrane_stimulus_current"); + this->mDerivedQuantityUnits.push_back("microA_per_cm2"); + + // Derived Quantity index [4]: + this->mDerivedQuantityNames.push_back("time"); + this->mDerivedQuantityUnits.push_back("millisecond"); + + this->mInitialised = true; +} + +// Serialization for Boost >= 1.36 +#include "SerializationExportWrapperForCpp.hpp" +CHASTE_CLASS_EXPORT(Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLCvodeOpt) + +#endif // CHASTE_CVODE diff --git a/chaste_codegen/tests/numerical/baseline/Cvode_opt_with_jacobian/hodgkin_huxley_squid_axon_model_1952_modified.hpp b/chaste_codegen/tests/numerical/baseline/Cvode_opt_with_jacobian/hodgkin_huxley_squid_axon_model_1952_modified.hpp new file mode 100644 index 00000000..04271dcd --- /dev/null +++ b/chaste_codegen/tests/numerical/baseline/Cvode_opt_with_jacobian/hodgkin_huxley_squid_axon_model_1952_modified.hpp @@ -0,0 +1,87 @@ +#ifdef CHASTE_CVODE +#ifndef CELLHODGKIN_HUXLEY_SQUID_AXON_MODEL_1952_MODIFIEDFROMCELLMLCVODEOPT_HPP_ +#define CELLHODGKIN_HUXLEY_SQUID_AXON_MODEL_1952_MODIFIEDFROMCELLMLCVODEOPT_HPP_ + +//! @file +//! +//! This source file was generated from CellML by chaste_codegen version (version omitted as unimportant) +//! +//! Model: hodgkin_huxley_squid_axon_model_1952_modified +//! +//! Processed by chaste_codegen: https://github.com/ModellingWebLab/chaste-codegen +//! (translator: chaste_codegen, model type: AnalyticCvodeOpt) +//! on (date omitted as unimportant) +//! +//! + +#include "ChasteSerialization.hpp" +#include +#include "AbstractStimulusFunction.hpp" +#include "AbstractCvodeCell.hpp" + +class Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLCvodeOpt : public AbstractCvodeCell +{ + friend class boost::serialization::access; + template + void serialize(Archive & archive, const unsigned int version) + { + archive & boost::serialization::base_object(*this); + + } + + // + // Settable parameters and readable variables + // + + +private: +const bool is_concentration[4] = {false, false, false, false}; +const bool is_probability[4] = {false, false, false, false}; +public: + + boost::shared_ptr UseCellMLDefaultStimulus(); + Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLCvodeOpt(boost::shared_ptr pOdeSolver /* unused; should be empty */, boost::shared_ptr pIntracellularStimulus); + ~Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLCvodeOpt(); + void VerifyStateVariables(); + AbstractLookupTableCollection* GetLookupTableCollection(); + double GetIIonic(const std::vector* pStateVariables=NULL); + void EvaluateYDerivatives(double var_chaste_interface__environment__time, const N_Vector rY, N_Vector rDY); + N_Vector ComputeDerivedQuantities(double var_chaste_interface__environment__time, const N_Vector & rY); + void EvaluateAnalyticJacobian(double var_chaste_interface__environment__time, N_Vector rY, N_Vector rDY, CHASTE_CVODE_DENSE_MATRIX rJacobian, N_Vector rTmp1, N_Vector rTmp2, N_Vector rTmp3); +}; + +// Needs to be included last +#include "SerializationExportWrapper.hpp" +CHASTE_CLASS_EXPORT(Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLCvodeOpt) + +namespace boost +{ + namespace serialization + { + template + inline void save_construct_data( + Archive & ar, const Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLCvodeOpt * t, const unsigned int fileVersion) + { + const boost::shared_ptr p_solver = t->GetSolver(); + const boost::shared_ptr p_stimulus = t->GetStimulusFunction(); + ar << p_solver; + ar << p_stimulus; + } + + template + inline void load_construct_data( + Archive & ar, Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLCvodeOpt * t, const unsigned int fileVersion) + { + boost::shared_ptr p_solver; + boost::shared_ptr p_stimulus; + ar >> p_solver; + ar >> p_stimulus; + ::new(t)Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLCvodeOpt(p_solver, p_stimulus); + } + + } + +} + +#endif // CELLHODGKIN_HUXLEY_SQUID_AXON_MODEL_1952_MODIFIEDFROMCELLMLCVODEOPT_HPP_ +#endif // CHASTE_CVODE \ No newline at end of file diff --git a/chaste_codegen/tests/numerical/baseline/Cvode_with_jacobian/aslanidi_atrial_model_2009.cpp b/chaste_codegen/tests/numerical/baseline/Cvode_with_jacobian/aslanidi_atrial_model_2009.cpp new file mode 100644 index 00000000..5e876346 --- /dev/null +++ b/chaste_codegen/tests/numerical/baseline/Cvode_with_jacobian/aslanidi_atrial_model_2009.cpp @@ -0,0 +1,1333 @@ +#ifdef CHASTE_CVODE +//! @file +//! +//! This source file was generated from CellML by chaste_codegen version (version omitted as unimportant) +//! +//! Model: aslanidi_atrial_model_2009 +//! +//! Processed by chaste_codegen: https://github.com/ModellingWebLab/chaste-codegen +//! (translator: chaste_codegen, model type: AnalyticCvode) +//! on (date omitted as unimportant) +//! +//! + +#include "aslanidi_atrial_model_2009.hpp" +#include +#include +#include +#include +#include "Exception.hpp" +#include "OdeSystemInformation.hpp" +#include "RegularStimulus.hpp" +#include "HeartConfig.hpp" +#include "IsNan.hpp" +#include "MathsCustomFunctions.hpp" + +#if CHASTE_SUNDIALS_VERSION >= 60000 +#include "CvodeContextManager.hpp" +#endif + + + + + + boost::shared_ptr Cellaslanidi_atrial_model_2009FromCellMLCvode::UseCellMLDefaultStimulus() + { + // Use the default stimulus specified by CellML metadata + const double var_membrane__Cm_converted = 0.001 * NV_Ith_S(mParameters, 4); // uF + const double var_chaste_interface__membrane__stim_amplitude_converted = -3.9999999999999998e-6 * HeartConfig::Instance()->GetCapacitance() / var_membrane__Cm_converted; // uA_per_cm2 + const double var_chaste_interface__membrane__stim_duration_converted = 0.5; // millisecond + const double var_chaste_interface__membrane__stim_period_converted = 500; // millisecond + const double var_chaste_interface__membrane__stim_start_converted = 10; // millisecond + boost::shared_ptr p_cellml_stim(new RegularStimulus( + -fabs(var_chaste_interface__membrane__stim_amplitude_converted), + var_chaste_interface__membrane__stim_duration_converted, + var_chaste_interface__membrane__stim_period_converted, + var_chaste_interface__membrane__stim_start_converted + )); + mpIntracellularStimulus = p_cellml_stim; + return p_cellml_stim; + } + + double Cellaslanidi_atrial_model_2009FromCellMLCvode::GetIntracellularCalciumConcentration() + { + return NV_Ith_S(mStateVariables, 1); + } + + Cellaslanidi_atrial_model_2009FromCellMLCvode::Cellaslanidi_atrial_model_2009FromCellMLCvode(boost::shared_ptr pOdeSolver /* unused; should be empty */, boost::shared_ptr pIntracellularStimulus) + : AbstractCvodeCell( + pOdeSolver, + 29, + 0, + pIntracellularStimulus) + { + // Time units: millisecond + // + this->mpSystemInfo = OdeSystemInformation::Instance(); + Init(); + + // We have a default stimulus specified in the CellML file metadata + this->mHasDefaultStimulusFromCellML = true; + mUseAnalyticJacobian = true; + mHasAnalyticJacobian = true; + + NV_Ith_S(this->mParameters, 0) = 200; // (var_Ca_handling_by_the_SR__alpha_rel) [picoA_per_millimolar] + NV_Ith_S(this->mParameters, 1) = 2.5; // (var_cleft_space_ion_concentrations__Ca_c) [millimolar] + NV_Ith_S(this->mParameters, 2) = 140; // (var_cleft_space_ion_concentrations__Na_c) [millimolar] + NV_Ith_S(this->mParameters, 3) = 0.0040000000000000001; // (var_L_type_Ca_channel__g_Ca_L) [nanoS] + NV_Ith_S(this->mParameters, 4) = 5.0000000000000002e-5; // (var_membrane__Cm) [nanoF] + NV_Ith_S(this->mParameters, 5) = 1.3999999999999999e-6; // (var_sodium_current__P_Na) [nanolitre_per_second] + NV_Ith_S(this->mParameters, 6) = 0.0050800000000000003; // (var_inward_rectifier__g_K1) [nanoS] + NV_Ith_S(this->mParameters, 7) = 0.0035000000000000001; // (var_delayed_rectifier_K_current__g_Kr) [nanoS] + NV_Ith_S(this->mParameters, 8) = 0.0025000000000000001; // (var_delayed_rectifier_K_current__g_Ks) [nanoS] + NV_Ith_S(this->mParameters, 9) = 2.0000000000000002e-5; // (var_Na_Ca_ion_exchanger_current__k_NaCa) [picoA_per_millimolar_4] + } + + Cellaslanidi_atrial_model_2009FromCellMLCvode::~Cellaslanidi_atrial_model_2009FromCellMLCvode() + { + } + + + void Cellaslanidi_atrial_model_2009FromCellMLCvode::VerifyStateVariables() + { + + const double tol = 100*this->mAbsTol; + N_Vector rY = rGetStateVariables(); + std::string error_message = ""; + + for (unsigned i=0; i < 29; i++) + { + if(std::isnan(NV_Ith_S(rY, i))){ + error_message += "State variable " + this->rGetStateVariableNames()[i] + " is not a number\n"; + } + if(std::isinf(NV_Ith_S(rY, i))){ + error_message += "State variable " + this->rGetStateVariableNames()[i] + " has become INFINITE\n"; + } + if(this->is_concentration[i] && NV_Ith_S(rY, i) < -tol) + { + error_message += "Concentration " + this->rGetStateVariableNames()[i] + " below 0\n"; + } + if(this->is_probability[i] && NV_Ith_S(rY, i) < -tol) + { + error_message += "Probability " + this->rGetStateVariableNames()[i] + " below 0\n"; + } + if(this->is_probability[i] && NV_Ith_S(rY, i) > 1 + tol) + { + error_message += "Probability " + this->rGetStateVariableNames()[i] + " above 1\n"; + } + } + if (error_message != ""){ + EXCEPTION(DumpState(error_message)); + } + } + + double Cellaslanidi_atrial_model_2009FromCellMLCvode::GetIIonic(const std::vector* pStateVariables) + { + // For state variable interpolation (SVI) we read in interpolated state variables, + // otherwise for ionic current interpolation (ICI) we use the state variables of this model (node). + N_Vector rY; + bool made_new_cvode_vector = false; + if (!pStateVariables) + { + rY = rGetStateVariables(); + } + else + { + made_new_cvode_vector = true; + rY = MakeNVector(*pStateVariables); + } + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : NV_Ith_S(rY, 0)); + // Units: millivolt; Initial value: -80.0 + double var_chaste_interface__intracellular_ion_concentrations__Ca_i = NV_Ith_S(rY, 1); + // Units: millimolar; Initial value: 7.1e-05 + double var_chaste_interface__sodium_current_m_gate__m = NV_Ith_S(rY, 2); + // Units: dimensionless; Initial value: 0.01309 + double var_chaste_interface__sodium_current_h1_gate__h1 = NV_Ith_S(rY, 3); + // Units: dimensionless; Initial value: 0.706 + double var_chaste_interface__sodium_current_h2_gate__h2 = NV_Ith_S(rY, 4); + // Units: dimensionless; Initial value: 0.61493 + double var_chaste_interface__L_type_Ca_channel_d_L_gate__d_L = NV_Ith_S(rY, 5); + // Units: dimensionless; Initial value: 3e-05 + double var_chaste_interface__L_type_Ca_channel_f_L_gate__f_L = NV_Ith_S(rY, 6); + // Units: dimensionless; Initial value: 0.99981 + double var_chaste_interface__T_type_Ca_channel_d_T_gate__d_T = NV_Ith_S(rY, 7); + // Units: dimensionless; Initial value: 0.00046 + double var_chaste_interface__T_type_Ca_channel_f_T_gate__f_T = NV_Ith_S(rY, 8); + // Units: dimensionless; Initial value: 0.30752 + double var_chaste_interface__Ca_independent_transient_outward_K_current_r_gate__r = NV_Ith_S(rY, 9); + // Units: dimensionless; Initial value: 6e-05 + double var_chaste_interface__Ca_independent_transient_outward_K_current_s1_gate__s1 = NV_Ith_S(rY, 10); + // Units: dimensionless; Initial value: 0.5753 + double var_chaste_interface__Ca_independent_transient_outward_K_current_s2_gate__s2 = NV_Ith_S(rY, 11); + // Units: dimensionless; Initial value: 0.39871 + double var_chaste_interface__Ca_independent_transient_outward_K_current_s3_gate__s3 = NV_Ith_S(rY, 12); + // Units: dimensionless; Initial value: 0.57363 + double var_chaste_interface__delayed_rectifier_K_current_z_gate__z = NV_Ith_S(rY, 13); + // Units: dimensionless; Initial value: 0.02032 + double var_chaste_interface__delayed_rectifier_K_current_pa_gate__p_a = NV_Ith_S(rY, 14); + // Units: dimensionless; Initial value: 0.00016 + double var_chaste_interface__delayed_rectifier_K_current_pi_gate__p_i = NV_Ith_S(rY, 15); + // Units: dimensionless; Initial value: 0.76898 + double var_chaste_interface__intracellular_ion_concentrations__Na_i = NV_Ith_S(rY, 16); + // Units: millimolar; Initial value: 8.4 + double var_chaste_interface__intracellular_ion_concentrations__K_i = NV_Ith_S(rY, 17); + // Units: millimolar; Initial value: 100.0 + double var_chaste_interface__cleft_space_ion_concentrations__K_c = NV_Ith_S(rY, 22); + // Units: millimolar; Initial value: 5.0 + + const double var_Ca_independent_transient_outward_K_current__g_to = 0.050001999999999998; // nanoS + const double var_L_type_Ca_channel__E_Ca_app = 50; // millivolt + const double var_Na_Ca_ion_exchanger_current__d_NaCa = 0.00029999999999999997; // per_millimolar_4 + const double var_Na_Ca_ion_exchanger_current__gamma = 0.45000000000000001; // dimensionless + const double var_T_type_Ca_channel__E_Ca_T = 38; // millivolt + const double var_T_type_Ca_channel__g_Ca_T = 0.0060000000000000001; // nanoS + const double var_background_currents__g_B_Ca = 3.1000000000000001e-5; // nanoS + const double var_background_currents__g_B_Na = 6.3999999999999997e-5; // nanoS + const double var_environment__CT = 1; // dimensionless + const double var_environment__PM = 0; // dimensionless + const double var_inward_rectifier__KmK1 = 0.58999999999999997; // millimolar + const double var_inward_rectifier__shiftK1 = -3.6000000000000001; // millivolt + const double var_inward_rectifier__steepK1 = 1.393; // dimensionless + const double var_membrane__Cm_converted = 0.001 * NV_Ith_S(mParameters, 4); // uF + const double var_membrane__F = 96487; // coulomb_per_mole + const double var_membrane__R = 8314; // millijoule_per_mole_kelvin + const double var_membrane__T = 308; // kelvin + const double var_Ca_independent_transient_outward_K_current__E_K = var_membrane__R * var_membrane__T * log(var_chaste_interface__cleft_space_ion_concentrations__K_c / var_chaste_interface__intracellular_ion_concentrations__K_i) / var_membrane__F; // millivolt + const double var_background_currents__E_Ca = 0.5 * var_membrane__R * var_membrane__T * log(NV_Ith_S(mParameters, 1) / var_chaste_interface__intracellular_ion_concentrations__Ca_i) / var_membrane__F; // millivolt + const double var_Ca_independent_transient_outward_K_current__i_sus = (((var_environment__CT == 1) && (var_environment__PM == 0)) ? (0.098000000000000004 + 0.0014 * var_chaste_interface__membrane__V) : (((var_environment__PM == 1) && (var_environment__CT == 0)) ? (0.16799999999999998 + 0.0023999999999999998 * var_chaste_interface__membrane__V) : (0.070000000000000007 + 0.001 * var_chaste_interface__membrane__V))); // picoA + const double var_Ca_independent_transient_outward_K_current__i_to = (((var_environment__CT == 1) && (var_environment__PM == 0)) ? (0.20000000000000001 * (0.40000000000000002 + 0.59999999999999998 * pow(var_chaste_interface__Ca_independent_transient_outward_K_current_s3_gate__s3, 6)) * (-var_Ca_independent_transient_outward_K_current__E_K + var_chaste_interface__membrane__V) * (0.58999999999999997 * pow(var_chaste_interface__Ca_independent_transient_outward_K_current_s1_gate__s1, 3) + 0.40999999999999998 * pow(var_chaste_interface__Ca_independent_transient_outward_K_current_s2_gate__s2, 3)) * var_Ca_independent_transient_outward_K_current__g_to * var_chaste_interface__Ca_independent_transient_outward_K_current_r_gate__r) : (((var_environment__PM == 1) && (var_environment__CT == 0)) ? (0.34999999999999998 * (0.40000000000000002 + 0.59999999999999998 * pow(var_chaste_interface__Ca_independent_transient_outward_K_current_s3_gate__s3, 6)) * (-var_Ca_independent_transient_outward_K_current__E_K + var_chaste_interface__membrane__V) * (0.58999999999999997 * pow(var_chaste_interface__Ca_independent_transient_outward_K_current_s1_gate__s1, 3) + 0.40999999999999998 * pow(var_chaste_interface__Ca_independent_transient_outward_K_current_s2_gate__s2, 3)) * var_Ca_independent_transient_outward_K_current__g_to * var_chaste_interface__Ca_independent_transient_outward_K_current_r_gate__r) : ((0.40000000000000002 + 0.59999999999999998 * pow(var_chaste_interface__Ca_independent_transient_outward_K_current_s3_gate__s3, 6)) * (-var_Ca_independent_transient_outward_K_current__E_K + var_chaste_interface__membrane__V) * (0.58999999999999997 * pow(var_chaste_interface__Ca_independent_transient_outward_K_current_s1_gate__s1, 3) + 0.40999999999999998 * pow(var_chaste_interface__Ca_independent_transient_outward_K_current_s2_gate__s2, 3)) * var_Ca_independent_transient_outward_K_current__g_to * var_chaste_interface__Ca_independent_transient_outward_K_current_r_gate__r))); // picoA + const double var_L_type_Ca_channel__d_prime = 1 / (1 + exp(1.9166666666666667 - 0.083333333333333329 * var_chaste_interface__membrane__V)); // dimensionless + const double var_L_type_Ca_channel__i_Ca_L = (((var_environment__CT == 1) && (var_environment__PM == 0)) ? (1.8 * (-var_L_type_Ca_channel__E_Ca_app + var_chaste_interface__membrane__V) * (var_chaste_interface__L_type_Ca_channel_d_L_gate__d_L * var_chaste_interface__L_type_Ca_channel_f_L_gate__f_L + var_L_type_Ca_channel__d_prime) * NV_Ith_S(mParameters, 3)) : (((var_environment__PM == 1) && (var_environment__CT == 0)) ? (2.1000000000000001 * (-var_L_type_Ca_channel__E_Ca_app + var_chaste_interface__membrane__V) * (var_chaste_interface__L_type_Ca_channel_d_L_gate__d_L * var_chaste_interface__L_type_Ca_channel_f_L_gate__f_L + var_L_type_Ca_channel__d_prime) * NV_Ith_S(mParameters, 3)) : ((-var_L_type_Ca_channel__E_Ca_app + var_chaste_interface__membrane__V) * (var_chaste_interface__L_type_Ca_channel_d_L_gate__d_L * var_chaste_interface__L_type_Ca_channel_f_L_gate__f_L + var_L_type_Ca_channel__d_prime) * NV_Ith_S(mParameters, 3)))); // picoA + const double var_L_type_Ca_channel__i_Ca_L_converted = 9.9999999999999995e-7 * HeartConfig::Instance()->GetCapacitance() * var_L_type_Ca_channel__i_Ca_L / var_membrane__Cm_converted; // uA_per_cm2 + const double var_Na_Ca_ion_exchanger_current__i_NaCa = (pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, 3) * NV_Ith_S(mParameters, 1) * exp(var_Na_Ca_ion_exchanger_current__gamma * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T)) - pow(NV_Ith_S(mParameters, 2), 3) * var_chaste_interface__intracellular_ion_concentrations__Ca_i * exp((-1 + var_Na_Ca_ion_exchanger_current__gamma) * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * NV_Ith_S(mParameters, 9) / (1 + (pow(NV_Ith_S(mParameters, 2), 3) * var_chaste_interface__intracellular_ion_concentrations__Ca_i + pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, 3) * NV_Ith_S(mParameters, 1)) * var_Na_Ca_ion_exchanger_current__d_NaCa); // picoA + const double var_Na_Ca_ion_exchanger_current__i_NaCa_converted = 9.9999999999999995e-7 * HeartConfig::Instance()->GetCapacitance() * var_Na_Ca_ion_exchanger_current__i_NaCa / var_membrane__Cm_converted; // uA_per_cm2 + const double var_T_type_Ca_channel__i_Ca_T = (-var_T_type_Ca_channel__E_Ca_T + var_chaste_interface__membrane__V) * var_T_type_Ca_channel__g_Ca_T * var_chaste_interface__T_type_Ca_channel_d_T_gate__d_T * var_chaste_interface__T_type_Ca_channel_f_T_gate__f_T; // picoA + const double var_background_currents__i_B_Ca = (((var_environment__CT == 1) && (var_environment__PM == 0)) ? (2.0000000000000002e-5 * var_chaste_interface__membrane__V - 2.0000000000000002e-5 * var_background_currents__E_Ca) : (((var_environment__PM == 1) && (var_environment__CT == 0)) ? (3.0000000000000001e-5 * var_chaste_interface__membrane__V - 3.0000000000000001e-5 * var_background_currents__E_Ca) : ((-var_background_currents__E_Ca + var_chaste_interface__membrane__V) * var_background_currents__g_B_Ca))); // picoA + const double var_delayed_rectifier_K_current__i_Kr = (-var_Ca_independent_transient_outward_K_current__E_K + var_chaste_interface__membrane__V) * NV_Ith_S(mParameters, 7) * var_chaste_interface__delayed_rectifier_K_current_pa_gate__p_a * var_chaste_interface__delayed_rectifier_K_current_pi_gate__p_i; // picoA + const double var_delayed_rectifier_K_current__i_Kr_converted = 9.9999999999999995e-7 * HeartConfig::Instance()->GetCapacitance() * var_delayed_rectifier_K_current__i_Kr / var_membrane__Cm_converted; // uA_per_cm2 + const double var_delayed_rectifier_K_current__i_Ks = (-var_Ca_independent_transient_outward_K_current__E_K + var_chaste_interface__membrane__V) * NV_Ith_S(mParameters, 8) * var_chaste_interface__delayed_rectifier_K_current_z_gate__z; // picoA + const double var_delayed_rectifier_K_current__i_Ks_converted = 9.9999999999999995e-7 * HeartConfig::Instance()->GetCapacitance() * var_delayed_rectifier_K_current__i_Ks / var_membrane__Cm_converted; // uA_per_cm2 + const double var_inward_rectifier__i_K1 = (((var_environment__CT == 1) && (var_environment__PM == 0)) ? (2 * pow(var_chaste_interface__cleft_space_ion_concentrations__K_c, 3) * (-var_Ca_independent_transient_outward_K_current__E_K + var_chaste_interface__membrane__V) * NV_Ith_S(mParameters, 6) / ((1 + exp((-var_Ca_independent_transient_outward_K_current__E_K - var_inward_rectifier__shiftK1 + var_chaste_interface__membrane__V) * var_inward_rectifier__steepK1 * var_membrane__F / (var_membrane__R * var_membrane__T))) * pow((var_chaste_interface__cleft_space_ion_concentrations__K_c + var_inward_rectifier__KmK1), 3))) : (((var_environment__PM == 1) && (var_environment__CT == 0)) ? (2.5 * pow(var_chaste_interface__cleft_space_ion_concentrations__K_c, 3) * (-var_Ca_independent_transient_outward_K_current__E_K + var_chaste_interface__membrane__V) * NV_Ith_S(mParameters, 6) / ((1 + exp((-var_Ca_independent_transient_outward_K_current__E_K - var_inward_rectifier__shiftK1 + var_chaste_interface__membrane__V) * var_inward_rectifier__steepK1 * var_membrane__F / (var_membrane__R * var_membrane__T))) * pow((var_chaste_interface__cleft_space_ion_concentrations__K_c + var_inward_rectifier__KmK1), 3))) : (pow(var_chaste_interface__cleft_space_ion_concentrations__K_c, 3) * (-var_Ca_independent_transient_outward_K_current__E_K + var_chaste_interface__membrane__V) * NV_Ith_S(mParameters, 6) / ((1 + exp((-var_Ca_independent_transient_outward_K_current__E_K - var_inward_rectifier__shiftK1 + var_chaste_interface__membrane__V) * var_inward_rectifier__steepK1 * var_membrane__F / (var_membrane__R * var_membrane__T))) * pow((var_chaste_interface__cleft_space_ion_concentrations__K_c + var_inward_rectifier__KmK1), 3))))); // picoA + const double var_inward_rectifier__i_K1_converted = 9.9999999999999995e-7 * HeartConfig::Instance()->GetCapacitance() * var_inward_rectifier__i_K1 / var_membrane__Cm_converted; // uA_per_cm2 + const double var_sarcolemmal_calcium_pump_current__i_CaP_max = 0.0095090000000000001; // picoA + const double var_sarcolemmal_calcium_pump_current__k_CaP = 0.00020000000000000001; // millimolar + const double var_sarcolemmal_calcium_pump_current__i_CaP = var_chaste_interface__intracellular_ion_concentrations__Ca_i * var_sarcolemmal_calcium_pump_current__i_CaP_max / (var_chaste_interface__intracellular_ion_concentrations__Ca_i + var_sarcolemmal_calcium_pump_current__k_CaP); // picoA + const double var_sodium_current__E_Na = var_membrane__R * var_membrane__T * log(NV_Ith_S(mParameters, 2) / var_chaste_interface__intracellular_ion_concentrations__Na_i) / var_membrane__F; // millivolt + const double var_background_currents__i_B_Na = (((var_environment__CT == 1) && (var_environment__PM == 0)) ? (2.0000000000000002e-5 * var_chaste_interface__membrane__V - 2.0000000000000002e-5 * var_sodium_current__E_Na) : (((var_environment__PM == 1) && (var_environment__CT == 0)) ? (3.0000000000000001e-5 * var_chaste_interface__membrane__V - 3.0000000000000001e-5 * var_sodium_current__E_Na) : ((-var_sodium_current__E_Na + var_chaste_interface__membrane__V) * var_background_currents__g_B_Na))); // picoA + const double var_sodium_current__i_Na = (((var_chaste_interface__membrane__V >= -2.6539450910485349e-6) && (var_chaste_interface__membrane__V <= 2.6539450910485349e-6)) ? (188398.77346612973 * (2.6539450910485349e-6 + var_chaste_interface__membrane__V) * (0.0096486999999999996 * pow(var_chaste_interface__sodium_current_m_gate__m, 3) * (-1 + exp(9.9999999999999995e-8 - log(NV_Ith_S(mParameters, 2) / var_chaste_interface__intracellular_ion_concentrations__Na_i))) * (0.36499999999999999 * var_chaste_interface__sodium_current_h2_gate__h2 + 0.63500000000000001 * var_chaste_interface__sodium_current_h1_gate__h1) * NV_Ith_S(mParameters, 2) * NV_Ith_S(mParameters, 5) / (-1 + exp(9.9999999999999995e-8)) + 0.0096486999999999996 * pow(var_chaste_interface__sodium_current_m_gate__m, 3) * (-1 + exp(-9.9999999999999995e-8 - log(NV_Ith_S(mParameters, 2) / var_chaste_interface__intracellular_ion_concentrations__Na_i))) * (0.36499999999999999 * var_chaste_interface__sodium_current_h2_gate__h2 + 0.63500000000000001 * var_chaste_interface__sodium_current_h1_gate__h1) * NV_Ith_S(mParameters, 2) * NV_Ith_S(mParameters, 5) / (-1 + exp(-9.9999999999999995e-8))) - 0.0096486999999999996 * pow(var_chaste_interface__sodium_current_m_gate__m, 3) * (-1 + exp(-9.9999999999999995e-8 - log(NV_Ith_S(mParameters, 2) / var_chaste_interface__intracellular_ion_concentrations__Na_i))) * (0.36499999999999999 * var_chaste_interface__sodium_current_h2_gate__h2 + 0.63500000000000001 * var_chaste_interface__sodium_current_h1_gate__h1) * NV_Ith_S(mParameters, 2) * NV_Ith_S(mParameters, 5) / (-1 + exp(-9.9999999999999995e-8))) : (3635.606491085292 * pow(var_chaste_interface__sodium_current_m_gate__m, 3) * (-1 + exp(0.037679754693225945 * var_chaste_interface__membrane__V - log(NV_Ith_S(mParameters, 2) / var_chaste_interface__intracellular_ion_concentrations__Na_i))) * (0.36499999999999999 * var_chaste_interface__sodium_current_h2_gate__h2 + 0.63500000000000001 * var_chaste_interface__sodium_current_h1_gate__h1) * NV_Ith_S(mParameters, 2) * var_chaste_interface__membrane__V * NV_Ith_S(mParameters, 5) / (-1 + exp(0.037679754693225945 * var_chaste_interface__membrane__V)))); // picoA + const double var_sodium_current__i_Na_converted = 9.9999999999999995e-7 * HeartConfig::Instance()->GetCapacitance() * var_sodium_current__i_Na / var_membrane__Cm_converted; // uA_per_cm2 + const double var_sodium_potassium_pump__i_NaK_max = 0.064409999999999995; // picoA + const double var_sodium_potassium_pump__k_NaK_K = 1; // millimolar + const double var_sodium_potassium_pump__k_NaK_Na = 11; // millimolar + const double var_sodium_potassium_pump__i_p = 1.6000000000000001 * pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, 1.5) * var_chaste_interface__cleft_space_ion_concentrations__K_c * var_sodium_potassium_pump__i_NaK_max / ((1.5 + exp(-1.5 - 0.025000000000000001 * var_chaste_interface__membrane__V)) * (pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, 1.5) + pow(var_sodium_potassium_pump__k_NaK_Na, 1.5)) * (var_chaste_interface__cleft_space_ion_concentrations__K_c + var_sodium_potassium_pump__k_NaK_K)); // picoA + const double var_chaste_interface__i_ionic = ((var_L_type_Ca_channel__i_Ca_L_converted + var_Na_Ca_ion_exchanger_current__i_NaCa_converted + var_delayed_rectifier_K_current__i_Kr_converted + var_delayed_rectifier_K_current__i_Ks_converted + var_inward_rectifier__i_K1_converted + var_sodium_current__i_Na_converted) * var_membrane__Cm_converted + 9.9999999999999995e-7 * HeartConfig::Instance()->GetCapacitance() * var_Ca_independent_transient_outward_K_current__i_sus + 9.9999999999999995e-7 * HeartConfig::Instance()->GetCapacitance() * var_Ca_independent_transient_outward_K_current__i_to + 9.9999999999999995e-7 * HeartConfig::Instance()->GetCapacitance() * var_T_type_Ca_channel__i_Ca_T + 9.9999999999999995e-7 * HeartConfig::Instance()->GetCapacitance() * var_background_currents__i_B_Ca + 9.9999999999999995e-7 * HeartConfig::Instance()->GetCapacitance() * var_background_currents__i_B_Na + 9.9999999999999995e-7 * HeartConfig::Instance()->GetCapacitance() * var_sarcolemmal_calcium_pump_current__i_CaP + 9.9999999999999995e-7 * HeartConfig::Instance()->GetCapacitance() * var_sodium_potassium_pump__i_p) / var_membrane__Cm_converted; // uA_per_cm2 + + const double i_ionic = var_chaste_interface__i_ionic; + if (made_new_cvode_vector) + { + DeleteVector(rY); + } + EXCEPT_IF_NOT(!std::isnan(i_ionic)); + return i_ionic; + } + + void Cellaslanidi_atrial_model_2009FromCellMLCvode::EvaluateYDerivatives(double var_chaste_interface__environment__time_converted, const N_Vector rY, N_Vector rDY) + { + // Inputs: + // Time units: millisecond + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : NV_Ith_S(rY, 0)); + // Units: millivolt; Initial value: -80.0 + double var_chaste_interface__intracellular_ion_concentrations__Ca_i = NV_Ith_S(rY, 1); + // Units: millimolar; Initial value: 7.1e-05 + double var_chaste_interface__sodium_current_m_gate__m = NV_Ith_S(rY, 2); + // Units: dimensionless; Initial value: 0.01309 + double var_chaste_interface__sodium_current_h1_gate__h1 = NV_Ith_S(rY, 3); + // Units: dimensionless; Initial value: 0.706 + double var_chaste_interface__sodium_current_h2_gate__h2 = NV_Ith_S(rY, 4); + // Units: dimensionless; Initial value: 0.61493 + double var_chaste_interface__L_type_Ca_channel_d_L_gate__d_L = NV_Ith_S(rY, 5); + // Units: dimensionless; Initial value: 3e-05 + double var_chaste_interface__L_type_Ca_channel_f_L_gate__f_L = NV_Ith_S(rY, 6); + // Units: dimensionless; Initial value: 0.99981 + double var_chaste_interface__T_type_Ca_channel_d_T_gate__d_T = NV_Ith_S(rY, 7); + // Units: dimensionless; Initial value: 0.00046 + double var_chaste_interface__T_type_Ca_channel_f_T_gate__f_T = NV_Ith_S(rY, 8); + // Units: dimensionless; Initial value: 0.30752 + double var_chaste_interface__Ca_independent_transient_outward_K_current_r_gate__r = NV_Ith_S(rY, 9); + // Units: dimensionless; Initial value: 6e-05 + double var_chaste_interface__Ca_independent_transient_outward_K_current_s1_gate__s1 = NV_Ith_S(rY, 10); + // Units: dimensionless; Initial value: 0.5753 + double var_chaste_interface__Ca_independent_transient_outward_K_current_s2_gate__s2 = NV_Ith_S(rY, 11); + // Units: dimensionless; Initial value: 0.39871 + double var_chaste_interface__Ca_independent_transient_outward_K_current_s3_gate__s3 = NV_Ith_S(rY, 12); + // Units: dimensionless; Initial value: 0.57363 + double var_chaste_interface__delayed_rectifier_K_current_z_gate__z = NV_Ith_S(rY, 13); + // Units: dimensionless; Initial value: 0.02032 + double var_chaste_interface__delayed_rectifier_K_current_pa_gate__p_a = NV_Ith_S(rY, 14); + // Units: dimensionless; Initial value: 0.00016 + double var_chaste_interface__delayed_rectifier_K_current_pi_gate__p_i = NV_Ith_S(rY, 15); + // Units: dimensionless; Initial value: 0.76898 + double var_chaste_interface__intracellular_ion_concentrations__Na_i = NV_Ith_S(rY, 16); + // Units: millimolar; Initial value: 8.4 + double var_chaste_interface__intracellular_ion_concentrations__K_i = NV_Ith_S(rY, 17); + // Units: millimolar; Initial value: 100.0 + double var_chaste_interface__intracellular_Ca_buffering__O_C = NV_Ith_S(rY, 18); + // Units: dimensionless; Initial value: 0.029108 + double var_chaste_interface__intracellular_Ca_buffering__O_TC = NV_Ith_S(rY, 19); + // Units: dimensionless; Initial value: 0.014071 + double var_chaste_interface__intracellular_Ca_buffering__O_TMgC = NV_Ith_S(rY, 20); + // Units: dimensionless; Initial value: 0.214036 + double var_chaste_interface__intracellular_Ca_buffering__O_TMgMg = NV_Ith_S(rY, 21); + // Units: dimensionless; Initial value: 0.693565 + double var_chaste_interface__cleft_space_ion_concentrations__K_c = NV_Ith_S(rY, 22); + // Units: millimolar; Initial value: 5.0 + double var_chaste_interface__Ca_handling_by_the_SR__Ca_rel = NV_Ith_S(rY, 23); + // Units: millimolar; Initial value: 0.726776 + double var_chaste_interface__Ca_handling_by_the_SR__Ca_up = NV_Ith_S(rY, 24); + // Units: millimolar; Initial value: 0.730866 + double var_chaste_interface__Ca_handling_by_the_SR__O_Calse = NV_Ith_S(rY, 25); + // Units: dimensionless; Initial value: 0.465921 + double var_chaste_interface__Ca_handling_by_the_SR__F1 = NV_Ith_S(rY, 26); + // Units: dimensionless; Initial value: 0.288039 + double var_chaste_interface__Ca_handling_by_the_SR__F2 = NV_Ith_S(rY, 27); + // Units: dimensionless; Initial value: 0.002262 + double var_chaste_interface__Ca_handling_by_the_SR__F3 = NV_Ith_S(rY, 28); + // Units: dimensionless; Initial value: 0.612697 + + // Mathematics + double d_dt_chaste_interface_var_membrane__V; + const double var_Ca_handling_by_the_SR__I_up_max = 2.7999999999999998; // picoA + const double var_Ca_handling_by_the_SR__O_Calse_orig_deriv = -400 * var_chaste_interface__Ca_handling_by_the_SR__O_Calse + 480 * (1 - var_chaste_interface__Ca_handling_by_the_SR__O_Calse) * var_chaste_interface__Ca_handling_by_the_SR__Ca_rel; // 1 / second + const double var_Ca_handling_by_the_SR__Vol_rel = 4.3999999999999997e-8; // nanolitre + const double var_Ca_handling_by_the_SR__Vol_up = 3.9690000000000001e-7; // nanolitre + const double var_Ca_handling_by_the_SR__k_F3 = 0.81499999999999995; // per_second + const double var_Ca_handling_by_the_SR__k_cyca = 0.00029999999999999997; // millimolar + const double var_Ca_handling_by_the_SR__k_rel = 0.00029999999999999997; // millimolar + const double var_Ca_handling_by_the_SR__k_srca = 0.5; // millimolar + const double var_Ca_handling_by_the_SR__k_xcs = 0.40000000000000002; // dimensionless + const double var_Ca_handling_by_the_SR__tau_tr = 0.01; // second + const double var_Ca_independent_transient_outward_K_current__g_to = 0.050001999999999998; // nanoS + const double d_dt_chaste_interface_var_Ca_handling_by_the_SR__O_Calse = 0.001 * var_Ca_handling_by_the_SR__O_Calse_orig_deriv; // 1 / millisecond + const double var_L_type_Ca_channel__E_Ca_app = 50; // millivolt + const double var_Na_Ca_ion_exchanger_current__d_NaCa = 0.00029999999999999997; // per_millimolar_4 + const double var_Na_Ca_ion_exchanger_current__gamma = 0.45000000000000001; // dimensionless + const double var_T_type_Ca_channel__E_Ca_T = 38; // millivolt + const double var_T_type_Ca_channel__g_Ca_T = 0.0060000000000000001; // nanoS + const double var_background_currents__g_B_Ca = 3.1000000000000001e-5; // nanoS + const double var_background_currents__g_B_Na = 6.3999999999999997e-5; // nanoS + const double var_cleft_space_ion_concentrations__Vol_c = 2.5000000000000002e-6; // nanolitre + const double var_environment__CT = 1; // dimensionless + const double var_environment__PM = 0; // dimensionless + const double var_intracellular_Ca_buffering__Mg_i = 2.5; // millimolar + const double var_intracellular_Ca_buffering__O_TMgMg_orig_deriv = -666 * var_chaste_interface__intracellular_Ca_buffering__O_TMgMg + 2000 * (1 - var_chaste_interface__intracellular_Ca_buffering__O_TMgC - var_chaste_interface__intracellular_Ca_buffering__O_TMgMg) * var_intracellular_Ca_buffering__Mg_i; // 1 / second + const double d_dt_chaste_interface_var_intracellular_Ca_buffering__O_TMgMg = 0.001 * var_intracellular_Ca_buffering__O_TMgMg_orig_deriv; // 1 / millisecond + const double var_Ca_handling_by_the_SR__i_rel = pow(var_chaste_interface__Ca_handling_by_the_SR__F2, 2) * (-var_chaste_interface__intracellular_ion_concentrations__Ca_i + var_chaste_interface__Ca_handling_by_the_SR__Ca_rel) * NV_Ith_S(mParameters, 0) / pow((0.25 + var_chaste_interface__Ca_handling_by_the_SR__F2), 2); // picoA + const double var_Ca_handling_by_the_SR__i_up = (var_chaste_interface__intracellular_ion_concentrations__Ca_i / var_Ca_handling_by_the_SR__k_cyca - pow(var_Ca_handling_by_the_SR__k_xcs, 2) * var_chaste_interface__Ca_handling_by_the_SR__Ca_up / var_Ca_handling_by_the_SR__k_srca) * var_Ca_handling_by_the_SR__I_up_max / ((var_Ca_handling_by_the_SR__k_cyca + var_chaste_interface__intracellular_ion_concentrations__Ca_i) / var_Ca_handling_by_the_SR__k_cyca + (var_chaste_interface__Ca_handling_by_the_SR__Ca_up + var_Ca_handling_by_the_SR__k_srca) * var_Ca_handling_by_the_SR__k_xcs / var_Ca_handling_by_the_SR__k_srca); // picoA + const double var_Ca_handling_by_the_SR__r_inact = 33.960000000000001 + 339.60000000000002 * pow(var_chaste_interface__intracellular_ion_concentrations__Ca_i, 4) / pow((var_Ca_handling_by_the_SR__k_rel + var_chaste_interface__intracellular_ion_concentrations__Ca_i), 4); // per_second + const double var_Ca_handling_by_the_SR__F3_orig_deriv = var_chaste_interface__Ca_handling_by_the_SR__F2 * var_Ca_handling_by_the_SR__r_inact - var_chaste_interface__Ca_handling_by_the_SR__F3 * var_Ca_handling_by_the_SR__k_F3; // 1 / second + const double d_dt_chaste_interface_var_Ca_handling_by_the_SR__F3 = 0.001 * var_Ca_handling_by_the_SR__F3_orig_deriv; // 1 / millisecond + const double var_intracellular_Ca_buffering__dOCdt = -476 * var_chaste_interface__intracellular_Ca_buffering__O_C + 200000 * (1 - var_chaste_interface__intracellular_Ca_buffering__O_C) * var_chaste_interface__intracellular_ion_concentrations__Ca_i; // per_second + const double var_intracellular_Ca_buffering__O_C_orig_deriv = var_intracellular_Ca_buffering__dOCdt; // 1 / second + const double d_dt_chaste_interface_var_intracellular_Ca_buffering__O_C = 0.001 * var_intracellular_Ca_buffering__O_C_orig_deriv; // 1 / millisecond + const double var_intracellular_Ca_buffering__dOTCdt = -392 * var_chaste_interface__intracellular_Ca_buffering__O_TC + 78400 * (1 - var_chaste_interface__intracellular_Ca_buffering__O_TC) * var_chaste_interface__intracellular_ion_concentrations__Ca_i; // per_second + const double var_intracellular_Ca_buffering__O_TC_orig_deriv = var_intracellular_Ca_buffering__dOTCdt; // 1 / second + const double d_dt_chaste_interface_var_intracellular_Ca_buffering__O_TC = 0.001 * var_intracellular_Ca_buffering__O_TC_orig_deriv; // 1 / millisecond + const double var_intracellular_Ca_buffering__dOTMgCdt = -6.5999999999999996 * var_chaste_interface__intracellular_Ca_buffering__O_TMgC + 200000 * (1 - var_chaste_interface__intracellular_Ca_buffering__O_TMgC - var_chaste_interface__intracellular_Ca_buffering__O_TMgMg) * var_chaste_interface__intracellular_ion_concentrations__Ca_i; // per_second + const double var_intracellular_Ca_buffering__O_TMgC_orig_deriv = var_intracellular_Ca_buffering__dOTMgCdt; // 1 / second + const double d_dt_chaste_interface_var_intracellular_Ca_buffering__O_TMgC = 0.001 * var_intracellular_Ca_buffering__O_TMgC_orig_deriv; // 1 / millisecond + const double var_intracellular_ion_concentrations__Vol_Ca = 5.8839999999999999e-6; // nanolitre + const double var_intracellular_ion_concentrations__Vol_i = 1.26e-5; // nanolitre + const double var_inward_rectifier__KmK1 = 0.58999999999999997; // millimolar + const double var_inward_rectifier__shiftK1 = -3.6000000000000001; // millivolt + const double var_inward_rectifier__steepK1 = 1.393; // dimensionless + const double var_membrane__F = 96487; // coulomb_per_mole + const double var_Ca_handling_by_the_SR__i_tr = 2 * (-var_chaste_interface__Ca_handling_by_the_SR__Ca_rel + var_chaste_interface__Ca_handling_by_the_SR__Ca_up) * var_Ca_handling_by_the_SR__Vol_rel * var_membrane__F / var_Ca_handling_by_the_SR__tau_tr; // picoA + const double var_Ca_handling_by_the_SR__Ca_rel_orig_deriv = -31 * var_Ca_handling_by_the_SR__O_Calse_orig_deriv + 0.5 * (-var_Ca_handling_by_the_SR__i_rel + var_Ca_handling_by_the_SR__i_tr) / (var_Ca_handling_by_the_SR__Vol_rel * var_membrane__F); // millimolar / second + const double var_Ca_handling_by_the_SR__Ca_up_orig_deriv = 0.5 * (-var_Ca_handling_by_the_SR__i_tr + var_Ca_handling_by_the_SR__i_up) / (var_Ca_handling_by_the_SR__Vol_up * var_membrane__F); // millimolar / second + const double d_dt_chaste_interface_var_Ca_handling_by_the_SR__Ca_rel = 0.001 * var_Ca_handling_by_the_SR__Ca_rel_orig_deriv; // millimolar / millisecond + const double d_dt_chaste_interface_var_Ca_handling_by_the_SR__Ca_up = 0.001 * var_Ca_handling_by_the_SR__Ca_up_orig_deriv; // millimolar / millisecond + const double var_membrane__R = 8314; // millijoule_per_mole_kelvin + const double var_membrane__T = 308; // kelvin + const double var_Ca_independent_transient_outward_K_current__E_K = var_membrane__R * var_membrane__T * log(var_chaste_interface__cleft_space_ion_concentrations__K_c / var_chaste_interface__intracellular_ion_concentrations__K_i) / var_membrane__F; // millivolt + const double var_background_currents__E_Ca = 0.5 * var_membrane__R * var_membrane__T * log(NV_Ith_S(mParameters, 1) / var_chaste_interface__intracellular_ion_concentrations__Ca_i) / var_membrane__F; // millivolt + const double var_Ca_handling_by_the_SR__r_act = 240 * exp(-1.6000000000000001 + 0.080000000000000002 * var_chaste_interface__membrane__V) + 203.80000000000001 * pow(var_chaste_interface__intracellular_ion_concentrations__Ca_i, 4) / pow((var_Ca_handling_by_the_SR__k_rel + var_chaste_interface__intracellular_ion_concentrations__Ca_i), 4); // per_second + const double var_Ca_handling_by_the_SR__F1_orig_deriv = var_chaste_interface__Ca_handling_by_the_SR__F3 * var_Ca_handling_by_the_SR__k_F3 - var_chaste_interface__Ca_handling_by_the_SR__F1 * var_Ca_handling_by_the_SR__r_act; // 1 / second + const double var_Ca_handling_by_the_SR__F2_orig_deriv = var_chaste_interface__Ca_handling_by_the_SR__F1 * var_Ca_handling_by_the_SR__r_act - var_chaste_interface__Ca_handling_by_the_SR__F2 * var_Ca_handling_by_the_SR__r_inact; // 1 / second + const double var_Ca_independent_transient_outward_K_current__i_sus = (((var_environment__CT == 1) && (var_environment__PM == 0)) ? (0.098000000000000004 + 0.0014 * var_chaste_interface__membrane__V) : (((var_environment__PM == 1) && (var_environment__CT == 0)) ? (0.16799999999999998 + 0.0023999999999999998 * var_chaste_interface__membrane__V) : (0.070000000000000007 + 0.001 * var_chaste_interface__membrane__V))); // picoA + const double var_Ca_independent_transient_outward_K_current__i_to = (((var_environment__CT == 1) && (var_environment__PM == 0)) ? (0.20000000000000001 * (0.40000000000000002 + 0.59999999999999998 * pow(var_chaste_interface__Ca_independent_transient_outward_K_current_s3_gate__s3, 6)) * (-var_Ca_independent_transient_outward_K_current__E_K + var_chaste_interface__membrane__V) * (0.58999999999999997 * pow(var_chaste_interface__Ca_independent_transient_outward_K_current_s1_gate__s1, 3) + 0.40999999999999998 * pow(var_chaste_interface__Ca_independent_transient_outward_K_current_s2_gate__s2, 3)) * var_Ca_independent_transient_outward_K_current__g_to * var_chaste_interface__Ca_independent_transient_outward_K_current_r_gate__r) : (((var_environment__PM == 1) && (var_environment__CT == 0)) ? (0.34999999999999998 * (0.40000000000000002 + 0.59999999999999998 * pow(var_chaste_interface__Ca_independent_transient_outward_K_current_s3_gate__s3, 6)) * (-var_Ca_independent_transient_outward_K_current__E_K + var_chaste_interface__membrane__V) * (0.58999999999999997 * pow(var_chaste_interface__Ca_independent_transient_outward_K_current_s1_gate__s1, 3) + 0.40999999999999998 * pow(var_chaste_interface__Ca_independent_transient_outward_K_current_s2_gate__s2, 3)) * var_Ca_independent_transient_outward_K_current__g_to * var_chaste_interface__Ca_independent_transient_outward_K_current_r_gate__r) : ((0.40000000000000002 + 0.59999999999999998 * pow(var_chaste_interface__Ca_independent_transient_outward_K_current_s3_gate__s3, 6)) * (-var_Ca_independent_transient_outward_K_current__E_K + var_chaste_interface__membrane__V) * (0.58999999999999997 * pow(var_chaste_interface__Ca_independent_transient_outward_K_current_s1_gate__s1, 3) + 0.40999999999999998 * pow(var_chaste_interface__Ca_independent_transient_outward_K_current_s2_gate__s2, 3)) * var_Ca_independent_transient_outward_K_current__g_to * var_chaste_interface__Ca_independent_transient_outward_K_current_r_gate__r))); // picoA + const double var_Ca_independent_transient_outward_K_current_r_gate__alpha_r = 386.60000000000002 * exp(0.083333333333333329 * var_chaste_interface__membrane__V); // per_second + const double var_Ca_independent_transient_outward_K_current_r_gate__beta_r = 8.0109999999999992 * exp(-0.1388888888888889 * var_chaste_interface__membrane__V); // per_second + const double var_Ca_independent_transient_outward_K_current_r_gate__r_infinity = 1 / (1 + exp(-2.6628794603230959 - 0.17752529735487307 * var_chaste_interface__membrane__V)); // dimensionless + const double var_Ca_independent_transient_outward_K_current_r_gate__tau_r = 0.00040000000000000002 + 1 / (var_Ca_independent_transient_outward_K_current_r_gate__alpha_r + var_Ca_independent_transient_outward_K_current_r_gate__beta_r); // second + const double var_Ca_independent_transient_outward_K_current_r_gate__r_orig_deriv = (-var_chaste_interface__Ca_independent_transient_outward_K_current_r_gate__r + var_Ca_independent_transient_outward_K_current_r_gate__r_infinity) / var_Ca_independent_transient_outward_K_current_r_gate__tau_r; // 1 / second + const double var_Ca_independent_transient_outward_K_current_s1_gate__s1_infinity = 1 / (1 + exp(4.0070821529745047 + 0.14164305949008499 * var_chaste_interface__membrane__V)); // dimensionless + const double var_Ca_independent_transient_outward_K_current_s1_gate__tau_s1 = 0.020400000000000001 + 0.54659999999999997 / (1 + exp(327.99999999999994 + 10 * var_chaste_interface__membrane__V)); // second + const double var_Ca_independent_transient_outward_K_current_s1_gate__s1_orig_deriv = (-var_chaste_interface__Ca_independent_transient_outward_K_current_s1_gate__s1 + var_Ca_independent_transient_outward_K_current_s1_gate__s1_infinity) / var_Ca_independent_transient_outward_K_current_s1_gate__tau_s1; // 1 / second + const double var_Ca_independent_transient_outward_K_current_s2_gate__s2_infinity = 1 / (1 + exp(4.0070821529745047 + 0.14164305949008499 * var_chaste_interface__membrane__V)); // dimensionless + const double var_Ca_independent_transient_outward_K_current_s2_gate__tau_s2 = 5.75 / (1 + exp(327.99999999999994 + 10 * var_chaste_interface__membrane__V)) + 0.45000000000000001 / (1 + exp(0.96921975662133131 - 0.071581961345740866 * var_chaste_interface__membrane__V)); // second + const double var_Ca_independent_transient_outward_K_current_s2_gate__s2_orig_deriv = (-var_chaste_interface__Ca_independent_transient_outward_K_current_s2_gate__s2 + var_Ca_independent_transient_outward_K_current_s2_gate__s2_infinity) / var_Ca_independent_transient_outward_K_current_s2_gate__tau_s2; // 1 / second + const double var_Ca_independent_transient_outward_K_current_s3_gate__s3_infinity = 0.39975990396158467 + 0.60024009603841544 / (1 + exp(1.8506208911614319 + 0.036523009495982472 * var_chaste_interface__membrane__V)); // dimensionless + const double var_Ca_independent_transient_outward_K_current_s3_gate__tau_s3 = 0.5 + 7.5 / (1 + exp(46 + 2 * var_chaste_interface__membrane__V)); // second + const double var_Ca_independent_transient_outward_K_current_s3_gate__s3_orig_deriv = (-var_chaste_interface__Ca_independent_transient_outward_K_current_s3_gate__s3 + var_Ca_independent_transient_outward_K_current_s3_gate__s3_infinity) / var_Ca_independent_transient_outward_K_current_s3_gate__tau_s3; // 1 / second + const double d_dt_chaste_interface_var_Ca_handling_by_the_SR__F1 = 0.001 * var_Ca_handling_by_the_SR__F1_orig_deriv; // 1 / millisecond + const double d_dt_chaste_interface_var_Ca_handling_by_the_SR__F2 = 0.001 * var_Ca_handling_by_the_SR__F2_orig_deriv; // 1 / millisecond + const double d_dt_chaste_interface_var_Ca_independent_transient_outward_K_current_r_gate__r = 0.001 * var_Ca_independent_transient_outward_K_current_r_gate__r_orig_deriv; // 1 / millisecond + const double d_dt_chaste_interface_var_Ca_independent_transient_outward_K_current_s1_gate__s1 = 0.001 * var_Ca_independent_transient_outward_K_current_s1_gate__s1_orig_deriv; // 1 / millisecond + const double d_dt_chaste_interface_var_Ca_independent_transient_outward_K_current_s2_gate__s2 = 0.001 * var_Ca_independent_transient_outward_K_current_s2_gate__s2_orig_deriv; // 1 / millisecond + const double d_dt_chaste_interface_var_Ca_independent_transient_outward_K_current_s3_gate__s3 = 0.001 * var_Ca_independent_transient_outward_K_current_s3_gate__s3_orig_deriv; // 1 / millisecond + const double var_L_type_Ca_channel__d_prime = 1 / (1 + exp(1.9166666666666667 - 0.083333333333333329 * var_chaste_interface__membrane__V)); // dimensionless + const double var_L_type_Ca_channel__i_Ca_L = (((var_environment__CT == 1) && (var_environment__PM == 0)) ? (1.8 * (-var_L_type_Ca_channel__E_Ca_app + var_chaste_interface__membrane__V) * (var_chaste_interface__L_type_Ca_channel_d_L_gate__d_L * var_chaste_interface__L_type_Ca_channel_f_L_gate__f_L + var_L_type_Ca_channel__d_prime) * NV_Ith_S(mParameters, 3)) : (((var_environment__PM == 1) && (var_environment__CT == 0)) ? (2.1000000000000001 * (-var_L_type_Ca_channel__E_Ca_app + var_chaste_interface__membrane__V) * (var_chaste_interface__L_type_Ca_channel_d_L_gate__d_L * var_chaste_interface__L_type_Ca_channel_f_L_gate__f_L + var_L_type_Ca_channel__d_prime) * NV_Ith_S(mParameters, 3)) : ((-var_L_type_Ca_channel__E_Ca_app + var_chaste_interface__membrane__V) * (var_chaste_interface__L_type_Ca_channel_d_L_gate__d_L * var_chaste_interface__L_type_Ca_channel_f_L_gate__f_L + var_L_type_Ca_channel__d_prime) * NV_Ith_S(mParameters, 3)))); // picoA + const double var_L_type_Ca_channel_d_L_gate__E10 = 10 + var_chaste_interface__membrane__V; // millivolt + const double var_L_type_Ca_channel_d_L_gate__alpha_d_L = (((var_chaste_interface__membrane__V >= -10.000000480800001) && (var_chaste_interface__membrane__V <= -9.9999995191999993)) ? (2.4040000000391526e-5 / (-1 + exp(1.0000000000162864e-7)) + 1039933.4442576389 * (10.000000480800001 + var_chaste_interface__membrane__V) * (-2.4040000000391526e-5 / (-1 + exp(1.0000000000162864e-7)) - 2.4039999999697637e-5 / (-1 + exp(-9.9999999998742257e-8)))) : (-50 * (10 + var_chaste_interface__membrane__V) / (-1 + exp(-2.0798668885191347 - 0.20798668885191349 * var_chaste_interface__membrane__V)))) + (((var_chaste_interface__membrane__V >= -45.000000249999999) && (var_chaste_interface__membrane__V <= -44.999999750000001)) ? (4.1799999996561256e-6 / (-1 + exp(9.9999999991773334e-8)) + 1999999.9999424887 * (45.000000249999999 + var_chaste_interface__membrane__V) * (-4.1800000005842713e-6 / (-1 + exp(-1.000000000139778e-7)) - 4.1799999996561256e-6 / (-1 + exp(9.9999999991773334e-8)))) : (-16.719999999999999 * (45 + var_chaste_interface__membrane__V) / (-1 + exp(-18 - 0.40000000000000002 * var_chaste_interface__membrane__V)))); // per_second + const double var_L_type_Ca_channel_d_L_gate__beta_d_L = (((var_chaste_interface__membrane__V >= -5.0000002500000003) && (var_chaste_interface__membrane__V <= -4.9999997499999997)) ? (-1.1200000000011203e-6 / (-1 + exp(-1.0000000000010001e-7)) + 1999999.9999979998 * (5.0000002500000003 + var_chaste_interface__membrane__V) * (1.1200000000011203e-6 / (-1 + exp(1.0000000000010001e-7)) + 1.1200000000011203e-6 / (-1 + exp(-1.0000000000010001e-7)))) : (4.4800000000000004 * (5 + var_chaste_interface__membrane__V) / (-1 + exp(2 + 0.40000000000000002 * var_chaste_interface__membrane__V)))); // per_second + const double var_L_type_Ca_channel_d_L_gate__d_L_infinity = 1 / (1 + exp(-0.14393939393939395 - 0.15151515151515152 * var_L_type_Ca_channel_d_L_gate__E10)); // dimensionless + const double var_L_type_Ca_channel_d_L_gate__tau_d_L = 1 / (var_L_type_Ca_channel_d_L_gate__alpha_d_L + var_L_type_Ca_channel_d_L_gate__beta_d_L); // second + const double var_L_type_Ca_channel_d_L_gate__d_L_orig_deriv = (-var_chaste_interface__L_type_Ca_channel_d_L_gate__d_L + var_L_type_Ca_channel_d_L_gate__d_L_infinity) / var_L_type_Ca_channel_d_L_gate__tau_d_L; // 1 / second + const double d_dt_chaste_interface_var_L_type_Ca_channel_d_L_gate__d_L = 0.001 * var_L_type_Ca_channel_d_L_gate__d_L_orig_deriv; // 1 / millisecond + const double var_L_type_Ca_channel_f_L_gate__E0_f_L = 18 + var_chaste_interface__membrane__V; // millivolt + const double var_L_type_Ca_channel_f_L_gate__alpha_f_L = (((var_chaste_interface__membrane__V >= -18.000000400000001) && (var_chaste_interface__membrane__V <= -17.999999599999999)) ? (-3.3960000000976542e-6 / (-1 + exp(-1.0000000000287557e-7)) + 1249999.9999640554 * (18.000000400000001 + var_chaste_interface__membrane__V) * (3.3960000000976542e-6 / (-1 + exp(1.0000000000287557e-7)) + 3.3960000000976542e-6 / (-1 + exp(-1.0000000000287557e-7)))) : (8.4900000000000002 * (18 + var_chaste_interface__membrane__V) / (-1 + exp(4.5 + 0.25 * var_chaste_interface__membrane__V)))); // per_second + const double var_L_type_Ca_channel_f_L_gate__beta_f_L = 67.921999999999997 / (1 + exp(-0.25 * var_L_type_Ca_channel_f_L_gate__E0_f_L)); // per_second + const double var_L_type_Ca_channel_f_L_gate__f_L_infinity = var_L_type_Ca_channel_f_L_gate__alpha_f_L / (var_L_type_Ca_channel_f_L_gate__alpha_f_L + var_L_type_Ca_channel_f_L_gate__beta_f_L); // dimensionless + const double var_L_type_Ca_channel_f_L_gate__tau_f_L = 1 / (var_L_type_Ca_channel_f_L_gate__alpha_f_L + var_L_type_Ca_channel_f_L_gate__beta_f_L); // second + const double var_L_type_Ca_channel_f_L_gate__f_L_orig_deriv = (-var_chaste_interface__L_type_Ca_channel_f_L_gate__f_L + var_L_type_Ca_channel_f_L_gate__f_L_infinity) / var_L_type_Ca_channel_f_L_gate__tau_f_L; // 1 / second + const double d_dt_chaste_interface_var_L_type_Ca_channel_f_L_gate__f_L = 0.001 * var_L_type_Ca_channel_f_L_gate__f_L_orig_deriv; // 1 / millisecond + const double var_Na_Ca_ion_exchanger_current__i_NaCa = (pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, 3) * NV_Ith_S(mParameters, 1) * exp(var_Na_Ca_ion_exchanger_current__gamma * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T)) - pow(NV_Ith_S(mParameters, 2), 3) * var_chaste_interface__intracellular_ion_concentrations__Ca_i * exp((-1 + var_Na_Ca_ion_exchanger_current__gamma) * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * NV_Ith_S(mParameters, 9) / (1 + (pow(NV_Ith_S(mParameters, 2), 3) * var_chaste_interface__intracellular_ion_concentrations__Ca_i + pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, 3) * NV_Ith_S(mParameters, 1)) * var_Na_Ca_ion_exchanger_current__d_NaCa); // picoA + const double var_T_type_Ca_channel__i_Ca_T = (-var_T_type_Ca_channel__E_Ca_T + var_chaste_interface__membrane__V) * var_T_type_Ca_channel__g_Ca_T * var_chaste_interface__T_type_Ca_channel_d_T_gate__d_T * var_chaste_interface__T_type_Ca_channel_f_T_gate__f_T; // picoA + const double var_T_type_Ca_channel_d_T_gate__E0_d_T = 23.300000000000001 + var_chaste_interface__membrane__V; // millivolt + const double var_T_type_Ca_channel_d_T_gate__alpha_d_T = 674.173 * exp(0.033333333333333333 * var_T_type_Ca_channel_d_T_gate__E0_d_T); // per_second + const double var_T_type_Ca_channel_d_T_gate__beta_d_T = 674.173 * exp(-0.033333333333333333 * var_T_type_Ca_channel_d_T_gate__E0_d_T); // per_second + const double var_T_type_Ca_channel_d_T_gate__d_T_infinity = 1 / (1 + exp(0.049180327868852458 - 0.16393442622950821 * var_T_type_Ca_channel_d_T_gate__E0_d_T)); // dimensionless + const double var_T_type_Ca_channel_d_T_gate__tau_d_T = 1 / (var_T_type_Ca_channel_d_T_gate__alpha_d_T + var_T_type_Ca_channel_d_T_gate__beta_d_T); // second + const double var_T_type_Ca_channel_d_T_gate__d_T_orig_deriv = (-var_chaste_interface__T_type_Ca_channel_d_T_gate__d_T + var_T_type_Ca_channel_d_T_gate__d_T_infinity) / var_T_type_Ca_channel_d_T_gate__tau_d_T; // 1 / second + const double d_dt_chaste_interface_var_T_type_Ca_channel_d_T_gate__d_T = 0.001 * var_T_type_Ca_channel_d_T_gate__d_T_orig_deriv; // 1 / millisecond + const double var_T_type_Ca_channel_f_T_gate__E0_f_T = 75 + var_chaste_interface__membrane__V; // millivolt + const double var_T_type_Ca_channel_f_T_gate__alpha_f_T = 9.6370000000000005 * exp(-0.012004801920768308 * var_T_type_Ca_channel_f_T_gate__E0_f_T); // per_second + const double var_T_type_Ca_channel_f_T_gate__beta_f_T = 9.6370000000000005 * exp(0.065019505851755519 * var_T_type_Ca_channel_f_T_gate__E0_f_T); // per_second + const double var_T_type_Ca_channel_f_T_gate__f_T_infinity = var_T_type_Ca_channel_f_T_gate__alpha_f_T / (var_T_type_Ca_channel_f_T_gate__alpha_f_T + var_T_type_Ca_channel_f_T_gate__beta_f_T); // dimensionless + const double var_T_type_Ca_channel_f_T_gate__tau_f_T = 1 / (var_T_type_Ca_channel_f_T_gate__alpha_f_T + var_T_type_Ca_channel_f_T_gate__beta_f_T); // second + const double var_T_type_Ca_channel_f_T_gate__f_T_orig_deriv = (-var_chaste_interface__T_type_Ca_channel_f_T_gate__f_T + var_T_type_Ca_channel_f_T_gate__f_T_infinity) / var_T_type_Ca_channel_f_T_gate__tau_f_T; // 1 / second + const double d_dt_chaste_interface_var_T_type_Ca_channel_f_T_gate__f_T = 0.001 * var_T_type_Ca_channel_f_T_gate__f_T_orig_deriv; // 1 / millisecond + const double var_background_currents__i_B_Ca = (((var_environment__CT == 1) && (var_environment__PM == 0)) ? (2.0000000000000002e-5 * var_chaste_interface__membrane__V - 2.0000000000000002e-5 * var_background_currents__E_Ca) : (((var_environment__PM == 1) && (var_environment__CT == 0)) ? (3.0000000000000001e-5 * var_chaste_interface__membrane__V - 3.0000000000000001e-5 * var_background_currents__E_Ca) : ((-var_background_currents__E_Ca + var_chaste_interface__membrane__V) * var_background_currents__g_B_Ca))); // picoA + const double var_delayed_rectifier_K_current__i_Kr = (-var_Ca_independent_transient_outward_K_current__E_K + var_chaste_interface__membrane__V) * NV_Ith_S(mParameters, 7) * var_chaste_interface__delayed_rectifier_K_current_pa_gate__p_a * var_chaste_interface__delayed_rectifier_K_current_pi_gate__p_i; // picoA + const double var_delayed_rectifier_K_current__i_Ks = (-var_Ca_independent_transient_outward_K_current__E_K + var_chaste_interface__membrane__V) * NV_Ith_S(mParameters, 8) * var_chaste_interface__delayed_rectifier_K_current_z_gate__z; // picoA + const double var_delayed_rectifier_K_current_pa_gate__alpha_p_a = 9 * exp(0.03941508020968823 * var_chaste_interface__membrane__V); // per_second + const double var_delayed_rectifier_K_current_pa_gate__beta_p_a = 1.3 * exp(-0.076769537847382163 * var_chaste_interface__membrane__V); // per_second + const double var_delayed_rectifier_K_current_pa_gate__p_a_infinity = 1 / (1 + exp(-0.68918918918918914 - 0.13513513513513511 * var_chaste_interface__membrane__V)); // dimensionless + const double var_delayed_rectifier_K_current_pa_gate__tau_p_a = 1 / (var_delayed_rectifier_K_current_pa_gate__alpha_p_a + var_delayed_rectifier_K_current_pa_gate__beta_p_a); // second + const double var_delayed_rectifier_K_current_pa_gate__p_a_orig_deriv = (-var_chaste_interface__delayed_rectifier_K_current_pa_gate__p_a + var_delayed_rectifier_K_current_pa_gate__p_a_infinity) / var_delayed_rectifier_K_current_pa_gate__tau_p_a; // 1 / second + const double d_dt_chaste_interface_var_delayed_rectifier_K_current_pa_gate__p_a = 0.001 * var_delayed_rectifier_K_current_pa_gate__p_a_orig_deriv; // 1 / millisecond + const double var_delayed_rectifier_K_current_pi_gate__alpha_p_i = 100 * exp(-0.018299935950224173 * var_chaste_interface__membrane__V); // per_second + const double var_delayed_rectifier_K_current_pi_gate__beta_p_i = 656 * exp(0.009420009985210585 * var_chaste_interface__membrane__V); // per_second + const double var_delayed_rectifier_K_current_pi_gate__p_i_infinity = 1 / (1 + exp(2.539728728905752 + 0.05358970648917756 * var_chaste_interface__membrane__V)); // dimensionless + const double var_delayed_rectifier_K_current_pi_gate__tau_p_i = 1 / (var_delayed_rectifier_K_current_pi_gate__alpha_p_i + var_delayed_rectifier_K_current_pi_gate__beta_p_i); // second + const double var_delayed_rectifier_K_current_pi_gate__p_i_orig_deriv = (-var_chaste_interface__delayed_rectifier_K_current_pi_gate__p_i + var_delayed_rectifier_K_current_pi_gate__p_i_infinity) / var_delayed_rectifier_K_current_pi_gate__tau_p_i; // 1 / second + const double d_dt_chaste_interface_var_delayed_rectifier_K_current_pi_gate__p_i = 0.001 * var_delayed_rectifier_K_current_pi_gate__p_i_orig_deriv; // 1 / millisecond + const double var_delayed_rectifier_K_current_z_gate__alpha_z = 1.6599999999999999 * exp(0.014398433450440593 * var_chaste_interface__membrane__V); // per_second + const double var_delayed_rectifier_K_current_z_gate__beta_z = 0.29999999999999999 * exp(-0.045816915605241454 * var_chaste_interface__membrane__V); // per_second + const double var_delayed_rectifier_K_current_z_gate__tau_z = 0.059999999999999998 + 1 / (var_delayed_rectifier_K_current_z_gate__alpha_z + var_delayed_rectifier_K_current_z_gate__beta_z); // second + const double var_delayed_rectifier_K_current_z_gate__z_infinity = 1 / (1 + exp(0.065217391304347824 - 0.072463768115942032 * var_chaste_interface__membrane__V)); // dimensionless + const double var_delayed_rectifier_K_current_z_gate__z_orig_deriv = (-var_chaste_interface__delayed_rectifier_K_current_z_gate__z + var_delayed_rectifier_K_current_z_gate__z_infinity) / var_delayed_rectifier_K_current_z_gate__tau_z; // 1 / second + const double d_dt_chaste_interface_var_delayed_rectifier_K_current_z_gate__z = 0.001 * var_delayed_rectifier_K_current_z_gate__z_orig_deriv; // 1 / millisecond + const double var_inward_rectifier__i_K1 = (((var_environment__CT == 1) && (var_environment__PM == 0)) ? (2 * pow(var_chaste_interface__cleft_space_ion_concentrations__K_c, 3) * (-var_Ca_independent_transient_outward_K_current__E_K + var_chaste_interface__membrane__V) * NV_Ith_S(mParameters, 6) / ((1 + exp((-var_Ca_independent_transient_outward_K_current__E_K - var_inward_rectifier__shiftK1 + var_chaste_interface__membrane__V) * var_inward_rectifier__steepK1 * var_membrane__F / (var_membrane__R * var_membrane__T))) * pow((var_chaste_interface__cleft_space_ion_concentrations__K_c + var_inward_rectifier__KmK1), 3))) : (((var_environment__PM == 1) && (var_environment__CT == 0)) ? (2.5 * pow(var_chaste_interface__cleft_space_ion_concentrations__K_c, 3) * (-var_Ca_independent_transient_outward_K_current__E_K + var_chaste_interface__membrane__V) * NV_Ith_S(mParameters, 6) / ((1 + exp((-var_Ca_independent_transient_outward_K_current__E_K - var_inward_rectifier__shiftK1 + var_chaste_interface__membrane__V) * var_inward_rectifier__steepK1 * var_membrane__F / (var_membrane__R * var_membrane__T))) * pow((var_chaste_interface__cleft_space_ion_concentrations__K_c + var_inward_rectifier__KmK1), 3))) : (pow(var_chaste_interface__cleft_space_ion_concentrations__K_c, 3) * (-var_Ca_independent_transient_outward_K_current__E_K + var_chaste_interface__membrane__V) * NV_Ith_S(mParameters, 6) / ((1 + exp((-var_Ca_independent_transient_outward_K_current__E_K - var_inward_rectifier__shiftK1 + var_chaste_interface__membrane__V) * var_inward_rectifier__steepK1 * var_membrane__F / (var_membrane__R * var_membrane__T))) * pow((var_chaste_interface__cleft_space_ion_concentrations__K_c + var_inward_rectifier__KmK1), 3))))); // picoA + const double var_sarcolemmal_calcium_pump_current__i_CaP_max = 0.0095090000000000001; // picoA + const double var_sarcolemmal_calcium_pump_current__k_CaP = 0.00020000000000000001; // millimolar + const double var_sarcolemmal_calcium_pump_current__i_CaP = var_chaste_interface__intracellular_ion_concentrations__Ca_i * var_sarcolemmal_calcium_pump_current__i_CaP_max / (var_chaste_interface__intracellular_ion_concentrations__Ca_i + var_sarcolemmal_calcium_pump_current__k_CaP); // picoA + const double var_intracellular_ion_concentrations__Ca_i_orig_deriv = -0.044999999999999998 * var_intracellular_Ca_buffering__dOCdt - 0.080000000000000002 * var_intracellular_Ca_buffering__dOTCdt - 0.16 * var_intracellular_Ca_buffering__dOTMgCdt + 0.5 * (-var_Ca_handling_by_the_SR__i_up - var_L_type_Ca_channel__i_Ca_L - var_T_type_Ca_channel__i_Ca_T - var_background_currents__i_B_Ca - var_sarcolemmal_calcium_pump_current__i_CaP + 2 * var_Na_Ca_ion_exchanger_current__i_NaCa + var_Ca_handling_by_the_SR__i_rel) / (var_intracellular_ion_concentrations__Vol_Ca * var_membrane__F); // millimolar / second + const double d_dt_chaste_interface_var_intracellular_ion_concentrations__Ca_i = 0.001 * var_intracellular_ion_concentrations__Ca_i_orig_deriv; // millimolar / millisecond + const double var_sodium_current__E_Na = var_membrane__R * var_membrane__T * log(NV_Ith_S(mParameters, 2) / var_chaste_interface__intracellular_ion_concentrations__Na_i) / var_membrane__F; // millivolt + const double var_background_currents__i_B_Na = (((var_environment__CT == 1) && (var_environment__PM == 0)) ? (2.0000000000000002e-5 * var_chaste_interface__membrane__V - 2.0000000000000002e-5 * var_sodium_current__E_Na) : (((var_environment__PM == 1) && (var_environment__CT == 0)) ? (3.0000000000000001e-5 * var_chaste_interface__membrane__V - 3.0000000000000001e-5 * var_sodium_current__E_Na) : ((-var_sodium_current__E_Na + var_chaste_interface__membrane__V) * var_background_currents__g_B_Na))); // picoA + const double var_sodium_current_h1_gate__alpha_h = 44.899999999999999 * exp(-12.010771992818672 - 0.17953321364452424 * var_chaste_interface__membrane__V); // per_second + const double var_sodium_current_h1_gate__beta_h = 1491 / (1 + 323.30000000000001 * exp(-7.333333333333333 - 0.077519379844961239 * var_chaste_interface__membrane__V)); // per_second + const double var_sodium_current_h1_gate__h_infinity = var_sodium_current_h1_gate__alpha_h / (var_sodium_current_h1_gate__alpha_h + var_sodium_current_h1_gate__beta_h); // dimensionless + const double var_sodium_current_h1_gate__tau_h1 = 0.00014999999999999999 + 0.029999999999999999 / (1 + exp(6.666666666666667 + 0.16666666666666666 * var_chaste_interface__membrane__V)); // second + const double var_sodium_current_h1_gate__h1_orig_deriv = (-var_chaste_interface__sodium_current_h1_gate__h1 + var_sodium_current_h1_gate__h_infinity) / var_sodium_current_h1_gate__tau_h1; // 1 / second + const double d_dt_chaste_interface_var_sodium_current_h1_gate__h1 = 0.001 * var_sodium_current_h1_gate__h1_orig_deriv; // 1 / millisecond + const double var_sodium_current_h2_gate__tau_h2 = 0.00044999999999999999 + 0.12 / (1 + exp(30 + 0.5 * var_chaste_interface__membrane__V)); // second + const double var_sodium_current_h2_gate__h2_orig_deriv = (-var_chaste_interface__sodium_current_h2_gate__h2 + var_sodium_current_h1_gate__h_infinity) / var_sodium_current_h2_gate__tau_h2; // 1 / second + const double d_dt_chaste_interface_var_sodium_current_h2_gate__h2 = 0.001 * var_sodium_current_h2_gate__h2_orig_deriv; // 1 / millisecond + const double var_sodium_current_m_gate__E0_m = 44.399999999999999 + var_chaste_interface__membrane__V; // millivolt + const double var_sodium_current_m_gate__alpha_m = (((var_chaste_interface__membrane__V >= -44.400001267299999) && (var_chaste_interface__membrane__V <= -44.399998732699999)) ? (0.00058295799999830145 / (-1 + exp(9.9999999999708629e-8)) + 394539.57232025318 * (44.400001267299999 + var_chaste_interface__membrane__V) * (-0.00058295799999830145 / (-1 + exp(9.9999999999708629e-8)) - 0.00058295799999830145 / (-1 + exp(-9.9999999999708629e-8)))) : (-460 * (44.399999999999999 + var_chaste_interface__membrane__V) / (-1 + exp(-3.5035114021936398 - 0.078907914463820727 * var_chaste_interface__membrane__V)))); // per_second + const double var_sodium_current_m_gate__beta_m = 18400 * exp(-0.078907914463820727 * var_sodium_current_m_gate__E0_m); // per_second + const double var_sodium_current__i_Na = (((var_chaste_interface__membrane__V >= -2.6539450910485349e-6) && (var_chaste_interface__membrane__V <= 2.6539450910485349e-6)) ? (188398.77346612973 * (2.6539450910485349e-6 + var_chaste_interface__membrane__V) * (0.0096486999999999996 * pow(var_chaste_interface__sodium_current_m_gate__m, 3) * (-1 + exp(9.9999999999999995e-8 - log(NV_Ith_S(mParameters, 2) / var_chaste_interface__intracellular_ion_concentrations__Na_i))) * (0.36499999999999999 * var_chaste_interface__sodium_current_h2_gate__h2 + 0.63500000000000001 * var_chaste_interface__sodium_current_h1_gate__h1) * NV_Ith_S(mParameters, 2) * NV_Ith_S(mParameters, 5) / (-1 + exp(9.9999999999999995e-8)) + 0.0096486999999999996 * pow(var_chaste_interface__sodium_current_m_gate__m, 3) * (-1 + exp(-9.9999999999999995e-8 - log(NV_Ith_S(mParameters, 2) / var_chaste_interface__intracellular_ion_concentrations__Na_i))) * (0.36499999999999999 * var_chaste_interface__sodium_current_h2_gate__h2 + 0.63500000000000001 * var_chaste_interface__sodium_current_h1_gate__h1) * NV_Ith_S(mParameters, 2) * NV_Ith_S(mParameters, 5) / (-1 + exp(-9.9999999999999995e-8))) - 0.0096486999999999996 * pow(var_chaste_interface__sodium_current_m_gate__m, 3) * (-1 + exp(-9.9999999999999995e-8 - log(NV_Ith_S(mParameters, 2) / var_chaste_interface__intracellular_ion_concentrations__Na_i))) * (0.36499999999999999 * var_chaste_interface__sodium_current_h2_gate__h2 + 0.63500000000000001 * var_chaste_interface__sodium_current_h1_gate__h1) * NV_Ith_S(mParameters, 2) * NV_Ith_S(mParameters, 5) / (-1 + exp(-9.9999999999999995e-8))) : (3635.606491085292 * pow(var_chaste_interface__sodium_current_m_gate__m, 3) * (-1 + exp(0.037679754693225945 * var_chaste_interface__membrane__V - log(NV_Ith_S(mParameters, 2) / var_chaste_interface__intracellular_ion_concentrations__Na_i))) * (0.36499999999999999 * var_chaste_interface__sodium_current_h2_gate__h2 + 0.63500000000000001 * var_chaste_interface__sodium_current_h1_gate__h1) * NV_Ith_S(mParameters, 2) * var_chaste_interface__membrane__V * NV_Ith_S(mParameters, 5) / (-1 + exp(0.037679754693225945 * var_chaste_interface__membrane__V)))); // picoA + const double var_sodium_current_m_gate__m_orig_deriv = (1 - var_chaste_interface__sodium_current_m_gate__m) * var_sodium_current_m_gate__alpha_m - var_sodium_current_m_gate__beta_m * var_chaste_interface__sodium_current_m_gate__m; // 1 / second + const double d_dt_chaste_interface_var_sodium_current_m_gate__m = 0.001 * var_sodium_current_m_gate__m_orig_deriv; // 1 / millisecond + const double var_sodium_potassium_pump__i_NaK_max = 0.064409999999999995; // picoA + const double var_sodium_potassium_pump__k_NaK_K = 1; // millimolar + const double var_sodium_potassium_pump__k_NaK_Na = 11; // millimolar + const double var_sodium_potassium_pump__i_p = 1.6000000000000001 * pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, 1.5) * var_chaste_interface__cleft_space_ion_concentrations__K_c * var_sodium_potassium_pump__i_NaK_max / ((1.5 + exp(-1.5 - 0.025000000000000001 * var_chaste_interface__membrane__V)) * (pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, 1.5) + pow(var_sodium_potassium_pump__k_NaK_Na, 1.5)) * (var_chaste_interface__cleft_space_ion_concentrations__K_c + var_sodium_potassium_pump__k_NaK_K)); // picoA + const double var_cleft_space_ion_concentrations__K_c_orig_deriv = (-2 * var_sodium_potassium_pump__i_p + var_Ca_independent_transient_outward_K_current__i_sus + var_Ca_independent_transient_outward_K_current__i_to + var_delayed_rectifier_K_current__i_Kr + var_delayed_rectifier_K_current__i_Ks + var_inward_rectifier__i_K1) / (var_cleft_space_ion_concentrations__Vol_c * var_membrane__F); // millimolar / second + const double d_dt_chaste_interface_var_cleft_space_ion_concentrations__K_c = 0.001 * var_cleft_space_ion_concentrations__K_c_orig_deriv; // millimolar / millisecond + const double var_intracellular_ion_concentrations__K_i_orig_deriv = (-var_Ca_independent_transient_outward_K_current__i_sus - var_Ca_independent_transient_outward_K_current__i_to - var_delayed_rectifier_K_current__i_Kr - var_delayed_rectifier_K_current__i_Ks - var_inward_rectifier__i_K1 + 2 * var_sodium_potassium_pump__i_p) / (var_intracellular_ion_concentrations__Vol_i * var_membrane__F); // millimolar / second + const double d_dt_chaste_interface_var_intracellular_ion_concentrations__K_i = 0.001 * var_intracellular_ion_concentrations__K_i_orig_deriv; // millimolar / millisecond + const double var_intracellular_ion_concentrations__Na_i_orig_deriv = (-var_background_currents__i_B_Na - var_sodium_current__i_Na - 3 * var_Na_Ca_ion_exchanger_current__i_NaCa - 3 * var_sodium_potassium_pump__i_p) / (var_intracellular_ion_concentrations__Vol_i * var_membrane__F); // millimolar / second + const double d_dt_chaste_interface_var_intracellular_ion_concentrations__Na_i = 0.001 * var_intracellular_ion_concentrations__Na_i_orig_deriv; // millimolar / millisecond + + if (mSetVoltageDerivativeToZero) + { + d_dt_chaste_interface_var_membrane__V = 0.0; + } + else + { + const double var_membrane__Cm_converted = 0.001 * NV_Ith_S(mParameters, 4); // uF + const double var_membrane__i_Stim_converted = GetIntracellularAreaStimulus(var_chaste_interface__environment__time_converted); // uA_per_cm2 + const double var_membrane__i_Stim = 1000000 * var_membrane__Cm_converted * var_membrane__i_Stim_converted / HeartConfig::Instance()->GetCapacitance(); // picoA + const double var_membrane__V_orig_deriv = -(var_Ca_independent_transient_outward_K_current__i_sus + var_Ca_independent_transient_outward_K_current__i_to + var_L_type_Ca_channel__i_Ca_L + var_Na_Ca_ion_exchanger_current__i_NaCa + var_T_type_Ca_channel__i_Ca_T + var_background_currents__i_B_Ca + var_background_currents__i_B_Na + var_delayed_rectifier_K_current__i_Kr + var_delayed_rectifier_K_current__i_Ks + var_inward_rectifier__i_K1 + var_membrane__i_Stim + var_sarcolemmal_calcium_pump_current__i_CaP + var_sodium_current__i_Na + var_sodium_potassium_pump__i_p) / NV_Ith_S(mParameters, 4); // millivolt / second + d_dt_chaste_interface_var_membrane__V = 0.001 * var_membrane__V_orig_deriv; // millivolt / millisecond + } + + NV_Ith_S(rDY,0) = d_dt_chaste_interface_var_membrane__V; + NV_Ith_S(rDY,1) = d_dt_chaste_interface_var_intracellular_ion_concentrations__Ca_i; + NV_Ith_S(rDY,2) = d_dt_chaste_interface_var_sodium_current_m_gate__m; + NV_Ith_S(rDY,3) = d_dt_chaste_interface_var_sodium_current_h1_gate__h1; + NV_Ith_S(rDY,4) = d_dt_chaste_interface_var_sodium_current_h2_gate__h2; + NV_Ith_S(rDY,5) = d_dt_chaste_interface_var_L_type_Ca_channel_d_L_gate__d_L; + NV_Ith_S(rDY,6) = d_dt_chaste_interface_var_L_type_Ca_channel_f_L_gate__f_L; + NV_Ith_S(rDY,7) = d_dt_chaste_interface_var_T_type_Ca_channel_d_T_gate__d_T; + NV_Ith_S(rDY,8) = d_dt_chaste_interface_var_T_type_Ca_channel_f_T_gate__f_T; + NV_Ith_S(rDY,9) = d_dt_chaste_interface_var_Ca_independent_transient_outward_K_current_r_gate__r; + NV_Ith_S(rDY,10) = d_dt_chaste_interface_var_Ca_independent_transient_outward_K_current_s1_gate__s1; + NV_Ith_S(rDY,11) = d_dt_chaste_interface_var_Ca_independent_transient_outward_K_current_s2_gate__s2; + NV_Ith_S(rDY,12) = d_dt_chaste_interface_var_Ca_independent_transient_outward_K_current_s3_gate__s3; + NV_Ith_S(rDY,13) = d_dt_chaste_interface_var_delayed_rectifier_K_current_z_gate__z; + NV_Ith_S(rDY,14) = d_dt_chaste_interface_var_delayed_rectifier_K_current_pa_gate__p_a; + NV_Ith_S(rDY,15) = d_dt_chaste_interface_var_delayed_rectifier_K_current_pi_gate__p_i; + NV_Ith_S(rDY,16) = d_dt_chaste_interface_var_intracellular_ion_concentrations__Na_i; + NV_Ith_S(rDY,17) = d_dt_chaste_interface_var_intracellular_ion_concentrations__K_i; + NV_Ith_S(rDY,18) = d_dt_chaste_interface_var_intracellular_Ca_buffering__O_C; + NV_Ith_S(rDY,19) = d_dt_chaste_interface_var_intracellular_Ca_buffering__O_TC; + NV_Ith_S(rDY,20) = d_dt_chaste_interface_var_intracellular_Ca_buffering__O_TMgC; + NV_Ith_S(rDY,21) = d_dt_chaste_interface_var_intracellular_Ca_buffering__O_TMgMg; + NV_Ith_S(rDY,22) = d_dt_chaste_interface_var_cleft_space_ion_concentrations__K_c; + NV_Ith_S(rDY,23) = d_dt_chaste_interface_var_Ca_handling_by_the_SR__Ca_rel; + NV_Ith_S(rDY,24) = d_dt_chaste_interface_var_Ca_handling_by_the_SR__Ca_up; + NV_Ith_S(rDY,25) = d_dt_chaste_interface_var_Ca_handling_by_the_SR__O_Calse; + NV_Ith_S(rDY,26) = d_dt_chaste_interface_var_Ca_handling_by_the_SR__F1; + NV_Ith_S(rDY,27) = d_dt_chaste_interface_var_Ca_handling_by_the_SR__F2; + NV_Ith_S(rDY,28) = d_dt_chaste_interface_var_Ca_handling_by_the_SR__F3; + } + + void Cellaslanidi_atrial_model_2009FromCellMLCvode::EvaluateAnalyticJacobian(double var_chaste_interface__environment__time_converted, N_Vector rY, N_Vector rDY, CHASTE_CVODE_DENSE_MATRIX rJacobian, N_Vector rTmp1, N_Vector rTmp2, N_Vector rTmp3) + { + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : NV_Ith_S(rY, 0)); + // Units: millivolt; Initial value: -80.0 + double var_chaste_interface__intracellular_ion_concentrations__Ca_i = NV_Ith_S(rY, 1); + // Units: millimolar; Initial value: 7.1e-05 + double var_chaste_interface__sodium_current_m_gate__m = NV_Ith_S(rY, 2); + // Units: dimensionless; Initial value: 0.01309 + double var_chaste_interface__sodium_current_h1_gate__h1 = NV_Ith_S(rY, 3); + // Units: dimensionless; Initial value: 0.706 + double var_chaste_interface__sodium_current_h2_gate__h2 = NV_Ith_S(rY, 4); + // Units: dimensionless; Initial value: 0.61493 + double var_chaste_interface__L_type_Ca_channel_d_L_gate__d_L = NV_Ith_S(rY, 5); + // Units: dimensionless; Initial value: 3e-05 + double var_chaste_interface__L_type_Ca_channel_f_L_gate__f_L = NV_Ith_S(rY, 6); + // Units: dimensionless; Initial value: 0.99981 + double var_chaste_interface__T_type_Ca_channel_d_T_gate__d_T = NV_Ith_S(rY, 7); + // Units: dimensionless; Initial value: 0.00046 + double var_chaste_interface__T_type_Ca_channel_f_T_gate__f_T = NV_Ith_S(rY, 8); + // Units: dimensionless; Initial value: 0.30752 + double var_chaste_interface__Ca_independent_transient_outward_K_current_r_gate__r = NV_Ith_S(rY, 9); + // Units: dimensionless; Initial value: 6e-05 + double var_chaste_interface__Ca_independent_transient_outward_K_current_s1_gate__s1 = NV_Ith_S(rY, 10); + // Units: dimensionless; Initial value: 0.5753 + double var_chaste_interface__Ca_independent_transient_outward_K_current_s2_gate__s2 = NV_Ith_S(rY, 11); + // Units: dimensionless; Initial value: 0.39871 + double var_chaste_interface__Ca_independent_transient_outward_K_current_s3_gate__s3 = NV_Ith_S(rY, 12); + // Units: dimensionless; Initial value: 0.57363 + double var_chaste_interface__delayed_rectifier_K_current_z_gate__z = NV_Ith_S(rY, 13); + // Units: dimensionless; Initial value: 0.02032 + double var_chaste_interface__delayed_rectifier_K_current_pa_gate__p_a = NV_Ith_S(rY, 14); + // Units: dimensionless; Initial value: 0.00016 + double var_chaste_interface__delayed_rectifier_K_current_pi_gate__p_i = NV_Ith_S(rY, 15); + // Units: dimensionless; Initial value: 0.76898 + double var_chaste_interface__intracellular_ion_concentrations__Na_i = NV_Ith_S(rY, 16); + // Units: millimolar; Initial value: 8.4 + double var_chaste_interface__intracellular_ion_concentrations__K_i = NV_Ith_S(rY, 17); + // Units: millimolar; Initial value: 100.0 + double var_chaste_interface__intracellular_Ca_buffering__O_C = NV_Ith_S(rY, 18); + // Units: dimensionless; Initial value: 0.029108 + double var_chaste_interface__intracellular_Ca_buffering__O_TC = NV_Ith_S(rY, 19); + // Units: dimensionless; Initial value: 0.014071 + double var_chaste_interface__intracellular_Ca_buffering__O_TMgC = NV_Ith_S(rY, 20); + // Units: dimensionless; Initial value: 0.214036 + double var_chaste_interface__intracellular_Ca_buffering__O_TMgMg = NV_Ith_S(rY, 21); + // Units: dimensionless; Initial value: 0.693565 + double var_chaste_interface__cleft_space_ion_concentrations__K_c = NV_Ith_S(rY, 22); + // Units: millimolar; Initial value: 5.0 + double var_chaste_interface__Ca_handling_by_the_SR__Ca_rel = NV_Ith_S(rY, 23); + // Units: millimolar; Initial value: 0.726776 + double var_chaste_interface__Ca_handling_by_the_SR__Ca_up = NV_Ith_S(rY, 24); + // Units: millimolar; Initial value: 0.730866 + double var_chaste_interface__Ca_handling_by_the_SR__O_Calse = NV_Ith_S(rY, 25); + // Units: dimensionless; Initial value: 0.465921 + double var_chaste_interface__Ca_handling_by_the_SR__F1 = NV_Ith_S(rY, 26); + // Units: dimensionless; Initial value: 0.288039 + double var_chaste_interface__Ca_handling_by_the_SR__F2 = NV_Ith_S(rY, 27); + // Units: dimensionless; Initial value: 0.002262 + const double var_x0 = 0.083333333333333329 * var_chaste_interface__membrane__V; + const double var_x1 = exp(1.9166666666666667 - var_x0); + const double var_x2 = 1 + var_x1; + const double var_x3 = 1 / var_x2; + const double var_x4 = var_chaste_interface__L_type_Ca_channel_d_L_gate__d_L * var_chaste_interface__L_type_Ca_channel_f_L_gate__f_L; + const double var_x5 = NV_Ith_S(mParameters, 8) * var_chaste_interface__delayed_rectifier_K_current_z_gate__z; + const double var_x6 = var_chaste_interface__T_type_Ca_channel_d_T_gate__d_T * var_chaste_interface__T_type_Ca_channel_f_T_gate__f_T; + const double var_x7 = exp(0.016955889611951675 * var_chaste_interface__membrane__V); + const double var_x8 = pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, 3) * NV_Ith_S(mParameters, 1); + const double var_x9 = var_x7 * var_x8; + const double var_x10 = exp(-0.02072386508127427 * var_chaste_interface__membrane__V); + const double var_x11 = pow(NV_Ith_S(mParameters, 2), 3); + const double var_x12 = var_x11 * var_chaste_interface__intracellular_ion_concentrations__Ca_i; + const double var_x13 = var_x10 * var_x12; + const double var_x14 = 1 + 0.00029999999999999997 * var_x12 + 0.00029999999999999997 * var_x8; + const double var_x15 = 1 / var_x14; + const double var_x16 = var_x15 * NV_Ith_S(mParameters, 9); + const double var_x17 = var_x16 * (0.016955889611951675 * var_x9 + 0.02072386508127427 * var_x13); + const double var_x18 = pow(var_chaste_interface__Ca_independent_transient_outward_K_current_s3_gate__s3, 6); + const double var_x19 = 0.00400016 + 0.0060002399999999996 * var_x18; + const double var_x20 = 0.58999999999999997 * pow(var_chaste_interface__Ca_independent_transient_outward_K_current_s1_gate__s1, 3) + 0.40999999999999998 * pow(var_chaste_interface__Ca_independent_transient_outward_K_current_s2_gate__s2, 3); + const double var_x21 = var_x20 * var_chaste_interface__Ca_independent_transient_outward_K_current_r_gate__r; + const double var_x22 = var_x19 * var_x21; + const double var_x23 = NV_Ith_S(mParameters, 7) * var_chaste_interface__delayed_rectifier_K_current_pi_gate__p_i; + const double var_x24 = var_x23 * var_chaste_interface__delayed_rectifier_K_current_pa_gate__p_a; + const double var_x25 = pow(var_chaste_interface__cleft_space_ion_concentrations__K_c, 3); + const double var_x26 = 1 / var_chaste_interface__intracellular_ion_concentrations__K_i; + const double var_x27 = log(var_x26 * var_chaste_interface__cleft_space_ion_concentrations__K_c); + const double var_x28 = exp(0.18895643383558949 + 0.052487898287663745 * var_chaste_interface__membrane__V - 1.393 * var_x27); + const double var_x29 = 1 + var_x28; + const double var_x30 = 1 / var_x29; + const double var_x31 = 0.58999999999999997 + var_chaste_interface__cleft_space_ion_concentrations__K_c; + const double var_x32 = pow(var_x31, (-3)); + const double var_x33 = var_x32 * NV_Ith_S(mParameters, 6); + const double var_x34 = var_x30 * var_x33; + const double var_x35 = var_x25 * var_x34; + const double var_x36 = (-90 + 1.8 * var_chaste_interface__membrane__V) * NV_Ith_S(mParameters, 3); + const double var_x37 = 0.083333333333333329 * var_x1 / pow(var_x2, 2); + const double var_x38 = exp(-1.5 - 0.025000000000000001 * var_chaste_interface__membrane__V); + const double var_x39 = 1 + var_chaste_interface__cleft_space_ion_concentrations__K_c; + const double var_x40 = 1 / var_x39; + const double var_x41 = pow((1 + 0.66666666666666663 * var_x38), (-2)); + const double var_x42 = pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, 1.5); + const double var_x43 = 1 / (36.4828726939094 + var_x42); + const double var_x44 = var_x42 * var_x43 * var_chaste_interface__cleft_space_ion_concentrations__K_c; + const double var_x45 = var_x38 * var_x40 * var_x41 * var_x44; + const double var_x46 = -26.53945091048535 * var_x27 + var_chaste_interface__membrane__V; + const double var_x47 = pow(var_x29, (-2)); + const double var_x48 = var_x28 * var_x33 * var_x46 * var_x47; + const double var_x49 = var_x25 * var_x48; + const double var_x50 = 1 / (-1 + exp(9.9999999999999995e-8)); + const double var_x51 = 1 / var_chaste_interface__intracellular_ion_concentrations__Na_i; + const double var_x52 = var_x51 * NV_Ith_S(mParameters, 2); + const double var_x53 = log(var_x52); + const double var_x54 = exp(9.9999999999999995e-8 - var_x53); + const double var_x55 = var_x50 * (-1 + var_x54); + const double var_x56 = 0.36499999999999999 * var_chaste_interface__sodium_current_h2_gate__h2 + 0.63500000000000001 * var_chaste_interface__sodium_current_h1_gate__h1; + const double var_x57 = pow(var_chaste_interface__sodium_current_m_gate__m, 3); + const double var_x58 = NV_Ith_S(mParameters, 2) * NV_Ith_S(mParameters, 5); + const double var_x59 = var_x57 * var_x58; + const double var_x60 = var_x56 * var_x59; + const double var_x61 = 1817.803245542646 * var_x60; + const double var_x62 = 1 / (-1 + exp(-9.9999999999999995e-8)); + const double var_x63 = exp(-9.9999999999999995e-8 - var_x53); + const double var_x64 = var_x62 * (-1 + var_x63); + const double var_x65 = (var_chaste_interface__membrane__V >= -2.6539450910485349e-6) && (var_chaste_interface__membrane__V <= 2.6539450910485349e-6); + const double var_x66 = 0.037679754693225945 * var_chaste_interface__membrane__V; + const double var_x67 = exp(var_x66); + const double var_x68 = -1 + var_x67; + const double var_x69 = 1 / var_x68; + const double var_x70 = exp(var_x66 - var_x53); + const double var_x71 = -1 + var_x70; + const double var_x72 = var_x69 * var_x71; + const double var_x73 = 136.98876074519373 * var_x60 * var_chaste_interface__membrane__V; + const double var_x74 = var_x69 * var_x70; + const double var_x75 = ((var_x65) ? (var_x55 * var_x61 + var_x61 * var_x64) : (var_x73 * var_x74 + 3635.606491085292 * var_x60 * var_x72 - var_x67 * var_x71 * var_x73 / pow(var_x68, 2))); + const double var_x76 = 1 / NV_Ith_S(mParameters, 4); + const double var_x77 = 0.001 * var_x76; + const double var_x78 = 0.00020000000000000001 + var_chaste_interface__intracellular_ion_concentrations__Ca_i; + const double var_x79 = 1 / var_x78; + const double var_x80 = 1 / var_chaste_interface__intracellular_ion_concentrations__Ca_i; + const double var_x81 = pow(var_x78, (-2)); + const double var_x82 = var_x10 * var_x11 * var_x16; + const double var_x83 = pow(var_x14, (-2)); + const double var_x84 = var_x9 - var_x13; + const double var_x85 = var_x83 * var_x84 * NV_Ith_S(mParameters, 9); + const double var_x86 = var_x11 * var_x85; + const double var_x87 = 0.5 + 188398.77346612973 * var_chaste_interface__membrane__V; + const double var_x88 = var_x56 * var_x58 * pow(var_chaste_interface__sodium_current_m_gate__m, 2); + const double var_x89 = 0.028946099999999999 * var_x88; + const double var_x90 = var_x64 * var_x89; + const double var_x91 = var_x72 * var_chaste_interface__membrane__V; + const double var_x92 = ((var_x65) ? (-var_x90 + var_x87 * (var_x90 + var_x55 * var_x89)) : (10906.819473255875 * var_x88 * var_x91)); + const double var_x93 = 0.0061269244999999995 * var_x59; + const double var_x94 = var_x64 * var_x93; + const double var_x95 = var_x59 * var_x91; + const double var_x96 = ((var_x65) ? (-var_x94 + var_x87 * (var_x94 + var_x55 * var_x93)) : (2308.6101218391605 * var_x95)); + const double var_x97 = 0.0035217754999999997 * var_x59; + const double var_x98 = var_x64 * var_x97; + const double var_x99 = ((var_x65) ? (-var_x98 + var_x87 * (var_x98 + var_x55 * var_x97)) : (1326.9963692461315 * var_x95)); + const double var_x100 = 0.001 * var_chaste_interface__L_type_Ca_channel_f_L_gate__f_L; + const double var_x101 = var_x36 * var_x76; + const double var_x102 = 0.001 * var_chaste_interface__L_type_Ca_channel_d_L_gate__d_L; + const double var_x103 = 0.001 * var_chaste_interface__T_type_Ca_channel_f_T_gate__f_T; + const double var_x104 = var_x76 * (-0.22800000000000001 + 0.0060000000000000001 * var_chaste_interface__membrane__V); + const double var_x105 = 0.001 * var_chaste_interface__T_type_Ca_channel_d_T_gate__d_T; + const double var_x106 = var_x20 * var_x46; + const double var_x107 = pow(var_chaste_interface__Ca_independent_transient_outward_K_current_s1_gate__s1, 2); + const double var_x108 = var_x46 * var_x76; + const double var_x109 = var_x108 * var_x19 * var_chaste_interface__Ca_independent_transient_outward_K_current_r_gate__r; + const double var_x110 = pow(var_chaste_interface__Ca_independent_transient_outward_K_current_s2_gate__s2, 2); + const double var_x111 = var_x21 * pow(var_chaste_interface__Ca_independent_transient_outward_K_current_s3_gate__s3, 5); + const double var_x112 = 0.001 * var_chaste_interface__delayed_rectifier_K_current_pi_gate__p_i; + const double var_x113 = var_x108 * NV_Ith_S(mParameters, 7); + const double var_x114 = 0.001 * var_chaste_interface__delayed_rectifier_K_current_pa_gate__p_a; + const double var_x115 = pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, 2); + const double var_x116 = var_x115 * NV_Ith_S(mParameters, 1); + const double var_x117 = var_x116 * var_x16 * var_x7; + const double var_x118 = 1 / (1.5 + var_x38); + const double var_x119 = var_x118 * var_x40; + const double var_x120 = var_x119 * var_x43; + const double var_x121 = var_x120 * sqrt(var_chaste_interface__intracellular_ion_concentrations__Na_i) * var_chaste_interface__cleft_space_ion_concentrations__K_c; + const double var_x122 = var_x116 * var_x85; + const double var_x123 = pow((1 + 0.027410122234342148 * var_x42), (-2)); + const double var_x124 = pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, 2); + const double var_x125 = var_x119 * var_x123 * var_x124 * var_chaste_interface__cleft_space_ion_concentrations__K_c; + const double var_x126 = var_x52 * var_x56 * var_x57 * NV_Ith_S(mParameters, 5); + const double var_x127 = 0.0096486999999999996 * var_x126; + const double var_x128 = var_x127 * var_x62 * var_x63; + const double var_x129 = ((var_x65) ? (-var_x128 + var_x87 * (var_x128 + var_x127 * var_x50 * var_x54)) : (3635.606491085292 * var_x126 * var_x74 * var_chaste_interface__membrane__V)); + const double var_x130 = 26.53945091048535 * var_x5; + const double var_x131 = 26.53945091048535 * var_x26; + const double var_x132 = var_x26 * var_x35; + const double var_x133 = var_x26 * var_x49; + const double var_x134 = 1 / var_chaste_interface__cleft_space_ion_concentrations__K_c; + const double var_x135 = 26.53945091048535 * var_x134; + const double var_x136 = pow(var_chaste_interface__cleft_space_ion_concentrations__K_c, 2); + const double var_x137 = var_x136 * var_x34; + const double var_x138 = var_x25 * var_x30 * NV_Ith_S(mParameters, 6) / pow(var_x31, 4); + const double var_x139 = pow(var_x39, (-2)); + const double var_x140 = var_x118 * var_x139 * var_x44; + const double var_x141 = (0.079263098651550096 - 0.001585261973031002 * var_chaste_interface__membrane__V) * NV_Ith_S(mParameters, 3); + const double var_x142 = 1 / (1.3999999999999999 + 0.80000000000000004 * var_chaste_interface__Ca_handling_by_the_SR__Ca_up + 3333.3333333333335 * var_chaste_interface__intracellular_ion_concentrations__Ca_i); + const double var_x143 = pow((0.00041999999999999996 + 0.00023999999999999998 * var_chaste_interface__Ca_handling_by_the_SR__Ca_up + var_chaste_interface__intracellular_ion_concentrations__Ca_i), (-2)); + const double var_x144 = 3333.3333333333335 * var_chaste_interface__intracellular_ion_concentrations__Ca_i - 0.32000000000000006 * var_chaste_interface__Ca_handling_by_the_SR__Ca_up; + const double var_x145 = pow(var_chaste_interface__Ca_handling_by_the_SR__F2, 2); + const double var_x146 = 0.25 + var_chaste_interface__Ca_handling_by_the_SR__F2; + const double var_x147 = pow(var_x146, (-2)); + const double var_x148 = var_x147 * NV_Ith_S(mParameters, 0); + const double var_x149 = var_x145 * var_x148; + const double var_x150 = 0.00088070109612833447 * var_x149; + const double var_x151 = 0.00020079984991726025 - 5.2842065767700066e-6 * var_chaste_interface__membrane__V; + const double var_x152 = 32 * var_chaste_interface__intracellular_ion_concentrations__Ca_i; + const double var_x153 = var_x143 * var_x144; + const double var_x154 = -var_chaste_interface__intracellular_ion_concentrations__Ca_i + var_chaste_interface__Ca_handling_by_the_SR__Ca_rel; + const double var_x155 = var_x145 * NV_Ith_S(mParameters, 0) / pow(var_x146, 3); + const double var_x156 = 1 / (-1 + exp(9.9999999999708629e-8)); + const double var_x157 = 1 / (-1 + exp(-9.9999999999708629e-8)); + const double var_x158 = (var_chaste_interface__membrane__V >= -44.400001267299999) && (var_chaste_interface__membrane__V <= -44.399998732699999); + const double var_x159 = exp(-3.5035114021936398 - 0.078907914463820727 * var_chaste_interface__membrane__V); + const double var_x160 = -1 + var_x159; + const double var_x161 = 460 / var_x160; + const double var_x162 = 44.399999999999999 + var_chaste_interface__membrane__V; + const double var_x163 = 0.00058295799999830145 * var_x156; + const double var_x164 = exp(-7.333333333333333 - 0.077519379844961239 * var_chaste_interface__membrane__V); + const double var_x165 = 1 / (1 + 323.30000000000001 * var_x164); + const double var_x166 = exp(-12.010771992818672 - 0.17953321364452424 * var_chaste_interface__membrane__V); + const double var_x167 = 1 / (1491 * var_x165 + 44.899999999999999 * var_x166); + const double var_x168 = 8.0610412926391373 * var_x166; + const double var_x169 = -var_x167 * var_x168 + 2.019719479407183e-5 * var_x166 * (var_x168 - 0.35750508923240704 * var_x164 / pow((0.0030931023816888337 + var_x164), 2)) / pow((var_x165 + 0.030114017437961098 * var_x166), 2); + const double var_x170 = exp(6.666666666666667 + 0.16666666666666666 * var_chaste_interface__membrane__V); + const double var_x171 = 1 + var_x170; + const double var_x172 = 1 / var_x171; + const double var_x173 = 0.001 / (0.00014999999999999999 + 0.029999999999999999 * var_x172); + const double var_x174 = -44.899999999999999 * var_x166 * var_x167; + const double var_x175 = exp(30 + 0.5 * var_chaste_interface__membrane__V); + const double var_x176 = 1 + var_x175; + const double var_x177 = 1 / var_x176; + const double var_x178 = 0.001 / (0.00044999999999999999 + 0.12 * var_x177); + const double var_x179 = 1 / (-1 + exp(1.0000000000010001e-7)); + const double var_x180 = 1 / (-1 + exp(-1.0000000000010001e-7)); + const double var_x181 = (var_chaste_interface__membrane__V >= -5.0000002500000003) && (var_chaste_interface__membrane__V <= -4.9999997499999997); + const double var_x182 = 0.40000000000000002 * var_chaste_interface__membrane__V; + const double var_x183 = exp(2 + var_x182); + const double var_x184 = -1 + var_x183; + const double var_x185 = 1 / var_x184; + const double var_x186 = 5 + var_chaste_interface__membrane__V; + const double var_x187 = 1 / (-1 + exp(-1.000000000139778e-7)); + const double var_x188 = 1 / (-1 + exp(9.9999999991773334e-8)); + const double var_x189 = 8.3600000009281459 * var_x187 + 8.359999999071853 * var_x188; + const double var_x190 = 1 / (-1 + exp(-9.9999999998742257e-8)); + const double var_x191 = 1 / (-1 + exp(1.0000000000162864e-7)); + const double var_x192 = 24.999999999639201 * var_x190 + 25.000000000360799 * var_x191; + const double var_x193 = var_chaste_interface__membrane__V >= -45.000000249999999; + const double var_x194 = var_chaste_interface__membrane__V >= -10.000000480800001; + const double var_x195 = var_chaste_interface__membrane__V <= -44.999999750000001; + const double var_x196 = var_chaste_interface__membrane__V <= -9.9999995191999993; + const double var_x197 = (var_x193) && (var_x194) && (var_x195) && (var_x196); + const double var_x198 = exp(-2.0798668885191347 - 0.20798668885191349 * var_chaste_interface__membrane__V); + const double var_x199 = -1 + var_x198; + const double var_x200 = 50 / var_x199; + const double var_x201 = 10 + var_chaste_interface__membrane__V; + const double var_x202 = var_x200 + 10.399334442595674 * var_x198 * var_x201 / pow(var_x199, 2); + const double var_x203 = (var_x193) && (var_x195); + const double var_x204 = exp(-18 - var_x182); + const double var_x205 = -1 + var_x204; + const double var_x206 = 16.719999999999999 / var_x205; + const double var_x207 = 45 + var_chaste_interface__membrane__V; + const double var_x208 = var_x206 + 6.6879999999999997 * var_x204 * var_x207 / pow(var_x205, 2); + const double var_x209 = (var_x194) && (var_x196); + const double var_x210 = exp(-1.6590909090909092 - 0.15151515151515152 * var_chaste_interface__membrane__V); + const double var_x211 = 1 + var_x210; + const double var_x212 = 1.1200000000011203e-6 * var_x180; + const double var_x213 = ((var_x181) ? (-var_x212 + 1999999.9999979998 * (5.0000002500000003 + var_chaste_interface__membrane__V) * (var_x212 + 1.1200000000011203e-6 * var_x179)) : (4.4800000000000004 * var_x185 * var_x186)); + const double var_x214 = 4.1799999996561256e-6 * var_x188; + const double var_x215 = var_x214 + 1999999.9999424887 * (45.000000249999999 + var_chaste_interface__membrane__V) * (-var_x214 - 4.1800000005842713e-6 * var_x187); + const double var_x216 = 2.4040000000391526e-5 * var_x191; + const double var_x217 = var_x216 + 1039933.4442576389 * (10.000000480800001 + var_chaste_interface__membrane__V) * (-var_x216 - 2.4039999999697637e-5 * var_x190); + const double var_x218 = var_x200 * var_x201; + const double var_x219 = var_x206 * var_x207; + const double var_x220 = ((var_x197) ? (var_x215 + var_x217) : ((var_x203) ? (var_x215 - var_x218) : ((var_x209) ? (var_x217 - var_x219) : (-var_x218 - var_x219)))); + const double var_x221 = 1 / (-1 + exp(1.0000000000287557e-7)); + const double var_x222 = 1 / (-1 + exp(-1.0000000000287557e-7)); + const double var_x223 = (var_chaste_interface__membrane__V >= -18.000000400000001) && (var_chaste_interface__membrane__V <= -17.999999599999999); + const double var_x224 = 4.5 + 0.25 * var_chaste_interface__membrane__V; + const double var_x225 = exp(var_x224); + const double var_x226 = -1 + var_x225; + const double var_x227 = 1 / var_x226; + const double var_x228 = 18 + var_chaste_interface__membrane__V; + const double var_x229 = ((var_x223) ? (4.2450000000000001 * var_x221 + 4.2450000000000001 * var_x222) : (8.4900000000000002 * var_x227 - 2.1225000000000001 * var_x225 * var_x228 / pow(var_x226, 2))); + const double var_x230 = exp(-var_x224); + const double var_x231 = 1 + var_x230; + const double var_x232 = 16.980499999999999 * var_x230 / pow(var_x231, 2); + const double var_x233 = 1 / var_x231; + const double var_x234 = 67.921999999999997 * var_x233; + const double var_x235 = 3.3960000000976542e-6 * var_x222; + const double var_x236 = ((var_x223) ? (-var_x235 + 1249999.9999640554 * (18.000000400000001 + var_chaste_interface__membrane__V) * (var_x235 + 3.3960000000976542e-6 * var_x221)) : (8.4900000000000002 * var_x227 * var_x228)); + const double var_x237 = 1 / (var_x234 + var_x236); + const double var_x238 = exp(-3.7704918032786887 - 0.16393442622950821 * var_chaste_interface__membrane__V); + const double var_x239 = 1 + var_x238; + const double var_x240 = 0.77666666666666673 + 0.033333333333333333 * var_chaste_interface__membrane__V; + const double var_x241 = exp(-var_x240); + const double var_x242 = exp(var_x240); + const double var_x243 = exp(4.876462938881664 + 0.065019505851755519 * var_chaste_interface__membrane__V); + const double var_x244 = exp(-0.9003601440576231 - 0.012004801920768308 * var_chaste_interface__membrane__V); + const double var_x245 = 9.6370000000000005 * var_x243 + 9.6370000000000005 * var_x244; + const double var_x246 = 1 / var_x245; + const double var_x247 = 0.11569027611044419 * var_x244 - 0.62659297789336799 * var_x243; + const double var_x248 = exp(-2.6628794603230959 - 0.17752529735487307 * var_chaste_interface__membrane__V); + const double var_x249 = 1 + var_x248; + const double var_x250 = exp(-0.1388888888888889 * var_chaste_interface__membrane__V); + const double var_x251 = exp(var_x0); + const double var_x252 = 0.00040000000000000002 + 1 / (8.0109999999999992 * var_x250 + 386.60000000000002 * var_x251); + const double var_x253 = 1 / var_x252; + const double var_x254 = exp(327.99999999999994 + 10 * var_chaste_interface__membrane__V); + const double var_x255 = 1 + var_x254; + const double var_x256 = 1 / var_x255; + const double var_x257 = 1 / (0.020400000000000001 + 0.54659999999999997 * var_x256); + const double var_x258 = exp(4.0070821529745047 + 0.14164305949008499 * var_chaste_interface__membrane__V); + const double var_x259 = 1 + var_x258; + const double var_x260 = 0.000141643059490085 * var_x258 / pow(var_x259, 2); + const double var_x261 = -1 / var_x259; + const double var_x262 = var_x254 / pow(var_x255, 2); + const double var_x263 = exp(0.96921975662133131 - 0.071581961345740866 * var_chaste_interface__membrane__V); + const double var_x264 = 1 + var_x263; + const double var_x265 = 1 / var_x264; + const double var_x266 = 1 / (5.75 * var_x256 + 0.45000000000000001 * var_x265); + const double var_x267 = exp(46 + 2 * var_chaste_interface__membrane__V); + const double var_x268 = 1 + var_x267; + const double var_x269 = 1 / var_x268; + const double var_x270 = 1 / (0.5 + 7.5 * var_x269); + const double var_x271 = exp(1.8506208911614319 + 0.036523009495982472 * var_chaste_interface__membrane__V); + const double var_x272 = 1 + var_x271; + const double var_x273 = exp(0.065217391304347824 - 0.072463768115942032 * var_chaste_interface__membrane__V); + const double var_x274 = 1 + var_x273; + const double var_x275 = exp(-0.045816915605241454 * var_chaste_interface__membrane__V); + const double var_x276 = exp(0.014398433450440593 * var_chaste_interface__membrane__V); + const double var_x277 = 0.059999999999999998 + 1 / (0.29999999999999999 * var_x275 + 1.6599999999999999 * var_x276); + const double var_x278 = 1 / var_x277; + const double var_x279 = exp(-0.68918918918918914 - 0.13513513513513511 * var_chaste_interface__membrane__V); + const double var_x280 = 1 + var_x279; + const double var_x281 = exp(-0.076769537847382163 * var_chaste_interface__membrane__V); + const double var_x282 = exp(0.03941508020968823 * var_chaste_interface__membrane__V); + const double var_x283 = exp(-0.018299935950224173 * var_chaste_interface__membrane__V); + const double var_x284 = exp(0.009420009985210585 * var_chaste_interface__membrane__V); + const double var_x285 = exp(2.539728728905752 + 0.05358970648917756 * var_chaste_interface__membrane__V); + const double var_x286 = 1 + var_x285; + const double var_x287 = var_x120 * var_x42; + const double var_x288 = -3.290319067574035e-6 - 4.9354786013610522e-6 * var_x18; + const double var_x289 = var_x46 * var_chaste_interface__Ca_independent_transient_outward_K_current_r_gate__r; + const double var_x290 = var_x288 * var_x289; + const double var_x291 = 1.77 * var_x107; + const double var_x292 = 1.23 * var_x110; + const double var_x293 = var_x111 * var_x46; + const double var_x294 = 0.021829942145742926 * var_x27 - 0.00082254686501890791 * var_chaste_interface__membrane__V; + const double var_x295 = NV_Ith_S(mParameters, 7) * var_chaste_interface__delayed_rectifier_K_current_pa_gate__p_a; + const double var_x296 = 0.021829942145742926 * var_x5; + const double var_x297 = 0.021829942145742926 * var_x24; + const double var_x298 = 0.0049352811901134472 * var_x46; + const double var_x299 = 200 * var_chaste_interface__intracellular_ion_concentrations__Ca_i; + const double var_x300 = 1.6583208100573134e-5 + 2.4874812150859699e-5 * var_x18; + const double var_x301 = var_x21 * var_x300; + const double var_x302 = var_x289 * var_x300; + const double var_x303 = 0.0041456361996952953 * var_chaste_interface__membrane__V - 0.11002290841454433 * var_x27; + const double var_x304 = 0.11002290841454433 * var_x5; + const double var_x305 = 0.11002290841454433 * var_x24; + const double var_x306 = 0.11777375567316183 * var_x149; + const double var_x307 = 0.23554751134632365 * var_x154; + const double var_x308 = exp(-1.6000000000000001 + 0.080000000000000002 * var_chaste_interface__membrane__V); + const double var_x309 = 0.019200000000000002 * var_x308 * var_chaste_interface__Ca_handling_by_the_SR__F1; + const double var_x310 = 0.00029999999999999997 + var_chaste_interface__intracellular_ion_concentrations__Ca_i; + const double var_x311 = pow(var_chaste_interface__intracellular_ion_concentrations__Ca_i, 4); + const double var_x312 = var_x311 / pow(var_x310, 5); + const double var_x313 = pow(var_x310, (-4)); + const double var_x314 = var_x313 * pow(var_chaste_interface__intracellular_ion_concentrations__Ca_i, 3); + const double var_x315 = 0.81520000000000004 * var_x312 - 0.81520000000000004 * var_x314; + const double var_x316 = var_x311 * var_x313; + const double var_x317 = 0.20380000000000001 * var_x316 + 0.23999999999999999 * var_x308; + const double var_x318 = 1.3584000000000001 * var_x312 - 1.3584000000000001 * var_x314; + const double var_x319 = 0.033960000000000004 + 0.33960000000000001 * var_x316; + + // Matrix entries + IJth(rJacobian, 0, 0) = mSetVoltageDerivativeToZero ? 0.0 : (-var_x77 * (0.0014400000000000001 + var_x17 + var_x22 + var_x24 + var_x5 + var_x75 + 2 * var_x35 + 0.0060000000000000001 * var_x6 + 0.0011450666666666667 * var_x45 - 0.10497579657532749 * var_x49 + var_x36 * var_x37 + (1.8 * var_x3 + 1.8 * var_x4) * NV_Ith_S(mParameters, 3))); + IJth(rJacobian, 1, 0) = -1.7614021922566692e-8 + 0.0017614021922566689 * var_x17 - 5.2842065767700066e-6 * var_x6 + var_x141 * var_x37 + (-0.001585261973031002 * var_x3 - 0.001585261973031002 * var_x4) * NV_Ith_S(mParameters, 3); + IJth(rJacobian, 2, 0) = (0.001 - 0.001 * var_chaste_interface__sodium_current_m_gate__m) * ((var_x158) ? (-230 * var_x156 - 230 * var_x157) : (-var_x161 - 36.297640653357533 * var_x159 * var_x162 / pow(var_x160, 2))) + 1.4519056261343013 * var_x159 * var_chaste_interface__sodium_current_m_gate__m; + IJth(rJacobian, 3, 0) = var_x169 * var_x173 + 0.0055555555555555558 * var_x170 * (-var_x174 - var_chaste_interface__sodium_current_h1_gate__h1) / (pow(var_x171, 2) * pow((0.0050000000000000001 + var_x172), 2)); + IJth(rJacobian, 4, 0) = var_x169 * var_x178 + 0.0041666666666666666 * var_x175 * (-var_x174 - var_chaste_interface__sodium_current_h2_gate__h2) / (pow(var_x176, 2) * pow((0.0037499999999999999 + var_x177), 2)); + IJth(rJacobian, 5, 0) = (-var_x102 + 0.001 / var_x211) * (((var_x181) ? (2.2400000000000002 * var_x179 + 2.2400000000000002 * var_x180) : (4.4800000000000004 * var_x185 - 1.7920000000000003 * var_x183 * var_x186 / pow(var_x184, 2))) + ((var_x197) ? (-var_x189 - var_x192) : ((var_x203) ? (-var_x189 - var_x202) : ((var_x209) ? (-var_x192 - var_x208) : (-var_x202 - var_x208))))) + 0.00015151515151515152 * var_x210 * (var_x213 + var_x220) / pow(var_x211, 2); + IJth(rJacobian, 6, 0) = (var_x232 + var_x229) * (-var_x100 + 0.001 * var_x236 * var_x237) + (var_x234 + var_x236) * (0.001 * var_x229 * var_x237 + 2.1675996343523e-7 * var_x236 * (-var_x229 - var_x232) / pow((var_x233 + 0.014722770236447691 * var_x236), 2)); + IJth(rJacobian, 7, 0) = (-var_x105 + 0.001 / var_x239) * (22.472433333333335 * var_x242 - 22.472433333333335 * var_x241) + 0.0001639344262295082 * var_x238 * (674.173 * var_x241 + 674.173 * var_x242) / pow(var_x239, 2); + IJth(rJacobian, 8, 0) = var_x245 * (-0.00011569027611044419 * var_x244 * var_x246 + 0.00010376673238559718 * var_x244 * var_x247 / pow((var_x243 + var_x244), 2)) - var_x247 * (-var_x103 + 0.0096369999999999997 * var_x244 * var_x246); + IJth(rJacobian, 9, 0) = 0.00017752529735487306 * var_x248 * var_x253 / pow(var_x249, 2) - 6.6907730760079843e-9 * (-var_chaste_interface__Ca_independent_transient_outward_K_current_r_gate__r + 1 / var_x249) * (1.1126388888888887 * var_x250 - 32.216666666666669 * var_x251) / (pow(var_x252, 2) * pow((var_x251 + 0.020721676151060523 * var_x250), 2)); + IJth(rJacobian, 10, 0) = -var_x257 * var_x260 + 0.018294914013904134 * var_x262 * (-var_x261 - var_chaste_interface__Ca_independent_transient_outward_K_current_s1_gate__s1) / pow((0.037321624588364438 + var_x256), 2); + IJth(rJacobian, 11, 0) = -var_x260 * var_x266 + 3.0245746691871456e-5 * (-var_x261 - var_chaste_interface__Ca_independent_transient_outward_K_current_s2_gate__s2) * (57.5 * var_x262 - 0.032211882605583393 * var_x263 / pow(var_x264, 2)) / pow((var_x256 + 0.078260869565217397 * var_x265), 2); + IJth(rJacobian, 12, 0) = -2.1922574727480476e-5 * var_x270 * var_x271 / pow(var_x272, 2) + 0.00026666666666666668 * var_x267 * (0.39975990396158467 - var_chaste_interface__Ca_independent_transient_outward_K_current_s3_gate__s3 + 0.60024009603841544 / var_x272) / (pow(var_x268, 2) * pow((0.066666666666666666 + var_x269), 2)); + IJth(rJacobian, 13, 0) = 7.2463768115942027e-5 * var_x273 * var_x278 / pow(var_x274, 2) - 0.00036289737262302222 * (-var_chaste_interface__delayed_rectifier_K_current_z_gate__z + 1 / var_x274) * (0.013745074681572435 * var_x275 - 0.023901399527731383 * var_x276) / (pow(var_x277, 2) * pow((var_x276 + 0.18072289156626506 * var_x275), 2)); + IJth(rJacobian, 14, 0) = (-var_x114 + 0.001 / var_x280) * (0.35473572188719404 * var_x282 - 0.099800399201596807 * var_x281) + 0.00013513513513513514 * var_x279 * (9 * var_x282 + 1.3 * var_x281) / pow(var_x280, 2); + IJth(rJacobian, 15, 0) = (-var_x112 + 0.001 / var_x286) * (6.1795265502981431 * var_x284 - 1.8299935950224173 * var_x283) - 5.3589706489177562e-5 * var_x285 * (100 * var_x283 + 656 * var_x284) / pow(var_x286, 2); + IJth(rJacobian, 16, 0) = -1.6450937300378158e-8 - 0.0024676405950567236 * var_x17 - 2.8256129907129523e-6 * var_x45 - 0.00082254686501890791 * var_x75; + IJth(rJacobian, 17, 0) = -1.151565611026471e-6 - 0.00082254686501890791 * var_x24 - 0.00082254686501890791 * var_x5 - 0.0016450937300378158 * var_x35 + var_x20 * var_x288 * var_chaste_interface__Ca_independent_transient_outward_K_current_r_gate__r + 8.6347512375898239e-5 * var_x25 * var_x28 * var_x32 * var_x46 * var_x47 * NV_Ith_S(mParameters, 6) + 1.8837419938086349e-6 * var_x38 * var_x40 * var_x41 * var_x42 * var_x43 * var_chaste_interface__cleft_space_ion_concentrations__K_c; + IJth(rJacobian, 22, 0) = 5.8038906795734136e-6 + var_x301 + 0.0041456361996952953 * var_x24 + 0.0041456361996952953 * var_x5 + 0.0082912723993905906 * var_x35 - 9.4940596487955185e-6 * var_x45 - 0.00043519146237452704 * var_x49; + IJth(rJacobian, 26, 0) = -var_x309; + IJth(rJacobian, 27, 0) = var_x309; + IJth(rJacobian, 0, 1) = mSetVoltageDerivativeToZero ? 0.0 : (-var_x77 * (-var_x82 + 0.0095090000000000001 * var_x79 + 0.0002653945091048535 * var_x80 - 0.00029999999999999997 * var_x86 - 0.0095090000000000001 * var_x81 * var_chaste_interface__intracellular_ion_concentrations__Ca_i)); + IJth(rJacobian, 1, 1) = -47.271999999999998 - var_x150 + 6.2720000000000002 * var_chaste_interface__intracellular_Ca_buffering__O_TC + 32 * var_chaste_interface__intracellular_Ca_buffering__O_TMgC + 32 * var_chaste_interface__intracellular_Ca_buffering__O_TMgMg + 9 * var_chaste_interface__intracellular_Ca_buffering__O_C - 8.3745867230843319e-6 * var_x79 - 5.2842065767700058e-7 * var_x86 - 8.2198768971977874 * var_x142 - 0.0017614021922566689 * var_x82 - 2.3373323507508574e-7 * var_x80 + 8.3745867230843319e-6 * var_x81 * var_chaste_interface__intracellular_ion_concentrations__Ca_i + 7.3978892074780085e-7 * var_x143 * var_x144; + IJth(rJacobian, 16, 1) = 0.0024676405950567236 * var_x82 + 7.4029217851701709e-7 * var_x86; + IJth(rJacobian, 18, 1) = 200 - 200 * var_chaste_interface__intracellular_Ca_buffering__O_C; + IJth(rJacobian, 19, 1) = 78.400000000000006 - 78.400000000000006 * var_chaste_interface__intracellular_Ca_buffering__O_TC; + IJth(rJacobian, 20, 1) = 200 - 200 * var_chaste_interface__intracellular_Ca_buffering__O_TMgC - 200 * var_chaste_interface__intracellular_Ca_buffering__O_TMgMg; + IJth(rJacobian, 23, 1) = var_x306; + IJth(rJacobian, 24, 1) = 121.85879481761599 * var_x142 - 1.0967291533585437e-5 * var_x153; + IJth(rJacobian, 26, 1) = var_x315 * var_chaste_interface__Ca_handling_by_the_SR__F1; + IJth(rJacobian, 27, 1) = var_x318 * var_chaste_interface__Ca_handling_by_the_SR__F2 - var_x315 * var_chaste_interface__Ca_handling_by_the_SR__F1; + IJth(rJacobian, 28, 1) = -var_x318 * var_chaste_interface__Ca_handling_by_the_SR__F2; + IJth(rJacobian, 0, 2) = mSetVoltageDerivativeToZero ? 0.0 : (-var_x77 * var_x92); + IJth(rJacobian, 2, 2) = -0.001 * ((var_x158) ? (var_x163 + 394539.57232025318 * (44.400001267299999 + var_chaste_interface__membrane__V) * (-var_x163 - 0.00058295799999830145 * var_x157)) : (-var_x161 * var_x162)) - 18.399999999999999 * var_x159; + IJth(rJacobian, 16, 2) = -0.00082254686501890791 * var_x92; + IJth(rJacobian, 0, 3) = mSetVoltageDerivativeToZero ? 0.0 : (-var_x77 * var_x96); + IJth(rJacobian, 3, 3) = -var_x173; + IJth(rJacobian, 16, 3) = -0.00082254686501890791 * var_x96; + IJth(rJacobian, 0, 4) = mSetVoltageDerivativeToZero ? 0.0 : (-var_x77 * var_x99); + IJth(rJacobian, 4, 4) = -var_x178; + IJth(rJacobian, 16, 4) = -0.00082254686501890791 * var_x99; + IJth(rJacobian, 0, 5) = mSetVoltageDerivativeToZero ? 0.0 : (-var_x100 * var_x101); + IJth(rJacobian, 1, 5) = var_x141 * var_chaste_interface__L_type_Ca_channel_f_L_gate__f_L; + IJth(rJacobian, 5, 5) = -0.001 * var_x213 - 0.001 * var_x220; + IJth(rJacobian, 0, 6) = mSetVoltageDerivativeToZero ? 0.0 : (-var_x101 * var_x102); + IJth(rJacobian, 1, 6) = var_x141 * var_chaste_interface__L_type_Ca_channel_d_L_gate__d_L; + IJth(rJacobian, 6, 6) = -0.001 * var_x236 - 0.067921999999999996 * var_x233; + IJth(rJacobian, 0, 7) = mSetVoltageDerivativeToZero ? 0.0 : (-var_x103 * var_x104); + IJth(rJacobian, 1, 7) = var_x151 * var_chaste_interface__T_type_Ca_channel_f_T_gate__f_T; + IJth(rJacobian, 7, 7) = -0.67417300000000002 * var_x241 - 0.67417300000000002 * var_x242; + IJth(rJacobian, 0, 8) = mSetVoltageDerivativeToZero ? 0.0 : (-var_x104 * var_x105); + IJth(rJacobian, 1, 8) = var_x151 * var_chaste_interface__T_type_Ca_channel_d_T_gate__d_T; + IJth(rJacobian, 8, 8) = -0.0096369999999999997 * var_x243 - 0.0096369999999999997 * var_x244; + IJth(rJacobian, 0, 9) = mSetVoltageDerivativeToZero ? 0.0 : (-var_x106 * var_x19 * var_x77); + IJth(rJacobian, 9, 9) = -0.001 * var_x253; + IJth(rJacobian, 17, 9) = var_x106 * var_x288; + IJth(rJacobian, 22, 9) = var_x106 * var_x300; + IJth(rJacobian, 0, 10) = mSetVoltageDerivativeToZero ? 0.0 : (-0.0017699999999999999 * var_x107 * var_x109); + IJth(rJacobian, 10, 10) = -0.001 * var_x257; + IJth(rJacobian, 17, 10) = var_x290 * var_x291; + IJth(rJacobian, 22, 10) = var_x291 * var_x302; + IJth(rJacobian, 0, 11) = mSetVoltageDerivativeToZero ? 0.0 : (-0.00123 * var_x109 * var_x110); + IJth(rJacobian, 11, 11) = -0.001 * var_x266; + IJth(rJacobian, 17, 11) = var_x290 * var_x292; + IJth(rJacobian, 22, 11) = var_x292 * var_x302; + IJth(rJacobian, 0, 12) = mSetVoltageDerivativeToZero ? 0.0 : (-3.600144e-5 * var_x108 * var_x111); + IJth(rJacobian, 12, 12) = -0.001 * var_x270; + IJth(rJacobian, 17, 12) = -2.9612871608166312e-5 * var_x293; + IJth(rJacobian, 22, 12) = 0.00014924887290515819 * var_x293; + IJth(rJacobian, 0, 13) = mSetVoltageDerivativeToZero ? 0.0 : (-var_x46 * var_x77 * NV_Ith_S(mParameters, 8)); + IJth(rJacobian, 13, 13) = -0.001 * var_x278; + IJth(rJacobian, 17, 13) = var_x294 * NV_Ith_S(mParameters, 8); + IJth(rJacobian, 22, 13) = var_x303 * NV_Ith_S(mParameters, 8); + IJth(rJacobian, 0, 14) = mSetVoltageDerivativeToZero ? 0.0 : (-var_x112 * var_x113); + IJth(rJacobian, 14, 14) = -0.0089999999999999993 * var_x282 - 0.0012999999999999999 * var_x281; + IJth(rJacobian, 17, 14) = var_x23 * var_x294; + IJth(rJacobian, 22, 14) = var_x23 * var_x303; + IJth(rJacobian, 0, 15) = mSetVoltageDerivativeToZero ? 0.0 : (-var_x113 * var_x114); + IJth(rJacobian, 15, 15) = -0.65600000000000003 * var_x284 - 0.10000000000000001 * var_x283; + IJth(rJacobian, 17, 15) = var_x294 * var_x295; + IJth(rJacobian, 22, 15) = var_x295 * var_x303; + IJth(rJacobian, 0, 16) = mSetVoltageDerivativeToZero ? 0.0 : (-var_x77 * (var_x129 + 3 * var_x117 + 0.00053078901820970701 * var_x51 + 0.154584 * var_x121 - 0.00089999999999999998 * var_x122 - 0.0001161412471825695 * var_x125)); + IJth(rJacobian, 1, 16) = -1.5852619730310017e-6 * var_x122 + 0.0052842065767700064 * var_x115 * var_x15 * var_x7 * NV_Ith_S(mParameters, 9) * NV_Ith_S(mParameters, 1); + IJth(rJacobian, 16, 16) = -0.00038145775374624855 * var_x121 - 4.3659884291485854e-7 * var_x51 - 0.00082254686501890791 * var_x129 - 0.0074029217851701709 * var_x117 + 2.2208765355510512e-6 * var_x115 * var_x83 * var_x84 * NV_Ith_S(mParameters, 9) * NV_Ith_S(mParameters, 1) + 2.8659485630822583e-7 * var_x118 * var_x123 * var_x124 * var_x40 * var_chaste_interface__cleft_space_ion_concentrations__K_c; + IJth(rJacobian, 17, 16) = 0.00025430516916416572 * var_x121 - 1.9106323753881723e-7 * var_x125; + IJth(rJacobian, 22, 16) = -0.0012816980525873951 * var_x121 + 9.6295871719563877e-7 * var_x118 * var_x123 * var_x124 * var_x40 * var_chaste_interface__cleft_space_ion_concentrations__K_c; + IJth(rJacobian, 0, 17) = mSetVoltageDerivativeToZero ? 0.0 : (-var_x77 * (53.0789018209707 * var_x132 - 2.786 * var_x133 + var_x130 * var_x26 + var_x131 * var_x22 + var_x131 * var_x24)); + IJth(rJacobian, 17, 17) = -0.043659884291485852 * var_x132 - var_x26 * var_x296 - var_x26 * var_x297 + 26.53945091048535 * var_x20 * var_x26 * var_x288 * var_chaste_interface__Ca_independent_transient_outward_K_current_r_gate__r + 0.0022916155659426776 * var_x25 * var_x26 * var_x28 * var_x32 * var_x46 * var_x47 * NV_Ith_S(mParameters, 6); + IJth(rJacobian, 22, 17) = 0.22004581682908866 * var_x132 - 0.011549742452351092 * var_x133 + var_x131 * var_x301 + var_x26 * var_x304 + var_x26 * var_x305; + IJth(rJacobian, 1, 18) = 0.021419999999999998 + 9 * var_chaste_interface__intracellular_ion_concentrations__Ca_i; + IJth(rJacobian, 18, 18) = -0.47599999999999998 - var_x299; + IJth(rJacobian, 1, 19) = 0.031359999999999999 + 6.2720000000000002 * var_chaste_interface__intracellular_ion_concentrations__Ca_i; + IJth(rJacobian, 19, 19) = -0.39200000000000002 - 78.400000000000006 * var_chaste_interface__intracellular_ion_concentrations__Ca_i; + IJth(rJacobian, 1, 20) = 0.0010559999999999999 + var_x152; + IJth(rJacobian, 20, 20) = -0.0066 - var_x299; + IJth(rJacobian, 21, 20) = -5; + IJth(rJacobian, 1, 21) = var_x152; + IJth(rJacobian, 20, 21) = -var_x299; + IJth(rJacobian, 21, 21) = -5.6660000000000004; + IJth(rJacobian, 0, 22) = mSetVoltageDerivativeToZero ? 0.0 : (-var_x77 * (-53.0789018209707 * var_x137 - 0.10305599999999999 * var_x140 - var_x130 * var_x134 - var_x135 * var_x22 - var_x135 * var_x24 - 6 * var_x138 * var_x46 + 0.10305599999999999 * var_x118 * var_x40 * var_x42 * var_x43 + 6 * var_x136 * var_x30 * var_x32 * var_x46 * NV_Ith_S(mParameters, 6) + 2.786 * var_x136 * var_x28 * var_x32 * var_x46 * var_x47 * NV_Ith_S(mParameters, 6))); + IJth(rJacobian, 16, 22) = 0.00025430516916416572 * var_x140 - 0.00025430516916416572 * var_x287; + IJth(rJacobian, 17, 22) = 0.043659884291485852 * var_x137 + 0.00016953677944277714 * var_x287 - 0.00016953677944277714 * var_x140 + var_x134 * var_x296 + var_x134 * var_x297 + var_x138 * var_x298 - var_x137 * var_x298 - 0.0022916155659426776 * var_x136 * var_x48 - var_x135 * var_x21 * var_x288; + IJth(rJacobian, 22, 22) = -0.00085446536839159674 * var_x287 - 0.22004581682908866 * var_x137 - var_x134 * var_x304 - var_x134 * var_x305 - var_x135 * var_x301 - 0.024873817198171774 * var_x138 * var_x46 + 0.024873817198171774 * var_x136 * var_x30 * var_x32 * var_x46 * NV_Ith_S(mParameters, 6) + 0.00085446536839159674 * var_x118 * var_x139 * var_x42 * var_x43 * var_chaste_interface__cleft_space_ion_concentrations__K_c + 0.011549742452351092 * var_x136 * var_x28 * var_x32 * var_x46 * var_x47 * NV_Ith_S(mParameters, 6); + IJth(rJacobian, 1, 23) = var_x150; + IJth(rJacobian, 23, 23) = -14.98 - var_x306 + 14.880000000000001 * var_chaste_interface__Ca_handling_by_the_SR__O_Calse; + IJth(rJacobian, 24, 23) = 0.011085915847820609; + IJth(rJacobian, 25, 23) = 0.47999999999999998 - 0.47999999999999998 * var_chaste_interface__Ca_handling_by_the_SR__O_Calse; + IJth(rJacobian, 1, 24) = 1.7754934097947219e-10 * var_x153 + 0.00078910818213098765 * var_x142; + IJth(rJacobian, 23, 24) = 0.099999999999999992; + IJth(rJacobian, 24, 24) = -0.011085915847820609 - 2.6321499680605046e-9 * var_x153 - 0.011698444302491135 * var_x142; + IJth(rJacobian, 23, 25) = 12.4 + 14.880000000000001 * var_chaste_interface__Ca_handling_by_the_SR__Ca_rel; + IJth(rJacobian, 25, 25) = -0.40000000000000002 - 0.47999999999999998 * var_chaste_interface__Ca_handling_by_the_SR__Ca_rel; + IJth(rJacobian, 26, 26) = -var_x317; + IJth(rJacobian, 27, 26) = var_x317; + IJth(rJacobian, 1, 27) = -0.0017614021922566689 * var_x154 * var_x155 + 0.0017614021922566689 * var_x147 * var_x154 * var_chaste_interface__Ca_handling_by_the_SR__F2 * NV_Ith_S(mParameters, 0); + IJth(rJacobian, 23, 27) = var_x155 * var_x307 - var_x148 * var_x307 * var_chaste_interface__Ca_handling_by_the_SR__F2; + IJth(rJacobian, 27, 27) = -var_x319; + IJth(rJacobian, 28, 27) = var_x319; + IJth(rJacobian, 26, 28) = 0.00081499999999999997; + IJth(rJacobian, 28, 28) = -0.00081499999999999997; + } + + N_Vector Cellaslanidi_atrial_model_2009FromCellMLCvode::ComputeDerivedQuantities(double var_chaste_interface__environment__time_converted, const N_Vector & rY) + { + // Inputs: + // Time units: millisecond + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : NV_Ith_S(rY, 0)); + // Units: millivolt; Initial value: -80.0 + double var_chaste_interface__intracellular_ion_concentrations__Ca_i = NV_Ith_S(rY, 1); + // Units: millimolar; Initial value: 7.1e-05 + double var_chaste_interface__sodium_current_m_gate__m = NV_Ith_S(rY, 2); + // Units: dimensionless; Initial value: 0.01309 + double var_chaste_interface__sodium_current_h1_gate__h1 = NV_Ith_S(rY, 3); + // Units: dimensionless; Initial value: 0.706 + double var_chaste_interface__sodium_current_h2_gate__h2 = NV_Ith_S(rY, 4); + // Units: dimensionless; Initial value: 0.61493 + double var_chaste_interface__L_type_Ca_channel_d_L_gate__d_L = NV_Ith_S(rY, 5); + // Units: dimensionless; Initial value: 3e-05 + double var_chaste_interface__L_type_Ca_channel_f_L_gate__f_L = NV_Ith_S(rY, 6); + // Units: dimensionless; Initial value: 0.99981 + double var_chaste_interface__delayed_rectifier_K_current_z_gate__z = NV_Ith_S(rY, 13); + // Units: dimensionless; Initial value: 0.02032 + double var_chaste_interface__delayed_rectifier_K_current_pa_gate__p_a = NV_Ith_S(rY, 14); + // Units: dimensionless; Initial value: 0.00016 + double var_chaste_interface__delayed_rectifier_K_current_pi_gate__p_i = NV_Ith_S(rY, 15); + // Units: dimensionless; Initial value: 0.76898 + double var_chaste_interface__intracellular_ion_concentrations__Na_i = NV_Ith_S(rY, 16); + // Units: millimolar; Initial value: 8.4 + double var_chaste_interface__intracellular_ion_concentrations__K_i = NV_Ith_S(rY, 17); + // Units: millimolar; Initial value: 100.0 + double var_chaste_interface__cleft_space_ion_concentrations__K_c = NV_Ith_S(rY, 22); + // Units: millimolar; Initial value: 5.0 + double var_chaste_interface__Ca_handling_by_the_SR__Ca_rel = NV_Ith_S(rY, 23); + // Units: millimolar; Initial value: 0.726776 + double var_chaste_interface__Ca_handling_by_the_SR__F2 = NV_Ith_S(rY, 27); + // Units: dimensionless; Initial value: 0.002262 + + // Mathematics + const double var_L_type_Ca_channel__E_Ca_app = 50; // millivolt + const double var_Na_Ca_ion_exchanger_current__d_NaCa = 0.00029999999999999997; // per_millimolar_4 + const double var_Na_Ca_ion_exchanger_current__gamma = 0.45000000000000001; // dimensionless + const double var_environment__CT = 1; // dimensionless + const double var_environment__PM = 0; // dimensionless + const double var_Ca_handling_by_the_SR__i_rel = pow(var_chaste_interface__Ca_handling_by_the_SR__F2, 2) * (-var_chaste_interface__intracellular_ion_concentrations__Ca_i + var_chaste_interface__Ca_handling_by_the_SR__Ca_rel) * NV_Ith_S(mParameters, 0) / pow((0.25 + var_chaste_interface__Ca_handling_by_the_SR__F2), 2); // picoA + const double var_inward_rectifier__KmK1 = 0.58999999999999997; // millimolar + const double var_inward_rectifier__shiftK1 = -3.6000000000000001; // millivolt + const double var_inward_rectifier__steepK1 = 1.393; // dimensionless + const double var_membrane__Cm_converted = 0.001 * NV_Ith_S(mParameters, 4); // uF + const double var_membrane__F = 96487; // coulomb_per_mole + const double var_membrane__R = 8314; // millijoule_per_mole_kelvin + const double var_membrane__T = 308; // kelvin + const double var_Ca_independent_transient_outward_K_current__E_K = var_membrane__R * var_membrane__T * log(var_chaste_interface__cleft_space_ion_concentrations__K_c / var_chaste_interface__intracellular_ion_concentrations__K_i) / var_membrane__F; // millivolt + const double var_L_type_Ca_channel__d_prime = 1 / (1 + exp(1.9166666666666667 - 0.083333333333333329 * var_chaste_interface__membrane__V)); // dimensionless + const double var_L_type_Ca_channel__i_Ca_L = (((var_environment__CT == 1) && (var_environment__PM == 0)) ? (1.8 * (-var_L_type_Ca_channel__E_Ca_app + var_chaste_interface__membrane__V) * (var_chaste_interface__L_type_Ca_channel_d_L_gate__d_L * var_chaste_interface__L_type_Ca_channel_f_L_gate__f_L + var_L_type_Ca_channel__d_prime) * NV_Ith_S(mParameters, 3)) : (((var_environment__PM == 1) && (var_environment__CT == 0)) ? (2.1000000000000001 * (-var_L_type_Ca_channel__E_Ca_app + var_chaste_interface__membrane__V) * (var_chaste_interface__L_type_Ca_channel_d_L_gate__d_L * var_chaste_interface__L_type_Ca_channel_f_L_gate__f_L + var_L_type_Ca_channel__d_prime) * NV_Ith_S(mParameters, 3)) : ((-var_L_type_Ca_channel__E_Ca_app + var_chaste_interface__membrane__V) * (var_chaste_interface__L_type_Ca_channel_d_L_gate__d_L * var_chaste_interface__L_type_Ca_channel_f_L_gate__f_L + var_L_type_Ca_channel__d_prime) * NV_Ith_S(mParameters, 3)))); // picoA + const double var_L_type_Ca_channel__i_Ca_L_converted = 9.9999999999999995e-7 * HeartConfig::Instance()->GetCapacitance() * var_L_type_Ca_channel__i_Ca_L / var_membrane__Cm_converted; // uA_per_cm2 + const double var_Na_Ca_ion_exchanger_current__i_NaCa = (pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, 3) * NV_Ith_S(mParameters, 1) * exp(var_Na_Ca_ion_exchanger_current__gamma * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T)) - pow(NV_Ith_S(mParameters, 2), 3) * var_chaste_interface__intracellular_ion_concentrations__Ca_i * exp((-1 + var_Na_Ca_ion_exchanger_current__gamma) * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * NV_Ith_S(mParameters, 9) / (1 + (pow(NV_Ith_S(mParameters, 2), 3) * var_chaste_interface__intracellular_ion_concentrations__Ca_i + pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, 3) * NV_Ith_S(mParameters, 1)) * var_Na_Ca_ion_exchanger_current__d_NaCa); // picoA + const double var_Na_Ca_ion_exchanger_current__i_NaCa_converted = 9.9999999999999995e-7 * HeartConfig::Instance()->GetCapacitance() * var_Na_Ca_ion_exchanger_current__i_NaCa / var_membrane__Cm_converted; // uA_per_cm2 + const double var_delayed_rectifier_K_current__i_Kr = (-var_Ca_independent_transient_outward_K_current__E_K + var_chaste_interface__membrane__V) * NV_Ith_S(mParameters, 7) * var_chaste_interface__delayed_rectifier_K_current_pa_gate__p_a * var_chaste_interface__delayed_rectifier_K_current_pi_gate__p_i; // picoA + const double var_delayed_rectifier_K_current__i_Kr_converted = 9.9999999999999995e-7 * HeartConfig::Instance()->GetCapacitance() * var_delayed_rectifier_K_current__i_Kr / var_membrane__Cm_converted; // uA_per_cm2 + const double var_delayed_rectifier_K_current__i_Ks = (-var_Ca_independent_transient_outward_K_current__E_K + var_chaste_interface__membrane__V) * NV_Ith_S(mParameters, 8) * var_chaste_interface__delayed_rectifier_K_current_z_gate__z; // picoA + const double var_delayed_rectifier_K_current__i_Ks_converted = 9.9999999999999995e-7 * HeartConfig::Instance()->GetCapacitance() * var_delayed_rectifier_K_current__i_Ks / var_membrane__Cm_converted; // uA_per_cm2 + const double var_inward_rectifier__i_K1 = (((var_environment__CT == 1) && (var_environment__PM == 0)) ? (2 * pow(var_chaste_interface__cleft_space_ion_concentrations__K_c, 3) * (-var_Ca_independent_transient_outward_K_current__E_K + var_chaste_interface__membrane__V) * NV_Ith_S(mParameters, 6) / ((1 + exp((-var_Ca_independent_transient_outward_K_current__E_K - var_inward_rectifier__shiftK1 + var_chaste_interface__membrane__V) * var_inward_rectifier__steepK1 * var_membrane__F / (var_membrane__R * var_membrane__T))) * pow((var_chaste_interface__cleft_space_ion_concentrations__K_c + var_inward_rectifier__KmK1), 3))) : (((var_environment__PM == 1) && (var_environment__CT == 0)) ? (2.5 * pow(var_chaste_interface__cleft_space_ion_concentrations__K_c, 3) * (-var_Ca_independent_transient_outward_K_current__E_K + var_chaste_interface__membrane__V) * NV_Ith_S(mParameters, 6) / ((1 + exp((-var_Ca_independent_transient_outward_K_current__E_K - var_inward_rectifier__shiftK1 + var_chaste_interface__membrane__V) * var_inward_rectifier__steepK1 * var_membrane__F / (var_membrane__R * var_membrane__T))) * pow((var_chaste_interface__cleft_space_ion_concentrations__K_c + var_inward_rectifier__KmK1), 3))) : (pow(var_chaste_interface__cleft_space_ion_concentrations__K_c, 3) * (-var_Ca_independent_transient_outward_K_current__E_K + var_chaste_interface__membrane__V) * NV_Ith_S(mParameters, 6) / ((1 + exp((-var_Ca_independent_transient_outward_K_current__E_K - var_inward_rectifier__shiftK1 + var_chaste_interface__membrane__V) * var_inward_rectifier__steepK1 * var_membrane__F / (var_membrane__R * var_membrane__T))) * pow((var_chaste_interface__cleft_space_ion_concentrations__K_c + var_inward_rectifier__KmK1), 3))))); // picoA + const double var_inward_rectifier__i_K1_converted = 9.9999999999999995e-7 * HeartConfig::Instance()->GetCapacitance() * var_inward_rectifier__i_K1 / var_membrane__Cm_converted; // uA_per_cm2 + const double var_membrane__i_Stim_converted = GetIntracellularAreaStimulus(var_chaste_interface__environment__time_converted); // uA_per_cm2 + const double var_sodium_current__i_Na = (((var_chaste_interface__membrane__V >= -2.6539450910485349e-6) && (var_chaste_interface__membrane__V <= 2.6539450910485349e-6)) ? (188398.77346612973 * (2.6539450910485349e-6 + var_chaste_interface__membrane__V) * (0.0096486999999999996 * pow(var_chaste_interface__sodium_current_m_gate__m, 3) * (-1 + exp(9.9999999999999995e-8 - log(NV_Ith_S(mParameters, 2) / var_chaste_interface__intracellular_ion_concentrations__Na_i))) * (0.36499999999999999 * var_chaste_interface__sodium_current_h2_gate__h2 + 0.63500000000000001 * var_chaste_interface__sodium_current_h1_gate__h1) * NV_Ith_S(mParameters, 2) * NV_Ith_S(mParameters, 5) / (-1 + exp(9.9999999999999995e-8)) + 0.0096486999999999996 * pow(var_chaste_interface__sodium_current_m_gate__m, 3) * (-1 + exp(-9.9999999999999995e-8 - log(NV_Ith_S(mParameters, 2) / var_chaste_interface__intracellular_ion_concentrations__Na_i))) * (0.36499999999999999 * var_chaste_interface__sodium_current_h2_gate__h2 + 0.63500000000000001 * var_chaste_interface__sodium_current_h1_gate__h1) * NV_Ith_S(mParameters, 2) * NV_Ith_S(mParameters, 5) / (-1 + exp(-9.9999999999999995e-8))) - 0.0096486999999999996 * pow(var_chaste_interface__sodium_current_m_gate__m, 3) * (-1 + exp(-9.9999999999999995e-8 - log(NV_Ith_S(mParameters, 2) / var_chaste_interface__intracellular_ion_concentrations__Na_i))) * (0.36499999999999999 * var_chaste_interface__sodium_current_h2_gate__h2 + 0.63500000000000001 * var_chaste_interface__sodium_current_h1_gate__h1) * NV_Ith_S(mParameters, 2) * NV_Ith_S(mParameters, 5) / (-1 + exp(-9.9999999999999995e-8))) : (3635.606491085292 * pow(var_chaste_interface__sodium_current_m_gate__m, 3) * (-1 + exp(0.037679754693225945 * var_chaste_interface__membrane__V - log(NV_Ith_S(mParameters, 2) / var_chaste_interface__intracellular_ion_concentrations__Na_i))) * (0.36499999999999999 * var_chaste_interface__sodium_current_h2_gate__h2 + 0.63500000000000001 * var_chaste_interface__sodium_current_h1_gate__h1) * NV_Ith_S(mParameters, 2) * var_chaste_interface__membrane__V * NV_Ith_S(mParameters, 5) / (-1 + exp(0.037679754693225945 * var_chaste_interface__membrane__V)))); // picoA + const double var_sodium_current__i_Na_converted = 9.9999999999999995e-7 * HeartConfig::Instance()->GetCapacitance() * var_sodium_current__i_Na / var_membrane__Cm_converted; // uA_per_cm2 + +#if CHASTE_SUNDIALS_VERSION >= 60000 + N_Vector dqs = N_VNew_Serial(10, CvodeContextManager::Instance()->GetSundialsContext()); +#else + N_Vector dqs = N_VNew_Serial(10); +#endif + NV_Ith_S(dqs, 0) = var_Ca_handling_by_the_SR__i_rel; + NV_Ith_S(dqs, 1) = var_L_type_Ca_channel__i_Ca_L_converted; + NV_Ith_S(dqs, 2) = var_membrane__Cm_converted; + NV_Ith_S(dqs, 3) = var_sodium_current__i_Na_converted; + NV_Ith_S(dqs, 4) = var_inward_rectifier__i_K1_converted; + NV_Ith_S(dqs, 5) = var_delayed_rectifier_K_current__i_Kr_converted; + NV_Ith_S(dqs, 6) = var_delayed_rectifier_K_current__i_Ks_converted; + NV_Ith_S(dqs, 7) = var_Na_Ca_ion_exchanger_current__i_NaCa_converted; + NV_Ith_S(dqs, 8) = var_membrane__i_Stim_converted; + NV_Ith_S(dqs, 9) = var_chaste_interface__environment__time_converted; + return dqs; + } + +template<> +void OdeSystemInformation::Initialise(void) +{ + this->mSystemName = "aslanidi_atrial_model_2009"; + this->mFreeVariableName = "time"; + this->mFreeVariableUnits = "millisecond"; + + // NV_Ith_S(rY, 0): + this->mVariableNames.push_back("membrane_voltage"); + this->mVariableUnits.push_back("millivolt"); + this->mInitialConditions.push_back(-80.0); + + // NV_Ith_S(rY, 1): + this->mVariableNames.push_back("cytosolic_calcium_concentration"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(7.1e-05); + + // NV_Ith_S(rY, 2): + this->mVariableNames.push_back("sodium_current_m_gate__m"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.01309); + + // NV_Ith_S(rY, 3): + this->mVariableNames.push_back("sodium_current_h1_gate__h1"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.706); + + // NV_Ith_S(rY, 4): + this->mVariableNames.push_back("sodium_current_h2_gate__h2"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.61493); + + // NV_Ith_S(rY, 5): + this->mVariableNames.push_back("L_type_Ca_channel_d_L_gate__d_L"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(3e-05); + + // NV_Ith_S(rY, 6): + this->mVariableNames.push_back("L_type_Ca_channel_f_L_gate__f_L"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.99981); + + // NV_Ith_S(rY, 7): + this->mVariableNames.push_back("T_type_Ca_channel_d_T_gate__d_T"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.00046); + + // NV_Ith_S(rY, 8): + this->mVariableNames.push_back("T_type_Ca_channel_f_T_gate__f_T"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.30752); + + // NV_Ith_S(rY, 9): + this->mVariableNames.push_back("Ca_independent_transient_outward_K_current_r_gate__r"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(6e-05); + + // NV_Ith_S(rY, 10): + this->mVariableNames.push_back("Ca_independent_transient_outward_K_current_s1_gate__s1"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.5753); + + // NV_Ith_S(rY, 11): + this->mVariableNames.push_back("Ca_independent_transient_outward_K_current_s2_gate__s2"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.39871); + + // NV_Ith_S(rY, 12): + this->mVariableNames.push_back("Ca_independent_transient_outward_K_current_s3_gate__s3"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.57363); + + // NV_Ith_S(rY, 13): + this->mVariableNames.push_back("delayed_rectifier_K_current_z_gate__z"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.02032); + + // NV_Ith_S(rY, 14): + this->mVariableNames.push_back("delayed_rectifier_K_current_pa_gate__p_a"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.00016); + + // NV_Ith_S(rY, 15): + this->mVariableNames.push_back("delayed_rectifier_K_current_pi_gate__p_i"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.76898); + + // NV_Ith_S(rY, 16): + this->mVariableNames.push_back("cytosolic_sodium_concentration"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(8.4); + + // NV_Ith_S(rY, 17): + this->mVariableNames.push_back("cytosolic_potassium_concentration"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(100.0); + + // NV_Ith_S(rY, 18): + this->mVariableNames.push_back("intracellular_Ca_buffering__O_C"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.029108); + + // NV_Ith_S(rY, 19): + this->mVariableNames.push_back("intracellular_Ca_buffering__O_TC"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.014071); + + // NV_Ith_S(rY, 20): + this->mVariableNames.push_back("intracellular_Ca_buffering__O_TMgC"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.214036); + + // NV_Ith_S(rY, 21): + this->mVariableNames.push_back("intracellular_Ca_buffering__O_TMgMg"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.693565); + + // NV_Ith_S(rY, 22): + this->mVariableNames.push_back("extracellular_potassium_concentration"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(5.0); + + // NV_Ith_S(rY, 23): + this->mVariableNames.push_back("Ca_handling_by_the_SR__Ca_rel"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(0.726776); + + // NV_Ith_S(rY, 24): + this->mVariableNames.push_back("Ca_handling_by_the_SR__Ca_up"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(0.730866); + + // NV_Ith_S(rY, 25): + this->mVariableNames.push_back("Ca_handling_by_the_SR__O_Calse"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.465921); + + // NV_Ith_S(rY, 26): + this->mVariableNames.push_back("Ca_handling_by_the_SR__F1"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.288039); + + // NV_Ith_S(rY, 27): + this->mVariableNames.push_back("Ca_handling_by_the_SR__F2"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.002262); + + // NV_Ith_S(rY, 28): + this->mVariableNames.push_back("Ca_handling_by_the_SR__F3"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.612697); + + // mParameters[0]: + this->mParameterNames.push_back("SR_release_current_max"); + this->mParameterUnits.push_back("picoA_per_millimolar"); + + // mParameters[1]: + this->mParameterNames.push_back("extracellular_calcium_concentration"); + this->mParameterUnits.push_back("millimolar"); + + // mParameters[2]: + this->mParameterNames.push_back("extracellular_sodium_concentration"); + this->mParameterUnits.push_back("millimolar"); + + // mParameters[3]: + this->mParameterNames.push_back("membrane_L_type_calcium_current_conductance"); + this->mParameterUnits.push_back("nanoS"); + + // mParameters[4]: + this->mParameterNames.push_back("membrane__Cm"); + this->mParameterUnits.push_back("nanoF"); + + // mParameters[5]: + this->mParameterNames.push_back("membrane_fast_sodium_current_conductance"); + this->mParameterUnits.push_back("nanolitre_per_second"); + + // mParameters[6]: + this->mParameterNames.push_back("membrane_inward_rectifier_potassium_current_conductance"); + this->mParameterUnits.push_back("nanoS"); + + // mParameters[7]: + this->mParameterNames.push_back("membrane_rapid_delayed_rectifier_potassium_current_conductance"); + this->mParameterUnits.push_back("nanoS"); + + // mParameters[8]: + this->mParameterNames.push_back("membrane_slow_delayed_rectifier_potassium_current_conductance"); + this->mParameterUnits.push_back("nanoS"); + + // mParameters[9]: + this->mParameterNames.push_back("membrane_sodium_calcium_exchanger_current_conductance"); + this->mParameterUnits.push_back("picoA_per_millimolar_4"); + + // Derived Quantity index [0]: + this->mDerivedQuantityNames.push_back("SR_release_current"); + this->mDerivedQuantityUnits.push_back("picoA"); + + // Derived Quantity index [1]: + this->mDerivedQuantityNames.push_back("membrane_L_type_calcium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [2]: + this->mDerivedQuantityNames.push_back("membrane_capacitance"); + this->mDerivedQuantityUnits.push_back("uF"); + + // Derived Quantity index [3]: + this->mDerivedQuantityNames.push_back("membrane_fast_sodium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [4]: + this->mDerivedQuantityNames.push_back("membrane_inward_rectifier_potassium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [5]: + this->mDerivedQuantityNames.push_back("membrane_rapid_delayed_rectifier_potassium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [6]: + this->mDerivedQuantityNames.push_back("membrane_slow_delayed_rectifier_potassium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [7]: + this->mDerivedQuantityNames.push_back("membrane_sodium_calcium_exchanger_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [8]: + this->mDerivedQuantityNames.push_back("membrane_stimulus_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [9]: + this->mDerivedQuantityNames.push_back("time"); + this->mDerivedQuantityUnits.push_back("millisecond"); + + this->mInitialised = true; +} + +// Serialization for Boost >= 1.36 +#include "SerializationExportWrapperForCpp.hpp" +CHASTE_CLASS_EXPORT(Cellaslanidi_atrial_model_2009FromCellMLCvode) + +#endif // CHASTE_CVODE diff --git a/chaste_codegen/tests/numerical/baseline/Cvode_with_jacobian/aslanidi_atrial_model_2009.hpp b/chaste_codegen/tests/numerical/baseline/Cvode_with_jacobian/aslanidi_atrial_model_2009.hpp new file mode 100644 index 00000000..7031a18f --- /dev/null +++ b/chaste_codegen/tests/numerical/baseline/Cvode_with_jacobian/aslanidi_atrial_model_2009.hpp @@ -0,0 +1,87 @@ +#ifdef CHASTE_CVODE +#ifndef CELLASLANIDI_ATRIAL_MODEL_2009FROMCELLMLCVODE_HPP_ +#define CELLASLANIDI_ATRIAL_MODEL_2009FROMCELLMLCVODE_HPP_ + +//! @file +//! +//! This source file was generated from CellML by chaste_codegen version (version omitted as unimportant) +//! +//! Model: aslanidi_atrial_model_2009 +//! +//! Processed by chaste_codegen: https://github.com/ModellingWebLab/chaste-codegen +//! (translator: chaste_codegen, model type: AnalyticCvode) +//! on (date omitted as unimportant) +//! +//! + +#include "ChasteSerialization.hpp" +#include +#include "AbstractStimulusFunction.hpp" +#include "AbstractCvodeCell.hpp" + +class Cellaslanidi_atrial_model_2009FromCellMLCvode : public AbstractCvodeCell +{ + friend class boost::serialization::access; + template + void serialize(Archive & archive, const unsigned int version) + { + archive & boost::serialization::base_object(*this); + + } + + // + // Settable parameters and readable variables + // + + +private: +const bool is_concentration[29] = {false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, true, false, false, false, false, true, false, false, false, false, false, false}; +const bool is_probability[29] = {false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false}; +public: + + boost::shared_ptr UseCellMLDefaultStimulus(); + double GetIntracellularCalciumConcentration(); + Cellaslanidi_atrial_model_2009FromCellMLCvode(boost::shared_ptr pOdeSolver /* unused; should be empty */, boost::shared_ptr pIntracellularStimulus); + ~Cellaslanidi_atrial_model_2009FromCellMLCvode(); + void VerifyStateVariables(); + double GetIIonic(const std::vector* pStateVariables=NULL); + void EvaluateYDerivatives(double var_chaste_interface__environment__time_converted, const N_Vector rY, N_Vector rDY); + N_Vector ComputeDerivedQuantities(double var_chaste_interface__environment__time_converted, const N_Vector & rY); + void EvaluateAnalyticJacobian(double var_chaste_interface__environment__time_converted, N_Vector rY, N_Vector rDY, CHASTE_CVODE_DENSE_MATRIX rJacobian, N_Vector rTmp1, N_Vector rTmp2, N_Vector rTmp3); +}; + +// Needs to be included last +#include "SerializationExportWrapper.hpp" +CHASTE_CLASS_EXPORT(Cellaslanidi_atrial_model_2009FromCellMLCvode) + +namespace boost +{ + namespace serialization + { + template + inline void save_construct_data( + Archive & ar, const Cellaslanidi_atrial_model_2009FromCellMLCvode * t, const unsigned int fileVersion) + { + const boost::shared_ptr p_solver = t->GetSolver(); + const boost::shared_ptr p_stimulus = t->GetStimulusFunction(); + ar << p_solver; + ar << p_stimulus; + } + + template + inline void load_construct_data( + Archive & ar, Cellaslanidi_atrial_model_2009FromCellMLCvode * t, const unsigned int fileVersion) + { + boost::shared_ptr p_solver; + boost::shared_ptr p_stimulus; + ar >> p_solver; + ar >> p_stimulus; + ::new(t)Cellaslanidi_atrial_model_2009FromCellMLCvode(p_solver, p_stimulus); + } + + } + +} + +#endif // CELLASLANIDI_ATRIAL_MODEL_2009FROMCELLMLCVODE_HPP_ +#endif // CHASTE_CVODE \ No newline at end of file diff --git a/chaste_codegen/tests/numerical/baseline/Cvode_with_jacobian/dynamic_Shannon2004.cpp b/chaste_codegen/tests/numerical/baseline/Cvode_with_jacobian/dynamic_Shannon2004.cpp new file mode 100644 index 00000000..e5733f95 --- /dev/null +++ b/chaste_codegen/tests/numerical/baseline/Cvode_with_jacobian/dynamic_Shannon2004.cpp @@ -0,0 +1,2150 @@ +#ifdef CHASTE_CVODE +//! @file +//! +//! This source file was generated from CellML by chaste_codegen version (version omitted as unimportant) +//! +//! Model: shannon_wang_puglisi_weber_bers_2004_model_updated +//! +//! Processed by chaste_codegen: https://github.com/ModellingWebLab/chaste-codegen +//! (translator: chaste_codegen, model type: AnalyticCvode) +//! on (date omitted as unimportant) +//! +//! + +#include "dynamic_Shannon2004.hpp" +#include +#include +#include +#include +#include "Exception.hpp" +#include "OdeSystemInformation.hpp" +#include "RegularStimulus.hpp" +#include "HeartConfig.hpp" +#include "IsNan.hpp" +#include "MathsCustomFunctions.hpp" + +#if CHASTE_SUNDIALS_VERSION >= 60000 +#include "CvodeContextManager.hpp" +#endif + +#include "ModelFactory.hpp" + +AbstractCvodeCell* Dynamicshannon_wang_puglisi_weber_bers_2004FromCellMLCvode::CreateMethod(boost::shared_ptr p_solver, boost::shared_ptr p_stimulus) { + return new Dynamicshannon_wang_puglisi_weber_bers_2004FromCellMLCvode(p_solver, p_stimulus); +} + +bool Dynamicshannon_wang_puglisi_weber_bers_2004FromCellMLCvode::registered = ModelFactory::Register("dynamic_Shannon2004", "AnalyticCvode", (ModelFactory::TCreateMethod)Dynamicshannon_wang_puglisi_weber_bers_2004FromCellMLCvode::CreateMethod); + + + + boost::shared_ptr Dynamicshannon_wang_puglisi_weber_bers_2004FromCellMLCvode::UseCellMLDefaultStimulus() + { + // Use the default stimulus specified by CellML metadata + const double var_chaste_interface__cell__stim_amplitude_converted = -9.5 * HeartConfig::Instance()->GetCapacitance(); // uA_per_cm2 + const double var_chaste_interface__cell__stim_duration = 5; // millisecond + const double var_chaste_interface__cell__stim_period = 1000; // millisecond + const double var_chaste_interface__cell__stim_start = 100; // millisecond + boost::shared_ptr p_cellml_stim(new RegularStimulus( + -fabs(var_chaste_interface__cell__stim_amplitude_converted), + var_chaste_interface__cell__stim_duration, + var_chaste_interface__cell__stim_period, + var_chaste_interface__cell__stim_start + )); + mpIntracellularStimulus = p_cellml_stim; + return p_cellml_stim; + } + + double Dynamicshannon_wang_puglisi_weber_bers_2004FromCellMLCvode::GetIntracellularCalciumConcentration() + { + return NV_Ith_S(mStateVariables, 1); + } + + Dynamicshannon_wang_puglisi_weber_bers_2004FromCellMLCvode::Dynamicshannon_wang_puglisi_weber_bers_2004FromCellMLCvode(boost::shared_ptr pOdeSolver /* unused; should be empty */, boost::shared_ptr pIntracellularStimulus) + : AbstractCvodeCell( + pOdeSolver, + 45, + 0, + pIntracellularStimulus) + { + // Time units: millisecond + // + this->mpSystemInfo = OdeSystemInformation::Instance(); + Init(); + + // We have a default stimulus specified in the CellML file metadata + this->mHasDefaultStimulusFromCellML = true; + mUseAnalyticJacobian = true; + mHasAnalyticJacobian = true; + + NV_Ith_S(this->mParameters, 0) = 5.3480000000000003e-6; // (var_Jleak_SR__KSRleak) [per_millisecond] + NV_Ith_S(this->mParameters, 1) = 25; // (var_Jrel_SR__ks) [per_millisecond] + NV_Ith_S(this->mParameters, 2) = 0.00028600000000000001; // (var_Jpump_SR__V_max) [millimolar_per_millisecond] + NV_Ith_S(this->mParameters, 3) = 1; // (var_Na_buffer__conc_clamp) [dimensionless] + NV_Ith_S(this->mParameters, 4) = 15; // (var_model_parameters__Cli) [millimolar] + NV_Ith_S(this->mParameters, 5) = 135; // (var_model_parameters__Ki) [millimolar] + NV_Ith_S(this->mParameters, 6) = 1.8; // (var_model_parameters__Cao) [millimolar] + NV_Ith_S(this->mParameters, 7) = 150; // (var_model_parameters__Clo) [millimolar] + NV_Ith_S(this->mParameters, 8) = 5.4000000000000004; // (var_model_parameters__Ko) [millimolar] + NV_Ith_S(this->mParameters, 9) = 140; // (var_model_parameters__Nao) [millimolar] + NV_Ith_S(this->mParameters, 10) = 96486.699999999997; // (var_model_parameters__F) [coulomb_per_mole] + NV_Ith_S(this->mParameters, 11) = 8314.2999999999993; // (var_model_parameters__R) [joule_per_kilomole_kelvin] + NV_Ith_S(this->mParameters, 12) = 0.00054000000000000001; // (var_ICaL__PCa) [litre_per_farad_millisecond] + NV_Ith_S(this->mParameters, 13) = 0.0089999999999999993; // (var_IClb__G_ClBk) [milliS_per_microF] + NV_Ith_S(this->mParameters, 14) = 16; // (var_INa__G_INa) [milliS_per_microF] + NV_Ith_S(this->mParameters, 15) = 0; // (var_INa__perc_reduced_inact_for_IpNa) [dimensionless] + NV_Ith_S(this->mParameters, 16) = 0; // (var_INa__shift_INa_inact) [millivolt] + NV_Ith_S(this->mParameters, 17) = 0.02; // (var_Itof__G_tof) [milliS_per_microF] + NV_Ith_S(this->mParameters, 18) = 0.90000000000000002; // (var_IK1__G_K1_max) [milliS_per_microF] + NV_Ith_S(this->mParameters, 19) = 0.029999999999999999; // (var_IKr__G_IKr_const) [milliS_per_microF] + NV_Ith_S(this->mParameters, 20) = 0.070000000000000007; // (var_IKs__G_Ks_max) [milliS_per_microF] + NV_Ith_S(this->mParameters, 21) = 0.059999999999999998; // (var_Itos__G_tos) [milliS_per_microF] + NV_Ith_S(this->mParameters, 22) = 9; // (var_INaCa__V_max) [microA_per_microF] + NV_Ith_S(this->mParameters, 23) = 310; // (var_model_parameters__T) [kelvin] + } + + Dynamicshannon_wang_puglisi_weber_bers_2004FromCellMLCvode::~Dynamicshannon_wang_puglisi_weber_bers_2004FromCellMLCvode() + { + } + + + void Dynamicshannon_wang_puglisi_weber_bers_2004FromCellMLCvode::VerifyStateVariables() + { + + const double tol = 100*this->mAbsTol; + N_Vector rY = rGetStateVariables(); + std::string error_message = ""; + + for (unsigned i=0; i < 45; i++) + { + if(std::isnan(NV_Ith_S(rY, i))){ + error_message += "State variable " + this->rGetStateVariableNames()[i] + " is not a number\n"; + } + if(std::isinf(NV_Ith_S(rY, i))){ + error_message += "State variable " + this->rGetStateVariableNames()[i] + " has become INFINITE\n"; + } + if(this->is_concentration[i] && NV_Ith_S(rY, i) < -tol) + { + error_message += "Concentration " + this->rGetStateVariableNames()[i] + " below 0\n"; + } + if(this->is_probability[i] && NV_Ith_S(rY, i) < -tol) + { + error_message += "Probability " + this->rGetStateVariableNames()[i] + " below 0\n"; + } + if(this->is_probability[i] && NV_Ith_S(rY, i) > 1 + tol) + { + error_message += "Probability " + this->rGetStateVariableNames()[i] + " above 1\n"; + } + } + if (error_message != ""){ + EXCEPTION(DumpState(error_message)); + } + } + + double Dynamicshannon_wang_puglisi_weber_bers_2004FromCellMLCvode::GetIIonic(const std::vector* pStateVariables) + { + // For state variable interpolation (SVI) we read in interpolated state variables, + // otherwise for ionic current interpolation (ICI) we use the state variables of this model (node). + N_Vector rY; + bool made_new_cvode_vector = false; + if (!pStateVariables) + { + rY = rGetStateVariables(); + } + else + { + made_new_cvode_vector = true; + rY = MakeNVector(*pStateVariables); + } + double var_chaste_interface__cell__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : NV_Ith_S(rY, 0)); + // Units: millivolt; Initial value: -85.721630473733 + double var_chaste_interface__INa_h_gate__h = NV_Ith_S(rY, 2); + // Units: dimensionless; Initial value: 0.98714602875678 + double var_chaste_interface__INa_j_gate__j = NV_Ith_S(rY, 3); + // Units: dimensionless; Initial value: 0.991826348770428 + double var_chaste_interface__INa_m_gate__m = NV_Ith_S(rY, 4); + // Units: dimensionless; Initial value: 0.0013702407736465 + double var_chaste_interface__IKr_Xr_gate__Xr = NV_Ith_S(rY, 5); + // Units: dimensionless; Initial value: 0.00846906175020028 + double var_chaste_interface__IKs_Xs_gate__Xs = NV_Ith_S(rY, 6); + // Units: dimensionless; Initial value: 0.00613557812033723 + double var_chaste_interface__Itos_X_gate__X_tos = NV_Ith_S(rY, 7); + // Units: dimensionless; Initial value: 0.00401072468238921 + double var_chaste_interface__Itos_Y_gate__Y_tos = NV_Ith_S(rY, 8); + // Units: dimensionless; Initial value: 0.31555225368514 + double var_chaste_interface__Itos_R_gate__R_tos = NV_Ith_S(rY, 9); + // Units: dimensionless; Initial value: 0.402577243036347 + double var_chaste_interface__Itof_X_gate__X_tof = NV_Ith_S(rY, 10); + // Units: dimensionless; Initial value: 0.00401068798369438 + double var_chaste_interface__Itof_Y_gate__Y_tof = NV_Ith_S(rY, 11); + // Units: dimensionless; Initial value: 0.994632857675454 + double var_chaste_interface__ICaL_d_gate__d = NV_Ith_S(rY, 12); + // Units: dimensionless; Initial value: 6.99526086177479e-06 + double var_chaste_interface__ICaL_f_gate__f = NV_Ith_S(rY, 13); + // Units: dimensionless; Initial value: 1.00067601563206 + double var_chaste_interface__ICaL_fCa_gate__fCaB_SL = NV_Ith_S(rY, 14); + // Units: dimensionless; Initial value: 0.0150193299768419 + double var_chaste_interface__ICaL_fCa_gate__fCaB_jct = NV_Ith_S(rY, 15); + // Units: dimensionless; Initial value: 0.0244048782575591 + double var_chaste_interface__Na_buffer__Na_SL = NV_Ith_S(rY, 19); + // Units: millimolar; Initial value: 8.87161932058707 + double var_chaste_interface__Na_buffer__Na_jct = NV_Ith_S(rY, 20); + // Units: millimolar; Initial value: 8.87031835089116 + double var_chaste_interface__Na_buffer__Nai = NV_Ith_S(rY, 23); + // Units: millimolar; Initial value: 8.87200572571131 + double var_chaste_interface__Ca_buffer__Ca_SL = NV_Ith_S(rY, 25); + // Units: millimolar; Initial value: 0.000104971310105451 + double var_chaste_interface__Ca_buffer__Ca_jct = NV_Ith_S(rY, 26); + // Units: millimolar; Initial value: 0.000174045152623969 + + const double var_ICaL__Fx_ICaL_SL = 0.10000000000000001; // dimensionless + const double var_ICaL__Fx_ICaL_jct = 0.90000000000000002; // dimensionless + const double var_ICaL__PK = 2.7000000000000001e-7; // litre_per_farad_millisecond + const double var_ICaL__PNa = 1.4999999999999999e-8; // litre_per_farad_millisecond + const double var_ICaL__Q10_CaL = 1.8; // dimensionless + const double var_ICaL__gamma_Cai = 0.34100000000000003; // dimensionless + const double var_ICaL__gamma_Cao = 0.34100000000000003; // dimensionless + const double var_ICaL__gamma_Ki = 0.75; // dimensionless + const double var_ICaL__gamma_Ko = 0.75; // dimensionless + const double var_ICaL__gamma_Nai = 0.75; // dimensionless + const double var_ICaL__gamma_Nao = 0.75; // dimensionless + const double var_ICaL_fCa_gate__fCa_SL = 1 - var_chaste_interface__ICaL_fCa_gate__fCaB_SL; // dimensionless + const double var_ICaL_fCa_gate__fCa_jct = 1 - var_chaste_interface__ICaL_fCa_gate__fCaB_jct; // dimensionless + const double var_ICab__Fx_CaBk_SL = 0.89000000000000001; // dimensionless + const double var_ICab__Fx_CaBk_jct = 0.11; // dimensionless + const double var_ICab__G_CaBk = 0.00025129999999999998; // milliS_per_microF + const double var_ICap__Fx_SLCaP_SL = 0.89000000000000001; // dimensionless + const double var_ICap__Fx_SLCaP_jct = 0.11; // dimensionless + const double var_ICap__H = 1.6000000000000001; // dimensionless + const double var_ICap__Km = 0.00050000000000000001; // millimolar + const double var_ICap__Q10_SLCaP = 2.3500000000000001; // dimensionless + const double var_ICap__V_maxAF = 0.067299999999999999; // microA_per_microF + const double var_ICl_Ca__Fx_Cl_SL = 0.89000000000000001; // dimensionless + const double var_ICl_Ca__Fx_Cl_jct = 0.11; // dimensionless + const double var_ICl_Ca__G_Cl = 0.109625; // milliS_per_microF + const double var_ICl_Ca__Kd_ClCa = 0.10000000000000001; // millimolar + const double var_IKs__Fx_Ks_SL = 0.89000000000000001; // dimensionless + const double var_IKs__Fx_Ks_jct = 0.11; // dimensionless + const double var_IKs__pCa_SL = 3 - log10(var_chaste_interface__Ca_buffer__Ca_SL); // dimensionless + const double var_IKs__G_Ks_SL = (0.057000000000000002 + 0.19 / (1 + exp(-12 + 1.6666666666666667 * var_IKs__pCa_SL))) * NV_Ith_S(mParameters, 20); // milliS_per_microF + const double var_IKs__pCa_jct = 3 - log10(var_chaste_interface__Ca_buffer__Ca_jct); // dimensionless + const double var_IKs__G_Ks_jct = (0.057000000000000002 + 0.19 / (1 + exp(-12 + 1.6666666666666667 * var_IKs__pCa_jct))) * NV_Ith_S(mParameters, 20); // milliS_per_microF + const double var_IKs__pKNa = 0.018329999999999999; // dimensionless + const double var_INa__Fx_Na_SL = 0.89000000000000001; // dimensionless + const double var_INa__Fx_Na_jct = 0.11; // dimensionless + const double var_INaCa__Fx_NCX_SL = 0.89000000000000001; // dimensionless + const double var_INaCa__Fx_NCX_jct = 0.11; // dimensionless + const double var_INaCa__HNa = 3; // dimensionless + const double var_INaCa__K_mCai = 0.0035899999999999999; // millimolar + const double var_INaCa__K_mCao = 1.3; // millimolar + const double var_INaCa__K_mNai = 12.289999999999999; // millimolar + const double var_INaCa__K_mNao = 87.5; // millimolar + const double var_INaCa__Kd_act = 0.00025599999999999999; // millimolar + const double var_INaCa__Ka_SL = 1 / (1 + pow(var_INaCa__Kd_act, 3) / pow(var_chaste_interface__Ca_buffer__Ca_SL, 3)); // dimensionless + const double var_INaCa__Ka_jct = 1 / (1 + pow(var_INaCa__Kd_act, 3) / pow(var_chaste_interface__Ca_buffer__Ca_jct, 3)); // dimensionless + const double var_INaCa__Q10_NCX = 1.5700000000000001; // dimensionless + const double var_INaCa__eta = 0.34999999999999998; // dimensionless + const double var_INaCa__ksat = 0.27000000000000002; // dimensionless + const double var_INaK__Fx_NaK_SL = 0.89000000000000001; // dimensionless + const double var_INaK__Fx_NaK_jct = 0.11; // dimensionless + const double var_INaK__H_NaK = 4; // dimensionless + const double var_INaK__I_NaK_max = 1.9099999999999999; // microA_per_microF + const double var_INaK__Km_Ko = 1.5; // millimolar + const double var_INaK__Km_Nai = 11; // millimolar + const double var_INaK__Q10_Km_Nai = 1.49; // dimensionless + const double var_INaK__Q10_NaK = 1.6299999999999999; // dimensionless + const double var_INa__openProb = pow(var_chaste_interface__INa_m_gate__m, 3) * var_chaste_interface__INa_h_gate__h * var_chaste_interface__INa_j_gate__j; // dimensionless + const double var_INab__Fx_NaBk_SL = 0.89000000000000001; // dimensionless + const double var_INab__Fx_NaBk_jct = 0.11; // dimensionless + const double var_INab__G_NaBk = 0.00029700000000000001; // milliS_per_microF + const double var_IKr_Rr_gate__Rr = 1 / (1 + exp(1.4732142857142858 + 0.044642857142857144 * var_chaste_interface__cell__V)); // dimensionless + const double var_IK1__G_K1 = 0.43033148291193518 * sqrt(NV_Ith_S(mParameters, 8)) * NV_Ith_S(mParameters, 18); // milliS_per_microF + const double var_IKr__G_IKr = 0.43033148291193518 * sqrt(NV_Ith_S(mParameters, 8)) * NV_Ith_S(mParameters, 19); // milliS_per_microF + const double var_INaK__sigma = -0.14285714285714285 + 0.14285714285714285 * exp(0.01485884101040119 * NV_Ith_S(mParameters, 9)); // dimensionless + const double var_ICaL__Q_CaL = pow(var_ICaL__Q10_CaL, (-31 + 0.10000000000000001 * NV_Ith_S(mParameters, 23))); // dimensionless + const double var_ICaL__temp = 0.45000000000000001 * pow(NV_Ith_S(mParameters, 10), 2) * var_ICaL__Q_CaL * var_chaste_interface__ICaL_d_gate__d * var_chaste_interface__ICaL_f_gate__f * var_chaste_interface__cell__V / (NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 23)); // coulomb_per_mole + const double var_ICaL__i_CaL_Ca_SL = 4 * (-var_ICaL__gamma_Cao * NV_Ith_S(mParameters, 6) + var_chaste_interface__Ca_buffer__Ca_SL * var_ICaL__gamma_Cai * exp(2 * var_chaste_interface__cell__V * NV_Ith_S(mParameters, 10) / (NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 23)))) * var_ICaL__Fx_ICaL_SL * NV_Ith_S(mParameters, 12) * var_ICaL__temp * var_ICaL_fCa_gate__fCa_SL / (-1 + exp(2 * var_chaste_interface__cell__V * NV_Ith_S(mParameters, 10) / (NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 23)))); // microA_per_microF + const double var_ICaL__i_CaL_Ca_jct = 4 * (-var_ICaL__gamma_Cao * NV_Ith_S(mParameters, 6) + var_chaste_interface__Ca_buffer__Ca_jct * var_ICaL__gamma_Cai * exp(2 * var_chaste_interface__cell__V * NV_Ith_S(mParameters, 10) / (NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 23)))) * var_ICaL__Fx_ICaL_jct * NV_Ith_S(mParameters, 12) * var_ICaL__temp * var_ICaL_fCa_gate__fCa_jct / (-1 + exp(2 * var_chaste_interface__cell__V * NV_Ith_S(mParameters, 10) / (NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 23)))); // microA_per_microF + const double var_ICaL__i_CaL_K = (var_ICaL__Fx_ICaL_SL * var_ICaL_fCa_gate__fCa_SL + var_ICaL__Fx_ICaL_jct * var_ICaL_fCa_gate__fCa_jct) * (-var_ICaL__gamma_Ko * NV_Ith_S(mParameters, 8) + var_ICaL__gamma_Ki * NV_Ith_S(mParameters, 5) * exp(var_chaste_interface__cell__V * NV_Ith_S(mParameters, 10) / (NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 23)))) * var_ICaL__PK * var_ICaL__temp / (-1 + exp(var_chaste_interface__cell__V * NV_Ith_S(mParameters, 10) / (NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 23)))); // microA_per_microF + const double var_ICaL__i_CaL_Na_SL = (-var_ICaL__gamma_Nao * NV_Ith_S(mParameters, 9) + var_ICaL__gamma_Nai * var_chaste_interface__Na_buffer__Na_SL * exp(var_chaste_interface__cell__V * NV_Ith_S(mParameters, 10) / (NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 23)))) * var_ICaL__Fx_ICaL_SL * var_ICaL__PNa * var_ICaL__temp * var_ICaL_fCa_gate__fCa_SL / (-1 + exp(var_chaste_interface__cell__V * NV_Ith_S(mParameters, 10) / (NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 23)))); // microA_per_microF + const double var_ICaL__i_CaL_Na_jct = (-var_ICaL__gamma_Nao * NV_Ith_S(mParameters, 9) + var_ICaL__gamma_Nai * var_chaste_interface__Na_buffer__Na_jct * exp(var_chaste_interface__cell__V * NV_Ith_S(mParameters, 10) / (NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 23)))) * var_ICaL__Fx_ICaL_jct * var_ICaL__PNa * var_ICaL__temp * var_ICaL_fCa_gate__fCa_jct / (-1 + exp(var_chaste_interface__cell__V * NV_Ith_S(mParameters, 10) / (NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 23)))); // microA_per_microF + const double var_ICaL__i_CaL = var_ICaL__i_CaL_Ca_SL + var_ICaL__i_CaL_Ca_jct + var_ICaL__i_CaL_K + var_ICaL__i_CaL_Na_SL + var_ICaL__i_CaL_Na_jct; // microA_per_microF + const double var_ICaL__i_CaL_converted = HeartConfig::Instance()->GetCapacitance() * var_ICaL__i_CaL; // uA_per_cm2 + const double var_ICap__Q_SLCaP = pow(var_ICap__Q10_SLCaP, (-31 + 0.10000000000000001 * NV_Ith_S(mParameters, 23))); // dimensionless + const double var_ICap__i_Cap_SL = var_ICap__Fx_SLCaP_SL * var_ICap__Q_SLCaP * var_ICap__V_maxAF / (1 + pow((var_ICap__Km / var_chaste_interface__Ca_buffer__Ca_SL), var_ICap__H)); // microA_per_microF + const double var_ICap__i_Cap_jct = var_ICap__Fx_SLCaP_jct * var_ICap__Q_SLCaP * var_ICap__V_maxAF / (1 + pow((var_ICap__Km / var_chaste_interface__Ca_buffer__Ca_jct), var_ICap__H)); // microA_per_microF + const double var_ICap__i_Cap = var_ICap__i_Cap_SL + var_ICap__i_Cap_jct; // microA_per_microF + const double var_ICap__i_Cap_converted = HeartConfig::Instance()->GetCapacitance() * var_ICap__i_Cap; // uA_per_cm2 + const double var_IKs__E_Ks = NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 23) * log((var_IKs__pKNa * NV_Ith_S(mParameters, 9) + NV_Ith_S(mParameters, 8)) / (var_IKs__pKNa * var_chaste_interface__Na_buffer__Nai + NV_Ith_S(mParameters, 5))) / NV_Ith_S(mParameters, 10); // millivolt + const double var_IKs__i_Ks_SL = pow(var_chaste_interface__IKs_Xs_gate__Xs, 2) * (-var_IKs__E_Ks + var_chaste_interface__cell__V) * var_IKs__Fx_Ks_SL * var_IKs__G_Ks_SL; // microA_per_microF + const double var_IKs__i_Ks_jct = pow(var_chaste_interface__IKs_Xs_gate__Xs, 2) * (-var_IKs__E_Ks + var_chaste_interface__cell__V) * var_IKs__Fx_Ks_jct * var_IKs__G_Ks_jct; // microA_per_microF + const double var_IKs__i_Ks = var_IKs__i_Ks_SL + var_IKs__i_Ks_jct; // microA_per_microF + const double var_IKs__i_Ks_converted = HeartConfig::Instance()->GetCapacitance() * var_IKs__i_Ks; // uA_per_cm2 + const double var_INaCa__Q_NCX = pow(var_INaCa__Q10_NCX, (-31 + 0.10000000000000001 * NV_Ith_S(mParameters, 23))); // dimensionless + const double var_INaCa__temp_SL = (pow(var_chaste_interface__Na_buffer__Na_SL, var_INaCa__HNa) * NV_Ith_S(mParameters, 6) * exp(var_INaCa__eta * var_chaste_interface__cell__V * NV_Ith_S(mParameters, 10) / (NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 23))) - pow(NV_Ith_S(mParameters, 9), var_INaCa__HNa) * var_chaste_interface__Ca_buffer__Ca_SL * exp((-1 + var_INaCa__eta) * var_chaste_interface__cell__V * NV_Ith_S(mParameters, 10) / (NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 23)))) / (1 + var_INaCa__ksat * exp((-1 + var_INaCa__eta) * var_chaste_interface__cell__V * NV_Ith_S(mParameters, 10) / (NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 23)))); // millimolar4 + const double var_INaCa__i_NaCa_SL = var_INaCa__Fx_NCX_SL * var_INaCa__Ka_SL * var_INaCa__Q_NCX * NV_Ith_S(mParameters, 22) * var_INaCa__temp_SL / (pow(var_chaste_interface__Na_buffer__Na_SL, var_INaCa__HNa) * var_INaCa__K_mCao + pow(var_chaste_interface__Na_buffer__Na_SL, var_INaCa__HNa) * NV_Ith_S(mParameters, 6) + pow(NV_Ith_S(mParameters, 9), var_INaCa__HNa) * var_chaste_interface__Ca_buffer__Ca_SL + pow(var_INaCa__K_mNao, var_INaCa__HNa) * (1 + var_chaste_interface__Ca_buffer__Ca_SL / var_INaCa__K_mCai) * var_chaste_interface__Ca_buffer__Ca_SL + pow(NV_Ith_S(mParameters, 9), var_INaCa__HNa) * (1 + pow((var_chaste_interface__Na_buffer__Na_SL / var_INaCa__K_mNai), var_INaCa__HNa)) * var_INaCa__K_mCai); // microA_per_microF + const double var_INaCa__temp_jct = (pow(var_chaste_interface__Na_buffer__Na_jct, var_INaCa__HNa) * NV_Ith_S(mParameters, 6) * exp(var_INaCa__eta * var_chaste_interface__cell__V * NV_Ith_S(mParameters, 10) / (NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 23))) - pow(NV_Ith_S(mParameters, 9), var_INaCa__HNa) * var_chaste_interface__Ca_buffer__Ca_jct * exp((-1 + var_INaCa__eta) * var_chaste_interface__cell__V * NV_Ith_S(mParameters, 10) / (NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 23)))) / (1 + var_INaCa__ksat * exp((-1 + var_INaCa__eta) * var_chaste_interface__cell__V * NV_Ith_S(mParameters, 10) / (NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 23)))); // millimolar4 + const double var_INaCa__i_NaCa_jct = var_INaCa__Fx_NCX_jct * var_INaCa__Ka_jct * var_INaCa__Q_NCX * NV_Ith_S(mParameters, 22) * var_INaCa__temp_jct / (pow(var_chaste_interface__Na_buffer__Na_jct, var_INaCa__HNa) * var_INaCa__K_mCao + pow(var_chaste_interface__Na_buffer__Na_jct, var_INaCa__HNa) * NV_Ith_S(mParameters, 6) + pow(NV_Ith_S(mParameters, 9), var_INaCa__HNa) * var_chaste_interface__Ca_buffer__Ca_jct + pow(var_INaCa__K_mNao, var_INaCa__HNa) * (1 + var_chaste_interface__Ca_buffer__Ca_jct / var_INaCa__K_mCai) * var_chaste_interface__Ca_buffer__Ca_jct + pow(NV_Ith_S(mParameters, 9), var_INaCa__HNa) * (1 + pow((var_chaste_interface__Na_buffer__Na_jct / var_INaCa__K_mNai), var_INaCa__HNa)) * var_INaCa__K_mCai); // microA_per_microF + const double var_INaCa__i_NaCa = var_INaCa__i_NaCa_SL + var_INaCa__i_NaCa_jct; // microA_per_microF + const double var_INaCa__i_NaCa_converted = HeartConfig::Instance()->GetCapacitance() * var_INaCa__i_NaCa; // uA_per_cm2 + const double var_INaK__Q_Km_Nai = pow(var_INaK__Q10_Km_Nai, (-31 + 0.10000000000000001 * NV_Ith_S(mParameters, 23))); // dimensionless + const double var_INaK__Q_NaK = pow(var_INaK__Q10_NaK, (-31 + 0.10000000000000001 * NV_Ith_S(mParameters, 23))); // dimensionless + const double var_INaK__f_NaK = 1 / (1 + 0.1245 * exp(-0.10000000000000001 * var_chaste_interface__cell__V * NV_Ith_S(mParameters, 10) / (NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 23))) + 0.036499999999999998 * var_INaK__sigma * exp(-var_chaste_interface__cell__V * NV_Ith_S(mParameters, 10) / (NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 23)))); // dimensionless + const double var_INaK__i_NaK_SL = var_INaK__Fx_NaK_SL * var_INaK__I_NaK_max * var_INaK__Q_NaK * var_INaK__f_NaK * NV_Ith_S(mParameters, 8) / ((1 + pow((var_INaK__Km_Nai * var_INaK__Q_Km_Nai / var_chaste_interface__Na_buffer__Na_SL), var_INaK__H_NaK)) * (var_INaK__Km_Ko + NV_Ith_S(mParameters, 8))); // microA_per_microF + const double var_INaK__i_NaK_jct = var_INaK__Fx_NaK_jct * var_INaK__I_NaK_max * var_INaK__Q_NaK * var_INaK__f_NaK * NV_Ith_S(mParameters, 8) / ((1 + pow((var_INaK__Km_Nai * var_INaK__Q_Km_Nai / var_chaste_interface__Na_buffer__Na_jct), var_INaK__H_NaK)) * (var_INaK__Km_Ko + NV_Ith_S(mParameters, 8))); // microA_per_microF + const double var_INaK__i_NaK = var_INaK__i_NaK_SL + var_INaK__i_NaK_jct; // microA_per_microF + const double var_reversal_potentials__E_Ca_SL = 0.5 * NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 23) * log(NV_Ith_S(mParameters, 6) / var_chaste_interface__Ca_buffer__Ca_SL) / NV_Ith_S(mParameters, 10); // millivolt + const double var_ICab__i_Cab_SL = (-var_reversal_potentials__E_Ca_SL + var_chaste_interface__cell__V) * var_ICab__Fx_CaBk_SL * var_ICab__G_CaBk; // microA_per_microF + const double var_reversal_potentials__E_Ca_jct = 0.5 * NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 23) * log(NV_Ith_S(mParameters, 6) / var_chaste_interface__Ca_buffer__Ca_jct) / NV_Ith_S(mParameters, 10); // millivolt + const double var_ICab__i_Cab_jct = (-var_reversal_potentials__E_Ca_jct + var_chaste_interface__cell__V) * var_ICab__Fx_CaBk_jct * var_ICab__G_CaBk; // microA_per_microF + const double var_ICab__i_Cab = var_ICab__i_Cab_SL + var_ICab__i_Cab_jct; // microA_per_microF + const double var_ICab__i_Cab_converted = HeartConfig::Instance()->GetCapacitance() * var_ICab__i_Cab; // uA_per_cm2 + const double var_reversal_potentials__E_Cl = -NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 23) * log(NV_Ith_S(mParameters, 7) / NV_Ith_S(mParameters, 4)) / NV_Ith_S(mParameters, 10); // millivolt + const double var_ICl_Ca__i_Cl_Ca = (-var_reversal_potentials__E_Cl + var_chaste_interface__cell__V) * (var_ICl_Ca__Fx_Cl_SL / (1 + var_ICl_Ca__Kd_ClCa / var_chaste_interface__Ca_buffer__Ca_SL) + var_ICl_Ca__Fx_Cl_jct / (1 + var_ICl_Ca__Kd_ClCa / var_chaste_interface__Ca_buffer__Ca_jct)) * var_ICl_Ca__G_Cl; // microA_per_microF + const double var_IClb__i_Clb = (-var_reversal_potentials__E_Cl + var_chaste_interface__cell__V) * NV_Ith_S(mParameters, 13); // microA_per_microF + const double var_IClb__i_Clb_converted = HeartConfig::Instance()->GetCapacitance() * var_IClb__i_Clb; // uA_per_cm2 + const double var_reversal_potentials__E_K = NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 23) * log(NV_Ith_S(mParameters, 8) / NV_Ith_S(mParameters, 5)) / NV_Ith_S(mParameters, 10); // millivolt + const double var_IK1_K1_gate__alpha_K1 = 1.02 / (1 + exp(-14.1227775 + 0.23849999999999999 * var_chaste_interface__cell__V - 0.23849999999999999 * var_reversal_potentials__E_K)); // per_millisecond + const double var_IK1_K1_gate__beta_K1 = (exp(-36.698642499999998 + 0.061749999999999999 * var_chaste_interface__cell__V - 0.061749999999999999 * var_reversal_potentials__E_K) + 0.49124000000000001 * exp(0.43983232 + 0.080320000000000003 * var_chaste_interface__cell__V - 0.080320000000000003 * var_reversal_potentials__E_K)) / (1 + exp(-2.4444678999999998 + 0.51429999999999998 * var_reversal_potentials__E_K - 0.51429999999999998 * var_chaste_interface__cell__V)); // per_millisecond + const double var_IK1_K1_gate__K1_infinity = var_IK1_K1_gate__alpha_K1 / (var_IK1_K1_gate__alpha_K1 + var_IK1_K1_gate__beta_K1); // dimensionless + const double var_IK1__i_K1 = (-var_reversal_potentials__E_K + var_chaste_interface__cell__V) * var_IK1__G_K1 * var_IK1_K1_gate__K1_infinity; // microA_per_microF + const double var_IK1__i_K1_converted = HeartConfig::Instance()->GetCapacitance() * var_IK1__i_K1; // uA_per_cm2 + const double var_IKr__i_Kr = (-var_reversal_potentials__E_K + var_chaste_interface__cell__V) * var_IKr__G_IKr * var_IKr_Rr_gate__Rr * var_chaste_interface__IKr_Xr_gate__Xr; // microA_per_microF + const double var_IKr__i_Kr_converted = HeartConfig::Instance()->GetCapacitance() * var_IKr__i_Kr; // uA_per_cm2 + const double var_Itof__i_tof = (-var_reversal_potentials__E_K + var_chaste_interface__cell__V) * NV_Ith_S(mParameters, 17) * var_chaste_interface__Itof_X_gate__X_tof * var_chaste_interface__Itof_Y_gate__Y_tof; // microA_per_microF + const double var_Itof__i_tof_converted = HeartConfig::Instance()->GetCapacitance() * var_Itof__i_tof; // uA_per_cm2 + const double var_Itos__i_tos = (-var_reversal_potentials__E_K + var_chaste_interface__cell__V) * (0.5 * var_chaste_interface__Itos_R_gate__R_tos + var_chaste_interface__Itos_Y_gate__Y_tos) * NV_Ith_S(mParameters, 21) * var_chaste_interface__Itos_X_gate__X_tos; // microA_per_microF + const double var_Itos__i_tos_converted = HeartConfig::Instance()->GetCapacitance() * var_Itos__i_tos; // uA_per_cm2 + const double var_reversal_potentials__E_Na_SL = NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 23) * log(NV_Ith_S(mParameters, 9) / var_chaste_interface__Na_buffer__Na_SL) / NV_Ith_S(mParameters, 10); // millivolt + const double var_INa__i_Na_SL = (-var_reversal_potentials__E_Na_SL + var_chaste_interface__cell__V) * var_INa__Fx_Na_SL * NV_Ith_S(mParameters, 14) * var_INa__openProb; // microA_per_microF + const double var_INab__i_Nab_SL = (-var_reversal_potentials__E_Na_SL + var_chaste_interface__cell__V) * var_INab__Fx_NaBk_SL * var_INab__G_NaBk; // microA_per_microF + const double var_reversal_potentials__E_Na_jct = NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 23) * log(NV_Ith_S(mParameters, 9) / var_chaste_interface__Na_buffer__Na_jct) / NV_Ith_S(mParameters, 10); // millivolt + const double var_INa__i_Na_jct = (-var_reversal_potentials__E_Na_jct + var_chaste_interface__cell__V) * var_INa__Fx_Na_jct * NV_Ith_S(mParameters, 14) * var_INa__openProb; // microA_per_microF + const double var_INa__i_Na = var_INa__i_Na_SL + var_INa__i_Na_jct; // microA_per_microF + const double var_INa__i_Na_converted = HeartConfig::Instance()->GetCapacitance() * var_INa__i_Na; // uA_per_cm2 + const double var_INab__i_Nab_jct = (-var_reversal_potentials__E_Na_jct + var_chaste_interface__cell__V) * var_INab__Fx_NaBk_jct * var_INab__G_NaBk; // microA_per_microF + const double var_INab__i_Nab = var_INab__i_Nab_SL + var_INab__i_Nab_jct; // microA_per_microF + const double var_INab__i_Nab_converted = HeartConfig::Instance()->GetCapacitance() * var_INab__i_Nab; // uA_per_cm2 + const double var_chaste_interface__i_ionic = HeartConfig::Instance()->GetCapacitance() * var_ICl_Ca__i_Cl_Ca + HeartConfig::Instance()->GetCapacitance() * var_INaK__i_NaK + var_ICaL__i_CaL_converted + var_ICab__i_Cab_converted + var_ICap__i_Cap_converted + var_IClb__i_Clb_converted + var_IK1__i_K1_converted + var_IKr__i_Kr_converted + var_IKs__i_Ks_converted + var_INa__i_Na_converted + var_INaCa__i_NaCa_converted + var_INab__i_Nab_converted + var_Itof__i_tof_converted + var_Itos__i_tos_converted; // uA_per_cm2 + + const double i_ionic = var_chaste_interface__i_ionic; + if (made_new_cvode_vector) + { + DeleteVector(rY); + } + EXCEPT_IF_NOT(!std::isnan(i_ionic)); + return i_ionic; + } + + void Dynamicshannon_wang_puglisi_weber_bers_2004FromCellMLCvode::EvaluateYDerivatives(double var_chaste_interface__environment__time, const N_Vector rY, N_Vector rDY) + { + // Inputs: + // Time units: millisecond + double var_chaste_interface__cell__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : NV_Ith_S(rY, 0)); + // Units: millivolt; Initial value: -85.721630473733 + double var_chaste_interface__Ca_buffer__Cai = NV_Ith_S(rY, 1); + // Units: millimolar; Initial value: 8.6504944644883e-05 + double var_chaste_interface__INa_h_gate__h = NV_Ith_S(rY, 2); + // Units: dimensionless; Initial value: 0.98714602875678 + double var_chaste_interface__INa_j_gate__j = NV_Ith_S(rY, 3); + // Units: dimensionless; Initial value: 0.991826348770428 + double var_chaste_interface__INa_m_gate__m = NV_Ith_S(rY, 4); + // Units: dimensionless; Initial value: 0.0013702407736465 + double var_chaste_interface__IKr_Xr_gate__Xr = NV_Ith_S(rY, 5); + // Units: dimensionless; Initial value: 0.00846906175020028 + double var_chaste_interface__IKs_Xs_gate__Xs = NV_Ith_S(rY, 6); + // Units: dimensionless; Initial value: 0.00613557812033723 + double var_chaste_interface__Itos_X_gate__X_tos = NV_Ith_S(rY, 7); + // Units: dimensionless; Initial value: 0.00401072468238921 + double var_chaste_interface__Itos_Y_gate__Y_tos = NV_Ith_S(rY, 8); + // Units: dimensionless; Initial value: 0.31555225368514 + double var_chaste_interface__Itos_R_gate__R_tos = NV_Ith_S(rY, 9); + // Units: dimensionless; Initial value: 0.402577243036347 + double var_chaste_interface__Itof_X_gate__X_tof = NV_Ith_S(rY, 10); + // Units: dimensionless; Initial value: 0.00401068798369438 + double var_chaste_interface__Itof_Y_gate__Y_tof = NV_Ith_S(rY, 11); + // Units: dimensionless; Initial value: 0.994632857675454 + double var_chaste_interface__ICaL_d_gate__d = NV_Ith_S(rY, 12); + // Units: dimensionless; Initial value: 6.99526086177479e-06 + double var_chaste_interface__ICaL_f_gate__f = NV_Ith_S(rY, 13); + // Units: dimensionless; Initial value: 1.00067601563206 + double var_chaste_interface__ICaL_fCa_gate__fCaB_SL = NV_Ith_S(rY, 14); + // Units: dimensionless; Initial value: 0.0150193299768419 + double var_chaste_interface__ICaL_fCa_gate__fCaB_jct = NV_Ith_S(rY, 15); + // Units: dimensionless; Initial value: 0.0244048782575591 + double var_chaste_interface__Jrel_SR__R = NV_Ith_S(rY, 16); + // Units: dimensionless; Initial value: 0.890917121306535 + double var_chaste_interface__Jrel_SR__I = NV_Ith_S(rY, 17); + // Units: dimensionless; Initial value: 8.71752603681652e-08 + double var_chaste_interface__Jrel_SR__O = NV_Ith_S(rY, 18); + // Units: dimensionless; Initial value: 7.1199533741995e-07 + double var_chaste_interface__Na_buffer__Na_SL = NV_Ith_S(rY, 19); + // Units: millimolar; Initial value: 8.87161932058707 + double var_chaste_interface__Na_buffer__Na_jct = NV_Ith_S(rY, 20); + // Units: millimolar; Initial value: 8.87031835089116 + double var_chaste_interface__Na_buffer__Na_SL_buf = NV_Ith_S(rY, 21); + // Units: millimolar; Initial value: 0.77606800956492 + double var_chaste_interface__Na_buffer__Na_jct_buf = NV_Ith_S(rY, 22); + // Units: millimolar; Initial value: 3.55668431730337 + double var_chaste_interface__Na_buffer__Nai = NV_Ith_S(rY, 23); + // Units: millimolar; Initial value: 8.87200572571131 + double var_chaste_interface__Ca_buffer__Ca_SR = NV_Ith_S(rY, 24); + // Units: millimolar; Initial value: 0.547125831028543 + double var_chaste_interface__Ca_buffer__Ca_SL = NV_Ith_S(rY, 25); + // Units: millimolar; Initial value: 0.000104971310105451 + double var_chaste_interface__Ca_buffer__Ca_jct = NV_Ith_S(rY, 26); + // Units: millimolar; Initial value: 0.000174045152623969 + double var_chaste_interface__Ca_buffer__Ca_SLB_SL = NV_Ith_S(rY, 27); + // Units: millimolar; Initial value: 0.00973710481246467 + double var_chaste_interface__Ca_buffer__Ca_SLB_jct = NV_Ith_S(rY, 28); + // Units: millimolar; Initial value: 0.00774564218017916 + double var_chaste_interface__Ca_buffer__Ca_SLHigh_SL = NV_Ith_S(rY, 29); + // Units: millimolar; Initial value: 0.113168405274355 + double var_chaste_interface__Ca_buffer__Ca_SLHigh_jct = NV_Ith_S(rY, 30); + // Units: millimolar; Initial value: 0.0772568134367606 + double var_chaste_interface__Ca_buffer__Ca_Calsequestrin = NV_Ith_S(rY, 31); + // Units: millimolar; Initial value: 1.18828527890062 + double var_chaste_interface__cytosolic_Ca_buffer__Ca_TroponinC = NV_Ith_S(rY, 32); + // Units: millimolar; Initial value: 0.00886665040283094 + double var_chaste_interface__cytosolic_Ca_buffer__Ca_TroponinC_Ca_Mg = NV_Ith_S(rY, 33); + // Units: millimolar; Initial value: 0.117873278193472 + double var_chaste_interface__cytosolic_Ca_buffer__Mg_TroponinC_Ca_Mg = NV_Ith_S(rY, 34); + // Units: millimolar; Initial value: 0.0103906683506505 + double var_chaste_interface__cytosolic_Ca_buffer__Ca_Calmodulin = NV_Ith_S(rY, 35); + // Units: millimolar; Initial value: 0.000293073957804278 + double var_chaste_interface__cytosolic_Ca_buffer__Ca_Myosin = NV_Ith_S(rY, 36); + // Units: millimolar; Initial value: 0.00195899238146509 + double var_chaste_interface__cytosolic_Ca_buffer__Mg_Myosin = NV_Ith_S(rY, 37); + // Units: millimolar; Initial value: 0.137523520981802 + double var_chaste_interface__cytosolic_Ca_buffer__Ca_SRB = NV_Ith_S(rY, 38); + // Units: millimolar; Initial value: 0.00215728901718264 + double var_chaste_interface__indo_fluo_Ca_buffer_not_connected__Ca_Indo1_Cytosol = NV_Ith_S(rY, 39); + // Units: millimolar; Initial value: 0.0 + double var_chaste_interface__indo_fluo_Ca_buffer_not_connected__Ca_Indo1_SL = NV_Ith_S(rY, 40); + // Units: millimolar; Initial value: 0.0 + double var_chaste_interface__indo_fluo_Ca_buffer_not_connected__Ca_Indo1_jct = NV_Ith_S(rY, 41); + // Units: millimolar; Initial value: 0.0 + double var_chaste_interface__indo_fluo_Ca_buffer_not_connected__Ca_Fluo3_Cytosol = NV_Ith_S(rY, 42); + // Units: millimolar; Initial value: 0.0 + double var_chaste_interface__indo_fluo_Ca_buffer_not_connected__Ca_Fluo3_SL = NV_Ith_S(rY, 43); + // Units: millimolar; Initial value: 0.0 + double var_chaste_interface__indo_fluo_Ca_buffer_not_connected__Ca_Fluo3_jct = NV_Ith_S(rY, 44); + // Units: millimolar; Initial value: 0.0 + + // Mathematics + double d_dt_chaste_interface_var_cell__V; + const double var_Ca_buffer__Bmax_Calsequestrin = 0.14000000000000001; // millimolar + const double var_Ca_buffer__Bmax_SLB_SL = 0.037400000000000003; // millimolar + const double var_Ca_buffer__Bmax_SLB_jct = 0.0045999999999999999; // millimolar + const double var_Ca_buffer__Bmax_SLHigh_SL = 0.0134; // millimolar + const double var_Ca_buffer__Bmax_SLHigh_jct = 0.00165; // millimolar + const double var_Ca_buffer__koff_Calsequestrin = 65; // per_millisecond + const double var_Ca_buffer__koff_SLB = 1.3; // per_millisecond + const double var_Ca_buffer__koff_SLHigh = 0.029999999999999999; // per_millisecond + const double var_Ca_buffer__kon_Calsequestrin = 100; // per_millimolar_per_millisecond + const double var_Ca_buffer__kon_SL = 100; // per_millimolar_per_millisecond + const double var_ICaL__Fx_ICaL_SL = 0.10000000000000001; // dimensionless + const double var_ICaL__Fx_ICaL_jct = 0.90000000000000002; // dimensionless + const double var_ICaL__PNa = 1.4999999999999999e-8; // litre_per_farad_millisecond + const double var_ICaL__Q10_CaL = 1.8; // dimensionless + const double var_ICaL__gamma_Cai = 0.34100000000000003; // dimensionless + const double var_ICaL__gamma_Cao = 0.34100000000000003; // dimensionless + const double var_ICaL__gamma_Nai = 0.75; // dimensionless + const double var_ICaL__gamma_Nao = 0.75; // dimensionless + const double d_dt_chaste_interface_var_ICaL_fCa_gate__fCaB_SL = -0.011900000000000001 * var_chaste_interface__ICaL_fCa_gate__fCaB_SL + 1.7 * (1 - var_chaste_interface__ICaL_fCa_gate__fCaB_SL) * var_chaste_interface__Ca_buffer__Ca_SL; // 1 / millisecond + const double d_dt_chaste_interface_var_ICaL_fCa_gate__fCaB_jct = -0.011900000000000001 * var_chaste_interface__ICaL_fCa_gate__fCaB_jct + 1.7 * (1 - var_chaste_interface__ICaL_fCa_gate__fCaB_jct) * var_chaste_interface__Ca_buffer__Ca_jct; // 1 / millisecond + const double var_ICaL_fCa_gate__fCa_SL = 1 - var_chaste_interface__ICaL_fCa_gate__fCaB_SL; // dimensionless + const double var_ICaL_fCa_gate__fCa_jct = 1 - var_chaste_interface__ICaL_fCa_gate__fCaB_jct; // dimensionless + const double var_ICab__Fx_CaBk_SL = 0.89000000000000001; // dimensionless + const double var_ICab__Fx_CaBk_jct = 0.11; // dimensionless + const double var_ICab__G_CaBk = 0.00025129999999999998; // milliS_per_microF + const double var_ICap__Fx_SLCaP_SL = 0.89000000000000001; // dimensionless + const double var_ICap__Fx_SLCaP_jct = 0.11; // dimensionless + const double var_ICap__H = 1.6000000000000001; // dimensionless + const double var_ICap__Km = 0.00050000000000000001; // millimolar + const double var_ICap__Q10_SLCaP = 2.3500000000000001; // dimensionless + const double var_ICap__V_maxAF = 0.067299999999999999; // microA_per_microF + const double var_INa__Fx_Na_SL = 0.89000000000000001; // dimensionless + const double var_INa__Fx_Na_jct = 0.11; // dimensionless + const double var_INaCa__Fx_NCX_SL = 0.89000000000000001; // dimensionless + const double var_INaCa__Fx_NCX_jct = 0.11; // dimensionless + const double var_INaCa__HNa = 3; // dimensionless + const double var_INaCa__K_mCai = 0.0035899999999999999; // millimolar + const double var_INaCa__K_mCao = 1.3; // millimolar + const double var_INaCa__K_mNai = 12.289999999999999; // millimolar + const double var_INaCa__K_mNao = 87.5; // millimolar + const double var_INaCa__Kd_act = 0.00025599999999999999; // millimolar + const double var_INaCa__Ka_SL = 1 / (1 + pow(var_INaCa__Kd_act, 3) / pow(var_chaste_interface__Ca_buffer__Ca_SL, 3)); // dimensionless + const double var_INaCa__Ka_jct = 1 / (1 + pow(var_INaCa__Kd_act, 3) / pow(var_chaste_interface__Ca_buffer__Ca_jct, 3)); // dimensionless + const double var_INaCa__Q10_NCX = 1.5700000000000001; // dimensionless + const double var_INaCa__eta = 0.34999999999999998; // dimensionless + const double var_INaCa__ksat = 0.27000000000000002; // dimensionless + const double var_INaK__Fx_NaK_SL = 0.89000000000000001; // dimensionless + const double var_INaK__Fx_NaK_jct = 0.11; // dimensionless + const double var_INaK__H_NaK = 4; // dimensionless + const double var_INaK__I_NaK_max = 1.9099999999999999; // microA_per_microF + const double var_INaK__Km_Ko = 1.5; // millimolar + const double var_INaK__Km_Nai = 11; // millimolar + const double var_INaK__Q10_Km_Nai = 1.49; // dimensionless + const double var_INaK__Q10_NaK = 1.6299999999999999; // dimensionless + const double var_INa__openProb = pow(var_chaste_interface__INa_m_gate__m, 3) * var_chaste_interface__INa_h_gate__h * var_chaste_interface__INa_j_gate__j; // dimensionless + const double var_INab__Fx_NaBk_SL = 0.89000000000000001; // dimensionless + const double var_INab__Fx_NaBk_jct = 0.11; // dimensionless + const double var_INab__G_NaBk = 0.00029700000000000001; // milliS_per_microF + const double var_Jleak_SR__j_leak_SR = (-var_chaste_interface__Ca_buffer__Ca_jct + var_chaste_interface__Ca_buffer__Ca_SR) * NV_Ith_S(mParameters, 0); // millimolar_per_millisecond + const double var_Jpump_SR__H = 1.7869999999999999; // dimensionless + const double var_Jpump_SR__Kmf = 0.00024600000000000002; // millimolar + const double var_Jpump_SR__Kmr = 1.7; // millimolar + const double var_Jpump_SR__Q10_SRCaP = 2.6000000000000001; // dimensionless + const double var_Jrel_SR__EC50_SR = 0.45000000000000001; // millimolar + const double var_Jrel_SR__HSR = 2.5; // dimensionless + const double var_Jrel_SR__Max_SR = 15; // dimensionless + const double var_Jrel_SR__Min_SR = 1; // dimensionless + const double var_Jrel_SR__RI = 1 - var_chaste_interface__Jrel_SR__I - var_chaste_interface__Jrel_SR__O - var_chaste_interface__Jrel_SR__R; // dimensionless + const double var_Jrel_SR__kCaSR = -(-var_Jrel_SR__Min_SR + var_Jrel_SR__Max_SR) / (1 + pow((var_Jrel_SR__EC50_SR / var_chaste_interface__Ca_buffer__Ca_SR), var_Jrel_SR__HSR)) + var_Jrel_SR__Max_SR; // dimensionless + const double var_Jrel_SR__kiCa = 0.5; // per_millimolar_per_millisecond + const double var_Jrel_SR__kiSRCa = var_Jrel_SR__kCaSR * var_Jrel_SR__kiCa; // per_millimolar_per_millisecond + const double var_Jrel_SR__kim = 0.0050000000000000001; // per_millisecond + const double var_Jrel_SR__koCa = 10; // per_millimolar2_per_millisecond + const double var_Jrel_SR__koSRCa = var_Jrel_SR__koCa / var_Jrel_SR__kCaSR; // per_millimolar2_per_millisecond + const double var_Jrel_SR__kom = 0.059999999999999998; // per_millisecond + const double d_dt_chaste_interface_var_Jrel_SR__I = -var_chaste_interface__Jrel_SR__I * var_Jrel_SR__kim - var_chaste_interface__Jrel_SR__I * var_Jrel_SR__kom + pow(var_chaste_interface__Ca_buffer__Ca_jct, 2) * var_Jrel_SR__RI * var_Jrel_SR__koSRCa + var_chaste_interface__Ca_buffer__Ca_jct * var_chaste_interface__Jrel_SR__O * var_Jrel_SR__kiSRCa; // 1 / millisecond + const double d_dt_chaste_interface_var_Jrel_SR__O = var_chaste_interface__Jrel_SR__I * var_Jrel_SR__kim - var_chaste_interface__Jrel_SR__O * var_Jrel_SR__kom + pow(var_chaste_interface__Ca_buffer__Ca_jct, 2) * var_chaste_interface__Jrel_SR__R * var_Jrel_SR__koSRCa - var_chaste_interface__Ca_buffer__Ca_jct * var_chaste_interface__Jrel_SR__O * var_Jrel_SR__kiSRCa; // 1 / millisecond + const double d_dt_chaste_interface_var_Jrel_SR__R = var_chaste_interface__Jrel_SR__O * var_Jrel_SR__kom + var_Jrel_SR__RI * var_Jrel_SR__kim - pow(var_chaste_interface__Ca_buffer__Ca_jct, 2) * var_chaste_interface__Jrel_SR__R * var_Jrel_SR__koSRCa - var_chaste_interface__Ca_buffer__Ca_jct * var_chaste_interface__Jrel_SR__R * var_Jrel_SR__kiSRCa; // 1 / millisecond + const double var_Jrel_SR__j_rel_SR = (-var_chaste_interface__Ca_buffer__Ca_jct + var_chaste_interface__Ca_buffer__Ca_SR) * var_chaste_interface__Jrel_SR__O * NV_Ith_S(mParameters, 1); // millimolar_per_millisecond + const double var_Na_buffer__Bmax_SL = 1.6499999999999999; // millimolar + const double var_Na_buffer__Bmax_jct = 7.5609999999999999; // millimolar + const double var_Na_buffer__koff = 0.001; // per_millisecond + const double var_Na_buffer__kon = 0.0001; // per_millimolar_per_millisecond + const double var_Na_buffer__dNa_SL_buf = -var_chaste_interface__Na_buffer__Na_SL_buf * var_Na_buffer__koff + (-var_chaste_interface__Na_buffer__Na_SL_buf + var_Na_buffer__Bmax_SL) * var_chaste_interface__Na_buffer__Na_SL * var_Na_buffer__kon; // millimolar_per_millisecond + const double d_dt_chaste_interface_var_Na_buffer__Na_SL_buf = var_Na_buffer__dNa_SL_buf; // millimolar / millisecond + const double var_Na_buffer__dNa_jct_buf = -var_chaste_interface__Na_buffer__Na_jct_buf * var_Na_buffer__koff + (-var_chaste_interface__Na_buffer__Na_jct_buf + var_Na_buffer__Bmax_jct) * var_chaste_interface__Na_buffer__Na_jct * var_Na_buffer__kon; // millimolar_per_millisecond + const double d_dt_chaste_interface_var_Na_buffer__Na_jct_buf = var_Na_buffer__dNa_jct_buf; // millimolar / millisecond + const double var_ICaL_d_gate__d_infinity = 1 / (1 + exp(-2.4166666666666665 - 0.16666666666666666 * var_chaste_interface__cell__V)); // dimensionless + const double var_ICaL_d_gate__tau_d = 28.571428571428569 * (1 - exp(-2.4166666666666665 - 0.16666666666666666 * var_chaste_interface__cell__V)) * var_ICaL_d_gate__d_infinity / (14.5 + var_chaste_interface__cell__V); // millisecond + const double d_dt_chaste_interface_var_ICaL_d_gate__d = (-var_chaste_interface__ICaL_d_gate__d + var_ICaL_d_gate__d_infinity) / var_ICaL_d_gate__tau_d; // 1 / millisecond + const double var_ICaL_f_gate__f_infinity = 1 / (1 + exp(9.7388888888888889 + 0.27777777777777779 * var_chaste_interface__cell__V)) + 0.59999999999999998 / (1 + exp(2.5 - 0.050000000000000003 * var_chaste_interface__cell__V)); // dimensionless + const double var_ICaL_f_gate__tau_f = 1 / (0.02 + 0.019699999999999999 * exp(-0.23877882250000002 * pow((1 + 0.068965517241379309 * var_chaste_interface__cell__V), 2))); // millisecond + const double d_dt_chaste_interface_var_ICaL_f_gate__f = (-var_chaste_interface__ICaL_f_gate__f + var_ICaL_f_gate__f_infinity) / var_ICaL_f_gate__tau_f; // 1 / millisecond + const double var_IKr_Xr_gate__Xr_infinity = 1 / (1 + exp(-6.666666666666667 - 0.13333333333333333 * var_chaste_interface__cell__V)); // dimensionless + const double var_IKr_Xr_gate__tau_Xr = 1 / (0.00060999999999999997 * (10 + var_chaste_interface__cell__V) / (-1 + exp(1.45 + 0.14499999999999999 * var_chaste_interface__cell__V)) + 0.0013799999999999999 * (7 + var_chaste_interface__cell__V) / (1 - exp(-0.86099999999999999 - 0.123 * var_chaste_interface__cell__V))); // millisecond + const double d_dt_chaste_interface_var_IKr_Xr_gate__Xr = (-var_chaste_interface__IKr_Xr_gate__Xr + var_IKr_Xr_gate__Xr_infinity) / var_IKr_Xr_gate__tau_Xr; // 1 / millisecond + const double var_IKs_Xs_gate__Xs_infinity = 1 / (1 + exp(0.089820359281437126 - 0.059880239520958084 * var_chaste_interface__cell__V)); // dimensionless + const double var_IKs_Xs_gate__tau_Xs = 1 / (0.00013100000000000001 * (30 + var_chaste_interface__cell__V) / (-1 + exp(2.0609999999999999 + 0.068699999999999997 * var_chaste_interface__cell__V)) + 7.1899999999999999e-5 * (30 + var_chaste_interface__cell__V) / (1 - exp(-4.4399999999999995 - 0.14799999999999999 * var_chaste_interface__cell__V))); // millisecond + const double d_dt_chaste_interface_var_IKs_Xs_gate__Xs = (-var_chaste_interface__IKs_Xs_gate__Xs + var_IKs_Xs_gate__Xs_infinity) / var_IKs_Xs_gate__tau_Xs; // 1 / millisecond + const double var_INa_h_gate__alpha_h = ((var_chaste_interface__cell__V < -40) ? (0.13500000000000001 * exp(-11.764705882352942 + 0.14705882352941177 * NV_Ith_S(mParameters, 16) - 0.14705882352941177 * var_chaste_interface__cell__V)) : (0)); // per_millisecond + const double var_INa_h_gate__beta_h = ((var_chaste_interface__cell__V < -40) ? (310000 * exp(0.34999999999999998 * var_chaste_interface__cell__V - 0.34999999999999998 * NV_Ith_S(mParameters, 16)) + 3.5600000000000001 * exp(0.079000000000000001 * var_chaste_interface__cell__V - 0.079000000000000001 * NV_Ith_S(mParameters, 16))) : (7.6923076923076916 / (1 + exp(-0.96036036036036043 + 0.0900900900900901 * NV_Ith_S(mParameters, 16) - 0.0900900900900901 * var_chaste_interface__cell__V)))); // per_millisecond + const double var_INa_h_gate__h_infinity = 0.01 * NV_Ith_S(mParameters, 15) + (1 - 0.01 * NV_Ith_S(mParameters, 15)) * var_INa_h_gate__alpha_h / (var_INa_h_gate__alpha_h + var_INa_h_gate__beta_h); // dimensionless + const double var_INa_h_gate__tau_h = 1 / (var_INa_h_gate__alpha_h + var_INa_h_gate__beta_h); // millisecond + const double d_dt_chaste_interface_var_INa_h_gate__h = (-var_chaste_interface__INa_h_gate__h + var_INa_h_gate__h_infinity) / var_INa_h_gate__tau_h; // 1 / millisecond + const double var_INa_j_gate__alpha_j = ((var_chaste_interface__cell__V < -40) ? ((37.780000000000001 + var_chaste_interface__cell__V) * (-127140 * exp(0.24440000000000001 * var_chaste_interface__cell__V - 0.24440000000000001 * NV_Ith_S(mParameters, 16)) - 3.4740000000000003e-5 * exp(0.043909999999999998 * NV_Ith_S(mParameters, 16) - 0.043909999999999998 * var_chaste_interface__cell__V)) / (1 + exp(24.640530000000002 + 0.311 * var_chaste_interface__cell__V - 0.311 * NV_Ith_S(mParameters, 16)))) : (0)); // per_millisecond + const double var_INa_j_gate__beta_j = ((var_chaste_interface__cell__V < -40) ? (0.1212 * exp(0.01052 * NV_Ith_S(mParameters, 16) - 0.01052 * var_chaste_interface__cell__V) / (1 + exp(-5.5312920000000005 + 0.13780000000000001 * NV_Ith_S(mParameters, 16) - 0.13780000000000001 * var_chaste_interface__cell__V))) : (0.29999999999999999 * exp(2.5349999999999999e-7 * NV_Ith_S(mParameters, 16) - 2.5349999999999999e-7 * var_chaste_interface__cell__V) / (1 + exp(-3.2000000000000002 + 0.10000000000000001 * NV_Ith_S(mParameters, 16) - 0.10000000000000001 * var_chaste_interface__cell__V)))); // per_millisecond + const double var_INa_j_gate__j_infinity = 0.01 * NV_Ith_S(mParameters, 15) + (1 - 0.01 * NV_Ith_S(mParameters, 15)) * var_INa_j_gate__alpha_j / (var_INa_j_gate__alpha_j + var_INa_j_gate__beta_j); // dimensionless + const double var_INa_j_gate__tau_j = 1 / (var_INa_j_gate__alpha_j + var_INa_j_gate__beta_j); // millisecond + const double d_dt_chaste_interface_var_INa_j_gate__j = (-var_chaste_interface__INa_j_gate__j + var_INa_j_gate__j_infinity) / var_INa_j_gate__tau_j; // 1 / millisecond + const double var_INa_m_gate__alpha_m = 0.32000000000000001 * (47.130000000000003 + var_chaste_interface__cell__V) / (1 - exp(-4.7130000000000001 - 0.10000000000000001 * var_chaste_interface__cell__V)); // per_millisecond + const double var_INa_m_gate__beta_m = 0.080000000000000002 * exp(-0.090909090909090912 * var_chaste_interface__cell__V); // per_millisecond + const double var_INa_m_gate__m_infinity = var_INa_m_gate__alpha_m / (var_INa_m_gate__alpha_m + var_INa_m_gate__beta_m); // dimensionless + const double var_INa_m_gate__tau_m = 1 / (var_INa_m_gate__alpha_m + var_INa_m_gate__beta_m); // millisecond + const double d_dt_chaste_interface_var_INa_m_gate__m = (-var_chaste_interface__INa_m_gate__m + var_INa_m_gate__m_infinity) / var_INa_m_gate__tau_m; // 1 / millisecond + const double var_Itof_X_gate__X_tof_infinity = 1 / (1 + exp(-0.20000000000000001 - 0.066666666666666666 * var_chaste_interface__cell__V)); // dimensionless + const double var_Itof_X_gate__tau_X_tof = 1.5 + 3.5 * exp(-0.0011111111111111111 * pow(var_chaste_interface__cell__V, 2)); // millisecond + const double d_dt_chaste_interface_var_Itof_X_gate__X_tof = (-var_chaste_interface__Itof_X_gate__X_tof + var_Itof_X_gate__X_tof_infinity) / var_Itof_X_gate__tau_X_tof; // 1 / millisecond + const double var_Itof_Y_gate__Y_tof_infinity = 1 / (1 + exp(3.3500000000000001 + 0.10000000000000001 * var_chaste_interface__cell__V)); // dimensionless + const double var_Itof_Y_gate__tau_Y_tof = 20 + 20 / (1 + exp(3.3500000000000001 + 0.10000000000000001 * var_chaste_interface__cell__V)); // millisecond + const double d_dt_chaste_interface_var_Itof_Y_gate__Y_tof = (-var_chaste_interface__Itof_Y_gate__Y_tof + var_Itof_Y_gate__Y_tof_infinity) / var_Itof_Y_gate__tau_Y_tof; // 1 / millisecond + const double var_Itos_R_gate__R_tos_infinity = 1 / (1 + exp(3.3500000000000001 + 0.10000000000000001 * var_chaste_interface__cell__V)); // dimensionless + const double var_Itos_R_gate__tau_R_tos = 220 + 2800 / (1 + exp(6 + 0.10000000000000001 * var_chaste_interface__cell__V)); // millisecond + const double d_dt_chaste_interface_var_Itos_R_gate__R_tos = (-var_chaste_interface__Itos_R_gate__R_tos + var_Itos_R_gate__R_tos_infinity) / var_Itos_R_gate__tau_R_tos; // 1 / millisecond + const double var_Itos_X_gate__X_tos_infinity = 1 / (1 + exp(-0.20000000000000001 - 0.066666666666666666 * var_chaste_interface__cell__V)); // dimensionless + const double var_Itos_X_gate__tau_X_tos = 0.5 + 9 / (1 + exp(0.20000000000000001 + 0.066666666666666666 * var_chaste_interface__cell__V)); // millisecond + const double d_dt_chaste_interface_var_Itos_X_gate__X_tos = (-var_chaste_interface__Itos_X_gate__X_tos + var_Itos_X_gate__X_tos_infinity) / var_Itos_X_gate__tau_X_tos; // 1 / millisecond + const double var_Itos_Y_gate__Y_tos_infinity = 1 / (1 + exp(3.3500000000000001 + 0.10000000000000001 * var_chaste_interface__cell__V)); // dimensionless + const double var_Itos_Y_gate__tau_Y_tos = 30 + 3000 / (1 + exp(6 + 0.10000000000000001 * var_chaste_interface__cell__V)); // millisecond + const double d_dt_chaste_interface_var_Itos_Y_gate__Y_tos = (-var_chaste_interface__Itos_Y_gate__Y_tos + var_Itos_Y_gate__Y_tos_infinity) / var_Itos_Y_gate__tau_Y_tos; // 1 / millisecond + const double var_cytosolic_Ca_buffer__Bmax_Calmodulin = 0.024; // millimolar + const double var_cytosolic_Ca_buffer__Bmax_Myosin_Ca = 0.14000000000000001; // millimolar + const double var_cytosolic_Ca_buffer__Bmax_Myosin_Mg = 0.14000000000000001; // millimolar + const double var_cytosolic_Ca_buffer__Bmax_SRB = 0.017100000000000001; // millimolar + const double var_cytosolic_Ca_buffer__Bmax_TroponinC = 0.070000000000000007; // millimolar + const double var_cytosolic_Ca_buffer__Bmax_TroponinC_Ca_Mg_Ca = 0.14000000000000001; // millimolar + const double var_cytosolic_Ca_buffer__Bmax_TroponinC_Ca_Mg_Mg = 0.14000000000000001; // millimolar + const double var_cytosolic_Ca_buffer__koff_Calmodulin = 0.23799999999999999; // per_millisecond + const double var_cytosolic_Ca_buffer__koff_Myosin_Ca = 0.00046000000000000001; // per_millisecond + const double var_cytosolic_Ca_buffer__koff_Myosin_Mg = 5.7000000000000003e-5; // per_millisecond + const double var_cytosolic_Ca_buffer__koff_SRB = 0.059999999999999998; // per_millisecond + const double var_cytosolic_Ca_buffer__koff_TroponinC = 0.019599999999999999; // per_millisecond + const double var_cytosolic_Ca_buffer__koff_TroponinC_Ca_Mg_Ca = 3.1999999999999999e-5; // per_millisecond + const double var_cytosolic_Ca_buffer__koff_TroponinC_Ca_Mg_Mg = 0.0033300000000000001; // per_millisecond + const double var_cytosolic_Ca_buffer__kon_Calmodulin = 34; // per_millimolar_per_millisecond + const double var_cytosolic_Ca_buffer__dCa_Calmodulin = -var_chaste_interface__cytosolic_Ca_buffer__Ca_Calmodulin * var_cytosolic_Ca_buffer__koff_Calmodulin + (-var_chaste_interface__cytosolic_Ca_buffer__Ca_Calmodulin + var_cytosolic_Ca_buffer__Bmax_Calmodulin) * var_chaste_interface__Ca_buffer__Cai * var_cytosolic_Ca_buffer__kon_Calmodulin; // millimolar_per_millisecond + const double d_dt_chaste_interface_var_cytosolic_Ca_buffer__Ca_Calmodulin = var_cytosolic_Ca_buffer__dCa_Calmodulin; // millimolar / millisecond + const double var_cytosolic_Ca_buffer__kon_Myosin_Ca = 13.800000000000001; // per_millimolar_per_millisecond + const double var_cytosolic_Ca_buffer__dCa_Myosin = -var_chaste_interface__cytosolic_Ca_buffer__Ca_Myosin * var_cytosolic_Ca_buffer__koff_Myosin_Ca + (-var_chaste_interface__cytosolic_Ca_buffer__Ca_Myosin - var_chaste_interface__cytosolic_Ca_buffer__Mg_Myosin + var_cytosolic_Ca_buffer__Bmax_Myosin_Ca) * var_chaste_interface__Ca_buffer__Cai * var_cytosolic_Ca_buffer__kon_Myosin_Ca; // millimolar_per_millisecond + const double d_dt_chaste_interface_var_cytosolic_Ca_buffer__Ca_Myosin = var_cytosolic_Ca_buffer__dCa_Myosin; // millimolar / millisecond + const double var_cytosolic_Ca_buffer__kon_Myosin_Mg = 0.015699999999999999; // per_millimolar_per_millisecond + const double var_cytosolic_Ca_buffer__kon_SRB = 100; // per_millimolar_per_millisecond + const double var_cytosolic_Ca_buffer__dCa_SRB = -var_chaste_interface__cytosolic_Ca_buffer__Ca_SRB * var_cytosolic_Ca_buffer__koff_SRB + (-var_chaste_interface__cytosolic_Ca_buffer__Ca_SRB + var_cytosolic_Ca_buffer__Bmax_SRB) * var_chaste_interface__Ca_buffer__Cai * var_cytosolic_Ca_buffer__kon_SRB; // millimolar_per_millisecond + const double d_dt_chaste_interface_var_cytosolic_Ca_buffer__Ca_SRB = var_cytosolic_Ca_buffer__dCa_SRB; // millimolar / millisecond + const double var_cytosolic_Ca_buffer__kon_TroponinC = 32.700000000000003; // per_millimolar_per_millisecond + const double var_cytosolic_Ca_buffer__dCa_TroponinC = -var_chaste_interface__cytosolic_Ca_buffer__Ca_TroponinC * var_cytosolic_Ca_buffer__koff_TroponinC + (-var_chaste_interface__cytosolic_Ca_buffer__Ca_TroponinC + var_cytosolic_Ca_buffer__Bmax_TroponinC) * var_chaste_interface__Ca_buffer__Cai * var_cytosolic_Ca_buffer__kon_TroponinC; // millimolar_per_millisecond + const double d_dt_chaste_interface_var_cytosolic_Ca_buffer__Ca_TroponinC = var_cytosolic_Ca_buffer__dCa_TroponinC; // millimolar / millisecond + const double var_cytosolic_Ca_buffer__kon_TroponinC_Ca_Mg_Ca = 2.3700000000000001; // per_millimolar_per_millisecond + const double var_cytosolic_Ca_buffer__dCa_TroponinC_Ca_Mg = -var_chaste_interface__cytosolic_Ca_buffer__Ca_TroponinC_Ca_Mg * var_cytosolic_Ca_buffer__koff_TroponinC_Ca_Mg_Ca + (-var_chaste_interface__cytosolic_Ca_buffer__Ca_TroponinC_Ca_Mg - var_chaste_interface__cytosolic_Ca_buffer__Mg_TroponinC_Ca_Mg + var_cytosolic_Ca_buffer__Bmax_TroponinC_Ca_Mg_Ca) * var_chaste_interface__Ca_buffer__Cai * var_cytosolic_Ca_buffer__kon_TroponinC_Ca_Mg_Ca; // millimolar_per_millisecond + const double d_dt_chaste_interface_var_cytosolic_Ca_buffer__Ca_TroponinC_Ca_Mg = var_cytosolic_Ca_buffer__dCa_TroponinC_Ca_Mg; // millimolar / millisecond + const double var_cytosolic_Ca_buffer__kon_TroponinC_Ca_Mg_Mg = 0.0030000000000000001; // per_millimolar_per_millisecond + const double var_indo_fluo_Ca_buffer_not_connected__Bmax_Fluo3_Cytosol = 0.025000000000000001; // millimolar + const double var_indo_fluo_Ca_buffer_not_connected__Bmax_Fluo3_SL = 0.00076999999999999996; // millimolar + const double var_indo_fluo_Ca_buffer_not_connected__Bmax_Fluo3_jct = 2.0000000000000002e-5; // millimolar + const double var_indo_fluo_Ca_buffer_not_connected__Bmax_Indo1_Cytosol = 0.025000000000000001; // millimolar + const double var_indo_fluo_Ca_buffer_not_connected__Bmax_Indo1_SL = 0.00076999999999999996; // millimolar + const double var_indo_fluo_Ca_buffer_not_connected__Bmax_Indo1_jct = 2.0000000000000002e-5; // millimolar + const double var_indo_fluo_Ca_buffer_not_connected__Fluo3 = 0; // millimolar + const double var_indo_fluo_Ca_buffer_not_connected__Indo1 = 0; // millimolar + const double var_indo_fluo_Ca_buffer_not_connected__koff_Fluo3 = 0.11; // per_millisecond + const double var_indo_fluo_Ca_buffer_not_connected__koff_Indo1 = 0.059999999999999998; // per_millisecond + const double var_indo_fluo_Ca_buffer_not_connected__kon_Fluo3 = 100; // per_millimolar2_per_millisecond + const double var_indo_fluo_Ca_buffer_not_connected__kon_Indo1 = 100; // per_millimolar2_per_millisecond + const double var_ion_diffusion__J_Ca_SL_cytosol = 3.7243000000000002e-12 * var_chaste_interface__Ca_buffer__Ca_SL - 3.7243000000000002e-12 * var_chaste_interface__Ca_buffer__Cai; // millimole_per_millisecond + const double var_ion_diffusion__J_Ca_jct_SL = 8.2413000000000004e-13 * var_chaste_interface__Ca_buffer__Ca_jct - 8.2413000000000004e-13 * var_chaste_interface__Ca_buffer__Ca_SL; // millimole_per_millisecond + const double var_ion_diffusion__J_Na_SL_cytosol = 1.6385999999999999e-12 * var_chaste_interface__Na_buffer__Na_SL - 1.6385999999999999e-12 * var_chaste_interface__Na_buffer__Nai; // millimole_per_millisecond + const double var_ion_diffusion__J_Na_jct_SL = 1.8312999999999999e-14 * var_chaste_interface__Na_buffer__Na_jct - 1.8312999999999999e-14 * var_chaste_interface__Na_buffer__Na_SL; // millimole_per_millisecond + const double var_model_parameters__Cm_per_area = 1.9999999999999999e-6; // farad_per_cm2 + const double var_model_parameters__Mgi = 1; // millimolar + const double var_cytosolic_Ca_buffer__dMg_Myosin = -var_chaste_interface__cytosolic_Ca_buffer__Mg_Myosin * var_cytosolic_Ca_buffer__koff_Myosin_Mg + (-var_chaste_interface__cytosolic_Ca_buffer__Ca_Myosin - var_chaste_interface__cytosolic_Ca_buffer__Mg_Myosin + var_cytosolic_Ca_buffer__Bmax_Myosin_Mg) * var_cytosolic_Ca_buffer__kon_Myosin_Mg * var_model_parameters__Mgi; // millimolar_per_millisecond + const double d_dt_chaste_interface_var_cytosolic_Ca_buffer__Mg_Myosin = var_cytosolic_Ca_buffer__dMg_Myosin; // millimolar / millisecond + const double var_cytosolic_Ca_buffer__dMg_TroponinC_Ca_Mg = -var_chaste_interface__cytosolic_Ca_buffer__Mg_TroponinC_Ca_Mg * var_cytosolic_Ca_buffer__koff_TroponinC_Ca_Mg_Mg + (-var_chaste_interface__cytosolic_Ca_buffer__Ca_TroponinC_Ca_Mg - var_chaste_interface__cytosolic_Ca_buffer__Mg_TroponinC_Ca_Mg + var_cytosolic_Ca_buffer__Bmax_TroponinC_Ca_Mg_Mg) * var_cytosolic_Ca_buffer__kon_TroponinC_Ca_Mg_Mg * var_model_parameters__Mgi; // millimolar_per_millisecond + const double d_dt_chaste_interface_var_cytosolic_Ca_buffer__Mg_TroponinC_Ca_Mg = var_cytosolic_Ca_buffer__dMg_TroponinC_Ca_Mg; // millimolar / millisecond + const double var_cytosolic_Ca_buffer__dCa_cytosol_tot_bound = var_cytosolic_Ca_buffer__dCa_Calmodulin + var_cytosolic_Ca_buffer__dCa_Myosin + var_cytosolic_Ca_buffer__dCa_SRB + var_cytosolic_Ca_buffer__dCa_TroponinC + var_cytosolic_Ca_buffer__dCa_TroponinC_Ca_Mg + var_cytosolic_Ca_buffer__dMg_Myosin + var_cytosolic_Ca_buffer__dMg_TroponinC_Ca_Mg; // millimolar_per_millisecond + const double var_INaK__sigma = -0.14285714285714285 + 0.14285714285714285 * exp(0.01485884101040119 * NV_Ith_S(mParameters, 9)); // dimensionless + const double var_ICaL__Q_CaL = pow(var_ICaL__Q10_CaL, (-31 + 0.10000000000000001 * NV_Ith_S(mParameters, 23))); // dimensionless + const double var_ICaL__temp = 0.45000000000000001 * pow(NV_Ith_S(mParameters, 10), 2) * var_ICaL__Q_CaL * var_chaste_interface__ICaL_d_gate__d * var_chaste_interface__ICaL_f_gate__f * var_chaste_interface__cell__V / (NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 23)); // coulomb_per_mole + const double var_ICaL__i_CaL_Ca_SL = 4 * (-var_ICaL__gamma_Cao * NV_Ith_S(mParameters, 6) + var_chaste_interface__Ca_buffer__Ca_SL * var_ICaL__gamma_Cai * exp(2 * var_chaste_interface__cell__V * NV_Ith_S(mParameters, 10) / (NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 23)))) * var_ICaL__Fx_ICaL_SL * NV_Ith_S(mParameters, 12) * var_ICaL__temp * var_ICaL_fCa_gate__fCa_SL / (-1 + exp(2 * var_chaste_interface__cell__V * NV_Ith_S(mParameters, 10) / (NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 23)))); // microA_per_microF + const double var_ICaL__i_CaL_Ca_jct = 4 * (-var_ICaL__gamma_Cao * NV_Ith_S(mParameters, 6) + var_chaste_interface__Ca_buffer__Ca_jct * var_ICaL__gamma_Cai * exp(2 * var_chaste_interface__cell__V * NV_Ith_S(mParameters, 10) / (NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 23)))) * var_ICaL__Fx_ICaL_jct * NV_Ith_S(mParameters, 12) * var_ICaL__temp * var_ICaL_fCa_gate__fCa_jct / (-1 + exp(2 * var_chaste_interface__cell__V * NV_Ith_S(mParameters, 10) / (NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 23)))); // microA_per_microF + const double var_ICaL__i_CaL_Na_SL = (-var_ICaL__gamma_Nao * NV_Ith_S(mParameters, 9) + var_ICaL__gamma_Nai * var_chaste_interface__Na_buffer__Na_SL * exp(var_chaste_interface__cell__V * NV_Ith_S(mParameters, 10) / (NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 23)))) * var_ICaL__Fx_ICaL_SL * var_ICaL__PNa * var_ICaL__temp * var_ICaL_fCa_gate__fCa_SL / (-1 + exp(var_chaste_interface__cell__V * NV_Ith_S(mParameters, 10) / (NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 23)))); // microA_per_microF + const double var_ICaL__i_CaL_Na_jct = (-var_ICaL__gamma_Nao * NV_Ith_S(mParameters, 9) + var_ICaL__gamma_Nai * var_chaste_interface__Na_buffer__Na_jct * exp(var_chaste_interface__cell__V * NV_Ith_S(mParameters, 10) / (NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 23)))) * var_ICaL__Fx_ICaL_jct * var_ICaL__PNa * var_ICaL__temp * var_ICaL_fCa_gate__fCa_jct / (-1 + exp(var_chaste_interface__cell__V * NV_Ith_S(mParameters, 10) / (NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 23)))); // microA_per_microF + const double var_ICap__Q_SLCaP = pow(var_ICap__Q10_SLCaP, (-31 + 0.10000000000000001 * NV_Ith_S(mParameters, 23))); // dimensionless + const double var_ICap__i_Cap_SL = var_ICap__Fx_SLCaP_SL * var_ICap__Q_SLCaP * var_ICap__V_maxAF / (1 + pow((var_ICap__Km / var_chaste_interface__Ca_buffer__Ca_SL), var_ICap__H)); // microA_per_microF + const double var_ICap__i_Cap_jct = var_ICap__Fx_SLCaP_jct * var_ICap__Q_SLCaP * var_ICap__V_maxAF / (1 + pow((var_ICap__Km / var_chaste_interface__Ca_buffer__Ca_jct), var_ICap__H)); // microA_per_microF + const double var_INaCa__Q_NCX = pow(var_INaCa__Q10_NCX, (-31 + 0.10000000000000001 * NV_Ith_S(mParameters, 23))); // dimensionless + const double var_INaCa__temp_SL = (pow(var_chaste_interface__Na_buffer__Na_SL, var_INaCa__HNa) * NV_Ith_S(mParameters, 6) * exp(var_INaCa__eta * var_chaste_interface__cell__V * NV_Ith_S(mParameters, 10) / (NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 23))) - pow(NV_Ith_S(mParameters, 9), var_INaCa__HNa) * var_chaste_interface__Ca_buffer__Ca_SL * exp((-1 + var_INaCa__eta) * var_chaste_interface__cell__V * NV_Ith_S(mParameters, 10) / (NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 23)))) / (1 + var_INaCa__ksat * exp((-1 + var_INaCa__eta) * var_chaste_interface__cell__V * NV_Ith_S(mParameters, 10) / (NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 23)))); // millimolar4 + const double var_INaCa__i_NaCa_SL = var_INaCa__Fx_NCX_SL * var_INaCa__Ka_SL * var_INaCa__Q_NCX * NV_Ith_S(mParameters, 22) * var_INaCa__temp_SL / (pow(var_chaste_interface__Na_buffer__Na_SL, var_INaCa__HNa) * var_INaCa__K_mCao + pow(var_chaste_interface__Na_buffer__Na_SL, var_INaCa__HNa) * NV_Ith_S(mParameters, 6) + pow(NV_Ith_S(mParameters, 9), var_INaCa__HNa) * var_chaste_interface__Ca_buffer__Ca_SL + pow(var_INaCa__K_mNao, var_INaCa__HNa) * (1 + var_chaste_interface__Ca_buffer__Ca_SL / var_INaCa__K_mCai) * var_chaste_interface__Ca_buffer__Ca_SL + pow(NV_Ith_S(mParameters, 9), var_INaCa__HNa) * (1 + pow((var_chaste_interface__Na_buffer__Na_SL / var_INaCa__K_mNai), var_INaCa__HNa)) * var_INaCa__K_mCai); // microA_per_microF + const double var_INaCa__temp_jct = (pow(var_chaste_interface__Na_buffer__Na_jct, var_INaCa__HNa) * NV_Ith_S(mParameters, 6) * exp(var_INaCa__eta * var_chaste_interface__cell__V * NV_Ith_S(mParameters, 10) / (NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 23))) - pow(NV_Ith_S(mParameters, 9), var_INaCa__HNa) * var_chaste_interface__Ca_buffer__Ca_jct * exp((-1 + var_INaCa__eta) * var_chaste_interface__cell__V * NV_Ith_S(mParameters, 10) / (NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 23)))) / (1 + var_INaCa__ksat * exp((-1 + var_INaCa__eta) * var_chaste_interface__cell__V * NV_Ith_S(mParameters, 10) / (NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 23)))); // millimolar4 + const double var_INaCa__i_NaCa_jct = var_INaCa__Fx_NCX_jct * var_INaCa__Ka_jct * var_INaCa__Q_NCX * NV_Ith_S(mParameters, 22) * var_INaCa__temp_jct / (pow(var_chaste_interface__Na_buffer__Na_jct, var_INaCa__HNa) * var_INaCa__K_mCao + pow(var_chaste_interface__Na_buffer__Na_jct, var_INaCa__HNa) * NV_Ith_S(mParameters, 6) + pow(NV_Ith_S(mParameters, 9), var_INaCa__HNa) * var_chaste_interface__Ca_buffer__Ca_jct + pow(var_INaCa__K_mNao, var_INaCa__HNa) * (1 + var_chaste_interface__Ca_buffer__Ca_jct / var_INaCa__K_mCai) * var_chaste_interface__Ca_buffer__Ca_jct + pow(NV_Ith_S(mParameters, 9), var_INaCa__HNa) * (1 + pow((var_chaste_interface__Na_buffer__Na_jct / var_INaCa__K_mNai), var_INaCa__HNa)) * var_INaCa__K_mCai); // microA_per_microF + const double var_INaK__Q_Km_Nai = pow(var_INaK__Q10_Km_Nai, (-31 + 0.10000000000000001 * NV_Ith_S(mParameters, 23))); // dimensionless + const double var_INaK__Q_NaK = pow(var_INaK__Q10_NaK, (-31 + 0.10000000000000001 * NV_Ith_S(mParameters, 23))); // dimensionless + const double var_INaK__f_NaK = 1 / (1 + 0.1245 * exp(-0.10000000000000001 * var_chaste_interface__cell__V * NV_Ith_S(mParameters, 10) / (NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 23))) + 0.036499999999999998 * var_INaK__sigma * exp(-var_chaste_interface__cell__V * NV_Ith_S(mParameters, 10) / (NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 23)))); // dimensionless + const double var_INaK__i_NaK_SL = var_INaK__Fx_NaK_SL * var_INaK__I_NaK_max * var_INaK__Q_NaK * var_INaK__f_NaK * NV_Ith_S(mParameters, 8) / ((1 + pow((var_INaK__Km_Nai * var_INaK__Q_Km_Nai / var_chaste_interface__Na_buffer__Na_SL), var_INaK__H_NaK)) * (var_INaK__Km_Ko + NV_Ith_S(mParameters, 8))); // microA_per_microF + const double var_INaK__i_NaK_jct = var_INaK__Fx_NaK_jct * var_INaK__I_NaK_max * var_INaK__Q_NaK * var_INaK__f_NaK * NV_Ith_S(mParameters, 8) / ((1 + pow((var_INaK__Km_Nai * var_INaK__Q_Km_Nai / var_chaste_interface__Na_buffer__Na_jct), var_INaK__H_NaK)) * (var_INaK__Km_Ko + NV_Ith_S(mParameters, 8))); // microA_per_microF + const double var_Jpump_SR__Q_SRCaP = pow(var_Jpump_SR__Q10_SRCaP, (-31 + 0.10000000000000001 * NV_Ith_S(mParameters, 23))); // dimensionless + const double var_model_parameters__cell_length = 100; // micrometre + const double var_model_parameters__cell_radius = 10.25; // micrometre + const double var_model_parameters__Cm = 2.0e-8 * M_PI * var_model_parameters__Cm_per_area * var_model_parameters__cell_length * var_model_parameters__cell_radius; // farad + const double var_model_parameters__Vol_Cell = 3.1415926540000002e-15 * pow(var_model_parameters__cell_radius, 2) * var_model_parameters__cell_length; // liter + const double var_model_parameters__Vol_SL = 0.02 * var_model_parameters__Vol_Cell; // liter + const double var_model_parameters__Vol_SR = 0.035000000000000003 * var_model_parameters__Vol_Cell; // liter + const double var_model_parameters__Vol_cytosol = 0.65000000000000002 * var_model_parameters__Vol_Cell; // liter + const double var_Ca_buffer__dCa_SLB_SL = -var_chaste_interface__Ca_buffer__Ca_SLB_SL * var_Ca_buffer__koff_SLB + (-var_chaste_interface__Ca_buffer__Ca_SLB_SL + var_Ca_buffer__Bmax_SLB_SL * var_model_parameters__Vol_cytosol / var_model_parameters__Vol_SL) * var_chaste_interface__Ca_buffer__Ca_SL * var_Ca_buffer__kon_SL; // millimolar_per_millisecond + const double var_Ca_buffer__dCa_SLHigh_SL = -var_chaste_interface__Ca_buffer__Ca_SLHigh_SL * var_Ca_buffer__koff_SLHigh + (-var_chaste_interface__Ca_buffer__Ca_SLHigh_SL + var_Ca_buffer__Bmax_SLHigh_SL * var_model_parameters__Vol_cytosol / var_model_parameters__Vol_SL) * var_chaste_interface__Ca_buffer__Ca_SL * var_Ca_buffer__kon_SL; // millimolar_per_millisecond + const double var_Ca_buffer__dCa_SL_tot_bound = var_Ca_buffer__dCa_SLB_SL + var_Ca_buffer__dCa_SLHigh_SL; // millimolar_per_millisecond + const double var_Ca_buffer__dCalsequestrin = -var_chaste_interface__Ca_buffer__Ca_Calsequestrin * var_Ca_buffer__koff_Calsequestrin + (-var_chaste_interface__Ca_buffer__Ca_Calsequestrin + var_Ca_buffer__Bmax_Calsequestrin * var_model_parameters__Vol_cytosol / var_model_parameters__Vol_SR) * var_chaste_interface__Ca_buffer__Ca_SR * var_Ca_buffer__kon_Calsequestrin; // millimolar_per_millisecond + const double d_dt_chaste_interface_var_Ca_buffer__Ca_Calsequestrin = var_Ca_buffer__dCalsequestrin; // millimolar / millisecond + const double d_dt_chaste_interface_var_Ca_buffer__Ca_SLB_SL = var_Ca_buffer__dCa_SLB_SL; // millimolar / millisecond + const double d_dt_chaste_interface_var_Ca_buffer__Ca_SLHigh_SL = var_Ca_buffer__dCa_SLHigh_SL; // millimolar / millisecond + const double d_dt_chaste_interface_var_Na_buffer__Nai = NV_Ith_S(mParameters, 3) * var_ion_diffusion__J_Na_SL_cytosol / var_model_parameters__Vol_cytosol; // millimolar / millisecond + const double var_Jpump_SR__j_pump_SR = (pow((var_chaste_interface__Ca_buffer__Cai / var_Jpump_SR__Kmf), var_Jpump_SR__H) - pow((var_chaste_interface__Ca_buffer__Ca_SR / var_Jpump_SR__Kmr), var_Jpump_SR__H)) * var_Jpump_SR__Q_SRCaP * NV_Ith_S(mParameters, 2) * var_model_parameters__Vol_cytosol / ((1 + pow((var_chaste_interface__Ca_buffer__Cai / var_Jpump_SR__Kmf), var_Jpump_SR__H) + pow((var_chaste_interface__Ca_buffer__Ca_SR / var_Jpump_SR__Kmr), var_Jpump_SR__H)) * var_model_parameters__Vol_SR); // millimolar_per_millisecond + const double d_dt_chaste_interface_var_Ca_buffer__Ca_SR = -var_Ca_buffer__dCalsequestrin - var_Jrel_SR__j_rel_SR - var_Jleak_SR__j_leak_SR * var_model_parameters__Vol_cytosol / var_model_parameters__Vol_SR + var_Jpump_SR__j_pump_SR; // millimolar / millisecond + const double d_dt_chaste_interface_var_Ca_buffer__Cai = -var_cytosolic_Ca_buffer__dCa_cytosol_tot_bound + var_ion_diffusion__J_Ca_SL_cytosol / var_model_parameters__Vol_cytosol - var_Jpump_SR__j_pump_SR * var_model_parameters__Vol_SR / var_model_parameters__Vol_cytosol; // millimolar / millisecond + const double var_model_parameters__Vol_jct = 0.00051000000000000004 * var_model_parameters__Vol_Cell; // liter + const double var_Ca_buffer__dCa_SLB_jct = -var_chaste_interface__Ca_buffer__Ca_SLB_jct * var_Ca_buffer__koff_SLB + (-var_chaste_interface__Ca_buffer__Ca_SLB_jct + 0.10000000000000001 * var_Ca_buffer__Bmax_SLB_jct * var_model_parameters__Vol_cytosol / var_model_parameters__Vol_jct) * var_chaste_interface__Ca_buffer__Ca_jct * var_Ca_buffer__kon_SL; // millimolar_per_millisecond + const double var_Ca_buffer__dCa_SLHigh_jct = -var_chaste_interface__Ca_buffer__Ca_SLHigh_jct * var_Ca_buffer__koff_SLHigh + (-var_chaste_interface__Ca_buffer__Ca_SLHigh_jct + 0.10000000000000001 * var_Ca_buffer__Bmax_SLHigh_jct * var_model_parameters__Vol_cytosol / var_model_parameters__Vol_jct) * var_chaste_interface__Ca_buffer__Ca_jct * var_Ca_buffer__kon_SL; // millimolar_per_millisecond + const double var_Ca_buffer__dCa_jct_tot_bound = var_Ca_buffer__dCa_SLB_jct + var_Ca_buffer__dCa_SLHigh_jct; // millimolar_per_millisecond + const double d_dt_chaste_interface_var_Ca_buffer__Ca_SLB_jct = var_Ca_buffer__dCa_SLB_jct; // millimolar / millisecond + const double d_dt_chaste_interface_var_Ca_buffer__Ca_SLHigh_jct = var_Ca_buffer__dCa_SLHigh_jct; // millimolar / millisecond + const double var_indo_fluo_Ca_buffer_not_connected__Fluo3Bound = var_chaste_interface__indo_fluo_Ca_buffer_not_connected__Ca_Fluo3_SL * var_model_parameters__Vol_SL / var_model_parameters__Vol_cytosol + var_chaste_interface__indo_fluo_Ca_buffer_not_connected__Ca_Fluo3_jct * var_model_parameters__Vol_jct / var_model_parameters__Vol_cytosol + var_chaste_interface__indo_fluo_Ca_buffer_not_connected__Ca_Fluo3_Cytosol; // millimolar + const double var_indo_fluo_Ca_buffer_not_connected__Indo1Bound = var_chaste_interface__indo_fluo_Ca_buffer_not_connected__Ca_Indo1_SL * var_model_parameters__Vol_SL / var_model_parameters__Vol_cytosol + var_chaste_interface__indo_fluo_Ca_buffer_not_connected__Ca_Indo1_jct * var_model_parameters__Vol_jct / var_model_parameters__Vol_cytosol + var_chaste_interface__indo_fluo_Ca_buffer_not_connected__Ca_Indo1_Cytosol; // millimolar + const double var_indo_fluo_Ca_buffer_not_connected__dCa_Fluo3_Cytosol = -var_chaste_interface__indo_fluo_Ca_buffer_not_connected__Ca_Fluo3_Cytosol * var_indo_fluo_Ca_buffer_not_connected__koff_Fluo3 + (-var_chaste_interface__indo_fluo_Ca_buffer_not_connected__Ca_Fluo3_Cytosol + var_indo_fluo_Ca_buffer_not_connected__Bmax_Fluo3_Cytosol) * (-var_indo_fluo_Ca_buffer_not_connected__Fluo3Bound + var_indo_fluo_Ca_buffer_not_connected__Fluo3) * var_chaste_interface__Ca_buffer__Cai * var_indo_fluo_Ca_buffer_not_connected__kon_Fluo3; // millimolar_per_millisecond + const double d_dt_chaste_interface_var_indo_fluo_Ca_buffer_not_connected__Ca_Fluo3_Cytosol = var_indo_fluo_Ca_buffer_not_connected__dCa_Fluo3_Cytosol; // millimolar / millisecond + const double var_indo_fluo_Ca_buffer_not_connected__dCa_Fluo3_SL = -var_chaste_interface__indo_fluo_Ca_buffer_not_connected__Ca_Fluo3_SL * var_indo_fluo_Ca_buffer_not_connected__koff_Fluo3 + (-var_chaste_interface__indo_fluo_Ca_buffer_not_connected__Ca_Fluo3_SL + var_indo_fluo_Ca_buffer_not_connected__Bmax_Fluo3_SL * var_model_parameters__Vol_cytosol / var_model_parameters__Vol_SL) * (-var_indo_fluo_Ca_buffer_not_connected__Fluo3Bound + var_indo_fluo_Ca_buffer_not_connected__Fluo3) * var_chaste_interface__Ca_buffer__Ca_SL * var_indo_fluo_Ca_buffer_not_connected__kon_Fluo3; // millimolar_per_millisecond + const double d_dt_chaste_interface_var_indo_fluo_Ca_buffer_not_connected__Ca_Fluo3_SL = var_indo_fluo_Ca_buffer_not_connected__dCa_Fluo3_SL; // millimolar / millisecond + const double var_indo_fluo_Ca_buffer_not_connected__dCa_Fluo3_jct = -var_chaste_interface__indo_fluo_Ca_buffer_not_connected__Ca_Fluo3_jct * var_indo_fluo_Ca_buffer_not_connected__koff_Fluo3 + (-var_chaste_interface__indo_fluo_Ca_buffer_not_connected__Ca_Fluo3_jct + var_indo_fluo_Ca_buffer_not_connected__Bmax_Fluo3_jct * var_model_parameters__Vol_cytosol / var_model_parameters__Vol_jct) * (-var_indo_fluo_Ca_buffer_not_connected__Fluo3Bound + var_indo_fluo_Ca_buffer_not_connected__Fluo3) * var_chaste_interface__Ca_buffer__Ca_jct * var_indo_fluo_Ca_buffer_not_connected__kon_Fluo3; // millimolar_per_millisecond + const double d_dt_chaste_interface_var_indo_fluo_Ca_buffer_not_connected__Ca_Fluo3_jct = var_indo_fluo_Ca_buffer_not_connected__dCa_Fluo3_jct; // millimolar / millisecond + const double var_indo_fluo_Ca_buffer_not_connected__dCa_Indo1_Cytosol = -var_chaste_interface__indo_fluo_Ca_buffer_not_connected__Ca_Indo1_Cytosol * var_indo_fluo_Ca_buffer_not_connected__koff_Indo1 + (-var_chaste_interface__indo_fluo_Ca_buffer_not_connected__Ca_Indo1_Cytosol + var_indo_fluo_Ca_buffer_not_connected__Bmax_Indo1_Cytosol) * (-var_indo_fluo_Ca_buffer_not_connected__Indo1Bound + var_indo_fluo_Ca_buffer_not_connected__Indo1) * var_chaste_interface__Ca_buffer__Cai * var_indo_fluo_Ca_buffer_not_connected__kon_Indo1; // millimolar_per_millisecond + const double d_dt_chaste_interface_var_indo_fluo_Ca_buffer_not_connected__Ca_Indo1_Cytosol = var_indo_fluo_Ca_buffer_not_connected__dCa_Indo1_Cytosol; // millimolar / millisecond + const double var_indo_fluo_Ca_buffer_not_connected__dCa_Indo1_SL = -var_chaste_interface__indo_fluo_Ca_buffer_not_connected__Ca_Indo1_SL * var_indo_fluo_Ca_buffer_not_connected__koff_Indo1 + (-var_chaste_interface__indo_fluo_Ca_buffer_not_connected__Ca_Indo1_SL + var_indo_fluo_Ca_buffer_not_connected__Bmax_Indo1_SL * var_model_parameters__Vol_cytosol / var_model_parameters__Vol_SL) * (-var_indo_fluo_Ca_buffer_not_connected__Indo1Bound + var_indo_fluo_Ca_buffer_not_connected__Indo1) * var_chaste_interface__Ca_buffer__Ca_SL * var_indo_fluo_Ca_buffer_not_connected__kon_Indo1; // millimolar_per_millisecond + const double d_dt_chaste_interface_var_indo_fluo_Ca_buffer_not_connected__Ca_Indo1_SL = var_indo_fluo_Ca_buffer_not_connected__dCa_Indo1_SL; // millimolar / millisecond + const double var_indo_fluo_Ca_buffer_not_connected__dCa_Indo1_jct = -var_chaste_interface__indo_fluo_Ca_buffer_not_connected__Ca_Indo1_jct * var_indo_fluo_Ca_buffer_not_connected__koff_Indo1 + (-var_chaste_interface__indo_fluo_Ca_buffer_not_connected__Ca_Indo1_jct + var_indo_fluo_Ca_buffer_not_connected__Bmax_Indo1_jct * var_model_parameters__Vol_cytosol / var_model_parameters__Vol_jct) * (-var_indo_fluo_Ca_buffer_not_connected__Indo1Bound + var_indo_fluo_Ca_buffer_not_connected__Indo1) * var_chaste_interface__Ca_buffer__Ca_jct * var_indo_fluo_Ca_buffer_not_connected__kon_Indo1; // millimolar_per_millisecond + const double d_dt_chaste_interface_var_indo_fluo_Ca_buffer_not_connected__Ca_Indo1_jct = var_indo_fluo_Ca_buffer_not_connected__dCa_Indo1_jct; // millimolar / millisecond + const double var_reversal_potentials__E_Ca_SL = 0.5 * NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 23) * log(NV_Ith_S(mParameters, 6) / var_chaste_interface__Ca_buffer__Ca_SL) / NV_Ith_S(mParameters, 10); // millivolt + const double var_ICab__i_Cab_SL = (-var_reversal_potentials__E_Ca_SL + var_chaste_interface__cell__V) * var_ICab__Fx_CaBk_SL * var_ICab__G_CaBk; // microA_per_microF + const double var_Ca_buffer__i_Ca_SL_tot = -2 * var_INaCa__i_NaCa_SL + var_ICaL__i_CaL_Ca_SL + var_ICab__i_Cab_SL + var_ICap__i_Cap_SL; // microA_per_microF + const double d_dt_chaste_interface_var_Ca_buffer__Ca_SL = -var_Ca_buffer__dCa_SL_tot_bound + (-var_ion_diffusion__J_Ca_SL_cytosol + var_ion_diffusion__J_Ca_jct_SL) / var_model_parameters__Vol_SL - 0.5 * var_Ca_buffer__i_Ca_SL_tot * var_model_parameters__Cm / (NV_Ith_S(mParameters, 10) * var_model_parameters__Vol_SL); // millimolar / millisecond + const double var_reversal_potentials__E_Ca_jct = 0.5 * NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 23) * log(NV_Ith_S(mParameters, 6) / var_chaste_interface__Ca_buffer__Ca_jct) / NV_Ith_S(mParameters, 10); // millivolt + const double var_ICab__i_Cab_jct = (-var_reversal_potentials__E_Ca_jct + var_chaste_interface__cell__V) * var_ICab__Fx_CaBk_jct * var_ICab__G_CaBk; // microA_per_microF + const double var_Ca_buffer__i_Ca_jct_tot = -2 * var_INaCa__i_NaCa_jct + var_ICaL__i_CaL_Ca_jct + var_ICab__i_Cab_jct + var_ICap__i_Cap_jct; // microA_per_microF + const double d_dt_chaste_interface_var_Ca_buffer__Ca_jct = -var_Ca_buffer__dCa_jct_tot_bound - var_ion_diffusion__J_Ca_jct_SL / var_model_parameters__Vol_jct + var_Jleak_SR__j_leak_SR * var_model_parameters__Vol_cytosol / var_model_parameters__Vol_jct + var_Jrel_SR__j_rel_SR * var_model_parameters__Vol_SR / var_model_parameters__Vol_jct - 0.5 * var_Ca_buffer__i_Ca_jct_tot * var_model_parameters__Cm / (NV_Ith_S(mParameters, 10) * var_model_parameters__Vol_jct); // millimolar / millisecond + const double var_reversal_potentials__E_Na_SL = NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 23) * log(NV_Ith_S(mParameters, 9) / var_chaste_interface__Na_buffer__Na_SL) / NV_Ith_S(mParameters, 10); // millivolt + const double var_INa__i_Na_SL = (-var_reversal_potentials__E_Na_SL + var_chaste_interface__cell__V) * var_INa__Fx_Na_SL * NV_Ith_S(mParameters, 14) * var_INa__openProb; // microA_per_microF + const double var_INab__i_Nab_SL = (-var_reversal_potentials__E_Na_SL + var_chaste_interface__cell__V) * var_INab__Fx_NaBk_SL * var_INab__G_NaBk; // microA_per_microF + const double d_dt_chaste_interface_var_Na_buffer__Na_SL = (-var_Na_buffer__dNa_SL_buf + (-var_ion_diffusion__J_Na_SL_cytosol + var_ion_diffusion__J_Na_jct_SL) / var_model_parameters__Vol_SL - (3 * var_INaCa__i_NaCa_SL + 3 * var_INaK__i_NaK_SL + var_ICaL__i_CaL_Na_SL + var_INa__i_Na_SL + var_INab__i_Nab_SL) * var_model_parameters__Cm / (NV_Ith_S(mParameters, 10) * var_model_parameters__Vol_SL)) * NV_Ith_S(mParameters, 3); // millimolar / millisecond + const double var_reversal_potentials__E_Na_jct = NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 23) * log(NV_Ith_S(mParameters, 9) / var_chaste_interface__Na_buffer__Na_jct) / NV_Ith_S(mParameters, 10); // millivolt + const double var_INa__i_Na_jct = (-var_reversal_potentials__E_Na_jct + var_chaste_interface__cell__V) * var_INa__Fx_Na_jct * NV_Ith_S(mParameters, 14) * var_INa__openProb; // microA_per_microF + const double var_INab__i_Nab_jct = (-var_reversal_potentials__E_Na_jct + var_chaste_interface__cell__V) * var_INab__Fx_NaBk_jct * var_INab__G_NaBk; // microA_per_microF + const double d_dt_chaste_interface_var_Na_buffer__Na_jct = (-var_Na_buffer__dNa_jct_buf - var_ion_diffusion__J_Na_jct_SL / var_model_parameters__Vol_jct - (3 * var_INaCa__i_NaCa_jct + 3 * var_INaK__i_NaK_jct + var_ICaL__i_CaL_Na_jct + var_INa__i_Na_jct + var_INab__i_Nab_jct) * var_model_parameters__Cm / (NV_Ith_S(mParameters, 10) * var_model_parameters__Vol_jct)) * NV_Ith_S(mParameters, 3); // millimolar / millisecond + + if (mSetVoltageDerivativeToZero) + { + d_dt_chaste_interface_var_cell__V = 0.0; + } + else + { + const double var_ICaL__PK = 2.7000000000000001e-7; // litre_per_farad_millisecond + const double var_ICaL__gamma_Ki = 0.75; // dimensionless + const double var_ICaL__gamma_Ko = 0.75; // dimensionless + const double var_ICl_Ca__Fx_Cl_SL = 0.89000000000000001; // dimensionless + const double var_ICl_Ca__Fx_Cl_jct = 0.11; // dimensionless + const double var_ICl_Ca__G_Cl = 0.109625; // milliS_per_microF + const double var_ICl_Ca__Kd_ClCa = 0.10000000000000001; // millimolar + const double var_IKs__Fx_Ks_SL = 0.89000000000000001; // dimensionless + const double var_IKs__Fx_Ks_jct = 0.11; // dimensionless + const double var_IKs__pCa_SL = 3 - log10(var_chaste_interface__Ca_buffer__Ca_SL); // dimensionless + const double var_IKs__G_Ks_SL = (0.057000000000000002 + 0.19 / (1 + exp(-12 + 1.6666666666666667 * var_IKs__pCa_SL))) * NV_Ith_S(mParameters, 20); // milliS_per_microF + const double var_IKs__pCa_jct = 3 - log10(var_chaste_interface__Ca_buffer__Ca_jct); // dimensionless + const double var_IKs__G_Ks_jct = (0.057000000000000002 + 0.19 / (1 + exp(-12 + 1.6666666666666667 * var_IKs__pCa_jct))) * NV_Ith_S(mParameters, 20); // milliS_per_microF + const double var_IKs__pKNa = 0.018329999999999999; // dimensionless + const double var_IKr_Rr_gate__Rr = 1 / (1 + exp(1.4732142857142858 + 0.044642857142857144 * var_chaste_interface__cell__V)); // dimensionless + const double var_cell__i_Stim_converted = GetIntracellularAreaStimulus(var_chaste_interface__environment__time); // uA_per_cm2 + const double var_cell__i_Stim = var_cell__i_Stim_converted / HeartConfig::Instance()->GetCapacitance(); // microA_per_microF + const double var_IK1__G_K1 = 0.43033148291193518 * sqrt(NV_Ith_S(mParameters, 8)) * NV_Ith_S(mParameters, 18); // milliS_per_microF + const double var_IKr__G_IKr = 0.43033148291193518 * sqrt(NV_Ith_S(mParameters, 8)) * NV_Ith_S(mParameters, 19); // milliS_per_microF + const double var_ICaL__i_CaL_K = (var_ICaL__Fx_ICaL_SL * var_ICaL_fCa_gate__fCa_SL + var_ICaL__Fx_ICaL_jct * var_ICaL_fCa_gate__fCa_jct) * (-var_ICaL__gamma_Ko * NV_Ith_S(mParameters, 8) + var_ICaL__gamma_Ki * NV_Ith_S(mParameters, 5) * exp(var_chaste_interface__cell__V * NV_Ith_S(mParameters, 10) / (NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 23)))) * var_ICaL__PK * var_ICaL__temp / (-1 + exp(var_chaste_interface__cell__V * NV_Ith_S(mParameters, 10) / (NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 23)))); // microA_per_microF + const double var_ICaL__i_CaL = var_ICaL__i_CaL_Ca_SL + var_ICaL__i_CaL_Ca_jct + var_ICaL__i_CaL_K + var_ICaL__i_CaL_Na_SL + var_ICaL__i_CaL_Na_jct; // microA_per_microF + const double var_ICap__i_Cap = var_ICap__i_Cap_SL + var_ICap__i_Cap_jct; // microA_per_microF + const double var_IKs__E_Ks = NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 23) * log((var_IKs__pKNa * NV_Ith_S(mParameters, 9) + NV_Ith_S(mParameters, 8)) / (var_IKs__pKNa * var_chaste_interface__Na_buffer__Nai + NV_Ith_S(mParameters, 5))) / NV_Ith_S(mParameters, 10); // millivolt + const double var_IKs__i_Ks_SL = pow(var_chaste_interface__IKs_Xs_gate__Xs, 2) * (-var_IKs__E_Ks + var_chaste_interface__cell__V) * var_IKs__Fx_Ks_SL * var_IKs__G_Ks_SL; // microA_per_microF + const double var_IKs__i_Ks_jct = pow(var_chaste_interface__IKs_Xs_gate__Xs, 2) * (-var_IKs__E_Ks + var_chaste_interface__cell__V) * var_IKs__Fx_Ks_jct * var_IKs__G_Ks_jct; // microA_per_microF + const double var_IKs__i_Ks = var_IKs__i_Ks_SL + var_IKs__i_Ks_jct; // microA_per_microF + const double var_INaCa__i_NaCa = var_INaCa__i_NaCa_SL + var_INaCa__i_NaCa_jct; // microA_per_microF + const double var_INaK__i_NaK = var_INaK__i_NaK_SL + var_INaK__i_NaK_jct; // microA_per_microF + const double var_ICab__i_Cab = var_ICab__i_Cab_SL + var_ICab__i_Cab_jct; // microA_per_microF + const double var_reversal_potentials__E_Cl = -NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 23) * log(NV_Ith_S(mParameters, 7) / NV_Ith_S(mParameters, 4)) / NV_Ith_S(mParameters, 10); // millivolt + const double var_ICl_Ca__i_Cl_Ca = (-var_reversal_potentials__E_Cl + var_chaste_interface__cell__V) * (var_ICl_Ca__Fx_Cl_SL / (1 + var_ICl_Ca__Kd_ClCa / var_chaste_interface__Ca_buffer__Ca_SL) + var_ICl_Ca__Fx_Cl_jct / (1 + var_ICl_Ca__Kd_ClCa / var_chaste_interface__Ca_buffer__Ca_jct)) * var_ICl_Ca__G_Cl; // microA_per_microF + const double var_IClb__i_Clb = (-var_reversal_potentials__E_Cl + var_chaste_interface__cell__V) * NV_Ith_S(mParameters, 13); // microA_per_microF + const double var_reversal_potentials__E_K = NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 23) * log(NV_Ith_S(mParameters, 8) / NV_Ith_S(mParameters, 5)) / NV_Ith_S(mParameters, 10); // millivolt + const double var_IK1_K1_gate__alpha_K1 = 1.02 / (1 + exp(-14.1227775 + 0.23849999999999999 * var_chaste_interface__cell__V - 0.23849999999999999 * var_reversal_potentials__E_K)); // per_millisecond + const double var_IK1_K1_gate__beta_K1 = (exp(-36.698642499999998 + 0.061749999999999999 * var_chaste_interface__cell__V - 0.061749999999999999 * var_reversal_potentials__E_K) + 0.49124000000000001 * exp(0.43983232 + 0.080320000000000003 * var_chaste_interface__cell__V - 0.080320000000000003 * var_reversal_potentials__E_K)) / (1 + exp(-2.4444678999999998 + 0.51429999999999998 * var_reversal_potentials__E_K - 0.51429999999999998 * var_chaste_interface__cell__V)); // per_millisecond + const double var_IK1_K1_gate__K1_infinity = var_IK1_K1_gate__alpha_K1 / (var_IK1_K1_gate__alpha_K1 + var_IK1_K1_gate__beta_K1); // dimensionless + const double var_IK1__i_K1 = (-var_reversal_potentials__E_K + var_chaste_interface__cell__V) * var_IK1__G_K1 * var_IK1_K1_gate__K1_infinity; // microA_per_microF + const double var_IKr__i_Kr = (-var_reversal_potentials__E_K + var_chaste_interface__cell__V) * var_IKr__G_IKr * var_IKr_Rr_gate__Rr * var_chaste_interface__IKr_Xr_gate__Xr; // microA_per_microF + const double var_Itof__i_tof = (-var_reversal_potentials__E_K + var_chaste_interface__cell__V) * NV_Ith_S(mParameters, 17) * var_chaste_interface__Itof_X_gate__X_tof * var_chaste_interface__Itof_Y_gate__Y_tof; // microA_per_microF + const double var_Itos__i_tos = (-var_reversal_potentials__E_K + var_chaste_interface__cell__V) * (0.5 * var_chaste_interface__Itos_R_gate__R_tos + var_chaste_interface__Itos_Y_gate__Y_tos) * NV_Ith_S(mParameters, 21) * var_chaste_interface__Itos_X_gate__X_tos; // microA_per_microF + const double var_INa__i_Na = var_INa__i_Na_SL + var_INa__i_Na_jct; // microA_per_microF + const double var_INab__i_Nab = var_INab__i_Nab_SL + var_INab__i_Nab_jct; // microA_per_microF + d_dt_chaste_interface_var_cell__V = -var_ICaL__i_CaL - var_ICab__i_Cab - var_ICap__i_Cap - var_ICl_Ca__i_Cl_Ca - var_IClb__i_Clb - var_IK1__i_K1 - var_IKr__i_Kr - var_IKs__i_Ks - var_INa__i_Na - var_INaCa__i_NaCa - var_INaK__i_NaK - var_INab__i_Nab - var_Itof__i_tof - var_Itos__i_tos - var_cell__i_Stim; // millivolt / millisecond + } + + NV_Ith_S(rDY,0) = d_dt_chaste_interface_var_cell__V; + NV_Ith_S(rDY,1) = d_dt_chaste_interface_var_Ca_buffer__Cai; + NV_Ith_S(rDY,2) = d_dt_chaste_interface_var_INa_h_gate__h; + NV_Ith_S(rDY,3) = d_dt_chaste_interface_var_INa_j_gate__j; + NV_Ith_S(rDY,4) = d_dt_chaste_interface_var_INa_m_gate__m; + NV_Ith_S(rDY,5) = d_dt_chaste_interface_var_IKr_Xr_gate__Xr; + NV_Ith_S(rDY,6) = d_dt_chaste_interface_var_IKs_Xs_gate__Xs; + NV_Ith_S(rDY,7) = d_dt_chaste_interface_var_Itos_X_gate__X_tos; + NV_Ith_S(rDY,8) = d_dt_chaste_interface_var_Itos_Y_gate__Y_tos; + NV_Ith_S(rDY,9) = d_dt_chaste_interface_var_Itos_R_gate__R_tos; + NV_Ith_S(rDY,10) = d_dt_chaste_interface_var_Itof_X_gate__X_tof; + NV_Ith_S(rDY,11) = d_dt_chaste_interface_var_Itof_Y_gate__Y_tof; + NV_Ith_S(rDY,12) = d_dt_chaste_interface_var_ICaL_d_gate__d; + NV_Ith_S(rDY,13) = d_dt_chaste_interface_var_ICaL_f_gate__f; + NV_Ith_S(rDY,14) = d_dt_chaste_interface_var_ICaL_fCa_gate__fCaB_SL; + NV_Ith_S(rDY,15) = d_dt_chaste_interface_var_ICaL_fCa_gate__fCaB_jct; + NV_Ith_S(rDY,16) = d_dt_chaste_interface_var_Jrel_SR__R; + NV_Ith_S(rDY,17) = d_dt_chaste_interface_var_Jrel_SR__I; + NV_Ith_S(rDY,18) = d_dt_chaste_interface_var_Jrel_SR__O; + NV_Ith_S(rDY,19) = d_dt_chaste_interface_var_Na_buffer__Na_SL; + NV_Ith_S(rDY,20) = d_dt_chaste_interface_var_Na_buffer__Na_jct; + NV_Ith_S(rDY,21) = d_dt_chaste_interface_var_Na_buffer__Na_SL_buf; + NV_Ith_S(rDY,22) = d_dt_chaste_interface_var_Na_buffer__Na_jct_buf; + NV_Ith_S(rDY,23) = d_dt_chaste_interface_var_Na_buffer__Nai; + NV_Ith_S(rDY,24) = d_dt_chaste_interface_var_Ca_buffer__Ca_SR; + NV_Ith_S(rDY,25) = d_dt_chaste_interface_var_Ca_buffer__Ca_SL; + NV_Ith_S(rDY,26) = d_dt_chaste_interface_var_Ca_buffer__Ca_jct; + NV_Ith_S(rDY,27) = d_dt_chaste_interface_var_Ca_buffer__Ca_SLB_SL; + NV_Ith_S(rDY,28) = d_dt_chaste_interface_var_Ca_buffer__Ca_SLB_jct; + NV_Ith_S(rDY,29) = d_dt_chaste_interface_var_Ca_buffer__Ca_SLHigh_SL; + NV_Ith_S(rDY,30) = d_dt_chaste_interface_var_Ca_buffer__Ca_SLHigh_jct; + NV_Ith_S(rDY,31) = d_dt_chaste_interface_var_Ca_buffer__Ca_Calsequestrin; + NV_Ith_S(rDY,32) = d_dt_chaste_interface_var_cytosolic_Ca_buffer__Ca_TroponinC; + NV_Ith_S(rDY,33) = d_dt_chaste_interface_var_cytosolic_Ca_buffer__Ca_TroponinC_Ca_Mg; + NV_Ith_S(rDY,34) = d_dt_chaste_interface_var_cytosolic_Ca_buffer__Mg_TroponinC_Ca_Mg; + NV_Ith_S(rDY,35) = d_dt_chaste_interface_var_cytosolic_Ca_buffer__Ca_Calmodulin; + NV_Ith_S(rDY,36) = d_dt_chaste_interface_var_cytosolic_Ca_buffer__Ca_Myosin; + NV_Ith_S(rDY,37) = d_dt_chaste_interface_var_cytosolic_Ca_buffer__Mg_Myosin; + NV_Ith_S(rDY,38) = d_dt_chaste_interface_var_cytosolic_Ca_buffer__Ca_SRB; + NV_Ith_S(rDY,39) = d_dt_chaste_interface_var_indo_fluo_Ca_buffer_not_connected__Ca_Indo1_Cytosol; + NV_Ith_S(rDY,40) = d_dt_chaste_interface_var_indo_fluo_Ca_buffer_not_connected__Ca_Indo1_SL; + NV_Ith_S(rDY,41) = d_dt_chaste_interface_var_indo_fluo_Ca_buffer_not_connected__Ca_Indo1_jct; + NV_Ith_S(rDY,42) = d_dt_chaste_interface_var_indo_fluo_Ca_buffer_not_connected__Ca_Fluo3_Cytosol; + NV_Ith_S(rDY,43) = d_dt_chaste_interface_var_indo_fluo_Ca_buffer_not_connected__Ca_Fluo3_SL; + NV_Ith_S(rDY,44) = d_dt_chaste_interface_var_indo_fluo_Ca_buffer_not_connected__Ca_Fluo3_jct; + } + + void Dynamicshannon_wang_puglisi_weber_bers_2004FromCellMLCvode::EvaluateAnalyticJacobian(double var_chaste_interface__environment__time, N_Vector rY, N_Vector rDY, CHASTE_CVODE_DENSE_MATRIX rJacobian, N_Vector rTmp1, N_Vector rTmp2, N_Vector rTmp3) + { + double var_chaste_interface__cell__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : NV_Ith_S(rY, 0)); + // Units: millivolt; Initial value: -85.721630473733 + double var_chaste_interface__Ca_buffer__Cai = NV_Ith_S(rY, 1); + // Units: millimolar; Initial value: 8.6504944644883e-05 + double var_chaste_interface__INa_h_gate__h = NV_Ith_S(rY, 2); + // Units: dimensionless; Initial value: 0.98714602875678 + double var_chaste_interface__INa_j_gate__j = NV_Ith_S(rY, 3); + // Units: dimensionless; Initial value: 0.991826348770428 + double var_chaste_interface__INa_m_gate__m = NV_Ith_S(rY, 4); + // Units: dimensionless; Initial value: 0.0013702407736465 + double var_chaste_interface__IKr_Xr_gate__Xr = NV_Ith_S(rY, 5); + // Units: dimensionless; Initial value: 0.00846906175020028 + double var_chaste_interface__IKs_Xs_gate__Xs = NV_Ith_S(rY, 6); + // Units: dimensionless; Initial value: 0.00613557812033723 + double var_chaste_interface__Itos_X_gate__X_tos = NV_Ith_S(rY, 7); + // Units: dimensionless; Initial value: 0.00401072468238921 + double var_chaste_interface__Itos_Y_gate__Y_tos = NV_Ith_S(rY, 8); + // Units: dimensionless; Initial value: 0.31555225368514 + double var_chaste_interface__Itos_R_gate__R_tos = NV_Ith_S(rY, 9); + // Units: dimensionless; Initial value: 0.402577243036347 + double var_chaste_interface__Itof_X_gate__X_tof = NV_Ith_S(rY, 10); + // Units: dimensionless; Initial value: 0.00401068798369438 + double var_chaste_interface__Itof_Y_gate__Y_tof = NV_Ith_S(rY, 11); + // Units: dimensionless; Initial value: 0.994632857675454 + double var_chaste_interface__ICaL_d_gate__d = NV_Ith_S(rY, 12); + // Units: dimensionless; Initial value: 6.99526086177479e-06 + double var_chaste_interface__ICaL_f_gate__f = NV_Ith_S(rY, 13); + // Units: dimensionless; Initial value: 1.00067601563206 + double var_chaste_interface__ICaL_fCa_gate__fCaB_SL = NV_Ith_S(rY, 14); + // Units: dimensionless; Initial value: 0.0150193299768419 + double var_chaste_interface__ICaL_fCa_gate__fCaB_jct = NV_Ith_S(rY, 15); + // Units: dimensionless; Initial value: 0.0244048782575591 + double var_chaste_interface__Jrel_SR__R = NV_Ith_S(rY, 16); + // Units: dimensionless; Initial value: 0.890917121306535 + double var_chaste_interface__Jrel_SR__I = NV_Ith_S(rY, 17); + // Units: dimensionless; Initial value: 8.71752603681652e-08 + double var_chaste_interface__Jrel_SR__O = NV_Ith_S(rY, 18); + // Units: dimensionless; Initial value: 7.1199533741995e-07 + double var_chaste_interface__Na_buffer__Na_SL = NV_Ith_S(rY, 19); + // Units: millimolar; Initial value: 8.87161932058707 + double var_chaste_interface__Na_buffer__Na_jct = NV_Ith_S(rY, 20); + // Units: millimolar; Initial value: 8.87031835089116 + double var_chaste_interface__Na_buffer__Na_SL_buf = NV_Ith_S(rY, 21); + // Units: millimolar; Initial value: 0.77606800956492 + double var_chaste_interface__Na_buffer__Na_jct_buf = NV_Ith_S(rY, 22); + // Units: millimolar; Initial value: 3.55668431730337 + double var_chaste_interface__Na_buffer__Nai = NV_Ith_S(rY, 23); + // Units: millimolar; Initial value: 8.87200572571131 + double var_chaste_interface__Ca_buffer__Ca_SR = NV_Ith_S(rY, 24); + // Units: millimolar; Initial value: 0.547125831028543 + double var_chaste_interface__Ca_buffer__Ca_SL = NV_Ith_S(rY, 25); + // Units: millimolar; Initial value: 0.000104971310105451 + double var_chaste_interface__Ca_buffer__Ca_jct = NV_Ith_S(rY, 26); + // Units: millimolar; Initial value: 0.000174045152623969 + double var_chaste_interface__Ca_buffer__Ca_SLB_SL = NV_Ith_S(rY, 27); + // Units: millimolar; Initial value: 0.00973710481246467 + double var_chaste_interface__Ca_buffer__Ca_SLB_jct = NV_Ith_S(rY, 28); + // Units: millimolar; Initial value: 0.00774564218017916 + double var_chaste_interface__Ca_buffer__Ca_SLHigh_SL = NV_Ith_S(rY, 29); + // Units: millimolar; Initial value: 0.113168405274355 + double var_chaste_interface__Ca_buffer__Ca_SLHigh_jct = NV_Ith_S(rY, 30); + // Units: millimolar; Initial value: 0.0772568134367606 + double var_chaste_interface__Ca_buffer__Ca_Calsequestrin = NV_Ith_S(rY, 31); + // Units: millimolar; Initial value: 1.18828527890062 + double var_chaste_interface__cytosolic_Ca_buffer__Ca_TroponinC = NV_Ith_S(rY, 32); + // Units: millimolar; Initial value: 0.00886665040283094 + double var_chaste_interface__cytosolic_Ca_buffer__Ca_TroponinC_Ca_Mg = NV_Ith_S(rY, 33); + // Units: millimolar; Initial value: 0.117873278193472 + double var_chaste_interface__cytosolic_Ca_buffer__Mg_TroponinC_Ca_Mg = NV_Ith_S(rY, 34); + // Units: millimolar; Initial value: 0.0103906683506505 + double var_chaste_interface__cytosolic_Ca_buffer__Ca_Calmodulin = NV_Ith_S(rY, 35); + // Units: millimolar; Initial value: 0.000293073957804278 + double var_chaste_interface__cytosolic_Ca_buffer__Ca_Myosin = NV_Ith_S(rY, 36); + // Units: millimolar; Initial value: 0.00195899238146509 + double var_chaste_interface__cytosolic_Ca_buffer__Mg_Myosin = NV_Ith_S(rY, 37); + // Units: millimolar; Initial value: 0.137523520981802 + double var_chaste_interface__cytosolic_Ca_buffer__Ca_SRB = NV_Ith_S(rY, 38); + // Units: millimolar; Initial value: 0.00215728901718264 + double var_chaste_interface__indo_fluo_Ca_buffer_not_connected__Ca_Indo1_Cytosol = NV_Ith_S(rY, 39); + // Units: millimolar; Initial value: 0.0 + double var_chaste_interface__indo_fluo_Ca_buffer_not_connected__Ca_Indo1_SL = NV_Ith_S(rY, 40); + // Units: millimolar; Initial value: 0.0 + double var_chaste_interface__indo_fluo_Ca_buffer_not_connected__Ca_Indo1_jct = NV_Ith_S(rY, 41); + // Units: millimolar; Initial value: 0.0 + double var_chaste_interface__indo_fluo_Ca_buffer_not_connected__Ca_Fluo3_Cytosol = NV_Ith_S(rY, 42); + // Units: millimolar; Initial value: 0.0 + double var_chaste_interface__indo_fluo_Ca_buffer_not_connected__Ca_Fluo3_SL = NV_Ith_S(rY, 43); + // Units: millimolar; Initial value: 0.0 + double var_chaste_interface__indo_fluo_Ca_buffer_not_connected__Ca_Fluo3_jct = NV_Ith_S(rY, 44); + // Units: millimolar; Initial value: 0.0 + const double var_x0 = 1 / var_chaste_interface__Ca_buffer__Ca_jct; + const double var_x1 = 1 + 0.10000000000000001 * var_x0; + const double var_x2 = 1 / var_chaste_interface__Ca_buffer__Ca_SL; + const double var_x3 = 1 + 0.10000000000000001 * var_x2; + const double var_x4 = NV_Ith_S(mParameters, 17) * var_chaste_interface__Itof_Y_gate__Y_tof; + const double var_x5 = -var_chaste_interface__Itos_Y_gate__Y_tos - 0.5 * var_chaste_interface__Itos_R_gate__R_tos; + const double var_x6 = exp(-7.0000000000000009 - 1.6666666666666667 * log10(var_chaste_interface__Ca_buffer__Ca_jct)); + const double var_x7 = 1 + var_x6; + const double var_x8 = 0.057000000000000002 + 0.19 / var_x7; + const double var_x9 = pow(var_chaste_interface__IKs_Xs_gate__Xs, 2) * NV_Ith_S(mParameters, 20); + const double var_x10 = var_x8 * var_x9; + const double var_x11 = exp(-7.0000000000000009 - 1.6666666666666667 * log10(var_chaste_interface__Ca_buffer__Ca_SL)); + const double var_x12 = 1 + var_x11; + const double var_x13 = 0.057000000000000002 + 0.19 / var_x12; + const double var_x14 = var_x13 * var_x9; + const double var_x15 = sqrt(NV_Ith_S(mParameters, 8)); + const double var_x16 = exp(1.4732142857142858 + 0.044642857142857144 * var_chaste_interface__cell__V); + const double var_x17 = 1 + var_x16; + const double var_x18 = 0.43033148291193518 / var_x17; + const double var_x19 = pow(var_chaste_interface__INa_m_gate__m, 3); + const double var_x20 = var_x19 * NV_Ith_S(mParameters, 14) * var_chaste_interface__INa_j_gate__j; + const double var_x21 = var_x20 * var_chaste_interface__INa_h_gate__h; + const double var_x22 = log(NV_Ith_S(mParameters, 8) / NV_Ith_S(mParameters, 5)); + const double var_x23 = 1 / NV_Ith_S(mParameters, 10); + const double var_x24 = var_x23 * NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 23); + const double var_x25 = var_x22 * var_x24; + const double var_x26 = exp(-14.1227775 + 0.23849999999999999 * var_chaste_interface__cell__V - 0.23849999999999999 * var_x25); + const double var_x27 = 1 + var_x26; + const double var_x28 = 1 / var_x27; + const double var_x29 = exp(-2.4444678999999998 - 0.51429999999999998 * var_chaste_interface__cell__V + 0.51429999999999998 * var_x22 * var_x23 * NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 23)); + const double var_x30 = 1 + var_x29; + const double var_x31 = 1 / var_x30; + const double var_x32 = exp(-36.698642499999998 + 0.061749999999999999 * var_chaste_interface__cell__V - 0.061749999999999999 * var_x25); + const double var_x33 = exp(0.43983232 + 0.080320000000000003 * var_chaste_interface__cell__V - 0.080320000000000003 * var_x25); + const double var_x34 = var_x32 + 0.49124000000000001 * var_x33; + const double var_x35 = var_x31 * var_x34; + const double var_x36 = 1 / (var_x35 + 1.02 * var_x28); + const double var_x37 = 1 / (NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 23)); + const double var_x38 = var_x37 * NV_Ith_S(mParameters, 10); + const double var_x39 = exp(0.34999999999999998 * var_x38 * var_chaste_interface__cell__V); + const double var_x40 = pow(var_chaste_interface__Na_buffer__Na_jct, 3); + const double var_x41 = var_x40 * NV_Ith_S(mParameters, 6); + const double var_x42 = var_x39 * var_x41; + const double var_x43 = 0.34999999999999998 * var_x38; + const double var_x44 = var_x38 * var_chaste_interface__cell__V; + const double var_x45 = exp(-0.65000000000000002 * var_x44); + const double var_x46 = pow(NV_Ith_S(mParameters, 9), 3); + const double var_x47 = var_x46 * var_chaste_interface__Ca_buffer__Ca_jct; + const double var_x48 = var_x45 * var_x47; + const double var_x49 = 0.65000000000000002 * var_x38; + const double var_x50 = (1 + 278.55153203342621 * var_chaste_interface__Ca_buffer__Ca_jct) * var_chaste_interface__Ca_buffer__Ca_jct; + const double var_x51 = 1 + 0.00053869674493876331 * var_x40; + const double var_x52 = 0.0035899999999999999 * var_x46; + const double var_x53 = 1 / (var_x41 + var_x47 + 669921.875 * var_x50 + 1.3 * var_x40 + var_x51 * var_x52); + const double var_x54 = 1 + 1.6777215999999998e-11 / pow(var_chaste_interface__Ca_buffer__Ca_jct, 3); + const double var_x55 = 1 / var_x54; + const double var_x56 = 1 + 0.27000000000000002 * var_x45; + const double var_x57 = 1 / var_x56; + const double var_x58 = -31 + 0.10000000000000001 * NV_Ith_S(mParameters, 23); + const double var_x59 = pow(1.5700000000000001, var_x58); + const double var_x60 = var_x59 * NV_Ith_S(mParameters, 22); + const double var_x61 = var_x57 * var_x60; + const double var_x62 = var_x55 * var_x61; + const double var_x63 = var_x53 * var_x62; + const double var_x64 = var_x63 * (var_x42 * var_x43 + var_x48 * var_x49); + const double var_x65 = pow(var_chaste_interface__Na_buffer__Na_SL, 3); + const double var_x66 = var_x65 * NV_Ith_S(mParameters, 6); + const double var_x67 = var_x39 * var_x66; + const double var_x68 = var_x46 * var_chaste_interface__Ca_buffer__Ca_SL; + const double var_x69 = var_x45 * var_x68; + const double var_x70 = (1 + 278.55153203342621 * var_chaste_interface__Ca_buffer__Ca_SL) * var_chaste_interface__Ca_buffer__Ca_SL; + const double var_x71 = 1 + 0.00053869674493876331 * var_x65; + const double var_x72 = 1 / (var_x66 + var_x68 + 669921.875 * var_x70 + 1.3 * var_x65 + var_x52 * var_x71); + const double var_x73 = 1 + 1.6777215999999998e-11 / pow(var_chaste_interface__Ca_buffer__Ca_SL, 3); + const double var_x74 = 1 / var_x73; + const double var_x75 = var_x61 * var_x74; + const double var_x76 = var_x72 * var_x75; + const double var_x77 = var_x76 * (var_x43 * var_x67 + var_x49 * var_x69); + const double var_x78 = pow(var_x27, (-2)); + const double var_x79 = -var_x25 + var_chaste_interface__cell__V; + const double var_x80 = var_x15 * var_x79; + const double var_x81 = pow(1.49, (-124 + 0.40000000000000002 * NV_Ith_S(mParameters, 23))); + const double var_x82 = 1 / var_chaste_interface__Na_buffer__Na_jct; + const double var_x83 = var_x81 * pow(var_x82, 4); + const double var_x84 = 0.10000000000000001 * var_chaste_interface__cell__V; + const double var_x85 = exp(-var_x38 * var_x84); + const double var_x86 = exp(0.01485884101040119 * NV_Ith_S(mParameters, 9)); + const double var_x87 = exp(-var_x44); + const double var_x88 = 1 + 0.1245 * var_x85 + 0.036499999999999998 * var_x87 * (-0.14285714285714285 + 0.14285714285714285 * var_x86); + const double var_x89 = pow(1.6299999999999999, var_x58) * NV_Ith_S(mParameters, 8) / (1.5 + NV_Ith_S(mParameters, 8)); + const double var_x90 = var_x89 * (0.012450000000000001 * var_x38 * var_x85 + var_x38 * var_x87 * (-0.0052142857142857138 + 0.0052142857142857138 * var_x86)) / pow(var_x88, 2); + const double var_x91 = var_x90 / (1 + 14641 * var_x83); + const double var_x92 = 1 / var_chaste_interface__Na_buffer__Na_SL; + const double var_x93 = var_x81 * pow(var_x92, 4); + const double var_x94 = var_x90 / (1 + 14641 * var_x93); + const double var_x95 = exp(var_x44); + const double var_x96 = 0.75 * var_x95; + const double var_x97 = -0.75 * NV_Ith_S(mParameters, 8) + var_x96 * NV_Ith_S(mParameters, 5); + const double var_x98 = var_x37 * pow(NV_Ith_S(mParameters, 10), 2); + const double var_x99 = -1 + var_x95; + const double var_x100 = 1 / var_x99; + const double var_x101 = pow(1.8, var_x58); + const double var_x102 = var_x101 * var_chaste_interface__ICaL_f_gate__f; + const double var_x103 = var_x102 * var_chaste_interface__ICaL_d_gate__d; + const double var_x104 = var_x100 * var_x103; + const double var_x105 = var_x104 * var_x98; + const double var_x106 = var_x105 * var_x97; + const double var_x107 = 1 - 0.10000000000000001 * var_chaste_interface__ICaL_fCa_gate__fCaB_SL - 0.90000000000000002 * var_chaste_interface__ICaL_fCa_gate__fCaB_jct; + const double var_x108 = 1.215e-7 * var_x107; + const double var_x109 = var_x67 - var_x69; + const double var_x110 = var_x109 * var_x72; + const double var_x111 = var_x38 * var_x45 * var_x60 / pow(var_x56, 2); + const double var_x112 = var_x110 * var_x111 * var_x74; + const double var_x113 = var_x42 - var_x48; + const double var_x114 = var_x113 * var_x53; + const double var_x115 = var_x111 * var_x114 * var_x55; + const double var_x116 = 1 - var_chaste_interface__ICaL_fCa_gate__fCaB_SL; + const double var_x117 = exp(2 * var_x44); + const double var_x118 = -1 + var_x117; + const double var_x119 = NV_Ith_S(mParameters, 12) / var_x118; + const double var_x120 = var_x103 * var_x119; + const double var_x121 = var_x116 * var_x120; + const double var_x122 = -0.34100000000000003 * NV_Ith_S(mParameters, 6); + const double var_x123 = 0.34100000000000003 * var_x117; + const double var_x124 = var_x122 + var_x123 * var_chaste_interface__Ca_buffer__Ca_SL; + const double var_x125 = 0.18000000000000002 * var_x124; + const double var_x126 = var_x121 * var_x125 * var_x98; + const double var_x127 = 1 - var_chaste_interface__ICaL_fCa_gate__fCaB_jct; + const double var_x128 = var_x127 * var_x98; + const double var_x129 = var_x120 * var_x128; + const double var_x130 = var_x122 + var_x123 * var_chaste_interface__Ca_buffer__Ca_jct; + const double var_x131 = 1.6200000000000001 * var_x130; + const double var_x132 = var_x129 * var_x131; + const double var_x133 = var_x104 * var_x95; + const double var_x134 = pow(NV_Ith_S(mParameters, 10), 3); + const double var_x135 = pow(NV_Ith_S(mParameters, 11), (-2)); + const double var_x136 = pow(NV_Ith_S(mParameters, 23), (-2)); + const double var_x137 = var_x134 * var_x135 * var_x136 * var_chaste_interface__cell__V; + const double var_x138 = pow(var_x99, (-2)); + const double var_x139 = var_x127 * var_x137; + const double var_x140 = 1.10484 * var_x117 * var_x120 * var_x139 * var_chaste_interface__Ca_buffer__Ca_jct; + const double var_x141 = var_x117 * var_x121; + const double var_x142 = 0.12276000000000002 * var_x137 * var_x141 * var_chaste_interface__Ca_buffer__Ca_SL; + const double var_x143 = var_x103 * var_x137; + const double var_x144 = var_x117 * var_x143 * NV_Ith_S(mParameters, 12) / pow(var_x118, 2); + const double var_x145 = 0.36000000000000004 * var_x116 * var_x124 * var_x144; + const double var_x146 = var_x127 * var_x130; + const double var_x147 = 3.2400000000000002 * var_x144 * var_x146; + const double var_x148 = -0.75 * NV_Ith_S(mParameters, 9); + const double var_x149 = var_x148 + var_x96 * var_chaste_interface__Na_buffer__Na_SL; + const double var_x150 = var_x116 * var_x149; + const double var_x151 = 6.7499999999999994e-10 * var_x150; + const double var_x152 = 5.0624999999999998e-10 * var_x116 * var_x95; + const double var_x153 = var_x138 * var_x143 * var_x95; + const double var_x154 = var_x105 * var_x151 - var_x151 * var_x153 + var_x104 * var_x137 * var_x152 * var_chaste_interface__Na_buffer__Na_SL; + const double var_x155 = var_x148 + var_x96 * var_chaste_interface__Na_buffer__Na_jct; + const double var_x156 = var_x104 * var_x155; + const double var_x157 = 6.0749999999999998e-9 * var_x128; + const double var_x158 = 4.5562499999999999e-9 * var_x133; + const double var_x159 = var_x127 * var_x155; + const double var_x160 = var_x156 * var_x157 - 6.0749999999999998e-9 * var_x153 * var_x159 + var_x139 * var_x158 * var_chaste_interface__Na_buffer__Na_jct; + const double var_x161 = -var_x24 * log(var_x82 * NV_Ith_S(mParameters, 9)) + var_chaste_interface__cell__V; + const double var_x162 = 0.11 * var_x161; + const double var_x163 = -var_x24 * log(var_x92 * NV_Ith_S(mParameters, 9)) + var_chaste_interface__cell__V; + const double var_x164 = 0.89000000000000001 * var_x163; + const double var_x165 = NV_Ith_S(mParameters, 14) * var_chaste_interface__INa_h_gate__h; + const double var_x166 = var_x165 * var_x19; + const double var_x167 = var_x165 * pow(var_chaste_interface__INa_m_gate__m, 2) * var_chaste_interface__INa_j_gate__j; + const double var_x168 = var_x161 * var_x167; + const double var_x169 = var_x163 * var_x167; + const double var_x170 = 1 / (0.018329999999999999 * var_chaste_interface__Na_buffer__Nai + NV_Ith_S(mParameters, 5)); + const double var_x171 = -var_x24 * log(var_x170 * (0.018329999999999999 * NV_Ith_S(mParameters, 9) + NV_Ith_S(mParameters, 8))) + var_chaste_interface__cell__V; + const double var_x172 = var_x171 * NV_Ith_S(mParameters, 20) * var_chaste_interface__IKs_Xs_gate__Xs; + const double var_x173 = -var_x79; + const double var_x174 = NV_Ith_S(mParameters, 21) * var_chaste_interface__Itos_X_gate__X_tos; + const double var_x175 = var_x100 * var_chaste_interface__cell__V; + const double var_x176 = var_x102 * var_x175; + const double var_x177 = var_x155 * var_x157; + const double var_x178 = var_x176 * var_x98; + const double var_x179 = var_x108 * var_x97; + const double var_x180 = var_x98 * var_chaste_interface__cell__V; + const double var_x181 = var_x125 * var_x180; + const double var_x182 = var_x102 * var_x119; + const double var_x183 = var_x116 * var_x182; + const double var_x184 = var_x128 * var_chaste_interface__cell__V; + const double var_x185 = var_x131 * var_x184; + const double var_x186 = var_x101 * var_chaste_interface__ICaL_d_gate__d; + const double var_x187 = var_x175 * var_x186; + const double var_x188 = var_x187 * var_x98; + const double var_x189 = var_x119 * var_x186; + const double var_x190 = var_x116 * var_x189; + const double var_x191 = var_x105 * var_chaste_interface__cell__V; + const double var_x192 = var_x106 * var_chaste_interface__cell__V; + const double var_x193 = pow(var_chaste_interface__Na_buffer__Na_SL, 2); + const double var_x194 = 3 * NV_Ith_S(mParameters, 6); + const double var_x195 = 5.8017639429904805e-6 * var_x46; + const double var_x196 = -3.9000000000000004 * var_x193 - var_x193 * var_x194 - var_x193 * var_x195; + const double var_x197 = 5.3588338192419823e-9 * var_x46; + const double var_x198 = var_x109 * var_x75 / pow((var_x70 + 1.9405247813411081e-6 * var_x65 + 1.4927113702623908e-6 * var_x66 + 1.4927113702623908e-6 * var_x68 + var_x197 * var_x71), 2); + const double var_x199 = 1.9830866390704556e-12 * var_x198; + const double var_x200 = var_x39 * NV_Ith_S(mParameters, 6); + const double var_x201 = var_x193 * var_x200 * var_x76; + const double var_x202 = var_x89 / var_x88; + const double var_x203 = var_x202 * var_x92 * var_x93 / pow((6.8301345536507063e-5 + var_x93), 2); + const double var_x204 = var_x24 * var_x92; + const double var_x205 = 0.89000000000000001 * var_x21; + const double var_x206 = 0.00026433000000000001 * var_x204 + var_x152 * var_x191 + var_x204 * var_x205; + const double var_x207 = pow(var_chaste_interface__Na_buffer__Na_jct, 2); + const double var_x208 = -3.9000000000000004 * var_x207 - var_x194 * var_x207 - var_x195 * var_x207; + const double var_x209 = var_x113 * var_x62 / pow((var_x50 + 1.9405247813411081e-6 * var_x40 + 1.4927113702623908e-6 * var_x41 + 1.4927113702623908e-6 * var_x47 + var_x197 * var_x51), 2); + const double var_x210 = 2.4510059584016866e-13 * var_x209; + const double var_x211 = var_x200 * var_x207 * var_x63; + const double var_x212 = var_x202 * var_x82 * var_x83 / pow((6.8301345536507063e-5 + var_x83), 2); + const double var_x213 = var_x24 * var_x82; + const double var_x214 = 0.11 * var_x21; + const double var_x215 = 3.2670000000000004e-5 * var_x213 + var_x158 * var_x184 + var_x213 * var_x214; + const double var_x216 = var_x170 * var_x24; + const double var_x217 = var_x24 * log(NV_Ith_S(mParameters, 7) / NV_Ith_S(mParameters, 4)) + var_chaste_interface__cell__V; + const double var_x218 = var_x171 * var_x9 / log(10); + const double var_x219 = var_x110 * var_x61 / (pow(var_x73, 2) * pow(var_chaste_interface__Ca_buffer__Ca_SL, 4)); + const double var_x220 = 669921.875 + var_x46; + const double var_x221 = -var_x220 - 373215529.24791086 * var_chaste_interface__Ca_buffer__Ca_SL; + const double var_x222 = pow(2.3500000000000001, var_x58); + const double var_x223 = pow(var_x2, 1.6000000000000001); + const double var_x224 = 0.00011182849999999999 * var_x2 * var_x24 + 0.061380000000000011 * var_x141 * var_x180 + 5.0104537825247566e-7 * var_x2 * var_x222 * var_x223 / pow((1 + 5.2281977629563632e-6 * var_x223), 2); + const double var_x225 = pow(var_chaste_interface__Ca_buffer__Ca_jct, 2); + const double var_x226 = -var_x220 - 373215529.24791086 * var_chaste_interface__Ca_buffer__Ca_jct; + const double var_x227 = var_x114 * var_x61 / (pow(var_x54, 2) * pow(var_chaste_interface__Ca_buffer__Ca_jct, 4)); + const double var_x228 = pow(var_x0, 1.6000000000000001); + const double var_x229 = 1.38215e-5 * var_x0 * var_x24 + 0.55242000000000002 * var_x117 * var_x129 * var_chaste_interface__cell__V + 6.1926956862665531e-8 * var_x0 * var_x222 * var_x228 / pow((1 + 5.2281977629563632e-6 * var_x228), 2); + const double var_x230 = 32.700000000000003 * var_chaste_interface__cytosolic_Ca_buffer__Ca_TroponinC; + const double var_x231 = 34 * var_chaste_interface__cytosolic_Ca_buffer__Ca_Calmodulin; + const double var_x232 = 100 * var_chaste_interface__cytosolic_Ca_buffer__Ca_SRB; + const double var_x233 = pow(var_chaste_interface__Ca_buffer__Cai, 0.78699999999999992); + const double var_x234 = pow(var_chaste_interface__Ca_buffer__Ca_SR, 1.7869999999999999); + const double var_x235 = 0.38742512113256738 * var_x234; + const double var_x236 = pow(var_chaste_interface__Ca_buffer__Cai, 1.7869999999999999); + const double var_x237 = 1 / (1 + var_x235 + 2814485.1633595936 * var_x236); + const double var_x238 = pow(2.6000000000000001, var_x58); + const double var_x239 = var_x238 * NV_Ith_S(mParameters, 2); + const double var_x240 = var_x237 * var_x239; + const double var_x241 = var_x239 * (-var_x235 + 2814485.1633595936 * var_x236) / pow((3.5530476870814998e-7 + var_x236 + 1.3765399305573384e-7 * var_x234), 2); + const double var_x242 = var_x233 * var_x241; + const double var_x243 = 2.3700000000000001 * var_chaste_interface__cytosolic_Ca_buffer__Ca_TroponinC_Ca_Mg + 2.3700000000000001 * var_chaste_interface__cytosolic_Ca_buffer__Mg_TroponinC_Ca_Mg; + const double var_x244 = 13.800000000000001 * var_chaste_interface__cytosolic_Ca_buffer__Ca_Myosin + 13.800000000000001 * var_chaste_interface__cytosolic_Ca_buffer__Mg_Myosin; + const double var_x245 = pow(var_chaste_interface__Ca_buffer__Ca_SR, 0.78699999999999992); + const double var_x246 = var_x240 * var_x245; + const double var_x247 = var_x241 * var_x245; + const double var_x248 = 0.019599999999999999 + 32.700000000000003 * var_chaste_interface__Ca_buffer__Cai; + const double var_x249 = 2.3700000000000001 * var_chaste_interface__Ca_buffer__Cai; + const double var_x250 = 0.23799999999999999 + 34 * var_chaste_interface__Ca_buffer__Cai; + const double var_x251 = 13.800000000000001 * var_chaste_interface__Ca_buffer__Cai; + const double var_x252 = 0.059999999999999998 + 100 * var_chaste_interface__Ca_buffer__Cai; + const double var_x253 = exp(-11.764705882352942 + 0.14705882352941177 * NV_Ith_S(mParameters, 16) - 0.14705882352941177 * var_chaste_interface__cell__V); + const double var_x254 = var_chaste_interface__cell__V < -40; + const double var_x255 = ((var_x254) ? (0.13500000000000001 * var_x253) : (0)); + const double var_x256 = exp(0.34999999999999998 * var_chaste_interface__cell__V - 0.34999999999999998 * NV_Ith_S(mParameters, 16)); + const double var_x257 = exp(0.079000000000000001 * var_chaste_interface__cell__V - 0.079000000000000001 * NV_Ith_S(mParameters, 16)); + const double var_x258 = exp(-0.96036036036036043 + 0.0900900900900901 * NV_Ith_S(mParameters, 16) - 0.0900900900900901 * var_chaste_interface__cell__V); + const double var_x259 = 1 + var_x258; + const double var_x260 = ((var_x254) ? (310000 * var_x256 + 3.5600000000000001 * var_x257) : (7.6923076923076916 / var_x259)); + const double var_x261 = var_x255 + var_x260; + const double var_x262 = ((var_x254) ? (-0.019852941176470591 * var_x253) : (0)); + const double var_x263 = var_x255 + var_x260; + const double var_x264 = 0.01 * NV_Ith_S(mParameters, 15); + const double var_x265 = 1 - var_x264; + const double var_x266 = var_x265 / var_x263; + const double var_x267 = ((var_x254) ? (0.28123999999999999 * var_x257 + 108500 * var_x256) : (0.693000693000693 * var_x258 / pow(var_x259, 2))); + const double var_x268 = exp(-5.5312920000000005 + 0.13780000000000001 * NV_Ith_S(mParameters, 16) - 0.13780000000000001 * var_chaste_interface__cell__V); + const double var_x269 = 1 + var_x268; + const double var_x270 = exp(0.01052 * NV_Ith_S(mParameters, 16) - 0.01052 * var_chaste_interface__cell__V); + const double var_x271 = var_x270 / var_x269; + const double var_x272 = exp(-3.2000000000000002 - var_x84 + 0.10000000000000001 * NV_Ith_S(mParameters, 16)); + const double var_x273 = 1 + var_x272; + const double var_x274 = exp(2.5349999999999999e-7 * NV_Ith_S(mParameters, 16) - 2.5349999999999999e-7 * var_chaste_interface__cell__V); + const double var_x275 = var_x274 / var_x273; + const double var_x276 = ((var_x254) ? (0.1212 * var_x271) : (0.29999999999999999 * var_x275)); + const double var_x277 = 37.780000000000001 + var_chaste_interface__cell__V; + const double var_x278 = exp(0.24440000000000001 * var_chaste_interface__cell__V - 0.24440000000000001 * NV_Ith_S(mParameters, 16)); + const double var_x279 = exp(0.043909999999999998 * NV_Ith_S(mParameters, 16) - 0.043909999999999998 * var_chaste_interface__cell__V); + const double var_x280 = -127140 * var_x278 - 3.4740000000000003e-5 * var_x279; + const double var_x281 = exp(24.640530000000002 + 0.311 * var_chaste_interface__cell__V - 0.311 * NV_Ith_S(mParameters, 16)); + const double var_x282 = 1 + var_x281; + const double var_x283 = 1 / var_x282; + const double var_x284 = var_x280 * var_x283; + const double var_x285 = ((var_x254) ? (var_x277 * var_x284) : (0)); + const double var_x286 = var_x276 + var_x285; + const double var_x287 = ((var_x254) ? (var_x284 + var_x277 * var_x283 * (1.5254334000000001e-6 * var_x279 - 31073.016 * var_x278) - 0.311 * var_x277 * var_x280 * var_x281 / pow(var_x282, 2)) : (0)); + const double var_x288 = var_x276 + var_x285; + const double var_x289 = var_x265 / var_x288; + const double var_x290 = ((var_x254) ? (-0.001275024 * var_x271 + 0.016701360000000002 * var_x268 * var_x270 / pow(var_x269, 2)) : (-7.6049999999999996e-8 * var_x275 + 0.029999999999999999 * var_x272 * var_x274 / pow(var_x273, 2))); + const double var_x291 = exp(-4.7130000000000001 - var_x84); + const double var_x292 = 1 - var_x291; + const double var_x293 = 1 / var_x292; + const double var_x294 = exp(-0.090909090909090912 * var_chaste_interface__cell__V); + const double var_x295 = 47.130000000000003 + var_chaste_interface__cell__V; + const double var_x296 = 0.32000000000000001 * var_x293; + const double var_x297 = 0.080000000000000002 * var_x294 + var_x295 * var_x296; + const double var_x298 = 1 / var_x297; + const double var_x299 = 0.032000000000000001 * var_x291 * var_x295 / pow(var_x292, 2); + const double var_x300 = var_x299 + 0.0072727272727272727 * var_x294 - 0.32000000000000001 * var_x293; + const double var_x301 = var_x293 * var_x295; + const double var_x302 = exp(-6.666666666666667 - 0.13333333333333333 * var_chaste_interface__cell__V); + const double var_x303 = 1 + var_x302; + const double var_x304 = exp(1.45 + 0.14499999999999999 * var_chaste_interface__cell__V); + const double var_x305 = -1 + var_x304; + const double var_x306 = 1 / var_x305; + const double var_x307 = exp(-0.86099999999999999 - 0.123 * var_chaste_interface__cell__V); + const double var_x308 = 1 - var_x307; + const double var_x309 = 1 / var_x308; + const double var_x310 = 7 + var_chaste_interface__cell__V; + const double var_x311 = 10 + var_chaste_interface__cell__V; + const double var_x312 = 0.00060999999999999997 * var_x306 * var_x311 + 0.0013799999999999999 * var_x309 * var_x310; + const double var_x313 = exp(0.089820359281437126 - 0.059880239520958084 * var_chaste_interface__cell__V); + const double var_x314 = 1 + var_x313; + const double var_x315 = exp(2.0609999999999999 + 0.068699999999999997 * var_chaste_interface__cell__V); + const double var_x316 = -1 + var_x315; + const double var_x317 = 1 / var_x316; + const double var_x318 = exp(-4.4399999999999995 - 0.14799999999999999 * var_chaste_interface__cell__V); + const double var_x319 = 1 - var_x318; + const double var_x320 = 1 / var_x319; + const double var_x321 = 30 + var_chaste_interface__cell__V; + const double var_x322 = 0.00013100000000000001 * var_x317 * var_x321 + 7.1899999999999999e-5 * var_x320 * var_x321; + const double var_x323 = 0.20000000000000001 + 0.066666666666666666 * var_chaste_interface__cell__V; + const double var_x324 = exp(var_x323); + const double var_x325 = 1 + var_x324; + const double var_x326 = 1 / var_x325; + const double var_x327 = 1 / (0.5 + 9 * var_x326); + const double var_x328 = exp(-var_x323); + const double var_x329 = 1 + var_x328; + const double var_x330 = 0.066666666666666666 * var_x328 / pow(var_x329, 2); + const double var_x331 = -1 / var_x329; + const double var_x332 = 0.10000000000000001 * var_chaste_interface__cell__V; + const double var_x333 = exp(6 + var_x332); + const double var_x334 = 1 + var_x333; + const double var_x335 = 1 / var_x334; + const double var_x336 = 1 / (30 + 3000 * var_x335); + const double var_x337 = exp(3.3500000000000001 + var_x332); + const double var_x338 = 1 + var_x337; + const double var_x339 = pow(var_x338, (-2)); + const double var_x340 = 0.10000000000000001 * var_x337 * var_x339; + const double var_x341 = pow(var_x334, (-2)); + const double var_x342 = 1 / var_x338; + const double var_x343 = -var_x342; + const double var_x344 = 1 / (220 + 2800 * var_x335); + const double var_x345 = exp(-0.0011111111111111111 * pow(var_chaste_interface__cell__V, 2)); + const double var_x346 = 1 / (1.5 + 3.5 * var_x345); + const double var_x347 = 1 / (20 + 20 * var_x342); + const double var_x348 = exp(-2.4166666666666665 - 0.16666666666666666 * var_chaste_interface__cell__V); + const double var_x349 = 1 - var_x348; + const double var_x350 = 1 / var_x349; + const double var_x351 = 1 + var_x348; + const double var_x352 = 1 / var_x351; + const double var_x353 = -var_chaste_interface__ICaL_d_gate__d + var_x352; + const double var_x354 = 14.5 + var_chaste_interface__cell__V; + const double var_x355 = 0.0058333333333333336 * var_x348 * var_x354; + const double var_x356 = 0.019699999999999999 * exp(-0.23877882250000002 * pow((1 + 0.068965517241379309 * var_chaste_interface__cell__V), 2)); + const double var_x357 = 0.02 + var_x356; + const double var_x358 = exp(9.7388888888888889 + 0.27777777777777779 * var_chaste_interface__cell__V); + const double var_x359 = 1 + var_x358; + const double var_x360 = exp(2.5 - 0.050000000000000003 * var_chaste_interface__cell__V); + const double var_x361 = 1 + var_x360; + const double var_x362 = 1 / var_chaste_interface__Ca_buffer__Ca_SR; + const double var_x363 = pow(var_x362, 2.5); + const double var_x364 = 1 + 0.13584112963311223 * var_x363; + const double var_x365 = 1 / var_x364; + const double var_x366 = 7.5 - 7 * var_x365; + const double var_x367 = -var_x366; + const double var_x368 = 1 / (15 - 14 * var_x365); + const double var_x369 = 10 * var_x225 * var_x368; + const double var_x370 = pow(var_x364, (-2)); + const double var_x371 = var_x362 * var_x363 * var_x370; + const double var_x372 = 0.21130842387373014 * var_x225 * var_x371 / pow((1 - 0.93333333333333335 * var_x365), 2); + const double var_x373 = var_x372 * var_chaste_interface__Jrel_SR__R; + const double var_x374 = 20 * var_x368; + const double var_x375 = var_x374 * var_chaste_interface__Ca_buffer__Ca_jct * var_chaste_interface__Jrel_SR__R; + const double var_x376 = 2.3772197685794643 * var_x371 * var_chaste_interface__Ca_buffer__Ca_jct * var_chaste_interface__Jrel_SR__O; + const double var_x377 = 1 - var_chaste_interface__Jrel_SR__I - var_chaste_interface__Jrel_SR__O - var_chaste_interface__Jrel_SR__R; + const double var_x378 = M_PI * var_x23; + const double var_x379 = 62.109246076532294 * var_x378; + const double var_x380 = var_x379 * NV_Ith_S(mParameters, 3); + const double var_x381 = var_x378 * NV_Ith_S(mParameters, 3); + const double var_x382 = var_x20 * var_x381; + const double var_x383 = 55.277229008113743 * var_x163; + const double var_x384 = var_x166 * var_x381; + const double var_x385 = var_x100 * var_x102; + const double var_x386 = M_PI * var_x44; + const double var_x387 = var_x386 * NV_Ith_S(mParameters, 3); + const double var_x388 = 4.1923741101659298e-8 * var_x387; + const double var_x389 = var_x150 * var_x388; + const double var_x390 = var_x100 * var_x186; + const double var_x391 = 0.0001 * var_chaste_interface__Na_buffer__Na_SL_buf; + const double var_x392 = 5.9492599172113663e-12 * var_x198; + const double var_x393 = 0.001 + 0.0001 * var_chaste_interface__Na_buffer__Na_SL; + const double var_x394 = var_x45 * var_x46; + const double var_x395 = var_x394 * var_x76; + const double var_x396 = 2435.6567088836191 * var_x378; + const double var_x397 = var_x396 * NV_Ith_S(mParameters, 3); + const double var_x398 = 267.92223797719811 * var_x161; + const double var_x399 = 1.4796614506467986e-5 * var_x387; + const double var_x400 = var_x159 * var_x399; + const double var_x401 = 0.0001 * var_chaste_interface__Na_buffer__Na_jct_buf; + const double var_x402 = 7.3530178752050587e-13 * var_x209; + const double var_x403 = 0.001 + 0.0001 * var_chaste_interface__Na_buffer__Na_jct; + const double var_x404 = var_x394 * var_x63; + const double var_x405 = 0.076376893524206985 * NV_Ith_S(mParameters, 3); + const double var_x406 = 100 * var_chaste_interface__Ca_buffer__Ca_Calsequestrin; + const double var_x407 = var_chaste_interface__Jrel_SR__O * NV_Ith_S(mParameters, 1); + const double var_x408 = var_x407 + 18.571428571428569 * NV_Ith_S(mParameters, 0); + const double var_x409 = 65 + 100 * var_chaste_interface__Ca_buffer__Ca_SR; + const double var_x410 = 31.054623038266147 * var_x378; + const double var_x411 = 5.5898321468879066 * var_x124 * var_x386; + const double var_x412 = 3.9661732781409111e-12 * var_x198; + const double var_x413 = 100 * var_chaste_interface__Ca_buffer__Ca_SLB_SL; + const double var_x414 = 100 * var_chaste_interface__Ca_buffer__Ca_SLHigh_SL; + const double var_x415 = 100 * var_chaste_interface__Ca_buffer__Ca_SL; + const double var_x416 = 1.3 + var_x415; + const double var_x417 = 0.029999999999999999 + var_x415; + const double var_x418 = 1217.8283544418096 * var_x378; + const double var_x419 = 1972.8819341957317 * var_x386; + const double var_x420 = var_x146 * var_x419; + const double var_x421 = 4.9020119168033731e-13 * var_x209; + const double var_x422 = 68.627450980392155 * var_x407 + 1274.5098039215686 * NV_Ith_S(mParameters, 0); + const double var_x423 = 100 * var_chaste_interface__Ca_buffer__Ca_SLB_jct; + const double var_x424 = 100 * var_chaste_interface__Ca_buffer__Ca_SLHigh_jct; + const double var_x425 = 100 * var_chaste_interface__Ca_buffer__Ca_jct; + const double var_x426 = 1.3 + var_x425; + const double var_x427 = 0.029999999999999999 + var_x425; + const double var_x428 = 100 * var_chaste_interface__indo_fluo_Ca_buffer_not_connected__Ca_Indo1_Cytosol; + const double var_x429 = -2.5 + var_x428; + const double var_x430 = -var_chaste_interface__indo_fluo_Ca_buffer_not_connected__Ca_Indo1_Cytosol - 0.030769230769230767 * var_chaste_interface__indo_fluo_Ca_buffer_not_connected__Ca_Indo1_SL - 0.00078461538461538469 * var_chaste_interface__indo_fluo_Ca_buffer_not_connected__Ca_Indo1_jct; + const double var_x431 = 0.078461538461538471 * var_chaste_interface__indo_fluo_Ca_buffer_not_connected__Ca_Indo1_jct; + const double var_x432 = 3.0769230769230771 * var_chaste_interface__indo_fluo_Ca_buffer_not_connected__Ca_Indo1_SL; + const double var_x433 = var_x428 + var_x431 + var_x432; + const double var_x434 = -2.5024999999999999 + 100 * var_chaste_interface__indo_fluo_Ca_buffer_not_connected__Ca_Indo1_SL; + const double var_x435 = -2.5490196078431375 + 100 * var_chaste_interface__indo_fluo_Ca_buffer_not_connected__Ca_Indo1_jct; + const double var_x436 = 100 * var_chaste_interface__indo_fluo_Ca_buffer_not_connected__Ca_Fluo3_Cytosol; + const double var_x437 = -2.5 + var_x436; + const double var_x438 = -var_chaste_interface__indo_fluo_Ca_buffer_not_connected__Ca_Fluo3_Cytosol - 0.030769230769230767 * var_chaste_interface__indo_fluo_Ca_buffer_not_connected__Ca_Fluo3_SL - 0.00078461538461538469 * var_chaste_interface__indo_fluo_Ca_buffer_not_connected__Ca_Fluo3_jct; + const double var_x439 = 0.078461538461538471 * var_chaste_interface__indo_fluo_Ca_buffer_not_connected__Ca_Fluo3_jct; + const double var_x440 = 3.0769230769230771 * var_chaste_interface__indo_fluo_Ca_buffer_not_connected__Ca_Fluo3_SL; + const double var_x441 = var_x436 + var_x439 + var_x440; + const double var_x442 = -2.5024999999999999 + 100 * var_chaste_interface__indo_fluo_Ca_buffer_not_connected__Ca_Fluo3_SL; + const double var_x443 = -2.5490196078431375 + 100 * var_chaste_interface__indo_fluo_Ca_buffer_not_connected__Ca_Fluo3_jct; + + // Matrix entries + IJth(rJacobian, 0, 0) = mSetVoltageDerivativeToZero ? 0.0 : (-0.00054830000000000005 + var_x145 + var_x147 - var_x126 - var_x132 - var_x140 - var_x142 - var_x154 - var_x160 - NV_Ith_S(mParameters, 13) - 0.11 * var_x10 - 0.11 * var_x64 - 0.89000000000000001 * var_x14 - 0.89000000000000001 * var_x77 - 0.15619500000000003 * var_x112 - 1 * var_x21 - 0.01205875 / var_x1 - 0.019305000000000003 * var_x115 - 0.097566250000000007 / var_x3 - 0.21009999999999998 * var_x91 - 1.6999 * var_x94 - var_x106 * var_x108 - var_x4 * var_chaste_interface__Itof_X_gate__X_tof + var_x5 * NV_Ith_S(mParameters, 21) * var_chaste_interface__Itos_X_gate__X_tos - var_x15 * var_x18 * NV_Ith_S(mParameters, 19) * var_chaste_interface__IKr_Xr_gate__Xr - 9.1125000000000004e-8 * var_x107 * var_x133 * var_x137 * NV_Ith_S(mParameters, 5) - 0.4389381125701739 * var_x15 * var_x28 * var_x36 * NV_Ith_S(mParameters, 18) - 0.42189361069797565 * var_x28 * var_x80 * (-var_x31 * (0.061749999999999999 * var_x32 + 0.039456396800000001 * var_x33) + 0.24326999999999999 * var_x26 * var_x78 - 0.51429999999999998 * var_x29 * var_x34 / pow(var_x30, 2)) * NV_Ith_S(mParameters, 18) / pow((var_x28 + 0.98039215686274506 * var_x35), 2) + 0.10468673984798647 * var_x15 * var_x26 * var_x36 * var_x78 * var_x79 * NV_Ith_S(mParameters, 18) + 0.019211226915711394 * var_x15 * var_x16 * var_x79 * NV_Ith_S(mParameters, 19) * var_chaste_interface__IKr_Xr_gate__Xr / pow(var_x17, 2) + 1.215e-7 * var_x101 * var_x107 * var_x134 * var_x135 * var_x136 * var_x138 * var_x95 * var_x97 * var_chaste_interface__ICaL_d_gate__d * var_chaste_interface__ICaL_f_gate__f * var_chaste_interface__cell__V); + IJth(rJacobian, 2, 0) = var_x261 * (var_x262 * var_x266 + var_x255 * var_x265 * (-var_x262 - var_x267) / pow(var_x263, 2)) + (var_x262 + var_x267) * (var_x264 - var_chaste_interface__INa_h_gate__h + var_x255 * var_x266); + IJth(rJacobian, 3, 0) = var_x286 * (var_x287 * var_x289 + var_x265 * var_x285 * (-var_x287 - var_x290) / pow(var_x288, 2)) + (var_x287 + var_x290) * (var_x264 - var_chaste_interface__INa_j_gate__j + var_x285 * var_x289); + IJth(rJacobian, 4, 0) = var_x297 * (var_x296 * var_x298 - var_x298 * var_x299 + 3.125 * var_x300 * var_x301 / pow((var_x301 + 0.25 * var_x294), 2)) - var_x300 * (-var_chaste_interface__INa_m_gate__m + 0.32000000000000001 * var_x293 * var_x295 * var_x298); + IJth(rJacobian, 5, 0) = (-var_chaste_interface__IKr_Xr_gate__Xr + 1 / var_x303) * (0.00060999999999999997 * var_x306 + 0.0013799999999999999 * var_x309 - 0.00016973999999999998 * var_x307 * var_x310 / pow(var_x308, 2) - 8.8449999999999995e-5 * var_x304 * var_x311 / pow(var_x305, 2)) + 0.13333333333333333 * var_x302 * var_x312 / pow(var_x303, 2); + IJth(rJacobian, 6, 0) = (-var_chaste_interface__IKs_Xs_gate__Xs + 1 / var_x314) * (0.00013100000000000001 * var_x317 + 7.1899999999999999e-5 * var_x320 - 8.9997000000000013e-6 * var_x315 * var_x321 / pow(var_x316, 2) - 1.0641199999999999e-5 * var_x318 * var_x321 / pow(var_x319, 2)) + 0.059880239520958084 * var_x313 * var_x322 / pow(var_x314, 2); + IJth(rJacobian, 7, 0) = var_x327 * var_x330 + 0.0074074074074074077 * var_x324 * (-var_x331 - var_chaste_interface__Itos_X_gate__X_tos) / (pow(var_x325, 2) * pow((0.055555555555555552 + var_x326), 2)); + IJth(rJacobian, 8, 0) = -var_x336 * var_x340 + 3.3333333333333335e-5 * var_x333 * var_x341 * (-var_x343 - var_chaste_interface__Itos_Y_gate__Y_tos) / pow((0.01 + var_x335), 2); + IJth(rJacobian, 9, 0) = -var_x340 * var_x344 + 3.5714285714285717e-5 * var_x333 * var_x341 * (-var_x343 - var_chaste_interface__Itos_R_gate__R_tos) / pow((0.07857142857142857 + var_x335), 2); + IJth(rJacobian, 10, 0) = var_x330 * var_x346 + 0.00063492063492063492 * var_x345 * (-var_x331 - var_chaste_interface__Itof_X_gate__X_tof) * var_chaste_interface__cell__V / pow((0.42857142857142855 + var_x345), 2); + IJth(rJacobian, 11, 0) = -var_x340 * var_x347 + 0.0050000000000000001 * var_x337 * var_x339 * (-var_x343 - var_chaste_interface__Itof_Y_gate__Y_tof) / pow((1 + var_x342), 2); + IJth(rJacobian, 12, 0) = -var_x350 * var_x353 * var_x355 + 0.035000000000000003 * var_x350 * var_x351 * var_x353 - var_x351 * var_x353 * var_x355 / pow(var_x349, 2) + 0.0058333333333333336 * var_x348 * var_x350 * var_x352 * var_x354; + IJth(rJacobian, 13, 0) = var_x357 * (0.029999999999999999 * var_x360 / pow(var_x361, 2) - 0.27777777777777779 * var_x358 / pow(var_x359, 2)) + var_x356 * (-0.032935010000000001 - 0.0022713799999999999 * var_chaste_interface__cell__V) * (-var_chaste_interface__ICaL_f_gate__f + 1 / var_x359 + 0.59999999999999998 / var_x361); + IJth(rJacobian, 19, 0) = -var_x380 * (0.00026433000000000001 + var_x154 + var_x205 + 2.6699999999999999 * var_x77 + 5.0996999999999995 * var_x94 + 0.46858500000000003 * var_x112); + IJth(rJacobian, 20, 0) = -var_x397 * (3.2670000000000004e-5 + var_x160 + var_x214 + 0.33000000000000002 * var_x64 + 0.63029999999999997 * var_x91 + 0.057915000000000008 * var_x115); + IJth(rJacobian, 25, 0) = -var_x410 * (0.00022365699999999999 + var_x126 + var_x142 - var_x145 - 1.78 * var_x77 - 0.31239000000000006 * var_x112); + IJth(rJacobian, 26, 0) = -var_x418 * (2.7642999999999999e-5 + var_x132 + var_x140 - var_x147 - 0.22 * var_x64 - 0.038610000000000005 * var_x115); + IJth(rJacobian, 1, 1) = -7.2523935948689155 + var_x230 + var_x231 + var_x232 + var_x243 + var_x244 + 6.3492962168146398e-7 * var_x242 - 5029484.9869235931 * var_x233 * var_x240; + IJth(rJacobian, 24, 1) = -1.1791550116941473e-5 * var_x242 + 93404721.185723871 * var_x233 * var_x237 * var_x238 * NV_Ith_S(mParameters, 2); + IJth(rJacobian, 25, 1) = 5.6417918332397381; + IJth(rJacobian, 32, 1) = 2.2890000000000006 - var_x230; + IJth(rJacobian, 33, 1) = 0.33180000000000004 - var_x243; + IJth(rJacobian, 35, 1) = 0.81600000000000006 - var_x231; + IJth(rJacobian, 36, 1) = 1.9320000000000004 - var_x244; + IJth(rJacobian, 38, 1) = 1.71 - var_x232; + IJth(rJacobian, 39, 1) = -var_x429 * var_x430; + IJth(rJacobian, 42, 1) = -var_x437 * var_x438; + IJth(rJacobian, 0, 2) = mSetVoltageDerivativeToZero ? 0.0 : (-var_x162 * var_x20 - var_x164 * var_x20); + IJth(rJacobian, 2, 2) = -var_x261; + IJth(rJacobian, 19, 2) = -var_x382 * var_x383; + IJth(rJacobian, 20, 2) = -var_x382 * var_x398; + IJth(rJacobian, 0, 3) = mSetVoltageDerivativeToZero ? 0.0 : (-var_x162 * var_x166 - var_x164 * var_x166); + IJth(rJacobian, 3, 3) = -var_x286; + IJth(rJacobian, 19, 3) = -var_x383 * var_x384; + IJth(rJacobian, 20, 3) = -var_x384 * var_x398; + IJth(rJacobian, 0, 4) = mSetVoltageDerivativeToZero ? 0.0 : (-0.33000000000000002 * var_x168 - 2.6699999999999999 * var_x169); + IJth(rJacobian, 4, 4) = -var_x297; + IJth(rJacobian, 19, 4) = -165.83168702434122 * var_x169 * var_x381; + IJth(rJacobian, 20, 4) = -803.76671393159438 * var_x168 * var_x381; + IJth(rJacobian, 0, 5) = mSetVoltageDerivativeToZero ? 0.0 : (-var_x18 * var_x80 * NV_Ith_S(mParameters, 19)); + IJth(rJacobian, 5, 5) = -var_x312; + IJth(rJacobian, 0, 6) = mSetVoltageDerivativeToZero ? 0.0 : (-0.22 * var_x172 * var_x8 - 1.78 * var_x13 * var_x172); + IJth(rJacobian, 6, 6) = -var_x322; + IJth(rJacobian, 0, 7) = mSetVoltageDerivativeToZero ? 0.0 : (var_x5 * var_x79 * NV_Ith_S(mParameters, 21)); + IJth(rJacobian, 7, 7) = -var_x327; + IJth(rJacobian, 0, 8) = mSetVoltageDerivativeToZero ? 0.0 : (var_x173 * var_x174); + IJth(rJacobian, 8, 8) = -var_x336; + IJth(rJacobian, 0, 9) = mSetVoltageDerivativeToZero ? 0.0 : (var_x174 * (-0.5 * var_chaste_interface__cell__V + 0.5 * var_x22 * var_x23 * NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 23))); + IJth(rJacobian, 9, 9) = -var_x344; + IJth(rJacobian, 0, 10) = mSetVoltageDerivativeToZero ? 0.0 : (var_x173 * var_x4); + IJth(rJacobian, 10, 10) = -var_x346; + IJth(rJacobian, 0, 11) = mSetVoltageDerivativeToZero ? 0.0 : (var_x173 * NV_Ith_S(mParameters, 17) * var_chaste_interface__Itof_X_gate__X_tof); + IJth(rJacobian, 11, 11) = -var_x347; + IJth(rJacobian, 0, 12) = mSetVoltageDerivativeToZero ? 0.0 : (-var_x151 * var_x178 - var_x176 * var_x177 - var_x178 * var_x179 - var_x181 * var_x183 - var_x182 * var_x185); + IJth(rJacobian, 12, 12) = -0.035000000000000003 * var_x350 * var_x351 * var_x354; + IJth(rJacobian, 19, 12) = -var_x385 * var_x389; + IJth(rJacobian, 20, 12) = -var_x385 * var_x400; + IJth(rJacobian, 25, 12) = -var_x183 * var_x411; + IJth(rJacobian, 26, 12) = -var_x182 * var_x420; + IJth(rJacobian, 0, 13) = mSetVoltageDerivativeToZero ? 0.0 : (-var_x151 * var_x188 - var_x177 * var_x187 - var_x179 * var_x188 - var_x181 * var_x190 - var_x185 * var_x189); + IJth(rJacobian, 13, 13) = -var_x357; + IJth(rJacobian, 19, 13) = -var_x389 * var_x390; + IJth(rJacobian, 20, 13) = -var_x390 * var_x400; + IJth(rJacobian, 25, 13) = -var_x190 * var_x411; + IJth(rJacobian, 26, 13) = -var_x189 * var_x420; + IJth(rJacobian, 0, 14) = mSetVoltageDerivativeToZero ? 0.0 : (1.2150000000000001e-8 * var_x192 + var_x120 * var_x181 + 6.7499999999999994e-10 * var_x149 * var_x191); + IJth(rJacobian, 14, 14) = -0.011900000000000001 - 1.7 * var_chaste_interface__Ca_buffer__Ca_SL; + IJth(rJacobian, 19, 14) = var_x104 * var_x149 * var_x388; + IJth(rJacobian, 25, 14) = var_x120 * var_x411; + IJth(rJacobian, 0, 15) = mSetVoltageDerivativeToZero ? 0.0 : (1.0935000000000001e-7 * var_x192 + 6.0749999999999998e-9 * var_x156 * var_x180 + var_x120 * var_x131 * var_x180); + IJth(rJacobian, 15, 15) = -0.011900000000000001 - 1.7 * var_chaste_interface__Ca_buffer__Ca_jct; + IJth(rJacobian, 20, 15) = var_x156 * var_x399; + IJth(rJacobian, 26, 15) = var_x120 * var_x130 * var_x419; + IJth(rJacobian, 16, 16) = -0.0050000000000000001 - var_x369 + var_x367 * var_chaste_interface__Ca_buffer__Ca_jct; + IJth(rJacobian, 17, 16) = -var_x369; + IJth(rJacobian, 18, 16) = var_x369; + IJth(rJacobian, 16, 17) = -0.0050000000000000001; + IJth(rJacobian, 17, 17) = -0.065000000000000002 - var_x369; + IJth(rJacobian, 18, 17) = 0.0050000000000000001; + IJth(rJacobian, 16, 18) = 0.055; + IJth(rJacobian, 17, 18) = -var_x369 + var_x366 * var_chaste_interface__Ca_buffer__Ca_jct; + IJth(rJacobian, 18, 18) = -0.059999999999999998 + var_x367 * var_chaste_interface__Ca_buffer__Ca_jct; + IJth(rJacobian, 24, 18) = (-var_chaste_interface__Ca_buffer__Ca_SR + var_chaste_interface__Ca_buffer__Ca_jct) * NV_Ith_S(mParameters, 1); + IJth(rJacobian, 26, 18) = (68.627450980392155 * var_chaste_interface__Ca_buffer__Ca_SR - 68.627450980392155 * var_chaste_interface__Ca_buffer__Ca_jct) * NV_Ith_S(mParameters, 1); + IJth(rJacobian, 0, 19) = mSetVoltageDerivativeToZero ? 0.0 : (-var_x206 - 2.6699999999999999 * var_x201 - 0.00046442182911003347 * var_x203 - var_x196 * var_x199); + IJth(rJacobian, 19, 19) = (-2.5101556644976917 + var_x391 - var_x379 * (var_x206 + 8.0099999999999998 * var_x201 + 0.0013932654873301004 * var_x203 + var_x196 * var_x392)) * NV_Ith_S(mParameters, 3); + IJth(rJacobian, 20, 19) = 1.0879068612142859 * NV_Ith_S(mParameters, 3); + IJth(rJacobian, 21, 19) = 0.000165 - var_x391; + IJth(rJacobian, 23, 19) = var_x405; + IJth(rJacobian, 25, 19) = -var_x410 * (-5.3399999999999999 * var_x201 - var_x196 * var_x412); + IJth(rJacobian, 0, 20) = mSetVoltageDerivativeToZero ? 0.0 : (-var_x215 - 0.33000000000000002 * var_x211 - 5.7400450788880541e-5 * var_x212 - var_x208 * var_x210); + IJth(rJacobian, 19, 20) = 0.02774162496096429 * NV_Ith_S(mParameters, 3); + IJth(rJacobian, 20, 20) = (-1.0886629612142857 + var_x401 - var_x396 * (var_x215 + 0.98999999999999999 * var_x211 + 0.00017220135236664162 * var_x212 + var_x208 * var_x402)) * NV_Ith_S(mParameters, 3); + IJth(rJacobian, 22, 20) = 0.0007561 - var_x401; + IJth(rJacobian, 26, 20) = -var_x418 * (-0.66000000000000003 * var_x211 - var_x208 * var_x421); + IJth(rJacobian, 19, 21) = var_x393 * NV_Ith_S(mParameters, 3); + IJth(rJacobian, 21, 21) = -var_x393; + IJth(rJacobian, 20, 22) = var_x403 * NV_Ith_S(mParameters, 3); + IJth(rJacobian, 22, 22) = -var_x403; + IJth(rJacobian, 0, 23) = mSetVoltageDerivativeToZero ? 0.0 : (-0.0020162999999999999 * var_x10 * var_x216 - 0.0163137 * var_x14 * var_x216); + IJth(rJacobian, 19, 23) = 2.4822490395367272 * NV_Ith_S(mParameters, 3); + IJth(rJacobian, 23, 23) = -var_x405; + IJth(rJacobian, 1, 24) = 0.69232869146389786 * var_x246 + 8.7400597733819945e-14 * var_x247; + IJth(rJacobian, 16, 24) = -var_x373 + 2.3772197685794643 * var_x362 * var_x363 * var_x370 * var_chaste_interface__Ca_buffer__Ca_jct * var_chaste_interface__Jrel_SR__R; + IJth(rJacobian, 17, 24) = -var_x376 + var_x372 * var_x377; + IJth(rJacobian, 18, 24) = var_x373 + var_x376; + IJth(rJacobian, 24, 24) = -260 + var_x406 - var_x408 - 1.6231539579137989e-12 * var_x247 - 12.857532841472388 * var_x246; + IJth(rJacobian, 26, 24) = var_x422; + IJth(rJacobian, 31, 24) = 260 - var_x406; + IJth(rJacobian, 0, 25) = mSetVoltageDerivativeToZero ? 0.0 : (-var_x224 - 4.4795166719999994e-11 * var_x219 - var_x199 * var_x221 - 0.0097566250000000014 * var_x217 / (pow(var_x3, 2) * pow(var_chaste_interface__Ca_buffer__Ca_SL, 2)) - 0.28183333333333332 * var_x11 * var_x2 * var_x218 / pow(var_x12, 2) + 0.89000000000000001 * var_x45 * var_x46 * var_x57 * var_x59 * var_x72 * var_x74 * NV_Ith_S(mParameters, 22)); + IJth(rJacobian, 1, 25) = 0.17359359486891501; + IJth(rJacobian, 14, 25) = 1.7 - 1.7 * var_chaste_interface__ICaL_fCa_gate__fCaB_SL; + IJth(rJacobian, 19, 25) = -var_x380 * (1.3438550016e-10 * var_x219 - 2.6699999999999999 * var_x395 + var_x221 * var_x392); + IJth(rJacobian, 25, 25) = -171.99023312516786 + var_x413 + var_x414 - var_x410 * (var_x224 + 1.78 * var_x395 - 8.9590333439999989e-11 * var_x219 - var_x221 * var_x412); + IJth(rJacobian, 26, 25) = 48.958482036396518; + IJth(rJacobian, 27, 25) = 121.55000000000001 - var_x413; + IJth(rJacobian, 29, 25) = 43.550000000000004 - var_x414; + IJth(rJacobian, 40, 25) = -var_x430 * var_x434; + IJth(rJacobian, 43, 25) = -var_x438 * var_x442; + IJth(rJacobian, 0, 26) = mSetVoltageDerivativeToZero ? 0.0 : (-var_x229 - 5.5364812799999996e-12 * var_x227 - var_x210 * var_x226 - 0.0012058750000000001 * var_x217 / (pow(var_x1, 2) * var_x225) - 0.034833333333333334 * var_x0 * var_x218 * var_x6 / pow(var_x7, 2) + 0.11 * var_x45 * var_x46 * var_x53 * var_x55 * var_x57 * var_x59 * NV_Ith_S(mParameters, 22)); + IJth(rJacobian, 15, 26) = 1.7 - 1.7 * var_chaste_interface__ICaL_fCa_gate__fCaB_jct; + IJth(rJacobian, 16, 26) = -var_x375 + var_x367 * var_chaste_interface__Jrel_SR__R; + IJth(rJacobian, 17, 26) = var_x366 * var_chaste_interface__Jrel_SR__O + var_x374 * var_x377 * var_chaste_interface__Ca_buffer__Ca_jct; + IJth(rJacobian, 18, 26) = var_x375 + var_x367 * var_chaste_interface__Jrel_SR__O; + IJth(rJacobian, 20, 26) = -var_x397 * (1.6609443839999999e-11 * var_x227 - 0.33000000000000002 * var_x404 + var_x226 * var_x402); + IJth(rJacobian, 24, 26) = var_x408; + IJth(rJacobian, 25, 26) = 1.2484412919281114; + IJth(rJacobian, 26, 26) = -128.61534478149457 + var_x423 + var_x424 - var_x422 - var_x418 * (var_x229 + 0.22 * var_x404 - 1.1072962559999999e-11 * var_x227 - var_x226 * var_x421); + IJth(rJacobian, 28, 26) = 58.627450980392155 - var_x423; + IJth(rJacobian, 30, 26) = 21.029411764705884 - var_x424; + IJth(rJacobian, 41, 26) = -var_x430 * var_x435; + IJth(rJacobian, 44, 26) = -var_x438 * var_x443; + IJth(rJacobian, 25, 27) = var_x416; + IJth(rJacobian, 27, 27) = -var_x416; + IJth(rJacobian, 26, 28) = var_x426; + IJth(rJacobian, 28, 28) = -var_x426; + IJth(rJacobian, 25, 29) = var_x417; + IJth(rJacobian, 29, 29) = -var_x417; + IJth(rJacobian, 26, 30) = var_x427; + IJth(rJacobian, 30, 30) = -var_x427; + IJth(rJacobian, 24, 31) = var_x409; + IJth(rJacobian, 31, 31) = -var_x409; + IJth(rJacobian, 1, 32) = var_x248; + IJth(rJacobian, 32, 32) = -var_x248; + IJth(rJacobian, 1, 33) = 0.003032 + var_x249; + IJth(rJacobian, 33, 33) = -3.1999999999999999e-5 - var_x249; + IJth(rJacobian, 34, 33) = -0.0030000000000000001; + IJth(rJacobian, 1, 34) = 0.0063300000000000006 + var_x249; + IJth(rJacobian, 33, 34) = -var_x249; + IJth(rJacobian, 34, 34) = -0.0063300000000000006; + IJth(rJacobian, 1, 35) = var_x250; + IJth(rJacobian, 35, 35) = -var_x250; + IJth(rJacobian, 1, 36) = 0.016159999999999997 + var_x251; + IJth(rJacobian, 36, 36) = -0.00046000000000000001 - var_x251; + IJth(rJacobian, 37, 36) = -0.015699999999999999; + IJth(rJacobian, 1, 37) = 0.015757 + var_x251; + IJth(rJacobian, 36, 37) = -var_x251; + IJth(rJacobian, 37, 37) = -0.015757; + IJth(rJacobian, 1, 38) = var_x252; + IJth(rJacobian, 38, 38) = -var_x252; + IJth(rJacobian, 39, 39) = -0.059999999999999998 + var_x429 * var_chaste_interface__Ca_buffer__Cai + var_x433 * var_chaste_interface__Ca_buffer__Cai; + IJth(rJacobian, 40, 39) = var_x434 * var_chaste_interface__Ca_buffer__Ca_SL; + IJth(rJacobian, 41, 39) = var_x435 * var_chaste_interface__Ca_buffer__Ca_jct; + IJth(rJacobian, 39, 40) = (-0.076923076923076927 + 3.0769230769230771 * var_chaste_interface__indo_fluo_Ca_buffer_not_connected__Ca_Indo1_Cytosol) * var_chaste_interface__Ca_buffer__Cai; + IJth(rJacobian, 40, 40) = -0.059999999999999998 + var_x433 * var_chaste_interface__Ca_buffer__Ca_SL + (-0.076999999999999999 + var_x432) * var_chaste_interface__Ca_buffer__Ca_SL; + IJth(rJacobian, 41, 40) = (-0.078431372549019607 + 3.0769230769230771 * var_chaste_interface__indo_fluo_Ca_buffer_not_connected__Ca_Indo1_jct) * var_chaste_interface__Ca_buffer__Ca_jct; + IJth(rJacobian, 39, 41) = (-0.0019615384615384616 + 0.078461538461538471 * var_chaste_interface__indo_fluo_Ca_buffer_not_connected__Ca_Indo1_Cytosol) * var_chaste_interface__Ca_buffer__Cai; + IJth(rJacobian, 40, 41) = (-0.0019635 + 0.078461538461538471 * var_chaste_interface__indo_fluo_Ca_buffer_not_connected__Ca_Indo1_SL) * var_chaste_interface__Ca_buffer__Ca_SL; + IJth(rJacobian, 41, 41) = -0.059999999999999998 + var_x433 * var_chaste_interface__Ca_buffer__Ca_jct + (-0.002 + var_x431) * var_chaste_interface__Ca_buffer__Ca_jct; + IJth(rJacobian, 42, 42) = -0.11 + var_x437 * var_chaste_interface__Ca_buffer__Cai + var_x441 * var_chaste_interface__Ca_buffer__Cai; + IJth(rJacobian, 43, 42) = var_x442 * var_chaste_interface__Ca_buffer__Ca_SL; + IJth(rJacobian, 44, 42) = var_x443 * var_chaste_interface__Ca_buffer__Ca_jct; + IJth(rJacobian, 42, 43) = (-0.076923076923076927 + 3.0769230769230771 * var_chaste_interface__indo_fluo_Ca_buffer_not_connected__Ca_Fluo3_Cytosol) * var_chaste_interface__Ca_buffer__Cai; + IJth(rJacobian, 43, 43) = -0.11 + var_x441 * var_chaste_interface__Ca_buffer__Ca_SL + (-0.076999999999999999 + var_x440) * var_chaste_interface__Ca_buffer__Ca_SL; + IJth(rJacobian, 44, 43) = (-0.078431372549019607 + 3.0769230769230771 * var_chaste_interface__indo_fluo_Ca_buffer_not_connected__Ca_Fluo3_jct) * var_chaste_interface__Ca_buffer__Ca_jct; + IJth(rJacobian, 42, 44) = (-0.0019615384615384616 + 0.078461538461538471 * var_chaste_interface__indo_fluo_Ca_buffer_not_connected__Ca_Fluo3_Cytosol) * var_chaste_interface__Ca_buffer__Cai; + IJth(rJacobian, 43, 44) = (-0.0019635 + 0.078461538461538471 * var_chaste_interface__indo_fluo_Ca_buffer_not_connected__Ca_Fluo3_SL) * var_chaste_interface__Ca_buffer__Ca_SL; + IJth(rJacobian, 44, 44) = -0.11 + var_x441 * var_chaste_interface__Ca_buffer__Ca_jct + (-0.002 + var_x439) * var_chaste_interface__Ca_buffer__Ca_jct; + } + + N_Vector Dynamicshannon_wang_puglisi_weber_bers_2004FromCellMLCvode::ComputeDerivedQuantities(double var_chaste_interface__environment__time, const N_Vector & rY) + { + // Inputs: + // Time units: millisecond + double var_chaste_interface__cell__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : NV_Ith_S(rY, 0)); + // Units: millivolt; Initial value: -85.721630473733 + double var_chaste_interface__INa_h_gate__h = NV_Ith_S(rY, 2); + // Units: dimensionless; Initial value: 0.98714602875678 + double var_chaste_interface__INa_j_gate__j = NV_Ith_S(rY, 3); + // Units: dimensionless; Initial value: 0.991826348770428 + double var_chaste_interface__INa_m_gate__m = NV_Ith_S(rY, 4); + // Units: dimensionless; Initial value: 0.0013702407736465 + double var_chaste_interface__IKr_Xr_gate__Xr = NV_Ith_S(rY, 5); + // Units: dimensionless; Initial value: 0.00846906175020028 + double var_chaste_interface__IKs_Xs_gate__Xs = NV_Ith_S(rY, 6); + // Units: dimensionless; Initial value: 0.00613557812033723 + double var_chaste_interface__Itos_X_gate__X_tos = NV_Ith_S(rY, 7); + // Units: dimensionless; Initial value: 0.00401072468238921 + double var_chaste_interface__Itos_Y_gate__Y_tos = NV_Ith_S(rY, 8); + // Units: dimensionless; Initial value: 0.31555225368514 + double var_chaste_interface__Itos_R_gate__R_tos = NV_Ith_S(rY, 9); + // Units: dimensionless; Initial value: 0.402577243036347 + double var_chaste_interface__Itof_X_gate__X_tof = NV_Ith_S(rY, 10); + // Units: dimensionless; Initial value: 0.00401068798369438 + double var_chaste_interface__Itof_Y_gate__Y_tof = NV_Ith_S(rY, 11); + // Units: dimensionless; Initial value: 0.994632857675454 + double var_chaste_interface__ICaL_d_gate__d = NV_Ith_S(rY, 12); + // Units: dimensionless; Initial value: 6.99526086177479e-06 + double var_chaste_interface__ICaL_f_gate__f = NV_Ith_S(rY, 13); + // Units: dimensionless; Initial value: 1.00067601563206 + double var_chaste_interface__ICaL_fCa_gate__fCaB_SL = NV_Ith_S(rY, 14); + // Units: dimensionless; Initial value: 0.0150193299768419 + double var_chaste_interface__ICaL_fCa_gate__fCaB_jct = NV_Ith_S(rY, 15); + // Units: dimensionless; Initial value: 0.0244048782575591 + double var_chaste_interface__Jrel_SR__O = NV_Ith_S(rY, 18); + // Units: dimensionless; Initial value: 7.1199533741995e-07 + double var_chaste_interface__Na_buffer__Na_SL = NV_Ith_S(rY, 19); + // Units: millimolar; Initial value: 8.87161932058707 + double var_chaste_interface__Na_buffer__Na_jct = NV_Ith_S(rY, 20); + // Units: millimolar; Initial value: 8.87031835089116 + double var_chaste_interface__Na_buffer__Nai = NV_Ith_S(rY, 23); + // Units: millimolar; Initial value: 8.87200572571131 + double var_chaste_interface__Ca_buffer__Ca_SR = NV_Ith_S(rY, 24); + // Units: millimolar; Initial value: 0.547125831028543 + double var_chaste_interface__Ca_buffer__Ca_SL = NV_Ith_S(rY, 25); + // Units: millimolar; Initial value: 0.000104971310105451 + double var_chaste_interface__Ca_buffer__Ca_jct = NV_Ith_S(rY, 26); + // Units: millimolar; Initial value: 0.000174045152623969 + + // Mathematics + const double var_ICaL__Fx_ICaL_SL = 0.10000000000000001; // dimensionless + const double var_ICaL__Fx_ICaL_jct = 0.90000000000000002; // dimensionless + const double var_ICaL__PK = 2.7000000000000001e-7; // litre_per_farad_millisecond + const double var_ICaL__PNa = 1.4999999999999999e-8; // litre_per_farad_millisecond + const double var_ICaL__Q10_CaL = 1.8; // dimensionless + const double var_ICaL__gamma_Cai = 0.34100000000000003; // dimensionless + const double var_ICaL__gamma_Cao = 0.34100000000000003; // dimensionless + const double var_ICaL__gamma_Ki = 0.75; // dimensionless + const double var_ICaL__gamma_Ko = 0.75; // dimensionless + const double var_ICaL__gamma_Nai = 0.75; // dimensionless + const double var_ICaL__gamma_Nao = 0.75; // dimensionless + const double var_ICaL_fCa_gate__fCa_SL = 1 - var_chaste_interface__ICaL_fCa_gate__fCaB_SL; // dimensionless + const double var_ICaL_fCa_gate__fCa_jct = 1 - var_chaste_interface__ICaL_fCa_gate__fCaB_jct; // dimensionless + const double var_ICab__Fx_CaBk_SL = 0.89000000000000001; // dimensionless + const double var_ICab__Fx_CaBk_jct = 0.11; // dimensionless + const double var_ICab__G_CaBk = 0.00025129999999999998; // milliS_per_microF + const double var_ICap__Fx_SLCaP_SL = 0.89000000000000001; // dimensionless + const double var_ICap__Fx_SLCaP_jct = 0.11; // dimensionless + const double var_ICap__H = 1.6000000000000001; // dimensionless + const double var_ICap__Km = 0.00050000000000000001; // millimolar + const double var_ICap__Q10_SLCaP = 2.3500000000000001; // dimensionless + const double var_ICap__V_maxAF = 0.067299999999999999; // microA_per_microF + const double var_IKs__Fx_Ks_SL = 0.89000000000000001; // dimensionless + const double var_IKs__Fx_Ks_jct = 0.11; // dimensionless + const double var_IKs__pCa_SL = 3 - log10(var_chaste_interface__Ca_buffer__Ca_SL); // dimensionless + const double var_IKs__G_Ks_SL = (0.057000000000000002 + 0.19 / (1 + exp(-12 + 1.6666666666666667 * var_IKs__pCa_SL))) * NV_Ith_S(mParameters, 20); // milliS_per_microF + const double var_IKs__pCa_jct = 3 - log10(var_chaste_interface__Ca_buffer__Ca_jct); // dimensionless + const double var_IKs__G_Ks_jct = (0.057000000000000002 + 0.19 / (1 + exp(-12 + 1.6666666666666667 * var_IKs__pCa_jct))) * NV_Ith_S(mParameters, 20); // milliS_per_microF + const double var_IKs__pKNa = 0.018329999999999999; // dimensionless + const double var_INa__Fx_Na_SL = 0.89000000000000001; // dimensionless + const double var_INa__Fx_Na_jct = 0.11; // dimensionless + const double var_INaCa__Fx_NCX_SL = 0.89000000000000001; // dimensionless + const double var_INaCa__Fx_NCX_jct = 0.11; // dimensionless + const double var_INaCa__HNa = 3; // dimensionless + const double var_INaCa__K_mCai = 0.0035899999999999999; // millimolar + const double var_INaCa__K_mCao = 1.3; // millimolar + const double var_INaCa__K_mNai = 12.289999999999999; // millimolar + const double var_INaCa__K_mNao = 87.5; // millimolar + const double var_INaCa__Kd_act = 0.00025599999999999999; // millimolar + const double var_INaCa__Ka_SL = 1 / (1 + pow(var_INaCa__Kd_act, 3) / pow(var_chaste_interface__Ca_buffer__Ca_SL, 3)); // dimensionless + const double var_INaCa__Ka_jct = 1 / (1 + pow(var_INaCa__Kd_act, 3) / pow(var_chaste_interface__Ca_buffer__Ca_jct, 3)); // dimensionless + const double var_INaCa__Q10_NCX = 1.5700000000000001; // dimensionless + const double var_INaCa__eta = 0.34999999999999998; // dimensionless + const double var_INaCa__ksat = 0.27000000000000002; // dimensionless + const double var_INa__openProb = pow(var_chaste_interface__INa_m_gate__m, 3) * var_chaste_interface__INa_h_gate__h * var_chaste_interface__INa_j_gate__j; // dimensionless + const double var_INab__Fx_NaBk_SL = 0.89000000000000001; // dimensionless + const double var_INab__Fx_NaBk_jct = 0.11; // dimensionless + const double var_INab__G_NaBk = 0.00029700000000000001; // milliS_per_microF + const double var_Jrel_SR__j_rel_SR = (-var_chaste_interface__Ca_buffer__Ca_jct + var_chaste_interface__Ca_buffer__Ca_SR) * var_chaste_interface__Jrel_SR__O * NV_Ith_S(mParameters, 1); // millimolar_per_millisecond + const double var_ICaL_f_gate__tau_f = 1 / (0.02 + 0.019699999999999999 * exp(-0.23877882250000002 * pow((1 + 0.068965517241379309 * var_chaste_interface__cell__V), 2))); // millisecond + const double var_IKr_Rr_gate__Rr = 1 / (1 + exp(1.4732142857142858 + 0.044642857142857144 * var_chaste_interface__cell__V)); // dimensionless + const double var_INa_h_gate__alpha_h = ((var_chaste_interface__cell__V < -40) ? (0.13500000000000001 * exp(-11.764705882352942 + 0.14705882352941177 * NV_Ith_S(mParameters, 16) - 0.14705882352941177 * var_chaste_interface__cell__V)) : (0)); // per_millisecond + const double var_INa_h_gate__beta_h = ((var_chaste_interface__cell__V < -40) ? (310000 * exp(0.34999999999999998 * var_chaste_interface__cell__V - 0.34999999999999998 * NV_Ith_S(mParameters, 16)) + 3.5600000000000001 * exp(0.079000000000000001 * var_chaste_interface__cell__V - 0.079000000000000001 * NV_Ith_S(mParameters, 16))) : (7.6923076923076916 / (1 + exp(-0.96036036036036043 + 0.0900900900900901 * NV_Ith_S(mParameters, 16) - 0.0900900900900901 * var_chaste_interface__cell__V)))); // per_millisecond + const double var_INa_h_gate__tau_h = 1 / (var_INa_h_gate__alpha_h + var_INa_h_gate__beta_h); // millisecond + const double var_INa_j_gate__alpha_j = ((var_chaste_interface__cell__V < -40) ? ((37.780000000000001 + var_chaste_interface__cell__V) * (-127140 * exp(0.24440000000000001 * var_chaste_interface__cell__V - 0.24440000000000001 * NV_Ith_S(mParameters, 16)) - 3.4740000000000003e-5 * exp(0.043909999999999998 * NV_Ith_S(mParameters, 16) - 0.043909999999999998 * var_chaste_interface__cell__V)) / (1 + exp(24.640530000000002 + 0.311 * var_chaste_interface__cell__V - 0.311 * NV_Ith_S(mParameters, 16)))) : (0)); // per_millisecond + const double var_INa_j_gate__beta_j = ((var_chaste_interface__cell__V < -40) ? (0.1212 * exp(0.01052 * NV_Ith_S(mParameters, 16) - 0.01052 * var_chaste_interface__cell__V) / (1 + exp(-5.5312920000000005 + 0.13780000000000001 * NV_Ith_S(mParameters, 16) - 0.13780000000000001 * var_chaste_interface__cell__V))) : (0.29999999999999999 * exp(2.5349999999999999e-7 * NV_Ith_S(mParameters, 16) - 2.5349999999999999e-7 * var_chaste_interface__cell__V) / (1 + exp(-3.2000000000000002 + 0.10000000000000001 * NV_Ith_S(mParameters, 16) - 0.10000000000000001 * var_chaste_interface__cell__V)))); // per_millisecond + const double var_INa_j_gate__tau_j = 1 / (var_INa_j_gate__alpha_j + var_INa_j_gate__beta_j); // millisecond + const double var_cell__i_Stim_converted = GetIntracellularAreaStimulus(var_chaste_interface__environment__time); // uA_per_cm2 + const double var_model_parameters__Cm_per_area = 1.9999999999999999e-6; // farad_per_cm2 + const double var_IK1__G_K1 = 0.43033148291193518 * sqrt(NV_Ith_S(mParameters, 8)) * NV_Ith_S(mParameters, 18); // milliS_per_microF + const double var_IKr__G_IKr = 0.43033148291193518 * sqrt(NV_Ith_S(mParameters, 8)) * NV_Ith_S(mParameters, 19); // milliS_per_microF + const double var_ICaL__Q_CaL = pow(var_ICaL__Q10_CaL, (-31 + 0.10000000000000001 * NV_Ith_S(mParameters, 23))); // dimensionless + const double var_ICaL__temp = 0.45000000000000001 * pow(NV_Ith_S(mParameters, 10), 2) * var_ICaL__Q_CaL * var_chaste_interface__ICaL_d_gate__d * var_chaste_interface__ICaL_f_gate__f * var_chaste_interface__cell__V / (NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 23)); // coulomb_per_mole + const double var_ICaL__i_CaL_Ca_SL = 4 * (-var_ICaL__gamma_Cao * NV_Ith_S(mParameters, 6) + var_chaste_interface__Ca_buffer__Ca_SL * var_ICaL__gamma_Cai * exp(2 * var_chaste_interface__cell__V * NV_Ith_S(mParameters, 10) / (NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 23)))) * var_ICaL__Fx_ICaL_SL * NV_Ith_S(mParameters, 12) * var_ICaL__temp * var_ICaL_fCa_gate__fCa_SL / (-1 + exp(2 * var_chaste_interface__cell__V * NV_Ith_S(mParameters, 10) / (NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 23)))); // microA_per_microF + const double var_ICaL__i_CaL_Ca_jct = 4 * (-var_ICaL__gamma_Cao * NV_Ith_S(mParameters, 6) + var_chaste_interface__Ca_buffer__Ca_jct * var_ICaL__gamma_Cai * exp(2 * var_chaste_interface__cell__V * NV_Ith_S(mParameters, 10) / (NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 23)))) * var_ICaL__Fx_ICaL_jct * NV_Ith_S(mParameters, 12) * var_ICaL__temp * var_ICaL_fCa_gate__fCa_jct / (-1 + exp(2 * var_chaste_interface__cell__V * NV_Ith_S(mParameters, 10) / (NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 23)))); // microA_per_microF + const double var_ICaL__i_CaL_K = (var_ICaL__Fx_ICaL_SL * var_ICaL_fCa_gate__fCa_SL + var_ICaL__Fx_ICaL_jct * var_ICaL_fCa_gate__fCa_jct) * (-var_ICaL__gamma_Ko * NV_Ith_S(mParameters, 8) + var_ICaL__gamma_Ki * NV_Ith_S(mParameters, 5) * exp(var_chaste_interface__cell__V * NV_Ith_S(mParameters, 10) / (NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 23)))) * var_ICaL__PK * var_ICaL__temp / (-1 + exp(var_chaste_interface__cell__V * NV_Ith_S(mParameters, 10) / (NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 23)))); // microA_per_microF + const double var_ICaL__i_CaL_Na_SL = (-var_ICaL__gamma_Nao * NV_Ith_S(mParameters, 9) + var_ICaL__gamma_Nai * var_chaste_interface__Na_buffer__Na_SL * exp(var_chaste_interface__cell__V * NV_Ith_S(mParameters, 10) / (NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 23)))) * var_ICaL__Fx_ICaL_SL * var_ICaL__PNa * var_ICaL__temp * var_ICaL_fCa_gate__fCa_SL / (-1 + exp(var_chaste_interface__cell__V * NV_Ith_S(mParameters, 10) / (NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 23)))); // microA_per_microF + const double var_ICaL__i_CaL_Na_jct = (-var_ICaL__gamma_Nao * NV_Ith_S(mParameters, 9) + var_ICaL__gamma_Nai * var_chaste_interface__Na_buffer__Na_jct * exp(var_chaste_interface__cell__V * NV_Ith_S(mParameters, 10) / (NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 23)))) * var_ICaL__Fx_ICaL_jct * var_ICaL__PNa * var_ICaL__temp * var_ICaL_fCa_gate__fCa_jct / (-1 + exp(var_chaste_interface__cell__V * NV_Ith_S(mParameters, 10) / (NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 23)))); // microA_per_microF + const double var_ICaL__i_CaL = var_ICaL__i_CaL_Ca_SL + var_ICaL__i_CaL_Ca_jct + var_ICaL__i_CaL_K + var_ICaL__i_CaL_Na_SL + var_ICaL__i_CaL_Na_jct; // microA_per_microF + const double var_ICaL__i_CaL_converted = HeartConfig::Instance()->GetCapacitance() * var_ICaL__i_CaL; // uA_per_cm2 + const double var_ICap__Q_SLCaP = pow(var_ICap__Q10_SLCaP, (-31 + 0.10000000000000001 * NV_Ith_S(mParameters, 23))); // dimensionless + const double var_ICap__i_Cap_SL = var_ICap__Fx_SLCaP_SL * var_ICap__Q_SLCaP * var_ICap__V_maxAF / (1 + pow((var_ICap__Km / var_chaste_interface__Ca_buffer__Ca_SL), var_ICap__H)); // microA_per_microF + const double var_ICap__i_Cap_jct = var_ICap__Fx_SLCaP_jct * var_ICap__Q_SLCaP * var_ICap__V_maxAF / (1 + pow((var_ICap__Km / var_chaste_interface__Ca_buffer__Ca_jct), var_ICap__H)); // microA_per_microF + const double var_ICap__i_Cap = var_ICap__i_Cap_SL + var_ICap__i_Cap_jct; // microA_per_microF + const double var_ICap__i_Cap_converted = HeartConfig::Instance()->GetCapacitance() * var_ICap__i_Cap; // uA_per_cm2 + const double var_IKs__E_Ks = NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 23) * log((var_IKs__pKNa * NV_Ith_S(mParameters, 9) + NV_Ith_S(mParameters, 8)) / (var_IKs__pKNa * var_chaste_interface__Na_buffer__Nai + NV_Ith_S(mParameters, 5))) / NV_Ith_S(mParameters, 10); // millivolt + const double var_IKs__i_Ks_SL = pow(var_chaste_interface__IKs_Xs_gate__Xs, 2) * (-var_IKs__E_Ks + var_chaste_interface__cell__V) * var_IKs__Fx_Ks_SL * var_IKs__G_Ks_SL; // microA_per_microF + const double var_IKs__i_Ks_jct = pow(var_chaste_interface__IKs_Xs_gate__Xs, 2) * (-var_IKs__E_Ks + var_chaste_interface__cell__V) * var_IKs__Fx_Ks_jct * var_IKs__G_Ks_jct; // microA_per_microF + const double var_IKs__i_Ks = var_IKs__i_Ks_SL + var_IKs__i_Ks_jct; // microA_per_microF + const double var_IKs__i_Ks_converted = HeartConfig::Instance()->GetCapacitance() * var_IKs__i_Ks; // uA_per_cm2 + const double var_INaCa__Q_NCX = pow(var_INaCa__Q10_NCX, (-31 + 0.10000000000000001 * NV_Ith_S(mParameters, 23))); // dimensionless + const double var_INaCa__temp_SL = (pow(var_chaste_interface__Na_buffer__Na_SL, var_INaCa__HNa) * NV_Ith_S(mParameters, 6) * exp(var_INaCa__eta * var_chaste_interface__cell__V * NV_Ith_S(mParameters, 10) / (NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 23))) - pow(NV_Ith_S(mParameters, 9), var_INaCa__HNa) * var_chaste_interface__Ca_buffer__Ca_SL * exp((-1 + var_INaCa__eta) * var_chaste_interface__cell__V * NV_Ith_S(mParameters, 10) / (NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 23)))) / (1 + var_INaCa__ksat * exp((-1 + var_INaCa__eta) * var_chaste_interface__cell__V * NV_Ith_S(mParameters, 10) / (NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 23)))); // millimolar4 + const double var_INaCa__i_NaCa_SL = var_INaCa__Fx_NCX_SL * var_INaCa__Ka_SL * var_INaCa__Q_NCX * NV_Ith_S(mParameters, 22) * var_INaCa__temp_SL / (pow(var_chaste_interface__Na_buffer__Na_SL, var_INaCa__HNa) * var_INaCa__K_mCao + pow(var_chaste_interface__Na_buffer__Na_SL, var_INaCa__HNa) * NV_Ith_S(mParameters, 6) + pow(NV_Ith_S(mParameters, 9), var_INaCa__HNa) * var_chaste_interface__Ca_buffer__Ca_SL + pow(var_INaCa__K_mNao, var_INaCa__HNa) * (1 + var_chaste_interface__Ca_buffer__Ca_SL / var_INaCa__K_mCai) * var_chaste_interface__Ca_buffer__Ca_SL + pow(NV_Ith_S(mParameters, 9), var_INaCa__HNa) * (1 + pow((var_chaste_interface__Na_buffer__Na_SL / var_INaCa__K_mNai), var_INaCa__HNa)) * var_INaCa__K_mCai); // microA_per_microF + const double var_INaCa__temp_jct = (pow(var_chaste_interface__Na_buffer__Na_jct, var_INaCa__HNa) * NV_Ith_S(mParameters, 6) * exp(var_INaCa__eta * var_chaste_interface__cell__V * NV_Ith_S(mParameters, 10) / (NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 23))) - pow(NV_Ith_S(mParameters, 9), var_INaCa__HNa) * var_chaste_interface__Ca_buffer__Ca_jct * exp((-1 + var_INaCa__eta) * var_chaste_interface__cell__V * NV_Ith_S(mParameters, 10) / (NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 23)))) / (1 + var_INaCa__ksat * exp((-1 + var_INaCa__eta) * var_chaste_interface__cell__V * NV_Ith_S(mParameters, 10) / (NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 23)))); // millimolar4 + const double var_INaCa__i_NaCa_jct = var_INaCa__Fx_NCX_jct * var_INaCa__Ka_jct * var_INaCa__Q_NCX * NV_Ith_S(mParameters, 22) * var_INaCa__temp_jct / (pow(var_chaste_interface__Na_buffer__Na_jct, var_INaCa__HNa) * var_INaCa__K_mCao + pow(var_chaste_interface__Na_buffer__Na_jct, var_INaCa__HNa) * NV_Ith_S(mParameters, 6) + pow(NV_Ith_S(mParameters, 9), var_INaCa__HNa) * var_chaste_interface__Ca_buffer__Ca_jct + pow(var_INaCa__K_mNao, var_INaCa__HNa) * (1 + var_chaste_interface__Ca_buffer__Ca_jct / var_INaCa__K_mCai) * var_chaste_interface__Ca_buffer__Ca_jct + pow(NV_Ith_S(mParameters, 9), var_INaCa__HNa) * (1 + pow((var_chaste_interface__Na_buffer__Na_jct / var_INaCa__K_mNai), var_INaCa__HNa)) * var_INaCa__K_mCai); // microA_per_microF + const double var_INaCa__i_NaCa = var_INaCa__i_NaCa_SL + var_INaCa__i_NaCa_jct; // microA_per_microF + const double var_INaCa__i_NaCa_converted = HeartConfig::Instance()->GetCapacitance() * var_INaCa__i_NaCa; // uA_per_cm2 + const double var_model_parameters__cell_length = 100; // micrometre + const double var_model_parameters__cell_radius = 10.25; // micrometre + const double var_model_parameters__Cm = 2.0e-8 * M_PI * var_model_parameters__Cm_per_area * var_model_parameters__cell_length * var_model_parameters__cell_radius; // farad + const double var_model_parameters__Cm_converted = 1000000 * var_model_parameters__Cm; // uF + const double var_reversal_potentials__E_Ca_SL = 0.5 * NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 23) * log(NV_Ith_S(mParameters, 6) / var_chaste_interface__Ca_buffer__Ca_SL) / NV_Ith_S(mParameters, 10); // millivolt + const double var_ICab__i_Cab_SL = (-var_reversal_potentials__E_Ca_SL + var_chaste_interface__cell__V) * var_ICab__Fx_CaBk_SL * var_ICab__G_CaBk; // microA_per_microF + const double var_reversal_potentials__E_Ca_jct = 0.5 * NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 23) * log(NV_Ith_S(mParameters, 6) / var_chaste_interface__Ca_buffer__Ca_jct) / NV_Ith_S(mParameters, 10); // millivolt + const double var_ICab__i_Cab_jct = (-var_reversal_potentials__E_Ca_jct + var_chaste_interface__cell__V) * var_ICab__Fx_CaBk_jct * var_ICab__G_CaBk; // microA_per_microF + const double var_ICab__i_Cab = var_ICab__i_Cab_SL + var_ICab__i_Cab_jct; // microA_per_microF + const double var_ICab__i_Cab_converted = HeartConfig::Instance()->GetCapacitance() * var_ICab__i_Cab; // uA_per_cm2 + const double var_reversal_potentials__E_Cl = -NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 23) * log(NV_Ith_S(mParameters, 7) / NV_Ith_S(mParameters, 4)) / NV_Ith_S(mParameters, 10); // millivolt + const double var_IClb__i_Clb = (-var_reversal_potentials__E_Cl + var_chaste_interface__cell__V) * NV_Ith_S(mParameters, 13); // microA_per_microF + const double var_IClb__i_Clb_converted = HeartConfig::Instance()->GetCapacitance() * var_IClb__i_Clb; // uA_per_cm2 + const double var_reversal_potentials__E_K = NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 23) * log(NV_Ith_S(mParameters, 8) / NV_Ith_S(mParameters, 5)) / NV_Ith_S(mParameters, 10); // millivolt + const double var_IK1_K1_gate__alpha_K1 = 1.02 / (1 + exp(-14.1227775 + 0.23849999999999999 * var_chaste_interface__cell__V - 0.23849999999999999 * var_reversal_potentials__E_K)); // per_millisecond + const double var_IK1_K1_gate__beta_K1 = (exp(-36.698642499999998 + 0.061749999999999999 * var_chaste_interface__cell__V - 0.061749999999999999 * var_reversal_potentials__E_K) + 0.49124000000000001 * exp(0.43983232 + 0.080320000000000003 * var_chaste_interface__cell__V - 0.080320000000000003 * var_reversal_potentials__E_K)) / (1 + exp(-2.4444678999999998 + 0.51429999999999998 * var_reversal_potentials__E_K - 0.51429999999999998 * var_chaste_interface__cell__V)); // per_millisecond + const double var_IK1_K1_gate__K1_infinity = var_IK1_K1_gate__alpha_K1 / (var_IK1_K1_gate__alpha_K1 + var_IK1_K1_gate__beta_K1); // dimensionless + const double var_IK1__i_K1 = (-var_reversal_potentials__E_K + var_chaste_interface__cell__V) * var_IK1__G_K1 * var_IK1_K1_gate__K1_infinity; // microA_per_microF + const double var_IK1__i_K1_converted = HeartConfig::Instance()->GetCapacitance() * var_IK1__i_K1; // uA_per_cm2 + const double var_IKr__i_Kr = (-var_reversal_potentials__E_K + var_chaste_interface__cell__V) * var_IKr__G_IKr * var_IKr_Rr_gate__Rr * var_chaste_interface__IKr_Xr_gate__Xr; // microA_per_microF + const double var_IKr__i_Kr_converted = HeartConfig::Instance()->GetCapacitance() * var_IKr__i_Kr; // uA_per_cm2 + const double var_Itof__i_tof = (-var_reversal_potentials__E_K + var_chaste_interface__cell__V) * NV_Ith_S(mParameters, 17) * var_chaste_interface__Itof_X_gate__X_tof * var_chaste_interface__Itof_Y_gate__Y_tof; // microA_per_microF + const double var_Itof__i_tof_converted = HeartConfig::Instance()->GetCapacitance() * var_Itof__i_tof; // uA_per_cm2 + const double var_Itos__i_tos = (-var_reversal_potentials__E_K + var_chaste_interface__cell__V) * (0.5 * var_chaste_interface__Itos_R_gate__R_tos + var_chaste_interface__Itos_Y_gate__Y_tos) * NV_Ith_S(mParameters, 21) * var_chaste_interface__Itos_X_gate__X_tos; // microA_per_microF + const double var_Itos__i_tos_converted = HeartConfig::Instance()->GetCapacitance() * var_Itos__i_tos; // uA_per_cm2 + const double var_reversal_potentials__E_Na_SL = NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 23) * log(NV_Ith_S(mParameters, 9) / var_chaste_interface__Na_buffer__Na_SL) / NV_Ith_S(mParameters, 10); // millivolt + const double var_INa__i_Na_SL = (-var_reversal_potentials__E_Na_SL + var_chaste_interface__cell__V) * var_INa__Fx_Na_SL * NV_Ith_S(mParameters, 14) * var_INa__openProb; // microA_per_microF + const double var_INab__i_Nab_SL = (-var_reversal_potentials__E_Na_SL + var_chaste_interface__cell__V) * var_INab__Fx_NaBk_SL * var_INab__G_NaBk; // microA_per_microF + const double var_reversal_potentials__E_Na_jct = NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 23) * log(NV_Ith_S(mParameters, 9) / var_chaste_interface__Na_buffer__Na_jct) / NV_Ith_S(mParameters, 10); // millivolt + const double var_INa__i_Na_jct = (-var_reversal_potentials__E_Na_jct + var_chaste_interface__cell__V) * var_INa__Fx_Na_jct * NV_Ith_S(mParameters, 14) * var_INa__openProb; // microA_per_microF + const double var_INa__i_Na = var_INa__i_Na_SL + var_INa__i_Na_jct; // microA_per_microF + const double var_INa__i_Na_converted = HeartConfig::Instance()->GetCapacitance() * var_INa__i_Na; // uA_per_cm2 + const double var_INab__i_Nab_jct = (-var_reversal_potentials__E_Na_jct + var_chaste_interface__cell__V) * var_INab__Fx_NaBk_jct * var_INab__G_NaBk; // microA_per_microF + const double var_INab__i_Nab = var_INab__i_Nab_SL + var_INab__i_Nab_jct; // microA_per_microF + const double var_INab__i_Nab_converted = HeartConfig::Instance()->GetCapacitance() * var_INab__i_Nab; // uA_per_cm2 + +#if CHASTE_SUNDIALS_VERSION >= 60000 + N_Vector dqs = N_VNew_Serial(23, CvodeContextManager::Instance()->GetSundialsContext()); +#else + N_Vector dqs = N_VNew_Serial(23); +#endif + NV_Ith_S(dqs, 0) = var_Jrel_SR__j_rel_SR; + NV_Ith_S(dqs, 1) = var_reversal_potentials__E_Cl; + NV_Ith_S(dqs, 2) = var_ICaL__i_CaL_converted; + NV_Ith_S(dqs, 3) = var_ICaL_fCa_gate__fCa_SL; + NV_Ith_S(dqs, 4) = var_ICaL_f_gate__tau_f; + NV_Ith_S(dqs, 5) = var_ICab__i_Cab_converted; + NV_Ith_S(dqs, 6) = var_IClb__i_Clb_converted; + NV_Ith_S(dqs, 7) = var_INab__i_Nab_converted; + NV_Ith_S(dqs, 8) = var_ICap__i_Cap_converted; + NV_Ith_S(dqs, 9) = var_model_parameters__Cm_converted; + NV_Ith_S(dqs, 10) = var_INa__i_Na_converted; + NV_Ith_S(dqs, 11) = var_INa_h_gate__tau_h; + NV_Ith_S(dqs, 12) = var_INa_j_gate__tau_j; + NV_Ith_S(dqs, 13) = var_Itof__i_tof_converted; + NV_Ith_S(dqs, 14) = var_IK1__i_K1_converted; + NV_Ith_S(dqs, 15) = var_IK1__G_K1; + NV_Ith_S(dqs, 16) = var_IKr__i_Kr_converted; + NV_Ith_S(dqs, 17) = var_IKs__i_Ks_converted; + NV_Ith_S(dqs, 18) = var_Itos__i_tos_converted; + NV_Ith_S(dqs, 19) = var_INaCa__i_NaCa_converted; + NV_Ith_S(dqs, 20) = var_cell__i_Stim_converted; + NV_Ith_S(dqs, 21) = var_reversal_potentials__E_K; + NV_Ith_S(dqs, 22) = var_chaste_interface__environment__time; + return dqs; + } + +template<> +void OdeSystemInformation::Initialise(void) +{ + this->mSystemName = "shannon_wang_puglisi_weber_bers_2004_model_updated"; + this->mFreeVariableName = "time"; + this->mFreeVariableUnits = "millisecond"; + + // NV_Ith_S(rY, 0): + this->mVariableNames.push_back("membrane_voltage"); + this->mVariableUnits.push_back("millivolt"); + this->mInitialConditions.push_back(-85.721630473733); + + // NV_Ith_S(rY, 1): + this->mVariableNames.push_back("cytosolic_calcium_concentration"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(8.6504944644883e-05); + + // NV_Ith_S(rY, 2): + this->mVariableNames.push_back("membrane_fast_sodium_current_h_gate"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.98714602875678); + + // NV_Ith_S(rY, 3): + this->mVariableNames.push_back("membrane_fast_sodium_current_j_gate"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.991826348770428); + + // NV_Ith_S(rY, 4): + this->mVariableNames.push_back("membrane_fast_sodium_current_m_gate"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.0013702407736465); + + // NV_Ith_S(rY, 5): + this->mVariableNames.push_back("IKr_Xr_gate__Xr"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.00846906175020028); + + // NV_Ith_S(rY, 6): + this->mVariableNames.push_back("IKs_Xs_gate__Xs"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.00613557812033723); + + // NV_Ith_S(rY, 7): + this->mVariableNames.push_back("Itos_X_gate__X_tos"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.00401072468238921); + + // NV_Ith_S(rY, 8): + this->mVariableNames.push_back("Itos_Y_gate__Y_tos"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.31555225368514); + + // NV_Ith_S(rY, 9): + this->mVariableNames.push_back("Itos_R_gate__R_tos"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.402577243036347); + + // NV_Ith_S(rY, 10): + this->mVariableNames.push_back("Itof_X_gate__X_tof"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.00401068798369438); + + // NV_Ith_S(rY, 11): + this->mVariableNames.push_back("Itof_Y_gate__Y_tof"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.994632857675454); + + // NV_Ith_S(rY, 12): + this->mVariableNames.push_back("membrane_L_type_calcium_current_d_gate"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(6.99526086177479e-06); + + // NV_Ith_S(rY, 13): + this->mVariableNames.push_back("membrane_L_type_calcium_current_f_gate"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(1.00067601563206); + + // NV_Ith_S(rY, 14): + this->mVariableNames.push_back("ICaL_fCa_gate__fCaB_SL"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.0150193299768419); + + // NV_Ith_S(rY, 15): + this->mVariableNames.push_back("ICaL_fCa_gate__fCaB_jct"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.0244048782575591); + + // NV_Ith_S(rY, 16): + this->mVariableNames.push_back("Jrel_SR__R"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.890917121306535); + + // NV_Ith_S(rY, 17): + this->mVariableNames.push_back("Jrel_SR__I"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(8.71752603681652e-08); + + // NV_Ith_S(rY, 18): + this->mVariableNames.push_back("Jrel_SR__O"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(7.1199533741995e-07); + + // NV_Ith_S(rY, 19): + this->mVariableNames.push_back("submembrane_space_sodium_concentration"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(8.87161932058707); + + // NV_Ith_S(rY, 20): + this->mVariableNames.push_back("dyadic_space_sodium_concentration"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(8.87031835089116); + + // NV_Ith_S(rY, 21): + this->mVariableNames.push_back("Na_buffer__Na_SL_buf"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(0.77606800956492); + + // NV_Ith_S(rY, 22): + this->mVariableNames.push_back("Na_buffer__Na_jct_buf"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(3.55668431730337); + + // NV_Ith_S(rY, 23): + this->mVariableNames.push_back("cytosolic_sodium_concentration"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(8.87200572571131); + + // NV_Ith_S(rY, 24): + this->mVariableNames.push_back("JSR_calcium_concentration"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(0.547125831028543); + + // NV_Ith_S(rY, 25): + this->mVariableNames.push_back("submembrane_space_calcium_concentration"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(0.000104971310105451); + + // NV_Ith_S(rY, 26): + this->mVariableNames.push_back("dyadic_space_calcium_concentration"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(0.000174045152623969); + + // NV_Ith_S(rY, 27): + this->mVariableNames.push_back("Ca_buffer__Ca_SLB_SL"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(0.00973710481246467); + + // NV_Ith_S(rY, 28): + this->mVariableNames.push_back("Ca_buffer__Ca_SLB_jct"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(0.00774564218017916); + + // NV_Ith_S(rY, 29): + this->mVariableNames.push_back("Ca_buffer__Ca_SLHigh_SL"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(0.113168405274355); + + // NV_Ith_S(rY, 30): + this->mVariableNames.push_back("Ca_buffer__Ca_SLHigh_jct"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(0.0772568134367606); + + // NV_Ith_S(rY, 31): + this->mVariableNames.push_back("Ca_buffer__Ca_Calsequestrin"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(1.18828527890062); + + // NV_Ith_S(rY, 32): + this->mVariableNames.push_back("cytosolic_Ca_buffer__Ca_TroponinC"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(0.00886665040283094); + + // NV_Ith_S(rY, 33): + this->mVariableNames.push_back("cytosolic_Ca_buffer__Ca_TroponinC_Ca_Mg"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(0.117873278193472); + + // NV_Ith_S(rY, 34): + this->mVariableNames.push_back("cytosolic_Ca_buffer__Mg_TroponinC_Ca_Mg"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(0.0103906683506505); + + // NV_Ith_S(rY, 35): + this->mVariableNames.push_back("cytosolic_Ca_buffer__Ca_Calmodulin"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(0.000293073957804278); + + // NV_Ith_S(rY, 36): + this->mVariableNames.push_back("cytosolic_Ca_buffer__Ca_Myosin"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(0.00195899238146509); + + // NV_Ith_S(rY, 37): + this->mVariableNames.push_back("cytosolic_Ca_buffer__Mg_Myosin"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(0.137523520981802); + + // NV_Ith_S(rY, 38): + this->mVariableNames.push_back("cytosolic_Ca_buffer__Ca_SRB"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(0.00215728901718264); + + // NV_Ith_S(rY, 39): + this->mVariableNames.push_back("indo_fluo_Ca_buffer_not_connected__Ca_Indo1_Cytosol"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(0.0); + + // NV_Ith_S(rY, 40): + this->mVariableNames.push_back("indo_fluo_Ca_buffer_not_connected__Ca_Indo1_SL"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(0.0); + + // NV_Ith_S(rY, 41): + this->mVariableNames.push_back("indo_fluo_Ca_buffer_not_connected__Ca_Indo1_jct"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(0.0); + + // NV_Ith_S(rY, 42): + this->mVariableNames.push_back("indo_fluo_Ca_buffer_not_connected__Ca_Fluo3_Cytosol"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(0.0); + + // NV_Ith_S(rY, 43): + this->mVariableNames.push_back("indo_fluo_Ca_buffer_not_connected__Ca_Fluo3_SL"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(0.0); + + // NV_Ith_S(rY, 44): + this->mVariableNames.push_back("indo_fluo_Ca_buffer_not_connected__Ca_Fluo3_jct"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(0.0); + + // mParameters[0]: + this->mParameterNames.push_back("SR_leak_current_max"); + this->mParameterUnits.push_back("per_millisecond"); + + // mParameters[1]: + this->mParameterNames.push_back("SR_release_current_max"); + this->mParameterUnits.push_back("per_millisecond"); + + // mParameters[2]: + this->mParameterNames.push_back("SR_uptake_current_max"); + this->mParameterUnits.push_back("millimolar_per_millisecond"); + + // mParameters[3]: + this->mParameterNames.push_back("concentration_clamp_onoff"); + this->mParameterUnits.push_back("dimensionless"); + + // mParameters[4]: + this->mParameterNames.push_back("cytosolic_chloride_concentration"); + this->mParameterUnits.push_back("millimolar"); + + // mParameters[5]: + this->mParameterNames.push_back("cytosolic_potassium_concentration"); + this->mParameterUnits.push_back("millimolar"); + + // mParameters[6]: + this->mParameterNames.push_back("extracellular_calcium_concentration"); + this->mParameterUnits.push_back("millimolar"); + + // mParameters[7]: + this->mParameterNames.push_back("extracellular_chloride_concentration"); + this->mParameterUnits.push_back("millimolar"); + + // mParameters[8]: + this->mParameterNames.push_back("extracellular_potassium_concentration"); + this->mParameterUnits.push_back("millimolar"); + + // mParameters[9]: + this->mParameterNames.push_back("extracellular_sodium_concentration"); + this->mParameterUnits.push_back("millimolar"); + + // mParameters[10]: + this->mParameterNames.push_back("faraday_constant"); + this->mParameterUnits.push_back("coulomb_per_mole"); + + // mParameters[11]: + this->mParameterNames.push_back("gas_constant"); + this->mParameterUnits.push_back("joule_per_kilomole_kelvin"); + + // mParameters[12]: + this->mParameterNames.push_back("membrane_L_type_calcium_current_conductance"); + this->mParameterUnits.push_back("litre_per_farad_millisecond"); + + // mParameters[13]: + this->mParameterNames.push_back("membrane_background_chloride_current_conductance"); + this->mParameterUnits.push_back("milliS_per_microF"); + + // mParameters[14]: + this->mParameterNames.push_back("membrane_fast_sodium_current_conductance"); + this->mParameterUnits.push_back("milliS_per_microF"); + + // mParameters[15]: + this->mParameterNames.push_back("membrane_fast_sodium_current_reduced_inactivation"); + this->mParameterUnits.push_back("dimensionless"); + + // mParameters[16]: + this->mParameterNames.push_back("membrane_fast_sodium_current_shift_inactivation"); + this->mParameterUnits.push_back("millivolt"); + + // mParameters[17]: + this->mParameterNames.push_back("membrane_fast_transient_outward_current_conductance"); + this->mParameterUnits.push_back("milliS_per_microF"); + + // mParameters[18]: + this->mParameterNames.push_back("membrane_inward_rectifier_potassium_current_conductance_scaling_factor"); + this->mParameterUnits.push_back("milliS_per_microF"); + + // mParameters[19]: + this->mParameterNames.push_back("membrane_rapid_delayed_rectifier_potassium_current_conductance"); + this->mParameterUnits.push_back("milliS_per_microF"); + + // mParameters[20]: + this->mParameterNames.push_back("membrane_slow_delayed_rectifier_potassium_current_conductance"); + this->mParameterUnits.push_back("milliS_per_microF"); + + // mParameters[21]: + this->mParameterNames.push_back("membrane_slow_transient_outward_current_conductance"); + this->mParameterUnits.push_back("milliS_per_microF"); + + // mParameters[22]: + this->mParameterNames.push_back("membrane_sodium_calcium_exchanger_current_conductance"); + this->mParameterUnits.push_back("microA_per_microF"); + + // mParameters[23]: + this->mParameterNames.push_back("temperature"); + this->mParameterUnits.push_back("kelvin"); + + // Derived Quantity index [0]: + this->mDerivedQuantityNames.push_back("SR_release_current"); + this->mDerivedQuantityUnits.push_back("millimolar_per_millisecond"); + + // Derived Quantity index [1]: + this->mDerivedQuantityNames.push_back("chloride_reversal_potential"); + this->mDerivedQuantityUnits.push_back("millivolt"); + + // Derived Quantity index [2]: + this->mDerivedQuantityNames.push_back("membrane_L_type_calcium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [3]: + this->mDerivedQuantityNames.push_back("membrane_L_type_calcium_current_fCa_gate"); + this->mDerivedQuantityUnits.push_back("dimensionless"); + + // Derived Quantity index [4]: + this->mDerivedQuantityNames.push_back("membrane_L_type_calcium_current_f_gate_tau"); + this->mDerivedQuantityUnits.push_back("millisecond"); + + // Derived Quantity index [5]: + this->mDerivedQuantityNames.push_back("membrane_background_calcium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [6]: + this->mDerivedQuantityNames.push_back("membrane_background_chloride_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [7]: + this->mDerivedQuantityNames.push_back("membrane_background_sodium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [8]: + this->mDerivedQuantityNames.push_back("membrane_calcium_pump_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [9]: + this->mDerivedQuantityNames.push_back("membrane_capacitance"); + this->mDerivedQuantityUnits.push_back("uF"); + + // Derived Quantity index [10]: + this->mDerivedQuantityNames.push_back("membrane_fast_sodium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [11]: + this->mDerivedQuantityNames.push_back("membrane_fast_sodium_current_h_gate_tau"); + this->mDerivedQuantityUnits.push_back("millisecond"); + + // Derived Quantity index [12]: + this->mDerivedQuantityNames.push_back("membrane_fast_sodium_current_j_gate_tau"); + this->mDerivedQuantityUnits.push_back("millisecond"); + + // Derived Quantity index [13]: + this->mDerivedQuantityNames.push_back("membrane_fast_transient_outward_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [14]: + this->mDerivedQuantityNames.push_back("membrane_inward_rectifier_potassium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [15]: + this->mDerivedQuantityNames.push_back("membrane_inward_rectifier_potassium_current_conductance"); + this->mDerivedQuantityUnits.push_back("milliS_per_microF"); + + // Derived Quantity index [16]: + this->mDerivedQuantityNames.push_back("membrane_rapid_delayed_rectifier_potassium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [17]: + this->mDerivedQuantityNames.push_back("membrane_slow_delayed_rectifier_potassium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [18]: + this->mDerivedQuantityNames.push_back("membrane_slow_transient_outward_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [19]: + this->mDerivedQuantityNames.push_back("membrane_sodium_calcium_exchanger_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [20]: + this->mDerivedQuantityNames.push_back("membrane_stimulus_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [21]: + this->mDerivedQuantityNames.push_back("potassium_reversal_potential"); + this->mDerivedQuantityUnits.push_back("millivolt"); + + // Derived Quantity index [22]: + this->mDerivedQuantityNames.push_back("time"); + this->mDerivedQuantityUnits.push_back("millisecond"); + + this->mInitialised = true; +} + +// Serialization for Boost >= 1.36 +#include "SerializationExportWrapperForCpp.hpp" +CHASTE_CLASS_EXPORT(Dynamicshannon_wang_puglisi_weber_bers_2004FromCellMLCvode) +extern "C" +{ + AbstractCardiacCellInterface* MakeCardiacCell( + boost::shared_ptr pSolver, + boost::shared_ptr pStimulus) + { + return new Dynamicshannon_wang_puglisi_weber_bers_2004FromCellMLCvode(pSolver, pStimulus); + } + +} +#endif // CHASTE_CVODE diff --git a/chaste_codegen/tests/numerical/baseline/Cvode_with_jacobian/dynamic_Shannon2004.hpp b/chaste_codegen/tests/numerical/baseline/Cvode_with_jacobian/dynamic_Shannon2004.hpp new file mode 100644 index 00000000..739ac6c6 --- /dev/null +++ b/chaste_codegen/tests/numerical/baseline/Cvode_with_jacobian/dynamic_Shannon2004.hpp @@ -0,0 +1,90 @@ +#ifdef CHASTE_CVODE +#ifndef DYNAMICSHANNON_WANG_PUGLISI_WEBER_BERS_2004FROMCELLMLCVODE_HPP_ +#define DYNAMICSHANNON_WANG_PUGLISI_WEBER_BERS_2004FROMCELLMLCVODE_HPP_ + +//! @file +//! +//! This source file was generated from CellML by chaste_codegen version (version omitted as unimportant) +//! +//! Model: shannon_wang_puglisi_weber_bers_2004_model_updated +//! +//! Processed by chaste_codegen: https://github.com/ModellingWebLab/chaste-codegen +//! (translator: chaste_codegen, model type: AnalyticCvode) +//! on (date omitted as unimportant) +//! +//! + +#include "ChasteSerialization.hpp" +#include +#include "AbstractDynamicallyLoadableEntity.hpp" +#include "AbstractStimulusFunction.hpp" +#include "AbstractCvodeCell.hpp" + +class Dynamicshannon_wang_puglisi_weber_bers_2004FromCellMLCvode : public AbstractCvodeCell, public AbstractDynamicallyLoadableEntity +{ + friend class boost::serialization::access; + template + void serialize(Archive & archive, const unsigned int version) + { + archive & boost::serialization::base_object(*this); + archive & boost::serialization::base_object(*this); + } + + // + // Settable parameters and readable variables + // + +private: + static AbstractCvodeCell* CreateMethod(boost::shared_ptr p_solver, boost::shared_ptr p_stimulus); + static bool registered; +private: +const bool is_concentration[45] = {false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, true, false, false, true, true, true, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false}; +const bool is_probability[45] = {false, false, true, true, true, false, false, false, false, false, false, false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false}; +public: + + boost::shared_ptr UseCellMLDefaultStimulus(); + double GetIntracellularCalciumConcentration(); + Dynamicshannon_wang_puglisi_weber_bers_2004FromCellMLCvode(boost::shared_ptr pOdeSolver /* unused; should be empty */, boost::shared_ptr pIntracellularStimulus); + ~Dynamicshannon_wang_puglisi_weber_bers_2004FromCellMLCvode(); + void VerifyStateVariables(); + double GetIIonic(const std::vector* pStateVariables=NULL); + void EvaluateYDerivatives(double var_chaste_interface__environment__time, const N_Vector rY, N_Vector rDY); + N_Vector ComputeDerivedQuantities(double var_chaste_interface__environment__time, const N_Vector & rY); + void EvaluateAnalyticJacobian(double var_chaste_interface__environment__time, N_Vector rY, N_Vector rDY, CHASTE_CVODE_DENSE_MATRIX rJacobian, N_Vector rTmp1, N_Vector rTmp2, N_Vector rTmp3); +}; + +// Needs to be included last +#include "SerializationExportWrapper.hpp" +CHASTE_CLASS_EXPORT(Dynamicshannon_wang_puglisi_weber_bers_2004FromCellMLCvode) + +namespace boost +{ + namespace serialization + { + template + inline void save_construct_data( + Archive & ar, const Dynamicshannon_wang_puglisi_weber_bers_2004FromCellMLCvode * t, const unsigned int fileVersion) + { + const boost::shared_ptr p_solver = t->GetSolver(); + const boost::shared_ptr p_stimulus = t->GetStimulusFunction(); + ar << p_solver; + ar << p_stimulus; + } + + template + inline void load_construct_data( + Archive & ar, Dynamicshannon_wang_puglisi_weber_bers_2004FromCellMLCvode * t, const unsigned int fileVersion) + { + boost::shared_ptr p_solver; + boost::shared_ptr p_stimulus; + ar >> p_solver; + ar >> p_stimulus; + ::new(t)Dynamicshannon_wang_puglisi_weber_bers_2004FromCellMLCvode(p_solver, p_stimulus); + } + + } + +} + +#endif // DYNAMICSHANNON_WANG_PUGLISI_WEBER_BERS_2004FROMCELLMLCVODE_HPP_ +#endif // CHASTE_CVODE \ No newline at end of file diff --git a/chaste_codegen/tests/numerical/baseline/Cvode_with_jacobian/hodgkin_huxley_squid_axon_model_1952_modified.cpp b/chaste_codegen/tests/numerical/baseline/Cvode_with_jacobian/hodgkin_huxley_squid_axon_model_1952_modified.cpp new file mode 100644 index 00000000..f37e178d --- /dev/null +++ b/chaste_codegen/tests/numerical/baseline/Cvode_with_jacobian/hodgkin_huxley_squid_axon_model_1952_modified.cpp @@ -0,0 +1,359 @@ +#ifdef CHASTE_CVODE +//! @file +//! +//! This source file was generated from CellML by chaste_codegen version (version omitted as unimportant) +//! +//! Model: hodgkin_huxley_squid_axon_model_1952_modified +//! +//! Processed by chaste_codegen: https://github.com/ModellingWebLab/chaste-codegen +//! (translator: chaste_codegen, model type: AnalyticCvode) +//! on (date omitted as unimportant) +//! +//! + +#include "hodgkin_huxley_squid_axon_model_1952_modified.hpp" +#include +#include +#include +#include +#include "Exception.hpp" +#include "OdeSystemInformation.hpp" +#include "RegularStimulus.hpp" +#include "HeartConfig.hpp" +#include "IsNan.hpp" +#include "MathsCustomFunctions.hpp" + +#if CHASTE_SUNDIALS_VERSION >= 60000 +#include "CvodeContextManager.hpp" +#endif + + + + + + boost::shared_ptr Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLCvode::UseCellMLDefaultStimulus() + { + // Use the default stimulus specified by CellML metadata + const double var_chaste_interface__membrane__stim_amplitude = -20; // microA_per_cm2 + const double var_chaste_interface__membrane__stim_duration = 0.5; // millisecond + const double var_chaste_interface__membrane__stim_period = 1000; // millisecond + const double var_chaste_interface__membrane__stim_start = 10; // millisecond + boost::shared_ptr p_cellml_stim(new RegularStimulus( + -fabs(var_chaste_interface__membrane__stim_amplitude), + var_chaste_interface__membrane__stim_duration, + var_chaste_interface__membrane__stim_period, + var_chaste_interface__membrane__stim_start + )); + mpIntracellularStimulus = p_cellml_stim; + return p_cellml_stim; + } + + Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLCvode::Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLCvode(boost::shared_ptr pOdeSolver /* unused; should be empty */, boost::shared_ptr pIntracellularStimulus) + : AbstractCvodeCell( + pOdeSolver, + 4, + 0, + pIntracellularStimulus) + { + // Time units: millisecond + // + this->mpSystemInfo = OdeSystemInformation::Instance(); + Init(); + + // We have a default stimulus specified in the CellML file metadata + this->mHasDefaultStimulusFromCellML = true; + mUseAnalyticJacobian = true; + mHasAnalyticJacobian = true; + + NV_Ith_S(this->mParameters, 0) = 1; // (var_membrane__Cm) [microF_per_cm2] + NV_Ith_S(this->mParameters, 1) = 120; // (var_sodium_channel__g_Na) [milliS_per_cm2] + NV_Ith_S(this->mParameters, 2) = 0.29999999999999999; // (var_leakage_current__g_L) [milliS_per_cm2] + NV_Ith_S(this->mParameters, 3) = 36; // (var_potassium_channel__g_K) [milliS_per_cm2] + } + + Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLCvode::~Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLCvode() + { + } + + + void Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLCvode::VerifyStateVariables() + { + + const double tol = 100*this->mAbsTol; + N_Vector rY = rGetStateVariables(); + std::string error_message = ""; + + for (unsigned i=0; i < 4; i++) + { + if(std::isnan(NV_Ith_S(rY, i))){ + error_message += "State variable " + this->rGetStateVariableNames()[i] + " is not a number\n"; + } + if(std::isinf(NV_Ith_S(rY, i))){ + error_message += "State variable " + this->rGetStateVariableNames()[i] + " has become INFINITE\n"; + } + if(this->is_concentration[i] && NV_Ith_S(rY, i) < -tol) + { + error_message += "Concentration " + this->rGetStateVariableNames()[i] + " below 0\n"; + } + if(this->is_probability[i] && NV_Ith_S(rY, i) < -tol) + { + error_message += "Probability " + this->rGetStateVariableNames()[i] + " below 0\n"; + } + if(this->is_probability[i] && NV_Ith_S(rY, i) > 1 + tol) + { + error_message += "Probability " + this->rGetStateVariableNames()[i] + " above 1\n"; + } + } + if (error_message != ""){ + EXCEPTION(DumpState(error_message)); + } + } + + double Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLCvode::GetIIonic(const std::vector* pStateVariables) + { + // For state variable interpolation (SVI) we read in interpolated state variables, + // otherwise for ionic current interpolation (ICI) we use the state variables of this model (node). + N_Vector rY; + bool made_new_cvode_vector = false; + if (!pStateVariables) + { + rY = rGetStateVariables(); + } + else + { + made_new_cvode_vector = true; + rY = MakeNVector(*pStateVariables); + } + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : NV_Ith_S(rY, 0)); + // Units: millivolt; Initial value: -75.0 + double var_chaste_interface__sodium_channel_m_gate__m = NV_Ith_S(rY, 1); + // Units: dimensionless; Initial value: 0.05 + double var_chaste_interface__sodium_channel_h_gate__h = NV_Ith_S(rY, 2); + // Units: dimensionless; Initial value: 0.6 + double var_chaste_interface__potassium_channel_n_gate__n = NV_Ith_S(rY, 3); + // Units: dimensionless; Initial value: 0.325 + + const double var_membrane__E_R = -75; // millivolt + const double var_leakage_current__E_L = 10.613 + var_membrane__E_R; // millivolt + const double var_leakage_current__i_L = (-var_leakage_current__E_L + var_chaste_interface__membrane__V) * NV_Ith_S(mParameters, 2); // microA_per_cm2 + const double var_potassium_channel__E_K = -12 + var_membrane__E_R; // millivolt + const double var_potassium_channel__i_K = pow(var_chaste_interface__potassium_channel_n_gate__n, 4) * (-var_potassium_channel__E_K + var_chaste_interface__membrane__V) * NV_Ith_S(mParameters, 3); // microA_per_cm2 + const double var_sodium_channel__E_Na = 115 + var_membrane__E_R; // millivolt + const double var_sodium_channel__i_Na = pow(var_chaste_interface__sodium_channel_m_gate__m, 3) * (-var_sodium_channel__E_Na + var_chaste_interface__membrane__V) * NV_Ith_S(mParameters, 1) * var_chaste_interface__sodium_channel_h_gate__h; // microA_per_cm2 + const double var_chaste_interface__i_ionic = var_leakage_current__i_L + var_potassium_channel__i_K + var_sodium_channel__i_Na; // uA_per_cm2 + + const double i_ionic = var_chaste_interface__i_ionic; + if (made_new_cvode_vector) + { + DeleteVector(rY); + } + EXCEPT_IF_NOT(!std::isnan(i_ionic)); + return i_ionic; + } + + void Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLCvode::EvaluateYDerivatives(double var_chaste_interface__environment__time, const N_Vector rY, N_Vector rDY) + { + // Inputs: + // Time units: millisecond + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : NV_Ith_S(rY, 0)); + // Units: millivolt; Initial value: -75.0 + double var_chaste_interface__sodium_channel_m_gate__m = NV_Ith_S(rY, 1); + // Units: dimensionless; Initial value: 0.05 + double var_chaste_interface__sodium_channel_h_gate__h = NV_Ith_S(rY, 2); + // Units: dimensionless; Initial value: 0.6 + double var_chaste_interface__potassium_channel_n_gate__n = NV_Ith_S(rY, 3); + // Units: dimensionless; Initial value: 0.325 + + // Mathematics + double d_dt_chaste_interface_var_membrane__V; + const double var_potassium_channel_n_gate__B = -0.10000000000000001; // per_millivolt + const double var_potassium_channel_n_gate__A = -0.01 / var_potassium_channel_n_gate__B; // per_millisecond + const double var_potassium_channel_n_gate__beta_n = 0.125 * exp(0.9375 + 0.012500000000000001 * var_chaste_interface__membrane__V); // per_millisecond + const double var_potassium_channel_n_gate__v0 = -65; // millivolt + const double var_potassium_channel_n_gate__U = (-var_potassium_channel_n_gate__v0 + var_chaste_interface__membrane__V) * var_potassium_channel_n_gate__B; // dimensionless + const double var_potassium_channel_n_gate__alpha_n = (((var_potassium_channel_n_gate__U >= -9.9999999999999995e-8) && (var_potassium_channel_n_gate__U <= 9.9999999999999995e-8)) ? ((1 - 0.5 * var_potassium_channel_n_gate__U) * var_potassium_channel_n_gate__A) : (var_potassium_channel_n_gate__A * var_potassium_channel_n_gate__U / (-1 + exp(var_potassium_channel_n_gate__U)))); // per_millisecond + const double d_dt_chaste_interface_var_potassium_channel_n_gate__n = (1 - var_chaste_interface__potassium_channel_n_gate__n) * var_potassium_channel_n_gate__alpha_n - var_potassium_channel_n_gate__beta_n * var_chaste_interface__potassium_channel_n_gate__n; // 1 / millisecond + const double var_sodium_channel_h_gate__alpha_h = 0.070000000000000007 * exp(-3.75 - 0.050000000000000003 * var_chaste_interface__membrane__V); // per_millisecond + const double var_sodium_channel_h_gate__beta_h = 1 / (1 + exp(-4.5 - 0.10000000000000001 * var_chaste_interface__membrane__V)); // per_millisecond + const double d_dt_chaste_interface_var_sodium_channel_h_gate__h = (1 - var_chaste_interface__sodium_channel_h_gate__h) * var_sodium_channel_h_gate__alpha_h - var_sodium_channel_h_gate__beta_h * var_chaste_interface__sodium_channel_h_gate__h; // 1 / millisecond + const double var_sodium_channel_m_gate__B = -0.10000000000000001; // per_millivolt + const double var_sodium_channel_m_gate__A = -0.10000000000000001 / var_sodium_channel_m_gate__B; // per_millisecond + const double var_sodium_channel_m_gate__beta_m = 4 * exp(-4.166666666666667 - 0.055555555555555552 * var_chaste_interface__membrane__V); // per_millisecond + const double var_sodium_channel_m_gate__v0 = -50; // millivolt + const double var_sodium_channel_m_gate__U = (-var_sodium_channel_m_gate__v0 + var_chaste_interface__membrane__V) * var_sodium_channel_m_gate__B; // dimensionless + const double var_sodium_channel_m_gate__alpha_m = (((var_sodium_channel_m_gate__U >= -9.9999999999999995e-8) && (var_sodium_channel_m_gate__U <= 9.9999999999999995e-8)) ? ((1 - 0.5 * var_sodium_channel_m_gate__U) * var_sodium_channel_m_gate__A) : (var_sodium_channel_m_gate__A * var_sodium_channel_m_gate__U / (-1 + exp(var_sodium_channel_m_gate__U)))); // per_millisecond + const double d_dt_chaste_interface_var_sodium_channel_m_gate__m = (1 - var_chaste_interface__sodium_channel_m_gate__m) * var_sodium_channel_m_gate__alpha_m - var_sodium_channel_m_gate__beta_m * var_chaste_interface__sodium_channel_m_gate__m; // 1 / millisecond + + if (mSetVoltageDerivativeToZero) + { + d_dt_chaste_interface_var_membrane__V = 0.0; + } + else + { + const double var_membrane__E_R = -75; // millivolt + const double var_leakage_current__E_L = 10.613 + var_membrane__E_R; // millivolt + const double var_leakage_current__i_L = (-var_leakage_current__E_L + var_chaste_interface__membrane__V) * NV_Ith_S(mParameters, 2); // microA_per_cm2 + const double var_membrane__i_Stim = GetIntracellularAreaStimulus(var_chaste_interface__environment__time); // microA_per_cm2 + const double var_potassium_channel__E_K = -12 + var_membrane__E_R; // millivolt + const double var_potassium_channel__i_K = pow(var_chaste_interface__potassium_channel_n_gate__n, 4) * (-var_potassium_channel__E_K + var_chaste_interface__membrane__V) * NV_Ith_S(mParameters, 3); // microA_per_cm2 + const double var_sodium_channel__E_Na = 115 + var_membrane__E_R; // millivolt + const double var_sodium_channel__i_Na = pow(var_chaste_interface__sodium_channel_m_gate__m, 3) * (-var_sodium_channel__E_Na + var_chaste_interface__membrane__V) * NV_Ith_S(mParameters, 1) * var_chaste_interface__sodium_channel_h_gate__h; // microA_per_cm2 + d_dt_chaste_interface_var_membrane__V = (-var_leakage_current__i_L - var_membrane__i_Stim - var_potassium_channel__i_K - var_sodium_channel__i_Na) / NV_Ith_S(mParameters, 0); // millivolt / millisecond + } + + NV_Ith_S(rDY,0) = d_dt_chaste_interface_var_membrane__V; + NV_Ith_S(rDY,1) = d_dt_chaste_interface_var_sodium_channel_m_gate__m; + NV_Ith_S(rDY,2) = d_dt_chaste_interface_var_sodium_channel_h_gate__h; + NV_Ith_S(rDY,3) = d_dt_chaste_interface_var_potassium_channel_n_gate__n; + } + + void Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLCvode::EvaluateAnalyticJacobian(double var_chaste_interface__environment__time, N_Vector rY, N_Vector rDY, CHASTE_CVODE_DENSE_MATRIX rJacobian, N_Vector rTmp1, N_Vector rTmp2, N_Vector rTmp3) + { + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : NV_Ith_S(rY, 0)); + // Units: millivolt; Initial value: -75.0 + double var_chaste_interface__sodium_channel_m_gate__m = NV_Ith_S(rY, 1); + // Units: dimensionless; Initial value: 0.05 + double var_chaste_interface__sodium_channel_h_gate__h = NV_Ith_S(rY, 2); + // Units: dimensionless; Initial value: 0.6 + double var_chaste_interface__potassium_channel_n_gate__n = NV_Ith_S(rY, 3); + // Units: dimensionless; Initial value: 0.325 + const double var_x0 = 1 / NV_Ith_S(mParameters, 0); + const double var_x1 = pow(var_chaste_interface__sodium_channel_m_gate__m, 3) * NV_Ith_S(mParameters, 1); + const double var_x2 = var_x0 * (-40 + var_chaste_interface__membrane__V); + const double var_x3 = 0.10000000000000001 * var_chaste_interface__membrane__V; + const double var_x4 = 5 + var_x3; + const double var_x5 = (var_x4 >= -9.9999999999999995e-8) && (var_x4 <= 9.9999999999999995e-8); + const double var_x6 = exp(-var_x4); + const double var_x7 = -1 + var_x6; + const double var_x8 = 1 / var_x7; + const double var_x9 = exp(-4.166666666666667 - 0.055555555555555552 * var_chaste_interface__membrane__V); + const double var_x10 = exp(-3.75 - 0.050000000000000003 * var_chaste_interface__membrane__V); + const double var_x11 = exp(-4.5 - 0.10000000000000001 * var_chaste_interface__membrane__V); + const double var_x12 = 1 + var_x11; + const double var_x13 = 6.5 + var_x3; + const double var_x14 = (var_x13 >= -9.9999999999999995e-8) && (var_x13 <= 9.9999999999999995e-8); + const double var_x15 = exp(-var_x13); + const double var_x16 = -1 + var_x15; + const double var_x17 = 1 / var_x16; + const double var_x18 = exp(0.9375 + 0.012500000000000001 * var_chaste_interface__membrane__V); + + // Matrix entries + IJth(rJacobian, 0, 0) = mSetVoltageDerivativeToZero ? 0.0 : (var_x0 * (-NV_Ith_S(mParameters, 2) - var_x1 * var_chaste_interface__sodium_channel_h_gate__h - pow(var_chaste_interface__potassium_channel_n_gate__n, 4) * NV_Ith_S(mParameters, 3))); + IJth(rJacobian, 1, 0) = (1 - var_chaste_interface__sodium_channel_m_gate__m) * ((var_x5) ? (0.050000000000000003) : (-0.10000000000000001 * var_x8 - 0.10000000000000001 * var_x4 * var_x6 / pow(var_x7, 2))) + 0.22222222222222221 * var_x9 * var_chaste_interface__sodium_channel_m_gate__m; + IJth(rJacobian, 2, 0) = -0.050000000000000003 * var_x10 * (0.070000000000000007 - 0.070000000000000007 * var_chaste_interface__sodium_channel_h_gate__h) - 0.10000000000000001 * var_x11 * var_chaste_interface__sodium_channel_h_gate__h / pow(var_x12, 2); + IJth(rJacobian, 3, 0) = (1 - var_chaste_interface__potassium_channel_n_gate__n) * ((var_x14) ? (0.0050000000000000001) : (-0.01 * var_x17 - 0.01 * var_x13 * var_x15 / pow(var_x16, 2))) - 0.0015625000000000001 * var_x18 * var_chaste_interface__potassium_channel_n_gate__n; + IJth(rJacobian, 0, 1) = mSetVoltageDerivativeToZero ? 0.0 : (-3 * var_x2 * pow(var_chaste_interface__sodium_channel_m_gate__m, 2) * NV_Ith_S(mParameters, 1) * var_chaste_interface__sodium_channel_h_gate__h); + IJth(rJacobian, 1, 1) = -((var_x5) ? (3.5 + 0.050000000000000003 * var_chaste_interface__membrane__V) : (-var_x4 * var_x8)) - 4 * var_x9; + IJth(rJacobian, 0, 2) = mSetVoltageDerivativeToZero ? 0.0 : (-var_x1 * var_x2); + IJth(rJacobian, 2, 2) = -1 / var_x12 - 0.070000000000000007 * var_x10; + IJth(rJacobian, 0, 3) = mSetVoltageDerivativeToZero ? 0.0 : (-4 * var_x0 * pow(var_chaste_interface__potassium_channel_n_gate__n, 3) * (87 + var_chaste_interface__membrane__V) * NV_Ith_S(mParameters, 3)); + IJth(rJacobian, 3, 3) = -((var_x14) ? (0.42499999999999999 + 0.0050000000000000001 * var_chaste_interface__membrane__V) : (-0.099999999999999992 * var_x13 * var_x17)) - 0.125 * var_x18; + } + + N_Vector Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLCvode::ComputeDerivedQuantities(double var_chaste_interface__environment__time, const N_Vector & rY) + { + // Inputs: + // Time units: millisecond + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : NV_Ith_S(rY, 0)); + // Units: millivolt; Initial value: -75.0 + double var_chaste_interface__sodium_channel_m_gate__m = NV_Ith_S(rY, 1); + // Units: dimensionless; Initial value: 0.05 + double var_chaste_interface__sodium_channel_h_gate__h = NV_Ith_S(rY, 2); + // Units: dimensionless; Initial value: 0.6 + double var_chaste_interface__potassium_channel_n_gate__n = NV_Ith_S(rY, 3); + // Units: dimensionless; Initial value: 0.325 + + // Mathematics + const double var_membrane__E_R = -75; // millivolt + const double var_leakage_current__E_L = 10.613 + var_membrane__E_R; // millivolt + const double var_leakage_current__i_L = (-var_leakage_current__E_L + var_chaste_interface__membrane__V) * NV_Ith_S(mParameters, 2); // microA_per_cm2 + const double var_membrane__i_Stim = GetIntracellularAreaStimulus(var_chaste_interface__environment__time); // microA_per_cm2 + const double var_potassium_channel__E_K = -12 + var_membrane__E_R; // millivolt + const double var_potassium_channel__i_K = pow(var_chaste_interface__potassium_channel_n_gate__n, 4) * (-var_potassium_channel__E_K + var_chaste_interface__membrane__V) * NV_Ith_S(mParameters, 3); // microA_per_cm2 + const double var_sodium_channel__E_Na = 115 + var_membrane__E_R; // millivolt + const double var_sodium_channel__i_Na = pow(var_chaste_interface__sodium_channel_m_gate__m, 3) * (-var_sodium_channel__E_Na + var_chaste_interface__membrane__V) * NV_Ith_S(mParameters, 1) * var_chaste_interface__sodium_channel_h_gate__h; // microA_per_cm2 + +#if CHASTE_SUNDIALS_VERSION >= 60000 + N_Vector dqs = N_VNew_Serial(5, CvodeContextManager::Instance()->GetSundialsContext()); +#else + N_Vector dqs = N_VNew_Serial(5); +#endif + NV_Ith_S(dqs, 0) = var_sodium_channel__i_Na; + NV_Ith_S(dqs, 1) = var_leakage_current__i_L; + NV_Ith_S(dqs, 2) = var_potassium_channel__i_K; + NV_Ith_S(dqs, 3) = var_membrane__i_Stim; + NV_Ith_S(dqs, 4) = var_chaste_interface__environment__time; + return dqs; + } + +template<> +void OdeSystemInformation::Initialise(void) +{ + this->mSystemName = "hodgkin_huxley_squid_axon_model_1952_modified"; + this->mFreeVariableName = "time"; + this->mFreeVariableUnits = "millisecond"; + + // NV_Ith_S(rY, 0): + this->mVariableNames.push_back("membrane_voltage"); + this->mVariableUnits.push_back("millivolt"); + this->mInitialConditions.push_back(-75.0); + + // NV_Ith_S(rY, 1): + this->mVariableNames.push_back("sodium_channel_m_gate__m"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.05); + + // NV_Ith_S(rY, 2): + this->mVariableNames.push_back("sodium_channel_h_gate__h"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.6); + + // NV_Ith_S(rY, 3): + this->mVariableNames.push_back("potassium_channel_n_gate__n"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.325); + + // mParameters[0]: + this->mParameterNames.push_back("membrane_capacitance"); + this->mParameterUnits.push_back("microF_per_cm2"); + + // mParameters[1]: + this->mParameterNames.push_back("membrane_fast_sodium_current_conductance"); + this->mParameterUnits.push_back("milliS_per_cm2"); + + // mParameters[2]: + this->mParameterNames.push_back("membrane_leakage_current_conductance"); + this->mParameterUnits.push_back("milliS_per_cm2"); + + // mParameters[3]: + this->mParameterNames.push_back("membrane_potassium_current_conductance"); + this->mParameterUnits.push_back("milliS_per_cm2"); + + // Derived Quantity index [0]: + this->mDerivedQuantityNames.push_back("membrane_fast_sodium_current"); + this->mDerivedQuantityUnits.push_back("microA_per_cm2"); + + // Derived Quantity index [1]: + this->mDerivedQuantityNames.push_back("membrane_leakage_current"); + this->mDerivedQuantityUnits.push_back("microA_per_cm2"); + + // Derived Quantity index [2]: + this->mDerivedQuantityNames.push_back("membrane_potassium_current"); + this->mDerivedQuantityUnits.push_back("microA_per_cm2"); + + // Derived Quantity index [3]: + this->mDerivedQuantityNames.push_back("membrane_stimulus_current"); + this->mDerivedQuantityUnits.push_back("microA_per_cm2"); + + // Derived Quantity index [4]: + this->mDerivedQuantityNames.push_back("time"); + this->mDerivedQuantityUnits.push_back("millisecond"); + + this->mInitialised = true; +} + +// Serialization for Boost >= 1.36 +#include "SerializationExportWrapperForCpp.hpp" +CHASTE_CLASS_EXPORT(Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLCvode) + +#endif // CHASTE_CVODE diff --git a/chaste_codegen/tests/numerical/baseline/Cvode_with_jacobian/hodgkin_huxley_squid_axon_model_1952_modified.hpp b/chaste_codegen/tests/numerical/baseline/Cvode_with_jacobian/hodgkin_huxley_squid_axon_model_1952_modified.hpp new file mode 100644 index 00000000..828995ce --- /dev/null +++ b/chaste_codegen/tests/numerical/baseline/Cvode_with_jacobian/hodgkin_huxley_squid_axon_model_1952_modified.hpp @@ -0,0 +1,86 @@ +#ifdef CHASTE_CVODE +#ifndef CELLHODGKIN_HUXLEY_SQUID_AXON_MODEL_1952_MODIFIEDFROMCELLMLCVODE_HPP_ +#define CELLHODGKIN_HUXLEY_SQUID_AXON_MODEL_1952_MODIFIEDFROMCELLMLCVODE_HPP_ + +//! @file +//! +//! This source file was generated from CellML by chaste_codegen version (version omitted as unimportant) +//! +//! Model: hodgkin_huxley_squid_axon_model_1952_modified +//! +//! Processed by chaste_codegen: https://github.com/ModellingWebLab/chaste-codegen +//! (translator: chaste_codegen, model type: AnalyticCvode) +//! on (date omitted as unimportant) +//! +//! + +#include "ChasteSerialization.hpp" +#include +#include "AbstractStimulusFunction.hpp" +#include "AbstractCvodeCell.hpp" + +class Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLCvode : public AbstractCvodeCell +{ + friend class boost::serialization::access; + template + void serialize(Archive & archive, const unsigned int version) + { + archive & boost::serialization::base_object(*this); + + } + + // + // Settable parameters and readable variables + // + + +private: +const bool is_concentration[4] = {false, false, false, false}; +const bool is_probability[4] = {false, false, false, false}; +public: + + boost::shared_ptr UseCellMLDefaultStimulus(); + Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLCvode(boost::shared_ptr pOdeSolver /* unused; should be empty */, boost::shared_ptr pIntracellularStimulus); + ~Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLCvode(); + void VerifyStateVariables(); + double GetIIonic(const std::vector* pStateVariables=NULL); + void EvaluateYDerivatives(double var_chaste_interface__environment__time, const N_Vector rY, N_Vector rDY); + N_Vector ComputeDerivedQuantities(double var_chaste_interface__environment__time, const N_Vector & rY); + void EvaluateAnalyticJacobian(double var_chaste_interface__environment__time, N_Vector rY, N_Vector rDY, CHASTE_CVODE_DENSE_MATRIX rJacobian, N_Vector rTmp1, N_Vector rTmp2, N_Vector rTmp3); +}; + +// Needs to be included last +#include "SerializationExportWrapper.hpp" +CHASTE_CLASS_EXPORT(Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLCvode) + +namespace boost +{ + namespace serialization + { + template + inline void save_construct_data( + Archive & ar, const Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLCvode * t, const unsigned int fileVersion) + { + const boost::shared_ptr p_solver = t->GetSolver(); + const boost::shared_ptr p_stimulus = t->GetStimulusFunction(); + ar << p_solver; + ar << p_stimulus; + } + + template + inline void load_construct_data( + Archive & ar, Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLCvode * t, const unsigned int fileVersion) + { + boost::shared_ptr p_solver; + boost::shared_ptr p_stimulus; + ar >> p_solver; + ar >> p_stimulus; + ::new(t)Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLCvode(p_solver, p_stimulus); + } + + } + +} + +#endif // CELLHODGKIN_HUXLEY_SQUID_AXON_MODEL_1952_MODIFIEDFROMCELLMLCVODE_HPP_ +#endif // CHASTE_CVODE \ No newline at end of file diff --git a/chaste_codegen/tests/numerical/baseline/FROZEN_AT_COMMIT.txt b/chaste_codegen/tests/numerical/baseline/FROZEN_AT_COMMIT.txt new file mode 100644 index 00000000..516f8cd8 --- /dev/null +++ b/chaste_codegen/tests/numerical/baseline/FROZEN_AT_COMMIT.txt @@ -0,0 +1,8 @@ +f42eaff9788793f47330a4d6fb94ea980cfedf30 + +This directory is a fixed snapshot of the reference models from this repo's +master branch at the commit above. `generate_refcheck_harness.py` reads +baseline content only from here, and this baseline will not change unless +`freeze_baseline.py --force` is run again. Only default (unsuffixed) reference +renderings are included. All variants are skipped e.g. `.cpp_python36`, +`--sympy_X_Y`/`--python_X_Y`. diff --git a/chaste_codegen/tests/numerical/baseline/GRL1/dynamic_demir_model_1994.cpp b/chaste_codegen/tests/numerical/baseline/GRL1/dynamic_demir_model_1994.cpp new file mode 100644 index 00000000..4be99189 --- /dev/null +++ b/chaste_codegen/tests/numerical/baseline/GRL1/dynamic_demir_model_1994.cpp @@ -0,0 +1,2830 @@ +//! @file +//! +//! This source file was generated from CellML by chaste_codegen version (version omitted as unimportant) +//! +//! Model: demir_model_1994 +//! +//! Processed by chaste_codegen: https://github.com/ModellingWebLab/chaste-codegen +//! (translator: chaste_codegen, model type: GeneralizedRushLarsenFirstOrder) +//! on (date omitted as unimportant) +//! +//! + +#include "dynamic_demir_model_1994.hpp" +#include +#include +#include +#include +#include "Exception.hpp" +#include "OdeSystemInformation.hpp" +#include "RegularStimulus.hpp" +#include "HeartConfig.hpp" +#include "IsNan.hpp" +#include "MathsCustomFunctions.hpp" + + + + + + double Dynamicdemir_model_1994FromCellMLGRL1::GetIntracellularCalciumConcentration() + { + return mStateVariables[1]; + } + Dynamicdemir_model_1994FromCellMLGRL1::Dynamicdemir_model_1994FromCellMLGRL1(boost::shared_ptr /* unused; should be empty */, boost::shared_ptr pIntracellularStimulus) + : AbstractGeneralizedRushLarsenCardiacCell( + 27, + 0, + pIntracellularStimulus) + { + // Time units: millisecond + // + this->mpSystemInfo = OdeSystemInformation::Instance(); + Init(); + + this->mParameters[0] = 0.021149999999999999; // (var_L_type_Ca_channel__g_Ca_L) [microS] + this->mParameters[1] = 5.5000000000000002e-5; // (var_membrane__Cm) [microF] + this->mParameters[2] = 0.0069300000000000004; // (var_delayed_rectifying_potassium_current__g_K_max) [microS] + this->mParameters[3] = 0.0034399999999999999; // (var_sodium_current__P_Na) [mul_per_second] + this->mParameters[4] = 0.0128821; // (var_hyperpolarisation_activated_current__g_f_K) [microS] + this->mParameters[5] = 0.0067478; // (var_hyperpolarisation_activated_current__g_f_Na) [microS] + } + + Dynamicdemir_model_1994FromCellMLGRL1::~Dynamicdemir_model_1994FromCellMLGRL1() + { + } + + + void Dynamicdemir_model_1994FromCellMLGRL1::VerifyStateVariables() + { + std::vector& rY = rGetStateVariables(); + std::string error_message = ""; + + for (unsigned i=0; i < 27; i++) + { + if(std::isnan(rY[i])) + { + error_message += "State variable " + this->rGetStateVariableNames()[i] + " is not a number\n"; + } + if(std::isinf(rY[i])) + { + error_message += "State variable " + this->rGetStateVariableNames()[i] + " has become INFINITE\n"; + } + if(this->is_concentration[i] && rY[i] < 0) + { + error_message += "Concentration " + this->rGetStateVariableNames()[i] + " below 0\n"; + } + if(this->is_probability[i] && rY[i] < 0) + { + error_message += "Probability " + this->rGetStateVariableNames()[i] + " below 0\n"; + } + if(this->is_probability[i] && rY[i] > 1) + { + error_message += "Probability " + this->rGetStateVariableNames()[i] + " above 1\n"; + } + } + if (error_message != ""){ + EXCEPTION(DumpState(error_message)); + } + } + + double Dynamicdemir_model_1994FromCellMLGRL1::GetIIonic(const std::vector* pStateVariables) + { + // For state variable interpolation (SVI) we read in interpolated state variables, + // otherwise for ionic current interpolation (ICI) we use the state variables of this model (node). + if (!pStateVariables) pStateVariables = &rGetStateVariables(); + const std::vector& rY = *pStateVariables; + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -49.54105 + double var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_i = rY[1]; + // Units: millimolar; Initial value: 0.0003787018 + double var_chaste_interface__sodium_current_m_gate__m = rY[2]; + // Units: dimensionless; Initial value: 0.250113 + double var_chaste_interface__sodium_current_h_gate__h1 = rY[3]; + // Units: dimensionless; Initial value: 0.001386897 + double var_chaste_interface__sodium_current_h_gate__h2 = rY[4]; + // Units: dimensionless; Initial value: 0.002065463 + double var_chaste_interface__L_type_Ca_channel_d_gate__d_L = rY[5]; + // Units: dimensionless; Initial value: 0.002572773 + double var_chaste_interface__L_type_Ca_channel_f_gate__f_L = rY[6]; + // Units: dimensionless; Initial value: 0.98651 + double var_chaste_interface__T_type_Ca_channel_d_gate__d_T = rY[7]; + // Units: dimensionless; Initial value: 0.02012114 + double var_chaste_interface__T_type_Ca_channel_f_gate__f_T = rY[8]; + // Units: dimensionless; Initial value: 0.1945111 + double var_chaste_interface__delayed_rectifying_potassium_current_P_a_gate__P_a = rY[9]; + // Units: dimensionless; Initial value: 0.02302278 + double var_chaste_interface__delayed_rectifying_potassium_current_P_i_gate__P_i = rY[10]; + // Units: dimensionless; Initial value: 0.3777728 + double var_chaste_interface__hyperpolarisation_activated_current_y_gate__y = rY[11]; + // Units: dimensionless; Initial value: 0.09227776 + double var_chaste_interface__intracellular_concentrations_and_buffer_equations__Na_i = rY[12]; + // Units: millimolar; Initial value: 9.701621 + double var_chaste_interface__intracellular_concentrations_and_buffer_equations__K_i = rY[13]; + // Units: millimolar; Initial value: 140.7347 + double var_chaste_interface__cleft_space_equations__Na_c = rY[18]; + // Units: millimolar; Initial value: 139.9988 + double var_chaste_interface__cleft_space_equations__Ca_c = rY[19]; + // Units: millimolar; Initial value: 2.00474 + double var_chaste_interface__cleft_space_equations__K_c = rY[20]; + // Units: millimolar; Initial value: 5.389014 + + const double var_L_type_Ca_channel__E_Ca_L = 46.399999999999999; // millivolt + const double var_T_type_Ca_channel__E_Ca_T = 45; // millivolt + const double var_T_type_Ca_channel__g_Ca_T = 0.02521; // microS + const double var_calcium_pump_current__i_Ca_P_max = 0.02869; // nanoA + const double var_cleft_space_equations__K_b = 5.4000000000000004; // millimolar + const double var_delayed_rectifying_potassium_current__g_K = pow(var_cleft_space_equations__K_b, 0.58999999999999997) * mParameters[2]; // microS + const double var_calcium_pump_current__i_Ca_P = var_calcium_pump_current__i_Ca_P_max * var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_i / (0.00040000000000000002 + var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_i); // nanoA + const double var_linear_background_current__g_B_Ca = 3.6399999999999997e-5; // microS + const double var_linear_background_current__g_B_K = 6.9400000000000006e-5; // microS + const double var_linear_background_current__g_B_Na = 0.00016000000000000001; // microS + const double var_membrane__F = 96485.341499999995; // coulomb_per_mole + const double var_membrane__R = 8314.4719999999998; // joule_per_kilomole_kelvin + const double var_membrane__T = 310; // kelvin + const double var_L_type_Ca_channel_d_gate__d_L_infinity = 1 / (1 + exp(-2.3500000000000001 - 0.16666666666666666 * var_chaste_interface__membrane__V)); // dimensionless + const double var_L_type_Ca_channel__i_Ca_L = (-var_L_type_Ca_channel__E_Ca_L + var_chaste_interface__membrane__V) * (0.095000000000000001 * var_L_type_Ca_channel_d_gate__d_L_infinity + var_chaste_interface__L_type_Ca_channel_d_gate__d_L * var_chaste_interface__L_type_Ca_channel_f_gate__f_L) * mParameters[0]; // nanoA + const double var_L_type_Ca_channel__i_Ca_L_converted = 0.001 * HeartConfig::Instance()->GetCapacitance() * var_L_type_Ca_channel__i_Ca_L / mParameters[1]; // uA_per_cm2 + const double var_T_type_Ca_channel__i_Ca_T = (-var_T_type_Ca_channel__E_Ca_T + var_chaste_interface__membrane__V) * var_T_type_Ca_channel__g_Ca_T * var_chaste_interface__T_type_Ca_channel_d_gate__d_T * var_chaste_interface__T_type_Ca_channel_f_gate__f_T; // nanoA + const double var_hyperpolarisation_activated_current__i_f_K = pow(var_chaste_interface__hyperpolarisation_activated_current_y_gate__y, 2) * (85 + var_chaste_interface__membrane__V) * mParameters[4]; // nanoA + const double var_hyperpolarisation_activated_current__i_f_Na = pow(var_chaste_interface__hyperpolarisation_activated_current_y_gate__y, 2) * (-75 + var_chaste_interface__membrane__V) * mParameters[5]; // nanoA + const double var_hyperpolarisation_activated_current__i_f = var_hyperpolarisation_activated_current__i_f_K + var_hyperpolarisation_activated_current__i_f_Na; // nanoA + const double var_hyperpolarisation_activated_current__i_f_converted = 0.001 * HeartConfig::Instance()->GetCapacitance() * var_hyperpolarisation_activated_current__i_f / mParameters[1]; // uA_per_cm2 + const double var_reversal_potentials__E_Ca = 0.5 * var_membrane__R * var_membrane__T * log(var_chaste_interface__cleft_space_equations__Ca_c / var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_i) / var_membrane__F; // millivolt + const double var_linear_background_current__i_B_Ca = (-var_reversal_potentials__E_Ca + var_chaste_interface__membrane__V) * var_linear_background_current__g_B_Ca; // nanoA + const double var_reversal_potentials__E_K = var_membrane__R * var_membrane__T * log(var_chaste_interface__cleft_space_equations__K_c / var_chaste_interface__intracellular_concentrations_and_buffer_equations__K_i) / var_membrane__F; // millivolt + const double var_delayed_rectifying_potassium_current__i_K = (-var_reversal_potentials__E_K + var_chaste_interface__membrane__V) * var_delayed_rectifying_potassium_current__g_K * var_chaste_interface__delayed_rectifying_potassium_current_P_a_gate__P_a * var_chaste_interface__delayed_rectifying_potassium_current_P_i_gate__P_i; // nanoA + const double var_delayed_rectifying_potassium_current__i_K_converted = 0.001 * HeartConfig::Instance()->GetCapacitance() * var_delayed_rectifying_potassium_current__i_K / mParameters[1]; // uA_per_cm2 + const double var_linear_background_current__i_B_K = (-var_reversal_potentials__E_K + var_chaste_interface__membrane__V) * var_linear_background_current__g_B_K; // nanoA + const double var_reversal_potentials__E_Na = var_membrane__R * var_membrane__T * log(var_chaste_interface__cleft_space_equations__Na_c / var_chaste_interface__intracellular_concentrations_and_buffer_equations__Na_i) / var_membrane__F; // millivolt + const double var_linear_background_current__i_B_Na = (-var_reversal_potentials__E_Na + var_chaste_interface__membrane__V) * var_linear_background_current__g_B_Na; // nanoA + const double var_linear_background_current__i_B = var_linear_background_current__i_B_Ca + var_linear_background_current__i_B_K + var_linear_background_current__i_B_Na; // nanoA + const double var_sodium_calcium_pump__K_NaCa = 1.2480000000000001e-5; // nanoA + const double var_sodium_calcium_pump__d_NaCa = 0.0001; // dimensionless + const double var_sodium_calcium_pump__gamma = 0.5; // dimensionless + const double var_sodium_calcium_pump__i_NaCa = (pow(var_chaste_interface__intracellular_concentrations_and_buffer_equations__Na_i, 3) * var_chaste_interface__cleft_space_equations__Ca_c * exp(0.037429999999999998 * var_chaste_interface__membrane__V * var_sodium_calcium_pump__gamma) - pow(var_chaste_interface__cleft_space_equations__Na_c, 3) * var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_i * exp(0.037429999999999998 * (-1 + var_sodium_calcium_pump__gamma) * var_chaste_interface__membrane__V)) * var_sodium_calcium_pump__K_NaCa / (1 + (pow(var_chaste_interface__cleft_space_equations__Na_c, 3) * var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_i + pow(var_chaste_interface__intracellular_concentrations_and_buffer_equations__Na_i, 3) * var_chaste_interface__cleft_space_equations__Ca_c) * var_sodium_calcium_pump__d_NaCa); // nanoA + const double var_sodium_current__i_Na = pow(var_membrane__F, 2) * pow(var_chaste_interface__sodium_current_m_gate__m, 3) * (-1 + exp((-var_reversal_potentials__E_Na + var_chaste_interface__membrane__V) * var_membrane__F / (var_membrane__R * var_membrane__T))) * var_chaste_interface__cleft_space_equations__Na_c * var_chaste_interface__membrane__V * mParameters[3] * var_chaste_interface__sodium_current_h_gate__h1 * var_chaste_interface__sodium_current_h_gate__h2 / ((-1 + exp(var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * var_membrane__R * var_membrane__T); // nanoA + const double var_sodium_current__i_Na_converted = 0.001 * HeartConfig::Instance()->GetCapacitance() * var_sodium_current__i_Na / mParameters[1]; // uA_per_cm2 + const double var_sodium_potassium_pump__K_m_K = 0.621; // millimolar + const double var_sodium_potassium_pump__K_m_Na = 5.46; // millimolar + const double var_sodium_potassium_pump__i_NaK_max = 0.21920000000000001; // nanoA + const double var_sodium_potassium_pump__i_NaK = 1.6000000000000001 * pow(var_chaste_interface__cleft_space_equations__K_c, 2) * pow(var_chaste_interface__intracellular_concentrations_and_buffer_equations__Na_i, 3) * var_sodium_potassium_pump__i_NaK_max / ((1.5 + exp(-1.5 - 0.025000000000000001 * var_chaste_interface__membrane__V)) * pow((var_chaste_interface__cleft_space_equations__K_c + var_sodium_potassium_pump__K_m_K), 2) * pow((var_chaste_interface__intracellular_concentrations_and_buffer_equations__Na_i + var_sodium_potassium_pump__K_m_Na), 3)); // nanoA + const double var_chaste_interface__i_ionic = ((var_L_type_Ca_channel__i_Ca_L_converted + var_delayed_rectifying_potassium_current__i_K_converted + var_hyperpolarisation_activated_current__i_f_converted + var_sodium_current__i_Na_converted) * mParameters[1] + 0.001 * HeartConfig::Instance()->GetCapacitance() * var_T_type_Ca_channel__i_Ca_T + 0.001 * HeartConfig::Instance()->GetCapacitance() * var_calcium_pump_current__i_Ca_P + 0.001 * HeartConfig::Instance()->GetCapacitance() * var_linear_background_current__i_B + 0.001 * HeartConfig::Instance()->GetCapacitance() * var_sodium_calcium_pump__i_NaCa + 0.001 * HeartConfig::Instance()->GetCapacitance() * var_sodium_potassium_pump__i_NaK) / mParameters[1]; // uA_per_cm2 + + const double i_ionic = var_chaste_interface__i_ionic; + EXCEPT_IF_NOT(!std::isnan(i_ionic)); + return i_ionic; + } + + void Dynamicdemir_model_1994FromCellMLGRL1::UpdateTransmembranePotential(double var_chaste_interface__environment__time_converted) + { + std::vector& rY = rGetStateVariables(); + unsigned v_index = GetVoltageIndex(); + const double delta = 1e-8; + + double d_dt_chaste_interface_var_membrane__V; + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -49.54105 + double var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_i = rY[1]; + // Units: millimolar; Initial value: 0.0003787018 + double var_chaste_interface__sodium_current_m_gate__m = rY[2]; + // Units: dimensionless; Initial value: 0.250113 + double var_chaste_interface__sodium_current_h_gate__h1 = rY[3]; + // Units: dimensionless; Initial value: 0.001386897 + double var_chaste_interface__sodium_current_h_gate__h2 = rY[4]; + // Units: dimensionless; Initial value: 0.002065463 + double var_chaste_interface__L_type_Ca_channel_d_gate__d_L = rY[5]; + // Units: dimensionless; Initial value: 0.002572773 + double var_chaste_interface__L_type_Ca_channel_f_gate__f_L = rY[6]; + // Units: dimensionless; Initial value: 0.98651 + double var_chaste_interface__T_type_Ca_channel_d_gate__d_T = rY[7]; + // Units: dimensionless; Initial value: 0.02012114 + double var_chaste_interface__T_type_Ca_channel_f_gate__f_T = rY[8]; + // Units: dimensionless; Initial value: 0.1945111 + double var_chaste_interface__delayed_rectifying_potassium_current_P_a_gate__P_a = rY[9]; + // Units: dimensionless; Initial value: 0.02302278 + double var_chaste_interface__delayed_rectifying_potassium_current_P_i_gate__P_i = rY[10]; + // Units: dimensionless; Initial value: 0.3777728 + double var_chaste_interface__hyperpolarisation_activated_current_y_gate__y = rY[11]; + // Units: dimensionless; Initial value: 0.09227776 + double var_chaste_interface__intracellular_concentrations_and_buffer_equations__Na_i = rY[12]; + // Units: millimolar; Initial value: 9.701621 + double var_chaste_interface__intracellular_concentrations_and_buffer_equations__K_i = rY[13]; + // Units: millimolar; Initial value: 140.7347 + double var_chaste_interface__cleft_space_equations__Na_c = rY[18]; + // Units: millimolar; Initial value: 139.9988 + double var_chaste_interface__cleft_space_equations__Ca_c = rY[19]; + // Units: millimolar; Initial value: 2.00474 + double var_chaste_interface__cleft_space_equations__K_c = rY[20]; + // Units: millimolar; Initial value: 5.389014 + + + // Mathematics + const double var_L_type_Ca_channel__E_Ca_L = 46.399999999999999; // millivolt + const double var_T_type_Ca_channel__E_Ca_T = 45; // millivolt + const double var_T_type_Ca_channel__g_Ca_T = 0.02521; // microS + const double var_calcium_pump_current__i_Ca_P_max = 0.02869; // nanoA + const double var_cleft_space_equations__K_b = 5.4000000000000004; // millimolar + const double var_delayed_rectifying_potassium_current__g_K = pow(var_cleft_space_equations__K_b, 0.58999999999999997) * mParameters[2]; // microS + const double var_calcium_pump_current__i_Ca_P = var_calcium_pump_current__i_Ca_P_max * var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_i / (0.00040000000000000002 + var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_i); // nanoA + const double var_linear_background_current__g_B_Ca = 3.6399999999999997e-5; // microS + const double var_linear_background_current__g_B_K = 6.9400000000000006e-5; // microS + const double var_linear_background_current__g_B_Na = 0.00016000000000000001; // microS + const double var_membrane__F = 96485.341499999995; // coulomb_per_mole + const double var_membrane__R = 8314.4719999999998; // joule_per_kilomole_kelvin + const double var_membrane__T = 310; // kelvin + const double var_L_type_Ca_channel_d_gate__d_L_infinity = 1 / (1 + exp(-2.3500000000000001 - 0.16666666666666666 * var_chaste_interface__membrane__V)); // dimensionless + const double var_L_type_Ca_channel__i_Ca_L = (-var_L_type_Ca_channel__E_Ca_L + var_chaste_interface__membrane__V) * (0.095000000000000001 * var_L_type_Ca_channel_d_gate__d_L_infinity + var_chaste_interface__L_type_Ca_channel_d_gate__d_L * var_chaste_interface__L_type_Ca_channel_f_gate__f_L) * mParameters[0]; // nanoA + const double var_T_type_Ca_channel__i_Ca_T = (-var_T_type_Ca_channel__E_Ca_T + var_chaste_interface__membrane__V) * var_T_type_Ca_channel__g_Ca_T * var_chaste_interface__T_type_Ca_channel_d_gate__d_T * var_chaste_interface__T_type_Ca_channel_f_gate__f_T; // nanoA + const double var_hyperpolarisation_activated_current__i_f_K = pow(var_chaste_interface__hyperpolarisation_activated_current_y_gate__y, 2) * (85 + var_chaste_interface__membrane__V) * mParameters[4]; // nanoA + const double var_hyperpolarisation_activated_current__i_f_Na = pow(var_chaste_interface__hyperpolarisation_activated_current_y_gate__y, 2) * (-75 + var_chaste_interface__membrane__V) * mParameters[5]; // nanoA + const double var_hyperpolarisation_activated_current__i_f = var_hyperpolarisation_activated_current__i_f_K + var_hyperpolarisation_activated_current__i_f_Na; // nanoA + const double var_reversal_potentials__E_Ca = 0.5 * var_membrane__R * var_membrane__T * log(var_chaste_interface__cleft_space_equations__Ca_c / var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_i) / var_membrane__F; // millivolt + const double var_linear_background_current__i_B_Ca = (-var_reversal_potentials__E_Ca + var_chaste_interface__membrane__V) * var_linear_background_current__g_B_Ca; // nanoA + const double var_reversal_potentials__E_K = var_membrane__R * var_membrane__T * log(var_chaste_interface__cleft_space_equations__K_c / var_chaste_interface__intracellular_concentrations_and_buffer_equations__K_i) / var_membrane__F; // millivolt + const double var_delayed_rectifying_potassium_current__i_K = (-var_reversal_potentials__E_K + var_chaste_interface__membrane__V) * var_delayed_rectifying_potassium_current__g_K * var_chaste_interface__delayed_rectifying_potassium_current_P_a_gate__P_a * var_chaste_interface__delayed_rectifying_potassium_current_P_i_gate__P_i; // nanoA + const double var_linear_background_current__i_B_K = (-var_reversal_potentials__E_K + var_chaste_interface__membrane__V) * var_linear_background_current__g_B_K; // nanoA + const double var_reversal_potentials__E_Na = var_membrane__R * var_membrane__T * log(var_chaste_interface__cleft_space_equations__Na_c / var_chaste_interface__intracellular_concentrations_and_buffer_equations__Na_i) / var_membrane__F; // millivolt + const double var_linear_background_current__i_B_Na = (-var_reversal_potentials__E_Na + var_chaste_interface__membrane__V) * var_linear_background_current__g_B_Na; // nanoA + const double var_linear_background_current__i_B = var_linear_background_current__i_B_Ca + var_linear_background_current__i_B_K + var_linear_background_current__i_B_Na; // nanoA + const double var_sodium_calcium_pump__K_NaCa = 1.2480000000000001e-5; // nanoA + const double var_sodium_calcium_pump__d_NaCa = 0.0001; // dimensionless + const double var_sodium_calcium_pump__gamma = 0.5; // dimensionless + const double var_sodium_calcium_pump__i_NaCa = (pow(var_chaste_interface__intracellular_concentrations_and_buffer_equations__Na_i, 3) * var_chaste_interface__cleft_space_equations__Ca_c * exp(0.037429999999999998 * var_chaste_interface__membrane__V * var_sodium_calcium_pump__gamma) - pow(var_chaste_interface__cleft_space_equations__Na_c, 3) * var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_i * exp(0.037429999999999998 * (-1 + var_sodium_calcium_pump__gamma) * var_chaste_interface__membrane__V)) * var_sodium_calcium_pump__K_NaCa / (1 + (pow(var_chaste_interface__cleft_space_equations__Na_c, 3) * var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_i + pow(var_chaste_interface__intracellular_concentrations_and_buffer_equations__Na_i, 3) * var_chaste_interface__cleft_space_equations__Ca_c) * var_sodium_calcium_pump__d_NaCa); // nanoA + const double var_sodium_current__i_Na = pow(var_membrane__F, 2) * pow(var_chaste_interface__sodium_current_m_gate__m, 3) * (-1 + exp((-var_reversal_potentials__E_Na + var_chaste_interface__membrane__V) * var_membrane__F / (var_membrane__R * var_membrane__T))) * var_chaste_interface__cleft_space_equations__Na_c * var_chaste_interface__membrane__V * mParameters[3] * var_chaste_interface__sodium_current_h_gate__h1 * var_chaste_interface__sodium_current_h_gate__h2 / ((-1 + exp(var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * var_membrane__R * var_membrane__T); // nanoA + const double var_sodium_potassium_pump__K_m_K = 0.621; // millimolar + const double var_sodium_potassium_pump__K_m_Na = 5.46; // millimolar + const double var_sodium_potassium_pump__i_NaK_max = 0.21920000000000001; // nanoA + const double var_sodium_potassium_pump__i_NaK = 1.6000000000000001 * pow(var_chaste_interface__cleft_space_equations__K_c, 2) * pow(var_chaste_interface__intracellular_concentrations_and_buffer_equations__Na_i, 3) * var_sodium_potassium_pump__i_NaK_max / ((1.5 + exp(-1.5 - 0.025000000000000001 * var_chaste_interface__membrane__V)) * pow((var_chaste_interface__cleft_space_equations__K_c + var_sodium_potassium_pump__K_m_K), 2) * pow((var_chaste_interface__intracellular_concentrations_and_buffer_equations__Na_i + var_sodium_potassium_pump__K_m_Na), 3)); // nanoA + const double var_membrane__V_orig_deriv = (-var_L_type_Ca_channel__i_Ca_L - var_T_type_Ca_channel__i_Ca_T - var_calcium_pump_current__i_Ca_P - var_delayed_rectifying_potassium_current__i_K - var_hyperpolarisation_activated_current__i_f - var_linear_background_current__i_B - var_sodium_calcium_pump__i_NaCa - var_sodium_current__i_Na - var_sodium_potassium_pump__i_NaK) / mParameters[1]; // millivolt / second + d_dt_chaste_interface_var_membrane__V = 0.001 * var_membrane__V_orig_deriv; // millivolt / millisecond + + double evalF = d_dt_chaste_interface_var_membrane__V; + mEvalF[0] = d_dt_chaste_interface_var_membrane__V; + double partialF = EvaluatePartialDerivative0(var_chaste_interface__environment__time_converted, rY, delta, true); + if (fabs(partialF) < delta) + { + rY[v_index] += evalF*mDt; + } + else + { + rY[v_index] += (evalF/partialF)*(exp(partialF*mDt)-1.0); + } + } + + void Dynamicdemir_model_1994FromCellMLGRL1::ComputeOneStepExceptVoltage(double var_chaste_interface__environment__time_converted) + { + std::vector& rY = rGetStateVariables(); + const double delta = 1e-8; + + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -49.54105 + double var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_i = rY[1]; + // Units: millimolar; Initial value: 0.0003787018 + double var_chaste_interface__sodium_current_m_gate__m = rY[2]; + // Units: dimensionless; Initial value: 0.250113 + double var_chaste_interface__sodium_current_h_gate__h1 = rY[3]; + // Units: dimensionless; Initial value: 0.001386897 + double var_chaste_interface__sodium_current_h_gate__h2 = rY[4]; + // Units: dimensionless; Initial value: 0.002065463 + double var_chaste_interface__L_type_Ca_channel_d_gate__d_L = rY[5]; + // Units: dimensionless; Initial value: 0.002572773 + double var_chaste_interface__L_type_Ca_channel_f_gate__f_L = rY[6]; + // Units: dimensionless; Initial value: 0.98651 + double var_chaste_interface__T_type_Ca_channel_d_gate__d_T = rY[7]; + // Units: dimensionless; Initial value: 0.02012114 + double var_chaste_interface__T_type_Ca_channel_f_gate__f_T = rY[8]; + // Units: dimensionless; Initial value: 0.1945111 + double var_chaste_interface__delayed_rectifying_potassium_current_P_a_gate__P_a = rY[9]; + // Units: dimensionless; Initial value: 0.02302278 + double var_chaste_interface__delayed_rectifying_potassium_current_P_i_gate__P_i = rY[10]; + // Units: dimensionless; Initial value: 0.3777728 + double var_chaste_interface__hyperpolarisation_activated_current_y_gate__y = rY[11]; + // Units: dimensionless; Initial value: 0.09227776 + double var_chaste_interface__intracellular_concentrations_and_buffer_equations__Na_i = rY[12]; + // Units: millimolar; Initial value: 9.701621 + double var_chaste_interface__intracellular_concentrations_and_buffer_equations__K_i = rY[13]; + // Units: millimolar; Initial value: 140.7347 + double var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_Calmod = rY[14]; + // Units: dimensionless; Initial value: 0.1411678 + double var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_Trop = rY[15]; + // Units: dimensionless; Initial value: 0.07331396 + double var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_Mg_Trop = rY[16]; + // Units: dimensionless; Initial value: 0.7618549 + double var_chaste_interface__intracellular_concentrations_and_buffer_equations__Mg_Mg_Trop = rY[17]; + // Units: dimensionless; Initial value: 0.2097049 + double var_chaste_interface__cleft_space_equations__Na_c = rY[18]; + // Units: millimolar; Initial value: 139.9988 + double var_chaste_interface__cleft_space_equations__Ca_c = rY[19]; + // Units: millimolar; Initial value: 2.00474 + double var_chaste_interface__cleft_space_equations__K_c = rY[20]; + // Units: millimolar; Initial value: 5.389014 + double var_chaste_interface__SR_Ca_uptake_and_release__Ca_up = rY[21]; + // Units: millimolar; Initial value: 16.95311 + double var_chaste_interface__SR_Ca_uptake_and_release__Ca_rel = rY[22]; + // Units: millimolar; Initial value: 16.85024 + double var_chaste_interface__SR_Ca_uptake_and_release__Ca_Calse = rY[23]; + // Units: dimensionless; Initial value: 0.9528726 + double var_chaste_interface__SR_Ca_uptake_and_release__F1 = rY[24]; + // Units: dimensionless; Initial value: 0.1133251 + double var_chaste_interface__SR_Ca_uptake_and_release__F2 = rY[25]; + // Units: dimensionless; Initial value: 0.0007594214 + double var_chaste_interface__SR_Ca_uptake_and_release__F3 = rY[26]; + // Units: dimensionless; Initial value: 0.8859153 + + + // Mathematics + const double var_L_type_Ca_channel__E_Ca_L = 46.399999999999999; // millivolt + const double var_SR_Ca_uptake_and_release__alpha_rel = 0.5; // nanoA_per_millimolar + const double var_SR_Ca_uptake_and_release__alpha_up = 0.080000000000000002; // nanoA + const double var_SR_Ca_uptake_and_release__beta_up = 0.071999999999999995; // nanoA + const double var_SR_Ca_uptake_and_release__i_rel = pow(var_chaste_interface__SR_Ca_uptake_and_release__F2, 2) * var_chaste_interface__SR_Ca_uptake_and_release__Ca_rel * var_SR_Ca_uptake_and_release__alpha_rel / pow((0.25 + var_chaste_interface__SR_Ca_uptake_and_release__F2), 2); // nanoA + const double var_SR_Ca_uptake_and_release__k_SRCa = 22; // millimolar + const double var_SR_Ca_uptake_and_release__k_cyca = 5.0000000000000002e-5; // millimolar + const double var_SR_Ca_uptake_and_release__k_rel = 0.0040000000000000001; // millimolar + const double var_SR_Ca_uptake_and_release__k_xcs = 0.90000000000000002; // dimensionless + const double var_SR_Ca_uptake_and_release__K1 = var_SR_Ca_uptake_and_release__k_cyca * var_SR_Ca_uptake_and_release__k_xcs / var_SR_Ca_uptake_and_release__k_SRCa; // dimensionless + const double var_SR_Ca_uptake_and_release__phi_Calse = -641 * var_chaste_interface__SR_Ca_uptake_and_release__Ca_Calse + 770 * (1 - var_chaste_interface__SR_Ca_uptake_and_release__Ca_Calse) * var_chaste_interface__SR_Ca_uptake_and_release__Ca_rel; // per_second + const double var_SR_Ca_uptake_and_release__Ca_Calse_orig_deriv = var_SR_Ca_uptake_and_release__phi_Calse; // 1 / second + const double d_dt_chaste_interface_var_SR_Ca_uptake_and_release__Ca_Calse = 0.001 * var_SR_Ca_uptake_and_release__Ca_Calse_orig_deriv; // 1 / millisecond + const double var_T_type_Ca_channel__E_Ca_T = 45; // millivolt + const double var_T_type_Ca_channel__g_Ca_T = 0.02521; // microS + const double var_calcium_pump_current__i_Ca_P_max = 0.02869; // nanoA + const double var_cleft_space_equations__Ca_b = 2; // millimolar + const double var_cleft_space_equations__K_b = 5.4000000000000004; // millimolar + const double var_cleft_space_equations__Na_b = 140; // millimolar + const double var_cleft_space_equations__Vol = 3.4970000000000001e-6; // microLitre + const double var_cleft_space_equations__V_c = 0.13600000000000001 * var_cleft_space_equations__Vol; // microLitre + const double var_cleft_space_equations__tau_p = 0.01; // second + const double var_delayed_rectifying_potassium_current__g_K = pow(var_cleft_space_equations__K_b, 0.58999999999999997) * mParameters[2]; // microS + const double var_SR_Ca_uptake_and_release__K2 = var_chaste_interface__SR_Ca_uptake_and_release__Ca_up * var_SR_Ca_uptake_and_release__K1 + var_SR_Ca_uptake_and_release__k_cyca * var_SR_Ca_uptake_and_release__k_xcs + var_SR_Ca_uptake_and_release__k_cyca + var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_i; // millimolar + const double var_SR_Ca_uptake_and_release__i_up = (var_SR_Ca_uptake_and_release__alpha_up * var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_i - var_chaste_interface__SR_Ca_uptake_and_release__Ca_up * var_SR_Ca_uptake_and_release__K1 * var_SR_Ca_uptake_and_release__beta_up) / var_SR_Ca_uptake_and_release__K2; // nanoA + const double var_SR_Ca_uptake_and_release__r_inact = 40 + 240 * pow(var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_i, 4) / pow((var_SR_Ca_uptake_and_release__k_rel + var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_i), 4); // per_second + const double var_SR_Ca_uptake_and_release__F3_orig_deriv = -0.95999999999999996 * var_chaste_interface__SR_Ca_uptake_and_release__F3 + var_chaste_interface__SR_Ca_uptake_and_release__F2 * var_SR_Ca_uptake_and_release__r_inact; // 1 / second + const double d_dt_chaste_interface_var_SR_Ca_uptake_and_release__F3 = 0.001 * var_SR_Ca_uptake_and_release__F3_orig_deriv; // 1 / millisecond + const double var_calcium_pump_current__i_Ca_P = var_calcium_pump_current__i_Ca_P_max * var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_i / (0.00040000000000000002 + var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_i); // nanoA + const double var_intracellular_concentrations_and_buffer_equations__Mg_i = 2.5; // millimolar + const double var_intracellular_concentrations_and_buffer_equations__V_i = 0.46500000000000002 * var_cleft_space_equations__Vol; // microLitre + const double var_SR_Ca_uptake_and_release__V_rel = 0.0012960000000000001 * var_intracellular_concentrations_and_buffer_equations__V_i; // microLitre + const double var_SR_Ca_uptake_and_release__V_up = 0.01166 * var_intracellular_concentrations_and_buffer_equations__V_i; // microLitre + const double var_intracellular_concentrations_and_buffer_equations__phi_C = -307 * var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_Calmod + 129000 * (1 - var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_Calmod) * var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_i; // per_second + const double var_intracellular_concentrations_and_buffer_equations__Ca_Calmod_orig_deriv = var_intracellular_concentrations_and_buffer_equations__phi_C; // 1 / second + const double d_dt_chaste_interface_var_intracellular_concentrations_and_buffer_equations__Ca_Calmod = 0.001 * var_intracellular_concentrations_and_buffer_equations__Ca_Calmod_orig_deriv; // 1 / millisecond + const double var_intracellular_concentrations_and_buffer_equations__F_C = 0.089999999999999997 * var_intracellular_concentrations_and_buffer_equations__phi_C; // millimolar_per_second + const double var_intracellular_concentrations_and_buffer_equations__phi_TC = -252 * var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_Trop + 50500 * (1 - var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_Trop) * var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_i; // per_second + const double var_intracellular_concentrations_and_buffer_equations__Ca_Trop_orig_deriv = var_intracellular_concentrations_and_buffer_equations__phi_TC; // 1 / second + const double d_dt_chaste_interface_var_intracellular_concentrations_and_buffer_equations__Ca_Trop = 0.001 * var_intracellular_concentrations_and_buffer_equations__Ca_Trop_orig_deriv; // 1 / millisecond + const double var_intracellular_concentrations_and_buffer_equations__F_TC = 0.031 * var_intracellular_concentrations_and_buffer_equations__phi_TC; // millimolar_per_second + const double var_intracellular_concentrations_and_buffer_equations__phi_TMgC = -4.25 * var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_Mg_Trop + 129000 * (1 - var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_Mg_Trop - var_chaste_interface__intracellular_concentrations_and_buffer_equations__Mg_Mg_Trop) * var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_i; // per_second + const double var_intracellular_concentrations_and_buffer_equations__Ca_Mg_Trop_orig_deriv = var_intracellular_concentrations_and_buffer_equations__phi_TMgC; // 1 / second + const double d_dt_chaste_interface_var_intracellular_concentrations_and_buffer_equations__Ca_Mg_Trop = 0.001 * var_intracellular_concentrations_and_buffer_equations__Ca_Mg_Trop_orig_deriv; // 1 / millisecond + const double var_intracellular_concentrations_and_buffer_equations__F_TMgC = 0.062 * var_intracellular_concentrations_and_buffer_equations__phi_TMgC; // millimolar_per_second + const double var_intracellular_concentrations_and_buffer_equations__phi_B = var_intracellular_concentrations_and_buffer_equations__F_C + var_intracellular_concentrations_and_buffer_equations__F_TC + var_intracellular_concentrations_and_buffer_equations__F_TMgC; // millimolar_per_second + const double var_intracellular_concentrations_and_buffer_equations__phi_TMgM = -429 * var_chaste_interface__intracellular_concentrations_and_buffer_equations__Mg_Mg_Trop + 1290 * (1 - var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_Mg_Trop - var_chaste_interface__intracellular_concentrations_and_buffer_equations__Mg_Mg_Trop) * var_intracellular_concentrations_and_buffer_equations__Mg_i; // per_second + const double var_intracellular_concentrations_and_buffer_equations__Mg_Mg_Trop_orig_deriv = var_intracellular_concentrations_and_buffer_equations__phi_TMgM; // 1 / second + const double d_dt_chaste_interface_var_intracellular_concentrations_and_buffer_equations__Mg_Mg_Trop = 0.001 * var_intracellular_concentrations_and_buffer_equations__Mg_Mg_Trop_orig_deriv; // 1 / millisecond + const double var_linear_background_current__g_B_Ca = 3.6399999999999997e-5; // microS + const double var_linear_background_current__g_B_K = 6.9400000000000006e-5; // microS + const double var_linear_background_current__g_B_Na = 0.00016000000000000001; // microS + const double var_membrane__F = 96485.341499999995; // coulomb_per_mole + const double var_SR_Ca_uptake_and_release__i_tr = 31.162355874104083 * (-var_chaste_interface__SR_Ca_uptake_and_release__Ca_rel + var_chaste_interface__SR_Ca_uptake_and_release__Ca_up) * var_SR_Ca_uptake_and_release__V_up * var_membrane__F; // nanoA + const double var_SR_Ca_uptake_and_release__Ca_rel_orig_deriv = -11.48 * var_SR_Ca_uptake_and_release__phi_Calse + 0.5 * (-var_SR_Ca_uptake_and_release__i_rel + var_SR_Ca_uptake_and_release__i_tr) / (var_SR_Ca_uptake_and_release__V_rel * var_membrane__F); // millimolar / second + const double d_dt_chaste_interface_var_SR_Ca_uptake_and_release__Ca_rel = 0.001 * var_SR_Ca_uptake_and_release__Ca_rel_orig_deriv; // millimolar / millisecond + const double var_SR_Ca_uptake_and_release__Ca_up_orig_deriv = 0.5 * (-var_SR_Ca_uptake_and_release__i_tr + var_SR_Ca_uptake_and_release__i_up) / (var_SR_Ca_uptake_and_release__V_up * var_membrane__F); // millimolar / second + const double d_dt_chaste_interface_var_SR_Ca_uptake_and_release__Ca_up = 0.001 * var_SR_Ca_uptake_and_release__Ca_up_orig_deriv; // millimolar / millisecond + const double var_membrane__R = 8314.4719999999998; // joule_per_kilomole_kelvin + const double var_membrane__T = 310; // kelvin + const double var_L_type_Ca_channel_d_gate__alpha_d_L = -28.390000000000001 * (35 + var_chaste_interface__membrane__V) / (-1 + exp(-14 - 0.40000000000000002 * var_chaste_interface__membrane__V)) - 84.900000000000006 * var_chaste_interface__membrane__V / (-1 + exp(-0.20799999999999999 * var_chaste_interface__membrane__V)); // per_second + const double var_L_type_Ca_channel_d_gate__beta_d_L = 11.43 * (-5 + var_chaste_interface__membrane__V) / (-1 + exp(-2 + 0.40000000000000002 * var_chaste_interface__membrane__V)); // per_second + const double var_L_type_Ca_channel_d_gate__d_L_infinity = 1 / (1 + exp(-2.3500000000000001 - 0.16666666666666666 * var_chaste_interface__membrane__V)); // dimensionless + const double var_L_type_Ca_channel__i_Ca_L = (-var_L_type_Ca_channel__E_Ca_L + var_chaste_interface__membrane__V) * (0.095000000000000001 * var_L_type_Ca_channel_d_gate__d_L_infinity + var_chaste_interface__L_type_Ca_channel_d_gate__d_L * var_chaste_interface__L_type_Ca_channel_f_gate__f_L) * mParameters[0]; // nanoA + const double var_L_type_Ca_channel_d_gate__tau_d_L = 1 / (var_L_type_Ca_channel_d_gate__alpha_d_L + var_L_type_Ca_channel_d_gate__beta_d_L); // second + const double var_L_type_Ca_channel_d_gate__d_L_orig_deriv = (-var_chaste_interface__L_type_Ca_channel_d_gate__d_L + var_L_type_Ca_channel_d_gate__d_L_infinity) / var_L_type_Ca_channel_d_gate__tau_d_L; // 1 / second + const double d_dt_chaste_interface_var_L_type_Ca_channel_d_gate__d_L = 0.001 * var_L_type_Ca_channel_d_gate__d_L_orig_deriv; // 1 / millisecond + const double var_L_type_Ca_channel_f_gate__alpha_f_L = 3.75 * (28 + var_chaste_interface__membrane__V) / (-1 + exp(7 + 0.25 * var_chaste_interface__membrane__V)); // per_second + const double var_L_type_Ca_channel_f_gate__beta_f_L = 30 / (1 + exp(-7 - 0.25 * var_chaste_interface__membrane__V)); // per_second + const double var_L_type_Ca_channel_f_gate__f_L_infinity = 1 / (1 + exp(6 + 0.20000000000000001 * var_chaste_interface__membrane__V)); // dimensionless + const double var_L_type_Ca_channel_f_gate__tau_f_L = 1 / (var_L_type_Ca_channel_f_gate__alpha_f_L + var_L_type_Ca_channel_f_gate__beta_f_L); // second + const double var_L_type_Ca_channel_f_gate__f_L_orig_deriv = (-var_chaste_interface__L_type_Ca_channel_f_gate__f_L + var_L_type_Ca_channel_f_gate__f_L_infinity) / var_L_type_Ca_channel_f_gate__tau_f_L; // 1 / second + const double d_dt_chaste_interface_var_L_type_Ca_channel_f_gate__f_L = 0.001 * var_L_type_Ca_channel_f_gate__f_L_orig_deriv; // 1 / millisecond + const double var_SR_Ca_uptake_and_release__r_act = 240 * exp(-3.2000000000000002 + 0.080000000000000002 * var_chaste_interface__membrane__V) + 240 * pow(var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_i, 4) / pow((var_SR_Ca_uptake_and_release__k_rel + var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_i), 4); // per_second + const double var_SR_Ca_uptake_and_release__F1_orig_deriv = 0.95999999999999996 * var_chaste_interface__SR_Ca_uptake_and_release__F3 - var_chaste_interface__SR_Ca_uptake_and_release__F1 * var_SR_Ca_uptake_and_release__r_act; // 1 / second + const double d_dt_chaste_interface_var_SR_Ca_uptake_and_release__F1 = 0.001 * var_SR_Ca_uptake_and_release__F1_orig_deriv; // 1 / millisecond + const double var_SR_Ca_uptake_and_release__F2_orig_deriv = var_chaste_interface__SR_Ca_uptake_and_release__F1 * var_SR_Ca_uptake_and_release__r_act - var_chaste_interface__SR_Ca_uptake_and_release__F2 * var_SR_Ca_uptake_and_release__r_inact; // 1 / second + const double d_dt_chaste_interface_var_SR_Ca_uptake_and_release__F2 = 0.001 * var_SR_Ca_uptake_and_release__F2_orig_deriv; // 1 / millisecond + const double var_T_type_Ca_channel__i_Ca_T = (-var_T_type_Ca_channel__E_Ca_T + var_chaste_interface__membrane__V) * var_T_type_Ca_channel__g_Ca_T * var_chaste_interface__T_type_Ca_channel_d_gate__d_T * var_chaste_interface__T_type_Ca_channel_f_gate__f_T; // nanoA + const double var_T_type_Ca_channel_d_gate__alpha_d_T = 1068 * exp(0.87666666666666671 + 0.033333333333333333 * var_chaste_interface__membrane__V); // per_second + const double var_T_type_Ca_channel_d_gate__beta_d_T = 1068 * exp(-0.87666666666666671 - 0.033333333333333333 * var_chaste_interface__membrane__V); // per_second + const double var_T_type_Ca_channel_d_gate__d_T_infinity = 1 / (1 + exp(-4.3833333333333337 - 0.16666666666666666 * var_chaste_interface__membrane__V)); // dimensionless + const double var_T_type_Ca_channel_d_gate__tau_d_T = 1 / (var_T_type_Ca_channel_d_gate__alpha_d_T + var_T_type_Ca_channel_d_gate__beta_d_T); // second + const double var_T_type_Ca_channel_d_gate__d_T_orig_deriv = (-var_chaste_interface__T_type_Ca_channel_d_gate__d_T + var_T_type_Ca_channel_d_gate__d_T_infinity) / var_T_type_Ca_channel_d_gate__tau_d_T; // 1 / second + const double d_dt_chaste_interface_var_T_type_Ca_channel_d_gate__d_T = 0.001 * var_T_type_Ca_channel_d_gate__d_T_orig_deriv; // 1 / millisecond + const double var_T_type_Ca_channel_f_gate__alpha_f_T = 15.300000000000001 * exp(-0.74069627851140463 - 0.012004801920768308 * var_chaste_interface__membrane__V); // per_second + const double var_T_type_Ca_channel_f_gate__beta_f_T = 15 * exp(4.0117035110533159 + 0.065019505851755519 * var_chaste_interface__membrane__V); // per_second + const double var_T_type_Ca_channel_f_gate__f_T_infinity = 1 / (1 + exp(11.017857142857144 + 0.17857142857142858 * var_chaste_interface__membrane__V)); // dimensionless + const double var_T_type_Ca_channel_f_gate__tau_f_T = 1 / (var_T_type_Ca_channel_f_gate__alpha_f_T + var_T_type_Ca_channel_f_gate__beta_f_T); // second + const double var_T_type_Ca_channel_f_gate__f_T_orig_deriv = (-var_chaste_interface__T_type_Ca_channel_f_gate__f_T + var_T_type_Ca_channel_f_gate__f_T_infinity) / var_T_type_Ca_channel_f_gate__tau_f_T; // 1 / second + const double d_dt_chaste_interface_var_T_type_Ca_channel_f_gate__f_T = 0.001 * var_T_type_Ca_channel_f_gate__f_T_orig_deriv; // 1 / millisecond + const double var_delayed_rectifying_potassium_current_P_a_gate__P_a_infinity = 1 / (1 + exp(-0.68918918918918914 - 0.13513513513513511 * var_chaste_interface__membrane__V)); // dimensionless + const double var_delayed_rectifying_potassium_current_P_a_gate__tau_P_a = 1 / (17 * exp(0.039800000000000002 * var_chaste_interface__membrane__V) + 2.1099999999999999 * exp(-0.050999999999999997 * var_chaste_interface__membrane__V)); // second + const double var_delayed_rectifying_potassium_current_P_a_gate__P_a_orig_deriv = (-var_chaste_interface__delayed_rectifying_potassium_current_P_a_gate__P_a + var_delayed_rectifying_potassium_current_P_a_gate__P_a_infinity) / var_delayed_rectifying_potassium_current_P_a_gate__tau_P_a; // 1 / second + const double d_dt_chaste_interface_var_delayed_rectifying_potassium_current_P_a_gate__P_a = 0.001 * var_delayed_rectifying_potassium_current_P_a_gate__P_a_orig_deriv; // 1 / millisecond + const double var_delayed_rectifying_potassium_current_P_i_gate__alpha_P_i = 100 * exp(-0.0183 * var_chaste_interface__membrane__V); // per_second + const double var_delayed_rectifying_potassium_current_P_i_gate__beta_P_i = 656 * exp(0.0094199999999999996 * var_chaste_interface__membrane__V); // per_second + const double var_delayed_rectifying_potassium_current_P_i_gate__P_i_orig_deriv = (1 - var_chaste_interface__delayed_rectifying_potassium_current_P_i_gate__P_i) * var_delayed_rectifying_potassium_current_P_i_gate__alpha_P_i - var_chaste_interface__delayed_rectifying_potassium_current_P_i_gate__P_i * var_delayed_rectifying_potassium_current_P_i_gate__beta_P_i; // 1 / second + const double d_dt_chaste_interface_var_delayed_rectifying_potassium_current_P_i_gate__P_i = 0.001 * var_delayed_rectifying_potassium_current_P_i_gate__P_i_orig_deriv; // 1 / millisecond + const double var_hyperpolarisation_activated_current__i_f_K = pow(var_chaste_interface__hyperpolarisation_activated_current_y_gate__y, 2) * (85 + var_chaste_interface__membrane__V) * mParameters[4]; // nanoA + const double var_hyperpolarisation_activated_current__i_f_Na = pow(var_chaste_interface__hyperpolarisation_activated_current_y_gate__y, 2) * (-75 + var_chaste_interface__membrane__V) * mParameters[5]; // nanoA + const double var_hyperpolarisation_activated_current_y_gate__tau_y = 1 / (1.6483000000000001 * exp(-2.2219482120838472 - 0.041101520756267988 * var_chaste_interface__membrane__V) + 14.01055 / (0.69999999999999996 + exp(-10.909090909090908 - 0.18181818181818182 * var_chaste_interface__membrane__V))); // second + const double var_hyperpolarisation_activated_current_y_gate__y_infinity = 1 / (1 + exp(8.0222222222222221 + 0.1111111111111111 * var_chaste_interface__membrane__V)); // dimensionless + const double var_hyperpolarisation_activated_current_y_gate__y_orig_deriv = (-var_chaste_interface__hyperpolarisation_activated_current_y_gate__y + var_hyperpolarisation_activated_current_y_gate__y_infinity) / var_hyperpolarisation_activated_current_y_gate__tau_y; // 1 / second + const double d_dt_chaste_interface_var_hyperpolarisation_activated_current_y_gate__y = 0.001 * var_hyperpolarisation_activated_current_y_gate__y_orig_deriv; // 1 / millisecond + const double var_reversal_potentials__E_Ca = 0.5 * var_membrane__R * var_membrane__T * log(var_chaste_interface__cleft_space_equations__Ca_c / var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_i) / var_membrane__F; // millivolt + const double var_linear_background_current__i_B_Ca = (-var_reversal_potentials__E_Ca + var_chaste_interface__membrane__V) * var_linear_background_current__g_B_Ca; // nanoA + const double var_reversal_potentials__E_K = var_membrane__R * var_membrane__T * log(var_chaste_interface__cleft_space_equations__K_c / var_chaste_interface__intracellular_concentrations_and_buffer_equations__K_i) / var_membrane__F; // millivolt + const double var_delayed_rectifying_potassium_current__i_K = (-var_reversal_potentials__E_K + var_chaste_interface__membrane__V) * var_delayed_rectifying_potassium_current__g_K * var_chaste_interface__delayed_rectifying_potassium_current_P_a_gate__P_a * var_chaste_interface__delayed_rectifying_potassium_current_P_i_gate__P_i; // nanoA + const double var_linear_background_current__i_B_K = (-var_reversal_potentials__E_K + var_chaste_interface__membrane__V) * var_linear_background_current__g_B_K; // nanoA + const double var_reversal_potentials__E_Na = var_membrane__R * var_membrane__T * log(var_chaste_interface__cleft_space_equations__Na_c / var_chaste_interface__intracellular_concentrations_and_buffer_equations__Na_i) / var_membrane__F; // millivolt + const double var_linear_background_current__i_B_Na = (-var_reversal_potentials__E_Na + var_chaste_interface__membrane__V) * var_linear_background_current__g_B_Na; // nanoA + const double var_sodium_calcium_pump__K_NaCa = 1.2480000000000001e-5; // nanoA + const double var_sodium_calcium_pump__d_NaCa = 0.0001; // dimensionless + const double var_sodium_calcium_pump__gamma = 0.5; // dimensionless + const double var_sodium_calcium_pump__i_NaCa = (pow(var_chaste_interface__intracellular_concentrations_and_buffer_equations__Na_i, 3) * var_chaste_interface__cleft_space_equations__Ca_c * exp(0.037429999999999998 * var_chaste_interface__membrane__V * var_sodium_calcium_pump__gamma) - pow(var_chaste_interface__cleft_space_equations__Na_c, 3) * var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_i * exp(0.037429999999999998 * (-1 + var_sodium_calcium_pump__gamma) * var_chaste_interface__membrane__V)) * var_sodium_calcium_pump__K_NaCa / (1 + (pow(var_chaste_interface__cleft_space_equations__Na_c, 3) * var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_i + pow(var_chaste_interface__intracellular_concentrations_and_buffer_equations__Na_i, 3) * var_chaste_interface__cleft_space_equations__Ca_c) * var_sodium_calcium_pump__d_NaCa); // nanoA + const double var_cleft_space_equations__Ca_c_orig_deriv = (-var_chaste_interface__cleft_space_equations__Ca_c + var_cleft_space_equations__Ca_b) / var_cleft_space_equations__tau_p + 0.5 * (-2 * var_sodium_calcium_pump__i_NaCa + var_L_type_Ca_channel__i_Ca_L + var_T_type_Ca_channel__i_Ca_T + var_calcium_pump_current__i_Ca_P + var_linear_background_current__i_B_Ca) / (var_cleft_space_equations__V_c * var_membrane__F); // millimolar / second + const double d_dt_chaste_interface_var_cleft_space_equations__Ca_c = 0.001 * var_cleft_space_equations__Ca_c_orig_deriv; // millimolar / millisecond + const double var_intracellular_concentrations_and_buffer_equations__Ca_i_orig_deriv = -var_intracellular_concentrations_and_buffer_equations__phi_B + 0.5 * (-var_L_type_Ca_channel__i_Ca_L - var_SR_Ca_uptake_and_release__i_up - var_T_type_Ca_channel__i_Ca_T - var_calcium_pump_current__i_Ca_P - var_linear_background_current__i_B_Ca + 2 * var_sodium_calcium_pump__i_NaCa + var_SR_Ca_uptake_and_release__i_rel) / (var_intracellular_concentrations_and_buffer_equations__V_i * var_membrane__F); // millimolar / second + const double d_dt_chaste_interface_var_intracellular_concentrations_and_buffer_equations__Ca_i = 0.001 * var_intracellular_concentrations_and_buffer_equations__Ca_i_orig_deriv; // millimolar / millisecond + const double var_sodium_current_h_gate__alpha_h1 = 165 * exp(-8.0396825396825395 - 0.079365079365079361 * var_chaste_interface__membrane__V); // per_second + const double var_sodium_current_h_gate__beta_h1 = 12360 / (1 + 320 * exp(-8.0396825396825395 - 0.079365079365079361 * var_chaste_interface__membrane__V)); // per_second + const double var_sodium_current_h_gate__h1_infinity = var_sodium_current_h_gate__alpha_h1 / (var_sodium_current_h_gate__alpha_h1 + var_sodium_current_h_gate__beta_h1); // dimensionless + const double var_sodium_current_h_gate__h2_infinity = var_sodium_current_h_gate__h1_infinity; // dimensionless + const double var_sodium_current_h_gate__tau_h1 = 1 / (var_sodium_current_h_gate__alpha_h1 + var_sodium_current_h_gate__beta_h1); // second + const double var_sodium_current_h_gate__h1_orig_deriv = (-var_chaste_interface__sodium_current_h_gate__h1 + var_sodium_current_h_gate__h1_infinity) / var_sodium_current_h_gate__tau_h1; // 1 / second + const double d_dt_chaste_interface_var_sodium_current_h_gate__h1 = 0.001 * var_sodium_current_h_gate__h1_orig_deriv; // 1 / millisecond + const double var_sodium_current_h_gate__tau_h2 = 20 * var_sodium_current_h_gate__tau_h1; // second + const double var_sodium_current_h_gate__h2_orig_deriv = (-var_chaste_interface__sodium_current_h_gate__h2 + var_sodium_current_h_gate__h2_infinity) / var_sodium_current_h_gate__tau_h2; // 1 / second + const double d_dt_chaste_interface_var_sodium_current_h_gate__h2 = 0.001 * var_sodium_current_h_gate__h2_orig_deriv; // 1 / millisecond + const double var_sodium_current_m_gate__alpha_m = -824 * (51.899999999999999 + var_chaste_interface__membrane__V) / (-1 + exp(-5.8314606741573032 - 0.11235955056179775 * var_chaste_interface__membrane__V)); // per_second + const double var_sodium_current_m_gate__beta_m = 32960 * exp(-5.8314606741573032 - 0.11235955056179775 * var_chaste_interface__membrane__V); // per_second + const double var_sodium_current__i_Na = pow(var_membrane__F, 2) * pow(var_chaste_interface__sodium_current_m_gate__m, 3) * (-1 + exp((-var_reversal_potentials__E_Na + var_chaste_interface__membrane__V) * var_membrane__F / (var_membrane__R * var_membrane__T))) * var_chaste_interface__cleft_space_equations__Na_c * var_chaste_interface__membrane__V * mParameters[3] * var_chaste_interface__sodium_current_h_gate__h1 * var_chaste_interface__sodium_current_h_gate__h2 / ((-1 + exp(var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * var_membrane__R * var_membrane__T); // nanoA + const double var_sodium_current_m_gate__m_infinity = var_sodium_current_m_gate__alpha_m / (var_sodium_current_m_gate__alpha_m + var_sodium_current_m_gate__beta_m); // dimensionless + const double var_sodium_current_m_gate__tau_m = 1.5e-5 + 1 / (var_sodium_current_m_gate__alpha_m + var_sodium_current_m_gate__beta_m); // second + const double var_sodium_current_m_gate__m_orig_deriv = (-var_chaste_interface__sodium_current_m_gate__m + var_sodium_current_m_gate__m_infinity) / var_sodium_current_m_gate__tau_m; // 1 / second + const double d_dt_chaste_interface_var_sodium_current_m_gate__m = 0.001 * var_sodium_current_m_gate__m_orig_deriv; // 1 / millisecond + const double var_sodium_potassium_pump__K_m_K = 0.621; // millimolar + const double var_sodium_potassium_pump__K_m_Na = 5.46; // millimolar + const double var_sodium_potassium_pump__i_NaK_max = 0.21920000000000001; // nanoA + const double var_sodium_potassium_pump__i_NaK = 1.6000000000000001 * pow(var_chaste_interface__cleft_space_equations__K_c, 2) * pow(var_chaste_interface__intracellular_concentrations_and_buffer_equations__Na_i, 3) * var_sodium_potassium_pump__i_NaK_max / ((1.5 + exp(-1.5 - 0.025000000000000001 * var_chaste_interface__membrane__V)) * pow((var_chaste_interface__cleft_space_equations__K_c + var_sodium_potassium_pump__K_m_K), 2) * pow((var_chaste_interface__intracellular_concentrations_and_buffer_equations__Na_i + var_sodium_potassium_pump__K_m_Na), 3)); // nanoA + const double var_cleft_space_equations__K_c_orig_deriv = (-var_chaste_interface__cleft_space_equations__K_c + var_cleft_space_equations__K_b) / var_cleft_space_equations__tau_p + (-2 * var_sodium_potassium_pump__i_NaK + var_delayed_rectifying_potassium_current__i_K + var_hyperpolarisation_activated_current__i_f_K + var_linear_background_current__i_B_K) / (var_cleft_space_equations__V_c * var_membrane__F); // millimolar / second + const double d_dt_chaste_interface_var_cleft_space_equations__K_c = 0.001 * var_cleft_space_equations__K_c_orig_deriv; // millimolar / millisecond + const double var_cleft_space_equations__Na_c_orig_deriv = (-var_chaste_interface__cleft_space_equations__Na_c + var_cleft_space_equations__Na_b) / var_cleft_space_equations__tau_p + (3 * var_sodium_calcium_pump__i_NaCa + 3 * var_sodium_potassium_pump__i_NaK + var_hyperpolarisation_activated_current__i_f_Na + var_linear_background_current__i_B_Na + var_sodium_current__i_Na) / (var_cleft_space_equations__V_c * var_membrane__F); // millimolar / second + const double d_dt_chaste_interface_var_cleft_space_equations__Na_c = 0.001 * var_cleft_space_equations__Na_c_orig_deriv; // millimolar / millisecond + const double var_intracellular_concentrations_and_buffer_equations__K_i_orig_deriv = (-var_delayed_rectifying_potassium_current__i_K - var_hyperpolarisation_activated_current__i_f_K - var_linear_background_current__i_B_K + 2 * var_sodium_potassium_pump__i_NaK) / (var_intracellular_concentrations_and_buffer_equations__V_i * var_membrane__F); // millimolar / second + const double d_dt_chaste_interface_var_intracellular_concentrations_and_buffer_equations__K_i = 0.001 * var_intracellular_concentrations_and_buffer_equations__K_i_orig_deriv; // millimolar / millisecond + const double var_intracellular_concentrations_and_buffer_equations__Na_i_orig_deriv = (-var_hyperpolarisation_activated_current__i_f_Na - var_linear_background_current__i_B_Na - var_sodium_current__i_Na - 3 * var_sodium_calcium_pump__i_NaCa - 3 * var_sodium_potassium_pump__i_NaK) / (var_intracellular_concentrations_and_buffer_equations__V_i * var_membrane__F); // millimolar / second + const double d_dt_chaste_interface_var_intracellular_concentrations_and_buffer_equations__Na_i = 0.001 * var_intracellular_concentrations_and_buffer_equations__Na_i_orig_deriv; // millimolar / millisecond + + mEvalF[1] = d_dt_chaste_interface_var_intracellular_concentrations_and_buffer_equations__Ca_i; + mPartialF[1] = EvaluatePartialDerivative1(var_chaste_interface__environment__time_converted, rY, delta); + mEvalF[2] = d_dt_chaste_interface_var_sodium_current_m_gate__m; + mPartialF[2] = EvaluatePartialDerivative2(var_chaste_interface__environment__time_converted, rY, delta); + mEvalF[3] = d_dt_chaste_interface_var_sodium_current_h_gate__h1; + mPartialF[3] = EvaluatePartialDerivative3(var_chaste_interface__environment__time_converted, rY, delta); + mEvalF[4] = d_dt_chaste_interface_var_sodium_current_h_gate__h2; + mPartialF[4] = EvaluatePartialDerivative4(var_chaste_interface__environment__time_converted, rY, delta); + mEvalF[5] = d_dt_chaste_interface_var_L_type_Ca_channel_d_gate__d_L; + mPartialF[5] = EvaluatePartialDerivative5(var_chaste_interface__environment__time_converted, rY, delta); + mEvalF[6] = d_dt_chaste_interface_var_L_type_Ca_channel_f_gate__f_L; + mPartialF[6] = EvaluatePartialDerivative6(var_chaste_interface__environment__time_converted, rY, delta); + mEvalF[7] = d_dt_chaste_interface_var_T_type_Ca_channel_d_gate__d_T; + mPartialF[7] = EvaluatePartialDerivative7(var_chaste_interface__environment__time_converted, rY, delta); + mEvalF[8] = d_dt_chaste_interface_var_T_type_Ca_channel_f_gate__f_T; + mPartialF[8] = EvaluatePartialDerivative8(var_chaste_interface__environment__time_converted, rY, delta); + mEvalF[9] = d_dt_chaste_interface_var_delayed_rectifying_potassium_current_P_a_gate__P_a; + mPartialF[9] = EvaluatePartialDerivative9(var_chaste_interface__environment__time_converted, rY, delta); + mEvalF[10] = d_dt_chaste_interface_var_delayed_rectifying_potassium_current_P_i_gate__P_i; + mPartialF[10] = EvaluatePartialDerivative10(var_chaste_interface__environment__time_converted, rY, delta); + mEvalF[11] = d_dt_chaste_interface_var_hyperpolarisation_activated_current_y_gate__y; + mPartialF[11] = EvaluatePartialDerivative11(var_chaste_interface__environment__time_converted, rY, delta); + mEvalF[12] = d_dt_chaste_interface_var_intracellular_concentrations_and_buffer_equations__Na_i; + mPartialF[12] = EvaluatePartialDerivative12(var_chaste_interface__environment__time_converted, rY, delta); + mEvalF[13] = d_dt_chaste_interface_var_intracellular_concentrations_and_buffer_equations__K_i; + mPartialF[13] = EvaluatePartialDerivative13(var_chaste_interface__environment__time_converted, rY, delta); + mEvalF[14] = d_dt_chaste_interface_var_intracellular_concentrations_and_buffer_equations__Ca_Calmod; + mPartialF[14] = EvaluatePartialDerivative14(var_chaste_interface__environment__time_converted, rY, delta); + mEvalF[15] = d_dt_chaste_interface_var_intracellular_concentrations_and_buffer_equations__Ca_Trop; + mPartialF[15] = EvaluatePartialDerivative15(var_chaste_interface__environment__time_converted, rY, delta); + mEvalF[16] = d_dt_chaste_interface_var_intracellular_concentrations_and_buffer_equations__Ca_Mg_Trop; + mPartialF[16] = EvaluatePartialDerivative16(var_chaste_interface__environment__time_converted, rY, delta); + mEvalF[17] = d_dt_chaste_interface_var_intracellular_concentrations_and_buffer_equations__Mg_Mg_Trop; + mPartialF[17] = EvaluatePartialDerivative17(var_chaste_interface__environment__time_converted, rY, delta); + mEvalF[18] = d_dt_chaste_interface_var_cleft_space_equations__Na_c; + mPartialF[18] = EvaluatePartialDerivative18(var_chaste_interface__environment__time_converted, rY, delta); + mEvalF[19] = d_dt_chaste_interface_var_cleft_space_equations__Ca_c; + mPartialF[19] = EvaluatePartialDerivative19(var_chaste_interface__environment__time_converted, rY, delta); + mEvalF[20] = d_dt_chaste_interface_var_cleft_space_equations__K_c; + mPartialF[20] = EvaluatePartialDerivative20(var_chaste_interface__environment__time_converted, rY, delta); + mEvalF[21] = d_dt_chaste_interface_var_SR_Ca_uptake_and_release__Ca_up; + mPartialF[21] = EvaluatePartialDerivative21(var_chaste_interface__environment__time_converted, rY, delta); + mEvalF[22] = d_dt_chaste_interface_var_SR_Ca_uptake_and_release__Ca_rel; + mPartialF[22] = EvaluatePartialDerivative22(var_chaste_interface__environment__time_converted, rY, delta); + mEvalF[23] = d_dt_chaste_interface_var_SR_Ca_uptake_and_release__Ca_Calse; + mPartialF[23] = EvaluatePartialDerivative23(var_chaste_interface__environment__time_converted, rY, delta); + mEvalF[24] = d_dt_chaste_interface_var_SR_Ca_uptake_and_release__F1; + mPartialF[24] = EvaluatePartialDerivative24(var_chaste_interface__environment__time_converted, rY, delta); + mEvalF[25] = d_dt_chaste_interface_var_SR_Ca_uptake_and_release__F2; + mPartialF[25] = EvaluatePartialDerivative25(var_chaste_interface__environment__time_converted, rY, delta); + mEvalF[26] = d_dt_chaste_interface_var_SR_Ca_uptake_and_release__F3; + mPartialF[26] = EvaluatePartialDerivative26(var_chaste_interface__environment__time_converted, rY, delta); + + { + if (fabs(mPartialF[1]) < delta){ + rY[1] += mDt*d_dt_chaste_interface_var_intracellular_concentrations_and_buffer_equations__Ca_i; + } + else + { + rY[1] += (d_dt_chaste_interface_var_intracellular_concentrations_and_buffer_equations__Ca_i/mPartialF[1])*(exp(mPartialF[1]*mDt)-1.0); + } + + } + { + if (fabs(mPartialF[2]) < delta){ + rY[2] += mDt*d_dt_chaste_interface_var_sodium_current_m_gate__m; + } + else + { + rY[2] += (d_dt_chaste_interface_var_sodium_current_m_gate__m/mPartialF[2])*(exp(mPartialF[2]*mDt)-1.0); + } + + } + { + if (fabs(mPartialF[3]) < delta){ + rY[3] += mDt*d_dt_chaste_interface_var_sodium_current_h_gate__h1; + } + else + { + rY[3] += (d_dt_chaste_interface_var_sodium_current_h_gate__h1/mPartialF[3])*(exp(mPartialF[3]*mDt)-1.0); + } + + } + { + if (fabs(mPartialF[4]) < delta){ + rY[4] += mDt*d_dt_chaste_interface_var_sodium_current_h_gate__h2; + } + else + { + rY[4] += (d_dt_chaste_interface_var_sodium_current_h_gate__h2/mPartialF[4])*(exp(mPartialF[4]*mDt)-1.0); + } + + } + { + if (fabs(mPartialF[5]) < delta){ + rY[5] += mDt*d_dt_chaste_interface_var_L_type_Ca_channel_d_gate__d_L; + } + else + { + rY[5] += (d_dt_chaste_interface_var_L_type_Ca_channel_d_gate__d_L/mPartialF[5])*(exp(mPartialF[5]*mDt)-1.0); + } + + } + { + if (fabs(mPartialF[6]) < delta){ + rY[6] += mDt*d_dt_chaste_interface_var_L_type_Ca_channel_f_gate__f_L; + } + else + { + rY[6] += (d_dt_chaste_interface_var_L_type_Ca_channel_f_gate__f_L/mPartialF[6])*(exp(mPartialF[6]*mDt)-1.0); + } + + } + { + if (fabs(mPartialF[7]) < delta){ + rY[7] += mDt*d_dt_chaste_interface_var_T_type_Ca_channel_d_gate__d_T; + } + else + { + rY[7] += (d_dt_chaste_interface_var_T_type_Ca_channel_d_gate__d_T/mPartialF[7])*(exp(mPartialF[7]*mDt)-1.0); + } + + } + { + if (fabs(mPartialF[8]) < delta){ + rY[8] += mDt*d_dt_chaste_interface_var_T_type_Ca_channel_f_gate__f_T; + } + else + { + rY[8] += (d_dt_chaste_interface_var_T_type_Ca_channel_f_gate__f_T/mPartialF[8])*(exp(mPartialF[8]*mDt)-1.0); + } + + } + { + if (fabs(mPartialF[9]) < delta){ + rY[9] += mDt*d_dt_chaste_interface_var_delayed_rectifying_potassium_current_P_a_gate__P_a; + } + else + { + rY[9] += (d_dt_chaste_interface_var_delayed_rectifying_potassium_current_P_a_gate__P_a/mPartialF[9])*(exp(mPartialF[9]*mDt)-1.0); + } + + } + { + if (fabs(mPartialF[10]) < delta){ + rY[10] += mDt*d_dt_chaste_interface_var_delayed_rectifying_potassium_current_P_i_gate__P_i; + } + else + { + rY[10] += (d_dt_chaste_interface_var_delayed_rectifying_potassium_current_P_i_gate__P_i/mPartialF[10])*(exp(mPartialF[10]*mDt)-1.0); + } + + } + { + if (fabs(mPartialF[11]) < delta){ + rY[11] += mDt*d_dt_chaste_interface_var_hyperpolarisation_activated_current_y_gate__y; + } + else + { + rY[11] += (d_dt_chaste_interface_var_hyperpolarisation_activated_current_y_gate__y/mPartialF[11])*(exp(mPartialF[11]*mDt)-1.0); + } + + } + { + if (fabs(mPartialF[12]) < delta){ + rY[12] += mDt*d_dt_chaste_interface_var_intracellular_concentrations_and_buffer_equations__Na_i; + } + else + { + rY[12] += (d_dt_chaste_interface_var_intracellular_concentrations_and_buffer_equations__Na_i/mPartialF[12])*(exp(mPartialF[12]*mDt)-1.0); + } + + } + { + if (fabs(mPartialF[13]) < delta){ + rY[13] += mDt*d_dt_chaste_interface_var_intracellular_concentrations_and_buffer_equations__K_i; + } + else + { + rY[13] += (d_dt_chaste_interface_var_intracellular_concentrations_and_buffer_equations__K_i/mPartialF[13])*(exp(mPartialF[13]*mDt)-1.0); + } + + } + { + if (fabs(mPartialF[14]) < delta){ + rY[14] += mDt*d_dt_chaste_interface_var_intracellular_concentrations_and_buffer_equations__Ca_Calmod; + } + else + { + rY[14] += (d_dt_chaste_interface_var_intracellular_concentrations_and_buffer_equations__Ca_Calmod/mPartialF[14])*(exp(mPartialF[14]*mDt)-1.0); + } + + } + { + if (fabs(mPartialF[15]) < delta){ + rY[15] += mDt*d_dt_chaste_interface_var_intracellular_concentrations_and_buffer_equations__Ca_Trop; + } + else + { + rY[15] += (d_dt_chaste_interface_var_intracellular_concentrations_and_buffer_equations__Ca_Trop/mPartialF[15])*(exp(mPartialF[15]*mDt)-1.0); + } + + } + { + if (fabs(mPartialF[16]) < delta){ + rY[16] += mDt*d_dt_chaste_interface_var_intracellular_concentrations_and_buffer_equations__Ca_Mg_Trop; + } + else + { + rY[16] += (d_dt_chaste_interface_var_intracellular_concentrations_and_buffer_equations__Ca_Mg_Trop/mPartialF[16])*(exp(mPartialF[16]*mDt)-1.0); + } + + } + { + if (fabs(mPartialF[17]) < delta){ + rY[17] += mDt*d_dt_chaste_interface_var_intracellular_concentrations_and_buffer_equations__Mg_Mg_Trop; + } + else + { + rY[17] += (d_dt_chaste_interface_var_intracellular_concentrations_and_buffer_equations__Mg_Mg_Trop/mPartialF[17])*(exp(mPartialF[17]*mDt)-1.0); + } + + } + { + if (fabs(mPartialF[18]) < delta){ + rY[18] += mDt*d_dt_chaste_interface_var_cleft_space_equations__Na_c; + } + else + { + rY[18] += (d_dt_chaste_interface_var_cleft_space_equations__Na_c/mPartialF[18])*(exp(mPartialF[18]*mDt)-1.0); + } + + } + { + if (fabs(mPartialF[19]) < delta){ + rY[19] += mDt*d_dt_chaste_interface_var_cleft_space_equations__Ca_c; + } + else + { + rY[19] += (d_dt_chaste_interface_var_cleft_space_equations__Ca_c/mPartialF[19])*(exp(mPartialF[19]*mDt)-1.0); + } + + } + { + if (fabs(mPartialF[20]) < delta){ + rY[20] += mDt*d_dt_chaste_interface_var_cleft_space_equations__K_c; + } + else + { + rY[20] += (d_dt_chaste_interface_var_cleft_space_equations__K_c/mPartialF[20])*(exp(mPartialF[20]*mDt)-1.0); + } + + } + { + if (fabs(mPartialF[21]) < delta){ + rY[21] += mDt*d_dt_chaste_interface_var_SR_Ca_uptake_and_release__Ca_up; + } + else + { + rY[21] += (d_dt_chaste_interface_var_SR_Ca_uptake_and_release__Ca_up/mPartialF[21])*(exp(mPartialF[21]*mDt)-1.0); + } + + } + { + if (fabs(mPartialF[22]) < delta){ + rY[22] += mDt*d_dt_chaste_interface_var_SR_Ca_uptake_and_release__Ca_rel; + } + else + { + rY[22] += (d_dt_chaste_interface_var_SR_Ca_uptake_and_release__Ca_rel/mPartialF[22])*(exp(mPartialF[22]*mDt)-1.0); + } + + } + { + if (fabs(mPartialF[23]) < delta){ + rY[23] += mDt*d_dt_chaste_interface_var_SR_Ca_uptake_and_release__Ca_Calse; + } + else + { + rY[23] += (d_dt_chaste_interface_var_SR_Ca_uptake_and_release__Ca_Calse/mPartialF[23])*(exp(mPartialF[23]*mDt)-1.0); + } + + } + { + if (fabs(mPartialF[24]) < delta){ + rY[24] += mDt*d_dt_chaste_interface_var_SR_Ca_uptake_and_release__F1; + } + else + { + rY[24] += (d_dt_chaste_interface_var_SR_Ca_uptake_and_release__F1/mPartialF[24])*(exp(mPartialF[24]*mDt)-1.0); + } + + } + { + if (fabs(mPartialF[25]) < delta){ + rY[25] += mDt*d_dt_chaste_interface_var_SR_Ca_uptake_and_release__F2; + } + else + { + rY[25] += (d_dt_chaste_interface_var_SR_Ca_uptake_and_release__F2/mPartialF[25])*(exp(mPartialF[25]*mDt)-1.0); + } + + } + { + if (fabs(mPartialF[26]) < delta){ + rY[26] += mDt*d_dt_chaste_interface_var_SR_Ca_uptake_and_release__F3; + } + else + { + rY[26] += (d_dt_chaste_interface_var_SR_Ca_uptake_and_release__F3/mPartialF[26])*(exp(mPartialF[26]*mDt)-1.0); + } + + } + + } + + + double Dynamicdemir_model_1994FromCellMLGRL1::EvaluateYDerivative0(double var_chaste_interface__environment__time_converted, std::vector& rY) + { + double d_dt_chaste_interface_var_membrane__V; + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -49.54105 + double var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_i = rY[1]; + // Units: millimolar; Initial value: 0.0003787018 + double var_chaste_interface__sodium_current_m_gate__m = rY[2]; + // Units: dimensionless; Initial value: 0.250113 + double var_chaste_interface__sodium_current_h_gate__h1 = rY[3]; + // Units: dimensionless; Initial value: 0.001386897 + double var_chaste_interface__sodium_current_h_gate__h2 = rY[4]; + // Units: dimensionless; Initial value: 0.002065463 + double var_chaste_interface__L_type_Ca_channel_d_gate__d_L = rY[5]; + // Units: dimensionless; Initial value: 0.002572773 + double var_chaste_interface__L_type_Ca_channel_f_gate__f_L = rY[6]; + // Units: dimensionless; Initial value: 0.98651 + double var_chaste_interface__T_type_Ca_channel_d_gate__d_T = rY[7]; + // Units: dimensionless; Initial value: 0.02012114 + double var_chaste_interface__T_type_Ca_channel_f_gate__f_T = rY[8]; + // Units: dimensionless; Initial value: 0.1945111 + double var_chaste_interface__delayed_rectifying_potassium_current_P_a_gate__P_a = rY[9]; + // Units: dimensionless; Initial value: 0.02302278 + double var_chaste_interface__delayed_rectifying_potassium_current_P_i_gate__P_i = rY[10]; + // Units: dimensionless; Initial value: 0.3777728 + double var_chaste_interface__hyperpolarisation_activated_current_y_gate__y = rY[11]; + // Units: dimensionless; Initial value: 0.09227776 + double var_chaste_interface__intracellular_concentrations_and_buffer_equations__Na_i = rY[12]; + // Units: millimolar; Initial value: 9.701621 + double var_chaste_interface__intracellular_concentrations_and_buffer_equations__K_i = rY[13]; + // Units: millimolar; Initial value: 140.7347 + double var_chaste_interface__cleft_space_equations__Na_c = rY[18]; + // Units: millimolar; Initial value: 139.9988 + double var_chaste_interface__cleft_space_equations__Ca_c = rY[19]; + // Units: millimolar; Initial value: 2.00474 + double var_chaste_interface__cleft_space_equations__K_c = rY[20]; + // Units: millimolar; Initial value: 5.389014 + + + // Mathematics + const double var_L_type_Ca_channel__E_Ca_L = 46.399999999999999; // millivolt + const double var_T_type_Ca_channel__E_Ca_T = 45; // millivolt + const double var_T_type_Ca_channel__g_Ca_T = 0.02521; // microS + const double var_calcium_pump_current__i_Ca_P_max = 0.02869; // nanoA + const double var_cleft_space_equations__K_b = 5.4000000000000004; // millimolar + const double var_delayed_rectifying_potassium_current__g_K = pow(var_cleft_space_equations__K_b, 0.58999999999999997) * mParameters[2]; // microS + const double var_calcium_pump_current__i_Ca_P = var_calcium_pump_current__i_Ca_P_max * var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_i / (0.00040000000000000002 + var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_i); // nanoA + const double var_linear_background_current__g_B_Ca = 3.6399999999999997e-5; // microS + const double var_linear_background_current__g_B_K = 6.9400000000000006e-5; // microS + const double var_linear_background_current__g_B_Na = 0.00016000000000000001; // microS + const double var_membrane__F = 96485.341499999995; // coulomb_per_mole + const double var_membrane__R = 8314.4719999999998; // joule_per_kilomole_kelvin + const double var_membrane__T = 310; // kelvin + const double var_L_type_Ca_channel_d_gate__d_L_infinity = 1 / (1 + exp(-2.3500000000000001 - 0.16666666666666666 * var_chaste_interface__membrane__V)); // dimensionless + const double var_L_type_Ca_channel__i_Ca_L = (-var_L_type_Ca_channel__E_Ca_L + var_chaste_interface__membrane__V) * (0.095000000000000001 * var_L_type_Ca_channel_d_gate__d_L_infinity + var_chaste_interface__L_type_Ca_channel_d_gate__d_L * var_chaste_interface__L_type_Ca_channel_f_gate__f_L) * mParameters[0]; // nanoA + const double var_T_type_Ca_channel__i_Ca_T = (-var_T_type_Ca_channel__E_Ca_T + var_chaste_interface__membrane__V) * var_T_type_Ca_channel__g_Ca_T * var_chaste_interface__T_type_Ca_channel_d_gate__d_T * var_chaste_interface__T_type_Ca_channel_f_gate__f_T; // nanoA + const double var_hyperpolarisation_activated_current__i_f_K = pow(var_chaste_interface__hyperpolarisation_activated_current_y_gate__y, 2) * (85 + var_chaste_interface__membrane__V) * mParameters[4]; // nanoA + const double var_hyperpolarisation_activated_current__i_f_Na = pow(var_chaste_interface__hyperpolarisation_activated_current_y_gate__y, 2) * (-75 + var_chaste_interface__membrane__V) * mParameters[5]; // nanoA + const double var_hyperpolarisation_activated_current__i_f = var_hyperpolarisation_activated_current__i_f_K + var_hyperpolarisation_activated_current__i_f_Na; // nanoA + const double var_reversal_potentials__E_Ca = 0.5 * var_membrane__R * var_membrane__T * log(var_chaste_interface__cleft_space_equations__Ca_c / var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_i) / var_membrane__F; // millivolt + const double var_linear_background_current__i_B_Ca = (-var_reversal_potentials__E_Ca + var_chaste_interface__membrane__V) * var_linear_background_current__g_B_Ca; // nanoA + const double var_reversal_potentials__E_K = var_membrane__R * var_membrane__T * log(var_chaste_interface__cleft_space_equations__K_c / var_chaste_interface__intracellular_concentrations_and_buffer_equations__K_i) / var_membrane__F; // millivolt + const double var_delayed_rectifying_potassium_current__i_K = (-var_reversal_potentials__E_K + var_chaste_interface__membrane__V) * var_delayed_rectifying_potassium_current__g_K * var_chaste_interface__delayed_rectifying_potassium_current_P_a_gate__P_a * var_chaste_interface__delayed_rectifying_potassium_current_P_i_gate__P_i; // nanoA + const double var_linear_background_current__i_B_K = (-var_reversal_potentials__E_K + var_chaste_interface__membrane__V) * var_linear_background_current__g_B_K; // nanoA + const double var_reversal_potentials__E_Na = var_membrane__R * var_membrane__T * log(var_chaste_interface__cleft_space_equations__Na_c / var_chaste_interface__intracellular_concentrations_and_buffer_equations__Na_i) / var_membrane__F; // millivolt + const double var_linear_background_current__i_B_Na = (-var_reversal_potentials__E_Na + var_chaste_interface__membrane__V) * var_linear_background_current__g_B_Na; // nanoA + const double var_linear_background_current__i_B = var_linear_background_current__i_B_Ca + var_linear_background_current__i_B_K + var_linear_background_current__i_B_Na; // nanoA + const double var_sodium_calcium_pump__K_NaCa = 1.2480000000000001e-5; // nanoA + const double var_sodium_calcium_pump__d_NaCa = 0.0001; // dimensionless + const double var_sodium_calcium_pump__gamma = 0.5; // dimensionless + const double var_sodium_calcium_pump__i_NaCa = (pow(var_chaste_interface__intracellular_concentrations_and_buffer_equations__Na_i, 3) * var_chaste_interface__cleft_space_equations__Ca_c * exp(0.037429999999999998 * var_chaste_interface__membrane__V * var_sodium_calcium_pump__gamma) - pow(var_chaste_interface__cleft_space_equations__Na_c, 3) * var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_i * exp(0.037429999999999998 * (-1 + var_sodium_calcium_pump__gamma) * var_chaste_interface__membrane__V)) * var_sodium_calcium_pump__K_NaCa / (1 + (pow(var_chaste_interface__cleft_space_equations__Na_c, 3) * var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_i + pow(var_chaste_interface__intracellular_concentrations_and_buffer_equations__Na_i, 3) * var_chaste_interface__cleft_space_equations__Ca_c) * var_sodium_calcium_pump__d_NaCa); // nanoA + const double var_sodium_current__i_Na = pow(var_membrane__F, 2) * pow(var_chaste_interface__sodium_current_m_gate__m, 3) * (-1 + exp((-var_reversal_potentials__E_Na + var_chaste_interface__membrane__V) * var_membrane__F / (var_membrane__R * var_membrane__T))) * var_chaste_interface__cleft_space_equations__Na_c * var_chaste_interface__membrane__V * mParameters[3] * var_chaste_interface__sodium_current_h_gate__h1 * var_chaste_interface__sodium_current_h_gate__h2 / ((-1 + exp(var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * var_membrane__R * var_membrane__T); // nanoA + const double var_sodium_potassium_pump__K_m_K = 0.621; // millimolar + const double var_sodium_potassium_pump__K_m_Na = 5.46; // millimolar + const double var_sodium_potassium_pump__i_NaK_max = 0.21920000000000001; // nanoA + const double var_sodium_potassium_pump__i_NaK = 1.6000000000000001 * pow(var_chaste_interface__cleft_space_equations__K_c, 2) * pow(var_chaste_interface__intracellular_concentrations_and_buffer_equations__Na_i, 3) * var_sodium_potassium_pump__i_NaK_max / ((1.5 + exp(-1.5 - 0.025000000000000001 * var_chaste_interface__membrane__V)) * pow((var_chaste_interface__cleft_space_equations__K_c + var_sodium_potassium_pump__K_m_K), 2) * pow((var_chaste_interface__intracellular_concentrations_and_buffer_equations__Na_i + var_sodium_potassium_pump__K_m_Na), 3)); // nanoA + const double var_membrane__V_orig_deriv = (-var_L_type_Ca_channel__i_Ca_L - var_T_type_Ca_channel__i_Ca_T - var_calcium_pump_current__i_Ca_P - var_delayed_rectifying_potassium_current__i_K - var_hyperpolarisation_activated_current__i_f - var_linear_background_current__i_B - var_sodium_calcium_pump__i_NaCa - var_sodium_current__i_Na - var_sodium_potassium_pump__i_NaK) / mParameters[1]; // millivolt / second + d_dt_chaste_interface_var_membrane__V = 0.001 * var_membrane__V_orig_deriv; // millivolt / millisecond + + return d_dt_chaste_interface_var_membrane__V; + } + + double Dynamicdemir_model_1994FromCellMLGRL1::EvaluatePartialDerivative0(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -49.54105 + double var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_i = rY[1]; + // Units: millimolar; Initial value: 0.0003787018 + double var_chaste_interface__sodium_current_m_gate__m = rY[2]; + // Units: dimensionless; Initial value: 0.250113 + double var_chaste_interface__sodium_current_h_gate__h1 = rY[3]; + // Units: dimensionless; Initial value: 0.001386897 + double var_chaste_interface__sodium_current_h_gate__h2 = rY[4]; + // Units: dimensionless; Initial value: 0.002065463 + double var_chaste_interface__L_type_Ca_channel_d_gate__d_L = rY[5]; + // Units: dimensionless; Initial value: 0.002572773 + double var_chaste_interface__L_type_Ca_channel_f_gate__f_L = rY[6]; + // Units: dimensionless; Initial value: 0.98651 + double var_chaste_interface__T_type_Ca_channel_d_gate__d_T = rY[7]; + // Units: dimensionless; Initial value: 0.02012114 + double var_chaste_interface__T_type_Ca_channel_f_gate__f_T = rY[8]; + // Units: dimensionless; Initial value: 0.1945111 + double var_chaste_interface__delayed_rectifying_potassium_current_P_a_gate__P_a = rY[9]; + // Units: dimensionless; Initial value: 0.02302278 + double var_chaste_interface__delayed_rectifying_potassium_current_P_i_gate__P_i = rY[10]; + // Units: dimensionless; Initial value: 0.3777728 + double var_chaste_interface__hyperpolarisation_activated_current_y_gate__y = rY[11]; + // Units: dimensionless; Initial value: 0.09227776 + double var_chaste_interface__intracellular_concentrations_and_buffer_equations__Na_i = rY[12]; + // Units: millimolar; Initial value: 9.701621 + double var_chaste_interface__cleft_space_equations__Na_c = rY[18]; + // Units: millimolar; Initial value: 139.9988 + double var_chaste_interface__cleft_space_equations__Ca_c = rY[19]; + // Units: millimolar; Initial value: 2.00474 + double var_chaste_interface__cleft_space_equations__K_c = rY[20]; + // Units: millimolar; Initial value: 5.389014 + + + const double var_x0 = pow(var_chaste_interface__hyperpolarisation_activated_current_y_gate__y, 2); + const double var_x1 = var_x0 * mParameters[4]; + const double var_x2 = var_x0 * mParameters[5]; + const double var_x3 = 0.16666666666666666 * var_chaste_interface__membrane__V; + const double var_x4 = exp(-2.3500000000000001 - var_x3); + const double var_x5 = 1 + var_x4; + const double var_x6 = 1 / var_x5; + const double var_x7 = var_chaste_interface__L_type_Ca_channel_d_gate__d_L * var_chaste_interface__L_type_Ca_channel_f_gate__f_L; + const double var_x8 = var_chaste_interface__T_type_Ca_channel_d_gate__d_T * var_chaste_interface__T_type_Ca_channel_f_gate__f_T; + const double var_x9 = pow(var_chaste_interface__cleft_space_equations__Na_c, 3); + const double var_x10 = var_x9 * var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_i; + const double var_x11 = pow(var_chaste_interface__intracellular_concentrations_and_buffer_equations__Na_i, 3); + const double var_x12 = var_x11 * var_chaste_interface__cleft_space_equations__Ca_c; + const double var_x13 = 1 + 0.0001 * var_x10 + 0.0001 * var_x12; + const double var_x14 = 1 / var_x13; + const double var_x15 = 0.018714999999999999 * var_chaste_interface__membrane__V; + const double var_x16 = exp(-var_x15); + const double var_x17 = var_x10 * var_x16; + const double var_x18 = exp(var_x15); + const double var_x19 = var_x12 * var_x18; + const double var_x20 = var_x14 * (0.018714999999999999 * var_x17 + 0.018714999999999999 * var_x19); + const double var_x21 = mParameters[2] * var_chaste_interface__delayed_rectifying_potassium_current_P_i_gate__P_i; + const double var_x22 = var_x21 * var_chaste_interface__delayed_rectifying_potassium_current_P_a_gate__P_a; + const double var_x23 = pow(var_x5, (-2)); + const double var_x24 = 46.399999999999999 - var_chaste_interface__membrane__V; + const double var_x25 = exp(-1.5 - 0.025000000000000001 * var_chaste_interface__membrane__V); + const double var_x26 = 0.621 + var_chaste_interface__cleft_space_equations__K_c; + const double var_x27 = pow(var_x26, (-2)); + const double var_x28 = pow(var_chaste_interface__cleft_space_equations__K_c, 2); + const double var_x29 = 1 + 0.18315018315018314 * var_chaste_interface__intracellular_concentrations_and_buffer_equations__Na_i; + const double var_x30 = pow(var_x29, (-3)); + const double var_x31 = pow((1 + 0.66666666666666663 * var_x25), (-2)); + const double var_x32 = var_x11 * var_x25 * var_x27 * var_x28 * var_x30 * var_x31; + const double var_x33 = 0.037433890822745473 * var_chaste_interface__membrane__V; + const double var_x34 = 1 / var_chaste_interface__intracellular_concentrations_and_buffer_equations__Na_i; + const double var_x35 = var_x34 * var_chaste_interface__cleft_space_equations__Na_c; + const double var_x36 = exp(var_x33 - 1 * log(var_x35)); + const double var_x37 = -1 + var_x36; + const double var_x38 = var_x37 * var_chaste_interface__cleft_space_equations__Na_c; + const double var_x39 = exp(var_x33); + const double var_x40 = -1 + var_x39; + const double var_x41 = 1 / var_x40; + const double var_x42 = pow(var_chaste_interface__sodium_current_m_gate__m, 3); + const double var_x43 = var_x41 * var_x42 * mParameters[3] * var_chaste_interface__sodium_current_h_gate__h1 * var_chaste_interface__sodium_current_h_gate__h2; + const double var_x44 = 3611.8217397063127 * var_x43; + const double var_x45 = var_x43 * var_chaste_interface__membrane__V; + const double var_x46 = var_x36 * var_x45; + const double var_x47 = var_x46 * var_chaste_interface__cleft_space_equations__Na_c; + const double var_x48 = pow(var_x40, (-2)); + const double var_x49 = 1 / mParameters[1]; + const double var_x50 = 0.001 * var_x49; + + partialF = var_x50 * (-0.00026580000000000001 - var_x1 - var_x2 - 0.02521 * var_x8 - 1.2480000000000001e-5 * var_x20 - 135.20454067538472 * var_x47 - 2.7046577588354044 * var_x22 - 2.3940879178437715e-5 * var_x32 + (-var_x7 - 0.095000000000000001 * var_x6) * mParameters[0] - var_x38 * var_x44 + 0.015833333333333335 * var_x23 * var_x24 * var_x4 * mParameters[0] + 135.20454067538472 * var_x37 * var_x39 * var_x42 * var_x48 * var_chaste_interface__cleft_space_equations__Na_c * var_chaste_interface__membrane__V * mParameters[3] * var_chaste_interface__sodium_current_h_gate__h1 * var_chaste_interface__sodium_current_h_gate__h2); + } + else + { + const double y_save = rY[0]; + rY[0] += delta; + const double temp = EvaluateYDerivative0(var_chaste_interface__environment__time_converted, rY); + partialF = (temp-mEvalF[0])/delta; + rY[0] = y_save; + } + return partialF; + } + double Dynamicdemir_model_1994FromCellMLGRL1::EvaluateYDerivative1(double var_chaste_interface__environment__time_converted, std::vector& rY) + { + + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -49.54105 + double var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_i = rY[1]; + // Units: millimolar; Initial value: 0.0003787018 + double var_chaste_interface__L_type_Ca_channel_d_gate__d_L = rY[5]; + // Units: dimensionless; Initial value: 0.002572773 + double var_chaste_interface__L_type_Ca_channel_f_gate__f_L = rY[6]; + // Units: dimensionless; Initial value: 0.98651 + double var_chaste_interface__T_type_Ca_channel_d_gate__d_T = rY[7]; + // Units: dimensionless; Initial value: 0.02012114 + double var_chaste_interface__T_type_Ca_channel_f_gate__f_T = rY[8]; + // Units: dimensionless; Initial value: 0.1945111 + double var_chaste_interface__intracellular_concentrations_and_buffer_equations__Na_i = rY[12]; + // Units: millimolar; Initial value: 9.701621 + double var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_Calmod = rY[14]; + // Units: dimensionless; Initial value: 0.1411678 + double var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_Trop = rY[15]; + // Units: dimensionless; Initial value: 0.07331396 + double var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_Mg_Trop = rY[16]; + // Units: dimensionless; Initial value: 0.7618549 + double var_chaste_interface__intracellular_concentrations_and_buffer_equations__Mg_Mg_Trop = rY[17]; + // Units: dimensionless; Initial value: 0.2097049 + double var_chaste_interface__cleft_space_equations__Na_c = rY[18]; + // Units: millimolar; Initial value: 139.9988 + double var_chaste_interface__cleft_space_equations__Ca_c = rY[19]; + // Units: millimolar; Initial value: 2.00474 + double var_chaste_interface__SR_Ca_uptake_and_release__Ca_up = rY[21]; + // Units: millimolar; Initial value: 16.95311 + double var_chaste_interface__SR_Ca_uptake_and_release__Ca_rel = rY[22]; + // Units: millimolar; Initial value: 16.85024 + double var_chaste_interface__SR_Ca_uptake_and_release__F2 = rY[25]; + // Units: dimensionless; Initial value: 0.0007594214 + + + // Mathematics + const double var_L_type_Ca_channel__E_Ca_L = 46.399999999999999; // millivolt + const double var_SR_Ca_uptake_and_release__alpha_rel = 0.5; // nanoA_per_millimolar + const double var_SR_Ca_uptake_and_release__alpha_up = 0.080000000000000002; // nanoA + const double var_SR_Ca_uptake_and_release__beta_up = 0.071999999999999995; // nanoA + const double var_SR_Ca_uptake_and_release__i_rel = pow(var_chaste_interface__SR_Ca_uptake_and_release__F2, 2) * var_chaste_interface__SR_Ca_uptake_and_release__Ca_rel * var_SR_Ca_uptake_and_release__alpha_rel / pow((0.25 + var_chaste_interface__SR_Ca_uptake_and_release__F2), 2); // nanoA + const double var_SR_Ca_uptake_and_release__k_SRCa = 22; // millimolar + const double var_SR_Ca_uptake_and_release__k_cyca = 5.0000000000000002e-5; // millimolar + const double var_SR_Ca_uptake_and_release__k_xcs = 0.90000000000000002; // dimensionless + const double var_SR_Ca_uptake_and_release__K1 = var_SR_Ca_uptake_and_release__k_cyca * var_SR_Ca_uptake_and_release__k_xcs / var_SR_Ca_uptake_and_release__k_SRCa; // dimensionless + const double var_T_type_Ca_channel__E_Ca_T = 45; // millivolt + const double var_T_type_Ca_channel__g_Ca_T = 0.02521; // microS + const double var_calcium_pump_current__i_Ca_P_max = 0.02869; // nanoA + const double var_cleft_space_equations__Vol = 3.4970000000000001e-6; // microLitre + const double var_SR_Ca_uptake_and_release__K2 = var_chaste_interface__SR_Ca_uptake_and_release__Ca_up * var_SR_Ca_uptake_and_release__K1 + var_SR_Ca_uptake_and_release__k_cyca * var_SR_Ca_uptake_and_release__k_xcs + var_SR_Ca_uptake_and_release__k_cyca + var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_i; // millimolar + const double var_SR_Ca_uptake_and_release__i_up = (var_SR_Ca_uptake_and_release__alpha_up * var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_i - var_chaste_interface__SR_Ca_uptake_and_release__Ca_up * var_SR_Ca_uptake_and_release__K1 * var_SR_Ca_uptake_and_release__beta_up) / var_SR_Ca_uptake_and_release__K2; // nanoA + const double var_calcium_pump_current__i_Ca_P = var_calcium_pump_current__i_Ca_P_max * var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_i / (0.00040000000000000002 + var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_i); // nanoA + const double var_intracellular_concentrations_and_buffer_equations__V_i = 0.46500000000000002 * var_cleft_space_equations__Vol; // microLitre + const double var_intracellular_concentrations_and_buffer_equations__phi_C = -307 * var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_Calmod + 129000 * (1 - var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_Calmod) * var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_i; // per_second + const double var_intracellular_concentrations_and_buffer_equations__F_C = 0.089999999999999997 * var_intracellular_concentrations_and_buffer_equations__phi_C; // millimolar_per_second + const double var_intracellular_concentrations_and_buffer_equations__phi_TC = -252 * var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_Trop + 50500 * (1 - var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_Trop) * var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_i; // per_second + const double var_intracellular_concentrations_and_buffer_equations__F_TC = 0.031 * var_intracellular_concentrations_and_buffer_equations__phi_TC; // millimolar_per_second + const double var_intracellular_concentrations_and_buffer_equations__phi_TMgC = -4.25 * var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_Mg_Trop + 129000 * (1 - var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_Mg_Trop - var_chaste_interface__intracellular_concentrations_and_buffer_equations__Mg_Mg_Trop) * var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_i; // per_second + const double var_intracellular_concentrations_and_buffer_equations__F_TMgC = 0.062 * var_intracellular_concentrations_and_buffer_equations__phi_TMgC; // millimolar_per_second + const double var_intracellular_concentrations_and_buffer_equations__phi_B = var_intracellular_concentrations_and_buffer_equations__F_C + var_intracellular_concentrations_and_buffer_equations__F_TC + var_intracellular_concentrations_and_buffer_equations__F_TMgC; // millimolar_per_second + const double var_linear_background_current__g_B_Ca = 3.6399999999999997e-5; // microS + const double var_membrane__F = 96485.341499999995; // coulomb_per_mole + const double var_membrane__R = 8314.4719999999998; // joule_per_kilomole_kelvin + const double var_membrane__T = 310; // kelvin + const double var_L_type_Ca_channel_d_gate__d_L_infinity = 1 / (1 + exp(-2.3500000000000001 - 0.16666666666666666 * var_chaste_interface__membrane__V)); // dimensionless + const double var_L_type_Ca_channel__i_Ca_L = (-var_L_type_Ca_channel__E_Ca_L + var_chaste_interface__membrane__V) * (0.095000000000000001 * var_L_type_Ca_channel_d_gate__d_L_infinity + var_chaste_interface__L_type_Ca_channel_d_gate__d_L * var_chaste_interface__L_type_Ca_channel_f_gate__f_L) * mParameters[0]; // nanoA + const double var_T_type_Ca_channel__i_Ca_T = (-var_T_type_Ca_channel__E_Ca_T + var_chaste_interface__membrane__V) * var_T_type_Ca_channel__g_Ca_T * var_chaste_interface__T_type_Ca_channel_d_gate__d_T * var_chaste_interface__T_type_Ca_channel_f_gate__f_T; // nanoA + const double var_reversal_potentials__E_Ca = 0.5 * var_membrane__R * var_membrane__T * log(var_chaste_interface__cleft_space_equations__Ca_c / var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_i) / var_membrane__F; // millivolt + const double var_linear_background_current__i_B_Ca = (-var_reversal_potentials__E_Ca + var_chaste_interface__membrane__V) * var_linear_background_current__g_B_Ca; // nanoA + const double var_sodium_calcium_pump__K_NaCa = 1.2480000000000001e-5; // nanoA + const double var_sodium_calcium_pump__d_NaCa = 0.0001; // dimensionless + const double var_sodium_calcium_pump__gamma = 0.5; // dimensionless + const double var_sodium_calcium_pump__i_NaCa = (pow(var_chaste_interface__intracellular_concentrations_and_buffer_equations__Na_i, 3) * var_chaste_interface__cleft_space_equations__Ca_c * exp(0.037429999999999998 * var_chaste_interface__membrane__V * var_sodium_calcium_pump__gamma) - pow(var_chaste_interface__cleft_space_equations__Na_c, 3) * var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_i * exp(0.037429999999999998 * (-1 + var_sodium_calcium_pump__gamma) * var_chaste_interface__membrane__V)) * var_sodium_calcium_pump__K_NaCa / (1 + (pow(var_chaste_interface__cleft_space_equations__Na_c, 3) * var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_i + pow(var_chaste_interface__intracellular_concentrations_and_buffer_equations__Na_i, 3) * var_chaste_interface__cleft_space_equations__Ca_c) * var_sodium_calcium_pump__d_NaCa); // nanoA + const double var_intracellular_concentrations_and_buffer_equations__Ca_i_orig_deriv = -var_intracellular_concentrations_and_buffer_equations__phi_B + 0.5 * (-var_L_type_Ca_channel__i_Ca_L - var_SR_Ca_uptake_and_release__i_up - var_T_type_Ca_channel__i_Ca_T - var_calcium_pump_current__i_Ca_P - var_linear_background_current__i_B_Ca + 2 * var_sodium_calcium_pump__i_NaCa + var_SR_Ca_uptake_and_release__i_rel) / (var_intracellular_concentrations_and_buffer_equations__V_i * var_membrane__F); // millimolar / second + const double d_dt_chaste_interface_var_intracellular_concentrations_and_buffer_equations__Ca_i = 0.001 * var_intracellular_concentrations_and_buffer_equations__Ca_i_orig_deriv; // millimolar / millisecond + + return d_dt_chaste_interface_var_intracellular_concentrations_and_buffer_equations__Ca_i; + } + + double Dynamicdemir_model_1994FromCellMLGRL1::EvaluatePartialDerivative1(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -49.54105 + double var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_i = rY[1]; + // Units: millimolar; Initial value: 0.0003787018 + double var_chaste_interface__intracellular_concentrations_and_buffer_equations__Na_i = rY[12]; + // Units: millimolar; Initial value: 9.701621 + double var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_Calmod = rY[14]; + // Units: dimensionless; Initial value: 0.1411678 + double var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_Trop = rY[15]; + // Units: dimensionless; Initial value: 0.07331396 + double var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_Mg_Trop = rY[16]; + // Units: dimensionless; Initial value: 0.7618549 + double var_chaste_interface__intracellular_concentrations_and_buffer_equations__Mg_Mg_Trop = rY[17]; + // Units: dimensionless; Initial value: 0.2097049 + double var_chaste_interface__cleft_space_equations__Na_c = rY[18]; + // Units: millimolar; Initial value: 139.9988 + double var_chaste_interface__cleft_space_equations__Ca_c = rY[19]; + // Units: millimolar; Initial value: 2.00474 + double var_chaste_interface__SR_Ca_uptake_and_release__Ca_up = rY[21]; + // Units: millimolar; Initial value: 16.95311 + + + const double var_x9 = pow(var_chaste_interface__cleft_space_equations__Na_c, 3); + const double var_x10 = var_x9 * var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_i; + const double var_x11 = pow(var_chaste_interface__intracellular_concentrations_and_buffer_equations__Na_i, 3); + const double var_x12 = var_x11 * var_chaste_interface__cleft_space_equations__Ca_c; + const double var_x13 = 1 + 0.0001 * var_x10 + 0.0001 * var_x12; + const double var_x14 = 1 / var_x13; + const double var_x15 = 0.018714999999999999 * var_chaste_interface__membrane__V; + const double var_x16 = exp(-var_x15); + const double var_x17 = var_x10 * var_x16; + const double var_x18 = exp(var_x15); + const double var_x19 = var_x12 * var_x18; + const double var_x51 = 0.00040000000000000002 + var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_i; + const double var_x52 = 1 / var_x51; + const double var_x53 = 1 / var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_i; + const double var_x54 = pow(var_x51, (-2)); + const double var_x57 = var_x16 * var_x9; + const double var_x58 = pow(var_x13, (-2)); + const double var_x59 = var_x19 - var_x17; + const double var_x60 = var_x58 * var_x59; + const double var_x104 = 9.5000000000000005e-5 + 2.0454545454545457e-6 * var_chaste_interface__SR_Ca_uptake_and_release__Ca_up + var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_i; + const double var_x105 = 1 / var_x104; + const double var_x106 = pow(var_x104, (-2)); + const double var_x107 = 0.080000000000000002 * var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_i - 1.4727272727272728e-7 * var_chaste_interface__SR_Ca_uptake_and_release__Ca_up; + const double var_x108 = 7.9543493648916639e-12 * var_x60; + const double var_x109 = 7.9543493648916641e-8 * var_x14; + + partialF = -21.173500000000001 + 11.609999999999999 * var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_Calmod + 1.5654999999999999 * var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_Trop + 7.9980000000000002 * var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_Mg_Trop + 7.9980000000000002 * var_chaste_interface__intracellular_concentrations_and_buffer_equations__Mg_Mg_Trop - 9.1430401954624137e-5 * var_x52 - 0.00025494709502857897 * var_x105 - 1.5494105166262771e-6 * var_x53 - var_x108 * var_x9 - var_x109 * var_x57 + 9.1430401954624137e-5 * var_x54 * var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_i + 0.0031868386878572369 * var_x106 * var_x107; + } + else + { + const double y_save = rY[1]; + rY[1] += delta; + const double temp = EvaluateYDerivative1(var_chaste_interface__environment__time_converted, rY); + partialF = (temp-mEvalF[1])/delta; + rY[1] = y_save; + } + return partialF; + } + double Dynamicdemir_model_1994FromCellMLGRL1::EvaluateYDerivative2(double var_chaste_interface__environment__time_converted, std::vector& rY) + { + + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -49.54105 + double var_chaste_interface__sodium_current_m_gate__m = rY[2]; + // Units: dimensionless; Initial value: 0.250113 + + + // Mathematics + const double var_sodium_current_m_gate__alpha_m = -824 * (51.899999999999999 + var_chaste_interface__membrane__V) / (-1 + exp(-5.8314606741573032 - 0.11235955056179775 * var_chaste_interface__membrane__V)); // per_second + const double var_sodium_current_m_gate__beta_m = 32960 * exp(-5.8314606741573032 - 0.11235955056179775 * var_chaste_interface__membrane__V); // per_second + const double var_sodium_current_m_gate__m_infinity = var_sodium_current_m_gate__alpha_m / (var_sodium_current_m_gate__alpha_m + var_sodium_current_m_gate__beta_m); // dimensionless + const double var_sodium_current_m_gate__tau_m = 1.5e-5 + 1 / (var_sodium_current_m_gate__alpha_m + var_sodium_current_m_gate__beta_m); // second + const double var_sodium_current_m_gate__m_orig_deriv = (-var_chaste_interface__sodium_current_m_gate__m + var_sodium_current_m_gate__m_infinity) / var_sodium_current_m_gate__tau_m; // 1 / second + const double d_dt_chaste_interface_var_sodium_current_m_gate__m = 0.001 * var_sodium_current_m_gate__m_orig_deriv; // 1 / millisecond + + return d_dt_chaste_interface_var_sodium_current_m_gate__m; + } + + double Dynamicdemir_model_1994FromCellMLGRL1::EvaluatePartialDerivative2(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -49.54105 + + + const double var_x119 = exp(-5.8314606741573032 - 0.11235955056179775 * var_chaste_interface__membrane__V); + const double var_x120 = 51.899999999999999 + var_chaste_interface__membrane__V; + const double var_x121 = -1 + var_x119; + const double var_x122 = 1 / var_x121; + const double var_x123 = 824 * var_x122; + const double var_x124 = var_x120 * var_x123; + const double var_x125 = 1 / (-var_x124 + 32960 * var_x119); + const double var_x129 = 1.5e-5 + var_x125; + const double var_x130 = 0.001 / var_x129; + + partialF = -var_x130; + } + else + { + const double y_save = rY[2]; + rY[2] += delta; + const double temp = EvaluateYDerivative2(var_chaste_interface__environment__time_converted, rY); + partialF = (temp-mEvalF[2])/delta; + rY[2] = y_save; + } + return partialF; + } + double Dynamicdemir_model_1994FromCellMLGRL1::EvaluateYDerivative3(double var_chaste_interface__environment__time_converted, std::vector& rY) + { + + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -49.54105 + double var_chaste_interface__sodium_current_h_gate__h1 = rY[3]; + // Units: dimensionless; Initial value: 0.001386897 + + + // Mathematics + const double var_sodium_current_h_gate__alpha_h1 = 165 * exp(-8.0396825396825395 - 0.079365079365079361 * var_chaste_interface__membrane__V); // per_second + const double var_sodium_current_h_gate__beta_h1 = 12360 / (1 + 320 * exp(-8.0396825396825395 - 0.079365079365079361 * var_chaste_interface__membrane__V)); // per_second + const double var_sodium_current_h_gate__h1_infinity = var_sodium_current_h_gate__alpha_h1 / (var_sodium_current_h_gate__alpha_h1 + var_sodium_current_h_gate__beta_h1); // dimensionless + const double var_sodium_current_h_gate__tau_h1 = 1 / (var_sodium_current_h_gate__alpha_h1 + var_sodium_current_h_gate__beta_h1); // second + const double var_sodium_current_h_gate__h1_orig_deriv = (-var_chaste_interface__sodium_current_h_gate__h1 + var_sodium_current_h_gate__h1_infinity) / var_sodium_current_h_gate__tau_h1; // 1 / second + const double d_dt_chaste_interface_var_sodium_current_h_gate__h1 = 0.001 * var_sodium_current_h_gate__h1_orig_deriv; // 1 / millisecond + + return d_dt_chaste_interface_var_sodium_current_h_gate__h1; + } + + double Dynamicdemir_model_1994FromCellMLGRL1::EvaluatePartialDerivative3(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -49.54105 + + + const double var_x131 = exp(-8.0396825396825395 - 0.079365079365079361 * var_chaste_interface__membrane__V); + const double var_x132 = 1 / (1 + 320 * var_x131); + + partialF = -0.16500000000000001 * var_x131 - 12.359999999999999 * var_x132; + } + else + { + const double y_save = rY[3]; + rY[3] += delta; + const double temp = EvaluateYDerivative3(var_chaste_interface__environment__time_converted, rY); + partialF = (temp-mEvalF[3])/delta; + rY[3] = y_save; + } + return partialF; + } + double Dynamicdemir_model_1994FromCellMLGRL1::EvaluateYDerivative4(double var_chaste_interface__environment__time_converted, std::vector& rY) + { + + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -49.54105 + double var_chaste_interface__sodium_current_h_gate__h2 = rY[4]; + // Units: dimensionless; Initial value: 0.002065463 + + + // Mathematics + const double var_sodium_current_h_gate__alpha_h1 = 165 * exp(-8.0396825396825395 - 0.079365079365079361 * var_chaste_interface__membrane__V); // per_second + const double var_sodium_current_h_gate__beta_h1 = 12360 / (1 + 320 * exp(-8.0396825396825395 - 0.079365079365079361 * var_chaste_interface__membrane__V)); // per_second + const double var_sodium_current_h_gate__h1_infinity = var_sodium_current_h_gate__alpha_h1 / (var_sodium_current_h_gate__alpha_h1 + var_sodium_current_h_gate__beta_h1); // dimensionless + const double var_sodium_current_h_gate__h2_infinity = var_sodium_current_h_gate__h1_infinity; // dimensionless + const double var_sodium_current_h_gate__tau_h1 = 1 / (var_sodium_current_h_gate__alpha_h1 + var_sodium_current_h_gate__beta_h1); // second + const double var_sodium_current_h_gate__tau_h2 = 20 * var_sodium_current_h_gate__tau_h1; // second + const double var_sodium_current_h_gate__h2_orig_deriv = (-var_chaste_interface__sodium_current_h_gate__h2 + var_sodium_current_h_gate__h2_infinity) / var_sodium_current_h_gate__tau_h2; // 1 / second + const double d_dt_chaste_interface_var_sodium_current_h_gate__h2 = 0.001 * var_sodium_current_h_gate__h2_orig_deriv; // 1 / millisecond + + return d_dt_chaste_interface_var_sodium_current_h_gate__h2; + } + + double Dynamicdemir_model_1994FromCellMLGRL1::EvaluatePartialDerivative4(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -49.54105 + + + const double var_x131 = exp(-8.0396825396825395 - 0.079365079365079361 * var_chaste_interface__membrane__V); + const double var_x132 = 1 / (1 + 320 * var_x131); + + partialF = -0.61799999999999999 * var_x132 - 0.0082500000000000004 * var_x131; + } + else + { + const double y_save = rY[4]; + rY[4] += delta; + const double temp = EvaluateYDerivative4(var_chaste_interface__environment__time_converted, rY); + partialF = (temp-mEvalF[4])/delta; + rY[4] = y_save; + } + return partialF; + } + double Dynamicdemir_model_1994FromCellMLGRL1::EvaluateYDerivative5(double var_chaste_interface__environment__time_converted, std::vector& rY) + { + + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -49.54105 + double var_chaste_interface__L_type_Ca_channel_d_gate__d_L = rY[5]; + // Units: dimensionless; Initial value: 0.002572773 + + + // Mathematics + const double var_L_type_Ca_channel_d_gate__alpha_d_L = -28.390000000000001 * (35 + var_chaste_interface__membrane__V) / (-1 + exp(-14 - 0.40000000000000002 * var_chaste_interface__membrane__V)) - 84.900000000000006 * var_chaste_interface__membrane__V / (-1 + exp(-0.20799999999999999 * var_chaste_interface__membrane__V)); // per_second + const double var_L_type_Ca_channel_d_gate__beta_d_L = 11.43 * (-5 + var_chaste_interface__membrane__V) / (-1 + exp(-2 + 0.40000000000000002 * var_chaste_interface__membrane__V)); // per_second + const double var_L_type_Ca_channel_d_gate__d_L_infinity = 1 / (1 + exp(-2.3500000000000001 - 0.16666666666666666 * var_chaste_interface__membrane__V)); // dimensionless + const double var_L_type_Ca_channel_d_gate__tau_d_L = 1 / (var_L_type_Ca_channel_d_gate__alpha_d_L + var_L_type_Ca_channel_d_gate__beta_d_L); // second + const double var_L_type_Ca_channel_d_gate__d_L_orig_deriv = (-var_chaste_interface__L_type_Ca_channel_d_gate__d_L + var_L_type_Ca_channel_d_gate__d_L_infinity) / var_L_type_Ca_channel_d_gate__tau_d_L; // 1 / second + const double d_dt_chaste_interface_var_L_type_Ca_channel_d_gate__d_L = 0.001 * var_L_type_Ca_channel_d_gate__d_L_orig_deriv; // 1 / millisecond + + return d_dt_chaste_interface_var_L_type_Ca_channel_d_gate__d_L; + } + + double Dynamicdemir_model_1994FromCellMLGRL1::EvaluatePartialDerivative5(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -49.54105 + + + const double var_x139 = exp(-14 - 0.40000000000000002 * var_chaste_interface__membrane__V); + const double var_x140 = -1 + var_x139; + const double var_x141 = 1 / var_x140; + const double var_x143 = exp(-0.20799999999999999 * var_chaste_interface__membrane__V); + const double var_x144 = -1 + var_x143; + const double var_x145 = 1 / var_x144; + const double var_x147 = exp(-2 + 0.40000000000000002 * var_chaste_interface__membrane__V); + const double var_x148 = -1 + var_x147; + const double var_x149 = 1 / var_x148; + const double var_x150 = 35 + var_chaste_interface__membrane__V; + const double var_x151 = -5 + var_chaste_interface__membrane__V; + + partialF = 0.028390000000000002 * var_x141 * var_x150 + 0.084900000000000003 * var_x145 * var_chaste_interface__membrane__V - 0.011429999999999999 * var_x149 * var_x151; + } + else + { + const double y_save = rY[5]; + rY[5] += delta; + const double temp = EvaluateYDerivative5(var_chaste_interface__environment__time_converted, rY); + partialF = (temp-mEvalF[5])/delta; + rY[5] = y_save; + } + return partialF; + } + double Dynamicdemir_model_1994FromCellMLGRL1::EvaluateYDerivative6(double var_chaste_interface__environment__time_converted, std::vector& rY) + { + + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -49.54105 + double var_chaste_interface__L_type_Ca_channel_f_gate__f_L = rY[6]; + // Units: dimensionless; Initial value: 0.98651 + + + // Mathematics + const double var_L_type_Ca_channel_f_gate__alpha_f_L = 3.75 * (28 + var_chaste_interface__membrane__V) / (-1 + exp(7 + 0.25 * var_chaste_interface__membrane__V)); // per_second + const double var_L_type_Ca_channel_f_gate__beta_f_L = 30 / (1 + exp(-7 - 0.25 * var_chaste_interface__membrane__V)); // per_second + const double var_L_type_Ca_channel_f_gate__f_L_infinity = 1 / (1 + exp(6 + 0.20000000000000001 * var_chaste_interface__membrane__V)); // dimensionless + const double var_L_type_Ca_channel_f_gate__tau_f_L = 1 / (var_L_type_Ca_channel_f_gate__alpha_f_L + var_L_type_Ca_channel_f_gate__beta_f_L); // second + const double var_L_type_Ca_channel_f_gate__f_L_orig_deriv = (-var_chaste_interface__L_type_Ca_channel_f_gate__f_L + var_L_type_Ca_channel_f_gate__f_L_infinity) / var_L_type_Ca_channel_f_gate__tau_f_L; // 1 / second + const double d_dt_chaste_interface_var_L_type_Ca_channel_f_gate__f_L = 0.001 * var_L_type_Ca_channel_f_gate__f_L_orig_deriv; // 1 / millisecond + + return d_dt_chaste_interface_var_L_type_Ca_channel_f_gate__f_L; + } + + double Dynamicdemir_model_1994FromCellMLGRL1::EvaluatePartialDerivative6(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -49.54105 + + + const double var_x154 = 7 + 0.25 * var_chaste_interface__membrane__V; + const double var_x155 = exp(var_x154); + const double var_x156 = -1 + var_x155; + const double var_x157 = 1 / var_x156; + const double var_x159 = exp(-var_x154); + const double var_x160 = 1 + var_x159; + const double var_x161 = 28 + var_chaste_interface__membrane__V; + const double var_x162 = 1 / var_x160; + + partialF = -0.029999999999999999 * var_x162 - 0.0037499999999999999 * var_x157 * var_x161; + } + else + { + const double y_save = rY[6]; + rY[6] += delta; + const double temp = EvaluateYDerivative6(var_chaste_interface__environment__time_converted, rY); + partialF = (temp-mEvalF[6])/delta; + rY[6] = y_save; + } + return partialF; + } + double Dynamicdemir_model_1994FromCellMLGRL1::EvaluateYDerivative7(double var_chaste_interface__environment__time_converted, std::vector& rY) + { + + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -49.54105 + double var_chaste_interface__T_type_Ca_channel_d_gate__d_T = rY[7]; + // Units: dimensionless; Initial value: 0.02012114 + + + // Mathematics + const double var_T_type_Ca_channel_d_gate__alpha_d_T = 1068 * exp(0.87666666666666671 + 0.033333333333333333 * var_chaste_interface__membrane__V); // per_second + const double var_T_type_Ca_channel_d_gate__beta_d_T = 1068 * exp(-0.87666666666666671 - 0.033333333333333333 * var_chaste_interface__membrane__V); // per_second + const double var_T_type_Ca_channel_d_gate__d_T_infinity = 1 / (1 + exp(-4.3833333333333337 - 0.16666666666666666 * var_chaste_interface__membrane__V)); // dimensionless + const double var_T_type_Ca_channel_d_gate__tau_d_T = 1 / (var_T_type_Ca_channel_d_gate__alpha_d_T + var_T_type_Ca_channel_d_gate__beta_d_T); // second + const double var_T_type_Ca_channel_d_gate__d_T_orig_deriv = (-var_chaste_interface__T_type_Ca_channel_d_gate__d_T + var_T_type_Ca_channel_d_gate__d_T_infinity) / var_T_type_Ca_channel_d_gate__tau_d_T; // 1 / second + const double d_dt_chaste_interface_var_T_type_Ca_channel_d_gate__d_T = 0.001 * var_T_type_Ca_channel_d_gate__d_T_orig_deriv; // 1 / millisecond + + return d_dt_chaste_interface_var_T_type_Ca_channel_d_gate__d_T; + } + + double Dynamicdemir_model_1994FromCellMLGRL1::EvaluatePartialDerivative7(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -49.54105 + + + const double var_x165 = 0.87666666666666671 + 0.033333333333333333 * var_chaste_interface__membrane__V; + const double var_x166 = exp(-var_x165); + const double var_x167 = exp(var_x165); + + partialF = -1.0680000000000001 * var_x166 - 1.0680000000000001 * var_x167; + } + else + { + const double y_save = rY[7]; + rY[7] += delta; + const double temp = EvaluateYDerivative7(var_chaste_interface__environment__time_converted, rY); + partialF = (temp-mEvalF[7])/delta; + rY[7] = y_save; + } + return partialF; + } + double Dynamicdemir_model_1994FromCellMLGRL1::EvaluateYDerivative8(double var_chaste_interface__environment__time_converted, std::vector& rY) + { + + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -49.54105 + double var_chaste_interface__T_type_Ca_channel_f_gate__f_T = rY[8]; + // Units: dimensionless; Initial value: 0.1945111 + + + // Mathematics + const double var_T_type_Ca_channel_f_gate__alpha_f_T = 15.300000000000001 * exp(-0.74069627851140463 - 0.012004801920768308 * var_chaste_interface__membrane__V); // per_second + const double var_T_type_Ca_channel_f_gate__beta_f_T = 15 * exp(4.0117035110533159 + 0.065019505851755519 * var_chaste_interface__membrane__V); // per_second + const double var_T_type_Ca_channel_f_gate__f_T_infinity = 1 / (1 + exp(11.017857142857144 + 0.17857142857142858 * var_chaste_interface__membrane__V)); // dimensionless + const double var_T_type_Ca_channel_f_gate__tau_f_T = 1 / (var_T_type_Ca_channel_f_gate__alpha_f_T + var_T_type_Ca_channel_f_gate__beta_f_T); // second + const double var_T_type_Ca_channel_f_gate__f_T_orig_deriv = (-var_chaste_interface__T_type_Ca_channel_f_gate__f_T + var_T_type_Ca_channel_f_gate__f_T_infinity) / var_T_type_Ca_channel_f_gate__tau_f_T; // 1 / second + const double d_dt_chaste_interface_var_T_type_Ca_channel_f_gate__f_T = 0.001 * var_T_type_Ca_channel_f_gate__f_T_orig_deriv; // 1 / millisecond + + return d_dt_chaste_interface_var_T_type_Ca_channel_f_gate__f_T; + } + + double Dynamicdemir_model_1994FromCellMLGRL1::EvaluatePartialDerivative8(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -49.54105 + + + const double var_x170 = exp(-0.74069627851140463 - 0.012004801920768308 * var_chaste_interface__membrane__V); + const double var_x171 = exp(4.0117035110533159 + 0.065019505851755519 * var_chaste_interface__membrane__V); + + partialF = -0.015300000000000001 * var_x170 - 0.014999999999999999 * var_x171; + } + else + { + const double y_save = rY[8]; + rY[8] += delta; + const double temp = EvaluateYDerivative8(var_chaste_interface__environment__time_converted, rY); + partialF = (temp-mEvalF[8])/delta; + rY[8] = y_save; + } + return partialF; + } + double Dynamicdemir_model_1994FromCellMLGRL1::EvaluateYDerivative9(double var_chaste_interface__environment__time_converted, std::vector& rY) + { + + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -49.54105 + double var_chaste_interface__delayed_rectifying_potassium_current_P_a_gate__P_a = rY[9]; + // Units: dimensionless; Initial value: 0.02302278 + + + // Mathematics + const double var_delayed_rectifying_potassium_current_P_a_gate__P_a_infinity = 1 / (1 + exp(-0.68918918918918914 - 0.13513513513513511 * var_chaste_interface__membrane__V)); // dimensionless + const double var_delayed_rectifying_potassium_current_P_a_gate__tau_P_a = 1 / (17 * exp(0.039800000000000002 * var_chaste_interface__membrane__V) + 2.1099999999999999 * exp(-0.050999999999999997 * var_chaste_interface__membrane__V)); // second + const double var_delayed_rectifying_potassium_current_P_a_gate__P_a_orig_deriv = (-var_chaste_interface__delayed_rectifying_potassium_current_P_a_gate__P_a + var_delayed_rectifying_potassium_current_P_a_gate__P_a_infinity) / var_delayed_rectifying_potassium_current_P_a_gate__tau_P_a; // 1 / second + const double d_dt_chaste_interface_var_delayed_rectifying_potassium_current_P_a_gate__P_a = 0.001 * var_delayed_rectifying_potassium_current_P_a_gate__P_a_orig_deriv; // 1 / millisecond + + return d_dt_chaste_interface_var_delayed_rectifying_potassium_current_P_a_gate__P_a; + } + + double Dynamicdemir_model_1994FromCellMLGRL1::EvaluatePartialDerivative9(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -49.54105 + + + const double var_x172 = exp(-0.050999999999999997 * var_chaste_interface__membrane__V); + const double var_x173 = exp(0.039800000000000002 * var_chaste_interface__membrane__V); + + partialF = -0.0021099999999999999 * var_x172 - 0.017000000000000001 * var_x173; + } + else + { + const double y_save = rY[9]; + rY[9] += delta; + const double temp = EvaluateYDerivative9(var_chaste_interface__environment__time_converted, rY); + partialF = (temp-mEvalF[9])/delta; + rY[9] = y_save; + } + return partialF; + } + double Dynamicdemir_model_1994FromCellMLGRL1::EvaluateYDerivative10(double var_chaste_interface__environment__time_converted, std::vector& rY) + { + + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -49.54105 + double var_chaste_interface__delayed_rectifying_potassium_current_P_i_gate__P_i = rY[10]; + // Units: dimensionless; Initial value: 0.3777728 + + + // Mathematics + const double var_delayed_rectifying_potassium_current_P_i_gate__alpha_P_i = 100 * exp(-0.0183 * var_chaste_interface__membrane__V); // per_second + const double var_delayed_rectifying_potassium_current_P_i_gate__beta_P_i = 656 * exp(0.0094199999999999996 * var_chaste_interface__membrane__V); // per_second + const double var_delayed_rectifying_potassium_current_P_i_gate__P_i_orig_deriv = (1 - var_chaste_interface__delayed_rectifying_potassium_current_P_i_gate__P_i) * var_delayed_rectifying_potassium_current_P_i_gate__alpha_P_i - var_chaste_interface__delayed_rectifying_potassium_current_P_i_gate__P_i * var_delayed_rectifying_potassium_current_P_i_gate__beta_P_i; // 1 / second + const double d_dt_chaste_interface_var_delayed_rectifying_potassium_current_P_i_gate__P_i = 0.001 * var_delayed_rectifying_potassium_current_P_i_gate__P_i_orig_deriv; // 1 / millisecond + + return d_dt_chaste_interface_var_delayed_rectifying_potassium_current_P_i_gate__P_i; + } + + double Dynamicdemir_model_1994FromCellMLGRL1::EvaluatePartialDerivative10(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -49.54105 + + + const double var_x176 = exp(-0.0183 * var_chaste_interface__membrane__V); + const double var_x177 = exp(0.0094199999999999996 * var_chaste_interface__membrane__V); + + partialF = -0.65600000000000003 * var_x177 - 0.10000000000000001 * var_x176; + } + else + { + const double y_save = rY[10]; + rY[10] += delta; + const double temp = EvaluateYDerivative10(var_chaste_interface__environment__time_converted, rY); + partialF = (temp-mEvalF[10])/delta; + rY[10] = y_save; + } + return partialF; + } + double Dynamicdemir_model_1994FromCellMLGRL1::EvaluateYDerivative11(double var_chaste_interface__environment__time_converted, std::vector& rY) + { + + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -49.54105 + double var_chaste_interface__hyperpolarisation_activated_current_y_gate__y = rY[11]; + // Units: dimensionless; Initial value: 0.09227776 + + + // Mathematics + const double var_hyperpolarisation_activated_current_y_gate__tau_y = 1 / (1.6483000000000001 * exp(-2.2219482120838472 - 0.041101520756267988 * var_chaste_interface__membrane__V) + 14.01055 / (0.69999999999999996 + exp(-10.909090909090908 - 0.18181818181818182 * var_chaste_interface__membrane__V))); // second + const double var_hyperpolarisation_activated_current_y_gate__y_infinity = 1 / (1 + exp(8.0222222222222221 + 0.1111111111111111 * var_chaste_interface__membrane__V)); // dimensionless + const double var_hyperpolarisation_activated_current_y_gate__y_orig_deriv = (-var_chaste_interface__hyperpolarisation_activated_current_y_gate__y + var_hyperpolarisation_activated_current_y_gate__y_infinity) / var_hyperpolarisation_activated_current_y_gate__tau_y; // 1 / second + const double d_dt_chaste_interface_var_hyperpolarisation_activated_current_y_gate__y = 0.001 * var_hyperpolarisation_activated_current_y_gate__y_orig_deriv; // 1 / millisecond + + return d_dt_chaste_interface_var_hyperpolarisation_activated_current_y_gate__y; + } + + double Dynamicdemir_model_1994FromCellMLGRL1::EvaluatePartialDerivative11(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -49.54105 + + + const double var_x180 = exp(-2.2219482120838472 - 0.041101520756267988 * var_chaste_interface__membrane__V); + const double var_x181 = exp(-10.909090909090908 - 0.18181818181818182 * var_chaste_interface__membrane__V); + const double var_x182 = 0.69999999999999996 + var_x181; + const double var_x183 = 1 / var_x182; + + partialF = -0.0016483000000000001 * var_x180 - 0.01401055 * var_x183; + } + else + { + const double y_save = rY[11]; + rY[11] += delta; + const double temp = EvaluateYDerivative11(var_chaste_interface__environment__time_converted, rY); + partialF = (temp-mEvalF[11])/delta; + rY[11] = y_save; + } + return partialF; + } + double Dynamicdemir_model_1994FromCellMLGRL1::EvaluateYDerivative12(double var_chaste_interface__environment__time_converted, std::vector& rY) + { + + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -49.54105 + double var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_i = rY[1]; + // Units: millimolar; Initial value: 0.0003787018 + double var_chaste_interface__sodium_current_m_gate__m = rY[2]; + // Units: dimensionless; Initial value: 0.250113 + double var_chaste_interface__sodium_current_h_gate__h1 = rY[3]; + // Units: dimensionless; Initial value: 0.001386897 + double var_chaste_interface__sodium_current_h_gate__h2 = rY[4]; + // Units: dimensionless; Initial value: 0.002065463 + double var_chaste_interface__hyperpolarisation_activated_current_y_gate__y = rY[11]; + // Units: dimensionless; Initial value: 0.09227776 + double var_chaste_interface__intracellular_concentrations_and_buffer_equations__Na_i = rY[12]; + // Units: millimolar; Initial value: 9.701621 + double var_chaste_interface__cleft_space_equations__Na_c = rY[18]; + // Units: millimolar; Initial value: 139.9988 + double var_chaste_interface__cleft_space_equations__Ca_c = rY[19]; + // Units: millimolar; Initial value: 2.00474 + double var_chaste_interface__cleft_space_equations__K_c = rY[20]; + // Units: millimolar; Initial value: 5.389014 + + + // Mathematics + const double var_cleft_space_equations__Vol = 3.4970000000000001e-6; // microLitre + const double var_intracellular_concentrations_and_buffer_equations__V_i = 0.46500000000000002 * var_cleft_space_equations__Vol; // microLitre + const double var_linear_background_current__g_B_Na = 0.00016000000000000001; // microS + const double var_membrane__F = 96485.341499999995; // coulomb_per_mole + const double var_membrane__R = 8314.4719999999998; // joule_per_kilomole_kelvin + const double var_membrane__T = 310; // kelvin + const double var_hyperpolarisation_activated_current__i_f_Na = pow(var_chaste_interface__hyperpolarisation_activated_current_y_gate__y, 2) * (-75 + var_chaste_interface__membrane__V) * mParameters[5]; // nanoA + const double var_reversal_potentials__E_Na = var_membrane__R * var_membrane__T * log(var_chaste_interface__cleft_space_equations__Na_c / var_chaste_interface__intracellular_concentrations_and_buffer_equations__Na_i) / var_membrane__F; // millivolt + const double var_linear_background_current__i_B_Na = (-var_reversal_potentials__E_Na + var_chaste_interface__membrane__V) * var_linear_background_current__g_B_Na; // nanoA + const double var_sodium_calcium_pump__K_NaCa = 1.2480000000000001e-5; // nanoA + const double var_sodium_calcium_pump__d_NaCa = 0.0001; // dimensionless + const double var_sodium_calcium_pump__gamma = 0.5; // dimensionless + const double var_sodium_calcium_pump__i_NaCa = (pow(var_chaste_interface__intracellular_concentrations_and_buffer_equations__Na_i, 3) * var_chaste_interface__cleft_space_equations__Ca_c * exp(0.037429999999999998 * var_chaste_interface__membrane__V * var_sodium_calcium_pump__gamma) - pow(var_chaste_interface__cleft_space_equations__Na_c, 3) * var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_i * exp(0.037429999999999998 * (-1 + var_sodium_calcium_pump__gamma) * var_chaste_interface__membrane__V)) * var_sodium_calcium_pump__K_NaCa / (1 + (pow(var_chaste_interface__cleft_space_equations__Na_c, 3) * var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_i + pow(var_chaste_interface__intracellular_concentrations_and_buffer_equations__Na_i, 3) * var_chaste_interface__cleft_space_equations__Ca_c) * var_sodium_calcium_pump__d_NaCa); // nanoA + const double var_sodium_current__i_Na = pow(var_membrane__F, 2) * pow(var_chaste_interface__sodium_current_m_gate__m, 3) * (-1 + exp((-var_reversal_potentials__E_Na + var_chaste_interface__membrane__V) * var_membrane__F / (var_membrane__R * var_membrane__T))) * var_chaste_interface__cleft_space_equations__Na_c * var_chaste_interface__membrane__V * mParameters[3] * var_chaste_interface__sodium_current_h_gate__h1 * var_chaste_interface__sodium_current_h_gate__h2 / ((-1 + exp(var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * var_membrane__R * var_membrane__T); // nanoA + const double var_sodium_potassium_pump__K_m_K = 0.621; // millimolar + const double var_sodium_potassium_pump__K_m_Na = 5.46; // millimolar + const double var_sodium_potassium_pump__i_NaK_max = 0.21920000000000001; // nanoA + const double var_sodium_potassium_pump__i_NaK = 1.6000000000000001 * pow(var_chaste_interface__cleft_space_equations__K_c, 2) * pow(var_chaste_interface__intracellular_concentrations_and_buffer_equations__Na_i, 3) * var_sodium_potassium_pump__i_NaK_max / ((1.5 + exp(-1.5 - 0.025000000000000001 * var_chaste_interface__membrane__V)) * pow((var_chaste_interface__cleft_space_equations__K_c + var_sodium_potassium_pump__K_m_K), 2) * pow((var_chaste_interface__intracellular_concentrations_and_buffer_equations__Na_i + var_sodium_potassium_pump__K_m_Na), 3)); // nanoA + const double var_intracellular_concentrations_and_buffer_equations__Na_i_orig_deriv = (-var_hyperpolarisation_activated_current__i_f_Na - var_linear_background_current__i_B_Na - var_sodium_current__i_Na - 3 * var_sodium_calcium_pump__i_NaCa - 3 * var_sodium_potassium_pump__i_NaK) / (var_intracellular_concentrations_and_buffer_equations__V_i * var_membrane__F); // millimolar / second + const double d_dt_chaste_interface_var_intracellular_concentrations_and_buffer_equations__Na_i = 0.001 * var_intracellular_concentrations_and_buffer_equations__Na_i_orig_deriv; // millimolar / millisecond + + return d_dt_chaste_interface_var_intracellular_concentrations_and_buffer_equations__Na_i; + } + + double Dynamicdemir_model_1994FromCellMLGRL1::EvaluatePartialDerivative12(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -49.54105 + double var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_i = rY[1]; + // Units: millimolar; Initial value: 0.0003787018 + double var_chaste_interface__sodium_current_m_gate__m = rY[2]; + // Units: dimensionless; Initial value: 0.250113 + double var_chaste_interface__sodium_current_h_gate__h1 = rY[3]; + // Units: dimensionless; Initial value: 0.001386897 + double var_chaste_interface__sodium_current_h_gate__h2 = rY[4]; + // Units: dimensionless; Initial value: 0.002065463 + double var_chaste_interface__intracellular_concentrations_and_buffer_equations__Na_i = rY[12]; + // Units: millimolar; Initial value: 9.701621 + double var_chaste_interface__cleft_space_equations__Na_c = rY[18]; + // Units: millimolar; Initial value: 139.9988 + double var_chaste_interface__cleft_space_equations__Ca_c = rY[19]; + // Units: millimolar; Initial value: 2.00474 + double var_chaste_interface__cleft_space_equations__K_c = rY[20]; + // Units: millimolar; Initial value: 5.389014 + + + const double var_x9 = pow(var_chaste_interface__cleft_space_equations__Na_c, 3); + const double var_x10 = var_x9 * var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_i; + const double var_x11 = pow(var_chaste_interface__intracellular_concentrations_and_buffer_equations__Na_i, 3); + const double var_x12 = var_x11 * var_chaste_interface__cleft_space_equations__Ca_c; + const double var_x13 = 1 + 0.0001 * var_x10 + 0.0001 * var_x12; + const double var_x14 = 1 / var_x13; + const double var_x15 = 0.018714999999999999 * var_chaste_interface__membrane__V; + const double var_x16 = exp(-var_x15); + const double var_x17 = var_x10 * var_x16; + const double var_x18 = exp(var_x15); + const double var_x19 = var_x12 * var_x18; + const double var_x25 = exp(-1.5 - 0.025000000000000001 * var_chaste_interface__membrane__V); + const double var_x26 = 0.621 + var_chaste_interface__cleft_space_equations__K_c; + const double var_x27 = pow(var_x26, (-2)); + const double var_x28 = pow(var_chaste_interface__cleft_space_equations__K_c, 2); + const double var_x29 = 1 + 0.18315018315018314 * var_chaste_interface__intracellular_concentrations_and_buffer_equations__Na_i; + const double var_x30 = pow(var_x29, (-3)); + const double var_x33 = 0.037433890822745473 * var_chaste_interface__membrane__V; + const double var_x34 = 1 / var_chaste_interface__intracellular_concentrations_and_buffer_equations__Na_i; + const double var_x35 = var_x34 * var_chaste_interface__cleft_space_equations__Na_c; + const double var_x36 = exp(var_x33 - 1 * log(var_x35)); + const double var_x39 = exp(var_x33); + const double var_x40 = -1 + var_x39; + const double var_x41 = 1 / var_x40; + const double var_x42 = pow(var_chaste_interface__sodium_current_m_gate__m, 3); + const double var_x43 = var_x41 * var_x42 * mParameters[3] * var_chaste_interface__sodium_current_h_gate__h1 * var_chaste_interface__sodium_current_h_gate__h2; + const double var_x45 = var_x43 * var_chaste_interface__membrane__V; + const double var_x46 = var_x36 * var_x45; + const double var_x58 = pow(var_x13, (-2)); + const double var_x59 = var_x19 - var_x17; + const double var_x81 = pow(var_chaste_interface__intracellular_concentrations_and_buffer_equations__Na_i, 2); + const double var_x82 = var_x81 * var_chaste_interface__cleft_space_equations__Ca_c; + const double var_x83 = var_x18 * var_x82; + const double var_x84 = 1 / (1.5 + var_x25); + const double var_x85 = var_x27 * var_x28 * var_x84; + const double var_x86 = var_x30 * var_x81 * var_x85; + const double var_x87 = pow(var_x29, (-4)); + const double var_x191 = 7.1589144284024978e-7 * var_x14; + const double var_x192 = 23.020586507479816 * var_x46; + + partialF = -0.00012359906637920097 * var_x86 - 2.7242382709912566e-5 * var_x34 - var_x191 * var_x83 - var_x192 * var_x35 + 7.158914428402498e-11 * var_x58 * var_x59 * var_x81 * var_chaste_interface__cleft_space_equations__Ca_c + 2.2637191644542304e-5 * var_x11 * var_x27 * var_x28 * var_x84 * var_x87; + } + else + { + const double y_save = rY[12]; + rY[12] += delta; + const double temp = EvaluateYDerivative12(var_chaste_interface__environment__time_converted, rY); + partialF = (temp-mEvalF[12])/delta; + rY[12] = y_save; + } + return partialF; + } + double Dynamicdemir_model_1994FromCellMLGRL1::EvaluateYDerivative13(double var_chaste_interface__environment__time_converted, std::vector& rY) + { + + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -49.54105 + double var_chaste_interface__delayed_rectifying_potassium_current_P_a_gate__P_a = rY[9]; + // Units: dimensionless; Initial value: 0.02302278 + double var_chaste_interface__delayed_rectifying_potassium_current_P_i_gate__P_i = rY[10]; + // Units: dimensionless; Initial value: 0.3777728 + double var_chaste_interface__hyperpolarisation_activated_current_y_gate__y = rY[11]; + // Units: dimensionless; Initial value: 0.09227776 + double var_chaste_interface__intracellular_concentrations_and_buffer_equations__Na_i = rY[12]; + // Units: millimolar; Initial value: 9.701621 + double var_chaste_interface__intracellular_concentrations_and_buffer_equations__K_i = rY[13]; + // Units: millimolar; Initial value: 140.7347 + double var_chaste_interface__cleft_space_equations__K_c = rY[20]; + // Units: millimolar; Initial value: 5.389014 + + + // Mathematics + const double var_cleft_space_equations__K_b = 5.4000000000000004; // millimolar + const double var_cleft_space_equations__Vol = 3.4970000000000001e-6; // microLitre + const double var_delayed_rectifying_potassium_current__g_K = pow(var_cleft_space_equations__K_b, 0.58999999999999997) * mParameters[2]; // microS + const double var_intracellular_concentrations_and_buffer_equations__V_i = 0.46500000000000002 * var_cleft_space_equations__Vol; // microLitre + const double var_linear_background_current__g_B_K = 6.9400000000000006e-5; // microS + const double var_membrane__F = 96485.341499999995; // coulomb_per_mole + const double var_membrane__R = 8314.4719999999998; // joule_per_kilomole_kelvin + const double var_membrane__T = 310; // kelvin + const double var_hyperpolarisation_activated_current__i_f_K = pow(var_chaste_interface__hyperpolarisation_activated_current_y_gate__y, 2) * (85 + var_chaste_interface__membrane__V) * mParameters[4]; // nanoA + const double var_reversal_potentials__E_K = var_membrane__R * var_membrane__T * log(var_chaste_interface__cleft_space_equations__K_c / var_chaste_interface__intracellular_concentrations_and_buffer_equations__K_i) / var_membrane__F; // millivolt + const double var_delayed_rectifying_potassium_current__i_K = (-var_reversal_potentials__E_K + var_chaste_interface__membrane__V) * var_delayed_rectifying_potassium_current__g_K * var_chaste_interface__delayed_rectifying_potassium_current_P_a_gate__P_a * var_chaste_interface__delayed_rectifying_potassium_current_P_i_gate__P_i; // nanoA + const double var_linear_background_current__i_B_K = (-var_reversal_potentials__E_K + var_chaste_interface__membrane__V) * var_linear_background_current__g_B_K; // nanoA + const double var_sodium_potassium_pump__K_m_K = 0.621; // millimolar + const double var_sodium_potassium_pump__K_m_Na = 5.46; // millimolar + const double var_sodium_potassium_pump__i_NaK_max = 0.21920000000000001; // nanoA + const double var_sodium_potassium_pump__i_NaK = 1.6000000000000001 * pow(var_chaste_interface__cleft_space_equations__K_c, 2) * pow(var_chaste_interface__intracellular_concentrations_and_buffer_equations__Na_i, 3) * var_sodium_potassium_pump__i_NaK_max / ((1.5 + exp(-1.5 - 0.025000000000000001 * var_chaste_interface__membrane__V)) * pow((var_chaste_interface__cleft_space_equations__K_c + var_sodium_potassium_pump__K_m_K), 2) * pow((var_chaste_interface__intracellular_concentrations_and_buffer_equations__Na_i + var_sodium_potassium_pump__K_m_Na), 3)); // nanoA + const double var_intracellular_concentrations_and_buffer_equations__K_i_orig_deriv = (-var_delayed_rectifying_potassium_current__i_K - var_hyperpolarisation_activated_current__i_f_K - var_linear_background_current__i_B_K + 2 * var_sodium_potassium_pump__i_NaK) / (var_intracellular_concentrations_and_buffer_equations__V_i * var_membrane__F); // millimolar / second + const double d_dt_chaste_interface_var_intracellular_concentrations_and_buffer_equations__K_i = 0.001 * var_intracellular_concentrations_and_buffer_equations__K_i_orig_deriv; // millimolar / millisecond + + return d_dt_chaste_interface_var_intracellular_concentrations_and_buffer_equations__K_i; + } + + double Dynamicdemir_model_1994FromCellMLGRL1::EvaluatePartialDerivative13(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__delayed_rectifying_potassium_current_P_a_gate__P_a = rY[9]; + // Units: dimensionless; Initial value: 0.02302278 + double var_chaste_interface__delayed_rectifying_potassium_current_P_i_gate__P_i = rY[10]; + // Units: dimensionless; Initial value: 0.3777728 + double var_chaste_interface__intracellular_concentrations_and_buffer_equations__K_i = rY[13]; + // Units: millimolar; Initial value: 140.7347 + + + const double var_x21 = mParameters[2] * var_chaste_interface__delayed_rectifying_potassium_current_P_i_gate__P_i; + const double var_x22 = var_x21 * var_chaste_interface__delayed_rectifying_potassium_current_P_a_gate__P_a; + const double var_x73 = 1 / var_chaste_interface__intracellular_concentrations_and_buffer_equations__K_i; + const double var_x196 = 0.46050826103455306 * var_x22; + + partialF = -1.1816383500424576e-5 * var_x73 - var_x196 * var_x73; + } + else + { + const double y_save = rY[13]; + rY[13] += delta; + const double temp = EvaluateYDerivative13(var_chaste_interface__environment__time_converted, rY); + partialF = (temp-mEvalF[13])/delta; + rY[13] = y_save; + } + return partialF; + } + double Dynamicdemir_model_1994FromCellMLGRL1::EvaluateYDerivative14(double var_chaste_interface__environment__time_converted, std::vector& rY) + { + + double var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_i = rY[1]; + // Units: millimolar; Initial value: 0.0003787018 + double var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_Calmod = rY[14]; + // Units: dimensionless; Initial value: 0.1411678 + + + // Mathematics + const double var_intracellular_concentrations_and_buffer_equations__phi_C = -307 * var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_Calmod + 129000 * (1 - var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_Calmod) * var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_i; // per_second + const double var_intracellular_concentrations_and_buffer_equations__Ca_Calmod_orig_deriv = var_intracellular_concentrations_and_buffer_equations__phi_C; // 1 / second + const double d_dt_chaste_interface_var_intracellular_concentrations_and_buffer_equations__Ca_Calmod = 0.001 * var_intracellular_concentrations_and_buffer_equations__Ca_Calmod_orig_deriv; // 1 / millisecond + + return d_dt_chaste_interface_var_intracellular_concentrations_and_buffer_equations__Ca_Calmod; + } + + double Dynamicdemir_model_1994FromCellMLGRL1::EvaluatePartialDerivative14(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_i = rY[1]; + // Units: millimolar; Initial value: 0.0003787018 + + + const double var_x198 = 129 * var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_i; + + partialF = -0.307 - var_x198; + } + else + { + const double y_save = rY[14]; + rY[14] += delta; + const double temp = EvaluateYDerivative14(var_chaste_interface__environment__time_converted, rY); + partialF = (temp-mEvalF[14])/delta; + rY[14] = y_save; + } + return partialF; + } + double Dynamicdemir_model_1994FromCellMLGRL1::EvaluateYDerivative15(double var_chaste_interface__environment__time_converted, std::vector& rY) + { + + double var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_i = rY[1]; + // Units: millimolar; Initial value: 0.0003787018 + double var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_Trop = rY[15]; + // Units: dimensionless; Initial value: 0.07331396 + + + // Mathematics + const double var_intracellular_concentrations_and_buffer_equations__phi_TC = -252 * var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_Trop + 50500 * (1 - var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_Trop) * var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_i; // per_second + const double var_intracellular_concentrations_and_buffer_equations__Ca_Trop_orig_deriv = var_intracellular_concentrations_and_buffer_equations__phi_TC; // 1 / second + const double d_dt_chaste_interface_var_intracellular_concentrations_and_buffer_equations__Ca_Trop = 0.001 * var_intracellular_concentrations_and_buffer_equations__Ca_Trop_orig_deriv; // 1 / millisecond + + return d_dt_chaste_interface_var_intracellular_concentrations_and_buffer_equations__Ca_Trop; + } + + double Dynamicdemir_model_1994FromCellMLGRL1::EvaluatePartialDerivative15(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_i = rY[1]; + // Units: millimolar; Initial value: 0.0003787018 + + + + partialF = -0.252 - 50.5 * var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_i; + } + else + { + const double y_save = rY[15]; + rY[15] += delta; + const double temp = EvaluateYDerivative15(var_chaste_interface__environment__time_converted, rY); + partialF = (temp-mEvalF[15])/delta; + rY[15] = y_save; + } + return partialF; + } + double Dynamicdemir_model_1994FromCellMLGRL1::EvaluateYDerivative16(double var_chaste_interface__environment__time_converted, std::vector& rY) + { + + double var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_i = rY[1]; + // Units: millimolar; Initial value: 0.0003787018 + double var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_Mg_Trop = rY[16]; + // Units: dimensionless; Initial value: 0.7618549 + double var_chaste_interface__intracellular_concentrations_and_buffer_equations__Mg_Mg_Trop = rY[17]; + // Units: dimensionless; Initial value: 0.2097049 + + + // Mathematics + const double var_intracellular_concentrations_and_buffer_equations__phi_TMgC = -4.25 * var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_Mg_Trop + 129000 * (1 - var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_Mg_Trop - var_chaste_interface__intracellular_concentrations_and_buffer_equations__Mg_Mg_Trop) * var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_i; // per_second + const double var_intracellular_concentrations_and_buffer_equations__Ca_Mg_Trop_orig_deriv = var_intracellular_concentrations_and_buffer_equations__phi_TMgC; // 1 / second + const double d_dt_chaste_interface_var_intracellular_concentrations_and_buffer_equations__Ca_Mg_Trop = 0.001 * var_intracellular_concentrations_and_buffer_equations__Ca_Mg_Trop_orig_deriv; // 1 / millisecond + + return d_dt_chaste_interface_var_intracellular_concentrations_and_buffer_equations__Ca_Mg_Trop; + } + + double Dynamicdemir_model_1994FromCellMLGRL1::EvaluatePartialDerivative16(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_i = rY[1]; + // Units: millimolar; Initial value: 0.0003787018 + + + const double var_x198 = 129 * var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_i; + + partialF = -0.0042500000000000003 - var_x198; + } + else + { + const double y_save = rY[16]; + rY[16] += delta; + const double temp = EvaluateYDerivative16(var_chaste_interface__environment__time_converted, rY); + partialF = (temp-mEvalF[16])/delta; + rY[16] = y_save; + } + return partialF; + } + double Dynamicdemir_model_1994FromCellMLGRL1::EvaluateYDerivative17(double var_chaste_interface__environment__time_converted, std::vector& rY) + { + + double var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_Mg_Trop = rY[16]; + // Units: dimensionless; Initial value: 0.7618549 + double var_chaste_interface__intracellular_concentrations_and_buffer_equations__Mg_Mg_Trop = rY[17]; + // Units: dimensionless; Initial value: 0.2097049 + + + // Mathematics + const double var_intracellular_concentrations_and_buffer_equations__Mg_i = 2.5; // millimolar + const double var_intracellular_concentrations_and_buffer_equations__phi_TMgM = -429 * var_chaste_interface__intracellular_concentrations_and_buffer_equations__Mg_Mg_Trop + 1290 * (1 - var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_Mg_Trop - var_chaste_interface__intracellular_concentrations_and_buffer_equations__Mg_Mg_Trop) * var_intracellular_concentrations_and_buffer_equations__Mg_i; // per_second + const double var_intracellular_concentrations_and_buffer_equations__Mg_Mg_Trop_orig_deriv = var_intracellular_concentrations_and_buffer_equations__phi_TMgM; // 1 / second + const double d_dt_chaste_interface_var_intracellular_concentrations_and_buffer_equations__Mg_Mg_Trop = 0.001 * var_intracellular_concentrations_and_buffer_equations__Mg_Mg_Trop_orig_deriv; // 1 / millisecond + + return d_dt_chaste_interface_var_intracellular_concentrations_and_buffer_equations__Mg_Mg_Trop; + } + + double Dynamicdemir_model_1994FromCellMLGRL1::EvaluatePartialDerivative17(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + + + + partialF = -3.6539999999999999; + } + else + { + const double y_save = rY[17]; + rY[17] += delta; + const double temp = EvaluateYDerivative17(var_chaste_interface__environment__time_converted, rY); + partialF = (temp-mEvalF[17])/delta; + rY[17] = y_save; + } + return partialF; + } + double Dynamicdemir_model_1994FromCellMLGRL1::EvaluateYDerivative18(double var_chaste_interface__environment__time_converted, std::vector& rY) + { + + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -49.54105 + double var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_i = rY[1]; + // Units: millimolar; Initial value: 0.0003787018 + double var_chaste_interface__sodium_current_m_gate__m = rY[2]; + // Units: dimensionless; Initial value: 0.250113 + double var_chaste_interface__sodium_current_h_gate__h1 = rY[3]; + // Units: dimensionless; Initial value: 0.001386897 + double var_chaste_interface__sodium_current_h_gate__h2 = rY[4]; + // Units: dimensionless; Initial value: 0.002065463 + double var_chaste_interface__hyperpolarisation_activated_current_y_gate__y = rY[11]; + // Units: dimensionless; Initial value: 0.09227776 + double var_chaste_interface__intracellular_concentrations_and_buffer_equations__Na_i = rY[12]; + // Units: millimolar; Initial value: 9.701621 + double var_chaste_interface__cleft_space_equations__Na_c = rY[18]; + // Units: millimolar; Initial value: 139.9988 + double var_chaste_interface__cleft_space_equations__Ca_c = rY[19]; + // Units: millimolar; Initial value: 2.00474 + double var_chaste_interface__cleft_space_equations__K_c = rY[20]; + // Units: millimolar; Initial value: 5.389014 + + + // Mathematics + const double var_cleft_space_equations__Na_b = 140; // millimolar + const double var_cleft_space_equations__Vol = 3.4970000000000001e-6; // microLitre + const double var_cleft_space_equations__V_c = 0.13600000000000001 * var_cleft_space_equations__Vol; // microLitre + const double var_cleft_space_equations__tau_p = 0.01; // second + const double var_linear_background_current__g_B_Na = 0.00016000000000000001; // microS + const double var_membrane__F = 96485.341499999995; // coulomb_per_mole + const double var_membrane__R = 8314.4719999999998; // joule_per_kilomole_kelvin + const double var_membrane__T = 310; // kelvin + const double var_hyperpolarisation_activated_current__i_f_Na = pow(var_chaste_interface__hyperpolarisation_activated_current_y_gate__y, 2) * (-75 + var_chaste_interface__membrane__V) * mParameters[5]; // nanoA + const double var_reversal_potentials__E_Na = var_membrane__R * var_membrane__T * log(var_chaste_interface__cleft_space_equations__Na_c / var_chaste_interface__intracellular_concentrations_and_buffer_equations__Na_i) / var_membrane__F; // millivolt + const double var_linear_background_current__i_B_Na = (-var_reversal_potentials__E_Na + var_chaste_interface__membrane__V) * var_linear_background_current__g_B_Na; // nanoA + const double var_sodium_calcium_pump__K_NaCa = 1.2480000000000001e-5; // nanoA + const double var_sodium_calcium_pump__d_NaCa = 0.0001; // dimensionless + const double var_sodium_calcium_pump__gamma = 0.5; // dimensionless + const double var_sodium_calcium_pump__i_NaCa = (pow(var_chaste_interface__intracellular_concentrations_and_buffer_equations__Na_i, 3) * var_chaste_interface__cleft_space_equations__Ca_c * exp(0.037429999999999998 * var_chaste_interface__membrane__V * var_sodium_calcium_pump__gamma) - pow(var_chaste_interface__cleft_space_equations__Na_c, 3) * var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_i * exp(0.037429999999999998 * (-1 + var_sodium_calcium_pump__gamma) * var_chaste_interface__membrane__V)) * var_sodium_calcium_pump__K_NaCa / (1 + (pow(var_chaste_interface__cleft_space_equations__Na_c, 3) * var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_i + pow(var_chaste_interface__intracellular_concentrations_and_buffer_equations__Na_i, 3) * var_chaste_interface__cleft_space_equations__Ca_c) * var_sodium_calcium_pump__d_NaCa); // nanoA + const double var_sodium_current__i_Na = pow(var_membrane__F, 2) * pow(var_chaste_interface__sodium_current_m_gate__m, 3) * (-1 + exp((-var_reversal_potentials__E_Na + var_chaste_interface__membrane__V) * var_membrane__F / (var_membrane__R * var_membrane__T))) * var_chaste_interface__cleft_space_equations__Na_c * var_chaste_interface__membrane__V * mParameters[3] * var_chaste_interface__sodium_current_h_gate__h1 * var_chaste_interface__sodium_current_h_gate__h2 / ((-1 + exp(var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * var_membrane__R * var_membrane__T); // nanoA + const double var_sodium_potassium_pump__K_m_K = 0.621; // millimolar + const double var_sodium_potassium_pump__K_m_Na = 5.46; // millimolar + const double var_sodium_potassium_pump__i_NaK_max = 0.21920000000000001; // nanoA + const double var_sodium_potassium_pump__i_NaK = 1.6000000000000001 * pow(var_chaste_interface__cleft_space_equations__K_c, 2) * pow(var_chaste_interface__intracellular_concentrations_and_buffer_equations__Na_i, 3) * var_sodium_potassium_pump__i_NaK_max / ((1.5 + exp(-1.5 - 0.025000000000000001 * var_chaste_interface__membrane__V)) * pow((var_chaste_interface__cleft_space_equations__K_c + var_sodium_potassium_pump__K_m_K), 2) * pow((var_chaste_interface__intracellular_concentrations_and_buffer_equations__Na_i + var_sodium_potassium_pump__K_m_Na), 3)); // nanoA + const double var_cleft_space_equations__Na_c_orig_deriv = (-var_chaste_interface__cleft_space_equations__Na_c + var_cleft_space_equations__Na_b) / var_cleft_space_equations__tau_p + (3 * var_sodium_calcium_pump__i_NaCa + 3 * var_sodium_potassium_pump__i_NaK + var_hyperpolarisation_activated_current__i_f_Na + var_linear_background_current__i_B_Na + var_sodium_current__i_Na) / (var_cleft_space_equations__V_c * var_membrane__F); // millimolar / second + const double d_dt_chaste_interface_var_cleft_space_equations__Na_c = 0.001 * var_cleft_space_equations__Na_c_orig_deriv; // millimolar / millisecond + + return d_dt_chaste_interface_var_cleft_space_equations__Na_c; + } + + double Dynamicdemir_model_1994FromCellMLGRL1::EvaluatePartialDerivative18(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -49.54105 + double var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_i = rY[1]; + // Units: millimolar; Initial value: 0.0003787018 + double var_chaste_interface__sodium_current_m_gate__m = rY[2]; + // Units: dimensionless; Initial value: 0.250113 + double var_chaste_interface__sodium_current_h_gate__h1 = rY[3]; + // Units: dimensionless; Initial value: 0.001386897 + double var_chaste_interface__sodium_current_h_gate__h2 = rY[4]; + // Units: dimensionless; Initial value: 0.002065463 + double var_chaste_interface__intracellular_concentrations_and_buffer_equations__Na_i = rY[12]; + // Units: millimolar; Initial value: 9.701621 + double var_chaste_interface__cleft_space_equations__Na_c = rY[18]; + // Units: millimolar; Initial value: 139.9988 + double var_chaste_interface__cleft_space_equations__Ca_c = rY[19]; + // Units: millimolar; Initial value: 2.00474 + + + const double var_x9 = pow(var_chaste_interface__cleft_space_equations__Na_c, 3); + const double var_x10 = var_x9 * var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_i; + const double var_x11 = pow(var_chaste_interface__intracellular_concentrations_and_buffer_equations__Na_i, 3); + const double var_x12 = var_x11 * var_chaste_interface__cleft_space_equations__Ca_c; + const double var_x13 = 1 + 0.0001 * var_x10 + 0.0001 * var_x12; + const double var_x14 = 1 / var_x13; + const double var_x15 = 0.018714999999999999 * var_chaste_interface__membrane__V; + const double var_x16 = exp(-var_x15); + const double var_x17 = var_x10 * var_x16; + const double var_x18 = exp(var_x15); + const double var_x19 = var_x12 * var_x18; + const double var_x33 = 0.037433890822745473 * var_chaste_interface__membrane__V; + const double var_x34 = 1 / var_chaste_interface__intracellular_concentrations_and_buffer_equations__Na_i; + const double var_x35 = var_x34 * var_chaste_interface__cleft_space_equations__Na_c; + const double var_x36 = exp(var_x33 - 1 * log(var_x35)); + const double var_x37 = -1 + var_x36; + const double var_x39 = exp(var_x33); + const double var_x40 = -1 + var_x39; + const double var_x41 = 1 / var_x40; + const double var_x42 = pow(var_chaste_interface__sodium_current_m_gate__m, 3); + const double var_x43 = var_x41 * var_x42 * mParameters[3] * var_chaste_interface__sodium_current_h_gate__h1 * var_chaste_interface__sodium_current_h_gate__h2; + const double var_x45 = var_x43 * var_chaste_interface__membrane__V; + const double var_x46 = var_x36 * var_x45; + const double var_x58 = pow(var_x13, (-2)); + const double var_x59 = var_x19 - var_x17; + const double var_x60 = var_x58 * var_x59; + const double var_x90 = 1 / var_chaste_interface__cleft_space_equations__Na_c; + const double var_x91 = pow(var_chaste_interface__cleft_space_equations__Na_c, 2) * var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_i; + const double var_x92 = var_x16 * var_x91; + const double var_x204 = 2.447717065593501e-6 * var_x14; + const double var_x205 = 2.4477170655935014e-10 * var_x60; + const double var_x206 = 78.710093573368496 * var_x46; + + partialF = -0.099999999999999992 - var_x206 - 9.3144911471392233e-5 * var_x90 - var_x204 * var_x92 - var_x205 * var_x91 + 78.710093573368496 * var_x37 * var_x41 * var_x42 * var_chaste_interface__membrane__V * mParameters[3] * var_chaste_interface__sodium_current_h_gate__h1 * var_chaste_interface__sodium_current_h_gate__h2; + } + else + { + const double y_save = rY[18]; + rY[18] += delta; + const double temp = EvaluateYDerivative18(var_chaste_interface__environment__time_converted, rY); + partialF = (temp-mEvalF[18])/delta; + rY[18] = y_save; + } + return partialF; + } + double Dynamicdemir_model_1994FromCellMLGRL1::EvaluateYDerivative19(double var_chaste_interface__environment__time_converted, std::vector& rY) + { + + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -49.54105 + double var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_i = rY[1]; + // Units: millimolar; Initial value: 0.0003787018 + double var_chaste_interface__L_type_Ca_channel_d_gate__d_L = rY[5]; + // Units: dimensionless; Initial value: 0.002572773 + double var_chaste_interface__L_type_Ca_channel_f_gate__f_L = rY[6]; + // Units: dimensionless; Initial value: 0.98651 + double var_chaste_interface__T_type_Ca_channel_d_gate__d_T = rY[7]; + // Units: dimensionless; Initial value: 0.02012114 + double var_chaste_interface__T_type_Ca_channel_f_gate__f_T = rY[8]; + // Units: dimensionless; Initial value: 0.1945111 + double var_chaste_interface__intracellular_concentrations_and_buffer_equations__Na_i = rY[12]; + // Units: millimolar; Initial value: 9.701621 + double var_chaste_interface__cleft_space_equations__Na_c = rY[18]; + // Units: millimolar; Initial value: 139.9988 + double var_chaste_interface__cleft_space_equations__Ca_c = rY[19]; + // Units: millimolar; Initial value: 2.00474 + + + // Mathematics + const double var_L_type_Ca_channel__E_Ca_L = 46.399999999999999; // millivolt + const double var_T_type_Ca_channel__E_Ca_T = 45; // millivolt + const double var_T_type_Ca_channel__g_Ca_T = 0.02521; // microS + const double var_calcium_pump_current__i_Ca_P_max = 0.02869; // nanoA + const double var_cleft_space_equations__Ca_b = 2; // millimolar + const double var_cleft_space_equations__Vol = 3.4970000000000001e-6; // microLitre + const double var_cleft_space_equations__V_c = 0.13600000000000001 * var_cleft_space_equations__Vol; // microLitre + const double var_cleft_space_equations__tau_p = 0.01; // second + const double var_calcium_pump_current__i_Ca_P = var_calcium_pump_current__i_Ca_P_max * var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_i / (0.00040000000000000002 + var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_i); // nanoA + const double var_linear_background_current__g_B_Ca = 3.6399999999999997e-5; // microS + const double var_membrane__F = 96485.341499999995; // coulomb_per_mole + const double var_membrane__R = 8314.4719999999998; // joule_per_kilomole_kelvin + const double var_membrane__T = 310; // kelvin + const double var_L_type_Ca_channel_d_gate__d_L_infinity = 1 / (1 + exp(-2.3500000000000001 - 0.16666666666666666 * var_chaste_interface__membrane__V)); // dimensionless + const double var_L_type_Ca_channel__i_Ca_L = (-var_L_type_Ca_channel__E_Ca_L + var_chaste_interface__membrane__V) * (0.095000000000000001 * var_L_type_Ca_channel_d_gate__d_L_infinity + var_chaste_interface__L_type_Ca_channel_d_gate__d_L * var_chaste_interface__L_type_Ca_channel_f_gate__f_L) * mParameters[0]; // nanoA + const double var_T_type_Ca_channel__i_Ca_T = (-var_T_type_Ca_channel__E_Ca_T + var_chaste_interface__membrane__V) * var_T_type_Ca_channel__g_Ca_T * var_chaste_interface__T_type_Ca_channel_d_gate__d_T * var_chaste_interface__T_type_Ca_channel_f_gate__f_T; // nanoA + const double var_reversal_potentials__E_Ca = 0.5 * var_membrane__R * var_membrane__T * log(var_chaste_interface__cleft_space_equations__Ca_c / var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_i) / var_membrane__F; // millivolt + const double var_linear_background_current__i_B_Ca = (-var_reversal_potentials__E_Ca + var_chaste_interface__membrane__V) * var_linear_background_current__g_B_Ca; // nanoA + const double var_sodium_calcium_pump__K_NaCa = 1.2480000000000001e-5; // nanoA + const double var_sodium_calcium_pump__d_NaCa = 0.0001; // dimensionless + const double var_sodium_calcium_pump__gamma = 0.5; // dimensionless + const double var_sodium_calcium_pump__i_NaCa = (pow(var_chaste_interface__intracellular_concentrations_and_buffer_equations__Na_i, 3) * var_chaste_interface__cleft_space_equations__Ca_c * exp(0.037429999999999998 * var_chaste_interface__membrane__V * var_sodium_calcium_pump__gamma) - pow(var_chaste_interface__cleft_space_equations__Na_c, 3) * var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_i * exp(0.037429999999999998 * (-1 + var_sodium_calcium_pump__gamma) * var_chaste_interface__membrane__V)) * var_sodium_calcium_pump__K_NaCa / (1 + (pow(var_chaste_interface__cleft_space_equations__Na_c, 3) * var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_i + pow(var_chaste_interface__intracellular_concentrations_and_buffer_equations__Na_i, 3) * var_chaste_interface__cleft_space_equations__Ca_c) * var_sodium_calcium_pump__d_NaCa); // nanoA + const double var_cleft_space_equations__Ca_c_orig_deriv = (-var_chaste_interface__cleft_space_equations__Ca_c + var_cleft_space_equations__Ca_b) / var_cleft_space_equations__tau_p + 0.5 * (-2 * var_sodium_calcium_pump__i_NaCa + var_L_type_Ca_channel__i_Ca_L + var_T_type_Ca_channel__i_Ca_T + var_calcium_pump_current__i_Ca_P + var_linear_background_current__i_B_Ca) / (var_cleft_space_equations__V_c * var_membrane__F); // millimolar / second + const double d_dt_chaste_interface_var_cleft_space_equations__Ca_c = 0.001 * var_cleft_space_equations__Ca_c_orig_deriv; // millimolar / millisecond + + return d_dt_chaste_interface_var_cleft_space_equations__Ca_c; + } + + double Dynamicdemir_model_1994FromCellMLGRL1::EvaluatePartialDerivative19(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -49.54105 + double var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_i = rY[1]; + // Units: millimolar; Initial value: 0.0003787018 + double var_chaste_interface__intracellular_concentrations_and_buffer_equations__Na_i = rY[12]; + // Units: millimolar; Initial value: 9.701621 + double var_chaste_interface__cleft_space_equations__Na_c = rY[18]; + // Units: millimolar; Initial value: 139.9988 + double var_chaste_interface__cleft_space_equations__Ca_c = rY[19]; + // Units: millimolar; Initial value: 2.00474 + + + const double var_x9 = pow(var_chaste_interface__cleft_space_equations__Na_c, 3); + const double var_x10 = var_x9 * var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_i; + const double var_x11 = pow(var_chaste_interface__intracellular_concentrations_and_buffer_equations__Na_i, 3); + const double var_x12 = var_x11 * var_chaste_interface__cleft_space_equations__Ca_c; + const double var_x13 = 1 + 0.0001 * var_x10 + 0.0001 * var_x12; + const double var_x14 = 1 / var_x13; + const double var_x15 = 0.018714999999999999 * var_chaste_interface__membrane__V; + const double var_x16 = exp(-var_x15); + const double var_x17 = var_x10 * var_x16; + const double var_x18 = exp(var_x15); + const double var_x19 = var_x12 * var_x18; + const double var_x58 = pow(var_x13, (-2)); + const double var_x59 = var_x19 - var_x17; + const double var_x93 = 1 / var_chaste_interface__cleft_space_equations__Ca_c; + const double var_x94 = var_x11 * var_x18; + const double var_x208 = 2.7196856284372236e-7 * var_x14; + + partialF = -0.099999999999999992 - 5.2976168399354324e-6 * var_x93 - var_x208 * var_x94 + 2.7196856284372237e-11 * var_x11 * var_x58 * var_x59; + } + else + { + const double y_save = rY[19]; + rY[19] += delta; + const double temp = EvaluateYDerivative19(var_chaste_interface__environment__time_converted, rY); + partialF = (temp-mEvalF[19])/delta; + rY[19] = y_save; + } + return partialF; + } + double Dynamicdemir_model_1994FromCellMLGRL1::EvaluateYDerivative20(double var_chaste_interface__environment__time_converted, std::vector& rY) + { + + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -49.54105 + double var_chaste_interface__delayed_rectifying_potassium_current_P_a_gate__P_a = rY[9]; + // Units: dimensionless; Initial value: 0.02302278 + double var_chaste_interface__delayed_rectifying_potassium_current_P_i_gate__P_i = rY[10]; + // Units: dimensionless; Initial value: 0.3777728 + double var_chaste_interface__hyperpolarisation_activated_current_y_gate__y = rY[11]; + // Units: dimensionless; Initial value: 0.09227776 + double var_chaste_interface__intracellular_concentrations_and_buffer_equations__Na_i = rY[12]; + // Units: millimolar; Initial value: 9.701621 + double var_chaste_interface__intracellular_concentrations_and_buffer_equations__K_i = rY[13]; + // Units: millimolar; Initial value: 140.7347 + double var_chaste_interface__cleft_space_equations__K_c = rY[20]; + // Units: millimolar; Initial value: 5.389014 + + + // Mathematics + const double var_cleft_space_equations__K_b = 5.4000000000000004; // millimolar + const double var_cleft_space_equations__Vol = 3.4970000000000001e-6; // microLitre + const double var_cleft_space_equations__V_c = 0.13600000000000001 * var_cleft_space_equations__Vol; // microLitre + const double var_cleft_space_equations__tau_p = 0.01; // second + const double var_delayed_rectifying_potassium_current__g_K = pow(var_cleft_space_equations__K_b, 0.58999999999999997) * mParameters[2]; // microS + const double var_linear_background_current__g_B_K = 6.9400000000000006e-5; // microS + const double var_membrane__F = 96485.341499999995; // coulomb_per_mole + const double var_membrane__R = 8314.4719999999998; // joule_per_kilomole_kelvin + const double var_membrane__T = 310; // kelvin + const double var_hyperpolarisation_activated_current__i_f_K = pow(var_chaste_interface__hyperpolarisation_activated_current_y_gate__y, 2) * (85 + var_chaste_interface__membrane__V) * mParameters[4]; // nanoA + const double var_reversal_potentials__E_K = var_membrane__R * var_membrane__T * log(var_chaste_interface__cleft_space_equations__K_c / var_chaste_interface__intracellular_concentrations_and_buffer_equations__K_i) / var_membrane__F; // millivolt + const double var_delayed_rectifying_potassium_current__i_K = (-var_reversal_potentials__E_K + var_chaste_interface__membrane__V) * var_delayed_rectifying_potassium_current__g_K * var_chaste_interface__delayed_rectifying_potassium_current_P_a_gate__P_a * var_chaste_interface__delayed_rectifying_potassium_current_P_i_gate__P_i; // nanoA + const double var_linear_background_current__i_B_K = (-var_reversal_potentials__E_K + var_chaste_interface__membrane__V) * var_linear_background_current__g_B_K; // nanoA + const double var_sodium_potassium_pump__K_m_K = 0.621; // millimolar + const double var_sodium_potassium_pump__K_m_Na = 5.46; // millimolar + const double var_sodium_potassium_pump__i_NaK_max = 0.21920000000000001; // nanoA + const double var_sodium_potassium_pump__i_NaK = 1.6000000000000001 * pow(var_chaste_interface__cleft_space_equations__K_c, 2) * pow(var_chaste_interface__intracellular_concentrations_and_buffer_equations__Na_i, 3) * var_sodium_potassium_pump__i_NaK_max / ((1.5 + exp(-1.5 - 0.025000000000000001 * var_chaste_interface__membrane__V)) * pow((var_chaste_interface__cleft_space_equations__K_c + var_sodium_potassium_pump__K_m_K), 2) * pow((var_chaste_interface__intracellular_concentrations_and_buffer_equations__Na_i + var_sodium_potassium_pump__K_m_Na), 3)); // nanoA + const double var_cleft_space_equations__K_c_orig_deriv = (-var_chaste_interface__cleft_space_equations__K_c + var_cleft_space_equations__K_b) / var_cleft_space_equations__tau_p + (-2 * var_sodium_potassium_pump__i_NaK + var_delayed_rectifying_potassium_current__i_K + var_hyperpolarisation_activated_current__i_f_K + var_linear_background_current__i_B_K) / (var_cleft_space_equations__V_c * var_membrane__F); // millimolar / second + const double d_dt_chaste_interface_var_cleft_space_equations__K_c = 0.001 * var_cleft_space_equations__K_c_orig_deriv; // millimolar / millisecond + + return d_dt_chaste_interface_var_cleft_space_equations__K_c; + } + + double Dynamicdemir_model_1994FromCellMLGRL1::EvaluatePartialDerivative20(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -49.54105 + double var_chaste_interface__delayed_rectifying_potassium_current_P_a_gate__P_a = rY[9]; + // Units: dimensionless; Initial value: 0.02302278 + double var_chaste_interface__delayed_rectifying_potassium_current_P_i_gate__P_i = rY[10]; + // Units: dimensionless; Initial value: 0.3777728 + double var_chaste_interface__intracellular_concentrations_and_buffer_equations__Na_i = rY[12]; + // Units: millimolar; Initial value: 9.701621 + double var_chaste_interface__cleft_space_equations__K_c = rY[20]; + // Units: millimolar; Initial value: 5.389014 + + + const double var_x11 = pow(var_chaste_interface__intracellular_concentrations_and_buffer_equations__Na_i, 3); + const double var_x21 = mParameters[2] * var_chaste_interface__delayed_rectifying_potassium_current_P_i_gate__P_i; + const double var_x22 = var_x21 * var_chaste_interface__delayed_rectifying_potassium_current_P_a_gate__P_a; + const double var_x25 = exp(-1.5 - 0.025000000000000001 * var_chaste_interface__membrane__V); + const double var_x26 = 0.621 + var_chaste_interface__cleft_space_equations__K_c; + const double var_x27 = pow(var_x26, (-2)); + const double var_x28 = pow(var_chaste_interface__cleft_space_equations__K_c, 2); + const double var_x29 = 1 + 0.18315018315018314 * var_chaste_interface__intracellular_concentrations_and_buffer_equations__Na_i; + const double var_x30 = pow(var_x29, (-3)); + const double var_x84 = 1 / (1.5 + var_x25); + const double var_x95 = 1 / var_chaste_interface__cleft_space_equations__K_c; + const double var_x96 = var_x11 * var_x30 * var_x84; + const double var_x98 = pow(var_x26, (-3)); + const double var_x100 = var_x27 * var_chaste_interface__cleft_space_equations__K_c; + const double var_x211 = 1.5745319219196114 * var_x22; + + partialF = -0.099999999999999992 - 4.040160535071638e-5 * var_x95 - var_x211 * var_x95 - 0.00018782211067427598 * var_x100 * var_x96 + 0.00018782211067427598 * var_x11 * var_x28 * var_x30 * var_x84 * var_x98; + } + else + { + const double y_save = rY[20]; + rY[20] += delta; + const double temp = EvaluateYDerivative20(var_chaste_interface__environment__time_converted, rY); + partialF = (temp-mEvalF[20])/delta; + rY[20] = y_save; + } + return partialF; + } + double Dynamicdemir_model_1994FromCellMLGRL1::EvaluateYDerivative21(double var_chaste_interface__environment__time_converted, std::vector& rY) + { + + double var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_i = rY[1]; + // Units: millimolar; Initial value: 0.0003787018 + double var_chaste_interface__SR_Ca_uptake_and_release__Ca_up = rY[21]; + // Units: millimolar; Initial value: 16.95311 + double var_chaste_interface__SR_Ca_uptake_and_release__Ca_rel = rY[22]; + // Units: millimolar; Initial value: 16.85024 + + + // Mathematics + const double var_SR_Ca_uptake_and_release__alpha_up = 0.080000000000000002; // nanoA + const double var_SR_Ca_uptake_and_release__beta_up = 0.071999999999999995; // nanoA + const double var_SR_Ca_uptake_and_release__k_SRCa = 22; // millimolar + const double var_SR_Ca_uptake_and_release__k_cyca = 5.0000000000000002e-5; // millimolar + const double var_SR_Ca_uptake_and_release__k_xcs = 0.90000000000000002; // dimensionless + const double var_SR_Ca_uptake_and_release__K1 = var_SR_Ca_uptake_and_release__k_cyca * var_SR_Ca_uptake_and_release__k_xcs / var_SR_Ca_uptake_and_release__k_SRCa; // dimensionless + const double var_cleft_space_equations__Vol = 3.4970000000000001e-6; // microLitre + const double var_SR_Ca_uptake_and_release__K2 = var_chaste_interface__SR_Ca_uptake_and_release__Ca_up * var_SR_Ca_uptake_and_release__K1 + var_SR_Ca_uptake_and_release__k_cyca * var_SR_Ca_uptake_and_release__k_xcs + var_SR_Ca_uptake_and_release__k_cyca + var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_i; // millimolar + const double var_SR_Ca_uptake_and_release__i_up = (var_SR_Ca_uptake_and_release__alpha_up * var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_i - var_chaste_interface__SR_Ca_uptake_and_release__Ca_up * var_SR_Ca_uptake_and_release__K1 * var_SR_Ca_uptake_and_release__beta_up) / var_SR_Ca_uptake_and_release__K2; // nanoA + const double var_intracellular_concentrations_and_buffer_equations__V_i = 0.46500000000000002 * var_cleft_space_equations__Vol; // microLitre + const double var_SR_Ca_uptake_and_release__V_up = 0.01166 * var_intracellular_concentrations_and_buffer_equations__V_i; // microLitre + const double var_membrane__F = 96485.341499999995; // coulomb_per_mole + const double var_SR_Ca_uptake_and_release__i_tr = 31.162355874104083 * (-var_chaste_interface__SR_Ca_uptake_and_release__Ca_rel + var_chaste_interface__SR_Ca_uptake_and_release__Ca_up) * var_SR_Ca_uptake_and_release__V_up * var_membrane__F; // nanoA + const double var_SR_Ca_uptake_and_release__Ca_up_orig_deriv = 0.5 * (-var_SR_Ca_uptake_and_release__i_tr + var_SR_Ca_uptake_and_release__i_up) / (var_SR_Ca_uptake_and_release__V_up * var_membrane__F); // millimolar / second + const double d_dt_chaste_interface_var_SR_Ca_uptake_and_release__Ca_up = 0.001 * var_SR_Ca_uptake_and_release__Ca_up_orig_deriv; // millimolar / millisecond + + return d_dt_chaste_interface_var_SR_Ca_uptake_and_release__Ca_up; + } + + double Dynamicdemir_model_1994FromCellMLGRL1::EvaluatePartialDerivative21(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_i = rY[1]; + // Units: millimolar; Initial value: 0.0003787018 + double var_chaste_interface__SR_Ca_uptake_and_release__Ca_up = rY[21]; + // Units: millimolar; Initial value: 16.95311 + + + const double var_x104 = 9.5000000000000005e-5 + 2.0454545454545457e-6 * var_chaste_interface__SR_Ca_uptake_and_release__Ca_up + var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_i; + const double var_x105 = 1 / var_x104; + const double var_x106 = pow(var_x104, (-2)); + const double var_x107 = 0.080000000000000002 * var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_i - 1.4727272727272728e-7 * var_chaste_interface__SR_Ca_uptake_and_release__Ca_up; + const double var_x113 = var_x106 * var_x107; + + partialF = -0.015581177937052042 - 4.0251665946738841e-8 * var_x105 - 5.5905091592692838e-7 * var_x113; + } + else + { + const double y_save = rY[21]; + rY[21] += delta; + const double temp = EvaluateYDerivative21(var_chaste_interface__environment__time_converted, rY); + partialF = (temp-mEvalF[21])/delta; + rY[21] = y_save; + } + return partialF; + } + double Dynamicdemir_model_1994FromCellMLGRL1::EvaluateYDerivative22(double var_chaste_interface__environment__time_converted, std::vector& rY) + { + + double var_chaste_interface__SR_Ca_uptake_and_release__Ca_up = rY[21]; + // Units: millimolar; Initial value: 16.95311 + double var_chaste_interface__SR_Ca_uptake_and_release__Ca_rel = rY[22]; + // Units: millimolar; Initial value: 16.85024 + double var_chaste_interface__SR_Ca_uptake_and_release__Ca_Calse = rY[23]; + // Units: dimensionless; Initial value: 0.9528726 + double var_chaste_interface__SR_Ca_uptake_and_release__F2 = rY[25]; + // Units: dimensionless; Initial value: 0.0007594214 + + + // Mathematics + const double var_SR_Ca_uptake_and_release__alpha_rel = 0.5; // nanoA_per_millimolar + const double var_SR_Ca_uptake_and_release__i_rel = pow(var_chaste_interface__SR_Ca_uptake_and_release__F2, 2) * var_chaste_interface__SR_Ca_uptake_and_release__Ca_rel * var_SR_Ca_uptake_and_release__alpha_rel / pow((0.25 + var_chaste_interface__SR_Ca_uptake_and_release__F2), 2); // nanoA + const double var_SR_Ca_uptake_and_release__phi_Calse = -641 * var_chaste_interface__SR_Ca_uptake_and_release__Ca_Calse + 770 * (1 - var_chaste_interface__SR_Ca_uptake_and_release__Ca_Calse) * var_chaste_interface__SR_Ca_uptake_and_release__Ca_rel; // per_second + const double var_cleft_space_equations__Vol = 3.4970000000000001e-6; // microLitre + const double var_intracellular_concentrations_and_buffer_equations__V_i = 0.46500000000000002 * var_cleft_space_equations__Vol; // microLitre + const double var_SR_Ca_uptake_and_release__V_rel = 0.0012960000000000001 * var_intracellular_concentrations_and_buffer_equations__V_i; // microLitre + const double var_SR_Ca_uptake_and_release__V_up = 0.01166 * var_intracellular_concentrations_and_buffer_equations__V_i; // microLitre + const double var_membrane__F = 96485.341499999995; // coulomb_per_mole + const double var_SR_Ca_uptake_and_release__i_tr = 31.162355874104083 * (-var_chaste_interface__SR_Ca_uptake_and_release__Ca_rel + var_chaste_interface__SR_Ca_uptake_and_release__Ca_up) * var_SR_Ca_uptake_and_release__V_up * var_membrane__F; // nanoA + const double var_SR_Ca_uptake_and_release__Ca_rel_orig_deriv = -11.48 * var_SR_Ca_uptake_and_release__phi_Calse + 0.5 * (-var_SR_Ca_uptake_and_release__i_rel + var_SR_Ca_uptake_and_release__i_tr) / (var_SR_Ca_uptake_and_release__V_rel * var_membrane__F); // millimolar / second + const double d_dt_chaste_interface_var_SR_Ca_uptake_and_release__Ca_rel = 0.001 * var_SR_Ca_uptake_and_release__Ca_rel_orig_deriv; // millimolar / millisecond + + return d_dt_chaste_interface_var_SR_Ca_uptake_and_release__Ca_rel; + } + + double Dynamicdemir_model_1994FromCellMLGRL1::EvaluatePartialDerivative22(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__SR_Ca_uptake_and_release__Ca_Calse = rY[23]; + // Units: dimensionless; Initial value: 0.9528726 + double var_chaste_interface__SR_Ca_uptake_and_release__F2 = rY[25]; + // Units: dimensionless; Initial value: 0.0007594214 + + + const double var_x114 = 0.25 + var_chaste_interface__SR_Ca_uptake_and_release__F2; + const double var_x115 = pow(var_x114, (-2)); + const double var_x116 = pow(var_chaste_interface__SR_Ca_uptake_and_release__F2, 2); + const double var_x117 = var_x115 * var_x116; + + partialF = -8.979782511378108 + 8.8396000000000008 * var_chaste_interface__SR_Ca_uptake_and_release__Ca_Calse - 1.2294902345128229 * var_x117; + } + else + { + const double y_save = rY[22]; + rY[22] += delta; + const double temp = EvaluateYDerivative22(var_chaste_interface__environment__time_converted, rY); + partialF = (temp-mEvalF[22])/delta; + rY[22] = y_save; + } + return partialF; + } + double Dynamicdemir_model_1994FromCellMLGRL1::EvaluateYDerivative23(double var_chaste_interface__environment__time_converted, std::vector& rY) + { + + double var_chaste_interface__SR_Ca_uptake_and_release__Ca_rel = rY[22]; + // Units: millimolar; Initial value: 16.85024 + double var_chaste_interface__SR_Ca_uptake_and_release__Ca_Calse = rY[23]; + // Units: dimensionless; Initial value: 0.9528726 + + + // Mathematics + const double var_SR_Ca_uptake_and_release__phi_Calse = -641 * var_chaste_interface__SR_Ca_uptake_and_release__Ca_Calse + 770 * (1 - var_chaste_interface__SR_Ca_uptake_and_release__Ca_Calse) * var_chaste_interface__SR_Ca_uptake_and_release__Ca_rel; // per_second + const double var_SR_Ca_uptake_and_release__Ca_Calse_orig_deriv = var_SR_Ca_uptake_and_release__phi_Calse; // 1 / second + const double d_dt_chaste_interface_var_SR_Ca_uptake_and_release__Ca_Calse = 0.001 * var_SR_Ca_uptake_and_release__Ca_Calse_orig_deriv; // 1 / millisecond + + return d_dt_chaste_interface_var_SR_Ca_uptake_and_release__Ca_Calse; + } + + double Dynamicdemir_model_1994FromCellMLGRL1::EvaluatePartialDerivative23(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__SR_Ca_uptake_and_release__Ca_rel = rY[22]; + // Units: millimolar; Initial value: 16.85024 + + + + partialF = -0.64100000000000001 - 0.77000000000000002 * var_chaste_interface__SR_Ca_uptake_and_release__Ca_rel; + } + else + { + const double y_save = rY[23]; + rY[23] += delta; + const double temp = EvaluateYDerivative23(var_chaste_interface__environment__time_converted, rY); + partialF = (temp-mEvalF[23])/delta; + rY[23] = y_save; + } + return partialF; + } + double Dynamicdemir_model_1994FromCellMLGRL1::EvaluateYDerivative24(double var_chaste_interface__environment__time_converted, std::vector& rY) + { + + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -49.54105 + double var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_i = rY[1]; + // Units: millimolar; Initial value: 0.0003787018 + double var_chaste_interface__SR_Ca_uptake_and_release__F1 = rY[24]; + // Units: dimensionless; Initial value: 0.1133251 + double var_chaste_interface__SR_Ca_uptake_and_release__F3 = rY[26]; + // Units: dimensionless; Initial value: 0.8859153 + + + // Mathematics + const double var_SR_Ca_uptake_and_release__k_rel = 0.0040000000000000001; // millimolar + const double var_SR_Ca_uptake_and_release__r_act = 240 * exp(-3.2000000000000002 + 0.080000000000000002 * var_chaste_interface__membrane__V) + 240 * pow(var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_i, 4) / pow((var_SR_Ca_uptake_and_release__k_rel + var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_i), 4); // per_second + const double var_SR_Ca_uptake_and_release__F1_orig_deriv = 0.95999999999999996 * var_chaste_interface__SR_Ca_uptake_and_release__F3 - var_chaste_interface__SR_Ca_uptake_and_release__F1 * var_SR_Ca_uptake_and_release__r_act; // 1 / second + const double d_dt_chaste_interface_var_SR_Ca_uptake_and_release__F1 = 0.001 * var_SR_Ca_uptake_and_release__F1_orig_deriv; // 1 / millisecond + + return d_dt_chaste_interface_var_SR_Ca_uptake_and_release__F1; + } + + double Dynamicdemir_model_1994FromCellMLGRL1::EvaluatePartialDerivative24(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -49.54105 + double var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_i = rY[1]; + // Units: millimolar; Initial value: 0.0003787018 + + + const double var_x213 = exp(-3.2000000000000002 + 0.080000000000000002 * var_chaste_interface__membrane__V); + const double var_x215 = 0.0040000000000000001 + var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_i; + const double var_x216 = pow(var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_i, 4); + const double var_x217 = pow(var_x215, (-4)); + const double var_x219 = 0.23999999999999999 * var_x216 * var_x217; + const double var_x220 = var_x219 + 0.23999999999999999 * var_x213; + + partialF = -var_x220; + } + else + { + const double y_save = rY[24]; + rY[24] += delta; + const double temp = EvaluateYDerivative24(var_chaste_interface__environment__time_converted, rY); + partialF = (temp-mEvalF[24])/delta; + rY[24] = y_save; + } + return partialF; + } + double Dynamicdemir_model_1994FromCellMLGRL1::EvaluateYDerivative25(double var_chaste_interface__environment__time_converted, std::vector& rY) + { + + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -49.54105 + double var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_i = rY[1]; + // Units: millimolar; Initial value: 0.0003787018 + double var_chaste_interface__SR_Ca_uptake_and_release__F1 = rY[24]; + // Units: dimensionless; Initial value: 0.1133251 + double var_chaste_interface__SR_Ca_uptake_and_release__F2 = rY[25]; + // Units: dimensionless; Initial value: 0.0007594214 + + + // Mathematics + const double var_SR_Ca_uptake_and_release__k_rel = 0.0040000000000000001; // millimolar + const double var_SR_Ca_uptake_and_release__r_inact = 40 + 240 * pow(var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_i, 4) / pow((var_SR_Ca_uptake_and_release__k_rel + var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_i), 4); // per_second + const double var_SR_Ca_uptake_and_release__r_act = 240 * exp(-3.2000000000000002 + 0.080000000000000002 * var_chaste_interface__membrane__V) + 240 * pow(var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_i, 4) / pow((var_SR_Ca_uptake_and_release__k_rel + var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_i), 4); // per_second + const double var_SR_Ca_uptake_and_release__F2_orig_deriv = var_chaste_interface__SR_Ca_uptake_and_release__F1 * var_SR_Ca_uptake_and_release__r_act - var_chaste_interface__SR_Ca_uptake_and_release__F2 * var_SR_Ca_uptake_and_release__r_inact; // 1 / second + const double d_dt_chaste_interface_var_SR_Ca_uptake_and_release__F2 = 0.001 * var_SR_Ca_uptake_and_release__F2_orig_deriv; // 1 / millisecond + + return d_dt_chaste_interface_var_SR_Ca_uptake_and_release__F2; + } + + double Dynamicdemir_model_1994FromCellMLGRL1::EvaluatePartialDerivative25(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_i = rY[1]; + // Units: millimolar; Initial value: 0.0003787018 + + + const double var_x215 = 0.0040000000000000001 + var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_i; + const double var_x216 = pow(var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_i, 4); + const double var_x217 = pow(var_x215, (-4)); + const double var_x219 = 0.23999999999999999 * var_x216 * var_x217; + const double var_x222 = 0.040000000000000001 + var_x219; + + partialF = -var_x222; + } + else + { + const double y_save = rY[25]; + rY[25] += delta; + const double temp = EvaluateYDerivative25(var_chaste_interface__environment__time_converted, rY); + partialF = (temp-mEvalF[25])/delta; + rY[25] = y_save; + } + return partialF; + } + double Dynamicdemir_model_1994FromCellMLGRL1::EvaluateYDerivative26(double var_chaste_interface__environment__time_converted, std::vector& rY) + { + + double var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_i = rY[1]; + // Units: millimolar; Initial value: 0.0003787018 + double var_chaste_interface__SR_Ca_uptake_and_release__F2 = rY[25]; + // Units: dimensionless; Initial value: 0.0007594214 + double var_chaste_interface__SR_Ca_uptake_and_release__F3 = rY[26]; + // Units: dimensionless; Initial value: 0.8859153 + + + // Mathematics + const double var_SR_Ca_uptake_and_release__k_rel = 0.0040000000000000001; // millimolar + const double var_SR_Ca_uptake_and_release__r_inact = 40 + 240 * pow(var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_i, 4) / pow((var_SR_Ca_uptake_and_release__k_rel + var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_i), 4); // per_second + const double var_SR_Ca_uptake_and_release__F3_orig_deriv = -0.95999999999999996 * var_chaste_interface__SR_Ca_uptake_and_release__F3 + var_chaste_interface__SR_Ca_uptake_and_release__F2 * var_SR_Ca_uptake_and_release__r_inact; // 1 / second + const double d_dt_chaste_interface_var_SR_Ca_uptake_and_release__F3 = 0.001 * var_SR_Ca_uptake_and_release__F3_orig_deriv; // 1 / millisecond + + return d_dt_chaste_interface_var_SR_Ca_uptake_and_release__F3; + } + + double Dynamicdemir_model_1994FromCellMLGRL1::EvaluatePartialDerivative26(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + + + + partialF = -0.00095999999999999992; + } + else + { + const double y_save = rY[26]; + rY[26] += delta; + const double temp = EvaluateYDerivative26(var_chaste_interface__environment__time_converted, rY); + partialF = (temp-mEvalF[26])/delta; + rY[26] = y_save; + } + return partialF; + } + + std::vector Dynamicdemir_model_1994FromCellMLGRL1::ComputeDerivedQuantities(double var_chaste_interface__environment__time_converted, const std::vector & rY) + { + // Inputs: + // Time units: millisecond + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -49.54105 + double var_chaste_interface__sodium_current_m_gate__m = rY[2]; + // Units: dimensionless; Initial value: 0.250113 + double var_chaste_interface__sodium_current_h_gate__h1 = rY[3]; + // Units: dimensionless; Initial value: 0.001386897 + double var_chaste_interface__sodium_current_h_gate__h2 = rY[4]; + // Units: dimensionless; Initial value: 0.002065463 + double var_chaste_interface__L_type_Ca_channel_d_gate__d_L = rY[5]; + // Units: dimensionless; Initial value: 0.002572773 + double var_chaste_interface__L_type_Ca_channel_f_gate__f_L = rY[6]; + // Units: dimensionless; Initial value: 0.98651 + double var_chaste_interface__delayed_rectifying_potassium_current_P_a_gate__P_a = rY[9]; + // Units: dimensionless; Initial value: 0.02302278 + double var_chaste_interface__delayed_rectifying_potassium_current_P_i_gate__P_i = rY[10]; + // Units: dimensionless; Initial value: 0.3777728 + double var_chaste_interface__hyperpolarisation_activated_current_y_gate__y = rY[11]; + // Units: dimensionless; Initial value: 0.09227776 + double var_chaste_interface__intracellular_concentrations_and_buffer_equations__Na_i = rY[12]; + // Units: millimolar; Initial value: 9.701621 + double var_chaste_interface__intracellular_concentrations_and_buffer_equations__K_i = rY[13]; + // Units: millimolar; Initial value: 140.7347 + double var_chaste_interface__cleft_space_equations__Na_c = rY[18]; + // Units: millimolar; Initial value: 139.9988 + double var_chaste_interface__cleft_space_equations__K_c = rY[20]; + // Units: millimolar; Initial value: 5.389014 + + // Mathematics + const double var_L_type_Ca_channel__E_Ca_L = 46.399999999999999; // millivolt + const double var_cleft_space_equations__K_b = 5.4000000000000004; // millimolar + const double var_delayed_rectifying_potassium_current__g_K = pow(var_cleft_space_equations__K_b, 0.58999999999999997) * mParameters[2]; // microS + const double var_membrane__F = 96485.341499999995; // coulomb_per_mole + const double var_membrane__R = 8314.4719999999998; // joule_per_kilomole_kelvin + const double var_membrane__T = 310; // kelvin + const double var_L_type_Ca_channel_d_gate__d_L_infinity = 1 / (1 + exp(-2.3500000000000001 - 0.16666666666666666 * var_chaste_interface__membrane__V)); // dimensionless + const double var_L_type_Ca_channel__i_Ca_L = (-var_L_type_Ca_channel__E_Ca_L + var_chaste_interface__membrane__V) * (0.095000000000000001 * var_L_type_Ca_channel_d_gate__d_L_infinity + var_chaste_interface__L_type_Ca_channel_d_gate__d_L * var_chaste_interface__L_type_Ca_channel_f_gate__f_L) * mParameters[0]; // nanoA + const double var_L_type_Ca_channel__i_Ca_L_converted = 0.001 * HeartConfig::Instance()->GetCapacitance() * var_L_type_Ca_channel__i_Ca_L / mParameters[1]; // uA_per_cm2 + const double var_hyperpolarisation_activated_current__i_f_K = pow(var_chaste_interface__hyperpolarisation_activated_current_y_gate__y, 2) * (85 + var_chaste_interface__membrane__V) * mParameters[4]; // nanoA + const double var_hyperpolarisation_activated_current__i_f_Na = pow(var_chaste_interface__hyperpolarisation_activated_current_y_gate__y, 2) * (-75 + var_chaste_interface__membrane__V) * mParameters[5]; // nanoA + const double var_hyperpolarisation_activated_current__i_f = var_hyperpolarisation_activated_current__i_f_K + var_hyperpolarisation_activated_current__i_f_Na; // nanoA + const double var_hyperpolarisation_activated_current__i_f_converted = 0.001 * HeartConfig::Instance()->GetCapacitance() * var_hyperpolarisation_activated_current__i_f / mParameters[1]; // uA_per_cm2 + const double var_reversal_potentials__E_K = var_membrane__R * var_membrane__T * log(var_chaste_interface__cleft_space_equations__K_c / var_chaste_interface__intracellular_concentrations_and_buffer_equations__K_i) / var_membrane__F; // millivolt + const double var_delayed_rectifying_potassium_current__i_K = (-var_reversal_potentials__E_K + var_chaste_interface__membrane__V) * var_delayed_rectifying_potassium_current__g_K * var_chaste_interface__delayed_rectifying_potassium_current_P_a_gate__P_a * var_chaste_interface__delayed_rectifying_potassium_current_P_i_gate__P_i; // nanoA + const double var_delayed_rectifying_potassium_current__i_K_converted = 0.001 * HeartConfig::Instance()->GetCapacitance() * var_delayed_rectifying_potassium_current__i_K / mParameters[1]; // uA_per_cm2 + const double var_reversal_potentials__E_Na = var_membrane__R * var_membrane__T * log(var_chaste_interface__cleft_space_equations__Na_c / var_chaste_interface__intracellular_concentrations_and_buffer_equations__Na_i) / var_membrane__F; // millivolt + const double var_sodium_current__i_Na = pow(var_membrane__F, 2) * pow(var_chaste_interface__sodium_current_m_gate__m, 3) * (-1 + exp((-var_reversal_potentials__E_Na + var_chaste_interface__membrane__V) * var_membrane__F / (var_membrane__R * var_membrane__T))) * var_chaste_interface__cleft_space_equations__Na_c * var_chaste_interface__membrane__V * mParameters[3] * var_chaste_interface__sodium_current_h_gate__h1 * var_chaste_interface__sodium_current_h_gate__h2 / ((-1 + exp(var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * var_membrane__R * var_membrane__T); // nanoA + const double var_sodium_current__i_Na_converted = 0.001 * HeartConfig::Instance()->GetCapacitance() * var_sodium_current__i_Na / mParameters[1]; // uA_per_cm2 + + std::vector dqs(7); + dqs[0] = var_L_type_Ca_channel__i_Ca_L_converted; + dqs[1] = var_delayed_rectifying_potassium_current__i_K_converted; + dqs[2] = var_sodium_current__i_Na_converted; + dqs[3] = var_hyperpolarisation_activated_current__i_f_converted; + dqs[4] = var_hyperpolarisation_activated_current__i_f_K; + dqs[5] = var_hyperpolarisation_activated_current__i_f_Na; + dqs[6] = var_chaste_interface__environment__time_converted; + return dqs; + } + +template<> +void OdeSystemInformation::Initialise(void) +{ + this->mSystemName = "demir_model_1994"; + this->mFreeVariableName = "time"; + this->mFreeVariableUnits = "millisecond"; + + // rY[0]: + this->mVariableNames.push_back("membrane_voltage"); + this->mVariableUnits.push_back("millivolt"); + this->mInitialConditions.push_back(-49.54105); + + // rY[1]: + this->mVariableNames.push_back("cytosolic_calcium_concentration"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(0.0003787018); + + // rY[2]: + this->mVariableNames.push_back("sodium_current_m_gate__m"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.250113); + + // rY[3]: + this->mVariableNames.push_back("sodium_current_h_gate__h1"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.001386897); + + // rY[4]: + this->mVariableNames.push_back("sodium_current_h_gate__h2"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.002065463); + + // rY[5]: + this->mVariableNames.push_back("L_type_Ca_channel_d_gate__d_L"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.002572773); + + // rY[6]: + this->mVariableNames.push_back("L_type_Ca_channel_f_gate__f_L"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.98651); + + // rY[7]: + this->mVariableNames.push_back("T_type_Ca_channel_d_gate__d_T"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.02012114); + + // rY[8]: + this->mVariableNames.push_back("T_type_Ca_channel_f_gate__f_T"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.1945111); + + // rY[9]: + this->mVariableNames.push_back("delayed_rectifying_potassium_current_P_a_gate__P_a"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.02302278); + + // rY[10]: + this->mVariableNames.push_back("delayed_rectifying_potassium_current_P_i_gate__P_i"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.3777728); + + // rY[11]: + this->mVariableNames.push_back("hyperpolarisation_activated_current_y_gate__y"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.09227776); + + // rY[12]: + this->mVariableNames.push_back("cytosolic_sodium_concentration"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(9.701621); + + // rY[13]: + this->mVariableNames.push_back("cytosolic_potassium_concentration"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(140.7347); + + // rY[14]: + this->mVariableNames.push_back("intracellular_concentrations_and_buffer_equations__Ca_Calmod"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.1411678); + + // rY[15]: + this->mVariableNames.push_back("intracellular_concentrations_and_buffer_equations__Ca_Trop"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.07331396); + + // rY[16]: + this->mVariableNames.push_back("intracellular_concentrations_and_buffer_equations__Ca_Mg_Trop"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.7618549); + + // rY[17]: + this->mVariableNames.push_back("intracellular_concentrations_and_buffer_equations__Mg_Mg_Trop"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.2097049); + + // rY[18]: + this->mVariableNames.push_back("extracellular_sodium_concentration"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(139.9988); + + // rY[19]: + this->mVariableNames.push_back("extracellular_calcium_concentration"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(2.00474); + + // rY[20]: + this->mVariableNames.push_back("extracellular_potassium_concentration"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(5.389014); + + // rY[21]: + this->mVariableNames.push_back("SR_Ca_uptake_and_release__Ca_up"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(16.95311); + + // rY[22]: + this->mVariableNames.push_back("SR_Ca_uptake_and_release__Ca_rel"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(16.85024); + + // rY[23]: + this->mVariableNames.push_back("SR_Ca_uptake_and_release__Ca_Calse"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.9528726); + + // rY[24]: + this->mVariableNames.push_back("SR_Ca_uptake_and_release__F1"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.1133251); + + // rY[25]: + this->mVariableNames.push_back("SR_Ca_uptake_and_release__F2"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.0007594214); + + // rY[26]: + this->mVariableNames.push_back("SR_Ca_uptake_and_release__F3"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.8859153); + + // mParameters[0]: + this->mParameterNames.push_back("membrane_L_type_calcium_current_conductance"); + this->mParameterUnits.push_back("microS"); + + // mParameters[1]: + this->mParameterNames.push_back("membrane_capacitance"); + this->mParameterUnits.push_back("microF"); + + // mParameters[2]: + this->mParameterNames.push_back("membrane_delayed_rectifier_potassium_current_conductance"); + this->mParameterUnits.push_back("microS"); + + // mParameters[3]: + this->mParameterNames.push_back("membrane_fast_sodium_current_conductance"); + this->mParameterUnits.push_back("mul_per_second"); + + // mParameters[4]: + this->mParameterNames.push_back("membrane_hyperpolarisation_activated_funny_current_potassium_component_conductance"); + this->mParameterUnits.push_back("microS"); + + // mParameters[5]: + this->mParameterNames.push_back("membrane_hyperpolarisation_activated_funny_current_sodium_component_conductance"); + this->mParameterUnits.push_back("microS"); + + // Derived Quantity index [0]: + this->mDerivedQuantityNames.push_back("membrane_L_type_calcium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [1]: + this->mDerivedQuantityNames.push_back("membrane_delayed_rectifier_potassium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [2]: + this->mDerivedQuantityNames.push_back("membrane_fast_sodium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [3]: + this->mDerivedQuantityNames.push_back("membrane_hyperpolarisation_activated_funny_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [4]: + this->mDerivedQuantityNames.push_back("membrane_hyperpolarisation_activated_funny_current_potassium_component"); + this->mDerivedQuantityUnits.push_back("nanoA"); + + // Derived Quantity index [5]: + this->mDerivedQuantityNames.push_back("membrane_hyperpolarisation_activated_funny_current_sodium_component"); + this->mDerivedQuantityUnits.push_back("nanoA"); + + // Derived Quantity index [6]: + this->mDerivedQuantityNames.push_back("time"); + this->mDerivedQuantityUnits.push_back("millisecond"); + + this->mInitialised = true; +} + +// Serialization for Boost >= 1.36 +#include "SerializationExportWrapperForCpp.hpp" +CHASTE_CLASS_EXPORT(Dynamicdemir_model_1994FromCellMLGRL1) +extern "C" +{ + AbstractCardiacCellInterface* MakeCardiacCell( + boost::shared_ptr pSolver, + boost::shared_ptr pStimulus) + { + return new Dynamicdemir_model_1994FromCellMLGRL1(pSolver, pStimulus); + } + +} diff --git a/chaste_codegen/tests/numerical/baseline/GRL1/dynamic_demir_model_1994.hpp b/chaste_codegen/tests/numerical/baseline/GRL1/dynamic_demir_model_1994.hpp new file mode 100644 index 00000000..0e9c0c7a --- /dev/null +++ b/chaste_codegen/tests/numerical/baseline/GRL1/dynamic_demir_model_1994.hpp @@ -0,0 +1,141 @@ +#ifndef DYNAMICDEMIR_MODEL_1994FROMCELLMLGRL1_HPP_ +#define DYNAMICDEMIR_MODEL_1994FROMCELLMLGRL1_HPP_ + +//! @file +//! +//! This source file was generated from CellML by chaste_codegen version (version omitted as unimportant) +//! +//! Model: demir_model_1994 +//! +//! Processed by chaste_codegen: https://github.com/ModellingWebLab/chaste-codegen +//! (translator: chaste_codegen, model type: GeneralizedRushLarsenFirstOrder) +//! on (date omitted as unimportant) +//! +//! + +#include "ChasteSerialization.hpp" +#include +#include "AbstractDynamicallyLoadableEntity.hpp" +#include "AbstractStimulusFunction.hpp" +#include "AbstractGeneralizedRushLarsenCardiacCell.hpp" + +class Dynamicdemir_model_1994FromCellMLGRL1 : public AbstractGeneralizedRushLarsenCardiacCell, public AbstractDynamicallyLoadableEntity +{ + friend class boost::serialization::access; + template + void serialize(Archive & archive, const unsigned int version) + { + archive & boost::serialization::base_object(*this); + archive & boost::serialization::base_object(*this); + } + + // + // Settable parameters and readable variables + // + + +private: +const bool is_concentration[27] = {false, true, false, false, false, false, false, false, false, false, false, false, true, true, false, false, false, false, true, true, true, false, false, false, false, false, false}; +const bool is_probability[27] = {false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false}; +public: + + double GetIntracellularCalciumConcentration(); + Dynamicdemir_model_1994FromCellMLGRL1(boost::shared_ptr /* unused; should be empty */, boost::shared_ptr pIntracellularStimulus); + ~Dynamicdemir_model_1994FromCellMLGRL1(); + void VerifyStateVariables(); + double GetIIonic(const std::vector* pStateVariables=NULL); + void UpdateTransmembranePotential(double var_chaste_interface__environment__time_converted); + void ComputeOneStepExceptVoltage(double var_chaste_interface__environment__time_converted); + + double EvaluateYDerivative0(double var_chaste_interface__environment__time_converted, std::vector& rY); + double EvaluatePartialDerivative0(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative1(double var_chaste_interface__environment__time_converted, std::vector& rY); + double EvaluatePartialDerivative1(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative2(double var_chaste_interface__environment__time_converted, std::vector& rY); + double EvaluatePartialDerivative2(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative3(double var_chaste_interface__environment__time_converted, std::vector& rY); + double EvaluatePartialDerivative3(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative4(double var_chaste_interface__environment__time_converted, std::vector& rY); + double EvaluatePartialDerivative4(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative5(double var_chaste_interface__environment__time_converted, std::vector& rY); + double EvaluatePartialDerivative5(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative6(double var_chaste_interface__environment__time_converted, std::vector& rY); + double EvaluatePartialDerivative6(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative7(double var_chaste_interface__environment__time_converted, std::vector& rY); + double EvaluatePartialDerivative7(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative8(double var_chaste_interface__environment__time_converted, std::vector& rY); + double EvaluatePartialDerivative8(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative9(double var_chaste_interface__environment__time_converted, std::vector& rY); + double EvaluatePartialDerivative9(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative10(double var_chaste_interface__environment__time_converted, std::vector& rY); + double EvaluatePartialDerivative10(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative11(double var_chaste_interface__environment__time_converted, std::vector& rY); + double EvaluatePartialDerivative11(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative12(double var_chaste_interface__environment__time_converted, std::vector& rY); + double EvaluatePartialDerivative12(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative13(double var_chaste_interface__environment__time_converted, std::vector& rY); + double EvaluatePartialDerivative13(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative14(double var_chaste_interface__environment__time_converted, std::vector& rY); + double EvaluatePartialDerivative14(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative15(double var_chaste_interface__environment__time_converted, std::vector& rY); + double EvaluatePartialDerivative15(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative16(double var_chaste_interface__environment__time_converted, std::vector& rY); + double EvaluatePartialDerivative16(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative17(double var_chaste_interface__environment__time_converted, std::vector& rY); + double EvaluatePartialDerivative17(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative18(double var_chaste_interface__environment__time_converted, std::vector& rY); + double EvaluatePartialDerivative18(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative19(double var_chaste_interface__environment__time_converted, std::vector& rY); + double EvaluatePartialDerivative19(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative20(double var_chaste_interface__environment__time_converted, std::vector& rY); + double EvaluatePartialDerivative20(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative21(double var_chaste_interface__environment__time_converted, std::vector& rY); + double EvaluatePartialDerivative21(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative22(double var_chaste_interface__environment__time_converted, std::vector& rY); + double EvaluatePartialDerivative22(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative23(double var_chaste_interface__environment__time_converted, std::vector& rY); + double EvaluatePartialDerivative23(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative24(double var_chaste_interface__environment__time_converted, std::vector& rY); + double EvaluatePartialDerivative24(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative25(double var_chaste_interface__environment__time_converted, std::vector& rY); + double EvaluatePartialDerivative25(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative26(double var_chaste_interface__environment__time_converted, std::vector& rY); + double EvaluatePartialDerivative26(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical=false); + + std::vector ComputeDerivedQuantities(double var_chaste_interface__environment__time_converted, const std::vector & rY); +}; + +// Needs to be included last +#include "SerializationExportWrapper.hpp" +CHASTE_CLASS_EXPORT(Dynamicdemir_model_1994FromCellMLGRL1) + +namespace boost +{ + namespace serialization + { + template + inline void save_construct_data( + Archive & ar, const Dynamicdemir_model_1994FromCellMLGRL1 * t, const unsigned int fileVersion) + { + const boost::shared_ptr p_solver = t->GetSolver(); + const boost::shared_ptr p_stimulus = t->GetStimulusFunction(); + ar << p_solver; + ar << p_stimulus; + } + + template + inline void load_construct_data( + Archive & ar, Dynamicdemir_model_1994FromCellMLGRL1 * t, const unsigned int fileVersion) + { + boost::shared_ptr p_solver; + boost::shared_ptr p_stimulus; + ar >> p_solver; + ar >> p_stimulus; + ::new(t)Dynamicdemir_model_1994FromCellMLGRL1(p_solver, p_stimulus); + } + + } + +} + +#endif // DYNAMICDEMIR_MODEL_1994FROMCELLMLGRL1_HPP_ \ No newline at end of file diff --git a/chaste_codegen/tests/numerical/baseline/GRL1/dynamic_matsuoka_model_2003.cpp b/chaste_codegen/tests/numerical/baseline/GRL1/dynamic_matsuoka_model_2003.cpp new file mode 100644 index 00000000..1adaa965 --- /dev/null +++ b/chaste_codegen/tests/numerical/baseline/GRL1/dynamic_matsuoka_model_2003.cpp @@ -0,0 +1,3761 @@ +//! @file +//! +//! This source file was generated from CellML by chaste_codegen version (version omitted as unimportant) +//! +//! Model: matsuoka_model_2003 +//! +//! Processed by chaste_codegen: https://github.com/ModellingWebLab/chaste-codegen +//! (translator: chaste_codegen, model type: GeneralizedRushLarsenFirstOrder) +//! on (date omitted as unimportant) +//! +//! + +#include "dynamic_matsuoka_model_2003.hpp" +#include +#include +#include +#include "Exception.hpp" +#include "OdeSystemInformation.hpp" +#include "RegularStimulus.hpp" +#include "HeartConfig.hpp" +#include "IsNan.hpp" +#include "MathsCustomFunctions.hpp" + + boost::shared_ptr Dynamicmatsuoka_model_2003FromCellMLGRL1::UseCellMLDefaultStimulus() + { + // Use the default stimulus specified by CellML metadata + const double var_membrane__Cm_converted = 9.9999999999999995e-7 * mParameters[0]; // uF + const double var_chaste_interface__membrane__stim_amplitude_converted = -0.0040000000000000001 * HeartConfig::Instance()->GetCapacitance() / var_membrane__Cm_converted; // uA_per_cm2 + const double var_chaste_interface__membrane__stim_duration = 2.0; // millisecond + const double var_chaste_interface__membrane__stim_period = 400.0; // millisecond + const double var_chaste_interface__membrane__stim_start = 50.0; // millisecond + boost::shared_ptr p_cellml_stim(new RegularStimulus( + -fabs(var_chaste_interface__membrane__stim_amplitude_converted), + var_chaste_interface__membrane__stim_duration, + var_chaste_interface__membrane__stim_period, + var_chaste_interface__membrane__stim_start + )); + mpIntracellularStimulus = p_cellml_stim; + return p_cellml_stim; + } + + Dynamicmatsuoka_model_2003FromCellMLGRL1::Dynamicmatsuoka_model_2003FromCellMLGRL1(boost::shared_ptr /* unused; should be empty */, boost::shared_ptr pIntracellularStimulus) + : AbstractGeneralizedRushLarsenCardiacCell( + 37, + 0, + pIntracellularStimulus) + { + // Time units: millisecond + // + this->mpSystemInfo = OdeSystemInformation::Instance(); + Init(); + + // We have a default stimulus specified in the CellML file metadata + this->mHasDefaultStimulusFromCellML = true; + + this->mParameters[0] = 132.0; // (var_membrane__Cm) [picoF] + } + + Dynamicmatsuoka_model_2003FromCellMLGRL1::~Dynamicmatsuoka_model_2003FromCellMLGRL1() + { + } + + double Dynamicmatsuoka_model_2003FromCellMLGRL1::GetIIonic(const std::vector* pStateVariables) + { + // For state variable interpolation (SVI) we read in interpolated state variables, + // otherwise for ionic current interpolation (ICI) we use the state variables of this model (node). + if (!pStateVariables) pStateVariables = &rGetStateVariables(); + const std::vector& rY = *pStateVariables; + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -85.95752434460744 + double var_chaste_interface__internal_ion_concentrations__Nai = rY[1]; + // Units: millimolar; Initial value: 4.925761439682025 + double var_chaste_interface__internal_ion_concentrations__Ki = rY[2]; + // Units: millimolar; Initial value: 143.1837333000449 + double var_chaste_interface__internal_ion_concentrations__Ca_Total = rY[3]; + // Units: millimolar; Initial value: 0.00040180173572968586 + double var_chaste_interface__ATP_production__ATPi = rY[4]; + // Units: millimolar; Initial value: 4.657102729020499 + double var_chaste_interface__sodium_current_voltage_dependent_gate__p_AP_Na = rY[5]; + // Units: dimensionless; Initial value: 1.779648367445368e-05 + double var_chaste_interface__sodium_current_ultra_slow_gate__y = rY[8]; + // Units: dimensionless; Initial value: 0.5861887862983165 + double var_chaste_interface__L_type_Ca_channel_voltage_dependent_gate__p_AP_CaL = rY[9]; + // Units: dimensionless; Initial value: 1.5445004166497696e-06 + double var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_U = rY[12]; + // Units: dimensionless; Initial value: 0.17246483915629204 + double var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_UCa = rY[13]; + // Units: dimensionless; Initial value: 6.098246017787626e-05 + double var_chaste_interface__L_type_Ca_channel_ultra_slow_gate__y = rY[15]; + // Units: dimensionless; Initial value: 0.9985266538252986 + double var_chaste_interface__T_type_Ca_channel_y1_gate__y1 = rY[16]; + // Units: dimensionless; Initial value: 1.6882718240109127e-05 + double var_chaste_interface__T_type_Ca_channel_y2_gate__y2 = rY[17]; + // Units: dimensionless; Initial value: 0.8585352091865849 + double var_chaste_interface__time_independent_potassium_current_y_gate__y = rY[18]; + // Units: dimensionless; Initial value: 0.6080573900752752 + double var_chaste_interface__rapid_time_dependent_potassium_current_y1_gate__y1 = rY[19]; + // Units: dimensionless; Initial value: 0.0018339931180983765 + double var_chaste_interface__rapid_time_dependent_potassium_current_y2_gate__y2 = rY[20]; + // Units: dimensionless; Initial value: 0.20443083454225305 + double var_chaste_interface__rapid_time_dependent_potassium_current_y3_gate__y3 = rY[21]; + // Units: dimensionless; Initial value: 0.967887666264921 + double var_chaste_interface__slow_time_dependent_potassium_current_y1_gate__y1 = rY[22]; + // Units: dimensionless; Initial value: 0.09738789658609195 + double var_chaste_interface__slow_time_dependent_potassium_current_y2_gate__y2 = rY[23]; + // Units: dimensionless; Initial value: 0.09745345578743213 + double var_chaste_interface__transient_outward_current_y1_gate__y1 = rY[24]; + // Units: dimensionless; Initial value: 0.0007956883250874798 + double var_chaste_interface__transient_outward_current_y2_gate__y2 = rY[25]; + // Units: dimensionless; Initial value: 0.9999125083105881 + double var_chaste_interface__sodium_calcium_exchanger_y_gate__y = rY[26]; + // Units: dimensionless; Initial value: 0.9891789193465331 + double var_chaste_interface__sodium_potassium_pump_y_gate__y = rY[27]; + // Units: dimensionless; Initial value: 0.5910747147428818 + + const double var_L_type_Ca_channel__p_open_CaL = (var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_U + var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_UCa) * var_chaste_interface__L_type_Ca_channel_ultra_slow_gate__y * var_chaste_interface__L_type_Ca_channel_voltage_dependent_gate__p_AP_CaL / (1.0 + 2.7439999999999993 / pow(var_chaste_interface__ATP_production__ATPi, 3)); // dimensionless + const double var_internal_ion_concentrations__Cai = -0.026190000000000001 + 0.5 * sqrt(pow((0.052380000000000003 - var_chaste_interface__internal_ion_concentrations__Ca_Total), 2) + 0.0095200000000000007 * var_chaste_interface__internal_ion_concentrations__Ca_Total) + 0.5 * var_chaste_interface__internal_ion_concentrations__Ca_Total; // millimolar + const double var_background_lCa_current__p_open = 1 / (1.0 + 1.7279999999999996e-9 / pow(var_internal_ion_concentrations__Cai, 3)); // dimensionless + const double var_constant_field_equations__CF_Ca = ((var_chaste_interface__membrane__Vm == 0) ? (-1.8) : (0.074870384603595908 * (-1.8 * exp(-0.074870384603595908 * var_chaste_interface__membrane__Vm) + var_internal_ion_concentrations__Cai) * var_chaste_interface__membrane__Vm / (1.0 - exp(-0.074870384603595908 * var_chaste_interface__membrane__Vm)))); // millimolar + const double var_constant_field_equations__CF_K = ((var_chaste_interface__membrane__Vm == 0) ? (var_chaste_interface__internal_ion_concentrations__Ki) : (0.037435192301797954 * (-5.4000000000000004 * exp(-0.037435192301797954 * var_chaste_interface__membrane__Vm) + var_chaste_interface__internal_ion_concentrations__Ki) * var_chaste_interface__membrane__Vm / (1.0 - exp(-0.037435192301797954 * var_chaste_interface__membrane__Vm)))); // millimolar + const double var_constant_field_equations__CF_Na = ((var_chaste_interface__membrane__Vm == 0) ? (-140.0) : (0.037435192301797954 * (-140.0 * exp(-0.037435192301797954 * var_chaste_interface__membrane__Vm) + var_chaste_interface__internal_ion_concentrations__Nai) * var_chaste_interface__membrane__Vm / (1.0 - exp(-0.037435192301797954 * var_chaste_interface__membrane__Vm)))); // millimolar + const double var_time_independent_potassium_current__E_K = 26.712831923985377 * log(5.4000000000000004 / var_chaste_interface__internal_ion_concentrations__Ki); // millivolt + const double var_time_independent_potassium_current__lambda = 3.0 * (1.0 + exp(-2.4319999999999999 + 0.064000000000000001 * var_chaste_interface__membrane__Vm - 0.064000000000000001 * var_time_independent_potassium_current__E_K)) * exp(0.47999999999999998 + 0.048000000000000001 * var_time_independent_potassium_current__E_K - 0.048000000000000001 * var_chaste_interface__membrane__Vm) / (1.0 + exp(-2.1000000000000001 + 0.029999999999999999 * var_chaste_interface__membrane__Vm - 0.029999999999999999 * var_time_independent_potassium_current__E_K)); // per_millisecond + const double var_time_independent_potassium_current__mu = 0.75 * exp(-0.35000000000000003 + 0.035000000000000003 * var_chaste_interface__membrane__Vm - 0.035000000000000003 * var_time_independent_potassium_current__E_K) / (1.0 + exp(-2.1000000000000001 + 0.014999999999999999 * var_chaste_interface__membrane__Vm - 0.014999999999999999 * var_time_independent_potassium_current__E_K)); // per_millisecond + const double var_time_independent_potassium_current__fB = var_time_independent_potassium_current__mu / (var_time_independent_potassium_current__lambda + var_time_independent_potassium_current__mu); // dimensionless + const double var_time_independent_potassium_current__fO = var_time_independent_potassium_current__lambda / (var_time_independent_potassium_current__lambda + var_time_independent_potassium_current__mu); // dimensionless + const double var_membrane__i_tot = 0.38500000000000001 * var_constant_field_equations__CF_Na + 0.040000000000000001 * var_constant_field_equations__CF_Ca + 0.15400000000000003 * var_constant_field_equations__CF_K + 21.0 * (-0.040000000000000001 * (1.0 - var_chaste_interface__sodium_potassium_pump_y_gate__y) / (1.0 + 14.894617648090152 * pow(1 / exp(-0.030696857687474322 * var_chaste_interface__membrane__Vm), 1.0600000000000001)) + 0.37 * var_chaste_interface__sodium_potassium_pump_y_gate__y / ((1.0 + 0.094 / var_chaste_interface__ATP_production__ATPi) * (1.0 + 4.4045579125871104 * pow(1 / var_chaste_interface__internal_ion_concentrations__Nai, 1.0600000000000001) * (1.0 + 0.020000293738509214 * pow(var_chaste_interface__internal_ion_concentrations__Ki, 1.1200000000000001))))) * mParameters[0] + 8712.0 * var_L_type_Ca_channel__p_open_CaL * var_constant_field_equations__CF_Ca + 6.8099999999999996 * (-0.6399652192815608 * (1.0 - var_chaste_interface__sodium_calcium_exchanger_y_gate__y) * exp(-0.025455930765222609 * var_chaste_interface__membrane__Vm) + var_chaste_interface__sodium_calcium_exchanger_y_gate__y * exp(0.011979261536575346 * var_chaste_interface__membrane__Vm) / (1.0 + 669.921875 * (1.0 + 724.63768115942037 * var_internal_ion_concentrations__Cai) / pow(var_chaste_interface__internal_ion_concentrations__Nai, 3))) * mParameters[0] + 0.11 * var_background_lCa_current__p_open * var_constant_field_equations__CF_K + 0.11 * var_background_lCa_current__p_open * var_constant_field_equations__CF_Na + 3.1798799999999998 * var_L_type_Ca_channel__p_open_CaL * var_constant_field_equations__CF_K + 66.022388395163091 * (-var_time_independent_potassium_current__E_K + var_chaste_interface__membrane__Vm) / (1.0 + 99.999999999999986 * pow(var_chaste_interface__ATP_production__ATPi, 2)) + 0.16117199999999998 * var_L_type_Ca_channel__p_open_CaL * var_constant_field_equations__CF_Na + 612.0 * var_chaste_interface__T_type_Ca_channel_y1_gate__y1 * var_chaste_interface__T_type_Ca_channel_y2_gate__y2 * var_constant_field_equations__CF_Ca + 2860.0 * var_constant_field_equations__CF_Na * var_chaste_interface__sodium_current_ultra_slow_gate__y * var_chaste_interface__sodium_current_voltage_dependent_gate__p_AP_Na + 0.2016 * pow(var_chaste_interface__slow_time_dependent_potassium_current_y1_gate__y1, 2) * (0.10000000000000001 + 0.90000000000000002 * var_chaste_interface__slow_time_dependent_potassium_current_y2_gate__y2) * var_constant_field_equations__CF_Na + 0.033000000000000002 * pow(var_chaste_interface__transient_outward_current_y1_gate__y1, 3) * var_constant_field_equations__CF_K * var_chaste_interface__transient_outward_current_y2_gate__y2 + 5.04 * pow(var_chaste_interface__slow_time_dependent_potassium_current_y1_gate__y1, 2) * (0.10000000000000001 + 0.90000000000000002 * var_chaste_interface__slow_time_dependent_potassium_current_y2_gate__y2) * var_constant_field_equations__CF_K + 0.00297 * pow(var_chaste_interface__transient_outward_current_y1_gate__y1, 3) * var_constant_field_equations__CF_Na * var_chaste_interface__transient_outward_current_y2_gate__y2 + 286.0 * var_constant_field_equations__CF_K * var_chaste_interface__sodium_current_ultra_slow_gate__y * var_chaste_interface__sodium_current_voltage_dependent_gate__p_AP_Na + 1.1459999999999999 * (-var_time_independent_potassium_current__E_K + var_chaste_interface__membrane__Vm) * (pow(var_time_independent_potassium_current__fO, 4) + 2.0 * pow(var_time_independent_potassium_current__fB, 2) * pow(var_time_independent_potassium_current__fO, 2) + 2.6666666666666665 * pow(var_time_independent_potassium_current__fO, 3) * var_time_independent_potassium_current__fB) * mParameters[0] * var_chaste_interface__time_independent_potassium_current_y_gate__y + 0.0086400000000000001 * (-var_time_independent_potassium_current__E_K + var_chaste_interface__membrane__Vm) * (0.40000000000000002 * var_chaste_interface__rapid_time_dependent_potassium_current_y2_gate__y2 + 0.59999999999999998 * var_chaste_interface__rapid_time_dependent_potassium_current_y1_gate__y1) * mParameters[0] * var_chaste_interface__rapid_time_dependent_potassium_current_y3_gate__y3 + ((var_chaste_interface__membrane__Vm == (-3.0)) ? (0.0014308470000000001 * var_constant_field_equations__CF_K) : (0.00011 * (3.0 + var_chaste_interface__membrane__Vm) * var_constant_field_equations__CF_K / (1.0 - exp(-0.23076923076923078 - 0.076923076923076927 * var_chaste_interface__membrane__Vm)))); // picoA + const double var_chaste_interface__i_ionic = 1.0 * HeartConfig::Instance()->GetCapacitance() * var_membrane__i_tot / mParameters[0]; // uA_per_cm2 + + const double i_ionic = var_chaste_interface__i_ionic; + EXCEPT_IF_NOT(!std::isnan(i_ionic)); + return i_ionic; + } + + void Dynamicmatsuoka_model_2003FromCellMLGRL1::UpdateTransmembranePotential(double var_chaste_interface__environment__time) + { + std::vector& rY = rGetStateVariables(); + unsigned v_index = GetVoltageIndex(); + const double delta = 1e-8; + + double d_dt_chaste_interface_var_membrane__Vm; + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -85.95752434460744 + double var_chaste_interface__internal_ion_concentrations__Nai = rY[1]; + // Units: millimolar; Initial value: 4.925761439682025 + double var_chaste_interface__internal_ion_concentrations__Ki = rY[2]; + // Units: millimolar; Initial value: 143.1837333000449 + double var_chaste_interface__internal_ion_concentrations__Ca_Total = rY[3]; + // Units: millimolar; Initial value: 0.00040180173572968586 + double var_chaste_interface__ATP_production__ATPi = rY[4]; + // Units: millimolar; Initial value: 4.657102729020499 + double var_chaste_interface__sodium_current_voltage_dependent_gate__p_AP_Na = rY[5]; + // Units: dimensionless; Initial value: 1.779648367445368e-05 + double var_chaste_interface__sodium_current_ultra_slow_gate__y = rY[8]; + // Units: dimensionless; Initial value: 0.5861887862983165 + double var_chaste_interface__L_type_Ca_channel_voltage_dependent_gate__p_AP_CaL = rY[9]; + // Units: dimensionless; Initial value: 1.5445004166497696e-06 + double var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_U = rY[12]; + // Units: dimensionless; Initial value: 0.17246483915629204 + double var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_UCa = rY[13]; + // Units: dimensionless; Initial value: 6.098246017787626e-05 + double var_chaste_interface__L_type_Ca_channel_ultra_slow_gate__y = rY[15]; + // Units: dimensionless; Initial value: 0.9985266538252986 + double var_chaste_interface__T_type_Ca_channel_y1_gate__y1 = rY[16]; + // Units: dimensionless; Initial value: 1.6882718240109127e-05 + double var_chaste_interface__T_type_Ca_channel_y2_gate__y2 = rY[17]; + // Units: dimensionless; Initial value: 0.8585352091865849 + double var_chaste_interface__time_independent_potassium_current_y_gate__y = rY[18]; + // Units: dimensionless; Initial value: 0.6080573900752752 + double var_chaste_interface__rapid_time_dependent_potassium_current_y1_gate__y1 = rY[19]; + // Units: dimensionless; Initial value: 0.0018339931180983765 + double var_chaste_interface__rapid_time_dependent_potassium_current_y2_gate__y2 = rY[20]; + // Units: dimensionless; Initial value: 0.20443083454225305 + double var_chaste_interface__rapid_time_dependent_potassium_current_y3_gate__y3 = rY[21]; + // Units: dimensionless; Initial value: 0.967887666264921 + double var_chaste_interface__slow_time_dependent_potassium_current_y1_gate__y1 = rY[22]; + // Units: dimensionless; Initial value: 0.09738789658609195 + double var_chaste_interface__slow_time_dependent_potassium_current_y2_gate__y2 = rY[23]; + // Units: dimensionless; Initial value: 0.09745345578743213 + double var_chaste_interface__transient_outward_current_y1_gate__y1 = rY[24]; + // Units: dimensionless; Initial value: 0.0007956883250874798 + double var_chaste_interface__transient_outward_current_y2_gate__y2 = rY[25]; + // Units: dimensionless; Initial value: 0.9999125083105881 + double var_chaste_interface__sodium_calcium_exchanger_y_gate__y = rY[26]; + // Units: dimensionless; Initial value: 0.9891789193465331 + double var_chaste_interface__sodium_potassium_pump_y_gate__y = rY[27]; + // Units: dimensionless; Initial value: 0.5910747147428818 + + + // Mathematics + const double var_L_type_Ca_channel__p_open_CaL = (var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_U + var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_UCa) * var_chaste_interface__L_type_Ca_channel_ultra_slow_gate__y * var_chaste_interface__L_type_Ca_channel_voltage_dependent_gate__p_AP_CaL / (1.0 + 2.7439999999999993 / pow(var_chaste_interface__ATP_production__ATPi, 3)); // dimensionless + const double var_internal_ion_concentrations__Cai = -0.026190000000000001 + 0.5 * sqrt(pow((0.052380000000000003 - var_chaste_interface__internal_ion_concentrations__Ca_Total), 2) + 0.0095200000000000007 * var_chaste_interface__internal_ion_concentrations__Ca_Total) + 0.5 * var_chaste_interface__internal_ion_concentrations__Ca_Total; // millimolar + const double var_background_lCa_current__p_open = 1 / (1.0 + 1.7279999999999996e-9 / pow(var_internal_ion_concentrations__Cai, 3)); // dimensionless + const double var_constant_field_equations__CF_Ca = ((var_chaste_interface__membrane__Vm == 0) ? (-1.8) : (0.074870384603595908 * (-1.8 * exp(-0.074870384603595908 * var_chaste_interface__membrane__Vm) + var_internal_ion_concentrations__Cai) * var_chaste_interface__membrane__Vm / (1.0 - exp(-0.074870384603595908 * var_chaste_interface__membrane__Vm)))); // millimolar + const double var_L_type_Ca_channel__i_CaL_Ca = 8712.0 * var_L_type_Ca_channel__p_open_CaL * var_constant_field_equations__CF_Ca; // picoA + const double var_T_type_Ca_channel__i_Ca_T = 612.0 * var_chaste_interface__T_type_Ca_channel_y1_gate__y1 * var_chaste_interface__T_type_Ca_channel_y2_gate__y2 * var_constant_field_equations__CF_Ca; // picoA + const double var_background_Cab_current__i_Cab = 0.040000000000000001 * var_constant_field_equations__CF_Ca; // picoA + const double var_constant_field_equations__CF_K = ((var_chaste_interface__membrane__Vm == 0) ? (var_chaste_interface__internal_ion_concentrations__Ki) : (0.037435192301797954 * (-5.4000000000000004 * exp(-0.037435192301797954 * var_chaste_interface__membrane__Vm) + var_chaste_interface__internal_ion_concentrations__Ki) * var_chaste_interface__membrane__Vm / (1.0 - exp(-0.037435192301797954 * var_chaste_interface__membrane__Vm)))); // millimolar + const double var_L_type_Ca_channel__i_CaL_K = 3.1798799999999998 * var_L_type_Ca_channel__p_open_CaL * var_constant_field_equations__CF_K; // picoA + const double var_background_Kpl_current__i_Kpl = ((var_chaste_interface__membrane__Vm == (-3.0)) ? (0.0014308470000000001 * var_constant_field_equations__CF_K) : (0.00011 * (3.0 + var_chaste_interface__membrane__Vm) * var_constant_field_equations__CF_K / (1.0 - exp(-0.23076923076923078 - 0.076923076923076927 * var_chaste_interface__membrane__Vm)))); // picoA + const double var_background_NSC_current__i_bNSC_K = 0.15400000000000003 * var_constant_field_equations__CF_K; // picoA + const double var_background_lCa_current__i_lCa_K = 0.11 * var_background_lCa_current__p_open * var_constant_field_equations__CF_K; // picoA + const double var_constant_field_equations__CF_Na = ((var_chaste_interface__membrane__Vm == 0) ? (-140.0) : (0.037435192301797954 * (-140.0 * exp(-0.037435192301797954 * var_chaste_interface__membrane__Vm) + var_chaste_interface__internal_ion_concentrations__Nai) * var_chaste_interface__membrane__Vm / (1.0 - exp(-0.037435192301797954 * var_chaste_interface__membrane__Vm)))); // millimolar + const double var_L_type_Ca_channel__i_CaL_Na = 0.16117199999999998 * var_L_type_Ca_channel__p_open_CaL * var_constant_field_equations__CF_Na; // picoA + const double var_background_NSC_current__i_bNSC_Na = 0.38500000000000001 * var_constant_field_equations__CF_Na; // picoA + const double var_background_lCa_current__i_lCa_Na = 0.11 * var_background_lCa_current__p_open * var_constant_field_equations__CF_Na; // picoA + const double var_membrane__i_ext = 1.0 * GetIntracellularAreaStimulus(var_chaste_interface__environment__time) * mParameters[0] / HeartConfig::Instance()->GetCapacitance(); // picoA + const double var_slow_time_dependent_potassium_current__i_Ks_K = 5.04 * pow(var_chaste_interface__slow_time_dependent_potassium_current_y1_gate__y1, 2) * (0.10000000000000001 + 0.90000000000000002 * var_chaste_interface__slow_time_dependent_potassium_current_y2_gate__y2) * var_constant_field_equations__CF_K; // picoA + const double var_slow_time_dependent_potassium_current__i_Ks_Na = 0.2016 * pow(var_chaste_interface__slow_time_dependent_potassium_current_y1_gate__y1, 2) * (0.10000000000000001 + 0.90000000000000002 * var_chaste_interface__slow_time_dependent_potassium_current_y2_gate__y2) * var_constant_field_equations__CF_Na; // picoA + const double var_sodium_calcium_exchanger__k1 = exp(0.011979261536575346 * var_chaste_interface__membrane__Vm); // per_millisecond + const double var_sodium_calcium_exchanger__k2 = exp(-0.025455930765222609 * var_chaste_interface__membrane__Vm); // per_millisecond + const double var_sodium_calcium_exchanger__p_E1Na = 1 / (1.0 + 669.921875 * (1.0 + 724.63768115942037 * var_internal_ion_concentrations__Cai) / pow(var_chaste_interface__internal_ion_concentrations__Nai, 3)); // dimensionless + const double var_sodium_calcium_exchanger__i_NaCa = 6.8099999999999996 * (-0.6399652192815608 * (1.0 - var_chaste_interface__sodium_calcium_exchanger_y_gate__y) * var_sodium_calcium_exchanger__k2 + var_sodium_calcium_exchanger__k1 * var_sodium_calcium_exchanger__p_E1Na * var_chaste_interface__sodium_calcium_exchanger_y_gate__y) * mParameters[0]; // picoA + const double var_sodium_current__i_Na_K = 286.0 * var_constant_field_equations__CF_K * var_chaste_interface__sodium_current_ultra_slow_gate__y * var_chaste_interface__sodium_current_voltage_dependent_gate__p_AP_Na; // picoA + const double var_sodium_current__i_Na_Na = 2860.0 * var_constant_field_equations__CF_Na * var_chaste_interface__sodium_current_ultra_slow_gate__y * var_chaste_interface__sodium_current_voltage_dependent_gate__p_AP_Na; // picoA + const double var_sodium_potassium_pump__Nao_Eff = 140.0 * exp(-0.030696857687474322 * var_chaste_interface__membrane__Vm); // millimolar + const double var_sodium_potassium_pump__k1 = 0.37 / (1.0 + 0.094 / var_chaste_interface__ATP_production__ATPi); // per_millisecond + const double var_sodium_potassium_pump__p_E1Na = 1 / (1.0 + 4.4045579125871104 * pow(1 / var_chaste_interface__internal_ion_concentrations__Nai, 1.0600000000000001) * (1.0 + 0.020000293738509214 * pow(var_chaste_interface__internal_ion_concentrations__Ki, 1.1200000000000001))); // dimensionless + const double var_sodium_potassium_pump__p_E2Na = 1 / (1.0 + 2804.9496956618664 * pow(1 / var_sodium_potassium_pump__Nao_Eff, 1.0600000000000001)); // dimensionless + const double var_sodium_potassium_pump__i_NaK = 21.0 * (-0.040000000000000001 * (1.0 - var_chaste_interface__sodium_potassium_pump_y_gate__y) * var_sodium_potassium_pump__p_E2Na + var_sodium_potassium_pump__k1 * var_sodium_potassium_pump__p_E1Na * var_chaste_interface__sodium_potassium_pump_y_gate__y) * mParameters[0]; // picoA + const double var_time_independent_potassium_current__E_K = 26.712831923985377 * log(5.4000000000000004 / var_chaste_interface__internal_ion_concentrations__Ki); // millivolt + const double var_background_KATP_current__i_KATP = 66.022388395163091 * (-var_time_independent_potassium_current__E_K + var_chaste_interface__membrane__Vm) / (1.0 + 99.999999999999986 * pow(var_chaste_interface__ATP_production__ATPi, 2)); // picoA + const double var_rapid_time_dependent_potassium_current__i_Kr = 0.0086400000000000001 * (-var_time_independent_potassium_current__E_K + var_chaste_interface__membrane__Vm) * (0.40000000000000002 * var_chaste_interface__rapid_time_dependent_potassium_current_y2_gate__y2 + 0.59999999999999998 * var_chaste_interface__rapid_time_dependent_potassium_current_y1_gate__y1) * mParameters[0] * var_chaste_interface__rapid_time_dependent_potassium_current_y3_gate__y3; // picoA + const double var_time_independent_potassium_current__lambda = 3.0 * (1.0 + exp(-2.4319999999999999 + 0.064000000000000001 * var_chaste_interface__membrane__Vm - 0.064000000000000001 * var_time_independent_potassium_current__E_K)) * exp(0.47999999999999998 + 0.048000000000000001 * var_time_independent_potassium_current__E_K - 0.048000000000000001 * var_chaste_interface__membrane__Vm) / (1.0 + exp(-2.1000000000000001 + 0.029999999999999999 * var_chaste_interface__membrane__Vm - 0.029999999999999999 * var_time_independent_potassium_current__E_K)); // per_millisecond + const double var_time_independent_potassium_current__mu = 0.75 * exp(-0.35000000000000003 + 0.035000000000000003 * var_chaste_interface__membrane__Vm - 0.035000000000000003 * var_time_independent_potassium_current__E_K) / (1.0 + exp(-2.1000000000000001 + 0.014999999999999999 * var_chaste_interface__membrane__Vm - 0.014999999999999999 * var_time_independent_potassium_current__E_K)); // per_millisecond + const double var_time_independent_potassium_current__fB = var_time_independent_potassium_current__mu / (var_time_independent_potassium_current__lambda + var_time_independent_potassium_current__mu); // dimensionless + const double var_time_independent_potassium_current__fO = var_time_independent_potassium_current__lambda / (var_time_independent_potassium_current__lambda + var_time_independent_potassium_current__mu); // dimensionless + const double var_time_independent_potassium_current__i_K1 = 1.1459999999999999 * (-var_time_independent_potassium_current__E_K + var_chaste_interface__membrane__Vm) * (pow(var_time_independent_potassium_current__fO, 4) + 2.0 * pow(var_time_independent_potassium_current__fB, 2) * pow(var_time_independent_potassium_current__fO, 2) + 2.6666666666666665 * pow(var_time_independent_potassium_current__fO, 3) * var_time_independent_potassium_current__fB) * mParameters[0] * var_chaste_interface__time_independent_potassium_current_y_gate__y; // picoA + const double var_transient_outward_current__i_to_K = 0.033000000000000002 * pow(var_chaste_interface__transient_outward_current_y1_gate__y1, 3) * var_constant_field_equations__CF_K * var_chaste_interface__transient_outward_current_y2_gate__y2; // picoA + const double var_transient_outward_current__i_to_Na = 0.00297 * pow(var_chaste_interface__transient_outward_current_y1_gate__y1, 3) * var_constant_field_equations__CF_Na * var_chaste_interface__transient_outward_current_y2_gate__y2; // picoA + d_dt_chaste_interface_var_membrane__Vm = (-var_L_type_Ca_channel__i_CaL_Ca - var_L_type_Ca_channel__i_CaL_K - var_L_type_Ca_channel__i_CaL_Na - var_T_type_Ca_channel__i_Ca_T - var_background_Cab_current__i_Cab - var_background_KATP_current__i_KATP - var_background_Kpl_current__i_Kpl - var_background_NSC_current__i_bNSC_K - var_background_NSC_current__i_bNSC_Na - var_background_lCa_current__i_lCa_K - var_background_lCa_current__i_lCa_Na - var_membrane__i_ext - var_rapid_time_dependent_potassium_current__i_Kr - var_slow_time_dependent_potassium_current__i_Ks_K - var_slow_time_dependent_potassium_current__i_Ks_Na - var_sodium_calcium_exchanger__i_NaCa - var_sodium_current__i_Na_K - var_sodium_current__i_Na_Na - var_sodium_potassium_pump__i_NaK - var_time_independent_potassium_current__i_K1 - var_transient_outward_current__i_to_K - var_transient_outward_current__i_to_Na) / mParameters[0]; // millivolt / millisecond + + double evalF = d_dt_chaste_interface_var_membrane__Vm; + mEvalF[0] = d_dt_chaste_interface_var_membrane__Vm; + double partialF = EvaluatePartialDerivative0(var_chaste_interface__environment__time, rY, delta, true); + if (fabs(partialF) < delta) + { + rY[v_index] += evalF*mDt; + } + else + { + rY[v_index] += (evalF/partialF)*(exp(partialF*mDt)-1.0); + } + } + + void Dynamicmatsuoka_model_2003FromCellMLGRL1::ComputeOneStepExceptVoltage(double var_chaste_interface__environment__time) + { + std::vector& rY = rGetStateVariables(); + const double delta = 1e-8; + + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -85.95752434460744 + double var_chaste_interface__internal_ion_concentrations__Nai = rY[1]; + // Units: millimolar; Initial value: 4.925761439682025 + double var_chaste_interface__internal_ion_concentrations__Ki = rY[2]; + // Units: millimolar; Initial value: 143.1837333000449 + double var_chaste_interface__internal_ion_concentrations__Ca_Total = rY[3]; + // Units: millimolar; Initial value: 0.00040180173572968586 + double var_chaste_interface__ATP_production__ATPi = rY[4]; + // Units: millimolar; Initial value: 4.657102729020499 + double var_chaste_interface__sodium_current_voltage_dependent_gate__p_AP_Na = rY[5]; + // Units: dimensionless; Initial value: 1.779648367445368e-05 + double var_chaste_interface__sodium_current_voltage_dependent_gate__p_RP_Na = rY[6]; + // Units: dimensionless; Initial value: 0.3556412697995689 + double var_chaste_interface__sodium_current_voltage_dependent_gate__p_AI_Na = rY[7]; + // Units: dimensionless; Initial value: 0.40285968661346977 + double var_chaste_interface__sodium_current_ultra_slow_gate__y = rY[8]; + // Units: dimensionless; Initial value: 0.5861887862983165 + double var_chaste_interface__L_type_Ca_channel_voltage_dependent_gate__p_AP_CaL = rY[9]; + // Units: dimensionless; Initial value: 1.5445004166497696e-06 + double var_chaste_interface__L_type_Ca_channel_voltage_dependent_gate__p_RP_CaL = rY[10]; + // Units: dimensionless; Initial value: 0.9968480629364956 + double var_chaste_interface__L_type_Ca_channel_voltage_dependent_gate__p_AI_CaL = rY[11]; + // Units: dimensionless; Initial value: 0.000877325391245903 + double var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_U = rY[12]; + // Units: dimensionless; Initial value: 0.17246483915629204 + double var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_UCa = rY[13]; + // Units: dimensionless; Initial value: 6.098246017787626e-05 + double var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_C = rY[14]; + // Units: dimensionless; Initial value: 0.4250747299372254 + double var_chaste_interface__L_type_Ca_channel_ultra_slow_gate__y = rY[15]; + // Units: dimensionless; Initial value: 0.9985266538252986 + double var_chaste_interface__T_type_Ca_channel_y1_gate__y1 = rY[16]; + // Units: dimensionless; Initial value: 1.6882718240109127e-05 + double var_chaste_interface__T_type_Ca_channel_y2_gate__y2 = rY[17]; + // Units: dimensionless; Initial value: 0.8585352091865849 + double var_chaste_interface__time_independent_potassium_current_y_gate__y = rY[18]; + // Units: dimensionless; Initial value: 0.6080573900752752 + double var_chaste_interface__rapid_time_dependent_potassium_current_y1_gate__y1 = rY[19]; + // Units: dimensionless; Initial value: 0.0018339931180983765 + double var_chaste_interface__rapid_time_dependent_potassium_current_y2_gate__y2 = rY[20]; + // Units: dimensionless; Initial value: 0.20443083454225305 + double var_chaste_interface__rapid_time_dependent_potassium_current_y3_gate__y3 = rY[21]; + // Units: dimensionless; Initial value: 0.967887666264921 + double var_chaste_interface__slow_time_dependent_potassium_current_y1_gate__y1 = rY[22]; + // Units: dimensionless; Initial value: 0.09738789658609195 + double var_chaste_interface__slow_time_dependent_potassium_current_y2_gate__y2 = rY[23]; + // Units: dimensionless; Initial value: 0.09745345578743213 + double var_chaste_interface__transient_outward_current_y1_gate__y1 = rY[24]; + // Units: dimensionless; Initial value: 0.0007956883250874798 + double var_chaste_interface__transient_outward_current_y2_gate__y2 = rY[25]; + // Units: dimensionless; Initial value: 0.9999125083105881 + double var_chaste_interface__sodium_calcium_exchanger_y_gate__y = rY[26]; + // Units: dimensionless; Initial value: 0.9891789193465331 + double var_chaste_interface__sodium_potassium_pump_y_gate__y = rY[27]; + // Units: dimensionless; Initial value: 0.5910747147428818 + double var_chaste_interface__SR_calcium_pump_y_gate__y = rY[28]; + // Units: dimensionless; Initial value: 0.46108441538480216 + double var_chaste_interface__RyR_channel__p_open_RyR = rY[29]; + // Units: dimensionless; Initial value: 0.00034314360001543243 + double var_chaste_interface__RyR_channel__p_close_RyR = rY[30]; + // Units: dimensionless; Initial value: 0.19135178123107768 + double var_chaste_interface__Ca_concentrations_in_SR__Ca_Total = rY[31]; + // Units: millimolar; Initial value: 9.455741736977666 + double var_chaste_interface__Ca_concentrations_in_SR__Caup = rY[32]; + // Units: millimolar; Initial value: 2.611712901567567 + double var_chaste_interface__NL_model__pCa = rY[33]; + // Units: dimensionless; Initial value: 0.02490898775497523 + double var_chaste_interface__NL_model__pCaCB = rY[34]; + // Units: dimensionless; Initial value: 0.001990153835322864 + double var_chaste_interface__NL_model__pCB = rY[35]; + // Units: dimensionless; Initial value: 0.00042941813853474524 + double var_chaste_interface__NL_model__X = rY[36]; + // Units: micrometre; Initial value: 0.9573749975411884 + + + // Mathematics + const double var_Ca_concentrations_in_SR__Carel = -5.4000000000000004 + 0.5 * var_chaste_interface__Ca_concentrations_in_SR__Ca_Total + 5.4000000000000004 * sqrt(pow((1 - 0.092592592592592587 * var_chaste_interface__Ca_concentrations_in_SR__Ca_Total), 2) + 0.027434842249657067 * var_chaste_interface__Ca_concentrations_in_SR__Ca_Total); // millimolar + const double var_L_type_Ca_channel_Ca_dependent_gate__p_CCa = 1.0 - var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_C - var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_U - var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_UCa; // dimensionless + const double var_L_type_Ca_channel__p_open_CaL = (var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_U + var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_UCa) * var_chaste_interface__L_type_Ca_channel_ultra_slow_gate__y * var_chaste_interface__L_type_Ca_channel_voltage_dependent_gate__p_AP_CaL / (1.0 + 2.7439999999999993 / pow(var_chaste_interface__ATP_production__ATPi, 3)); // dimensionless + const double var_L_type_Ca_channel_voltage_dependent_gate__p_RI_CaL = 1.0 - var_chaste_interface__L_type_Ca_channel_voltage_dependent_gate__p_AI_CaL - var_chaste_interface__L_type_Ca_channel_voltage_dependent_gate__p_AP_CaL - var_chaste_interface__L_type_Ca_channel_voltage_dependent_gate__p_RP_CaL; // dimensionless + const double d_dt_chaste_interface_var_NL_model__X = 1.1488559970494261 - 1.2 * var_chaste_interface__NL_model__X; // micrometre / millisecond + const double var_NL_model__Q_a = -0.0038999999999999998 * var_chaste_interface__NL_model__pCaCB + 0.0038999999999999998 * var_chaste_interface__NL_model__pCa * exp(-0.86212130841993795); // per_millisecond + const double var_NL_model__Q_d2 = 0.027 * pow(d_dt_chaste_interface_var_NL_model__X, 2) * var_chaste_interface__NL_model__pCaCB; // per_millisecond + const double var_SR_T_current__i_SR_T = 386.0 * var_chaste_interface__Ca_concentrations_in_SR__Caup - 386.0 * var_Ca_concentrations_in_SR__Carel; // picoA + const double var_SR_calcium_pump__k2 = 1 / (1.0 + 0.10000000000000001 / var_chaste_interface__ATP_production__ATPi); // per_millisecond + const double var_SR_calcium_pump__p_E1Ca = 1 / (1.0 + 0.080000000000000002 / var_chaste_interface__Ca_concentrations_in_SR__Caup); // dimensionless + const double var_internal_ion_concentrations__Cai = -0.026190000000000001 + 0.5 * sqrt(pow((0.052380000000000003 - var_chaste_interface__internal_ion_concentrations__Ca_Total), 2) + 0.0095200000000000007 * var_chaste_interface__internal_ion_concentrations__Ca_Total) + 0.5 * var_chaste_interface__internal_ion_concentrations__Ca_Total; // millimolar + const double var_NL_model__Q_b = -0.029999999999999999 * var_chaste_interface__NL_model__pCa + 39.0 * (1.0 - var_chaste_interface__NL_model__pCB - var_chaste_interface__NL_model__pCa - var_chaste_interface__NL_model__pCaCB) * var_internal_ion_concentrations__Cai; // per_millisecond + const double d_dt_chaste_interface_var_NL_model__pCa = -var_NL_model__Q_a + var_NL_model__Q_b; // 1 / millisecond + const double var_NL_model__Q_r = 0.029999999999999999 * var_chaste_interface__NL_model__pCaCB - 1560.0 * var_chaste_interface__NL_model__pCB * var_internal_ion_concentrations__Cai; // per_millisecond + const double d_dt_chaste_interface_var_NL_model__pCB = -0.12 * var_chaste_interface__NL_model__pCB - 0.027 * pow(d_dt_chaste_interface_var_NL_model__X, 2) * var_chaste_interface__NL_model__pCB + var_NL_model__Q_r; // 1 / millisecond + const double d_dt_chaste_interface_var_NL_model__pCaCB = -var_NL_model__Q_d2 - var_NL_model__Q_r + var_NL_model__Q_a; // 1 / millisecond + const double var_RyR_channel__i_RyR = 62000.0 * (-var_internal_ion_concentrations__Cai + var_Ca_concentrations_in_SR__Carel) * var_chaste_interface__RyR_channel__p_open_RyR; // picoA + const double var_SR_L_current__i_SR_L = 459.0 * var_chaste_interface__Ca_concentrations_in_SR__Caup - 459.0 * var_internal_ion_concentrations__Cai; // picoA + const double var_SR_calcium_pump__p_E2Ca = 1 / (1.0 + 0.00080000000000000004 / var_internal_ion_concentrations__Cai); // dimensionless + const double var_SR_calcium_pump__i_SR_U = 1625.0 * var_SR_calcium_pump__p_E1Ca * var_chaste_interface__SR_calcium_pump_y_gate__y - 162500.0 * (1.0 - var_chaste_interface__SR_calcium_pump_y_gate__y) * var_SR_calcium_pump__k2 * var_SR_calcium_pump__p_E2Ca; // picoA + const double d_dt_chaste_interface_var_SR_calcium_pump_y_gate__y = (1.0 - var_chaste_interface__SR_calcium_pump_y_gate__y) * (0.01 - 0.01 * var_SR_calcium_pump__p_E2Ca + var_SR_calcium_pump__k2 * var_SR_calcium_pump__p_E2Ca) - (1.0 - 0.98999999999999999 * var_SR_calcium_pump__p_E1Ca) * var_chaste_interface__SR_calcium_pump_y_gate__y; // 1 / millisecond + const double var_background_lCa_current__p_open = 1 / (1.0 + 1.7279999999999996e-9 / pow(var_internal_ion_concentrations__Cai, 3)); // dimensionless + const double d_dt_chaste_interface_var_Ca_concentrations_in_SR__Ca_Total = 3.2387883511406234e-5 * var_SR_T_current__i_SR_T - 3.2387883511406234e-5 * var_RyR_channel__i_RyR; // millimolar / millisecond + const double d_dt_chaste_interface_var_Ca_concentrations_in_SR__Caup = -1.2955153404562494e-5 * var_SR_L_current__i_SR_L - 1.2955153404562494e-5 * var_SR_T_current__i_SR_T - 1.2955153404562494e-5 * var_SR_calcium_pump__i_SR_U; // millimolar / millisecond + const double d_dt_chaste_interface_var_L_type_Ca_channel_ultra_slow_gate__y = (1.0 - var_chaste_interface__L_type_Ca_channel_ultra_slow_gate__y) / (58.0 * exp(0.015384615384615385 * var_chaste_interface__membrane__Vm) + 250000.0 * exp(0.1111111111111111 * var_chaste_interface__membrane__Vm)) - var_chaste_interface__L_type_Ca_channel_ultra_slow_gate__y / (66.0 * exp(-0.015384615384615385 * var_chaste_interface__membrane__Vm) + 1800.0 * exp(-0.071428571428571425 * var_chaste_interface__membrane__Vm)); // 1 / millisecond + const double var_L_type_Ca_channel_voltage_dependent_gate__k_AI_RI = 1 / (11.0 * exp(0.01 * var_chaste_interface__membrane__Vm) + 2200000.0 * exp(0.13513513513513511 * var_chaste_interface__membrane__Vm)); // per_millisecond + const double var_L_type_Ca_channel_voltage_dependent_gate__k_AP_RP = 1 / (480.0 * exp(0.14285714285714285 * var_chaste_interface__membrane__Vm) + 2.2000000000000002 * exp(0.015384615384615385 * var_chaste_interface__membrane__Vm)); // per_millisecond + const double var_L_type_Ca_channel_voltage_dependent_gate__k_RI_AI = 1 / (2.0 * exp(-0.01 * var_chaste_interface__membrane__Vm) + 0.0018 * exp(-0.13513513513513511 * var_chaste_interface__membrane__Vm)); // per_millisecond + const double d_dt_chaste_interface_var_L_type_Ca_channel_voltage_dependent_gate__p_AI_CaL = 0.0040000000000000001 * var_chaste_interface__L_type_Ca_channel_voltage_dependent_gate__p_AP_CaL + var_L_type_Ca_channel_voltage_dependent_gate__k_RI_AI * var_L_type_Ca_channel_voltage_dependent_gate__p_RI_CaL - (0.001 + var_L_type_Ca_channel_voltage_dependent_gate__k_AI_RI) * var_chaste_interface__L_type_Ca_channel_voltage_dependent_gate__p_AI_CaL; // 1 / millisecond + const double var_L_type_Ca_channel_voltage_dependent_gate__k_RP_AP = 1 / (1.5 * exp(-0.015384615384615385 * var_chaste_interface__membrane__Vm) + 0.27000000000000002 * exp(-0.16949152542372881 * var_chaste_interface__membrane__Vm)); // per_millisecond + const double d_dt_chaste_interface_var_L_type_Ca_channel_voltage_dependent_gate__p_AP_CaL = 0.001 * var_chaste_interface__L_type_Ca_channel_voltage_dependent_gate__p_AI_CaL + var_L_type_Ca_channel_voltage_dependent_gate__k_RP_AP * var_chaste_interface__L_type_Ca_channel_voltage_dependent_gate__p_RP_CaL - (0.0040000000000000001 + var_L_type_Ca_channel_voltage_dependent_gate__k_AP_RP) * var_chaste_interface__L_type_Ca_channel_voltage_dependent_gate__p_AP_CaL; // 1 / millisecond + const double var_L_type_Ca_channel_voltage_dependent_gate__k_RP_RI = 0.040000000000000001 / (1.0 + 0.25 * var_L_type_Ca_channel_voltage_dependent_gate__k_AP_RP * var_L_type_Ca_channel_voltage_dependent_gate__k_RI_AI / (var_L_type_Ca_channel_voltage_dependent_gate__k_AI_RI * var_L_type_Ca_channel_voltage_dependent_gate__k_RP_AP)); // per_millisecond + const double d_dt_chaste_interface_var_L_type_Ca_channel_voltage_dependent_gate__p_RP_CaL = (0.040000000000000001 - var_L_type_Ca_channel_voltage_dependent_gate__k_RP_RI) * var_L_type_Ca_channel_voltage_dependent_gate__p_RI_CaL + var_L_type_Ca_channel_voltage_dependent_gate__k_AP_RP * var_chaste_interface__L_type_Ca_channel_voltage_dependent_gate__p_AP_CaL - (var_L_type_Ca_channel_voltage_dependent_gate__k_RP_AP + var_L_type_Ca_channel_voltage_dependent_gate__k_RP_RI) * var_chaste_interface__L_type_Ca_channel_voltage_dependent_gate__p_RP_CaL; // 1 / millisecond + const double d_dt_chaste_interface_var_T_type_Ca_channel_y1_gate__y1 = (1.0 - var_chaste_interface__T_type_Ca_channel_y1_gate__y1) / (0.019 * exp(-0.17857142857142858 * var_chaste_interface__membrane__Vm) + 0.81999999999999995 * exp(-0.0040000000000000001 * var_chaste_interface__membrane__Vm)) - var_chaste_interface__T_type_Ca_channel_y1_gate__y1 / (1.5 * exp(0.0001 * var_chaste_interface__membrane__Vm) + 40.0 * exp(0.15873015873015872 * var_chaste_interface__membrane__Vm)); // 1 / millisecond + const double d_dt_chaste_interface_var_T_type_Ca_channel_y2_gate__y2 = (1.0 - var_chaste_interface__T_type_Ca_channel_y2_gate__y2) / (30.0 * exp(0.00033333333333333332 * var_chaste_interface__membrane__Vm) + 62000.0 * exp(0.099009900990099015 * var_chaste_interface__membrane__Vm)) - var_chaste_interface__T_type_Ca_channel_y2_gate__y2 / (1.2 * exp(-0.040000000000000001 * var_chaste_interface__membrane__Vm) + 0.00059999999999999995 * exp(-0.14925373134328357 * var_chaste_interface__membrane__Vm)); // 1 / millisecond + const double var_constant_field_equations__CF_Ca = ((var_chaste_interface__membrane__Vm == 0) ? (-1.8) : (0.074870384603595908 * (-1.8 * exp(-0.074870384603595908 * var_chaste_interface__membrane__Vm) + var_internal_ion_concentrations__Cai) * var_chaste_interface__membrane__Vm / (1.0 - exp(-0.074870384603595908 * var_chaste_interface__membrane__Vm)))); // millimolar + const double var_L_type_Ca_channel__i_CaL_Ca = 8712.0 * var_L_type_Ca_channel__p_open_CaL * var_constant_field_equations__CF_Ca; // picoA + const double var_L_type_Ca_channel_Ca_dependent_gate__iCaL = 0.067599999999999993 * var_constant_field_equations__CF_Ca; // picoA + const double var_L_type_Ca_channel_Ca_dependent_gate__Cacm = -0.29999999999999999 * var_L_type_Ca_channel_Ca_dependent_gate__iCaL + var_internal_ion_concentrations__Cai; // millimolar + const double d_dt_chaste_interface_var_L_type_Ca_channel_Ca_dependent_gate__p_C = 0.34999999999999998 * var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_U + 0.0041999999999999997 * var_L_type_Ca_channel_Ca_dependent_gate__p_CCa - (0.14299999999999999 + 6.9539999999999997 * var_L_type_Ca_channel_Ca_dependent_gate__Cacm * var_chaste_interface__L_type_Ca_channel_voltage_dependent_gate__p_AP_CaL) * var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_C; // 1 / millisecond + const double var_L_type_Ca_channel_Ca_dependent_gate__k_UUCa_Ca = 6.9539999999999997 * (1.0 - var_chaste_interface__L_type_Ca_channel_voltage_dependent_gate__p_AP_CaL) * var_internal_ion_concentrations__Cai + 6.9539999999999997 * var_L_type_Ca_channel_Ca_dependent_gate__Cacm * var_chaste_interface__L_type_Ca_channel_voltage_dependent_gate__p_AP_CaL; // per_millisecond + const double d_dt_chaste_interface_var_L_type_Ca_channel_Ca_dependent_gate__p_U = 0.14299999999999999 * var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_C + 2.0019999999999998 * var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_UCa - (0.34999999999999998 + var_L_type_Ca_channel_Ca_dependent_gate__k_UUCa_Ca) * var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_U; // 1 / millisecond + const double d_dt_chaste_interface_var_L_type_Ca_channel_Ca_dependent_gate__p_UCa = 0.00029999999999999997 * var_L_type_Ca_channel_Ca_dependent_gate__p_CCa - 2.3519999999999999 * var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_UCa + var_L_type_Ca_channel_Ca_dependent_gate__k_UUCa_Ca * var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_U; // 1 / millisecond + const double var_RyR_channel__k1 = 280000.0 * pow(var_internal_ion_concentrations__Cai, 2) - 150.0 * var_L_type_Ca_channel__p_open_CaL * var_L_type_Ca_channel_Ca_dependent_gate__iCaL; // per_millisecond + const double d_dt_chaste_interface_var_RyR_channel__p_close_RyR = -(0.00084900000000000004 + var_RyR_channel__k1) * var_chaste_interface__RyR_channel__p_close_RyR + 0.000377 * pow(var_Ca_concentrations_in_SR__Carel, 2) * (1.0 - var_chaste_interface__RyR_channel__p_close_RyR - var_chaste_interface__RyR_channel__p_open_RyR); // 1 / millisecond + const double d_dt_chaste_interface_var_RyR_channel__p_open_RyR = var_RyR_channel__k1 * var_chaste_interface__RyR_channel__p_close_RyR - 0.080000000000000002 * var_chaste_interface__RyR_channel__p_open_RyR / (1.0 + 0.35999999999999999 / var_Ca_concentrations_in_SR__Carel); // 1 / millisecond + const double var_T_type_Ca_channel__i_Ca_T = 612.0 * var_chaste_interface__T_type_Ca_channel_y1_gate__y1 * var_chaste_interface__T_type_Ca_channel_y2_gate__y2 * var_constant_field_equations__CF_Ca; // picoA + const double var_background_Cab_current__i_Cab = 0.040000000000000001 * var_constant_field_equations__CF_Ca; // picoA + const double var_constant_field_equations__CF_K = ((var_chaste_interface__membrane__Vm == 0) ? (var_chaste_interface__internal_ion_concentrations__Ki) : (0.037435192301797954 * (-5.4000000000000004 * exp(-0.037435192301797954 * var_chaste_interface__membrane__Vm) + var_chaste_interface__internal_ion_concentrations__Ki) * var_chaste_interface__membrane__Vm / (1.0 - exp(-0.037435192301797954 * var_chaste_interface__membrane__Vm)))); // millimolar + const double var_L_type_Ca_channel__i_CaL_K = 3.1798799999999998 * var_L_type_Ca_channel__p_open_CaL * var_constant_field_equations__CF_K; // picoA + const double var_background_Kpl_current__i_Kpl = ((var_chaste_interface__membrane__Vm == (-3.0)) ? (0.0014308470000000001 * var_constant_field_equations__CF_K) : (0.00011 * (3.0 + var_chaste_interface__membrane__Vm) * var_constant_field_equations__CF_K / (1.0 - exp(-0.23076923076923078 - 0.076923076923076927 * var_chaste_interface__membrane__Vm)))); // picoA + const double var_background_NSC_current__i_bNSC_K = 0.15400000000000003 * var_constant_field_equations__CF_K; // picoA + const double var_background_lCa_current__i_lCa_K = 0.11 * var_background_lCa_current__p_open * var_constant_field_equations__CF_K; // picoA + const double var_constant_field_equations__CF_Na = ((var_chaste_interface__membrane__Vm == 0) ? (-140.0) : (0.037435192301797954 * (-140.0 * exp(-0.037435192301797954 * var_chaste_interface__membrane__Vm) + var_chaste_interface__internal_ion_concentrations__Nai) * var_chaste_interface__membrane__Vm / (1.0 - exp(-0.037435192301797954 * var_chaste_interface__membrane__Vm)))); // millimolar + const double var_L_type_Ca_channel__i_CaL_Na = 0.16117199999999998 * var_L_type_Ca_channel__p_open_CaL * var_constant_field_equations__CF_Na; // picoA + const double var_background_NSC_current__i_bNSC_Na = 0.38500000000000001 * var_constant_field_equations__CF_Na; // picoA + const double var_background_lCa_current__i_lCa_Na = 0.11 * var_background_lCa_current__p_open * var_constant_field_equations__CF_Na; // picoA + const double var_membrane__i_ext = 1.0 * GetIntracellularAreaStimulus(var_chaste_interface__environment__time) * mParameters[0] / HeartConfig::Instance()->GetCapacitance(); // picoA + const double d_dt_chaste_interface_var_rapid_time_dependent_potassium_current_y1_gate__y1 = (1.0 - var_chaste_interface__rapid_time_dependent_potassium_current_y1_gate__y1) / (5.0 * exp(-0.0033333333333333335 * var_chaste_interface__membrane__Vm) + 20.0 * exp(-0.086956521739130432 * var_chaste_interface__membrane__Vm)) - (1 / (160.0 * exp(0.035714285714285712 * var_chaste_interface__membrane__Vm) + 200.0 * exp(0.001 * var_chaste_interface__membrane__Vm)) + 0.00040000000000000002 / exp(0.050000000000000003 * var_chaste_interface__membrane__Vm)) * var_chaste_interface__rapid_time_dependent_potassium_current_y1_gate__y1; // 1 / millisecond + const double d_dt_chaste_interface_var_rapid_time_dependent_potassium_current_y2_gate__y2 = (1.0 - var_chaste_interface__rapid_time_dependent_potassium_current_y2_gate__y2) / (20.0 * exp(-0.0033333333333333335 * var_chaste_interface__membrane__Vm) + 200.0 * exp(-0.076923076923076927 * var_chaste_interface__membrane__Vm)) - (1 / (1600.0 * exp(0.035714285714285712 * var_chaste_interface__membrane__Vm) + 2000.0 * exp(0.001 * var_chaste_interface__membrane__Vm)) + 0.0001 / exp(0.050000000000000003 * var_chaste_interface__membrane__Vm)) * var_chaste_interface__rapid_time_dependent_potassium_current_y2_gate__y2; // 1 / millisecond + const double d_dt_chaste_interface_var_rapid_time_dependent_potassium_current_y3_gate__y3 = (1.0 - var_chaste_interface__rapid_time_dependent_potassium_current_y3_gate__y3) / (2.5 * exp(0.0033333333333333335 * var_chaste_interface__membrane__Vm) + 10.0 * exp(0.058823529411764705 * var_chaste_interface__membrane__Vm)) - var_chaste_interface__rapid_time_dependent_potassium_current_y3_gate__y3 / (2.0 * exp(-0.0066666666666666671 * var_chaste_interface__membrane__Vm) + 0.34999999999999998 * exp(-0.058823529411764705 * var_chaste_interface__membrane__Vm)); // 1 / millisecond + const double d_dt_chaste_interface_var_slow_time_dependent_potassium_current_y1_gate__y1 = (1.0 - var_chaste_interface__slow_time_dependent_potassium_current_y1_gate__y1) / (85.0 * exp(-0.095238095238095233 * var_chaste_interface__membrane__Vm) + 370.0 * exp(-0.016129032258064516 * var_chaste_interface__membrane__Vm)) - var_chaste_interface__slow_time_dependent_potassium_current_y1_gate__y1 / (260.0 * exp(0.01 * var_chaste_interface__membrane__Vm) + 1450.0 * exp(0.050000000000000003 * var_chaste_interface__membrane__Vm)); // 1 / millisecond + const double d_dt_chaste_interface_var_slow_time_dependent_potassium_current_y2_gate__y2 = -0.004444 * var_chaste_interface__slow_time_dependent_potassium_current_y2_gate__y2 + 3.7000000000000002 * (1.0 - var_chaste_interface__slow_time_dependent_potassium_current_y2_gate__y2) * var_internal_ion_concentrations__Cai; // 1 / millisecond + const double var_slow_time_dependent_potassium_current__i_Ks_K = 5.04 * pow(var_chaste_interface__slow_time_dependent_potassium_current_y1_gate__y1, 2) * (0.10000000000000001 + 0.90000000000000002 * var_chaste_interface__slow_time_dependent_potassium_current_y2_gate__y2) * var_constant_field_equations__CF_K; // picoA + const double var_slow_time_dependent_potassium_current__i_Ks_Na = 0.2016 * pow(var_chaste_interface__slow_time_dependent_potassium_current_y1_gate__y1, 2) * (0.10000000000000001 + 0.90000000000000002 * var_chaste_interface__slow_time_dependent_potassium_current_y2_gate__y2) * var_constant_field_equations__CF_Na; // picoA + const double var_sodium_calcium_exchanger__k1 = exp(0.011979261536575346 * var_chaste_interface__membrane__Vm); // per_millisecond + const double var_sodium_calcium_exchanger__k2 = exp(-0.025455930765222609 * var_chaste_interface__membrane__Vm); // per_millisecond + const double var_sodium_calcium_exchanger__p_E1Na = 1 / (1.0 + 669.921875 * (1.0 + 724.63768115942037 * var_internal_ion_concentrations__Cai) / pow(var_chaste_interface__internal_ion_concentrations__Nai, 3)); // dimensionless + const double d_dt_chaste_interface_var_sodium_calcium_exchanger_y_gate__y = (1.0 - var_chaste_interface__sodium_calcium_exchanger_y_gate__y) * (0.20379327210477693 + 0.6399652192815608 * var_sodium_calcium_exchanger__k2) - (1.0 / (1.0 + 0.0013799999999999999 * (1.0 + 0.0014927113702623907 * pow(var_chaste_interface__internal_ion_concentrations__Nai, 3)) / var_internal_ion_concentrations__Cai) + var_sodium_calcium_exchanger__k1 * var_sodium_calcium_exchanger__p_E1Na) * var_chaste_interface__sodium_calcium_exchanger_y_gate__y; // 1 / millisecond + const double var_sodium_calcium_exchanger__i_NaCa = 6.8099999999999996 * (-0.6399652192815608 * (1.0 - var_chaste_interface__sodium_calcium_exchanger_y_gate__y) * var_sodium_calcium_exchanger__k2 + var_sodium_calcium_exchanger__k1 * var_sodium_calcium_exchanger__p_E1Na * var_chaste_interface__sodium_calcium_exchanger_y_gate__y) * mParameters[0]; // picoA + const double d_dt_chaste_interface_var_internal_ion_concentrations__Ca_Total = 0.070000000000000007 * var_NL_model__Q_d2 + 0.070000000000000007 * var_NL_model__Q_r + 6.4775767022812476e-7 * var_RyR_channel__i_RyR + 6.4775767022812476e-7 * var_SR_L_current__i_SR_L + 6.4775767022812476e-7 * var_SR_calcium_pump__i_SR_U + 1.2955153404562495e-6 * var_sodium_calcium_exchanger__i_NaCa - 0.070000000000000007 * var_NL_model__Q_b - 6.4775767022812476e-7 * var_L_type_Ca_channel__i_CaL_Ca - 6.4775767022812476e-7 * var_T_type_Ca_channel__i_Ca_T - 6.4775767022812476e-7 * var_background_Cab_current__i_Cab; // millimolar / millisecond + const double d_dt_chaste_interface_var_sodium_current_ultra_slow_gate__y = (1.0 - var_chaste_interface__sodium_current_ultra_slow_gate__y) / (8000.0 * exp(0.01 * var_chaste_interface__membrane__Vm) + 9000000000.0 * exp(0.20000000000000001 * var_chaste_interface__membrane__Vm)) - var_chaste_interface__sodium_current_ultra_slow_gate__y / (4000.0 * exp(-0.01 * var_chaste_interface__membrane__Vm) + 0.014 * exp(-0.20000000000000001 * var_chaste_interface__membrane__Vm)); // 1 / millisecond + const double var_sodium_current_voltage_dependent_gate__k_AI_RI = 1 / (1300.0 * exp(0.050000000000000003 * var_chaste_interface__membrane__Vm) + 0.040000000000000001 * exp(0.00125 * var_chaste_interface__membrane__Vm)); // per_millisecond + const double var_sodium_current_voltage_dependent_gate__k_AP_AI = 1.25 / exp(-0.0025000000000000001 * var_chaste_interface__membrane__Vm); // per_millisecond + const double var_sodium_current_voltage_dependent_gate__k_AP_RP = 1 / (26.0 * exp(0.058823529411764705 * var_chaste_interface__membrane__Vm) + 0.02 * exp(0.00125 * var_chaste_interface__membrane__Vm)); // per_millisecond + const double var_sodium_current_voltage_dependent_gate__k_RI_AI = 1 / (5.0 * exp(-0.0025000000000000001 * var_chaste_interface__membrane__Vm) + 0.0001027 * exp(-0.125 * var_chaste_interface__membrane__Vm)); // per_millisecond + const double var_sodium_current_voltage_dependent_gate__k_RP_AP = 1 / (0.25 * exp(-0.02 * var_chaste_interface__membrane__Vm) + 0.1027 * exp(-0.125 * var_chaste_interface__membrane__Vm)); // per_millisecond + const double var_sodium_current_voltage_dependent_gate__k_RP_RI = 0.01 / (1.0 + 8.7499999999999999e-5 * var_sodium_current_voltage_dependent_gate__k_AP_RP * var_sodium_current_voltage_dependent_gate__k_RI_AI / (var_sodium_current_voltage_dependent_gate__k_AI_RI * var_sodium_current_voltage_dependent_gate__k_AP_AI * var_sodium_current_voltage_dependent_gate__k_RP_AP)); // per_millisecond + const double var_sodium_current__i_Na_K = 286.0 * var_constant_field_equations__CF_K * var_chaste_interface__sodium_current_ultra_slow_gate__y * var_chaste_interface__sodium_current_voltage_dependent_gate__p_AP_Na; // picoA + const double var_sodium_current__i_Na_Na = 2860.0 * var_constant_field_equations__CF_Na * var_chaste_interface__sodium_current_ultra_slow_gate__y * var_chaste_interface__sodium_current_voltage_dependent_gate__p_AP_Na; // picoA + const double d_dt_chaste_interface_var_sodium_current_voltage_dependent_gate__p_AP_Na = 8.7499999999999999e-5 * var_chaste_interface__sodium_current_voltage_dependent_gate__p_AI_Na + var_sodium_current_voltage_dependent_gate__k_RP_AP * var_chaste_interface__sodium_current_voltage_dependent_gate__p_RP_Na - (var_sodium_current_voltage_dependent_gate__k_AP_AI + var_sodium_current_voltage_dependent_gate__k_AP_RP) * var_chaste_interface__sodium_current_voltage_dependent_gate__p_AP_Na; // 1 / millisecond + const double var_sodium_current_voltage_dependent_gate__p_RI_Na = 1.0 - var_chaste_interface__sodium_current_voltage_dependent_gate__p_AI_Na - var_chaste_interface__sodium_current_voltage_dependent_gate__p_AP_Na - var_chaste_interface__sodium_current_voltage_dependent_gate__p_RP_Na; // dimensionless + const double d_dt_chaste_interface_var_sodium_current_voltage_dependent_gate__p_AI_Na = var_sodium_current_voltage_dependent_gate__k_AP_AI * var_chaste_interface__sodium_current_voltage_dependent_gate__p_AP_Na + var_sodium_current_voltage_dependent_gate__k_RI_AI * var_sodium_current_voltage_dependent_gate__p_RI_Na - (8.7499999999999999e-5 + var_sodium_current_voltage_dependent_gate__k_AI_RI) * var_chaste_interface__sodium_current_voltage_dependent_gate__p_AI_Na; // 1 / millisecond + const double d_dt_chaste_interface_var_sodium_current_voltage_dependent_gate__p_RP_Na = (0.01 - var_sodium_current_voltage_dependent_gate__k_RP_RI) * var_sodium_current_voltage_dependent_gate__p_RI_Na + var_sodium_current_voltage_dependent_gate__k_AP_RP * var_chaste_interface__sodium_current_voltage_dependent_gate__p_AP_Na - (var_sodium_current_voltage_dependent_gate__k_RP_AP + var_sodium_current_voltage_dependent_gate__k_RP_RI) * var_chaste_interface__sodium_current_voltage_dependent_gate__p_RP_Na; // 1 / millisecond + const double var_sodium_potassium_pump__Nao_Eff = 140.0 * exp(-0.030696857687474322 * var_chaste_interface__membrane__Vm); // millimolar + const double var_sodium_potassium_pump__k1 = 0.37 / (1.0 + 0.094 / var_chaste_interface__ATP_production__ATPi); // per_millisecond + const double var_sodium_potassium_pump__p_E1Na = 1 / (1.0 + 4.4045579125871104 * pow(1 / var_chaste_interface__internal_ion_concentrations__Nai, 1.0600000000000001) * (1.0 + 0.020000293738509214 * pow(var_chaste_interface__internal_ion_concentrations__Ki, 1.1200000000000001))); // dimensionless + const double var_sodium_potassium_pump__p_E2Na = 1 / (1.0 + 2804.9496956618664 * pow(1 / var_sodium_potassium_pump__Nao_Eff, 1.0600000000000001)); // dimensionless + const double d_dt_chaste_interface_var_sodium_potassium_pump_y_gate__y = (1.0 - var_chaste_interface__sodium_potassium_pump_y_gate__y) * (0.040000000000000001 * var_sodium_potassium_pump__p_E2Na + 0.16500000000000001 / (1.0331690520373935 + 0.00036833781854815162 * pow(var_sodium_potassium_pump__Nao_Eff, 1.0600000000000001))) - (0.01 / (1.0 + 49.999265664512095 * pow(1 / var_chaste_interface__internal_ion_concentrations__Ki, 1.1200000000000001) * (1.0 + 0.22703754152993499 * pow(var_chaste_interface__internal_ion_concentrations__Nai, 1.0600000000000001))) + var_sodium_potassium_pump__k1 * var_sodium_potassium_pump__p_E1Na) * var_chaste_interface__sodium_potassium_pump_y_gate__y; // 1 / millisecond + const double var_sodium_potassium_pump__i_NaK = 21.0 * (-0.040000000000000001 * (1.0 - var_chaste_interface__sodium_potassium_pump_y_gate__y) * var_sodium_potassium_pump__p_E2Na + var_sodium_potassium_pump__k1 * var_sodium_potassium_pump__p_E1Na * var_chaste_interface__sodium_potassium_pump_y_gate__y) * mParameters[0]; // picoA + const double d_dt_chaste_interface_var_ATP_production__ATPi = 0.014999999999999999 + 3.2387883511406238e-7 * var_SR_calcium_pump__i_SR_U - 0.0030000000000000001 * var_chaste_interface__ATP_production__ATPi - 0.028000000000000004 * var_chaste_interface__NL_model__pCaCB - 1.2955153404562495e-6 * var_sodium_potassium_pump__i_NaK; // millimolar / millisecond + const double var_time_independent_potassium_current__E_K = 26.712831923985377 * log(5.4000000000000004 / var_chaste_interface__internal_ion_concentrations__Ki); // millivolt + const double var_background_KATP_current__i_KATP = 66.022388395163091 * (-var_time_independent_potassium_current__E_K + var_chaste_interface__membrane__Vm) / (1.0 + 99.999999999999986 * pow(var_chaste_interface__ATP_production__ATPi, 2)); // picoA + const double var_rapid_time_dependent_potassium_current__i_Kr = 0.0086400000000000001 * (-var_time_independent_potassium_current__E_K + var_chaste_interface__membrane__Vm) * (0.40000000000000002 * var_chaste_interface__rapid_time_dependent_potassium_current_y2_gate__y2 + 0.59999999999999998 * var_chaste_interface__rapid_time_dependent_potassium_current_y1_gate__y1) * mParameters[0] * var_chaste_interface__rapid_time_dependent_potassium_current_y3_gate__y3; // picoA + const double var_time_independent_potassium_current__lambda = 3.0 * (1.0 + exp(-2.4319999999999999 + 0.064000000000000001 * var_chaste_interface__membrane__Vm - 0.064000000000000001 * var_time_independent_potassium_current__E_K)) * exp(0.47999999999999998 + 0.048000000000000001 * var_time_independent_potassium_current__E_K - 0.048000000000000001 * var_chaste_interface__membrane__Vm) / (1.0 + exp(-2.1000000000000001 + 0.029999999999999999 * var_chaste_interface__membrane__Vm - 0.029999999999999999 * var_time_independent_potassium_current__E_K)); // per_millisecond + const double var_time_independent_potassium_current__mu = 0.75 * exp(-0.35000000000000003 + 0.035000000000000003 * var_chaste_interface__membrane__Vm - 0.035000000000000003 * var_time_independent_potassium_current__E_K) / (1.0 + exp(-2.1000000000000001 + 0.014999999999999999 * var_chaste_interface__membrane__Vm - 0.014999999999999999 * var_time_independent_potassium_current__E_K)); // per_millisecond + const double var_time_independent_potassium_current__fB = var_time_independent_potassium_current__mu / (var_time_independent_potassium_current__lambda + var_time_independent_potassium_current__mu); // dimensionless + const double var_time_independent_potassium_current__fO = var_time_independent_potassium_current__lambda / (var_time_independent_potassium_current__lambda + var_time_independent_potassium_current__mu); // dimensionless + const double d_dt_chaste_interface_var_time_independent_potassium_current_y_gate__y = (1.0 - var_chaste_interface__time_independent_potassium_current_y_gate__y) / (7.0 * exp(-0.32333333333333331 + 0.0033333333333333335 * var_chaste_interface__membrane__Vm - 0.0033333333333333335 * var_time_independent_potassium_current__E_K) + 8000.0 * exp(-11.411764705882353 + 0.11764705882352941 * var_chaste_interface__membrane__Vm - 0.11764705882352941 * var_time_independent_potassium_current__E_K)) - pow(var_time_independent_potassium_current__fO, 4) * var_chaste_interface__time_independent_potassium_current_y_gate__y / (0.00013999999999999999 * exp(10.659340659340661 + 0.10989010989010989 * var_time_independent_potassium_current__E_K - 0.10989010989010989 * var_chaste_interface__membrane__Vm) + 0.20000000000000001 * exp(0.19400000000000001 + 0.002 * var_time_independent_potassium_current__E_K - 0.002 * var_chaste_interface__membrane__Vm)); // 1 / millisecond + const double var_time_independent_potassium_current__i_K1 = 1.1459999999999999 * (-var_time_independent_potassium_current__E_K + var_chaste_interface__membrane__Vm) * (pow(var_time_independent_potassium_current__fO, 4) + 2.0 * pow(var_time_independent_potassium_current__fB, 2) * pow(var_time_independent_potassium_current__fO, 2) + 2.6666666666666665 * pow(var_time_independent_potassium_current__fO, 3) * var_time_independent_potassium_current__fB) * mParameters[0] * var_chaste_interface__time_independent_potassium_current_y_gate__y; // picoA + const double d_dt_chaste_interface_var_transient_outward_current_y1_gate__y1 = (1.0 - var_chaste_interface__transient_outward_current_y1_gate__y1) / (11.0 * exp(-0.035714285714285712 * var_chaste_interface__membrane__Vm) + 0.20000000000000001 * exp(-0.0025000000000000001 * var_chaste_interface__membrane__Vm)) - var_chaste_interface__transient_outward_current_y1_gate__y1 / (4.4000000000000004 * exp(0.0625 * var_chaste_interface__membrane__Vm) + 0.20000000000000001 * exp(0.002 * var_chaste_interface__membrane__Vm)); // 1 / millisecond + const double d_dt_chaste_interface_var_transient_outward_current_y2_gate__y2 = 0.0038 * (1.0 - var_chaste_interface__transient_outward_current_y2_gate__y2) * exp(-1.1946902654867255 - 0.088495575221238937 * var_chaste_interface__membrane__Vm) / (1.0 + 0.051334999999999999 * exp(-1.1946902654867255 - 0.088495575221238937 * var_chaste_interface__membrane__Vm)) - 0.0038 * var_chaste_interface__transient_outward_current_y2_gate__y2 * exp(1.1946902654867255 + 0.088495575221238937 * var_chaste_interface__membrane__Vm) / (1.0 + 0.067083000000000004 * exp(1.1946902654867255 + 0.088495575221238937 * var_chaste_interface__membrane__Vm)); // 1 / millisecond + const double var_transient_outward_current__i_to_K = 0.033000000000000002 * pow(var_chaste_interface__transient_outward_current_y1_gate__y1, 3) * var_constant_field_equations__CF_K * var_chaste_interface__transient_outward_current_y2_gate__y2; // picoA + const double d_dt_chaste_interface_var_internal_ion_concentrations__Ki = 2.591030680912499e-6 * var_sodium_potassium_pump__i_NaK - 1.2955153404562495e-6 * var_L_type_Ca_channel__i_CaL_K - 1.2955153404562495e-6 * var_background_KATP_current__i_KATP - 1.2955153404562495e-6 * var_background_Kpl_current__i_Kpl - 1.2955153404562495e-6 * var_background_NSC_current__i_bNSC_K - 1.2955153404562495e-6 * var_background_lCa_current__i_lCa_K - 1.2955153404562495e-6 * var_membrane__i_ext - 1.2955153404562495e-6 * var_rapid_time_dependent_potassium_current__i_Kr - 1.2955153404562495e-6 * var_slow_time_dependent_potassium_current__i_Ks_K - 1.2955153404562495e-6 * var_sodium_current__i_Na_K - 1.2955153404562495e-6 * var_time_independent_potassium_current__i_K1 - 1.2955153404562495e-6 * var_transient_outward_current__i_to_K; // millimolar / millisecond + const double var_transient_outward_current__i_to_Na = 0.00297 * pow(var_chaste_interface__transient_outward_current_y1_gate__y1, 3) * var_constant_field_equations__CF_Na * var_chaste_interface__transient_outward_current_y2_gate__y2; // picoA + const double d_dt_chaste_interface_var_internal_ion_concentrations__Nai = -3.8865460213687481e-6 * var_sodium_calcium_exchanger__i_NaCa - 3.8865460213687481e-6 * var_sodium_potassium_pump__i_NaK - 1.2955153404562495e-6 * var_L_type_Ca_channel__i_CaL_Na - 1.2955153404562495e-6 * var_background_NSC_current__i_bNSC_Na - 1.2955153404562495e-6 * var_background_lCa_current__i_lCa_Na - 1.2955153404562495e-6 * var_slow_time_dependent_potassium_current__i_Ks_Na - 1.2955153404562495e-6 * var_sodium_current__i_Na_Na - 1.2955153404562495e-6 * var_transient_outward_current__i_to_Na; // millimolar / millisecond + + mEvalF[1] = d_dt_chaste_interface_var_internal_ion_concentrations__Nai; + mPartialF[1] = EvaluatePartialDerivative1(var_chaste_interface__environment__time, rY, delta); + mEvalF[2] = d_dt_chaste_interface_var_internal_ion_concentrations__Ki; + mPartialF[2] = EvaluatePartialDerivative2(var_chaste_interface__environment__time, rY, delta); + mEvalF[3] = d_dt_chaste_interface_var_internal_ion_concentrations__Ca_Total; + mPartialF[3] = EvaluatePartialDerivative3(var_chaste_interface__environment__time, rY, delta); + mEvalF[4] = d_dt_chaste_interface_var_ATP_production__ATPi; + mPartialF[4] = EvaluatePartialDerivative4(var_chaste_interface__environment__time, rY, delta); + mEvalF[5] = d_dt_chaste_interface_var_sodium_current_voltage_dependent_gate__p_AP_Na; + mPartialF[5] = EvaluatePartialDerivative5(var_chaste_interface__environment__time, rY, delta); + mEvalF[6] = d_dt_chaste_interface_var_sodium_current_voltage_dependent_gate__p_RP_Na; + mPartialF[6] = EvaluatePartialDerivative6(var_chaste_interface__environment__time, rY, delta); + mEvalF[7] = d_dt_chaste_interface_var_sodium_current_voltage_dependent_gate__p_AI_Na; + mPartialF[7] = EvaluatePartialDerivative7(var_chaste_interface__environment__time, rY, delta); + mEvalF[8] = d_dt_chaste_interface_var_sodium_current_ultra_slow_gate__y; + mPartialF[8] = EvaluatePartialDerivative8(var_chaste_interface__environment__time, rY, delta); + mEvalF[9] = d_dt_chaste_interface_var_L_type_Ca_channel_voltage_dependent_gate__p_AP_CaL; + mPartialF[9] = EvaluatePartialDerivative9(var_chaste_interface__environment__time, rY, delta); + mEvalF[10] = d_dt_chaste_interface_var_L_type_Ca_channel_voltage_dependent_gate__p_RP_CaL; + mPartialF[10] = EvaluatePartialDerivative10(var_chaste_interface__environment__time, rY, delta); + mEvalF[11] = d_dt_chaste_interface_var_L_type_Ca_channel_voltage_dependent_gate__p_AI_CaL; + mPartialF[11] = EvaluatePartialDerivative11(var_chaste_interface__environment__time, rY, delta); + mEvalF[12] = d_dt_chaste_interface_var_L_type_Ca_channel_Ca_dependent_gate__p_U; + mPartialF[12] = EvaluatePartialDerivative12(var_chaste_interface__environment__time, rY, delta); + mEvalF[13] = d_dt_chaste_interface_var_L_type_Ca_channel_Ca_dependent_gate__p_UCa; + mPartialF[13] = EvaluatePartialDerivative13(var_chaste_interface__environment__time, rY, delta); + mEvalF[14] = d_dt_chaste_interface_var_L_type_Ca_channel_Ca_dependent_gate__p_C; + mPartialF[14] = EvaluatePartialDerivative14(var_chaste_interface__environment__time, rY, delta); + mEvalF[15] = d_dt_chaste_interface_var_L_type_Ca_channel_ultra_slow_gate__y; + mPartialF[15] = EvaluatePartialDerivative15(var_chaste_interface__environment__time, rY, delta); + mEvalF[16] = d_dt_chaste_interface_var_T_type_Ca_channel_y1_gate__y1; + mPartialF[16] = EvaluatePartialDerivative16(var_chaste_interface__environment__time, rY, delta); + mEvalF[17] = d_dt_chaste_interface_var_T_type_Ca_channel_y2_gate__y2; + mPartialF[17] = EvaluatePartialDerivative17(var_chaste_interface__environment__time, rY, delta); + mEvalF[18] = d_dt_chaste_interface_var_time_independent_potassium_current_y_gate__y; + mPartialF[18] = EvaluatePartialDerivative18(var_chaste_interface__environment__time, rY, delta); + mEvalF[19] = d_dt_chaste_interface_var_rapid_time_dependent_potassium_current_y1_gate__y1; + mPartialF[19] = EvaluatePartialDerivative19(var_chaste_interface__environment__time, rY, delta); + mEvalF[20] = d_dt_chaste_interface_var_rapid_time_dependent_potassium_current_y2_gate__y2; + mPartialF[20] = EvaluatePartialDerivative20(var_chaste_interface__environment__time, rY, delta); + mEvalF[21] = d_dt_chaste_interface_var_rapid_time_dependent_potassium_current_y3_gate__y3; + mPartialF[21] = EvaluatePartialDerivative21(var_chaste_interface__environment__time, rY, delta); + mEvalF[22] = d_dt_chaste_interface_var_slow_time_dependent_potassium_current_y1_gate__y1; + mPartialF[22] = EvaluatePartialDerivative22(var_chaste_interface__environment__time, rY, delta); + mEvalF[23] = d_dt_chaste_interface_var_slow_time_dependent_potassium_current_y2_gate__y2; + mPartialF[23] = EvaluatePartialDerivative23(var_chaste_interface__environment__time, rY, delta); + mEvalF[24] = d_dt_chaste_interface_var_transient_outward_current_y1_gate__y1; + mPartialF[24] = EvaluatePartialDerivative24(var_chaste_interface__environment__time, rY, delta); + mEvalF[25] = d_dt_chaste_interface_var_transient_outward_current_y2_gate__y2; + mPartialF[25] = EvaluatePartialDerivative25(var_chaste_interface__environment__time, rY, delta); + mEvalF[26] = d_dt_chaste_interface_var_sodium_calcium_exchanger_y_gate__y; + mPartialF[26] = EvaluatePartialDerivative26(var_chaste_interface__environment__time, rY, delta); + mEvalF[27] = d_dt_chaste_interface_var_sodium_potassium_pump_y_gate__y; + mPartialF[27] = EvaluatePartialDerivative27(var_chaste_interface__environment__time, rY, delta); + mEvalF[28] = d_dt_chaste_interface_var_SR_calcium_pump_y_gate__y; + mPartialF[28] = EvaluatePartialDerivative28(var_chaste_interface__environment__time, rY, delta); + mEvalF[29] = d_dt_chaste_interface_var_RyR_channel__p_open_RyR; + mPartialF[29] = EvaluatePartialDerivative29(var_chaste_interface__environment__time, rY, delta); + mEvalF[30] = d_dt_chaste_interface_var_RyR_channel__p_close_RyR; + mPartialF[30] = EvaluatePartialDerivative30(var_chaste_interface__environment__time, rY, delta); + mEvalF[31] = d_dt_chaste_interface_var_Ca_concentrations_in_SR__Ca_Total; + mPartialF[31] = EvaluatePartialDerivative31(var_chaste_interface__environment__time, rY, delta); + mEvalF[32] = d_dt_chaste_interface_var_Ca_concentrations_in_SR__Caup; + mPartialF[32] = EvaluatePartialDerivative32(var_chaste_interface__environment__time, rY, delta); + mEvalF[33] = d_dt_chaste_interface_var_NL_model__pCa; + mPartialF[33] = EvaluatePartialDerivative33(var_chaste_interface__environment__time, rY, delta); + mEvalF[34] = d_dt_chaste_interface_var_NL_model__pCaCB; + mPartialF[34] = EvaluatePartialDerivative34(var_chaste_interface__environment__time, rY, delta); + mEvalF[35] = d_dt_chaste_interface_var_NL_model__pCB; + mPartialF[35] = EvaluatePartialDerivative35(var_chaste_interface__environment__time, rY, delta); + mEvalF[36] = d_dt_chaste_interface_var_NL_model__X; + mPartialF[36] = EvaluatePartialDerivative36(var_chaste_interface__environment__time, rY, delta); + + { + if (fabs(mPartialF[1]) < delta){ + rY[1] += mDt*d_dt_chaste_interface_var_internal_ion_concentrations__Nai; + } + else + { + rY[1] += (d_dt_chaste_interface_var_internal_ion_concentrations__Nai/mPartialF[1])*(exp(mPartialF[1]*mDt)-1.0); + } + + } + { + if (fabs(mPartialF[2]) < delta){ + rY[2] += mDt*d_dt_chaste_interface_var_internal_ion_concentrations__Ki; + } + else + { + rY[2] += (d_dt_chaste_interface_var_internal_ion_concentrations__Ki/mPartialF[2])*(exp(mPartialF[2]*mDt)-1.0); + } + + } + { + if (fabs(mPartialF[3]) < delta){ + rY[3] += mDt*d_dt_chaste_interface_var_internal_ion_concentrations__Ca_Total; + } + else + { + rY[3] += (d_dt_chaste_interface_var_internal_ion_concentrations__Ca_Total/mPartialF[3])*(exp(mPartialF[3]*mDt)-1.0); + } + + } + { + if (fabs(mPartialF[4]) < delta){ + rY[4] += mDt*d_dt_chaste_interface_var_ATP_production__ATPi; + } + else + { + rY[4] += (d_dt_chaste_interface_var_ATP_production__ATPi/mPartialF[4])*(exp(mPartialF[4]*mDt)-1.0); + } + + } + { + if (fabs(mPartialF[5]) < delta){ + rY[5] += mDt*d_dt_chaste_interface_var_sodium_current_voltage_dependent_gate__p_AP_Na; + } + else + { + rY[5] += (d_dt_chaste_interface_var_sodium_current_voltage_dependent_gate__p_AP_Na/mPartialF[5])*(exp(mPartialF[5]*mDt)-1.0); + } + + } + { + if (fabs(mPartialF[6]) < delta){ + rY[6] += mDt*d_dt_chaste_interface_var_sodium_current_voltage_dependent_gate__p_RP_Na; + } + else + { + rY[6] += (d_dt_chaste_interface_var_sodium_current_voltage_dependent_gate__p_RP_Na/mPartialF[6])*(exp(mPartialF[6]*mDt)-1.0); + } + + } + { + if (fabs(mPartialF[7]) < delta){ + rY[7] += mDt*d_dt_chaste_interface_var_sodium_current_voltage_dependent_gate__p_AI_Na; + } + else + { + rY[7] += (d_dt_chaste_interface_var_sodium_current_voltage_dependent_gate__p_AI_Na/mPartialF[7])*(exp(mPartialF[7]*mDt)-1.0); + } + + } + { + if (fabs(mPartialF[8]) < delta){ + rY[8] += mDt*d_dt_chaste_interface_var_sodium_current_ultra_slow_gate__y; + } + else + { + rY[8] += (d_dt_chaste_interface_var_sodium_current_ultra_slow_gate__y/mPartialF[8])*(exp(mPartialF[8]*mDt)-1.0); + } + + } + { + if (fabs(mPartialF[9]) < delta){ + rY[9] += mDt*d_dt_chaste_interface_var_L_type_Ca_channel_voltage_dependent_gate__p_AP_CaL; + } + else + { + rY[9] += (d_dt_chaste_interface_var_L_type_Ca_channel_voltage_dependent_gate__p_AP_CaL/mPartialF[9])*(exp(mPartialF[9]*mDt)-1.0); + } + + } + { + if (fabs(mPartialF[10]) < delta){ + rY[10] += mDt*d_dt_chaste_interface_var_L_type_Ca_channel_voltage_dependent_gate__p_RP_CaL; + } + else + { + rY[10] += (d_dt_chaste_interface_var_L_type_Ca_channel_voltage_dependent_gate__p_RP_CaL/mPartialF[10])*(exp(mPartialF[10]*mDt)-1.0); + } + + } + { + if (fabs(mPartialF[11]) < delta){ + rY[11] += mDt*d_dt_chaste_interface_var_L_type_Ca_channel_voltage_dependent_gate__p_AI_CaL; + } + else + { + rY[11] += (d_dt_chaste_interface_var_L_type_Ca_channel_voltage_dependent_gate__p_AI_CaL/mPartialF[11])*(exp(mPartialF[11]*mDt)-1.0); + } + + } + { + if (fabs(mPartialF[12]) < delta){ + rY[12] += mDt*d_dt_chaste_interface_var_L_type_Ca_channel_Ca_dependent_gate__p_U; + } + else + { + rY[12] += (d_dt_chaste_interface_var_L_type_Ca_channel_Ca_dependent_gate__p_U/mPartialF[12])*(exp(mPartialF[12]*mDt)-1.0); + } + + } + { + if (fabs(mPartialF[13]) < delta){ + rY[13] += mDt*d_dt_chaste_interface_var_L_type_Ca_channel_Ca_dependent_gate__p_UCa; + } + else + { + rY[13] += (d_dt_chaste_interface_var_L_type_Ca_channel_Ca_dependent_gate__p_UCa/mPartialF[13])*(exp(mPartialF[13]*mDt)-1.0); + } + + } + { + if (fabs(mPartialF[14]) < delta){ + rY[14] += mDt*d_dt_chaste_interface_var_L_type_Ca_channel_Ca_dependent_gate__p_C; + } + else + { + rY[14] += (d_dt_chaste_interface_var_L_type_Ca_channel_Ca_dependent_gate__p_C/mPartialF[14])*(exp(mPartialF[14]*mDt)-1.0); + } + + } + { + if (fabs(mPartialF[15]) < delta){ + rY[15] += mDt*d_dt_chaste_interface_var_L_type_Ca_channel_ultra_slow_gate__y; + } + else + { + rY[15] += (d_dt_chaste_interface_var_L_type_Ca_channel_ultra_slow_gate__y/mPartialF[15])*(exp(mPartialF[15]*mDt)-1.0); + } + + } + { + if (fabs(mPartialF[16]) < delta){ + rY[16] += mDt*d_dt_chaste_interface_var_T_type_Ca_channel_y1_gate__y1; + } + else + { + rY[16] += (d_dt_chaste_interface_var_T_type_Ca_channel_y1_gate__y1/mPartialF[16])*(exp(mPartialF[16]*mDt)-1.0); + } + + } + { + if (fabs(mPartialF[17]) < delta){ + rY[17] += mDt*d_dt_chaste_interface_var_T_type_Ca_channel_y2_gate__y2; + } + else + { + rY[17] += (d_dt_chaste_interface_var_T_type_Ca_channel_y2_gate__y2/mPartialF[17])*(exp(mPartialF[17]*mDt)-1.0); + } + + } + { + if (fabs(mPartialF[18]) < delta){ + rY[18] += mDt*d_dt_chaste_interface_var_time_independent_potassium_current_y_gate__y; + } + else + { + rY[18] += (d_dt_chaste_interface_var_time_independent_potassium_current_y_gate__y/mPartialF[18])*(exp(mPartialF[18]*mDt)-1.0); + } + + } + { + if (fabs(mPartialF[19]) < delta){ + rY[19] += mDt*d_dt_chaste_interface_var_rapid_time_dependent_potassium_current_y1_gate__y1; + } + else + { + rY[19] += (d_dt_chaste_interface_var_rapid_time_dependent_potassium_current_y1_gate__y1/mPartialF[19])*(exp(mPartialF[19]*mDt)-1.0); + } + + } + { + if (fabs(mPartialF[20]) < delta){ + rY[20] += mDt*d_dt_chaste_interface_var_rapid_time_dependent_potassium_current_y2_gate__y2; + } + else + { + rY[20] += (d_dt_chaste_interface_var_rapid_time_dependent_potassium_current_y2_gate__y2/mPartialF[20])*(exp(mPartialF[20]*mDt)-1.0); + } + + } + { + if (fabs(mPartialF[21]) < delta){ + rY[21] += mDt*d_dt_chaste_interface_var_rapid_time_dependent_potassium_current_y3_gate__y3; + } + else + { + rY[21] += (d_dt_chaste_interface_var_rapid_time_dependent_potassium_current_y3_gate__y3/mPartialF[21])*(exp(mPartialF[21]*mDt)-1.0); + } + + } + { + if (fabs(mPartialF[22]) < delta){ + rY[22] += mDt*d_dt_chaste_interface_var_slow_time_dependent_potassium_current_y1_gate__y1; + } + else + { + rY[22] += (d_dt_chaste_interface_var_slow_time_dependent_potassium_current_y1_gate__y1/mPartialF[22])*(exp(mPartialF[22]*mDt)-1.0); + } + + } + { + if (fabs(mPartialF[23]) < delta){ + rY[23] += mDt*d_dt_chaste_interface_var_slow_time_dependent_potassium_current_y2_gate__y2; + } + else + { + rY[23] += (d_dt_chaste_interface_var_slow_time_dependent_potassium_current_y2_gate__y2/mPartialF[23])*(exp(mPartialF[23]*mDt)-1.0); + } + + } + { + if (fabs(mPartialF[24]) < delta){ + rY[24] += mDt*d_dt_chaste_interface_var_transient_outward_current_y1_gate__y1; + } + else + { + rY[24] += (d_dt_chaste_interface_var_transient_outward_current_y1_gate__y1/mPartialF[24])*(exp(mPartialF[24]*mDt)-1.0); + } + + } + { + if (fabs(mPartialF[25]) < delta){ + rY[25] += mDt*d_dt_chaste_interface_var_transient_outward_current_y2_gate__y2; + } + else + { + rY[25] += (d_dt_chaste_interface_var_transient_outward_current_y2_gate__y2/mPartialF[25])*(exp(mPartialF[25]*mDt)-1.0); + } + + } + { + if (fabs(mPartialF[26]) < delta){ + rY[26] += mDt*d_dt_chaste_interface_var_sodium_calcium_exchanger_y_gate__y; + } + else + { + rY[26] += (d_dt_chaste_interface_var_sodium_calcium_exchanger_y_gate__y/mPartialF[26])*(exp(mPartialF[26]*mDt)-1.0); + } + + } + { + if (fabs(mPartialF[27]) < delta){ + rY[27] += mDt*d_dt_chaste_interface_var_sodium_potassium_pump_y_gate__y; + } + else + { + rY[27] += (d_dt_chaste_interface_var_sodium_potassium_pump_y_gate__y/mPartialF[27])*(exp(mPartialF[27]*mDt)-1.0); + } + + } + { + if (fabs(mPartialF[28]) < delta){ + rY[28] += mDt*d_dt_chaste_interface_var_SR_calcium_pump_y_gate__y; + } + else + { + rY[28] += (d_dt_chaste_interface_var_SR_calcium_pump_y_gate__y/mPartialF[28])*(exp(mPartialF[28]*mDt)-1.0); + } + + } + { + if (fabs(mPartialF[29]) < delta){ + rY[29] += mDt*d_dt_chaste_interface_var_RyR_channel__p_open_RyR; + } + else + { + rY[29] += (d_dt_chaste_interface_var_RyR_channel__p_open_RyR/mPartialF[29])*(exp(mPartialF[29]*mDt)-1.0); + } + + } + { + if (fabs(mPartialF[30]) < delta){ + rY[30] += mDt*d_dt_chaste_interface_var_RyR_channel__p_close_RyR; + } + else + { + rY[30] += (d_dt_chaste_interface_var_RyR_channel__p_close_RyR/mPartialF[30])*(exp(mPartialF[30]*mDt)-1.0); + } + + } + { + if (fabs(mPartialF[31]) < delta){ + rY[31] += mDt*d_dt_chaste_interface_var_Ca_concentrations_in_SR__Ca_Total; + } + else + { + rY[31] += (d_dt_chaste_interface_var_Ca_concentrations_in_SR__Ca_Total/mPartialF[31])*(exp(mPartialF[31]*mDt)-1.0); + } + + } + { + if (fabs(mPartialF[32]) < delta){ + rY[32] += mDt*d_dt_chaste_interface_var_Ca_concentrations_in_SR__Caup; + } + else + { + rY[32] += (d_dt_chaste_interface_var_Ca_concentrations_in_SR__Caup/mPartialF[32])*(exp(mPartialF[32]*mDt)-1.0); + } + + } + { + if (fabs(mPartialF[33]) < delta){ + rY[33] += mDt*d_dt_chaste_interface_var_NL_model__pCa; + } + else + { + rY[33] += (d_dt_chaste_interface_var_NL_model__pCa/mPartialF[33])*(exp(mPartialF[33]*mDt)-1.0); + } + + } + { + if (fabs(mPartialF[34]) < delta){ + rY[34] += mDt*d_dt_chaste_interface_var_NL_model__pCaCB; + } + else + { + rY[34] += (d_dt_chaste_interface_var_NL_model__pCaCB/mPartialF[34])*(exp(mPartialF[34]*mDt)-1.0); + } + + } + { + if (fabs(mPartialF[35]) < delta){ + rY[35] += mDt*d_dt_chaste_interface_var_NL_model__pCB; + } + else + { + rY[35] += (d_dt_chaste_interface_var_NL_model__pCB/mPartialF[35])*(exp(mPartialF[35]*mDt)-1.0); + } + + } + { + if (fabs(mPartialF[36]) < delta){ + rY[36] += mDt*d_dt_chaste_interface_var_NL_model__X; + } + else + { + rY[36] += (d_dt_chaste_interface_var_NL_model__X/mPartialF[36])*(exp(mPartialF[36]*mDt)-1.0); + } + + } + + } + + + double Dynamicmatsuoka_model_2003FromCellMLGRL1::EvaluateYDerivative0(double var_chaste_interface__environment__time, std::vector& rY) + { + double d_dt_chaste_interface_var_membrane__Vm; + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -85.95752434460744 + double var_chaste_interface__internal_ion_concentrations__Nai = rY[1]; + // Units: millimolar; Initial value: 4.925761439682025 + double var_chaste_interface__internal_ion_concentrations__Ki = rY[2]; + // Units: millimolar; Initial value: 143.1837333000449 + double var_chaste_interface__internal_ion_concentrations__Ca_Total = rY[3]; + // Units: millimolar; Initial value: 0.00040180173572968586 + double var_chaste_interface__ATP_production__ATPi = rY[4]; + // Units: millimolar; Initial value: 4.657102729020499 + double var_chaste_interface__sodium_current_voltage_dependent_gate__p_AP_Na = rY[5]; + // Units: dimensionless; Initial value: 1.779648367445368e-05 + double var_chaste_interface__sodium_current_ultra_slow_gate__y = rY[8]; + // Units: dimensionless; Initial value: 0.5861887862983165 + double var_chaste_interface__L_type_Ca_channel_voltage_dependent_gate__p_AP_CaL = rY[9]; + // Units: dimensionless; Initial value: 1.5445004166497696e-06 + double var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_U = rY[12]; + // Units: dimensionless; Initial value: 0.17246483915629204 + double var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_UCa = rY[13]; + // Units: dimensionless; Initial value: 6.098246017787626e-05 + double var_chaste_interface__L_type_Ca_channel_ultra_slow_gate__y = rY[15]; + // Units: dimensionless; Initial value: 0.9985266538252986 + double var_chaste_interface__T_type_Ca_channel_y1_gate__y1 = rY[16]; + // Units: dimensionless; Initial value: 1.6882718240109127e-05 + double var_chaste_interface__T_type_Ca_channel_y2_gate__y2 = rY[17]; + // Units: dimensionless; Initial value: 0.8585352091865849 + double var_chaste_interface__time_independent_potassium_current_y_gate__y = rY[18]; + // Units: dimensionless; Initial value: 0.6080573900752752 + double var_chaste_interface__rapid_time_dependent_potassium_current_y1_gate__y1 = rY[19]; + // Units: dimensionless; Initial value: 0.0018339931180983765 + double var_chaste_interface__rapid_time_dependent_potassium_current_y2_gate__y2 = rY[20]; + // Units: dimensionless; Initial value: 0.20443083454225305 + double var_chaste_interface__rapid_time_dependent_potassium_current_y3_gate__y3 = rY[21]; + // Units: dimensionless; Initial value: 0.967887666264921 + double var_chaste_interface__slow_time_dependent_potassium_current_y1_gate__y1 = rY[22]; + // Units: dimensionless; Initial value: 0.09738789658609195 + double var_chaste_interface__slow_time_dependent_potassium_current_y2_gate__y2 = rY[23]; + // Units: dimensionless; Initial value: 0.09745345578743213 + double var_chaste_interface__transient_outward_current_y1_gate__y1 = rY[24]; + // Units: dimensionless; Initial value: 0.0007956883250874798 + double var_chaste_interface__transient_outward_current_y2_gate__y2 = rY[25]; + // Units: dimensionless; Initial value: 0.9999125083105881 + double var_chaste_interface__sodium_calcium_exchanger_y_gate__y = rY[26]; + // Units: dimensionless; Initial value: 0.9891789193465331 + double var_chaste_interface__sodium_potassium_pump_y_gate__y = rY[27]; + // Units: dimensionless; Initial value: 0.5910747147428818 + + + // Mathematics + const double var_L_type_Ca_channel__p_open_CaL = (var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_U + var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_UCa) * var_chaste_interface__L_type_Ca_channel_ultra_slow_gate__y * var_chaste_interface__L_type_Ca_channel_voltage_dependent_gate__p_AP_CaL / (1.0 + 2.7439999999999993 / pow(var_chaste_interface__ATP_production__ATPi, 3)); // dimensionless + const double var_internal_ion_concentrations__Cai = -0.026190000000000001 + 0.5 * sqrt(pow((0.052380000000000003 - var_chaste_interface__internal_ion_concentrations__Ca_Total), 2) + 0.0095200000000000007 * var_chaste_interface__internal_ion_concentrations__Ca_Total) + 0.5 * var_chaste_interface__internal_ion_concentrations__Ca_Total; // millimolar + const double var_background_lCa_current__p_open = 1 / (1.0 + 1.7279999999999996e-9 / pow(var_internal_ion_concentrations__Cai, 3)); // dimensionless + const double var_constant_field_equations__CF_Ca = ((var_chaste_interface__membrane__Vm == 0) ? (-1.8) : (0.074870384603595908 * (-1.8 * exp(-0.074870384603595908 * var_chaste_interface__membrane__Vm) + var_internal_ion_concentrations__Cai) * var_chaste_interface__membrane__Vm / (1.0 - exp(-0.074870384603595908 * var_chaste_interface__membrane__Vm)))); // millimolar + const double var_L_type_Ca_channel__i_CaL_Ca = 8712.0 * var_L_type_Ca_channel__p_open_CaL * var_constant_field_equations__CF_Ca; // picoA + const double var_T_type_Ca_channel__i_Ca_T = 612.0 * var_chaste_interface__T_type_Ca_channel_y1_gate__y1 * var_chaste_interface__T_type_Ca_channel_y2_gate__y2 * var_constant_field_equations__CF_Ca; // picoA + const double var_background_Cab_current__i_Cab = 0.040000000000000001 * var_constant_field_equations__CF_Ca; // picoA + const double var_constant_field_equations__CF_K = ((var_chaste_interface__membrane__Vm == 0) ? (var_chaste_interface__internal_ion_concentrations__Ki) : (0.037435192301797954 * (-5.4000000000000004 * exp(-0.037435192301797954 * var_chaste_interface__membrane__Vm) + var_chaste_interface__internal_ion_concentrations__Ki) * var_chaste_interface__membrane__Vm / (1.0 - exp(-0.037435192301797954 * var_chaste_interface__membrane__Vm)))); // millimolar + const double var_L_type_Ca_channel__i_CaL_K = 3.1798799999999998 * var_L_type_Ca_channel__p_open_CaL * var_constant_field_equations__CF_K; // picoA + const double var_background_Kpl_current__i_Kpl = ((var_chaste_interface__membrane__Vm == (-3.0)) ? (0.0014308470000000001 * var_constant_field_equations__CF_K) : (0.00011 * (3.0 + var_chaste_interface__membrane__Vm) * var_constant_field_equations__CF_K / (1.0 - exp(-0.23076923076923078 - 0.076923076923076927 * var_chaste_interface__membrane__Vm)))); // picoA + const double var_background_NSC_current__i_bNSC_K = 0.15400000000000003 * var_constant_field_equations__CF_K; // picoA + const double var_background_lCa_current__i_lCa_K = 0.11 * var_background_lCa_current__p_open * var_constant_field_equations__CF_K; // picoA + const double var_constant_field_equations__CF_Na = ((var_chaste_interface__membrane__Vm == 0) ? (-140.0) : (0.037435192301797954 * (-140.0 * exp(-0.037435192301797954 * var_chaste_interface__membrane__Vm) + var_chaste_interface__internal_ion_concentrations__Nai) * var_chaste_interface__membrane__Vm / (1.0 - exp(-0.037435192301797954 * var_chaste_interface__membrane__Vm)))); // millimolar + const double var_L_type_Ca_channel__i_CaL_Na = 0.16117199999999998 * var_L_type_Ca_channel__p_open_CaL * var_constant_field_equations__CF_Na; // picoA + const double var_background_NSC_current__i_bNSC_Na = 0.38500000000000001 * var_constant_field_equations__CF_Na; // picoA + const double var_background_lCa_current__i_lCa_Na = 0.11 * var_background_lCa_current__p_open * var_constant_field_equations__CF_Na; // picoA + const double var_membrane__i_ext = 1.0 * GetIntracellularAreaStimulus(var_chaste_interface__environment__time) * mParameters[0] / HeartConfig::Instance()->GetCapacitance(); // picoA + const double var_slow_time_dependent_potassium_current__i_Ks_K = 5.04 * pow(var_chaste_interface__slow_time_dependent_potassium_current_y1_gate__y1, 2) * (0.10000000000000001 + 0.90000000000000002 * var_chaste_interface__slow_time_dependent_potassium_current_y2_gate__y2) * var_constant_field_equations__CF_K; // picoA + const double var_slow_time_dependent_potassium_current__i_Ks_Na = 0.2016 * pow(var_chaste_interface__slow_time_dependent_potassium_current_y1_gate__y1, 2) * (0.10000000000000001 + 0.90000000000000002 * var_chaste_interface__slow_time_dependent_potassium_current_y2_gate__y2) * var_constant_field_equations__CF_Na; // picoA + const double var_sodium_calcium_exchanger__k1 = exp(0.011979261536575346 * var_chaste_interface__membrane__Vm); // per_millisecond + const double var_sodium_calcium_exchanger__k2 = exp(-0.025455930765222609 * var_chaste_interface__membrane__Vm); // per_millisecond + const double var_sodium_calcium_exchanger__p_E1Na = 1 / (1.0 + 669.921875 * (1.0 + 724.63768115942037 * var_internal_ion_concentrations__Cai) / pow(var_chaste_interface__internal_ion_concentrations__Nai, 3)); // dimensionless + const double var_sodium_calcium_exchanger__i_NaCa = 6.8099999999999996 * (-0.6399652192815608 * (1.0 - var_chaste_interface__sodium_calcium_exchanger_y_gate__y) * var_sodium_calcium_exchanger__k2 + var_sodium_calcium_exchanger__k1 * var_sodium_calcium_exchanger__p_E1Na * var_chaste_interface__sodium_calcium_exchanger_y_gate__y) * mParameters[0]; // picoA + const double var_sodium_current__i_Na_K = 286.0 * var_constant_field_equations__CF_K * var_chaste_interface__sodium_current_ultra_slow_gate__y * var_chaste_interface__sodium_current_voltage_dependent_gate__p_AP_Na; // picoA + const double var_sodium_current__i_Na_Na = 2860.0 * var_constant_field_equations__CF_Na * var_chaste_interface__sodium_current_ultra_slow_gate__y * var_chaste_interface__sodium_current_voltage_dependent_gate__p_AP_Na; // picoA + const double var_sodium_potassium_pump__Nao_Eff = 140.0 * exp(-0.030696857687474322 * var_chaste_interface__membrane__Vm); // millimolar + const double var_sodium_potassium_pump__k1 = 0.37 / (1.0 + 0.094 / var_chaste_interface__ATP_production__ATPi); // per_millisecond + const double var_sodium_potassium_pump__p_E1Na = 1 / (1.0 + 4.4045579125871104 * pow(1 / var_chaste_interface__internal_ion_concentrations__Nai, 1.0600000000000001) * (1.0 + 0.020000293738509214 * pow(var_chaste_interface__internal_ion_concentrations__Ki, 1.1200000000000001))); // dimensionless + const double var_sodium_potassium_pump__p_E2Na = 1 / (1.0 + 2804.9496956618664 * pow(1 / var_sodium_potassium_pump__Nao_Eff, 1.0600000000000001)); // dimensionless + const double var_sodium_potassium_pump__i_NaK = 21.0 * (-0.040000000000000001 * (1.0 - var_chaste_interface__sodium_potassium_pump_y_gate__y) * var_sodium_potassium_pump__p_E2Na + var_sodium_potassium_pump__k1 * var_sodium_potassium_pump__p_E1Na * var_chaste_interface__sodium_potassium_pump_y_gate__y) * mParameters[0]; // picoA + const double var_time_independent_potassium_current__E_K = 26.712831923985377 * log(5.4000000000000004 / var_chaste_interface__internal_ion_concentrations__Ki); // millivolt + const double var_background_KATP_current__i_KATP = 66.022388395163091 * (-var_time_independent_potassium_current__E_K + var_chaste_interface__membrane__Vm) / (1.0 + 99.999999999999986 * pow(var_chaste_interface__ATP_production__ATPi, 2)); // picoA + const double var_rapid_time_dependent_potassium_current__i_Kr = 0.0086400000000000001 * (-var_time_independent_potassium_current__E_K + var_chaste_interface__membrane__Vm) * (0.40000000000000002 * var_chaste_interface__rapid_time_dependent_potassium_current_y2_gate__y2 + 0.59999999999999998 * var_chaste_interface__rapid_time_dependent_potassium_current_y1_gate__y1) * mParameters[0] * var_chaste_interface__rapid_time_dependent_potassium_current_y3_gate__y3; // picoA + const double var_time_independent_potassium_current__lambda = 3.0 * (1.0 + exp(-2.4319999999999999 + 0.064000000000000001 * var_chaste_interface__membrane__Vm - 0.064000000000000001 * var_time_independent_potassium_current__E_K)) * exp(0.47999999999999998 + 0.048000000000000001 * var_time_independent_potassium_current__E_K - 0.048000000000000001 * var_chaste_interface__membrane__Vm) / (1.0 + exp(-2.1000000000000001 + 0.029999999999999999 * var_chaste_interface__membrane__Vm - 0.029999999999999999 * var_time_independent_potassium_current__E_K)); // per_millisecond + const double var_time_independent_potassium_current__mu = 0.75 * exp(-0.35000000000000003 + 0.035000000000000003 * var_chaste_interface__membrane__Vm - 0.035000000000000003 * var_time_independent_potassium_current__E_K) / (1.0 + exp(-2.1000000000000001 + 0.014999999999999999 * var_chaste_interface__membrane__Vm - 0.014999999999999999 * var_time_independent_potassium_current__E_K)); // per_millisecond + const double var_time_independent_potassium_current__fB = var_time_independent_potassium_current__mu / (var_time_independent_potassium_current__lambda + var_time_independent_potassium_current__mu); // dimensionless + const double var_time_independent_potassium_current__fO = var_time_independent_potassium_current__lambda / (var_time_independent_potassium_current__lambda + var_time_independent_potassium_current__mu); // dimensionless + const double var_time_independent_potassium_current__i_K1 = 1.1459999999999999 * (-var_time_independent_potassium_current__E_K + var_chaste_interface__membrane__Vm) * (pow(var_time_independent_potassium_current__fO, 4) + 2.0 * pow(var_time_independent_potassium_current__fB, 2) * pow(var_time_independent_potassium_current__fO, 2) + 2.6666666666666665 * pow(var_time_independent_potassium_current__fO, 3) * var_time_independent_potassium_current__fB) * mParameters[0] * var_chaste_interface__time_independent_potassium_current_y_gate__y; // picoA + const double var_transient_outward_current__i_to_K = 0.033000000000000002 * pow(var_chaste_interface__transient_outward_current_y1_gate__y1, 3) * var_constant_field_equations__CF_K * var_chaste_interface__transient_outward_current_y2_gate__y2; // picoA + const double var_transient_outward_current__i_to_Na = 0.00297 * pow(var_chaste_interface__transient_outward_current_y1_gate__y1, 3) * var_constant_field_equations__CF_Na * var_chaste_interface__transient_outward_current_y2_gate__y2; // picoA + d_dt_chaste_interface_var_membrane__Vm = (-var_L_type_Ca_channel__i_CaL_Ca - var_L_type_Ca_channel__i_CaL_K - var_L_type_Ca_channel__i_CaL_Na - var_T_type_Ca_channel__i_Ca_T - var_background_Cab_current__i_Cab - var_background_KATP_current__i_KATP - var_background_Kpl_current__i_Kpl - var_background_NSC_current__i_bNSC_K - var_background_NSC_current__i_bNSC_Na - var_background_lCa_current__i_lCa_K - var_background_lCa_current__i_lCa_Na - var_membrane__i_ext - var_rapid_time_dependent_potassium_current__i_Kr - var_slow_time_dependent_potassium_current__i_Ks_K - var_slow_time_dependent_potassium_current__i_Ks_Na - var_sodium_calcium_exchanger__i_NaCa - var_sodium_current__i_Na_K - var_sodium_current__i_Na_Na - var_sodium_potassium_pump__i_NaK - var_time_independent_potassium_current__i_K1 - var_transient_outward_current__i_to_K - var_transient_outward_current__i_to_Na) / mParameters[0]; // millivolt / millisecond + + return d_dt_chaste_interface_var_membrane__Vm; + } + + double Dynamicmatsuoka_model_2003FromCellMLGRL1::EvaluatePartialDerivative0(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -85.95752434460744 + double var_chaste_interface__internal_ion_concentrations__Nai = rY[1]; + // Units: millimolar; Initial value: 4.925761439682025 + double var_chaste_interface__internal_ion_concentrations__Ki = rY[2]; + // Units: millimolar; Initial value: 143.1837333000449 + double var_chaste_interface__internal_ion_concentrations__Ca_Total = rY[3]; + // Units: millimolar; Initial value: 0.00040180173572968586 + double var_chaste_interface__ATP_production__ATPi = rY[4]; + // Units: millimolar; Initial value: 4.657102729020499 + double var_chaste_interface__sodium_current_voltage_dependent_gate__p_AP_Na = rY[5]; + // Units: dimensionless; Initial value: 1.779648367445368e-05 + double var_chaste_interface__sodium_current_ultra_slow_gate__y = rY[8]; + // Units: dimensionless; Initial value: 0.5861887862983165 + double var_chaste_interface__L_type_Ca_channel_voltage_dependent_gate__p_AP_CaL = rY[9]; + // Units: dimensionless; Initial value: 1.5445004166497696e-06 + double var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_U = rY[12]; + // Units: dimensionless; Initial value: 0.17246483915629204 + double var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_UCa = rY[13]; + // Units: dimensionless; Initial value: 6.098246017787626e-05 + double var_chaste_interface__L_type_Ca_channel_ultra_slow_gate__y = rY[15]; + // Units: dimensionless; Initial value: 0.9985266538252986 + double var_chaste_interface__T_type_Ca_channel_y1_gate__y1 = rY[16]; + // Units: dimensionless; Initial value: 1.6882718240109127e-05 + double var_chaste_interface__T_type_Ca_channel_y2_gate__y2 = rY[17]; + // Units: dimensionless; Initial value: 0.8585352091865849 + double var_chaste_interface__time_independent_potassium_current_y_gate__y = rY[18]; + // Units: dimensionless; Initial value: 0.6080573900752752 + double var_chaste_interface__rapid_time_dependent_potassium_current_y1_gate__y1 = rY[19]; + // Units: dimensionless; Initial value: 0.0018339931180983765 + double var_chaste_interface__rapid_time_dependent_potassium_current_y2_gate__y2 = rY[20]; + // Units: dimensionless; Initial value: 0.20443083454225305 + double var_chaste_interface__rapid_time_dependent_potassium_current_y3_gate__y3 = rY[21]; + // Units: dimensionless; Initial value: 0.967887666264921 + double var_chaste_interface__slow_time_dependent_potassium_current_y1_gate__y1 = rY[22]; + // Units: dimensionless; Initial value: 0.09738789658609195 + double var_chaste_interface__slow_time_dependent_potassium_current_y2_gate__y2 = rY[23]; + // Units: dimensionless; Initial value: 0.09745345578743213 + double var_chaste_interface__transient_outward_current_y1_gate__y1 = rY[24]; + // Units: dimensionless; Initial value: 0.0007956883250874798 + double var_chaste_interface__transient_outward_current_y2_gate__y2 = rY[25]; + // Units: dimensionless; Initial value: 0.9999125083105881 + double var_chaste_interface__sodium_calcium_exchanger_y_gate__y = rY[26]; + // Units: dimensionless; Initial value: 0.9891789193465331 + double var_chaste_interface__sodium_potassium_pump_y_gate__y = rY[27]; + // Units: dimensionless; Initial value: 0.5910747147428818 + + const double var_x0 = 1 / mParameters[0]; + const double var_x1 = 0.037435192301797954 * var_chaste_interface__membrane__Vm; + const double var_x2 = exp(-var_x1); + const double var_x3 = 1.0 - var_x2; + const double var_x4 = 1 / var_x3; + const double var_x5 = -5.4000000000000004 * var_x2 + var_chaste_interface__internal_ion_concentrations__Ki; + const double var_x6 = var_x4 * var_x5; + const double var_x7 = var_x4 * var_chaste_interface__membrane__Vm; + const double var_x8 = var_x2 * var_x7; + const double var_x9 = var_x2 * var_chaste_interface__membrane__Vm / pow(var_x3, 2); + const double var_x10 = var_x5 * var_x9; + const double var_x11 = var_chaste_interface__membrane__Vm == (-3.0); + const double var_x12 = -0.076923076923076927 * var_chaste_interface__membrane__Vm; + const double var_x13 = exp(-0.23076923076923078 + var_x12); + const double var_x14 = 1.0 - var_x13; + const double var_x15 = 1 / var_x14; + const double var_x16 = 0.00011 * var_x15; + const double var_x17 = 3.0 + var_chaste_interface__membrane__Vm; + const double var_x18 = var_x13 * var_x17 / pow(var_x14, 2); + const double var_x19 = var_chaste_interface__membrane__Vm == 0; + const double var_x20 = var_x15 * var_x17; + const double var_x21 = 4.1178711531977753e-6 * var_x6; + const double var_x22 = ((var_x11) ? (5.3564032599450697e-5 * var_x6 + 1.0827971248429142e-5 * var_x8 - 2.0051798608202113e-6 * var_x10) : ((var_x19) ? (var_x16 * var_chaste_interface__internal_ion_concentrations__Ki - 8.4615384615384621e-6 * var_x18 * var_chaste_interface__internal_ion_concentrations__Ki) : (var_x20 * var_x21 + 8.3242781186752018e-7 * var_x20 * var_x8 - 1.5415329849398521e-7 * var_x10 * var_x20 + var_x15 * var_x21 * var_chaste_interface__membrane__Vm - 3.1675931947675192e-7 * var_x18 * var_x6 * var_chaste_interface__membrane__Vm))); + const double var_x23 = -140.0 * var_x2 + var_chaste_interface__internal_ion_concentrations__Nai; + const double var_x24 = var_x23 * var_x4; + const double var_x25 = ((var_x19) ? (0) : (0.037435192301797954 * var_x24 + 0.196195107174163 * var_x8 - 0.0014013936226725929 * var_x23 * var_x9)); + const double var_x26 = 0.074870384603595908 * var_chaste_interface__membrane__Vm; + const double var_x27 = exp(-var_x26); + const double var_x28 = 1.0 - var_x27; + const double var_x29 = 1 / var_x28; + const double var_x30 = sqrt(pow((0.052380000000000003 - var_chaste_interface__internal_ion_concentrations__Ca_Total), 2) + 0.0095200000000000007 * var_chaste_interface__internal_ion_concentrations__Ca_Total); + const double var_x31 = -0.026190000000000001 + 0.5 * var_x30 + 0.5 * var_chaste_interface__internal_ion_concentrations__Ca_Total; + const double var_x32 = var_x31 - 1.8 * var_x27; + const double var_x33 = var_x29 * var_x32; + const double var_x34 = var_x27 * var_chaste_interface__membrane__Vm; + const double var_x35 = ((var_x19) ? (0) : (0.074870384603595908 * var_x33 + 0.010090034083242669 * var_x29 * var_x34 - 0.0056055744906903715 * var_x32 * var_x34 / pow(var_x28, 2))); + const double var_x36 = pow(var_chaste_interface__ATP_production__ATPi, 2); + const double var_x37 = 1 / (1.0 + 99.999999999999986 * var_x36); + const double var_x38 = ((var_x19) ? (0) : (0.037435192301797954 * var_x6 + 0.0075675255624320014 * var_x8 - 0.0014013936226725929 * var_x10)); + const double var_x39 = exp(-0.025455930765222609 * var_chaste_interface__membrane__Vm); + const double var_x40 = var_x39 * (-0.6399652192815608 + 0.6399652192815608 * var_chaste_interface__sodium_calcium_exchanger_y_gate__y); + const double var_x41 = pow(var_chaste_interface__internal_ion_concentrations__Nai, 3); + const double var_x42 = 1 / var_x41; + const double var_x43 = -17.978260869565219 + 362.31884057971018 * var_x30 + 362.31884057971018 * var_chaste_interface__internal_ion_concentrations__Ca_Total; + const double var_x44 = var_x42 * var_x43; + const double var_x45 = exp(0.011979261536575346 * var_chaste_interface__membrane__Vm); + const double var_x46 = var_x45 / (1.0 + 669.921875 * var_x44); + const double var_x47 = var_x46 * var_chaste_interface__sodium_calcium_exchanger_y_gate__y; + const double var_x48 = -0.052380000000000003 + var_x30 + var_chaste_interface__internal_ion_concentrations__Ca_Total; + const double var_x49 = 1.0 + 1.3823999999999997e-8 / pow(var_x48, 3); + const double var_x50 = 1 / var_x49; + const double var_x51 = 0.11 * var_x50; + const double var_x52 = -0.0034560000000000003 * var_chaste_interface__rapid_time_dependent_potassium_current_y2_gate__y2 - 0.0051840000000000002 * var_chaste_interface__rapid_time_dependent_potassium_current_y1_gate__y1; + const double var_x53 = mParameters[0] * var_chaste_interface__rapid_time_dependent_potassium_current_y3_gate__y3; + const double var_x54 = var_x52 * var_x53; + const double var_x55 = 1 / var_chaste_interface__internal_ion_concentrations__Ki; + const double var_x56 = log(5.4000000000000004 * var_x55); + const double var_x57 = exp(-2.1000000000000001 + 0.014999999999999999 * var_chaste_interface__membrane__Vm - 0.40069247885978065 * var_x56); + const double var_x58 = 1.0 + var_x57; + const double var_x59 = exp(-0.35000000000000003 + 0.035000000000000003 * var_chaste_interface__membrane__Vm - 0.93494911733948827 * var_x56); + const double var_x60 = var_x59 / var_x58; + const double var_x61 = exp(-2.4319999999999999 + 0.064000000000000001 * var_chaste_interface__membrane__Vm - 1.7096212431350641 * var_x56); + const double var_x62 = 1.0 + var_x61; + const double var_x63 = exp(-2.1000000000000001 + 0.029999999999999999 * var_chaste_interface__membrane__Vm - 0.80138495771956131 * var_x56); + const double var_x64 = 1.0 + var_x63; + const double var_x65 = exp(0.47999999999999998 + 1.282215932351298 * var_x56 - 0.048000000000000001 * var_chaste_interface__membrane__Vm); + const double var_x66 = var_x65 / var_x64; + const double var_x67 = var_x62 * var_x66; + const double var_x68 = var_x67 + 0.25 * var_x60; + const double var_x69 = pow(var_x68, (-4)); + const double var_x70 = pow(var_x62, 4); + const double var_x71 = pow(var_x64, (-4)); + const double var_x72 = pow(var_x65, 4); + const double var_x73 = var_x70 * var_x71 * var_x72; + const double var_x74 = var_x69 * var_x73; + const double var_x75 = pow(var_x58, (-2)); + const double var_x76 = pow(var_x65, 2); + const double var_x77 = pow(var_x59, 2); + const double var_x78 = var_x69 * var_x75 * var_x76 * var_x77; + const double var_x79 = pow(var_x64, (-2)); + const double var_x80 = pow(var_x62, 2); + const double var_x81 = var_x79 * var_x80; + const double var_x82 = var_x78 * var_x81; + const double var_x83 = 1 / (0.75 * var_x60 + 3.0 * var_x67); + const double var_x84 = pow(var_x65, 3); + const double var_x85 = var_x83 * var_x84 / pow(var_x68, 3); + const double var_x86 = pow(var_x62, 3); + const double var_x87 = pow(var_x64, (-3)); + const double var_x88 = var_x60 * var_x86 * var_x87; + const double var_x89 = var_x85 * var_x88; + const double var_x90 = mParameters[0] * var_chaste_interface__time_independent_potassium_current_y_gate__y; + const double var_x91 = 612.0 * var_chaste_interface__T_type_Ca_channel_y2_gate__y2; + const double var_x92 = var_x91 * var_chaste_interface__T_type_Ca_channel_y1_gate__y1; + const double var_x93 = var_chaste_interface__sodium_current_ultra_slow_gate__y * var_chaste_interface__sodium_current_voltage_dependent_gate__p_AP_Na; + const double var_x94 = 2860.0 * var_x93; + const double var_x95 = pow(var_chaste_interface__slow_time_dependent_potassium_current_y1_gate__y1, 2); + const double var_x96 = 0.10000000000000001 + 0.90000000000000002 * var_chaste_interface__slow_time_dependent_potassium_current_y2_gate__y2; + const double var_x97 = var_x95 * var_x96; + const double var_x98 = 0.2016 * var_x97; + const double var_x99 = pow(var_chaste_interface__transient_outward_current_y1_gate__y1, 3); + const double var_x100 = var_x99 * var_chaste_interface__transient_outward_current_y2_gate__y2; + const double var_x101 = 0.033000000000000002 * var_x100; + const double var_x102 = 5.04 * var_x97; + const double var_x103 = 0.00297 * var_x100; + const double var_x104 = 286.0 * var_x93; + const double var_x105 = 0.192 * var_x74; + const double var_x106 = pow(var_x68, (-5)); + const double var_x107 = var_x57 * var_x59 * var_x75; + const double var_x108 = var_x61 * var_x66; + const double var_x109 = 0.12 * var_x63; + const double var_x110 = var_x62 * var_x79; + const double var_x111 = var_x110 * var_x65; + const double var_x112 = var_x106 * (0.014999999999999999 * var_x107 + 0.192 * var_x67 - 0.25600000000000001 * var_x108 - 0.035000000000000003 * var_x60 + var_x109 * var_x111); + const double var_x113 = 1.0 * var_x73; + const double var_x114 = var_x112 * var_x113; + const double var_x115 = var_x69 * var_x72; + const double var_x116 = var_x71 * var_x86; + const double var_x117 = var_x115 * var_x116 * var_x61; + const double var_x118 = 0.25600000000000001 * var_x117; + const double var_x119 = var_x115 * var_x70 / pow(var_x64, 5); + const double var_x120 = var_x109 * var_x119; + const double var_x121 = var_x76 * var_x77 * var_x81; + const double var_x122 = 0.125 * var_x121 * var_x75; + const double var_x123 = var_x110 * var_x61 * var_x78; + const double var_x124 = var_x111 * var_x63; + const double var_x125 = var_x84 * var_x88; + const double var_x126 = var_x125 * (0.01125 * var_x107 + 0.089999999999999997 * var_x124 + 0.14400000000000002 * var_x67 - 0.192 * var_x108 - 0.026250000000000002 * var_x60); + const double var_x127 = 0.22222222222222221 * var_x106; + const double var_x128 = var_x121 * var_x57 * var_x69 / pow(var_x58, 3); + const double var_x129 = var_x80 * var_x87; + const double var_x130 = var_x129 * var_x78; + const double var_x131 = 2.0 * var_x69 * var_x83; + const double var_x132 = var_x60 * var_x85; + const double var_x133 = var_x129 * var_x61; + const double var_x134 = var_x85 * var_x86 * var_x87; + const double var_x135 = var_x116 * var_x63; + const double var_x136 = var_x114 + var_x118 - var_x105 - var_x120 + 0.016 * var_x123 - 0.0032499999999999994 * var_x82 - 0.0037499999999999999 * var_x128 - 0.218 * var_x89 + var_x112 * var_x122 + var_x126 * var_x127 + var_x126 * var_x131 + 0.38400000000000001 * var_x132 * var_x133 - 0.0074999999999999997 * var_x130 * var_x63 - 0.029999999999999999 * var_x107 * var_x134 - 0.17999999999999999 * var_x132 * var_x135; + const double var_x137 = 30.612905384887238 * var_x56 - 1.1459999999999999 * var_chaste_interface__membrane__Vm; + const double var_x138 = var_x137 * var_x90; + const double var_x139 = 1.0 - var_chaste_interface__sodium_potassium_pump_y_gate__y; + const double var_x140 = exp(-0.030696857687474322 * var_chaste_interface__membrane__Vm); + const double var_x141 = pow(1 / var_x140, 1.0600000000000001); + const double var_x142 = var_x141 / pow((0.067138346456864173 + var_x141), 2); + const double var_x143 = var_x139 * var_x142 * mParameters[0]; + const double var_x144 = var_x35 * var_chaste_interface__L_type_Ca_channel_voltage_dependent_gate__p_AP_CaL; + const double var_x145 = var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_U + var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_UCa; + const double var_x146 = pow(var_chaste_interface__ATP_production__ATPi, (-3)); + const double var_x147 = 1 / (1.0 + 2.7439999999999993 * var_x146); + const double var_x148 = var_x147 * var_chaste_interface__L_type_Ca_channel_ultra_slow_gate__y; + const double var_x149 = var_x145 * var_x148; + const double var_x150 = 8712.0 * var_x149; + const double var_x151 = var_x149 * var_chaste_interface__L_type_Ca_channel_voltage_dependent_gate__p_AP_CaL; + const double var_x152 = 3.1798799999999998 * var_x151; + const double var_x153 = 0.16117199999999998 * var_x151; + + partialF = var_x0 * (var_x54 - var_x22 - 0.38500000000000001 * var_x25 - 0.040000000000000001 * var_x35 - 66.022388395163091 * var_x37 - 0.15400000000000003 * var_x38 - 0.0018350576517438713 * var_x143 + var_x136 * var_x138 + var_x90 * (-0.14324999999999999 * var_x82 - 1.1459999999999999 * var_x74 - 2.2919999999999998 * var_x89) + (0.17335488851116596 * var_x40 - 0.081578771064078098 * var_x47) * mParameters[0] - var_x101 * var_x38 - var_x102 * var_x38 - var_x103 * var_x25 - var_x104 * var_x38 - var_x144 * var_x150 - var_x152 * var_x38 - var_x153 * var_x25 - var_x25 * var_x51 - var_x25 * var_x94 - var_x25 * var_x98 - var_x35 * var_x92 - var_x38 * var_x51); + } + else + { + const double y_save = rY[0]; + rY[0] += delta; + const double temp = EvaluateYDerivative0(var_chaste_interface__environment__time, rY); + partialF = (temp-mEvalF[0])/delta; + rY[0] = y_save; + } + return partialF; + } + double Dynamicmatsuoka_model_2003FromCellMLGRL1::EvaluateYDerivative1(double var_chaste_interface__environment__time, std::vector& rY) + { + + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -85.95752434460744 + double var_chaste_interface__internal_ion_concentrations__Nai = rY[1]; + // Units: millimolar; Initial value: 4.925761439682025 + double var_chaste_interface__internal_ion_concentrations__Ki = rY[2]; + // Units: millimolar; Initial value: 143.1837333000449 + double var_chaste_interface__internal_ion_concentrations__Ca_Total = rY[3]; + // Units: millimolar; Initial value: 0.00040180173572968586 + double var_chaste_interface__ATP_production__ATPi = rY[4]; + // Units: millimolar; Initial value: 4.657102729020499 + double var_chaste_interface__sodium_current_voltage_dependent_gate__p_AP_Na = rY[5]; + // Units: dimensionless; Initial value: 1.779648367445368e-05 + double var_chaste_interface__sodium_current_ultra_slow_gate__y = rY[8]; + // Units: dimensionless; Initial value: 0.5861887862983165 + double var_chaste_interface__L_type_Ca_channel_voltage_dependent_gate__p_AP_CaL = rY[9]; + // Units: dimensionless; Initial value: 1.5445004166497696e-06 + double var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_U = rY[12]; + // Units: dimensionless; Initial value: 0.17246483915629204 + double var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_UCa = rY[13]; + // Units: dimensionless; Initial value: 6.098246017787626e-05 + double var_chaste_interface__L_type_Ca_channel_ultra_slow_gate__y = rY[15]; + // Units: dimensionless; Initial value: 0.9985266538252986 + double var_chaste_interface__slow_time_dependent_potassium_current_y1_gate__y1 = rY[22]; + // Units: dimensionless; Initial value: 0.09738789658609195 + double var_chaste_interface__slow_time_dependent_potassium_current_y2_gate__y2 = rY[23]; + // Units: dimensionless; Initial value: 0.09745345578743213 + double var_chaste_interface__transient_outward_current_y1_gate__y1 = rY[24]; + // Units: dimensionless; Initial value: 0.0007956883250874798 + double var_chaste_interface__transient_outward_current_y2_gate__y2 = rY[25]; + // Units: dimensionless; Initial value: 0.9999125083105881 + double var_chaste_interface__sodium_calcium_exchanger_y_gate__y = rY[26]; + // Units: dimensionless; Initial value: 0.9891789193465331 + double var_chaste_interface__sodium_potassium_pump_y_gate__y = rY[27]; + // Units: dimensionless; Initial value: 0.5910747147428818 + + + // Mathematics + const double var_L_type_Ca_channel__p_open_CaL = (var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_U + var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_UCa) * var_chaste_interface__L_type_Ca_channel_ultra_slow_gate__y * var_chaste_interface__L_type_Ca_channel_voltage_dependent_gate__p_AP_CaL / (1.0 + 2.7439999999999993 / pow(var_chaste_interface__ATP_production__ATPi, 3)); // dimensionless + const double var_internal_ion_concentrations__Cai = -0.026190000000000001 + 0.5 * sqrt(pow((0.052380000000000003 - var_chaste_interface__internal_ion_concentrations__Ca_Total), 2) + 0.0095200000000000007 * var_chaste_interface__internal_ion_concentrations__Ca_Total) + 0.5 * var_chaste_interface__internal_ion_concentrations__Ca_Total; // millimolar + const double var_background_lCa_current__p_open = 1 / (1.0 + 1.7279999999999996e-9 / pow(var_internal_ion_concentrations__Cai, 3)); // dimensionless + const double var_constant_field_equations__CF_Na = ((var_chaste_interface__membrane__Vm == 0) ? (-140.0) : (0.037435192301797954 * (-140.0 * exp(-0.037435192301797954 * var_chaste_interface__membrane__Vm) + var_chaste_interface__internal_ion_concentrations__Nai) * var_chaste_interface__membrane__Vm / (1.0 - exp(-0.037435192301797954 * var_chaste_interface__membrane__Vm)))); // millimolar + const double var_L_type_Ca_channel__i_CaL_Na = 0.16117199999999998 * var_L_type_Ca_channel__p_open_CaL * var_constant_field_equations__CF_Na; // picoA + const double var_background_NSC_current__i_bNSC_Na = 0.38500000000000001 * var_constant_field_equations__CF_Na; // picoA + const double var_background_lCa_current__i_lCa_Na = 0.11 * var_background_lCa_current__p_open * var_constant_field_equations__CF_Na; // picoA + const double var_slow_time_dependent_potassium_current__i_Ks_Na = 0.2016 * pow(var_chaste_interface__slow_time_dependent_potassium_current_y1_gate__y1, 2) * (0.10000000000000001 + 0.90000000000000002 * var_chaste_interface__slow_time_dependent_potassium_current_y2_gate__y2) * var_constant_field_equations__CF_Na; // picoA + const double var_sodium_calcium_exchanger__k1 = exp(0.011979261536575346 * var_chaste_interface__membrane__Vm); // per_millisecond + const double var_sodium_calcium_exchanger__k2 = exp(-0.025455930765222609 * var_chaste_interface__membrane__Vm); // per_millisecond + const double var_sodium_calcium_exchanger__p_E1Na = 1 / (1.0 + 669.921875 * (1.0 + 724.63768115942037 * var_internal_ion_concentrations__Cai) / pow(var_chaste_interface__internal_ion_concentrations__Nai, 3)); // dimensionless + const double var_sodium_calcium_exchanger__i_NaCa = 6.8099999999999996 * (-0.6399652192815608 * (1.0 - var_chaste_interface__sodium_calcium_exchanger_y_gate__y) * var_sodium_calcium_exchanger__k2 + var_sodium_calcium_exchanger__k1 * var_sodium_calcium_exchanger__p_E1Na * var_chaste_interface__sodium_calcium_exchanger_y_gate__y) * mParameters[0]; // picoA + const double var_sodium_current__i_Na_Na = 2860.0 * var_constant_field_equations__CF_Na * var_chaste_interface__sodium_current_ultra_slow_gate__y * var_chaste_interface__sodium_current_voltage_dependent_gate__p_AP_Na; // picoA + const double var_sodium_potassium_pump__Nao_Eff = 140.0 * exp(-0.030696857687474322 * var_chaste_interface__membrane__Vm); // millimolar + const double var_sodium_potassium_pump__k1 = 0.37 / (1.0 + 0.094 / var_chaste_interface__ATP_production__ATPi); // per_millisecond + const double var_sodium_potassium_pump__p_E1Na = 1 / (1.0 + 4.4045579125871104 * pow(1 / var_chaste_interface__internal_ion_concentrations__Nai, 1.0600000000000001) * (1.0 + 0.020000293738509214 * pow(var_chaste_interface__internal_ion_concentrations__Ki, 1.1200000000000001))); // dimensionless + const double var_sodium_potassium_pump__p_E2Na = 1 / (1.0 + 2804.9496956618664 * pow(1 / var_sodium_potassium_pump__Nao_Eff, 1.0600000000000001)); // dimensionless + const double var_sodium_potassium_pump__i_NaK = 21.0 * (-0.040000000000000001 * (1.0 - var_chaste_interface__sodium_potassium_pump_y_gate__y) * var_sodium_potassium_pump__p_E2Na + var_sodium_potassium_pump__k1 * var_sodium_potassium_pump__p_E1Na * var_chaste_interface__sodium_potassium_pump_y_gate__y) * mParameters[0]; // picoA + const double var_transient_outward_current__i_to_Na = 0.00297 * pow(var_chaste_interface__transient_outward_current_y1_gate__y1, 3) * var_constant_field_equations__CF_Na * var_chaste_interface__transient_outward_current_y2_gate__y2; // picoA + const double d_dt_chaste_interface_var_internal_ion_concentrations__Nai = -3.8865460213687481e-6 * var_sodium_calcium_exchanger__i_NaCa - 3.8865460213687481e-6 * var_sodium_potassium_pump__i_NaK - 1.2955153404562495e-6 * var_L_type_Ca_channel__i_CaL_Na - 1.2955153404562495e-6 * var_background_NSC_current__i_bNSC_Na - 1.2955153404562495e-6 * var_background_lCa_current__i_lCa_Na - 1.2955153404562495e-6 * var_slow_time_dependent_potassium_current__i_Ks_Na - 1.2955153404562495e-6 * var_sodium_current__i_Na_Na - 1.2955153404562495e-6 * var_transient_outward_current__i_to_Na; // millimolar / millisecond + + return d_dt_chaste_interface_var_internal_ion_concentrations__Nai; + } + + double Dynamicmatsuoka_model_2003FromCellMLGRL1::EvaluatePartialDerivative1(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -85.95752434460744 + double var_chaste_interface__internal_ion_concentrations__Nai = rY[1]; + // Units: millimolar; Initial value: 4.925761439682025 + double var_chaste_interface__internal_ion_concentrations__Ki = rY[2]; + // Units: millimolar; Initial value: 143.1837333000449 + double var_chaste_interface__internal_ion_concentrations__Ca_Total = rY[3]; + // Units: millimolar; Initial value: 0.00040180173572968586 + double var_chaste_interface__ATP_production__ATPi = rY[4]; + // Units: millimolar; Initial value: 4.657102729020499 + double var_chaste_interface__sodium_current_voltage_dependent_gate__p_AP_Na = rY[5]; + // Units: dimensionless; Initial value: 1.779648367445368e-05 + double var_chaste_interface__sodium_current_ultra_slow_gate__y = rY[8]; + // Units: dimensionless; Initial value: 0.5861887862983165 + double var_chaste_interface__L_type_Ca_channel_voltage_dependent_gate__p_AP_CaL = rY[9]; + // Units: dimensionless; Initial value: 1.5445004166497696e-06 + double var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_U = rY[12]; + // Units: dimensionless; Initial value: 0.17246483915629204 + double var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_UCa = rY[13]; + // Units: dimensionless; Initial value: 6.098246017787626e-05 + double var_chaste_interface__L_type_Ca_channel_ultra_slow_gate__y = rY[15]; + // Units: dimensionless; Initial value: 0.9985266538252986 + double var_chaste_interface__slow_time_dependent_potassium_current_y1_gate__y1 = rY[22]; + // Units: dimensionless; Initial value: 0.09738789658609195 + double var_chaste_interface__slow_time_dependent_potassium_current_y2_gate__y2 = rY[23]; + // Units: dimensionless; Initial value: 0.09745345578743213 + double var_chaste_interface__transient_outward_current_y1_gate__y1 = rY[24]; + // Units: dimensionless; Initial value: 0.0007956883250874798 + double var_chaste_interface__transient_outward_current_y2_gate__y2 = rY[25]; + // Units: dimensionless; Initial value: 0.9999125083105881 + double var_chaste_interface__sodium_calcium_exchanger_y_gate__y = rY[26]; + // Units: dimensionless; Initial value: 0.9891789193465331 + double var_chaste_interface__sodium_potassium_pump_y_gate__y = rY[27]; + // Units: dimensionless; Initial value: 0.5910747147428818 + + const double var_x1 = 0.037435192301797954 * var_chaste_interface__membrane__Vm; + const double var_x2 = exp(-var_x1); + const double var_x3 = 1.0 - var_x2; + const double var_x4 = 1 / var_x3; + const double var_x19 = var_chaste_interface__membrane__Vm == 0; + const double var_x30 = sqrt(pow((0.052380000000000003 - var_chaste_interface__internal_ion_concentrations__Ca_Total), 2) + 0.0095200000000000007 * var_chaste_interface__internal_ion_concentrations__Ca_Total); + const double var_x41 = pow(var_chaste_interface__internal_ion_concentrations__Nai, 3); + const double var_x42 = 1 / var_x41; + const double var_x43 = -17.978260869565219 + 362.31884057971018 * var_x30 + 362.31884057971018 * var_chaste_interface__internal_ion_concentrations__Ca_Total; + const double var_x44 = var_x42 * var_x43; + const double var_x45 = exp(0.011979261536575346 * var_chaste_interface__membrane__Vm); + const double var_x48 = -0.052380000000000003 + var_x30 + var_chaste_interface__internal_ion_concentrations__Ca_Total; + const double var_x49 = 1.0 + 1.3823999999999997e-8 / pow(var_x48, 3); + const double var_x50 = 1 / var_x49; + const double var_x93 = var_chaste_interface__sodium_current_ultra_slow_gate__y * var_chaste_interface__sodium_current_voltage_dependent_gate__p_AP_Na; + const double var_x95 = pow(var_chaste_interface__slow_time_dependent_potassium_current_y1_gate__y1, 2); + const double var_x96 = 0.10000000000000001 + 0.90000000000000002 * var_chaste_interface__slow_time_dependent_potassium_current_y2_gate__y2; + const double var_x97 = var_x95 * var_x96; + const double var_x99 = pow(var_chaste_interface__transient_outward_current_y1_gate__y1, 3); + const double var_x100 = var_x99 * var_chaste_interface__transient_outward_current_y2_gate__y2; + const double var_x145 = var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_U + var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_UCa; + const double var_x146 = pow(var_chaste_interface__ATP_production__ATPi, (-3)); + const double var_x147 = 1 / (1.0 + 2.7439999999999993 * var_x146); + const double var_x148 = var_x147 * var_chaste_interface__L_type_Ca_channel_ultra_slow_gate__y; + const double var_x149 = var_x145 * var_x148; + const double var_x151 = var_x149 * var_chaste_interface__L_type_Ca_channel_voltage_dependent_gate__p_AP_CaL; + const double var_x154 = var_x1 * var_x4; + const double var_x155 = ((var_x19) ? (0) : (var_x154)); + const double var_x156 = var_x45 / pow((0.0014927113702623907 + var_x44), 2); + const double var_x157 = var_x156 * var_x43 / pow(var_chaste_interface__internal_ion_concentrations__Nai, 4); + const double var_x158 = mParameters[0] * var_chaste_interface__sodium_calcium_exchanger_y_gate__y; + const double var_x159 = var_x157 * var_x158; + const double var_x160 = 1 / var_chaste_interface__internal_ion_concentrations__Nai; + const double var_x161 = pow(var_x160, 1.0600000000000001); + const double var_x162 = var_x161 * (1.0 + 0.020000293738509214 * pow(var_chaste_interface__internal_ion_concentrations__Ki, 1.1200000000000001)); + const double var_x163 = 1 / var_chaste_interface__ATP_production__ATPi; + const double var_x164 = 1.0 + 0.094 * var_x163; + const double var_x165 = 1 / var_x164; + const double var_x166 = var_x165 / pow((0.22703754152993499 + var_x162), 2); + const double var_x167 = var_x160 * var_x162 * var_x166; + const double var_x168 = mParameters[0] * var_chaste_interface__sodium_potassium_pump_y_gate__y; + const double var_x169 = var_x167 * var_x168; + const double var_x236 = 1.4250668745018745e-7 * var_x50; + const double var_x237 = 3.8476805611550606e-9 * var_x100; + const double var_x238 = 2.6117589263597991e-7 * var_x97; + const double var_x239 = 0.0037051738737048732 * var_x93; + const double var_x240 = 2.0880079845201463e-7 * var_x151; + + partialF = -7.2675557857281787e-6 * var_x169 - 1.1852447006087616e-7 * var_x159 - 4.9877340607565601e-7 * var_x155 - var_x155 * var_x236 - var_x155 * var_x237 - var_x155 * var_x238 - var_x155 * var_x239 - var_x155 * var_x240; + } + else + { + const double y_save = rY[1]; + rY[1] += delta; + const double temp = EvaluateYDerivative1(var_chaste_interface__environment__time, rY); + partialF = (temp-mEvalF[1])/delta; + rY[1] = y_save; + } + return partialF; + } + double Dynamicmatsuoka_model_2003FromCellMLGRL1::EvaluateYDerivative2(double var_chaste_interface__environment__time, std::vector& rY) + { + + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -85.95752434460744 + double var_chaste_interface__internal_ion_concentrations__Nai = rY[1]; + // Units: millimolar; Initial value: 4.925761439682025 + double var_chaste_interface__internal_ion_concentrations__Ki = rY[2]; + // Units: millimolar; Initial value: 143.1837333000449 + double var_chaste_interface__internal_ion_concentrations__Ca_Total = rY[3]; + // Units: millimolar; Initial value: 0.00040180173572968586 + double var_chaste_interface__ATP_production__ATPi = rY[4]; + // Units: millimolar; Initial value: 4.657102729020499 + double var_chaste_interface__sodium_current_voltage_dependent_gate__p_AP_Na = rY[5]; + // Units: dimensionless; Initial value: 1.779648367445368e-05 + double var_chaste_interface__sodium_current_ultra_slow_gate__y = rY[8]; + // Units: dimensionless; Initial value: 0.5861887862983165 + double var_chaste_interface__L_type_Ca_channel_voltage_dependent_gate__p_AP_CaL = rY[9]; + // Units: dimensionless; Initial value: 1.5445004166497696e-06 + double var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_U = rY[12]; + // Units: dimensionless; Initial value: 0.17246483915629204 + double var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_UCa = rY[13]; + // Units: dimensionless; Initial value: 6.098246017787626e-05 + double var_chaste_interface__L_type_Ca_channel_ultra_slow_gate__y = rY[15]; + // Units: dimensionless; Initial value: 0.9985266538252986 + double var_chaste_interface__time_independent_potassium_current_y_gate__y = rY[18]; + // Units: dimensionless; Initial value: 0.6080573900752752 + double var_chaste_interface__rapid_time_dependent_potassium_current_y1_gate__y1 = rY[19]; + // Units: dimensionless; Initial value: 0.0018339931180983765 + double var_chaste_interface__rapid_time_dependent_potassium_current_y2_gate__y2 = rY[20]; + // Units: dimensionless; Initial value: 0.20443083454225305 + double var_chaste_interface__rapid_time_dependent_potassium_current_y3_gate__y3 = rY[21]; + // Units: dimensionless; Initial value: 0.967887666264921 + double var_chaste_interface__slow_time_dependent_potassium_current_y1_gate__y1 = rY[22]; + // Units: dimensionless; Initial value: 0.09738789658609195 + double var_chaste_interface__slow_time_dependent_potassium_current_y2_gate__y2 = rY[23]; + // Units: dimensionless; Initial value: 0.09745345578743213 + double var_chaste_interface__transient_outward_current_y1_gate__y1 = rY[24]; + // Units: dimensionless; Initial value: 0.0007956883250874798 + double var_chaste_interface__transient_outward_current_y2_gate__y2 = rY[25]; + // Units: dimensionless; Initial value: 0.9999125083105881 + double var_chaste_interface__sodium_potassium_pump_y_gate__y = rY[27]; + // Units: dimensionless; Initial value: 0.5910747147428818 + + + // Mathematics + const double var_L_type_Ca_channel__p_open_CaL = (var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_U + var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_UCa) * var_chaste_interface__L_type_Ca_channel_ultra_slow_gate__y * var_chaste_interface__L_type_Ca_channel_voltage_dependent_gate__p_AP_CaL / (1.0 + 2.7439999999999993 / pow(var_chaste_interface__ATP_production__ATPi, 3)); // dimensionless + const double var_internal_ion_concentrations__Cai = -0.026190000000000001 + 0.5 * sqrt(pow((0.052380000000000003 - var_chaste_interface__internal_ion_concentrations__Ca_Total), 2) + 0.0095200000000000007 * var_chaste_interface__internal_ion_concentrations__Ca_Total) + 0.5 * var_chaste_interface__internal_ion_concentrations__Ca_Total; // millimolar + const double var_background_lCa_current__p_open = 1 / (1.0 + 1.7279999999999996e-9 / pow(var_internal_ion_concentrations__Cai, 3)); // dimensionless + const double var_constant_field_equations__CF_K = ((var_chaste_interface__membrane__Vm == 0) ? (var_chaste_interface__internal_ion_concentrations__Ki) : (0.037435192301797954 * (-5.4000000000000004 * exp(-0.037435192301797954 * var_chaste_interface__membrane__Vm) + var_chaste_interface__internal_ion_concentrations__Ki) * var_chaste_interface__membrane__Vm / (1.0 - exp(-0.037435192301797954 * var_chaste_interface__membrane__Vm)))); // millimolar + const double var_L_type_Ca_channel__i_CaL_K = 3.1798799999999998 * var_L_type_Ca_channel__p_open_CaL * var_constant_field_equations__CF_K; // picoA + const double var_background_Kpl_current__i_Kpl = ((var_chaste_interface__membrane__Vm == (-3.0)) ? (0.0014308470000000001 * var_constant_field_equations__CF_K) : (0.00011 * (3.0 + var_chaste_interface__membrane__Vm) * var_constant_field_equations__CF_K / (1.0 - exp(-0.23076923076923078 - 0.076923076923076927 * var_chaste_interface__membrane__Vm)))); // picoA + const double var_background_NSC_current__i_bNSC_K = 0.15400000000000003 * var_constant_field_equations__CF_K; // picoA + const double var_background_lCa_current__i_lCa_K = 0.11 * var_background_lCa_current__p_open * var_constant_field_equations__CF_K; // picoA + const double var_membrane__i_ext = 1.0 * GetIntracellularAreaStimulus(var_chaste_interface__environment__time) * mParameters[0] / HeartConfig::Instance()->GetCapacitance(); // picoA + const double var_slow_time_dependent_potassium_current__i_Ks_K = 5.04 * pow(var_chaste_interface__slow_time_dependent_potassium_current_y1_gate__y1, 2) * (0.10000000000000001 + 0.90000000000000002 * var_chaste_interface__slow_time_dependent_potassium_current_y2_gate__y2) * var_constant_field_equations__CF_K; // picoA + const double var_sodium_current__i_Na_K = 286.0 * var_constant_field_equations__CF_K * var_chaste_interface__sodium_current_ultra_slow_gate__y * var_chaste_interface__sodium_current_voltage_dependent_gate__p_AP_Na; // picoA + const double var_sodium_potassium_pump__Nao_Eff = 140.0 * exp(-0.030696857687474322 * var_chaste_interface__membrane__Vm); // millimolar + const double var_sodium_potassium_pump__k1 = 0.37 / (1.0 + 0.094 / var_chaste_interface__ATP_production__ATPi); // per_millisecond + const double var_sodium_potassium_pump__p_E1Na = 1 / (1.0 + 4.4045579125871104 * pow(1 / var_chaste_interface__internal_ion_concentrations__Nai, 1.0600000000000001) * (1.0 + 0.020000293738509214 * pow(var_chaste_interface__internal_ion_concentrations__Ki, 1.1200000000000001))); // dimensionless + const double var_sodium_potassium_pump__p_E2Na = 1 / (1.0 + 2804.9496956618664 * pow(1 / var_sodium_potassium_pump__Nao_Eff, 1.0600000000000001)); // dimensionless + const double var_sodium_potassium_pump__i_NaK = 21.0 * (-0.040000000000000001 * (1.0 - var_chaste_interface__sodium_potassium_pump_y_gate__y) * var_sodium_potassium_pump__p_E2Na + var_sodium_potassium_pump__k1 * var_sodium_potassium_pump__p_E1Na * var_chaste_interface__sodium_potassium_pump_y_gate__y) * mParameters[0]; // picoA + const double var_time_independent_potassium_current__E_K = 26.712831923985377 * log(5.4000000000000004 / var_chaste_interface__internal_ion_concentrations__Ki); // millivolt + const double var_background_KATP_current__i_KATP = 66.022388395163091 * (-var_time_independent_potassium_current__E_K + var_chaste_interface__membrane__Vm) / (1.0 + 99.999999999999986 * pow(var_chaste_interface__ATP_production__ATPi, 2)); // picoA + const double var_rapid_time_dependent_potassium_current__i_Kr = 0.0086400000000000001 * (-var_time_independent_potassium_current__E_K + var_chaste_interface__membrane__Vm) * (0.40000000000000002 * var_chaste_interface__rapid_time_dependent_potassium_current_y2_gate__y2 + 0.59999999999999998 * var_chaste_interface__rapid_time_dependent_potassium_current_y1_gate__y1) * mParameters[0] * var_chaste_interface__rapid_time_dependent_potassium_current_y3_gate__y3; // picoA + const double var_time_independent_potassium_current__lambda = 3.0 * (1.0 + exp(-2.4319999999999999 + 0.064000000000000001 * var_chaste_interface__membrane__Vm - 0.064000000000000001 * var_time_independent_potassium_current__E_K)) * exp(0.47999999999999998 + 0.048000000000000001 * var_time_independent_potassium_current__E_K - 0.048000000000000001 * var_chaste_interface__membrane__Vm) / (1.0 + exp(-2.1000000000000001 + 0.029999999999999999 * var_chaste_interface__membrane__Vm - 0.029999999999999999 * var_time_independent_potassium_current__E_K)); // per_millisecond + const double var_time_independent_potassium_current__mu = 0.75 * exp(-0.35000000000000003 + 0.035000000000000003 * var_chaste_interface__membrane__Vm - 0.035000000000000003 * var_time_independent_potassium_current__E_K) / (1.0 + exp(-2.1000000000000001 + 0.014999999999999999 * var_chaste_interface__membrane__Vm - 0.014999999999999999 * var_time_independent_potassium_current__E_K)); // per_millisecond + const double var_time_independent_potassium_current__fB = var_time_independent_potassium_current__mu / (var_time_independent_potassium_current__lambda + var_time_independent_potassium_current__mu); // dimensionless + const double var_time_independent_potassium_current__fO = var_time_independent_potassium_current__lambda / (var_time_independent_potassium_current__lambda + var_time_independent_potassium_current__mu); // dimensionless + const double var_time_independent_potassium_current__i_K1 = 1.1459999999999999 * (-var_time_independent_potassium_current__E_K + var_chaste_interface__membrane__Vm) * (pow(var_time_independent_potassium_current__fO, 4) + 2.0 * pow(var_time_independent_potassium_current__fB, 2) * pow(var_time_independent_potassium_current__fO, 2) + 2.6666666666666665 * pow(var_time_independent_potassium_current__fO, 3) * var_time_independent_potassium_current__fB) * mParameters[0] * var_chaste_interface__time_independent_potassium_current_y_gate__y; // picoA + const double var_transient_outward_current__i_to_K = 0.033000000000000002 * pow(var_chaste_interface__transient_outward_current_y1_gate__y1, 3) * var_constant_field_equations__CF_K * var_chaste_interface__transient_outward_current_y2_gate__y2; // picoA + const double d_dt_chaste_interface_var_internal_ion_concentrations__Ki = 2.591030680912499e-6 * var_sodium_potassium_pump__i_NaK - 1.2955153404562495e-6 * var_L_type_Ca_channel__i_CaL_K - 1.2955153404562495e-6 * var_background_KATP_current__i_KATP - 1.2955153404562495e-6 * var_background_Kpl_current__i_Kpl - 1.2955153404562495e-6 * var_background_NSC_current__i_bNSC_K - 1.2955153404562495e-6 * var_background_lCa_current__i_lCa_K - 1.2955153404562495e-6 * var_membrane__i_ext - 1.2955153404562495e-6 * var_rapid_time_dependent_potassium_current__i_Kr - 1.2955153404562495e-6 * var_slow_time_dependent_potassium_current__i_Ks_K - 1.2955153404562495e-6 * var_sodium_current__i_Na_K - 1.2955153404562495e-6 * var_time_independent_potassium_current__i_K1 - 1.2955153404562495e-6 * var_transient_outward_current__i_to_K; // millimolar / millisecond + + return d_dt_chaste_interface_var_internal_ion_concentrations__Ki; + } + + double Dynamicmatsuoka_model_2003FromCellMLGRL1::EvaluatePartialDerivative2(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -85.95752434460744 + double var_chaste_interface__internal_ion_concentrations__Nai = rY[1]; + // Units: millimolar; Initial value: 4.925761439682025 + double var_chaste_interface__internal_ion_concentrations__Ki = rY[2]; + // Units: millimolar; Initial value: 143.1837333000449 + double var_chaste_interface__internal_ion_concentrations__Ca_Total = rY[3]; + // Units: millimolar; Initial value: 0.00040180173572968586 + double var_chaste_interface__ATP_production__ATPi = rY[4]; + // Units: millimolar; Initial value: 4.657102729020499 + double var_chaste_interface__sodium_current_voltage_dependent_gate__p_AP_Na = rY[5]; + // Units: dimensionless; Initial value: 1.779648367445368e-05 + double var_chaste_interface__sodium_current_ultra_slow_gate__y = rY[8]; + // Units: dimensionless; Initial value: 0.5861887862983165 + double var_chaste_interface__L_type_Ca_channel_voltage_dependent_gate__p_AP_CaL = rY[9]; + // Units: dimensionless; Initial value: 1.5445004166497696e-06 + double var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_U = rY[12]; + // Units: dimensionless; Initial value: 0.17246483915629204 + double var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_UCa = rY[13]; + // Units: dimensionless; Initial value: 6.098246017787626e-05 + double var_chaste_interface__L_type_Ca_channel_ultra_slow_gate__y = rY[15]; + // Units: dimensionless; Initial value: 0.9985266538252986 + double var_chaste_interface__time_independent_potassium_current_y_gate__y = rY[18]; + // Units: dimensionless; Initial value: 0.6080573900752752 + double var_chaste_interface__rapid_time_dependent_potassium_current_y1_gate__y1 = rY[19]; + // Units: dimensionless; Initial value: 0.0018339931180983765 + double var_chaste_interface__rapid_time_dependent_potassium_current_y2_gate__y2 = rY[20]; + // Units: dimensionless; Initial value: 0.20443083454225305 + double var_chaste_interface__rapid_time_dependent_potassium_current_y3_gate__y3 = rY[21]; + // Units: dimensionless; Initial value: 0.967887666264921 + double var_chaste_interface__slow_time_dependent_potassium_current_y1_gate__y1 = rY[22]; + // Units: dimensionless; Initial value: 0.09738789658609195 + double var_chaste_interface__slow_time_dependent_potassium_current_y2_gate__y2 = rY[23]; + // Units: dimensionless; Initial value: 0.09745345578743213 + double var_chaste_interface__transient_outward_current_y1_gate__y1 = rY[24]; + // Units: dimensionless; Initial value: 0.0007956883250874798 + double var_chaste_interface__transient_outward_current_y2_gate__y2 = rY[25]; + // Units: dimensionless; Initial value: 0.9999125083105881 + double var_chaste_interface__sodium_potassium_pump_y_gate__y = rY[27]; + // Units: dimensionless; Initial value: 0.5910747147428818 + + const double var_x1 = 0.037435192301797954 * var_chaste_interface__membrane__Vm; + const double var_x2 = exp(-var_x1); + const double var_x3 = 1.0 - var_x2; + const double var_x4 = 1 / var_x3; + const double var_x7 = var_x4 * var_chaste_interface__membrane__Vm; + const double var_x11 = var_chaste_interface__membrane__Vm == (-3.0); + const double var_x12 = -0.076923076923076927 * var_chaste_interface__membrane__Vm; + const double var_x13 = exp(-0.23076923076923078 + var_x12); + const double var_x14 = 1.0 - var_x13; + const double var_x15 = 1 / var_x14; + const double var_x16 = 0.00011 * var_x15; + const double var_x17 = 3.0 + var_chaste_interface__membrane__Vm; + const double var_x19 = var_chaste_interface__membrane__Vm == 0; + const double var_x20 = var_x15 * var_x17; + const double var_x30 = sqrt(pow((0.052380000000000003 - var_chaste_interface__internal_ion_concentrations__Ca_Total), 2) + 0.0095200000000000007 * var_chaste_interface__internal_ion_concentrations__Ca_Total); + const double var_x36 = pow(var_chaste_interface__ATP_production__ATPi, 2); + const double var_x37 = 1 / (1.0 + 99.999999999999986 * var_x36); + const double var_x48 = -0.052380000000000003 + var_x30 + var_chaste_interface__internal_ion_concentrations__Ca_Total; + const double var_x49 = 1.0 + 1.3823999999999997e-8 / pow(var_x48, 3); + const double var_x50 = 1 / var_x49; + const double var_x53 = mParameters[0] * var_chaste_interface__rapid_time_dependent_potassium_current_y3_gate__y3; + const double var_x55 = 1 / var_chaste_interface__internal_ion_concentrations__Ki; + const double var_x56 = log(5.4000000000000004 * var_x55); + const double var_x57 = exp(-2.1000000000000001 + 0.014999999999999999 * var_chaste_interface__membrane__Vm - 0.40069247885978065 * var_x56); + const double var_x58 = 1.0 + var_x57; + const double var_x59 = exp(-0.35000000000000003 + 0.035000000000000003 * var_chaste_interface__membrane__Vm - 0.93494911733948827 * var_x56); + const double var_x60 = var_x59 / var_x58; + const double var_x61 = exp(-2.4319999999999999 + 0.064000000000000001 * var_chaste_interface__membrane__Vm - 1.7096212431350641 * var_x56); + const double var_x62 = 1.0 + var_x61; + const double var_x63 = exp(-2.1000000000000001 + 0.029999999999999999 * var_chaste_interface__membrane__Vm - 0.80138495771956131 * var_x56); + const double var_x64 = 1.0 + var_x63; + const double var_x65 = exp(0.47999999999999998 + 1.282215932351298 * var_x56 - 0.048000000000000001 * var_chaste_interface__membrane__Vm); + const double var_x66 = var_x65 / var_x64; + const double var_x67 = var_x62 * var_x66; + const double var_x68 = var_x67 + 0.25 * var_x60; + const double var_x69 = pow(var_x68, (-4)); + const double var_x70 = pow(var_x62, 4); + const double var_x71 = pow(var_x64, (-4)); + const double var_x72 = pow(var_x65, 4); + const double var_x73 = var_x70 * var_x71 * var_x72; + const double var_x74 = var_x69 * var_x73; + const double var_x75 = pow(var_x58, (-2)); + const double var_x76 = pow(var_x65, 2); + const double var_x77 = pow(var_x59, 2); + const double var_x78 = var_x69 * var_x75 * var_x76 * var_x77; + const double var_x79 = pow(var_x64, (-2)); + const double var_x80 = pow(var_x62, 2); + const double var_x81 = var_x79 * var_x80; + const double var_x82 = var_x78 * var_x81; + const double var_x83 = 1 / (0.75 * var_x60 + 3.0 * var_x67); + const double var_x84 = pow(var_x65, 3); + const double var_x85 = var_x83 * var_x84 / pow(var_x68, 3); + const double var_x86 = pow(var_x62, 3); + const double var_x87 = pow(var_x64, (-3)); + const double var_x88 = var_x60 * var_x86 * var_x87; + const double var_x89 = var_x85 * var_x88; + const double var_x90 = mParameters[0] * var_chaste_interface__time_independent_potassium_current_y_gate__y; + const double var_x93 = var_chaste_interface__sodium_current_ultra_slow_gate__y * var_chaste_interface__sodium_current_voltage_dependent_gate__p_AP_Na; + const double var_x95 = pow(var_chaste_interface__slow_time_dependent_potassium_current_y1_gate__y1, 2); + const double var_x96 = 0.10000000000000001 + 0.90000000000000002 * var_chaste_interface__slow_time_dependent_potassium_current_y2_gate__y2; + const double var_x97 = var_x95 * var_x96; + const double var_x99 = pow(var_chaste_interface__transient_outward_current_y1_gate__y1, 3); + const double var_x100 = var_x99 * var_chaste_interface__transient_outward_current_y2_gate__y2; + const double var_x106 = pow(var_x68, (-5)); + const double var_x107 = var_x57 * var_x59 * var_x75; + const double var_x108 = var_x61 * var_x66; + const double var_x110 = var_x62 * var_x79; + const double var_x111 = var_x110 * var_x65; + const double var_x113 = 1.0 * var_x73; + const double var_x115 = var_x69 * var_x72; + const double var_x116 = var_x71 * var_x86; + const double var_x117 = var_x115 * var_x116 * var_x61; + const double var_x119 = var_x115 * var_x70 / pow(var_x64, 5); + const double var_x121 = var_x76 * var_x77 * var_x81; + const double var_x122 = 0.125 * var_x121 * var_x75; + const double var_x123 = var_x110 * var_x61 * var_x78; + const double var_x124 = var_x111 * var_x63; + const double var_x125 = var_x84 * var_x88; + const double var_x127 = 0.22222222222222221 * var_x106; + const double var_x128 = var_x121 * var_x57 * var_x69 / pow(var_x58, 3); + const double var_x129 = var_x80 * var_x87; + const double var_x130 = var_x129 * var_x78; + const double var_x131 = 2.0 * var_x69 * var_x83; + const double var_x133 = var_x129 * var_x61; + const double var_x134 = var_x85 * var_x86 * var_x87; + const double var_x135 = var_x116 * var_x63; + const double var_x145 = var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_U + var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_UCa; + const double var_x146 = pow(var_chaste_interface__ATP_production__ATPi, (-3)); + const double var_x147 = 1 / (1.0 + 2.7439999999999993 * var_x146); + const double var_x148 = var_x147 * var_chaste_interface__L_type_Ca_channel_ultra_slow_gate__y; + const double var_x149 = var_x145 * var_x148; + const double var_x151 = var_x149 * var_chaste_interface__L_type_Ca_channel_voltage_dependent_gate__p_AP_CaL; + const double var_x154 = var_x1 * var_x4; + const double var_x160 = 1 / var_chaste_interface__internal_ion_concentrations__Nai; + const double var_x161 = pow(var_x160, 1.0600000000000001); + const double var_x162 = var_x161 * (1.0 + 0.020000293738509214 * pow(var_chaste_interface__internal_ion_concentrations__Ki, 1.1200000000000001)); + const double var_x163 = 1 / var_chaste_interface__ATP_production__ATPi; + const double var_x164 = 1.0 + 0.094 * var_x163; + const double var_x165 = 1 / var_x164; + const double var_x166 = var_x165 / pow((0.22703754152993499 + var_x162), 2); + const double var_x168 = mParameters[0] * var_chaste_interface__sodium_potassium_pump_y_gate__y; + const double var_x170 = ((var_x11) ? (5.3564032599450697e-5 * var_x7) : ((var_x19) ? (var_x16 * var_x17) : (4.1178711531977753e-6 * var_x20 * var_x7))); + const double var_x171 = ((var_x19) ? (1) : (var_x154)); + const double var_x172 = var_x37 * var_x55; + const double var_x173 = var_x55 * var_x60; + const double var_x174 = var_x107 * var_x55; + const double var_x175 = var_x55 * var_x67; + const double var_x176 = var_x108 * var_x55; + const double var_x177 = var_x124 * var_x55; + const double var_x178 = var_x106 * (0.40069247885978065 * var_x174 + 3.2055398308782452 * var_x177 + 5.1288637294051922 * var_x175 - 6.8384849725402566 * var_x176 - 0.93494911733948827 * var_x173); + const double var_x179 = var_x113 * var_x178; + const double var_x180 = 5.1288637294051922 * var_x55 * var_x74; + const double var_x181 = 6.8384849725402566 * var_x117 * var_x55; + const double var_x182 = var_x55 * var_x63; + const double var_x183 = 3.2055398308782452 * var_x119 * var_x182; + const double var_x184 = var_x125 * (0.30051935914483546 * var_x174 + 2.4041548731586837 * var_x177 + 3.8466477970538944 * var_x175 - 5.1288637294051922 * var_x176 - 0.70121183800461617 * var_x173); + const double var_x185 = var_x173 * var_x85; + const double var_x186 = var_x179 + var_x181 - var_x180 - var_x183 + var_x122 * var_x178 + var_x127 * var_x184 + var_x131 * var_x184 + 10.257727458810384 * var_x133 * var_x185 + 0.42740531078376603 * var_x123 * var_x55 - 0.10017311971494516 * var_x128 * var_x55 - 0.20034623942989033 * var_x130 * var_x182 - 0.80138495771956131 * var_x134 * var_x174 - 4.8083097463173674 * var_x135 * var_x185 - 0.086816703752952459 * var_x55 * var_x82 - 5.823397359428812 * var_x134 * var_x173; + const double var_x187 = 26.712831923985377 * var_x55; + const double var_x188 = 1.0 * var_x74; + const double var_x189 = var_x188 + 0.125 * var_x82 + 2.0 * var_x89; + const double var_x190 = var_x189 * var_x55 * var_x90; + const double var_x191 = var_x161 * var_x166 * pow(var_chaste_interface__internal_ion_concentrations__Ki, 0.12000000000000011); + const double var_x192 = var_x168 * var_x191; + const double var_x236 = 1.4250668745018745e-7 * var_x50; + const double var_x245 = -4.477301016616798e-9 * var_chaste_interface__rapid_time_dependent_potassium_current_y2_gate__y2 - 6.7159515249251966e-9 * var_chaste_interface__rapid_time_dependent_potassium_current_y1_gate__y1; + const double var_x246 = var_x245 * var_x53; + const double var_x247 = 0.00037051738737048736 * var_x93; + const double var_x248 = 6.5293973158994975e-6 * var_x97; + const double var_x249 = 4.2752006235056235e-8 * var_x100; + const double var_x250 = 3.9659488542057145e-5 * var_x56 - 1.4846605801628617e-6 * var_chaste_interface__membrane__Vm; + const double var_x251 = var_x250 * var_x90; + const double var_x252 = 4.1195833208100184e-6 * var_x151; + + partialF = -3.9659488542057145e-5 * var_x190 - 1.0238719530354315e-7 * var_x192 - 0.0022848291065246224 * var_x172 - 1.2955153404562495e-6 * var_x170 - 1.9950936243026244e-7 * var_x171 + var_x186 * var_x251 + var_x187 * var_x246 - var_x171 * var_x236 - var_x171 * var_x247 - var_x171 * var_x248 - var_x171 * var_x249 - var_x171 * var_x252; + } + else + { + const double y_save = rY[2]; + rY[2] += delta; + const double temp = EvaluateYDerivative2(var_chaste_interface__environment__time, rY); + partialF = (temp-mEvalF[2])/delta; + rY[2] = y_save; + } + return partialF; + } + double Dynamicmatsuoka_model_2003FromCellMLGRL1::EvaluateYDerivative3(double var_chaste_interface__environment__time, std::vector& rY) + { + + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -85.95752434460744 + double var_chaste_interface__internal_ion_concentrations__Nai = rY[1]; + // Units: millimolar; Initial value: 4.925761439682025 + double var_chaste_interface__internal_ion_concentrations__Ca_Total = rY[3]; + // Units: millimolar; Initial value: 0.00040180173572968586 + double var_chaste_interface__ATP_production__ATPi = rY[4]; + // Units: millimolar; Initial value: 4.657102729020499 + double var_chaste_interface__L_type_Ca_channel_voltage_dependent_gate__p_AP_CaL = rY[9]; + // Units: dimensionless; Initial value: 1.5445004166497696e-06 + double var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_U = rY[12]; + // Units: dimensionless; Initial value: 0.17246483915629204 + double var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_UCa = rY[13]; + // Units: dimensionless; Initial value: 6.098246017787626e-05 + double var_chaste_interface__L_type_Ca_channel_ultra_slow_gate__y = rY[15]; + // Units: dimensionless; Initial value: 0.9985266538252986 + double var_chaste_interface__T_type_Ca_channel_y1_gate__y1 = rY[16]; + // Units: dimensionless; Initial value: 1.6882718240109127e-05 + double var_chaste_interface__T_type_Ca_channel_y2_gate__y2 = rY[17]; + // Units: dimensionless; Initial value: 0.8585352091865849 + double var_chaste_interface__sodium_calcium_exchanger_y_gate__y = rY[26]; + // Units: dimensionless; Initial value: 0.9891789193465331 + double var_chaste_interface__SR_calcium_pump_y_gate__y = rY[28]; + // Units: dimensionless; Initial value: 0.46108441538480216 + double var_chaste_interface__RyR_channel__p_open_RyR = rY[29]; + // Units: dimensionless; Initial value: 0.00034314360001543243 + double var_chaste_interface__Ca_concentrations_in_SR__Ca_Total = rY[31]; + // Units: millimolar; Initial value: 9.455741736977666 + double var_chaste_interface__Ca_concentrations_in_SR__Caup = rY[32]; + // Units: millimolar; Initial value: 2.611712901567567 + double var_chaste_interface__NL_model__pCa = rY[33]; + // Units: dimensionless; Initial value: 0.02490898775497523 + double var_chaste_interface__NL_model__pCaCB = rY[34]; + // Units: dimensionless; Initial value: 0.001990153835322864 + double var_chaste_interface__NL_model__pCB = rY[35]; + // Units: dimensionless; Initial value: 0.00042941813853474524 + double var_chaste_interface__NL_model__X = rY[36]; + // Units: micrometre; Initial value: 0.9573749975411884 + + + // Mathematics + const double var_Ca_concentrations_in_SR__Carel = -5.4000000000000004 + 0.5 * var_chaste_interface__Ca_concentrations_in_SR__Ca_Total + 5.4000000000000004 * sqrt(pow((1 - 0.092592592592592587 * var_chaste_interface__Ca_concentrations_in_SR__Ca_Total), 2) + 0.027434842249657067 * var_chaste_interface__Ca_concentrations_in_SR__Ca_Total); // millimolar + const double var_L_type_Ca_channel__p_open_CaL = (var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_U + var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_UCa) * var_chaste_interface__L_type_Ca_channel_ultra_slow_gate__y * var_chaste_interface__L_type_Ca_channel_voltage_dependent_gate__p_AP_CaL / (1.0 + 2.7439999999999993 / pow(var_chaste_interface__ATP_production__ATPi, 3)); // dimensionless + const double d_dt_chaste_interface_var_NL_model__X = 1.1488559970494261 - 1.2 * var_chaste_interface__NL_model__X; // micrometre / millisecond + const double var_NL_model__Q_d2 = 0.027 * pow(d_dt_chaste_interface_var_NL_model__X, 2) * var_chaste_interface__NL_model__pCaCB; // per_millisecond + const double var_SR_calcium_pump__k2 = 1 / (1.0 + 0.10000000000000001 / var_chaste_interface__ATP_production__ATPi); // per_millisecond + const double var_SR_calcium_pump__p_E1Ca = 1 / (1.0 + 0.080000000000000002 / var_chaste_interface__Ca_concentrations_in_SR__Caup); // dimensionless + const double var_internal_ion_concentrations__Cai = -0.026190000000000001 + 0.5 * sqrt(pow((0.052380000000000003 - var_chaste_interface__internal_ion_concentrations__Ca_Total), 2) + 0.0095200000000000007 * var_chaste_interface__internal_ion_concentrations__Ca_Total) + 0.5 * var_chaste_interface__internal_ion_concentrations__Ca_Total; // millimolar + const double var_NL_model__Q_b = -0.029999999999999999 * var_chaste_interface__NL_model__pCa + 39.0 * (1.0 - var_chaste_interface__NL_model__pCB - var_chaste_interface__NL_model__pCa - var_chaste_interface__NL_model__pCaCB) * var_internal_ion_concentrations__Cai; // per_millisecond + const double var_NL_model__Q_r = 0.029999999999999999 * var_chaste_interface__NL_model__pCaCB - 1560.0 * var_chaste_interface__NL_model__pCB * var_internal_ion_concentrations__Cai; // per_millisecond + const double var_RyR_channel__i_RyR = 62000.0 * (-var_internal_ion_concentrations__Cai + var_Ca_concentrations_in_SR__Carel) * var_chaste_interface__RyR_channel__p_open_RyR; // picoA + const double var_SR_L_current__i_SR_L = 459.0 * var_chaste_interface__Ca_concentrations_in_SR__Caup - 459.0 * var_internal_ion_concentrations__Cai; // picoA + const double var_SR_calcium_pump__p_E2Ca = 1 / (1.0 + 0.00080000000000000004 / var_internal_ion_concentrations__Cai); // dimensionless + const double var_SR_calcium_pump__i_SR_U = 1625.0 * var_SR_calcium_pump__p_E1Ca * var_chaste_interface__SR_calcium_pump_y_gate__y - 162500.0 * (1.0 - var_chaste_interface__SR_calcium_pump_y_gate__y) * var_SR_calcium_pump__k2 * var_SR_calcium_pump__p_E2Ca; // picoA + const double var_constant_field_equations__CF_Ca = ((var_chaste_interface__membrane__Vm == 0) ? (-1.8) : (0.074870384603595908 * (-1.8 * exp(-0.074870384603595908 * var_chaste_interface__membrane__Vm) + var_internal_ion_concentrations__Cai) * var_chaste_interface__membrane__Vm / (1.0 - exp(-0.074870384603595908 * var_chaste_interface__membrane__Vm)))); // millimolar + const double var_L_type_Ca_channel__i_CaL_Ca = 8712.0 * var_L_type_Ca_channel__p_open_CaL * var_constant_field_equations__CF_Ca; // picoA + const double var_T_type_Ca_channel__i_Ca_T = 612.0 * var_chaste_interface__T_type_Ca_channel_y1_gate__y1 * var_chaste_interface__T_type_Ca_channel_y2_gate__y2 * var_constant_field_equations__CF_Ca; // picoA + const double var_background_Cab_current__i_Cab = 0.040000000000000001 * var_constant_field_equations__CF_Ca; // picoA + const double var_sodium_calcium_exchanger__k1 = exp(0.011979261536575346 * var_chaste_interface__membrane__Vm); // per_millisecond + const double var_sodium_calcium_exchanger__k2 = exp(-0.025455930765222609 * var_chaste_interface__membrane__Vm); // per_millisecond + const double var_sodium_calcium_exchanger__p_E1Na = 1 / (1.0 + 669.921875 * (1.0 + 724.63768115942037 * var_internal_ion_concentrations__Cai) / pow(var_chaste_interface__internal_ion_concentrations__Nai, 3)); // dimensionless + const double var_sodium_calcium_exchanger__i_NaCa = 6.8099999999999996 * (-0.6399652192815608 * (1.0 - var_chaste_interface__sodium_calcium_exchanger_y_gate__y) * var_sodium_calcium_exchanger__k2 + var_sodium_calcium_exchanger__k1 * var_sodium_calcium_exchanger__p_E1Na * var_chaste_interface__sodium_calcium_exchanger_y_gate__y) * mParameters[0]; // picoA + const double d_dt_chaste_interface_var_internal_ion_concentrations__Ca_Total = 0.070000000000000007 * var_NL_model__Q_d2 + 0.070000000000000007 * var_NL_model__Q_r + 6.4775767022812476e-7 * var_RyR_channel__i_RyR + 6.4775767022812476e-7 * var_SR_L_current__i_SR_L + 6.4775767022812476e-7 * var_SR_calcium_pump__i_SR_U + 1.2955153404562495e-6 * var_sodium_calcium_exchanger__i_NaCa - 0.070000000000000007 * var_NL_model__Q_b - 6.4775767022812476e-7 * var_L_type_Ca_channel__i_CaL_Ca - 6.4775767022812476e-7 * var_T_type_Ca_channel__i_Ca_T - 6.4775767022812476e-7 * var_background_Cab_current__i_Cab; // millimolar / millisecond + + return d_dt_chaste_interface_var_internal_ion_concentrations__Ca_Total; + } + + double Dynamicmatsuoka_model_2003FromCellMLGRL1::EvaluatePartialDerivative3(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -85.95752434460744 + double var_chaste_interface__internal_ion_concentrations__Nai = rY[1]; + // Units: millimolar; Initial value: 4.925761439682025 + double var_chaste_interface__internal_ion_concentrations__Ca_Total = rY[3]; + // Units: millimolar; Initial value: 0.00040180173572968586 + double var_chaste_interface__ATP_production__ATPi = rY[4]; + // Units: millimolar; Initial value: 4.657102729020499 + double var_chaste_interface__L_type_Ca_channel_voltage_dependent_gate__p_AP_CaL = rY[9]; + // Units: dimensionless; Initial value: 1.5445004166497696e-06 + double var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_U = rY[12]; + // Units: dimensionless; Initial value: 0.17246483915629204 + double var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_UCa = rY[13]; + // Units: dimensionless; Initial value: 6.098246017787626e-05 + double var_chaste_interface__L_type_Ca_channel_ultra_slow_gate__y = rY[15]; + // Units: dimensionless; Initial value: 0.9985266538252986 + double var_chaste_interface__T_type_Ca_channel_y1_gate__y1 = rY[16]; + // Units: dimensionless; Initial value: 1.6882718240109127e-05 + double var_chaste_interface__T_type_Ca_channel_y2_gate__y2 = rY[17]; + // Units: dimensionless; Initial value: 0.8585352091865849 + double var_chaste_interface__sodium_calcium_exchanger_y_gate__y = rY[26]; + // Units: dimensionless; Initial value: 0.9891789193465331 + double var_chaste_interface__SR_calcium_pump_y_gate__y = rY[28]; + // Units: dimensionless; Initial value: 0.46108441538480216 + double var_chaste_interface__RyR_channel__p_open_RyR = rY[29]; + // Units: dimensionless; Initial value: 0.00034314360001543243 + double var_chaste_interface__NL_model__pCa = rY[33]; + // Units: dimensionless; Initial value: 0.02490898775497523 + double var_chaste_interface__NL_model__pCaCB = rY[34]; + // Units: dimensionless; Initial value: 0.001990153835322864 + double var_chaste_interface__NL_model__pCB = rY[35]; + // Units: dimensionless; Initial value: 0.00042941813853474524 + + const double var_x19 = var_chaste_interface__membrane__Vm == 0; + const double var_x26 = 0.074870384603595908 * var_chaste_interface__membrane__Vm; + const double var_x27 = exp(-var_x26); + const double var_x28 = 1.0 - var_x27; + const double var_x29 = 1 / var_x28; + const double var_x30 = sqrt(pow((0.052380000000000003 - var_chaste_interface__internal_ion_concentrations__Ca_Total), 2) + 0.0095200000000000007 * var_chaste_interface__internal_ion_concentrations__Ca_Total); + const double var_x31 = -0.026190000000000001 + 0.5 * var_x30 + 0.5 * var_chaste_interface__internal_ion_concentrations__Ca_Total; + const double var_x41 = pow(var_chaste_interface__internal_ion_concentrations__Nai, 3); + const double var_x42 = 1 / var_x41; + const double var_x43 = -17.978260869565219 + 362.31884057971018 * var_x30 + 362.31884057971018 * var_chaste_interface__internal_ion_concentrations__Ca_Total; + const double var_x44 = var_x42 * var_x43; + const double var_x45 = exp(0.011979261536575346 * var_chaste_interface__membrane__Vm); + const double var_x48 = -0.052380000000000003 + var_x30 + var_chaste_interface__internal_ion_concentrations__Ca_Total; + const double var_x145 = var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_U + var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_UCa; + const double var_x146 = pow(var_chaste_interface__ATP_production__ATPi, (-3)); + const double var_x147 = 1 / (1.0 + 2.7439999999999993 * var_x146); + const double var_x148 = var_x147 * var_chaste_interface__L_type_Ca_channel_ultra_slow_gate__y; + const double var_x149 = var_x145 * var_x148; + const double var_x151 = var_x149 * var_chaste_interface__L_type_Ca_channel_voltage_dependent_gate__p_AP_CaL; + const double var_x156 = var_x45 / pow((0.0014927113702623907 + var_x44), 2); + const double var_x158 = mParameters[0] * var_chaste_interface__sodium_calcium_exchanger_y_gate__y; + const double var_x163 = 1 / var_chaste_interface__ATP_production__ATPi; + const double var_x193 = (-0.047620000000000003 + var_chaste_interface__internal_ion_concentrations__Ca_Total) / var_x30; + const double var_x194 = 0.5 * var_x193; + const double var_x195 = 0.5 + var_x194; + const double var_x196 = ((var_x19) ? (0) : (var_x195 * var_x26 * var_x29)); + const double var_x201 = var_x156 * var_x42 * (362.31884057971018 + 362.31884057971018 * var_x193); + const double var_x202 = var_x158 * var_x201; + const double var_x256 = 0.00039642769417961232 * var_chaste_interface__T_type_Ca_channel_y1_gate__y1 * var_chaste_interface__T_type_Ca_channel_y2_gate__y2; + const double var_x258 = 1.0 - var_chaste_interface__NL_model__pCB - var_chaste_interface__NL_model__pCa - var_chaste_interface__NL_model__pCaCB; + const double var_x259 = 1.0 - var_chaste_interface__SR_calcium_pump_y_gate__y; + const double var_x260 = 1.0 + 0.10000000000000001 * var_x163; + const double var_x261 = 1 / var_x260; + const double var_x262 = 1 / var_x31; + const double var_x263 = 1.0 + 0.00080000000000000004 * var_x262; + const double var_x264 = pow(var_x48, 2); + const double var_x265 = (-0.5 - var_x194) / var_x264; + const double var_x266 = var_x265 / pow(var_x263, 2); + const double var_x267 = var_x261 * var_x266; + const double var_x268 = var_x259 * var_x267; + const double var_x269 = var_x151 * var_x196; + + partialF = -0.00014866038531735463 + 0.00033683398851862484 * var_x268 - 0.0056432648230274225 * var_x269 - 0.00014866038531735463 * var_x193 - 2.591030680912499e-8 * var_x196 - 1.3169385562319573e-8 * var_x202 + var_x258 * (-1.3650000000000002 - 1.3650000000000002 * var_x193) + (-54.600000000000009 - 54.600000000000009 * var_x193) * var_chaste_interface__NL_model__pCB + (-0.020080487777071866 - 0.020080487777071866 * var_x193) * var_chaste_interface__RyR_channel__p_open_RyR - var_x196 * var_x256; + } + else + { + const double y_save = rY[3]; + rY[3] += delta; + const double temp = EvaluateYDerivative3(var_chaste_interface__environment__time, rY); + partialF = (temp-mEvalF[3])/delta; + rY[3] = y_save; + } + return partialF; + } + double Dynamicmatsuoka_model_2003FromCellMLGRL1::EvaluateYDerivative4(double var_chaste_interface__environment__time, std::vector& rY) + { + + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -85.95752434460744 + double var_chaste_interface__internal_ion_concentrations__Nai = rY[1]; + // Units: millimolar; Initial value: 4.925761439682025 + double var_chaste_interface__internal_ion_concentrations__Ki = rY[2]; + // Units: millimolar; Initial value: 143.1837333000449 + double var_chaste_interface__internal_ion_concentrations__Ca_Total = rY[3]; + // Units: millimolar; Initial value: 0.00040180173572968586 + double var_chaste_interface__ATP_production__ATPi = rY[4]; + // Units: millimolar; Initial value: 4.657102729020499 + double var_chaste_interface__sodium_potassium_pump_y_gate__y = rY[27]; + // Units: dimensionless; Initial value: 0.5910747147428818 + double var_chaste_interface__SR_calcium_pump_y_gate__y = rY[28]; + // Units: dimensionless; Initial value: 0.46108441538480216 + double var_chaste_interface__Ca_concentrations_in_SR__Caup = rY[32]; + // Units: millimolar; Initial value: 2.611712901567567 + double var_chaste_interface__NL_model__pCaCB = rY[34]; + // Units: dimensionless; Initial value: 0.001990153835322864 + + + // Mathematics + const double var_SR_calcium_pump__k2 = 1 / (1.0 + 0.10000000000000001 / var_chaste_interface__ATP_production__ATPi); // per_millisecond + const double var_SR_calcium_pump__p_E1Ca = 1 / (1.0 + 0.080000000000000002 / var_chaste_interface__Ca_concentrations_in_SR__Caup); // dimensionless + const double var_internal_ion_concentrations__Cai = -0.026190000000000001 + 0.5 * sqrt(pow((0.052380000000000003 - var_chaste_interface__internal_ion_concentrations__Ca_Total), 2) + 0.0095200000000000007 * var_chaste_interface__internal_ion_concentrations__Ca_Total) + 0.5 * var_chaste_interface__internal_ion_concentrations__Ca_Total; // millimolar + const double var_SR_calcium_pump__p_E2Ca = 1 / (1.0 + 0.00080000000000000004 / var_internal_ion_concentrations__Cai); // dimensionless + const double var_SR_calcium_pump__i_SR_U = 1625.0 * var_SR_calcium_pump__p_E1Ca * var_chaste_interface__SR_calcium_pump_y_gate__y - 162500.0 * (1.0 - var_chaste_interface__SR_calcium_pump_y_gate__y) * var_SR_calcium_pump__k2 * var_SR_calcium_pump__p_E2Ca; // picoA + const double var_sodium_potassium_pump__Nao_Eff = 140.0 * exp(-0.030696857687474322 * var_chaste_interface__membrane__Vm); // millimolar + const double var_sodium_potassium_pump__k1 = 0.37 / (1.0 + 0.094 / var_chaste_interface__ATP_production__ATPi); // per_millisecond + const double var_sodium_potassium_pump__p_E1Na = 1 / (1.0 + 4.4045579125871104 * pow(1 / var_chaste_interface__internal_ion_concentrations__Nai, 1.0600000000000001) * (1.0 + 0.020000293738509214 * pow(var_chaste_interface__internal_ion_concentrations__Ki, 1.1200000000000001))); // dimensionless + const double var_sodium_potassium_pump__p_E2Na = 1 / (1.0 + 2804.9496956618664 * pow(1 / var_sodium_potassium_pump__Nao_Eff, 1.0600000000000001)); // dimensionless + const double var_sodium_potassium_pump__i_NaK = 21.0 * (-0.040000000000000001 * (1.0 - var_chaste_interface__sodium_potassium_pump_y_gate__y) * var_sodium_potassium_pump__p_E2Na + var_sodium_potassium_pump__k1 * var_sodium_potassium_pump__p_E1Na * var_chaste_interface__sodium_potassium_pump_y_gate__y) * mParameters[0]; // picoA + const double d_dt_chaste_interface_var_ATP_production__ATPi = 0.014999999999999999 + 3.2387883511406238e-7 * var_SR_calcium_pump__i_SR_U - 0.0030000000000000001 * var_chaste_interface__ATP_production__ATPi - 0.028000000000000004 * var_chaste_interface__NL_model__pCaCB - 1.2955153404562495e-6 * var_sodium_potassium_pump__i_NaK; // millimolar / millisecond + + return d_dt_chaste_interface_var_ATP_production__ATPi; + } + + double Dynamicmatsuoka_model_2003FromCellMLGRL1::EvaluatePartialDerivative4(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__internal_ion_concentrations__Nai = rY[1]; + // Units: millimolar; Initial value: 4.925761439682025 + double var_chaste_interface__internal_ion_concentrations__Ki = rY[2]; + // Units: millimolar; Initial value: 143.1837333000449 + double var_chaste_interface__internal_ion_concentrations__Ca_Total = rY[3]; + // Units: millimolar; Initial value: 0.00040180173572968586 + double var_chaste_interface__ATP_production__ATPi = rY[4]; + // Units: millimolar; Initial value: 4.657102729020499 + double var_chaste_interface__sodium_potassium_pump_y_gate__y = rY[27]; + // Units: dimensionless; Initial value: 0.5910747147428818 + double var_chaste_interface__SR_calcium_pump_y_gate__y = rY[28]; + // Units: dimensionless; Initial value: 0.46108441538480216 + + const double var_x30 = sqrt(pow((0.052380000000000003 - var_chaste_interface__internal_ion_concentrations__Ca_Total), 2) + 0.0095200000000000007 * var_chaste_interface__internal_ion_concentrations__Ca_Total); + const double var_x31 = -0.026190000000000001 + 0.5 * var_x30 + 0.5 * var_chaste_interface__internal_ion_concentrations__Ca_Total; + const double var_x36 = pow(var_chaste_interface__ATP_production__ATPi, 2); + const double var_x160 = 1 / var_chaste_interface__internal_ion_concentrations__Nai; + const double var_x161 = pow(var_x160, 1.0600000000000001); + const double var_x162 = var_x161 * (1.0 + 0.020000293738509214 * pow(var_chaste_interface__internal_ion_concentrations__Ki, 1.1200000000000001)); + const double var_x163 = 1 / var_chaste_interface__ATP_production__ATPi; + const double var_x164 = 1.0 + 0.094 * var_x163; + const double var_x205 = 1 / (1.0 + 4.4045579125871104 * var_x162); + const double var_x206 = 1 / var_x36; + const double var_x207 = var_x205 * var_x206 * var_chaste_interface__sodium_potassium_pump_y_gate__y / pow(var_x164, 2); + const double var_x208 = var_x207 * mParameters[0]; + const double var_x259 = 1.0 - var_chaste_interface__SR_calcium_pump_y_gate__y; + const double var_x260 = 1.0 + 0.10000000000000001 * var_x163; + const double var_x262 = 1 / var_x31; + const double var_x263 = 1.0 + 0.00080000000000000004 * var_x262; + const double var_x270 = 1 / var_x263; + const double var_x271 = var_x206 * var_x259 * var_x270 / pow(var_x260, 2); + + partialF = -0.0030000000000000001 - 9.4621849436243545e-7 * var_x208 - 0.005263031070603514 * var_x271; + } + else + { + const double y_save = rY[4]; + rY[4] += delta; + const double temp = EvaluateYDerivative4(var_chaste_interface__environment__time, rY); + partialF = (temp-mEvalF[4])/delta; + rY[4] = y_save; + } + return partialF; + } + double Dynamicmatsuoka_model_2003FromCellMLGRL1::EvaluateYDerivative5(double var_chaste_interface__environment__time, std::vector& rY) + { + + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -85.95752434460744 + double var_chaste_interface__sodium_current_voltage_dependent_gate__p_AP_Na = rY[5]; + // Units: dimensionless; Initial value: 1.779648367445368e-05 + double var_chaste_interface__sodium_current_voltage_dependent_gate__p_RP_Na = rY[6]; + // Units: dimensionless; Initial value: 0.3556412697995689 + double var_chaste_interface__sodium_current_voltage_dependent_gate__p_AI_Na = rY[7]; + // Units: dimensionless; Initial value: 0.40285968661346977 + + + // Mathematics + const double var_sodium_current_voltage_dependent_gate__k_AP_AI = 1.25 / exp(-0.0025000000000000001 * var_chaste_interface__membrane__Vm); // per_millisecond + const double var_sodium_current_voltage_dependent_gate__k_AP_RP = 1 / (26.0 * exp(0.058823529411764705 * var_chaste_interface__membrane__Vm) + 0.02 * exp(0.00125 * var_chaste_interface__membrane__Vm)); // per_millisecond + const double var_sodium_current_voltage_dependent_gate__k_RP_AP = 1 / (0.25 * exp(-0.02 * var_chaste_interface__membrane__Vm) + 0.1027 * exp(-0.125 * var_chaste_interface__membrane__Vm)); // per_millisecond + const double d_dt_chaste_interface_var_sodium_current_voltage_dependent_gate__p_AP_Na = 8.7499999999999999e-5 * var_chaste_interface__sodium_current_voltage_dependent_gate__p_AI_Na + var_sodium_current_voltage_dependent_gate__k_RP_AP * var_chaste_interface__sodium_current_voltage_dependent_gate__p_RP_Na - (var_sodium_current_voltage_dependent_gate__k_AP_AI + var_sodium_current_voltage_dependent_gate__k_AP_RP) * var_chaste_interface__sodium_current_voltage_dependent_gate__p_AP_Na; // 1 / millisecond + + return d_dt_chaste_interface_var_sodium_current_voltage_dependent_gate__p_AP_Na; + } + + double Dynamicmatsuoka_model_2003FromCellMLGRL1::EvaluatePartialDerivative5(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -85.95752434460744 + + const double var_x284 = exp(-0.0025000000000000001 * var_chaste_interface__membrane__Vm); + const double var_x285 = 1 / var_x284; + const double var_x287 = exp(0.00125 * var_chaste_interface__membrane__Vm); + const double var_x288 = 0.058823529411764705 * var_chaste_interface__membrane__Vm; + const double var_x289 = exp(var_x288); + const double var_x299 = 1 / (26.0 * var_x289 + 0.02 * var_x287); + const double var_x300 = 1.25 * var_x285; + + partialF = -var_x299 - var_x300; + } + else + { + const double y_save = rY[5]; + rY[5] += delta; + const double temp = EvaluateYDerivative5(var_chaste_interface__environment__time, rY); + partialF = (temp-mEvalF[5])/delta; + rY[5] = y_save; + } + return partialF; + } + double Dynamicmatsuoka_model_2003FromCellMLGRL1::EvaluateYDerivative6(double var_chaste_interface__environment__time, std::vector& rY) + { + + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -85.95752434460744 + double var_chaste_interface__sodium_current_voltage_dependent_gate__p_AP_Na = rY[5]; + // Units: dimensionless; Initial value: 1.779648367445368e-05 + double var_chaste_interface__sodium_current_voltage_dependent_gate__p_RP_Na = rY[6]; + // Units: dimensionless; Initial value: 0.3556412697995689 + double var_chaste_interface__sodium_current_voltage_dependent_gate__p_AI_Na = rY[7]; + // Units: dimensionless; Initial value: 0.40285968661346977 + + + // Mathematics + const double var_sodium_current_voltage_dependent_gate__k_AI_RI = 1 / (1300.0 * exp(0.050000000000000003 * var_chaste_interface__membrane__Vm) + 0.040000000000000001 * exp(0.00125 * var_chaste_interface__membrane__Vm)); // per_millisecond + const double var_sodium_current_voltage_dependent_gate__k_AP_AI = 1.25 / exp(-0.0025000000000000001 * var_chaste_interface__membrane__Vm); // per_millisecond + const double var_sodium_current_voltage_dependent_gate__k_AP_RP = 1 / (26.0 * exp(0.058823529411764705 * var_chaste_interface__membrane__Vm) + 0.02 * exp(0.00125 * var_chaste_interface__membrane__Vm)); // per_millisecond + const double var_sodium_current_voltage_dependent_gate__k_RI_AI = 1 / (5.0 * exp(-0.0025000000000000001 * var_chaste_interface__membrane__Vm) + 0.0001027 * exp(-0.125 * var_chaste_interface__membrane__Vm)); // per_millisecond + const double var_sodium_current_voltage_dependent_gate__k_RP_AP = 1 / (0.25 * exp(-0.02 * var_chaste_interface__membrane__Vm) + 0.1027 * exp(-0.125 * var_chaste_interface__membrane__Vm)); // per_millisecond + const double var_sodium_current_voltage_dependent_gate__k_RP_RI = 0.01 / (1.0 + 8.7499999999999999e-5 * var_sodium_current_voltage_dependent_gate__k_AP_RP * var_sodium_current_voltage_dependent_gate__k_RI_AI / (var_sodium_current_voltage_dependent_gate__k_AI_RI * var_sodium_current_voltage_dependent_gate__k_AP_AI * var_sodium_current_voltage_dependent_gate__k_RP_AP)); // per_millisecond + const double var_sodium_current_voltage_dependent_gate__p_RI_Na = 1.0 - var_chaste_interface__sodium_current_voltage_dependent_gate__p_AI_Na - var_chaste_interface__sodium_current_voltage_dependent_gate__p_AP_Na - var_chaste_interface__sodium_current_voltage_dependent_gate__p_RP_Na; // dimensionless + const double d_dt_chaste_interface_var_sodium_current_voltage_dependent_gate__p_RP_Na = (0.01 - var_sodium_current_voltage_dependent_gate__k_RP_RI) * var_sodium_current_voltage_dependent_gate__p_RI_Na + var_sodium_current_voltage_dependent_gate__k_AP_RP * var_chaste_interface__sodium_current_voltage_dependent_gate__p_AP_Na - (var_sodium_current_voltage_dependent_gate__k_RP_AP + var_sodium_current_voltage_dependent_gate__k_RP_RI) * var_chaste_interface__sodium_current_voltage_dependent_gate__p_RP_Na; // 1 / millisecond + + return d_dt_chaste_interface_var_sodium_current_voltage_dependent_gate__p_RP_Na; + } + + double Dynamicmatsuoka_model_2003FromCellMLGRL1::EvaluatePartialDerivative6(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -85.95752434460744 + + const double var_x293 = exp(-0.125 * var_chaste_interface__membrane__Vm); + const double var_x295 = exp(-0.02 * var_chaste_interface__membrane__Vm); + const double var_x301 = 0.25 * var_x295 + 0.1027 * var_x293; + const double var_x302 = 1 / var_x301; + + partialF = -0.01 - var_x302; + } + else + { + const double y_save = rY[6]; + rY[6] += delta; + const double temp = EvaluateYDerivative6(var_chaste_interface__environment__time, rY); + partialF = (temp-mEvalF[6])/delta; + rY[6] = y_save; + } + return partialF; + } + double Dynamicmatsuoka_model_2003FromCellMLGRL1::EvaluateYDerivative7(double var_chaste_interface__environment__time, std::vector& rY) + { + + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -85.95752434460744 + double var_chaste_interface__sodium_current_voltage_dependent_gate__p_AP_Na = rY[5]; + // Units: dimensionless; Initial value: 1.779648367445368e-05 + double var_chaste_interface__sodium_current_voltage_dependent_gate__p_RP_Na = rY[6]; + // Units: dimensionless; Initial value: 0.3556412697995689 + double var_chaste_interface__sodium_current_voltage_dependent_gate__p_AI_Na = rY[7]; + // Units: dimensionless; Initial value: 0.40285968661346977 + + + // Mathematics + const double var_sodium_current_voltage_dependent_gate__k_AI_RI = 1 / (1300.0 * exp(0.050000000000000003 * var_chaste_interface__membrane__Vm) + 0.040000000000000001 * exp(0.00125 * var_chaste_interface__membrane__Vm)); // per_millisecond + const double var_sodium_current_voltage_dependent_gate__k_AP_AI = 1.25 / exp(-0.0025000000000000001 * var_chaste_interface__membrane__Vm); // per_millisecond + const double var_sodium_current_voltage_dependent_gate__k_RI_AI = 1 / (5.0 * exp(-0.0025000000000000001 * var_chaste_interface__membrane__Vm) + 0.0001027 * exp(-0.125 * var_chaste_interface__membrane__Vm)); // per_millisecond + const double var_sodium_current_voltage_dependent_gate__p_RI_Na = 1.0 - var_chaste_interface__sodium_current_voltage_dependent_gate__p_AI_Na - var_chaste_interface__sodium_current_voltage_dependent_gate__p_AP_Na - var_chaste_interface__sodium_current_voltage_dependent_gate__p_RP_Na; // dimensionless + const double d_dt_chaste_interface_var_sodium_current_voltage_dependent_gate__p_AI_Na = var_sodium_current_voltage_dependent_gate__k_AP_AI * var_chaste_interface__sodium_current_voltage_dependent_gate__p_AP_Na + var_sodium_current_voltage_dependent_gate__k_RI_AI * var_sodium_current_voltage_dependent_gate__p_RI_Na - (8.7499999999999999e-5 + var_sodium_current_voltage_dependent_gate__k_AI_RI) * var_chaste_interface__sodium_current_voltage_dependent_gate__p_AI_Na; // 1 / millisecond + + return d_dt_chaste_interface_var_sodium_current_voltage_dependent_gate__p_AI_Na; + } + + double Dynamicmatsuoka_model_2003FromCellMLGRL1::EvaluatePartialDerivative7(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -85.95752434460744 + + const double var_x284 = exp(-0.0025000000000000001 * var_chaste_interface__membrane__Vm); + const double var_x287 = exp(0.00125 * var_chaste_interface__membrane__Vm); + const double var_x293 = exp(-0.125 * var_chaste_interface__membrane__Vm); + const double var_x303 = 1 / (5.0 * var_x284 + 0.0001027 * var_x293); + const double var_x304 = exp(0.050000000000000003 * var_chaste_interface__membrane__Vm); + const double var_x305 = 1300.0 * var_x304 + 0.040000000000000001 * var_x287; + const double var_x317 = -var_x303; + + partialF = -8.7499999999999999e-5 + var_x317 - 1 / var_x305; + } + else + { + const double y_save = rY[7]; + rY[7] += delta; + const double temp = EvaluateYDerivative7(var_chaste_interface__environment__time, rY); + partialF = (temp-mEvalF[7])/delta; + rY[7] = y_save; + } + return partialF; + } + double Dynamicmatsuoka_model_2003FromCellMLGRL1::EvaluateYDerivative8(double var_chaste_interface__environment__time, std::vector& rY) + { + + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -85.95752434460744 + double var_chaste_interface__sodium_current_ultra_slow_gate__y = rY[8]; + // Units: dimensionless; Initial value: 0.5861887862983165 + + + // Mathematics + const double d_dt_chaste_interface_var_sodium_current_ultra_slow_gate__y = (1.0 - var_chaste_interface__sodium_current_ultra_slow_gate__y) / (8000.0 * exp(0.01 * var_chaste_interface__membrane__Vm) + 9000000000.0 * exp(0.20000000000000001 * var_chaste_interface__membrane__Vm)) - var_chaste_interface__sodium_current_ultra_slow_gate__y / (4000.0 * exp(-0.01 * var_chaste_interface__membrane__Vm) + 0.014 * exp(-0.20000000000000001 * var_chaste_interface__membrane__Vm)); // 1 / millisecond + + return d_dt_chaste_interface_var_sodium_current_ultra_slow_gate__y; + } + + double Dynamicmatsuoka_model_2003FromCellMLGRL1::EvaluatePartialDerivative8(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -85.95752434460744 + + const double var_x318 = 0.01 * var_chaste_interface__membrane__Vm; + const double var_x319 = exp(var_x318); + const double var_x320 = 0.20000000000000001 * var_chaste_interface__membrane__Vm; + const double var_x321 = exp(var_x320); + const double var_x322 = exp(-var_x320); + const double var_x323 = exp(-var_x318); + + partialF = -1 / (4000.0 * var_x323 + 0.014 * var_x322) - 1 / (8000.0 * var_x319 + 9000000000.0 * var_x321); + } + else + { + const double y_save = rY[8]; + rY[8] += delta; + const double temp = EvaluateYDerivative8(var_chaste_interface__environment__time, rY); + partialF = (temp-mEvalF[8])/delta; + rY[8] = y_save; + } + return partialF; + } + double Dynamicmatsuoka_model_2003FromCellMLGRL1::EvaluateYDerivative9(double var_chaste_interface__environment__time, std::vector& rY) + { + + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -85.95752434460744 + double var_chaste_interface__L_type_Ca_channel_voltage_dependent_gate__p_AP_CaL = rY[9]; + // Units: dimensionless; Initial value: 1.5445004166497696e-06 + double var_chaste_interface__L_type_Ca_channel_voltage_dependent_gate__p_RP_CaL = rY[10]; + // Units: dimensionless; Initial value: 0.9968480629364956 + double var_chaste_interface__L_type_Ca_channel_voltage_dependent_gate__p_AI_CaL = rY[11]; + // Units: dimensionless; Initial value: 0.000877325391245903 + + + // Mathematics + const double var_L_type_Ca_channel_voltage_dependent_gate__k_AP_RP = 1 / (480.0 * exp(0.14285714285714285 * var_chaste_interface__membrane__Vm) + 2.2000000000000002 * exp(0.015384615384615385 * var_chaste_interface__membrane__Vm)); // per_millisecond + const double var_L_type_Ca_channel_voltage_dependent_gate__k_RP_AP = 1 / (1.5 * exp(-0.015384615384615385 * var_chaste_interface__membrane__Vm) + 0.27000000000000002 * exp(-0.16949152542372881 * var_chaste_interface__membrane__Vm)); // per_millisecond + const double d_dt_chaste_interface_var_L_type_Ca_channel_voltage_dependent_gate__p_AP_CaL = 0.001 * var_chaste_interface__L_type_Ca_channel_voltage_dependent_gate__p_AI_CaL + var_L_type_Ca_channel_voltage_dependent_gate__k_RP_AP * var_chaste_interface__L_type_Ca_channel_voltage_dependent_gate__p_RP_CaL - (0.0040000000000000001 + var_L_type_Ca_channel_voltage_dependent_gate__k_AP_RP) * var_chaste_interface__L_type_Ca_channel_voltage_dependent_gate__p_AP_CaL; // 1 / millisecond + + return d_dt_chaste_interface_var_L_type_Ca_channel_voltage_dependent_gate__p_AP_CaL; + } + + double Dynamicmatsuoka_model_2003FromCellMLGRL1::EvaluatePartialDerivative9(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -85.95752434460744 + + const double var_x326 = 0.015384615384615385 * var_chaste_interface__membrane__Vm; + const double var_x331 = exp(var_x326); + const double var_x332 = exp(0.14285714285714285 * var_chaste_interface__membrane__Vm); + const double var_x335 = 1 / (480.0 * var_x332 + 2.2000000000000002 * var_x331); + + partialF = -0.0040000000000000001 - var_x335; + } + else + { + const double y_save = rY[9]; + rY[9] += delta; + const double temp = EvaluateYDerivative9(var_chaste_interface__environment__time, rY); + partialF = (temp-mEvalF[9])/delta; + rY[9] = y_save; + } + return partialF; + } + double Dynamicmatsuoka_model_2003FromCellMLGRL1::EvaluateYDerivative10(double var_chaste_interface__environment__time, std::vector& rY) + { + + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -85.95752434460744 + double var_chaste_interface__L_type_Ca_channel_voltage_dependent_gate__p_AP_CaL = rY[9]; + // Units: dimensionless; Initial value: 1.5445004166497696e-06 + double var_chaste_interface__L_type_Ca_channel_voltage_dependent_gate__p_RP_CaL = rY[10]; + // Units: dimensionless; Initial value: 0.9968480629364956 + double var_chaste_interface__L_type_Ca_channel_voltage_dependent_gate__p_AI_CaL = rY[11]; + // Units: dimensionless; Initial value: 0.000877325391245903 + + + // Mathematics + const double var_L_type_Ca_channel_voltage_dependent_gate__p_RI_CaL = 1.0 - var_chaste_interface__L_type_Ca_channel_voltage_dependent_gate__p_AI_CaL - var_chaste_interface__L_type_Ca_channel_voltage_dependent_gate__p_AP_CaL - var_chaste_interface__L_type_Ca_channel_voltage_dependent_gate__p_RP_CaL; // dimensionless + const double var_L_type_Ca_channel_voltage_dependent_gate__k_AI_RI = 1 / (11.0 * exp(0.01 * var_chaste_interface__membrane__Vm) + 2200000.0 * exp(0.13513513513513511 * var_chaste_interface__membrane__Vm)); // per_millisecond + const double var_L_type_Ca_channel_voltage_dependent_gate__k_AP_RP = 1 / (480.0 * exp(0.14285714285714285 * var_chaste_interface__membrane__Vm) + 2.2000000000000002 * exp(0.015384615384615385 * var_chaste_interface__membrane__Vm)); // per_millisecond + const double var_L_type_Ca_channel_voltage_dependent_gate__k_RI_AI = 1 / (2.0 * exp(-0.01 * var_chaste_interface__membrane__Vm) + 0.0018 * exp(-0.13513513513513511 * var_chaste_interface__membrane__Vm)); // per_millisecond + const double var_L_type_Ca_channel_voltage_dependent_gate__k_RP_AP = 1 / (1.5 * exp(-0.015384615384615385 * var_chaste_interface__membrane__Vm) + 0.27000000000000002 * exp(-0.16949152542372881 * var_chaste_interface__membrane__Vm)); // per_millisecond + const double var_L_type_Ca_channel_voltage_dependent_gate__k_RP_RI = 0.040000000000000001 / (1.0 + 0.25 * var_L_type_Ca_channel_voltage_dependent_gate__k_AP_RP * var_L_type_Ca_channel_voltage_dependent_gate__k_RI_AI / (var_L_type_Ca_channel_voltage_dependent_gate__k_AI_RI * var_L_type_Ca_channel_voltage_dependent_gate__k_RP_AP)); // per_millisecond + const double d_dt_chaste_interface_var_L_type_Ca_channel_voltage_dependent_gate__p_RP_CaL = (0.040000000000000001 - var_L_type_Ca_channel_voltage_dependent_gate__k_RP_RI) * var_L_type_Ca_channel_voltage_dependent_gate__p_RI_CaL + var_L_type_Ca_channel_voltage_dependent_gate__k_AP_RP * var_chaste_interface__L_type_Ca_channel_voltage_dependent_gate__p_AP_CaL - (var_L_type_Ca_channel_voltage_dependent_gate__k_RP_AP + var_L_type_Ca_channel_voltage_dependent_gate__k_RP_RI) * var_chaste_interface__L_type_Ca_channel_voltage_dependent_gate__p_RP_CaL; // 1 / millisecond + + return d_dt_chaste_interface_var_L_type_Ca_channel_voltage_dependent_gate__p_RP_CaL; + } + + double Dynamicmatsuoka_model_2003FromCellMLGRL1::EvaluatePartialDerivative10(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -85.95752434460744 + + const double var_x324 = exp(-0.16949152542372881 * var_chaste_interface__membrane__Vm); + const double var_x326 = 0.015384615384615385 * var_chaste_interface__membrane__Vm; + const double var_x327 = exp(-var_x326); + const double var_x336 = 1.5 * var_x327 + 0.27000000000000002 * var_x324; + const double var_x337 = 1 / var_x336; + + partialF = -0.040000000000000001 - var_x337; + } + else + { + const double y_save = rY[10]; + rY[10] += delta; + const double temp = EvaluateYDerivative10(var_chaste_interface__environment__time, rY); + partialF = (temp-mEvalF[10])/delta; + rY[10] = y_save; + } + return partialF; + } + double Dynamicmatsuoka_model_2003FromCellMLGRL1::EvaluateYDerivative11(double var_chaste_interface__environment__time, std::vector& rY) + { + + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -85.95752434460744 + double var_chaste_interface__L_type_Ca_channel_voltage_dependent_gate__p_AP_CaL = rY[9]; + // Units: dimensionless; Initial value: 1.5445004166497696e-06 + double var_chaste_interface__L_type_Ca_channel_voltage_dependent_gate__p_RP_CaL = rY[10]; + // Units: dimensionless; Initial value: 0.9968480629364956 + double var_chaste_interface__L_type_Ca_channel_voltage_dependent_gate__p_AI_CaL = rY[11]; + // Units: dimensionless; Initial value: 0.000877325391245903 + + + // Mathematics + const double var_L_type_Ca_channel_voltage_dependent_gate__p_RI_CaL = 1.0 - var_chaste_interface__L_type_Ca_channel_voltage_dependent_gate__p_AI_CaL - var_chaste_interface__L_type_Ca_channel_voltage_dependent_gate__p_AP_CaL - var_chaste_interface__L_type_Ca_channel_voltage_dependent_gate__p_RP_CaL; // dimensionless + const double var_L_type_Ca_channel_voltage_dependent_gate__k_AI_RI = 1 / (11.0 * exp(0.01 * var_chaste_interface__membrane__Vm) + 2200000.0 * exp(0.13513513513513511 * var_chaste_interface__membrane__Vm)); // per_millisecond + const double var_L_type_Ca_channel_voltage_dependent_gate__k_RI_AI = 1 / (2.0 * exp(-0.01 * var_chaste_interface__membrane__Vm) + 0.0018 * exp(-0.13513513513513511 * var_chaste_interface__membrane__Vm)); // per_millisecond + const double d_dt_chaste_interface_var_L_type_Ca_channel_voltage_dependent_gate__p_AI_CaL = 0.0040000000000000001 * var_chaste_interface__L_type_Ca_channel_voltage_dependent_gate__p_AP_CaL + var_L_type_Ca_channel_voltage_dependent_gate__k_RI_AI * var_L_type_Ca_channel_voltage_dependent_gate__p_RI_CaL - (0.001 + var_L_type_Ca_channel_voltage_dependent_gate__k_AI_RI) * var_chaste_interface__L_type_Ca_channel_voltage_dependent_gate__p_AI_CaL; // 1 / millisecond + + return d_dt_chaste_interface_var_L_type_Ca_channel_voltage_dependent_gate__p_AI_CaL; + } + + double Dynamicmatsuoka_model_2003FromCellMLGRL1::EvaluatePartialDerivative11(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -85.95752434460744 + + const double var_x318 = 0.01 * var_chaste_interface__membrane__Vm; + const double var_x319 = exp(var_x318); + const double var_x323 = exp(-var_x318); + const double var_x338 = 0.13513513513513511 * var_chaste_interface__membrane__Vm; + const double var_x339 = exp(var_x338); + const double var_x340 = 11.0 * var_x319 + 2200000.0 * var_x339; + const double var_x342 = exp(-var_x338); + const double var_x343 = 1 / (2.0 * var_x323 + 0.0018 * var_x342); + const double var_x354 = -var_x343; + + partialF = -0.001 + var_x354 - 1 / var_x340; + } + else + { + const double y_save = rY[11]; + rY[11] += delta; + const double temp = EvaluateYDerivative11(var_chaste_interface__environment__time, rY); + partialF = (temp-mEvalF[11])/delta; + rY[11] = y_save; + } + return partialF; + } + double Dynamicmatsuoka_model_2003FromCellMLGRL1::EvaluateYDerivative12(double var_chaste_interface__environment__time, std::vector& rY) + { + + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -85.95752434460744 + double var_chaste_interface__internal_ion_concentrations__Ca_Total = rY[3]; + // Units: millimolar; Initial value: 0.00040180173572968586 + double var_chaste_interface__L_type_Ca_channel_voltage_dependent_gate__p_AP_CaL = rY[9]; + // Units: dimensionless; Initial value: 1.5445004166497696e-06 + double var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_U = rY[12]; + // Units: dimensionless; Initial value: 0.17246483915629204 + double var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_UCa = rY[13]; + // Units: dimensionless; Initial value: 6.098246017787626e-05 + double var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_C = rY[14]; + // Units: dimensionless; Initial value: 0.4250747299372254 + + + // Mathematics + const double var_internal_ion_concentrations__Cai = -0.026190000000000001 + 0.5 * sqrt(pow((0.052380000000000003 - var_chaste_interface__internal_ion_concentrations__Ca_Total), 2) + 0.0095200000000000007 * var_chaste_interface__internal_ion_concentrations__Ca_Total) + 0.5 * var_chaste_interface__internal_ion_concentrations__Ca_Total; // millimolar + const double var_constant_field_equations__CF_Ca = ((var_chaste_interface__membrane__Vm == 0) ? (-1.8) : (0.074870384603595908 * (-1.8 * exp(-0.074870384603595908 * var_chaste_interface__membrane__Vm) + var_internal_ion_concentrations__Cai) * var_chaste_interface__membrane__Vm / (1.0 - exp(-0.074870384603595908 * var_chaste_interface__membrane__Vm)))); // millimolar + const double var_L_type_Ca_channel_Ca_dependent_gate__iCaL = 0.067599999999999993 * var_constant_field_equations__CF_Ca; // picoA + const double var_L_type_Ca_channel_Ca_dependent_gate__Cacm = -0.29999999999999999 * var_L_type_Ca_channel_Ca_dependent_gate__iCaL + var_internal_ion_concentrations__Cai; // millimolar + const double var_L_type_Ca_channel_Ca_dependent_gate__k_UUCa_Ca = 6.9539999999999997 * (1.0 - var_chaste_interface__L_type_Ca_channel_voltage_dependent_gate__p_AP_CaL) * var_internal_ion_concentrations__Cai + 6.9539999999999997 * var_L_type_Ca_channel_Ca_dependent_gate__Cacm * var_chaste_interface__L_type_Ca_channel_voltage_dependent_gate__p_AP_CaL; // per_millisecond + const double d_dt_chaste_interface_var_L_type_Ca_channel_Ca_dependent_gate__p_U = 0.14299999999999999 * var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_C + 2.0019999999999998 * var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_UCa - (0.34999999999999998 + var_L_type_Ca_channel_Ca_dependent_gate__k_UUCa_Ca) * var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_U; // 1 / millisecond + + return d_dt_chaste_interface_var_L_type_Ca_channel_Ca_dependent_gate__p_U; + } + + double Dynamicmatsuoka_model_2003FromCellMLGRL1::EvaluatePartialDerivative12(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -85.95752434460744 + double var_chaste_interface__internal_ion_concentrations__Ca_Total = rY[3]; + // Units: millimolar; Initial value: 0.00040180173572968586 + double var_chaste_interface__L_type_Ca_channel_voltage_dependent_gate__p_AP_CaL = rY[9]; + // Units: dimensionless; Initial value: 1.5445004166497696e-06 + + const double var_x19 = var_chaste_interface__membrane__Vm == 0; + const double var_x26 = 0.074870384603595908 * var_chaste_interface__membrane__Vm; + const double var_x27 = exp(-var_x26); + const double var_x28 = 1.0 - var_x27; + const double var_x29 = 1 / var_x28; + const double var_x30 = sqrt(pow((0.052380000000000003 - var_chaste_interface__internal_ion_concentrations__Ca_Total), 2) + 0.0095200000000000007 * var_chaste_interface__internal_ion_concentrations__Ca_Total); + const double var_x31 = -0.026190000000000001 + 0.5 * var_x30 + 0.5 * var_chaste_interface__internal_ion_concentrations__Ca_Total; + const double var_x32 = var_x31 - 1.8 * var_x27; + const double var_x33 = var_x29 * var_x32; + const double var_x213 = ((var_x19) ? (-1.8) : (var_x26 * var_x33)); + const double var_x351 = 1.0 - var_chaste_interface__L_type_Ca_channel_voltage_dependent_gate__p_AP_CaL; + const double var_x357 = 6.9539999999999997 * var_chaste_interface__L_type_Ca_channel_voltage_dependent_gate__p_AP_CaL; + const double var_x362 = 6.9539999999999997 * var_x31 * var_x351; + const double var_x363 = var_x357 * (var_x31 - 0.020279999999999996 * var_x213); + const double var_x364 = -var_x363; + + partialF = -0.34999999999999998 + var_x364 - var_x362; + } + else + { + const double y_save = rY[12]; + rY[12] += delta; + const double temp = EvaluateYDerivative12(var_chaste_interface__environment__time, rY); + partialF = (temp-mEvalF[12])/delta; + rY[12] = y_save; + } + return partialF; + } + double Dynamicmatsuoka_model_2003FromCellMLGRL1::EvaluateYDerivative13(double var_chaste_interface__environment__time, std::vector& rY) + { + + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -85.95752434460744 + double var_chaste_interface__internal_ion_concentrations__Ca_Total = rY[3]; + // Units: millimolar; Initial value: 0.00040180173572968586 + double var_chaste_interface__L_type_Ca_channel_voltage_dependent_gate__p_AP_CaL = rY[9]; + // Units: dimensionless; Initial value: 1.5445004166497696e-06 + double var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_U = rY[12]; + // Units: dimensionless; Initial value: 0.17246483915629204 + double var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_UCa = rY[13]; + // Units: dimensionless; Initial value: 6.098246017787626e-05 + double var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_C = rY[14]; + // Units: dimensionless; Initial value: 0.4250747299372254 + + + // Mathematics + const double var_L_type_Ca_channel_Ca_dependent_gate__p_CCa = 1.0 - var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_C - var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_U - var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_UCa; // dimensionless + const double var_internal_ion_concentrations__Cai = -0.026190000000000001 + 0.5 * sqrt(pow((0.052380000000000003 - var_chaste_interface__internal_ion_concentrations__Ca_Total), 2) + 0.0095200000000000007 * var_chaste_interface__internal_ion_concentrations__Ca_Total) + 0.5 * var_chaste_interface__internal_ion_concentrations__Ca_Total; // millimolar + const double var_constant_field_equations__CF_Ca = ((var_chaste_interface__membrane__Vm == 0) ? (-1.8) : (0.074870384603595908 * (-1.8 * exp(-0.074870384603595908 * var_chaste_interface__membrane__Vm) + var_internal_ion_concentrations__Cai) * var_chaste_interface__membrane__Vm / (1.0 - exp(-0.074870384603595908 * var_chaste_interface__membrane__Vm)))); // millimolar + const double var_L_type_Ca_channel_Ca_dependent_gate__iCaL = 0.067599999999999993 * var_constant_field_equations__CF_Ca; // picoA + const double var_L_type_Ca_channel_Ca_dependent_gate__Cacm = -0.29999999999999999 * var_L_type_Ca_channel_Ca_dependent_gate__iCaL + var_internal_ion_concentrations__Cai; // millimolar + const double var_L_type_Ca_channel_Ca_dependent_gate__k_UUCa_Ca = 6.9539999999999997 * (1.0 - var_chaste_interface__L_type_Ca_channel_voltage_dependent_gate__p_AP_CaL) * var_internal_ion_concentrations__Cai + 6.9539999999999997 * var_L_type_Ca_channel_Ca_dependent_gate__Cacm * var_chaste_interface__L_type_Ca_channel_voltage_dependent_gate__p_AP_CaL; // per_millisecond + const double d_dt_chaste_interface_var_L_type_Ca_channel_Ca_dependent_gate__p_UCa = 0.00029999999999999997 * var_L_type_Ca_channel_Ca_dependent_gate__p_CCa - 2.3519999999999999 * var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_UCa + var_L_type_Ca_channel_Ca_dependent_gate__k_UUCa_Ca * var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_U; // 1 / millisecond + + return d_dt_chaste_interface_var_L_type_Ca_channel_Ca_dependent_gate__p_UCa; + } + + double Dynamicmatsuoka_model_2003FromCellMLGRL1::EvaluatePartialDerivative13(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + + + partialF = -2.3523000000000001; + } + else + { + const double y_save = rY[13]; + rY[13] += delta; + const double temp = EvaluateYDerivative13(var_chaste_interface__environment__time, rY); + partialF = (temp-mEvalF[13])/delta; + rY[13] = y_save; + } + return partialF; + } + double Dynamicmatsuoka_model_2003FromCellMLGRL1::EvaluateYDerivative14(double var_chaste_interface__environment__time, std::vector& rY) + { + + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -85.95752434460744 + double var_chaste_interface__internal_ion_concentrations__Ca_Total = rY[3]; + // Units: millimolar; Initial value: 0.00040180173572968586 + double var_chaste_interface__L_type_Ca_channel_voltage_dependent_gate__p_AP_CaL = rY[9]; + // Units: dimensionless; Initial value: 1.5445004166497696e-06 + double var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_U = rY[12]; + // Units: dimensionless; Initial value: 0.17246483915629204 + double var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_UCa = rY[13]; + // Units: dimensionless; Initial value: 6.098246017787626e-05 + double var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_C = rY[14]; + // Units: dimensionless; Initial value: 0.4250747299372254 + + + // Mathematics + const double var_L_type_Ca_channel_Ca_dependent_gate__p_CCa = 1.0 - var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_C - var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_U - var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_UCa; // dimensionless + const double var_internal_ion_concentrations__Cai = -0.026190000000000001 + 0.5 * sqrt(pow((0.052380000000000003 - var_chaste_interface__internal_ion_concentrations__Ca_Total), 2) + 0.0095200000000000007 * var_chaste_interface__internal_ion_concentrations__Ca_Total) + 0.5 * var_chaste_interface__internal_ion_concentrations__Ca_Total; // millimolar + const double var_constant_field_equations__CF_Ca = ((var_chaste_interface__membrane__Vm == 0) ? (-1.8) : (0.074870384603595908 * (-1.8 * exp(-0.074870384603595908 * var_chaste_interface__membrane__Vm) + var_internal_ion_concentrations__Cai) * var_chaste_interface__membrane__Vm / (1.0 - exp(-0.074870384603595908 * var_chaste_interface__membrane__Vm)))); // millimolar + const double var_L_type_Ca_channel_Ca_dependent_gate__iCaL = 0.067599999999999993 * var_constant_field_equations__CF_Ca; // picoA + const double var_L_type_Ca_channel_Ca_dependent_gate__Cacm = -0.29999999999999999 * var_L_type_Ca_channel_Ca_dependent_gate__iCaL + var_internal_ion_concentrations__Cai; // millimolar + const double d_dt_chaste_interface_var_L_type_Ca_channel_Ca_dependent_gate__p_C = 0.34999999999999998 * var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_U + 0.0041999999999999997 * var_L_type_Ca_channel_Ca_dependent_gate__p_CCa - (0.14299999999999999 + 6.9539999999999997 * var_L_type_Ca_channel_Ca_dependent_gate__Cacm * var_chaste_interface__L_type_Ca_channel_voltage_dependent_gate__p_AP_CaL) * var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_C; // 1 / millisecond + + return d_dt_chaste_interface_var_L_type_Ca_channel_Ca_dependent_gate__p_C; + } + + double Dynamicmatsuoka_model_2003FromCellMLGRL1::EvaluatePartialDerivative14(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -85.95752434460744 + double var_chaste_interface__internal_ion_concentrations__Ca_Total = rY[3]; + // Units: millimolar; Initial value: 0.00040180173572968586 + double var_chaste_interface__L_type_Ca_channel_voltage_dependent_gate__p_AP_CaL = rY[9]; + // Units: dimensionless; Initial value: 1.5445004166497696e-06 + + const double var_x19 = var_chaste_interface__membrane__Vm == 0; + const double var_x26 = 0.074870384603595908 * var_chaste_interface__membrane__Vm; + const double var_x27 = exp(-var_x26); + const double var_x28 = 1.0 - var_x27; + const double var_x29 = 1 / var_x28; + const double var_x30 = sqrt(pow((0.052380000000000003 - var_chaste_interface__internal_ion_concentrations__Ca_Total), 2) + 0.0095200000000000007 * var_chaste_interface__internal_ion_concentrations__Ca_Total); + const double var_x31 = -0.026190000000000001 + 0.5 * var_x30 + 0.5 * var_chaste_interface__internal_ion_concentrations__Ca_Total; + const double var_x32 = var_x31 - 1.8 * var_x27; + const double var_x33 = var_x29 * var_x32; + const double var_x213 = ((var_x19) ? (-1.8) : (var_x26 * var_x33)); + const double var_x357 = 6.9539999999999997 * var_chaste_interface__L_type_Ca_channel_voltage_dependent_gate__p_AP_CaL; + const double var_x363 = var_x357 * (var_x31 - 0.020279999999999996 * var_x213); + const double var_x364 = -var_x363; + + partialF = -0.1472 + var_x364; + } + else + { + const double y_save = rY[14]; + rY[14] += delta; + const double temp = EvaluateYDerivative14(var_chaste_interface__environment__time, rY); + partialF = (temp-mEvalF[14])/delta; + rY[14] = y_save; + } + return partialF; + } + double Dynamicmatsuoka_model_2003FromCellMLGRL1::EvaluateYDerivative15(double var_chaste_interface__environment__time, std::vector& rY) + { + + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -85.95752434460744 + double var_chaste_interface__L_type_Ca_channel_ultra_slow_gate__y = rY[15]; + // Units: dimensionless; Initial value: 0.9985266538252986 + + + // Mathematics + const double d_dt_chaste_interface_var_L_type_Ca_channel_ultra_slow_gate__y = (1.0 - var_chaste_interface__L_type_Ca_channel_ultra_slow_gate__y) / (58.0 * exp(0.015384615384615385 * var_chaste_interface__membrane__Vm) + 250000.0 * exp(0.1111111111111111 * var_chaste_interface__membrane__Vm)) - var_chaste_interface__L_type_Ca_channel_ultra_slow_gate__y / (66.0 * exp(-0.015384615384615385 * var_chaste_interface__membrane__Vm) + 1800.0 * exp(-0.071428571428571425 * var_chaste_interface__membrane__Vm)); // 1 / millisecond + + return d_dt_chaste_interface_var_L_type_Ca_channel_ultra_slow_gate__y; + } + + double Dynamicmatsuoka_model_2003FromCellMLGRL1::EvaluatePartialDerivative15(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -85.95752434460744 + + const double var_x326 = 0.015384615384615385 * var_chaste_interface__membrane__Vm; + const double var_x327 = exp(-var_x326); + const double var_x331 = exp(var_x326); + const double var_x365 = exp(0.1111111111111111 * var_chaste_interface__membrane__Vm); + const double var_x366 = exp(-0.071428571428571425 * var_chaste_interface__membrane__Vm); + + partialF = -1 / (58.0 * var_x331 + 250000.0 * var_x365) - 1 / (66.0 * var_x327 + 1800.0 * var_x366); + } + else + { + const double y_save = rY[15]; + rY[15] += delta; + const double temp = EvaluateYDerivative15(var_chaste_interface__environment__time, rY); + partialF = (temp-mEvalF[15])/delta; + rY[15] = y_save; + } + return partialF; + } + double Dynamicmatsuoka_model_2003FromCellMLGRL1::EvaluateYDerivative16(double var_chaste_interface__environment__time, std::vector& rY) + { + + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -85.95752434460744 + double var_chaste_interface__T_type_Ca_channel_y1_gate__y1 = rY[16]; + // Units: dimensionless; Initial value: 1.6882718240109127e-05 + + + // Mathematics + const double d_dt_chaste_interface_var_T_type_Ca_channel_y1_gate__y1 = (1.0 - var_chaste_interface__T_type_Ca_channel_y1_gate__y1) / (0.019 * exp(-0.17857142857142858 * var_chaste_interface__membrane__Vm) + 0.81999999999999995 * exp(-0.0040000000000000001 * var_chaste_interface__membrane__Vm)) - var_chaste_interface__T_type_Ca_channel_y1_gate__y1 / (1.5 * exp(0.0001 * var_chaste_interface__membrane__Vm) + 40.0 * exp(0.15873015873015872 * var_chaste_interface__membrane__Vm)); // 1 / millisecond + + return d_dt_chaste_interface_var_T_type_Ca_channel_y1_gate__y1; + } + + double Dynamicmatsuoka_model_2003FromCellMLGRL1::EvaluatePartialDerivative16(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -85.95752434460744 + + const double var_x367 = exp(-0.17857142857142858 * var_chaste_interface__membrane__Vm); + const double var_x368 = exp(-0.0040000000000000001 * var_chaste_interface__membrane__Vm); + const double var_x369 = exp(0.0001 * var_chaste_interface__membrane__Vm); + const double var_x370 = exp(0.15873015873015872 * var_chaste_interface__membrane__Vm); + + partialF = -1 / (1.5 * var_x369 + 40.0 * var_x370) - 1 / (0.019 * var_x367 + 0.81999999999999995 * var_x368); + } + else + { + const double y_save = rY[16]; + rY[16] += delta; + const double temp = EvaluateYDerivative16(var_chaste_interface__environment__time, rY); + partialF = (temp-mEvalF[16])/delta; + rY[16] = y_save; + } + return partialF; + } + double Dynamicmatsuoka_model_2003FromCellMLGRL1::EvaluateYDerivative17(double var_chaste_interface__environment__time, std::vector& rY) + { + + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -85.95752434460744 + double var_chaste_interface__T_type_Ca_channel_y2_gate__y2 = rY[17]; + // Units: dimensionless; Initial value: 0.8585352091865849 + + + // Mathematics + const double d_dt_chaste_interface_var_T_type_Ca_channel_y2_gate__y2 = (1.0 - var_chaste_interface__T_type_Ca_channel_y2_gate__y2) / (30.0 * exp(0.00033333333333333332 * var_chaste_interface__membrane__Vm) + 62000.0 * exp(0.099009900990099015 * var_chaste_interface__membrane__Vm)) - var_chaste_interface__T_type_Ca_channel_y2_gate__y2 / (1.2 * exp(-0.040000000000000001 * var_chaste_interface__membrane__Vm) + 0.00059999999999999995 * exp(-0.14925373134328357 * var_chaste_interface__membrane__Vm)); // 1 / millisecond + + return d_dt_chaste_interface_var_T_type_Ca_channel_y2_gate__y2; + } + + double Dynamicmatsuoka_model_2003FromCellMLGRL1::EvaluatePartialDerivative17(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -85.95752434460744 + + const double var_x371 = exp(0.00033333333333333332 * var_chaste_interface__membrane__Vm); + const double var_x372 = exp(0.099009900990099015 * var_chaste_interface__membrane__Vm); + const double var_x373 = exp(-0.14925373134328357 * var_chaste_interface__membrane__Vm); + const double var_x374 = exp(-0.040000000000000001 * var_chaste_interface__membrane__Vm); + + partialF = -1 / (30.0 * var_x371 + 62000.0 * var_x372) - 1 / (1.2 * var_x374 + 0.00059999999999999995 * var_x373); + } + else + { + const double y_save = rY[17]; + rY[17] += delta; + const double temp = EvaluateYDerivative17(var_chaste_interface__environment__time, rY); + partialF = (temp-mEvalF[17])/delta; + rY[17] = y_save; + } + return partialF; + } + double Dynamicmatsuoka_model_2003FromCellMLGRL1::EvaluateYDerivative18(double var_chaste_interface__environment__time, std::vector& rY) + { + + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -85.95752434460744 + double var_chaste_interface__internal_ion_concentrations__Ki = rY[2]; + // Units: millimolar; Initial value: 143.1837333000449 + double var_chaste_interface__time_independent_potassium_current_y_gate__y = rY[18]; + // Units: dimensionless; Initial value: 0.6080573900752752 + + + // Mathematics + const double var_time_independent_potassium_current__E_K = 26.712831923985377 * log(5.4000000000000004 / var_chaste_interface__internal_ion_concentrations__Ki); // millivolt + const double var_time_independent_potassium_current__lambda = 3.0 * (1.0 + exp(-2.4319999999999999 + 0.064000000000000001 * var_chaste_interface__membrane__Vm - 0.064000000000000001 * var_time_independent_potassium_current__E_K)) * exp(0.47999999999999998 + 0.048000000000000001 * var_time_independent_potassium_current__E_K - 0.048000000000000001 * var_chaste_interface__membrane__Vm) / (1.0 + exp(-2.1000000000000001 + 0.029999999999999999 * var_chaste_interface__membrane__Vm - 0.029999999999999999 * var_time_independent_potassium_current__E_K)); // per_millisecond + const double var_time_independent_potassium_current__mu = 0.75 * exp(-0.35000000000000003 + 0.035000000000000003 * var_chaste_interface__membrane__Vm - 0.035000000000000003 * var_time_independent_potassium_current__E_K) / (1.0 + exp(-2.1000000000000001 + 0.014999999999999999 * var_chaste_interface__membrane__Vm - 0.014999999999999999 * var_time_independent_potassium_current__E_K)); // per_millisecond + const double var_time_independent_potassium_current__fO = var_time_independent_potassium_current__lambda / (var_time_independent_potassium_current__lambda + var_time_independent_potassium_current__mu); // dimensionless + const double d_dt_chaste_interface_var_time_independent_potassium_current_y_gate__y = (1.0 - var_chaste_interface__time_independent_potassium_current_y_gate__y) / (7.0 * exp(-0.32333333333333331 + 0.0033333333333333335 * var_chaste_interface__membrane__Vm - 0.0033333333333333335 * var_time_independent_potassium_current__E_K) + 8000.0 * exp(-11.411764705882353 + 0.11764705882352941 * var_chaste_interface__membrane__Vm - 0.11764705882352941 * var_time_independent_potassium_current__E_K)) - pow(var_time_independent_potassium_current__fO, 4) * var_chaste_interface__time_independent_potassium_current_y_gate__y / (0.00013999999999999999 * exp(10.659340659340661 + 0.10989010989010989 * var_time_independent_potassium_current__E_K - 0.10989010989010989 * var_chaste_interface__membrane__Vm) + 0.20000000000000001 * exp(0.19400000000000001 + 0.002 * var_time_independent_potassium_current__E_K - 0.002 * var_chaste_interface__membrane__Vm)); // 1 / millisecond + + return d_dt_chaste_interface_var_time_independent_potassium_current_y_gate__y; + } + + double Dynamicmatsuoka_model_2003FromCellMLGRL1::EvaluatePartialDerivative18(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -85.95752434460744 + double var_chaste_interface__internal_ion_concentrations__Ki = rY[2]; + // Units: millimolar; Initial value: 143.1837333000449 + + const double var_x55 = 1 / var_chaste_interface__internal_ion_concentrations__Ki; + const double var_x56 = log(5.4000000000000004 * var_x55); + const double var_x57 = exp(-2.1000000000000001 + 0.014999999999999999 * var_chaste_interface__membrane__Vm - 0.40069247885978065 * var_x56); + const double var_x58 = 1.0 + var_x57; + const double var_x59 = exp(-0.35000000000000003 + 0.035000000000000003 * var_chaste_interface__membrane__Vm - 0.93494911733948827 * var_x56); + const double var_x60 = var_x59 / var_x58; + const double var_x61 = exp(-2.4319999999999999 + 0.064000000000000001 * var_chaste_interface__membrane__Vm - 1.7096212431350641 * var_x56); + const double var_x62 = 1.0 + var_x61; + const double var_x63 = exp(-2.1000000000000001 + 0.029999999999999999 * var_chaste_interface__membrane__Vm - 0.80138495771956131 * var_x56); + const double var_x64 = 1.0 + var_x63; + const double var_x65 = exp(0.47999999999999998 + 1.282215932351298 * var_x56 - 0.048000000000000001 * var_chaste_interface__membrane__Vm); + const double var_x66 = var_x65 / var_x64; + const double var_x67 = var_x62 * var_x66; + const double var_x68 = var_x67 + 0.25 * var_x60; + const double var_x69 = pow(var_x68, (-4)); + const double var_x70 = pow(var_x62, 4); + const double var_x71 = pow(var_x64, (-4)); + const double var_x72 = pow(var_x65, 4); + const double var_x73 = var_x70 * var_x71 * var_x72; + const double var_x74 = var_x69 * var_x73; + const double var_x188 = 1.0 * var_x74; + const double var_x375 = 0.0033333333333333335 * var_chaste_interface__membrane__Vm; + const double var_x376 = exp(-0.32333333333333331 + var_x375 - 0.08904277307995126 * var_x56); + const double var_x377 = exp(-11.411764705882353 + 0.11764705882352941 * var_chaste_interface__membrane__Vm - 3.142686108704162 * var_x56); + const double var_x379 = exp(10.659340659340661 + 2.9354760356027887 * var_x56 - 0.10989010989010989 * var_chaste_interface__membrane__Vm); + const double var_x380 = 0.002 * var_chaste_interface__membrane__Vm; + const double var_x381 = exp(0.19400000000000001 - var_x380 + 0.053425663847970754 * var_x56); + const double var_x382 = 1 / (0.00013999999999999999 * var_x379 + 0.20000000000000001 * var_x381); + + partialF = -1 / (7.0 * var_x376 + 8000.0 * var_x377) - var_x188 * var_x382; + } + else + { + const double y_save = rY[18]; + rY[18] += delta; + const double temp = EvaluateYDerivative18(var_chaste_interface__environment__time, rY); + partialF = (temp-mEvalF[18])/delta; + rY[18] = y_save; + } + return partialF; + } + double Dynamicmatsuoka_model_2003FromCellMLGRL1::EvaluateYDerivative19(double var_chaste_interface__environment__time, std::vector& rY) + { + + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -85.95752434460744 + double var_chaste_interface__rapid_time_dependent_potassium_current_y1_gate__y1 = rY[19]; + // Units: dimensionless; Initial value: 0.0018339931180983765 + + + // Mathematics + const double d_dt_chaste_interface_var_rapid_time_dependent_potassium_current_y1_gate__y1 = (1.0 - var_chaste_interface__rapid_time_dependent_potassium_current_y1_gate__y1) / (5.0 * exp(-0.0033333333333333335 * var_chaste_interface__membrane__Vm) + 20.0 * exp(-0.086956521739130432 * var_chaste_interface__membrane__Vm)) - (1 / (160.0 * exp(0.035714285714285712 * var_chaste_interface__membrane__Vm) + 200.0 * exp(0.001 * var_chaste_interface__membrane__Vm)) + 0.00040000000000000002 / exp(0.050000000000000003 * var_chaste_interface__membrane__Vm)) * var_chaste_interface__rapid_time_dependent_potassium_current_y1_gate__y1; // 1 / millisecond + + return d_dt_chaste_interface_var_rapid_time_dependent_potassium_current_y1_gate__y1; + } + + double Dynamicmatsuoka_model_2003FromCellMLGRL1::EvaluatePartialDerivative19(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -85.95752434460744 + + const double var_x304 = exp(0.050000000000000003 * var_chaste_interface__membrane__Vm); + const double var_x375 = 0.0033333333333333335 * var_chaste_interface__membrane__Vm; + const double var_x385 = 1 / var_x304; + const double var_x386 = 0.035714285714285712 * var_chaste_interface__membrane__Vm; + const double var_x387 = exp(var_x386); + const double var_x388 = exp(0.001 * var_chaste_interface__membrane__Vm); + const double var_x390 = exp(-var_x375); + const double var_x391 = exp(-0.086956521739130432 * var_chaste_interface__membrane__Vm); + + partialF = -1 / (5.0 * var_x390 + 20.0 * var_x391) - 1 / (160.0 * var_x387 + 200.0 * var_x388) - 0.00040000000000000002 * var_x385; + } + else + { + const double y_save = rY[19]; + rY[19] += delta; + const double temp = EvaluateYDerivative19(var_chaste_interface__environment__time, rY); + partialF = (temp-mEvalF[19])/delta; + rY[19] = y_save; + } + return partialF; + } + double Dynamicmatsuoka_model_2003FromCellMLGRL1::EvaluateYDerivative20(double var_chaste_interface__environment__time, std::vector& rY) + { + + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -85.95752434460744 + double var_chaste_interface__rapid_time_dependent_potassium_current_y2_gate__y2 = rY[20]; + // Units: dimensionless; Initial value: 0.20443083454225305 + + + // Mathematics + const double d_dt_chaste_interface_var_rapid_time_dependent_potassium_current_y2_gate__y2 = (1.0 - var_chaste_interface__rapid_time_dependent_potassium_current_y2_gate__y2) / (20.0 * exp(-0.0033333333333333335 * var_chaste_interface__membrane__Vm) + 200.0 * exp(-0.076923076923076927 * var_chaste_interface__membrane__Vm)) - (1 / (1600.0 * exp(0.035714285714285712 * var_chaste_interface__membrane__Vm) + 2000.0 * exp(0.001 * var_chaste_interface__membrane__Vm)) + 0.0001 / exp(0.050000000000000003 * var_chaste_interface__membrane__Vm)) * var_chaste_interface__rapid_time_dependent_potassium_current_y2_gate__y2; // 1 / millisecond + + return d_dt_chaste_interface_var_rapid_time_dependent_potassium_current_y2_gate__y2; + } + + double Dynamicmatsuoka_model_2003FromCellMLGRL1::EvaluatePartialDerivative20(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -85.95752434460744 + + const double var_x12 = -0.076923076923076927 * var_chaste_interface__membrane__Vm; + const double var_x304 = exp(0.050000000000000003 * var_chaste_interface__membrane__Vm); + const double var_x375 = 0.0033333333333333335 * var_chaste_interface__membrane__Vm; + const double var_x385 = 1 / var_x304; + const double var_x386 = 0.035714285714285712 * var_chaste_interface__membrane__Vm; + const double var_x387 = exp(var_x386); + const double var_x388 = exp(0.001 * var_chaste_interface__membrane__Vm); + const double var_x390 = exp(-var_x375); + const double var_x392 = exp(var_x12); + + partialF = -1 / (20.0 * var_x390 + 200.0 * var_x392) - 1 / (1600.0 * var_x387 + 2000.0 * var_x388) - 0.0001 * var_x385; + } + else + { + const double y_save = rY[20]; + rY[20] += delta; + const double temp = EvaluateYDerivative20(var_chaste_interface__environment__time, rY); + partialF = (temp-mEvalF[20])/delta; + rY[20] = y_save; + } + return partialF; + } + double Dynamicmatsuoka_model_2003FromCellMLGRL1::EvaluateYDerivative21(double var_chaste_interface__environment__time, std::vector& rY) + { + + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -85.95752434460744 + double var_chaste_interface__rapid_time_dependent_potassium_current_y3_gate__y3 = rY[21]; + // Units: dimensionless; Initial value: 0.967887666264921 + + + // Mathematics + const double d_dt_chaste_interface_var_rapid_time_dependent_potassium_current_y3_gate__y3 = (1.0 - var_chaste_interface__rapid_time_dependent_potassium_current_y3_gate__y3) / (2.5 * exp(0.0033333333333333335 * var_chaste_interface__membrane__Vm) + 10.0 * exp(0.058823529411764705 * var_chaste_interface__membrane__Vm)) - var_chaste_interface__rapid_time_dependent_potassium_current_y3_gate__y3 / (2.0 * exp(-0.0066666666666666671 * var_chaste_interface__membrane__Vm) + 0.34999999999999998 * exp(-0.058823529411764705 * var_chaste_interface__membrane__Vm)); // 1 / millisecond + + return d_dt_chaste_interface_var_rapid_time_dependent_potassium_current_y3_gate__y3; + } + + double Dynamicmatsuoka_model_2003FromCellMLGRL1::EvaluatePartialDerivative21(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -85.95752434460744 + + const double var_x288 = 0.058823529411764705 * var_chaste_interface__membrane__Vm; + const double var_x289 = exp(var_x288); + const double var_x375 = 0.0033333333333333335 * var_chaste_interface__membrane__Vm; + const double var_x393 = exp(var_x375); + const double var_x394 = exp(-var_x288); + const double var_x395 = exp(-0.0066666666666666671 * var_chaste_interface__membrane__Vm); + + partialF = -1 / (2.0 * var_x395 + 0.34999999999999998 * var_x394) - 1 / (2.5 * var_x393 + 10.0 * var_x289); + } + else + { + const double y_save = rY[21]; + rY[21] += delta; + const double temp = EvaluateYDerivative21(var_chaste_interface__environment__time, rY); + partialF = (temp-mEvalF[21])/delta; + rY[21] = y_save; + } + return partialF; + } + double Dynamicmatsuoka_model_2003FromCellMLGRL1::EvaluateYDerivative22(double var_chaste_interface__environment__time, std::vector& rY) + { + + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -85.95752434460744 + double var_chaste_interface__slow_time_dependent_potassium_current_y1_gate__y1 = rY[22]; + // Units: dimensionless; Initial value: 0.09738789658609195 + + + // Mathematics + const double d_dt_chaste_interface_var_slow_time_dependent_potassium_current_y1_gate__y1 = (1.0 - var_chaste_interface__slow_time_dependent_potassium_current_y1_gate__y1) / (85.0 * exp(-0.095238095238095233 * var_chaste_interface__membrane__Vm) + 370.0 * exp(-0.016129032258064516 * var_chaste_interface__membrane__Vm)) - var_chaste_interface__slow_time_dependent_potassium_current_y1_gate__y1 / (260.0 * exp(0.01 * var_chaste_interface__membrane__Vm) + 1450.0 * exp(0.050000000000000003 * var_chaste_interface__membrane__Vm)); // 1 / millisecond + + return d_dt_chaste_interface_var_slow_time_dependent_potassium_current_y1_gate__y1; + } + + double Dynamicmatsuoka_model_2003FromCellMLGRL1::EvaluatePartialDerivative22(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -85.95752434460744 + + const double var_x304 = exp(0.050000000000000003 * var_chaste_interface__membrane__Vm); + const double var_x318 = 0.01 * var_chaste_interface__membrane__Vm; + const double var_x319 = exp(var_x318); + const double var_x396 = exp(-0.095238095238095233 * var_chaste_interface__membrane__Vm); + const double var_x397 = exp(-0.016129032258064516 * var_chaste_interface__membrane__Vm); + + partialF = -1 / (260.0 * var_x319 + 1450.0 * var_x304) - 1 / (85.0 * var_x396 + 370.0 * var_x397); + } + else + { + const double y_save = rY[22]; + rY[22] += delta; + const double temp = EvaluateYDerivative22(var_chaste_interface__environment__time, rY); + partialF = (temp-mEvalF[22])/delta; + rY[22] = y_save; + } + return partialF; + } + double Dynamicmatsuoka_model_2003FromCellMLGRL1::EvaluateYDerivative23(double var_chaste_interface__environment__time, std::vector& rY) + { + + double var_chaste_interface__internal_ion_concentrations__Ca_Total = rY[3]; + // Units: millimolar; Initial value: 0.00040180173572968586 + double var_chaste_interface__slow_time_dependent_potassium_current_y2_gate__y2 = rY[23]; + // Units: dimensionless; Initial value: 0.09745345578743213 + + + // Mathematics + const double var_internal_ion_concentrations__Cai = -0.026190000000000001 + 0.5 * sqrt(pow((0.052380000000000003 - var_chaste_interface__internal_ion_concentrations__Ca_Total), 2) + 0.0095200000000000007 * var_chaste_interface__internal_ion_concentrations__Ca_Total) + 0.5 * var_chaste_interface__internal_ion_concentrations__Ca_Total; // millimolar + const double d_dt_chaste_interface_var_slow_time_dependent_potassium_current_y2_gate__y2 = -0.004444 * var_chaste_interface__slow_time_dependent_potassium_current_y2_gate__y2 + 3.7000000000000002 * (1.0 - var_chaste_interface__slow_time_dependent_potassium_current_y2_gate__y2) * var_internal_ion_concentrations__Cai; // 1 / millisecond + + return d_dt_chaste_interface_var_slow_time_dependent_potassium_current_y2_gate__y2; + } + + double Dynamicmatsuoka_model_2003FromCellMLGRL1::EvaluatePartialDerivative23(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__internal_ion_concentrations__Ca_Total = rY[3]; + // Units: millimolar; Initial value: 0.00040180173572968586 + + const double var_x30 = sqrt(pow((0.052380000000000003 - var_chaste_interface__internal_ion_concentrations__Ca_Total), 2) + 0.0095200000000000007 * var_chaste_interface__internal_ion_concentrations__Ca_Total); + + partialF = 0.092459000000000013 - 1.8500000000000001 * var_x30 - 1.8500000000000001 * var_chaste_interface__internal_ion_concentrations__Ca_Total; + } + else + { + const double y_save = rY[23]; + rY[23] += delta; + const double temp = EvaluateYDerivative23(var_chaste_interface__environment__time, rY); + partialF = (temp-mEvalF[23])/delta; + rY[23] = y_save; + } + return partialF; + } + double Dynamicmatsuoka_model_2003FromCellMLGRL1::EvaluateYDerivative24(double var_chaste_interface__environment__time, std::vector& rY) + { + + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -85.95752434460744 + double var_chaste_interface__transient_outward_current_y1_gate__y1 = rY[24]; + // Units: dimensionless; Initial value: 0.0007956883250874798 + + + // Mathematics + const double d_dt_chaste_interface_var_transient_outward_current_y1_gate__y1 = (1.0 - var_chaste_interface__transient_outward_current_y1_gate__y1) / (11.0 * exp(-0.035714285714285712 * var_chaste_interface__membrane__Vm) + 0.20000000000000001 * exp(-0.0025000000000000001 * var_chaste_interface__membrane__Vm)) - var_chaste_interface__transient_outward_current_y1_gate__y1 / (4.4000000000000004 * exp(0.0625 * var_chaste_interface__membrane__Vm) + 0.20000000000000001 * exp(0.002 * var_chaste_interface__membrane__Vm)); // 1 / millisecond + + return d_dt_chaste_interface_var_transient_outward_current_y1_gate__y1; + } + + double Dynamicmatsuoka_model_2003FromCellMLGRL1::EvaluatePartialDerivative24(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -85.95752434460744 + + const double var_x284 = exp(-0.0025000000000000001 * var_chaste_interface__membrane__Vm); + const double var_x380 = 0.002 * var_chaste_interface__membrane__Vm; + const double var_x386 = 0.035714285714285712 * var_chaste_interface__membrane__Vm; + const double var_x398 = exp(-var_x386); + const double var_x399 = exp(var_x380); + const double var_x400 = exp(0.0625 * var_chaste_interface__membrane__Vm); + + partialF = -1 / (11.0 * var_x398 + 0.20000000000000001 * var_x284) - 1 / (4.4000000000000004 * var_x400 + 0.20000000000000001 * var_x399); + } + else + { + const double y_save = rY[24]; + rY[24] += delta; + const double temp = EvaluateYDerivative24(var_chaste_interface__environment__time, rY); + partialF = (temp-mEvalF[24])/delta; + rY[24] = y_save; + } + return partialF; + } + double Dynamicmatsuoka_model_2003FromCellMLGRL1::EvaluateYDerivative25(double var_chaste_interface__environment__time, std::vector& rY) + { + + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -85.95752434460744 + double var_chaste_interface__transient_outward_current_y2_gate__y2 = rY[25]; + // Units: dimensionless; Initial value: 0.9999125083105881 + + + // Mathematics + const double d_dt_chaste_interface_var_transient_outward_current_y2_gate__y2 = 0.0038 * (1.0 - var_chaste_interface__transient_outward_current_y2_gate__y2) * exp(-1.1946902654867255 - 0.088495575221238937 * var_chaste_interface__membrane__Vm) / (1.0 + 0.051334999999999999 * exp(-1.1946902654867255 - 0.088495575221238937 * var_chaste_interface__membrane__Vm)) - 0.0038 * var_chaste_interface__transient_outward_current_y2_gate__y2 * exp(1.1946902654867255 + 0.088495575221238937 * var_chaste_interface__membrane__Vm) / (1.0 + 0.067083000000000004 * exp(1.1946902654867255 + 0.088495575221238937 * var_chaste_interface__membrane__Vm)); // 1 / millisecond + + return d_dt_chaste_interface_var_transient_outward_current_y2_gate__y2; + } + + double Dynamicmatsuoka_model_2003FromCellMLGRL1::EvaluatePartialDerivative25(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -85.95752434460744 + + const double var_x401 = 0.088495575221238937 * var_chaste_interface__membrane__Vm; + const double var_x402 = exp(-1.1946902654867255 - var_x401); + const double var_x403 = 1.0 + 0.051334999999999999 * var_x402; + const double var_x405 = exp(1.1946902654867255 + var_x401); + const double var_x406 = 1.0 + 0.067083000000000004 * var_x405; + const double var_x407 = var_x405 / var_x406; + const double var_x408 = var_x402 / var_x403; + + partialF = -0.0038 * var_x407 - 0.0038 * var_x408; + } + else + { + const double y_save = rY[25]; + rY[25] += delta; + const double temp = EvaluateYDerivative25(var_chaste_interface__environment__time, rY); + partialF = (temp-mEvalF[25])/delta; + rY[25] = y_save; + } + return partialF; + } + double Dynamicmatsuoka_model_2003FromCellMLGRL1::EvaluateYDerivative26(double var_chaste_interface__environment__time, std::vector& rY) + { + + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -85.95752434460744 + double var_chaste_interface__internal_ion_concentrations__Nai = rY[1]; + // Units: millimolar; Initial value: 4.925761439682025 + double var_chaste_interface__internal_ion_concentrations__Ca_Total = rY[3]; + // Units: millimolar; Initial value: 0.00040180173572968586 + double var_chaste_interface__sodium_calcium_exchanger_y_gate__y = rY[26]; + // Units: dimensionless; Initial value: 0.9891789193465331 + + + // Mathematics + const double var_internal_ion_concentrations__Cai = -0.026190000000000001 + 0.5 * sqrt(pow((0.052380000000000003 - var_chaste_interface__internal_ion_concentrations__Ca_Total), 2) + 0.0095200000000000007 * var_chaste_interface__internal_ion_concentrations__Ca_Total) + 0.5 * var_chaste_interface__internal_ion_concentrations__Ca_Total; // millimolar + const double var_sodium_calcium_exchanger__k1 = exp(0.011979261536575346 * var_chaste_interface__membrane__Vm); // per_millisecond + const double var_sodium_calcium_exchanger__k2 = exp(-0.025455930765222609 * var_chaste_interface__membrane__Vm); // per_millisecond + const double var_sodium_calcium_exchanger__p_E1Na = 1 / (1.0 + 669.921875 * (1.0 + 724.63768115942037 * var_internal_ion_concentrations__Cai) / pow(var_chaste_interface__internal_ion_concentrations__Nai, 3)); // dimensionless + const double d_dt_chaste_interface_var_sodium_calcium_exchanger_y_gate__y = (1.0 - var_chaste_interface__sodium_calcium_exchanger_y_gate__y) * (0.20379327210477693 + 0.6399652192815608 * var_sodium_calcium_exchanger__k2) - (1.0 / (1.0 + 0.0013799999999999999 * (1.0 + 0.0014927113702623907 * pow(var_chaste_interface__internal_ion_concentrations__Nai, 3)) / var_internal_ion_concentrations__Cai) + var_sodium_calcium_exchanger__k1 * var_sodium_calcium_exchanger__p_E1Na) * var_chaste_interface__sodium_calcium_exchanger_y_gate__y; // 1 / millisecond + + return d_dt_chaste_interface_var_sodium_calcium_exchanger_y_gate__y; + } + + double Dynamicmatsuoka_model_2003FromCellMLGRL1::EvaluatePartialDerivative26(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -85.95752434460744 + double var_chaste_interface__internal_ion_concentrations__Nai = rY[1]; + // Units: millimolar; Initial value: 4.925761439682025 + double var_chaste_interface__internal_ion_concentrations__Ca_Total = rY[3]; + // Units: millimolar; Initial value: 0.00040180173572968586 + + const double var_x30 = sqrt(pow((0.052380000000000003 - var_chaste_interface__internal_ion_concentrations__Ca_Total), 2) + 0.0095200000000000007 * var_chaste_interface__internal_ion_concentrations__Ca_Total); + const double var_x31 = -0.026190000000000001 + 0.5 * var_x30 + 0.5 * var_chaste_interface__internal_ion_concentrations__Ca_Total; + const double var_x39 = exp(-0.025455930765222609 * var_chaste_interface__membrane__Vm); + const double var_x41 = pow(var_chaste_interface__internal_ion_concentrations__Nai, 3); + const double var_x42 = 1 / var_x41; + const double var_x43 = -17.978260869565219 + 362.31884057971018 * var_x30 + 362.31884057971018 * var_chaste_interface__internal_ion_concentrations__Ca_Total; + const double var_x44 = var_x42 * var_x43; + const double var_x45 = exp(0.011979261536575346 * var_chaste_interface__membrane__Vm); + const double var_x46 = var_x45 / (1.0 + 669.921875 * var_x44); + const double var_x262 = 1 / var_x31; + const double var_x409 = 1.0 + 0.0014927113702623907 * var_x41; + const double var_x410 = 1.0 + 0.0013799999999999999 * var_x262 * var_x409; + + partialF = -0.20379327210477693 - var_x46 - 1.0 / var_x410 - 0.6399652192815608 * var_x39; + } + else + { + const double y_save = rY[26]; + rY[26] += delta; + const double temp = EvaluateYDerivative26(var_chaste_interface__environment__time, rY); + partialF = (temp-mEvalF[26])/delta; + rY[26] = y_save; + } + return partialF; + } + double Dynamicmatsuoka_model_2003FromCellMLGRL1::EvaluateYDerivative27(double var_chaste_interface__environment__time, std::vector& rY) + { + + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -85.95752434460744 + double var_chaste_interface__internal_ion_concentrations__Nai = rY[1]; + // Units: millimolar; Initial value: 4.925761439682025 + double var_chaste_interface__internal_ion_concentrations__Ki = rY[2]; + // Units: millimolar; Initial value: 143.1837333000449 + double var_chaste_interface__ATP_production__ATPi = rY[4]; + // Units: millimolar; Initial value: 4.657102729020499 + double var_chaste_interface__sodium_potassium_pump_y_gate__y = rY[27]; + // Units: dimensionless; Initial value: 0.5910747147428818 + + + // Mathematics + const double var_sodium_potassium_pump__Nao_Eff = 140.0 * exp(-0.030696857687474322 * var_chaste_interface__membrane__Vm); // millimolar + const double var_sodium_potassium_pump__k1 = 0.37 / (1.0 + 0.094 / var_chaste_interface__ATP_production__ATPi); // per_millisecond + const double var_sodium_potassium_pump__p_E1Na = 1 / (1.0 + 4.4045579125871104 * pow(1 / var_chaste_interface__internal_ion_concentrations__Nai, 1.0600000000000001) * (1.0 + 0.020000293738509214 * pow(var_chaste_interface__internal_ion_concentrations__Ki, 1.1200000000000001))); // dimensionless + const double var_sodium_potassium_pump__p_E2Na = 1 / (1.0 + 2804.9496956618664 * pow(1 / var_sodium_potassium_pump__Nao_Eff, 1.0600000000000001)); // dimensionless + const double d_dt_chaste_interface_var_sodium_potassium_pump_y_gate__y = (1.0 - var_chaste_interface__sodium_potassium_pump_y_gate__y) * (0.040000000000000001 * var_sodium_potassium_pump__p_E2Na + 0.16500000000000001 / (1.0331690520373935 + 0.00036833781854815162 * pow(var_sodium_potassium_pump__Nao_Eff, 1.0600000000000001))) - (0.01 / (1.0 + 49.999265664512095 * pow(1 / var_chaste_interface__internal_ion_concentrations__Ki, 1.1200000000000001) * (1.0 + 0.22703754152993499 * pow(var_chaste_interface__internal_ion_concentrations__Nai, 1.0600000000000001))) + var_sodium_potassium_pump__k1 * var_sodium_potassium_pump__p_E1Na) * var_chaste_interface__sodium_potassium_pump_y_gate__y; // 1 / millisecond + + return d_dt_chaste_interface_var_sodium_potassium_pump_y_gate__y; + } + + double Dynamicmatsuoka_model_2003FromCellMLGRL1::EvaluatePartialDerivative27(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -85.95752434460744 + double var_chaste_interface__internal_ion_concentrations__Nai = rY[1]; + // Units: millimolar; Initial value: 4.925761439682025 + double var_chaste_interface__internal_ion_concentrations__Ki = rY[2]; + // Units: millimolar; Initial value: 143.1837333000449 + double var_chaste_interface__ATP_production__ATPi = rY[4]; + // Units: millimolar; Initial value: 4.657102729020499 + + const double var_x55 = 1 / var_chaste_interface__internal_ion_concentrations__Ki; + const double var_x140 = exp(-0.030696857687474322 * var_chaste_interface__membrane__Vm); + const double var_x141 = pow(1 / var_x140, 1.0600000000000001); + const double var_x160 = 1 / var_chaste_interface__internal_ion_concentrations__Nai; + const double var_x161 = pow(var_x160, 1.0600000000000001); + const double var_x162 = var_x161 * (1.0 + 0.020000293738509214 * pow(var_chaste_interface__internal_ion_concentrations__Ki, 1.1200000000000001)); + const double var_x163 = 1 / var_chaste_interface__ATP_production__ATPi; + const double var_x164 = 1.0 + 0.094 * var_x163; + const double var_x165 = 1 / var_x164; + const double var_x205 = 1 / (1.0 + 4.4045579125871104 * var_x162); + const double var_x234 = 1 / (1.0 + 14.894617648090152 * var_x141); + const double var_x235 = var_x165 * var_x205; + const double var_x412 = pow(var_x140, 1.0600000000000001); + const double var_x413 = pow(var_x55, 1.1200000000000001); + const double var_x414 = var_x413 * (1.0 + 0.22703754152993499 * pow(var_chaste_interface__internal_ion_concentrations__Nai, 1.0600000000000001)); + + partialF = -0.37 * var_x235 - 0.01 / (1.0 + 49.999265664512095 * var_x414) - 0.040000000000000001 * var_x234 - 0.16500000000000001 / (1.0331690520373935 + 0.069365261764196454 * var_x412); + } + else + { + const double y_save = rY[27]; + rY[27] += delta; + const double temp = EvaluateYDerivative27(var_chaste_interface__environment__time, rY); + partialF = (temp-mEvalF[27])/delta; + rY[27] = y_save; + } + return partialF; + } + double Dynamicmatsuoka_model_2003FromCellMLGRL1::EvaluateYDerivative28(double var_chaste_interface__environment__time, std::vector& rY) + { + + double var_chaste_interface__internal_ion_concentrations__Ca_Total = rY[3]; + // Units: millimolar; Initial value: 0.00040180173572968586 + double var_chaste_interface__ATP_production__ATPi = rY[4]; + // Units: millimolar; Initial value: 4.657102729020499 + double var_chaste_interface__SR_calcium_pump_y_gate__y = rY[28]; + // Units: dimensionless; Initial value: 0.46108441538480216 + double var_chaste_interface__Ca_concentrations_in_SR__Caup = rY[32]; + // Units: millimolar; Initial value: 2.611712901567567 + + + // Mathematics + const double var_SR_calcium_pump__k2 = 1 / (1.0 + 0.10000000000000001 / var_chaste_interface__ATP_production__ATPi); // per_millisecond + const double var_SR_calcium_pump__p_E1Ca = 1 / (1.0 + 0.080000000000000002 / var_chaste_interface__Ca_concentrations_in_SR__Caup); // dimensionless + const double var_internal_ion_concentrations__Cai = -0.026190000000000001 + 0.5 * sqrt(pow((0.052380000000000003 - var_chaste_interface__internal_ion_concentrations__Ca_Total), 2) + 0.0095200000000000007 * var_chaste_interface__internal_ion_concentrations__Ca_Total) + 0.5 * var_chaste_interface__internal_ion_concentrations__Ca_Total; // millimolar + const double var_SR_calcium_pump__p_E2Ca = 1 / (1.0 + 0.00080000000000000004 / var_internal_ion_concentrations__Cai); // dimensionless + const double d_dt_chaste_interface_var_SR_calcium_pump_y_gate__y = (1.0 - var_chaste_interface__SR_calcium_pump_y_gate__y) * (0.01 - 0.01 * var_SR_calcium_pump__p_E2Ca + var_SR_calcium_pump__k2 * var_SR_calcium_pump__p_E2Ca) - (1.0 - 0.98999999999999999 * var_SR_calcium_pump__p_E1Ca) * var_chaste_interface__SR_calcium_pump_y_gate__y; // 1 / millisecond + + return d_dt_chaste_interface_var_SR_calcium_pump_y_gate__y; + } + + double Dynamicmatsuoka_model_2003FromCellMLGRL1::EvaluatePartialDerivative28(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__internal_ion_concentrations__Ca_Total = rY[3]; + // Units: millimolar; Initial value: 0.00040180173572968586 + double var_chaste_interface__ATP_production__ATPi = rY[4]; + // Units: millimolar; Initial value: 4.657102729020499 + double var_chaste_interface__Ca_concentrations_in_SR__Caup = rY[32]; + // Units: millimolar; Initial value: 2.611712901567567 + + const double var_x30 = sqrt(pow((0.052380000000000003 - var_chaste_interface__internal_ion_concentrations__Ca_Total), 2) + 0.0095200000000000007 * var_chaste_interface__internal_ion_concentrations__Ca_Total); + const double var_x31 = -0.026190000000000001 + 0.5 * var_x30 + 0.5 * var_chaste_interface__internal_ion_concentrations__Ca_Total; + const double var_x163 = 1 / var_chaste_interface__ATP_production__ATPi; + const double var_x260 = 1.0 + 0.10000000000000001 * var_x163; + const double var_x261 = 1 / var_x260; + const double var_x262 = 1 / var_x31; + const double var_x263 = 1.0 + 0.00080000000000000004 * var_x262; + const double var_x270 = 1 / var_x263; + const double var_x275 = 1.0 + 0.080000000000000002 / var_chaste_interface__Ca_concentrations_in_SR__Caup; + const double var_x276 = 1 / var_x275; + const double var_x277 = var_x261 * var_x270; + + partialF = -1.01 - var_x277 + 0.01 * var_x270 + 0.98999999999999999 * var_x276; + } + else + { + const double y_save = rY[28]; + rY[28] += delta; + const double temp = EvaluateYDerivative28(var_chaste_interface__environment__time, rY); + partialF = (temp-mEvalF[28])/delta; + rY[28] = y_save; + } + return partialF; + } + double Dynamicmatsuoka_model_2003FromCellMLGRL1::EvaluateYDerivative29(double var_chaste_interface__environment__time, std::vector& rY) + { + + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -85.95752434460744 + double var_chaste_interface__internal_ion_concentrations__Ca_Total = rY[3]; + // Units: millimolar; Initial value: 0.00040180173572968586 + double var_chaste_interface__ATP_production__ATPi = rY[4]; + // Units: millimolar; Initial value: 4.657102729020499 + double var_chaste_interface__L_type_Ca_channel_voltage_dependent_gate__p_AP_CaL = rY[9]; + // Units: dimensionless; Initial value: 1.5445004166497696e-06 + double var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_U = rY[12]; + // Units: dimensionless; Initial value: 0.17246483915629204 + double var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_UCa = rY[13]; + // Units: dimensionless; Initial value: 6.098246017787626e-05 + double var_chaste_interface__L_type_Ca_channel_ultra_slow_gate__y = rY[15]; + // Units: dimensionless; Initial value: 0.9985266538252986 + double var_chaste_interface__RyR_channel__p_open_RyR = rY[29]; + // Units: dimensionless; Initial value: 0.00034314360001543243 + double var_chaste_interface__RyR_channel__p_close_RyR = rY[30]; + // Units: dimensionless; Initial value: 0.19135178123107768 + double var_chaste_interface__Ca_concentrations_in_SR__Ca_Total = rY[31]; + // Units: millimolar; Initial value: 9.455741736977666 + + + // Mathematics + const double var_Ca_concentrations_in_SR__Carel = -5.4000000000000004 + 0.5 * var_chaste_interface__Ca_concentrations_in_SR__Ca_Total + 5.4000000000000004 * sqrt(pow((1 - 0.092592592592592587 * var_chaste_interface__Ca_concentrations_in_SR__Ca_Total), 2) + 0.027434842249657067 * var_chaste_interface__Ca_concentrations_in_SR__Ca_Total); // millimolar + const double var_L_type_Ca_channel__p_open_CaL = (var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_U + var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_UCa) * var_chaste_interface__L_type_Ca_channel_ultra_slow_gate__y * var_chaste_interface__L_type_Ca_channel_voltage_dependent_gate__p_AP_CaL / (1.0 + 2.7439999999999993 / pow(var_chaste_interface__ATP_production__ATPi, 3)); // dimensionless + const double var_internal_ion_concentrations__Cai = -0.026190000000000001 + 0.5 * sqrt(pow((0.052380000000000003 - var_chaste_interface__internal_ion_concentrations__Ca_Total), 2) + 0.0095200000000000007 * var_chaste_interface__internal_ion_concentrations__Ca_Total) + 0.5 * var_chaste_interface__internal_ion_concentrations__Ca_Total; // millimolar + const double var_constant_field_equations__CF_Ca = ((var_chaste_interface__membrane__Vm == 0) ? (-1.8) : (0.074870384603595908 * (-1.8 * exp(-0.074870384603595908 * var_chaste_interface__membrane__Vm) + var_internal_ion_concentrations__Cai) * var_chaste_interface__membrane__Vm / (1.0 - exp(-0.074870384603595908 * var_chaste_interface__membrane__Vm)))); // millimolar + const double var_L_type_Ca_channel_Ca_dependent_gate__iCaL = 0.067599999999999993 * var_constant_field_equations__CF_Ca; // picoA + const double var_RyR_channel__k1 = 280000.0 * pow(var_internal_ion_concentrations__Cai, 2) - 150.0 * var_L_type_Ca_channel__p_open_CaL * var_L_type_Ca_channel_Ca_dependent_gate__iCaL; // per_millisecond + const double d_dt_chaste_interface_var_RyR_channel__p_open_RyR = var_RyR_channel__k1 * var_chaste_interface__RyR_channel__p_close_RyR - 0.080000000000000002 * var_chaste_interface__RyR_channel__p_open_RyR / (1.0 + 0.35999999999999999 / var_Ca_concentrations_in_SR__Carel); // 1 / millisecond + + return d_dt_chaste_interface_var_RyR_channel__p_open_RyR; + } + + double Dynamicmatsuoka_model_2003FromCellMLGRL1::EvaluatePartialDerivative29(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__Ca_concentrations_in_SR__Ca_Total = rY[31]; + // Units: millimolar; Initial value: 9.455741736977666 + + const double var_x278 = 0.092592592592592587 * var_chaste_interface__Ca_concentrations_in_SR__Ca_Total; + const double var_x279 = sqrt(pow((1 - var_x278), 2) + 0.027434842249657067 * var_chaste_interface__Ca_concentrations_in_SR__Ca_Total); + const double var_x426 = 1.0 + 0.35999999999999999 / (-5.4000000000000004 + 0.5 * var_chaste_interface__Ca_concentrations_in_SR__Ca_Total + 5.4000000000000004 * var_x279); + + partialF = -0.080000000000000002 / var_x426; + } + else + { + const double y_save = rY[29]; + rY[29] += delta; + const double temp = EvaluateYDerivative29(var_chaste_interface__environment__time, rY); + partialF = (temp-mEvalF[29])/delta; + rY[29] = y_save; + } + return partialF; + } + double Dynamicmatsuoka_model_2003FromCellMLGRL1::EvaluateYDerivative30(double var_chaste_interface__environment__time, std::vector& rY) + { + + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -85.95752434460744 + double var_chaste_interface__internal_ion_concentrations__Ca_Total = rY[3]; + // Units: millimolar; Initial value: 0.00040180173572968586 + double var_chaste_interface__ATP_production__ATPi = rY[4]; + // Units: millimolar; Initial value: 4.657102729020499 + double var_chaste_interface__L_type_Ca_channel_voltage_dependent_gate__p_AP_CaL = rY[9]; + // Units: dimensionless; Initial value: 1.5445004166497696e-06 + double var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_U = rY[12]; + // Units: dimensionless; Initial value: 0.17246483915629204 + double var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_UCa = rY[13]; + // Units: dimensionless; Initial value: 6.098246017787626e-05 + double var_chaste_interface__L_type_Ca_channel_ultra_slow_gate__y = rY[15]; + // Units: dimensionless; Initial value: 0.9985266538252986 + double var_chaste_interface__RyR_channel__p_open_RyR = rY[29]; + // Units: dimensionless; Initial value: 0.00034314360001543243 + double var_chaste_interface__RyR_channel__p_close_RyR = rY[30]; + // Units: dimensionless; Initial value: 0.19135178123107768 + double var_chaste_interface__Ca_concentrations_in_SR__Ca_Total = rY[31]; + // Units: millimolar; Initial value: 9.455741736977666 + + + // Mathematics + const double var_Ca_concentrations_in_SR__Carel = -5.4000000000000004 + 0.5 * var_chaste_interface__Ca_concentrations_in_SR__Ca_Total + 5.4000000000000004 * sqrt(pow((1 - 0.092592592592592587 * var_chaste_interface__Ca_concentrations_in_SR__Ca_Total), 2) + 0.027434842249657067 * var_chaste_interface__Ca_concentrations_in_SR__Ca_Total); // millimolar + const double var_L_type_Ca_channel__p_open_CaL = (var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_U + var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_UCa) * var_chaste_interface__L_type_Ca_channel_ultra_slow_gate__y * var_chaste_interface__L_type_Ca_channel_voltage_dependent_gate__p_AP_CaL / (1.0 + 2.7439999999999993 / pow(var_chaste_interface__ATP_production__ATPi, 3)); // dimensionless + const double var_internal_ion_concentrations__Cai = -0.026190000000000001 + 0.5 * sqrt(pow((0.052380000000000003 - var_chaste_interface__internal_ion_concentrations__Ca_Total), 2) + 0.0095200000000000007 * var_chaste_interface__internal_ion_concentrations__Ca_Total) + 0.5 * var_chaste_interface__internal_ion_concentrations__Ca_Total; // millimolar + const double var_constant_field_equations__CF_Ca = ((var_chaste_interface__membrane__Vm == 0) ? (-1.8) : (0.074870384603595908 * (-1.8 * exp(-0.074870384603595908 * var_chaste_interface__membrane__Vm) + var_internal_ion_concentrations__Cai) * var_chaste_interface__membrane__Vm / (1.0 - exp(-0.074870384603595908 * var_chaste_interface__membrane__Vm)))); // millimolar + const double var_L_type_Ca_channel_Ca_dependent_gate__iCaL = 0.067599999999999993 * var_constant_field_equations__CF_Ca; // picoA + const double var_RyR_channel__k1 = 280000.0 * pow(var_internal_ion_concentrations__Cai, 2) - 150.0 * var_L_type_Ca_channel__p_open_CaL * var_L_type_Ca_channel_Ca_dependent_gate__iCaL; // per_millisecond + const double d_dt_chaste_interface_var_RyR_channel__p_close_RyR = -(0.00084900000000000004 + var_RyR_channel__k1) * var_chaste_interface__RyR_channel__p_close_RyR + 0.000377 * pow(var_Ca_concentrations_in_SR__Carel, 2) * (1.0 - var_chaste_interface__RyR_channel__p_close_RyR - var_chaste_interface__RyR_channel__p_open_RyR); // 1 / millisecond + + return d_dt_chaste_interface_var_RyR_channel__p_close_RyR; + } + + double Dynamicmatsuoka_model_2003FromCellMLGRL1::EvaluatePartialDerivative30(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -85.95752434460744 + double var_chaste_interface__internal_ion_concentrations__Ca_Total = rY[3]; + // Units: millimolar; Initial value: 0.00040180173572968586 + double var_chaste_interface__ATP_production__ATPi = rY[4]; + // Units: millimolar; Initial value: 4.657102729020499 + double var_chaste_interface__L_type_Ca_channel_voltage_dependent_gate__p_AP_CaL = rY[9]; + // Units: dimensionless; Initial value: 1.5445004166497696e-06 + double var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_U = rY[12]; + // Units: dimensionless; Initial value: 0.17246483915629204 + double var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_UCa = rY[13]; + // Units: dimensionless; Initial value: 6.098246017787626e-05 + double var_chaste_interface__L_type_Ca_channel_ultra_slow_gate__y = rY[15]; + // Units: dimensionless; Initial value: 0.9985266538252986 + double var_chaste_interface__Ca_concentrations_in_SR__Ca_Total = rY[31]; + // Units: millimolar; Initial value: 9.455741736977666 + + const double var_x19 = var_chaste_interface__membrane__Vm == 0; + const double var_x26 = 0.074870384603595908 * var_chaste_interface__membrane__Vm; + const double var_x27 = exp(-var_x26); + const double var_x28 = 1.0 - var_x27; + const double var_x29 = 1 / var_x28; + const double var_x30 = sqrt(pow((0.052380000000000003 - var_chaste_interface__internal_ion_concentrations__Ca_Total), 2) + 0.0095200000000000007 * var_chaste_interface__internal_ion_concentrations__Ca_Total); + const double var_x31 = -0.026190000000000001 + 0.5 * var_x30 + 0.5 * var_chaste_interface__internal_ion_concentrations__Ca_Total; + const double var_x32 = var_x31 - 1.8 * var_x27; + const double var_x33 = var_x29 * var_x32; + const double var_x48 = -0.052380000000000003 + var_x30 + var_chaste_interface__internal_ion_concentrations__Ca_Total; + const double var_x145 = var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_U + var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_UCa; + const double var_x146 = pow(var_chaste_interface__ATP_production__ATPi, (-3)); + const double var_x147 = 1 / (1.0 + 2.7439999999999993 * var_x146); + const double var_x148 = var_x147 * var_chaste_interface__L_type_Ca_channel_ultra_slow_gate__y; + const double var_x149 = var_x145 * var_x148; + const double var_x151 = var_x149 * var_chaste_interface__L_type_Ca_channel_voltage_dependent_gate__p_AP_CaL; + const double var_x213 = ((var_x19) ? (-1.8) : (var_x26 * var_x33)); + const double var_x264 = pow(var_x48, 2); + const double var_x278 = 0.092592592592592587 * var_chaste_interface__Ca_concentrations_in_SR__Ca_Total; + const double var_x279 = sqrt(pow((1 - var_x278), 2) + 0.027434842249657067 * var_chaste_interface__Ca_concentrations_in_SR__Ca_Total); + const double var_x420 = 10.139999999999999 * var_x213; + const double var_x427 = 70000.0 * var_x264; + const double var_x428 = var_x151 * var_x420; + const double var_x429 = -1 + var_x278 + var_x279; + const double var_x430 = pow(var_x429, 2); + const double var_x431 = -0.010993320000000001 * var_x430; + + partialF = -0.00084900000000000004 + var_x428 + var_x431 - var_x427; + } + else + { + const double y_save = rY[30]; + rY[30] += delta; + const double temp = EvaluateYDerivative30(var_chaste_interface__environment__time, rY); + partialF = (temp-mEvalF[30])/delta; + rY[30] = y_save; + } + return partialF; + } + double Dynamicmatsuoka_model_2003FromCellMLGRL1::EvaluateYDerivative31(double var_chaste_interface__environment__time, std::vector& rY) + { + + double var_chaste_interface__internal_ion_concentrations__Ca_Total = rY[3]; + // Units: millimolar; Initial value: 0.00040180173572968586 + double var_chaste_interface__RyR_channel__p_open_RyR = rY[29]; + // Units: dimensionless; Initial value: 0.00034314360001543243 + double var_chaste_interface__Ca_concentrations_in_SR__Ca_Total = rY[31]; + // Units: millimolar; Initial value: 9.455741736977666 + double var_chaste_interface__Ca_concentrations_in_SR__Caup = rY[32]; + // Units: millimolar; Initial value: 2.611712901567567 + + + // Mathematics + const double var_Ca_concentrations_in_SR__Carel = -5.4000000000000004 + 0.5 * var_chaste_interface__Ca_concentrations_in_SR__Ca_Total + 5.4000000000000004 * sqrt(pow((1 - 0.092592592592592587 * var_chaste_interface__Ca_concentrations_in_SR__Ca_Total), 2) + 0.027434842249657067 * var_chaste_interface__Ca_concentrations_in_SR__Ca_Total); // millimolar + const double var_SR_T_current__i_SR_T = 386.0 * var_chaste_interface__Ca_concentrations_in_SR__Caup - 386.0 * var_Ca_concentrations_in_SR__Carel; // picoA + const double var_internal_ion_concentrations__Cai = -0.026190000000000001 + 0.5 * sqrt(pow((0.052380000000000003 - var_chaste_interface__internal_ion_concentrations__Ca_Total), 2) + 0.0095200000000000007 * var_chaste_interface__internal_ion_concentrations__Ca_Total) + 0.5 * var_chaste_interface__internal_ion_concentrations__Ca_Total; // millimolar + const double var_RyR_channel__i_RyR = 62000.0 * (-var_internal_ion_concentrations__Cai + var_Ca_concentrations_in_SR__Carel) * var_chaste_interface__RyR_channel__p_open_RyR; // picoA + const double d_dt_chaste_interface_var_Ca_concentrations_in_SR__Ca_Total = 3.2387883511406234e-5 * var_SR_T_current__i_SR_T - 3.2387883511406234e-5 * var_RyR_channel__i_RyR; // millimolar / millisecond + + return d_dt_chaste_interface_var_Ca_concentrations_in_SR__Ca_Total; + } + + double Dynamicmatsuoka_model_2003FromCellMLGRL1::EvaluatePartialDerivative31(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__RyR_channel__p_open_RyR = rY[29]; + // Units: dimensionless; Initial value: 0.00034314360001543243 + double var_chaste_interface__Ca_concentrations_in_SR__Ca_Total = rY[31]; + // Units: millimolar; Initial value: 9.455741736977666 + + const double var_x278 = 0.092592592592592587 * var_chaste_interface__Ca_concentrations_in_SR__Ca_Total; + const double var_x279 = sqrt(pow((1 - var_x278), 2) + 0.027434842249657067 * var_chaste_interface__Ca_concentrations_in_SR__Ca_Total); + const double var_x280 = (-0.078875171467764058 + 0.0085733882030178329 * var_chaste_interface__Ca_concentrations_in_SR__Ca_Total) / var_x279; + + partialF = -0.0062508615177014034 - 0.067509304391175154 * var_x280 + (-1.0040243888535934 - 10.843463399618807 * var_x280) * var_chaste_interface__RyR_channel__p_open_RyR; + } + else + { + const double y_save = rY[31]; + rY[31] += delta; + const double temp = EvaluateYDerivative31(var_chaste_interface__environment__time, rY); + partialF = (temp-mEvalF[31])/delta; + rY[31] = y_save; + } + return partialF; + } + double Dynamicmatsuoka_model_2003FromCellMLGRL1::EvaluateYDerivative32(double var_chaste_interface__environment__time, std::vector& rY) + { + + double var_chaste_interface__internal_ion_concentrations__Ca_Total = rY[3]; + // Units: millimolar; Initial value: 0.00040180173572968586 + double var_chaste_interface__ATP_production__ATPi = rY[4]; + // Units: millimolar; Initial value: 4.657102729020499 + double var_chaste_interface__SR_calcium_pump_y_gate__y = rY[28]; + // Units: dimensionless; Initial value: 0.46108441538480216 + double var_chaste_interface__Ca_concentrations_in_SR__Ca_Total = rY[31]; + // Units: millimolar; Initial value: 9.455741736977666 + double var_chaste_interface__Ca_concentrations_in_SR__Caup = rY[32]; + // Units: millimolar; Initial value: 2.611712901567567 + + + // Mathematics + const double var_Ca_concentrations_in_SR__Carel = -5.4000000000000004 + 0.5 * var_chaste_interface__Ca_concentrations_in_SR__Ca_Total + 5.4000000000000004 * sqrt(pow((1 - 0.092592592592592587 * var_chaste_interface__Ca_concentrations_in_SR__Ca_Total), 2) + 0.027434842249657067 * var_chaste_interface__Ca_concentrations_in_SR__Ca_Total); // millimolar + const double var_SR_T_current__i_SR_T = 386.0 * var_chaste_interface__Ca_concentrations_in_SR__Caup - 386.0 * var_Ca_concentrations_in_SR__Carel; // picoA + const double var_SR_calcium_pump__k2 = 1 / (1.0 + 0.10000000000000001 / var_chaste_interface__ATP_production__ATPi); // per_millisecond + const double var_SR_calcium_pump__p_E1Ca = 1 / (1.0 + 0.080000000000000002 / var_chaste_interface__Ca_concentrations_in_SR__Caup); // dimensionless + const double var_internal_ion_concentrations__Cai = -0.026190000000000001 + 0.5 * sqrt(pow((0.052380000000000003 - var_chaste_interface__internal_ion_concentrations__Ca_Total), 2) + 0.0095200000000000007 * var_chaste_interface__internal_ion_concentrations__Ca_Total) + 0.5 * var_chaste_interface__internal_ion_concentrations__Ca_Total; // millimolar + const double var_SR_L_current__i_SR_L = 459.0 * var_chaste_interface__Ca_concentrations_in_SR__Caup - 459.0 * var_internal_ion_concentrations__Cai; // picoA + const double var_SR_calcium_pump__p_E2Ca = 1 / (1.0 + 0.00080000000000000004 / var_internal_ion_concentrations__Cai); // dimensionless + const double var_SR_calcium_pump__i_SR_U = 1625.0 * var_SR_calcium_pump__p_E1Ca * var_chaste_interface__SR_calcium_pump_y_gate__y - 162500.0 * (1.0 - var_chaste_interface__SR_calcium_pump_y_gate__y) * var_SR_calcium_pump__k2 * var_SR_calcium_pump__p_E2Ca; // picoA + const double d_dt_chaste_interface_var_Ca_concentrations_in_SR__Caup = -1.2955153404562494e-5 * var_SR_L_current__i_SR_L - 1.2955153404562494e-5 * var_SR_T_current__i_SR_T - 1.2955153404562494e-5 * var_SR_calcium_pump__i_SR_U; // millimolar / millisecond + + return d_dt_chaste_interface_var_Ca_concentrations_in_SR__Caup; + } + + double Dynamicmatsuoka_model_2003FromCellMLGRL1::EvaluatePartialDerivative32(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__SR_calcium_pump_y_gate__y = rY[28]; + // Units: dimensionless; Initial value: 0.46108441538480216 + double var_chaste_interface__Ca_concentrations_in_SR__Caup = rY[32]; + // Units: millimolar; Initial value: 2.611712901567567 + + const double var_x275 = 1.0 + 0.080000000000000002 / var_chaste_interface__Ca_concentrations_in_SR__Caup; + const double var_x281 = var_chaste_interface__SR_calcium_pump_y_gate__y / (pow(var_x275, 2) * pow(var_chaste_interface__Ca_concentrations_in_SR__Caup, 2)); + + partialF = -0.010947104626855308 - 0.0016841699425931243 * var_x281; + } + else + { + const double y_save = rY[32]; + rY[32] += delta; + const double temp = EvaluateYDerivative32(var_chaste_interface__environment__time, rY); + partialF = (temp-mEvalF[32])/delta; + rY[32] = y_save; + } + return partialF; + } + double Dynamicmatsuoka_model_2003FromCellMLGRL1::EvaluateYDerivative33(double var_chaste_interface__environment__time, std::vector& rY) + { + + double var_chaste_interface__internal_ion_concentrations__Ca_Total = rY[3]; + // Units: millimolar; Initial value: 0.00040180173572968586 + double var_chaste_interface__NL_model__pCa = rY[33]; + // Units: dimensionless; Initial value: 0.02490898775497523 + double var_chaste_interface__NL_model__pCaCB = rY[34]; + // Units: dimensionless; Initial value: 0.001990153835322864 + double var_chaste_interface__NL_model__pCB = rY[35]; + // Units: dimensionless; Initial value: 0.00042941813853474524 + + + // Mathematics + const double var_NL_model__Q_a = -0.0038999999999999998 * var_chaste_interface__NL_model__pCaCB + 0.0038999999999999998 * var_chaste_interface__NL_model__pCa * exp(-0.86212130841993795); // per_millisecond + const double var_internal_ion_concentrations__Cai = -0.026190000000000001 + 0.5 * sqrt(pow((0.052380000000000003 - var_chaste_interface__internal_ion_concentrations__Ca_Total), 2) + 0.0095200000000000007 * var_chaste_interface__internal_ion_concentrations__Ca_Total) + 0.5 * var_chaste_interface__internal_ion_concentrations__Ca_Total; // millimolar + const double var_NL_model__Q_b = -0.029999999999999999 * var_chaste_interface__NL_model__pCa + 39.0 * (1.0 - var_chaste_interface__NL_model__pCB - var_chaste_interface__NL_model__pCa - var_chaste_interface__NL_model__pCaCB) * var_internal_ion_concentrations__Cai; // per_millisecond + const double d_dt_chaste_interface_var_NL_model__pCa = -var_NL_model__Q_a + var_NL_model__Q_b; // 1 / millisecond + + return d_dt_chaste_interface_var_NL_model__pCa; + } + + double Dynamicmatsuoka_model_2003FromCellMLGRL1::EvaluatePartialDerivative33(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__internal_ion_concentrations__Ca_Total = rY[3]; + // Units: millimolar; Initial value: 0.00040180173572968586 + + const double var_x30 = sqrt(pow((0.052380000000000003 - var_chaste_interface__internal_ion_concentrations__Ca_Total), 2) + 0.0095200000000000007 * var_chaste_interface__internal_ion_concentrations__Ca_Total); + const double var_x432 = 0.0038999999999999998 * exp(-0.86212130841993795); + const double var_x433 = -19.5 * var_x30 - 19.5 * var_chaste_interface__internal_ion_concentrations__Ca_Total; + + partialF = 0.99141000000000001 + var_x433 - var_x432; + } + else + { + const double y_save = rY[33]; + rY[33] += delta; + const double temp = EvaluateYDerivative33(var_chaste_interface__environment__time, rY); + partialF = (temp-mEvalF[33])/delta; + rY[33] = y_save; + } + return partialF; + } + double Dynamicmatsuoka_model_2003FromCellMLGRL1::EvaluateYDerivative34(double var_chaste_interface__environment__time, std::vector& rY) + { + + double var_chaste_interface__internal_ion_concentrations__Ca_Total = rY[3]; + // Units: millimolar; Initial value: 0.00040180173572968586 + double var_chaste_interface__NL_model__pCa = rY[33]; + // Units: dimensionless; Initial value: 0.02490898775497523 + double var_chaste_interface__NL_model__pCaCB = rY[34]; + // Units: dimensionless; Initial value: 0.001990153835322864 + double var_chaste_interface__NL_model__pCB = rY[35]; + // Units: dimensionless; Initial value: 0.00042941813853474524 + double var_chaste_interface__NL_model__X = rY[36]; + // Units: micrometre; Initial value: 0.9573749975411884 + + + // Mathematics + const double d_dt_chaste_interface_var_NL_model__X = 1.1488559970494261 - 1.2 * var_chaste_interface__NL_model__X; // micrometre / millisecond + const double var_NL_model__Q_a = -0.0038999999999999998 * var_chaste_interface__NL_model__pCaCB + 0.0038999999999999998 * var_chaste_interface__NL_model__pCa * exp(-0.86212130841993795); // per_millisecond + const double var_NL_model__Q_d2 = 0.027 * pow(d_dt_chaste_interface_var_NL_model__X, 2) * var_chaste_interface__NL_model__pCaCB; // per_millisecond + const double var_internal_ion_concentrations__Cai = -0.026190000000000001 + 0.5 * sqrt(pow((0.052380000000000003 - var_chaste_interface__internal_ion_concentrations__Ca_Total), 2) + 0.0095200000000000007 * var_chaste_interface__internal_ion_concentrations__Ca_Total) + 0.5 * var_chaste_interface__internal_ion_concentrations__Ca_Total; // millimolar + const double var_NL_model__Q_r = 0.029999999999999999 * var_chaste_interface__NL_model__pCaCB - 1560.0 * var_chaste_interface__NL_model__pCB * var_internal_ion_concentrations__Cai; // per_millisecond + const double d_dt_chaste_interface_var_NL_model__pCaCB = -var_NL_model__Q_d2 - var_NL_model__Q_r + var_NL_model__Q_a; // 1 / millisecond + + return d_dt_chaste_interface_var_NL_model__pCaCB; + } + + double Dynamicmatsuoka_model_2003FromCellMLGRL1::EvaluatePartialDerivative34(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__NL_model__X = rY[36]; + // Units: micrometre; Initial value: 0.9573749975411884 + + const double var_x283 = pow((0.95737999754118841 - var_chaste_interface__NL_model__X), 2); + const double var_x435 = -0.038879999999999998 * var_x283; + + partialF = -0.0339 + var_x435; + } + else + { + const double y_save = rY[34]; + rY[34] += delta; + const double temp = EvaluateYDerivative34(var_chaste_interface__environment__time, rY); + partialF = (temp-mEvalF[34])/delta; + rY[34] = y_save; + } + return partialF; + } + double Dynamicmatsuoka_model_2003FromCellMLGRL1::EvaluateYDerivative35(double var_chaste_interface__environment__time, std::vector& rY) + { + + double var_chaste_interface__internal_ion_concentrations__Ca_Total = rY[3]; + // Units: millimolar; Initial value: 0.00040180173572968586 + double var_chaste_interface__NL_model__pCaCB = rY[34]; + // Units: dimensionless; Initial value: 0.001990153835322864 + double var_chaste_interface__NL_model__pCB = rY[35]; + // Units: dimensionless; Initial value: 0.00042941813853474524 + double var_chaste_interface__NL_model__X = rY[36]; + // Units: micrometre; Initial value: 0.9573749975411884 + + + // Mathematics + const double d_dt_chaste_interface_var_NL_model__X = 1.1488559970494261 - 1.2 * var_chaste_interface__NL_model__X; // micrometre / millisecond + const double var_internal_ion_concentrations__Cai = -0.026190000000000001 + 0.5 * sqrt(pow((0.052380000000000003 - var_chaste_interface__internal_ion_concentrations__Ca_Total), 2) + 0.0095200000000000007 * var_chaste_interface__internal_ion_concentrations__Ca_Total) + 0.5 * var_chaste_interface__internal_ion_concentrations__Ca_Total; // millimolar + const double var_NL_model__Q_r = 0.029999999999999999 * var_chaste_interface__NL_model__pCaCB - 1560.0 * var_chaste_interface__NL_model__pCB * var_internal_ion_concentrations__Cai; // per_millisecond + const double d_dt_chaste_interface_var_NL_model__pCB = -0.12 * var_chaste_interface__NL_model__pCB - 0.027 * pow(d_dt_chaste_interface_var_NL_model__X, 2) * var_chaste_interface__NL_model__pCB + var_NL_model__Q_r; // 1 / millisecond + + return d_dt_chaste_interface_var_NL_model__pCB; + } + + double Dynamicmatsuoka_model_2003FromCellMLGRL1::EvaluatePartialDerivative35(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__internal_ion_concentrations__Ca_Total = rY[3]; + // Units: millimolar; Initial value: 0.00040180173572968586 + double var_chaste_interface__NL_model__X = rY[36]; + // Units: micrometre; Initial value: 0.9573749975411884 + + const double var_x30 = sqrt(pow((0.052380000000000003 - var_chaste_interface__internal_ion_concentrations__Ca_Total), 2) + 0.0095200000000000007 * var_chaste_interface__internal_ion_concentrations__Ca_Total); + const double var_x283 = pow((0.95737999754118841 - var_chaste_interface__NL_model__X), 2); + const double var_x435 = -0.038879999999999998 * var_x283; + const double var_x436 = 780.0 * var_x30; + const double var_x437 = 780.0 * var_chaste_interface__internal_ion_concentrations__Ca_Total; + + partialF = 40.736400000000003 + var_x435 - var_x436 - var_x437; + } + else + { + const double y_save = rY[35]; + rY[35] += delta; + const double temp = EvaluateYDerivative35(var_chaste_interface__environment__time, rY); + partialF = (temp-mEvalF[35])/delta; + rY[35] = y_save; + } + return partialF; + } + double Dynamicmatsuoka_model_2003FromCellMLGRL1::EvaluateYDerivative36(double var_chaste_interface__environment__time, std::vector& rY) + { + + double var_chaste_interface__NL_model__X = rY[36]; + // Units: micrometre; Initial value: 0.9573749975411884 + + + // Mathematics + const double d_dt_chaste_interface_var_NL_model__X = 1.1488559970494261 - 1.2 * var_chaste_interface__NL_model__X; // micrometre / millisecond + + return d_dt_chaste_interface_var_NL_model__X; + } + + double Dynamicmatsuoka_model_2003FromCellMLGRL1::EvaluatePartialDerivative36(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + + + partialF = -1.2; + } + else + { + const double y_save = rY[36]; + rY[36] += delta; + const double temp = EvaluateYDerivative36(var_chaste_interface__environment__time, rY); + partialF = (temp-mEvalF[36])/delta; + rY[36] = y_save; + } + return partialF; + } + + std::vector Dynamicmatsuoka_model_2003FromCellMLGRL1::ComputeDerivedQuantities(double var_chaste_interface__environment__time, const std::vector & rY) + { + // Inputs: + // Time units: millisecond + double var_chaste_interface__internal_ion_concentrations__Ca_Total = rY[3]; + // Units: millimolar; Initial value: 0.00040180173572968586 + + + // Mathematics + const double var_internal_ion_concentrations__CMDN_max = 0.050000000000000003; // millimolar + const double var_internal_ion_concentrations__K_mCMDN = 0.0023800000000000002; // millimolar + const double var_internal_ion_concentrations__b1 = -var_chaste_interface__internal_ion_concentrations__Ca_Total + var_internal_ion_concentrations__CMDN_max + var_internal_ion_concentrations__K_mCMDN; // millimolar + const double var_internal_ion_concentrations__c1 = var_chaste_interface__internal_ion_concentrations__Ca_Total * var_internal_ion_concentrations__K_mCMDN; // millimolar2 + const double var_internal_ion_concentrations__Cai = sqrt(0.25 * pow(var_internal_ion_concentrations__b1, 2) + var_internal_ion_concentrations__c1) - 0.5 * var_internal_ion_concentrations__b1; // millimolar + const double var_membrane__Cm_converted = 9.9999999999999995e-7 * mParameters[0]; // uF + const double var_membrane__i_ext_converted = GetIntracellularAreaStimulus(var_chaste_interface__environment__time); // uA_per_cm2 + + std::vector dqs(4); + dqs[0] = var_internal_ion_concentrations__Cai; + dqs[1] = var_chaste_interface__environment__time; + dqs[2] = var_membrane__Cm_converted; + dqs[3] = var_membrane__i_ext_converted; + return dqs; + } + +template<> +void OdeSystemInformation::Initialise(void) +{ + this->mSystemName = "matsuoka_model_2003"; + this->mFreeVariableName = "environment__time"; + this->mFreeVariableUnits = "millisecond"; + + // rY[0]: + this->mVariableNames.push_back("membrane_voltage"); + this->mVariableUnits.push_back("millivolt"); + this->mInitialConditions.push_back(-85.95752434460744); + + // rY[1]: + this->mVariableNames.push_back("internal_ion_concentrations__Nai"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(4.925761439682025); + + // rY[2]: + this->mVariableNames.push_back("internal_ion_concentrations__Ki"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(143.1837333000449); + + // rY[3]: + this->mVariableNames.push_back("internal_ion_concentrations__Ca_Total"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(0.00040180173572968586); + + // rY[4]: + this->mVariableNames.push_back("ATP_production__ATPi"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(4.657102729020499); + + // rY[5]: + this->mVariableNames.push_back("sodium_current_voltage_dependent_gate__p_AP_Na"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(1.779648367445368e-05); + + // rY[6]: + this->mVariableNames.push_back("sodium_current_voltage_dependent_gate__p_RP_Na"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.3556412697995689); + + // rY[7]: + this->mVariableNames.push_back("sodium_current_voltage_dependent_gate__p_AI_Na"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.40285968661346977); + + // rY[8]: + this->mVariableNames.push_back("sodium_current_ultra_slow_gate__y"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.5861887862983165); + + // rY[9]: + this->mVariableNames.push_back("L_type_Ca_channel_voltage_dependent_gate__p_AP_CaL"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(1.5445004166497696e-06); + + // rY[10]: + this->mVariableNames.push_back("L_type_Ca_channel_voltage_dependent_gate__p_RP_CaL"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.9968480629364956); + + // rY[11]: + this->mVariableNames.push_back("L_type_Ca_channel_voltage_dependent_gate__p_AI_CaL"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.000877325391245903); + + // rY[12]: + this->mVariableNames.push_back("L_type_Ca_channel_Ca_dependent_gate__p_U"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.17246483915629204); + + // rY[13]: + this->mVariableNames.push_back("L_type_Ca_channel_Ca_dependent_gate__p_UCa"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(6.098246017787626e-05); + + // rY[14]: + this->mVariableNames.push_back("L_type_Ca_channel_Ca_dependent_gate__p_C"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.4250747299372254); + + // rY[15]: + this->mVariableNames.push_back("L_type_Ca_channel_ultra_slow_gate__y"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.9985266538252986); + + // rY[16]: + this->mVariableNames.push_back("T_type_Ca_channel_y1_gate__y1"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(1.6882718240109127e-05); + + // rY[17]: + this->mVariableNames.push_back("T_type_Ca_channel_y2_gate__y2"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.8585352091865849); + + // rY[18]: + this->mVariableNames.push_back("time_independent_potassium_current_y_gate__y"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.6080573900752752); + + // rY[19]: + this->mVariableNames.push_back("rapid_time_dependent_potassium_current_y1_gate__y1"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.0018339931180983765); + + // rY[20]: + this->mVariableNames.push_back("rapid_time_dependent_potassium_current_y2_gate__y2"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.20443083454225305); + + // rY[21]: + this->mVariableNames.push_back("rapid_time_dependent_potassium_current_y3_gate__y3"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.967887666264921); + + // rY[22]: + this->mVariableNames.push_back("slow_time_dependent_potassium_current_y1_gate__y1"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.09738789658609195); + + // rY[23]: + this->mVariableNames.push_back("slow_time_dependent_potassium_current_y2_gate__y2"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.09745345578743213); + + // rY[24]: + this->mVariableNames.push_back("transient_outward_current_y1_gate__y1"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.0007956883250874798); + + // rY[25]: + this->mVariableNames.push_back("transient_outward_current_y2_gate__y2"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.9999125083105881); + + // rY[26]: + this->mVariableNames.push_back("sodium_calcium_exchanger_y_gate__y"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.9891789193465331); + + // rY[27]: + this->mVariableNames.push_back("sodium_potassium_pump_y_gate__y"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.5910747147428818); + + // rY[28]: + this->mVariableNames.push_back("SR_calcium_pump_y_gate__y"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.46108441538480216); + + // rY[29]: + this->mVariableNames.push_back("RyR_channel__p_open_RyR"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.00034314360001543243); + + // rY[30]: + this->mVariableNames.push_back("RyR_channel__p_close_RyR"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.19135178123107768); + + // rY[31]: + this->mVariableNames.push_back("Ca_concentrations_in_SR__Ca_Total"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(9.455741736977666); + + // rY[32]: + this->mVariableNames.push_back("Ca_concentrations_in_SR__Caup"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(2.611712901567567); + + // rY[33]: + this->mVariableNames.push_back("NL_model__pCa"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.02490898775497523); + + // rY[34]: + this->mVariableNames.push_back("NL_model__pCaCB"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.001990153835322864); + + // rY[35]: + this->mVariableNames.push_back("NL_model__pCB"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.00042941813853474524); + + // rY[36]: + this->mVariableNames.push_back("NL_model__X"); + this->mVariableUnits.push_back("micrometre"); + this->mInitialConditions.push_back(0.9573749975411884); + + // mParameters[0]: + this->mParameterNames.push_back("membrane__Cm"); + this->mParameterUnits.push_back("picoF"); + + // Derived Quantity index [0]: + this->mDerivedQuantityNames.push_back("cytosolic_calcium_concentration"); + this->mDerivedQuantityUnits.push_back("millimolar"); + + // Derived Quantity index [1]: + this->mDerivedQuantityNames.push_back("environment__time"); + this->mDerivedQuantityUnits.push_back("millisecond"); + + // Derived Quantity index [2]: + this->mDerivedQuantityNames.push_back("membrane_capacitance"); + this->mDerivedQuantityUnits.push_back("uF"); + + // Derived Quantity index [3]: + this->mDerivedQuantityNames.push_back("membrane_stimulus_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + this->mInitialised = true; +} + +// Serialization for Boost >= 1.36 +#include "SerializationExportWrapperForCpp.hpp" +CHASTE_CLASS_EXPORT(Dynamicmatsuoka_model_2003FromCellMLGRL1) +extern "C" +{ + AbstractCardiacCellInterface* MakeCardiacCell( + boost::shared_ptr pSolver, + boost::shared_ptr pStimulus) + { + return new Dynamicmatsuoka_model_2003FromCellMLGRL1(pSolver, pStimulus); + } + +} \ No newline at end of file diff --git a/chaste_codegen/tests/numerical/baseline/GRL1/dynamic_matsuoka_model_2003.hpp b/chaste_codegen/tests/numerical/baseline/GRL1/dynamic_matsuoka_model_2003.hpp new file mode 100644 index 00000000..0d479765 --- /dev/null +++ b/chaste_codegen/tests/numerical/baseline/GRL1/dynamic_matsuoka_model_2003.hpp @@ -0,0 +1,163 @@ +#ifndef DYNAMICMATSUOKA_MODEL_2003FROMCELLMLGRL1_HPP_ +#define DYNAMICMATSUOKA_MODEL_2003FROMCELLMLGRL1_HPP_ + +//! @file +//! +//! This source file was generated from CellML by chaste_codegen version (version omitted as unimportant) +//! +//! Model: matsuoka_model_2003 +//! +//! Processed by chaste_codegen: https://github.com/ModellingWebLab/chaste-codegen +//! (translator: chaste_codegen, model type: GeneralizedRushLarsenFirstOrder) +//! on (date omitted as unimportant) +//! +//! + +#include "ChasteSerialization.hpp" +#include +#include "AbstractCardiacCellWithModifiers.hpp" +#include "AbstractModifier.hpp" +#include "AbstractDynamicallyLoadableEntity.hpp" +#include "AbstractStimulusFunction.hpp" +#include "AbstractGeneralizedRushLarsenCardiacCell.hpp" + +class Dynamicmatsuoka_model_2003FromCellMLGRL1 : public AbstractCardiacCellWithModifiers, public AbstractDynamicallyLoadableEntity +{ + friend class boost::serialization::access; + template + void serialize(Archive & archive, const unsigned int version) + { + archive & boost::serialization::base_object >(*this); + archive & boost::serialization::base_object(*this); + // Despite this class having modifier member variables, they are all added to the + // abstract class by the constructor, and archived via that, instead of here. + } + + // + // Settable parameters and readable variables + // + boost::shared_ptr mp_cytosolic_calcium_concentration_modifier; + boost::shared_ptr mp_membrane_capacitance_modifier; + boost::shared_ptr mp_membrane_voltage_modifier; + +public: + + boost::shared_ptr UseCellMLDefaultStimulus(); + Dynamicmatsuoka_model_2003FromCellMLGRL1(boost::shared_ptr /* unused; should be empty */, boost::shared_ptr pIntracellularStimulus); + ~Dynamicmatsuoka_model_2003FromCellMLGRL1(); + double GetIIonic(const std::vector* pStateVariables=NULL); + void UpdateTransmembranePotential(double var_chaste_interface__environment__time); + void ComputeOneStepExceptVoltage(double var_chaste_interface__environment__time); + + double EvaluateYDerivative0(double var_chaste_interface__environment__time, std::vector& rY); + double EvaluatePartialDerivative0(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative1(double var_chaste_interface__environment__time, std::vector& rY); + double EvaluatePartialDerivative1(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative2(double var_chaste_interface__environment__time, std::vector& rY); + double EvaluatePartialDerivative2(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative3(double var_chaste_interface__environment__time, std::vector& rY); + double EvaluatePartialDerivative3(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative4(double var_chaste_interface__environment__time, std::vector& rY); + double EvaluatePartialDerivative4(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative5(double var_chaste_interface__environment__time, std::vector& rY); + double EvaluatePartialDerivative5(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative6(double var_chaste_interface__environment__time, std::vector& rY); + double EvaluatePartialDerivative6(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative7(double var_chaste_interface__environment__time, std::vector& rY); + double EvaluatePartialDerivative7(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative8(double var_chaste_interface__environment__time, std::vector& rY); + double EvaluatePartialDerivative8(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative9(double var_chaste_interface__environment__time, std::vector& rY); + double EvaluatePartialDerivative9(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative10(double var_chaste_interface__environment__time, std::vector& rY); + double EvaluatePartialDerivative10(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative11(double var_chaste_interface__environment__time, std::vector& rY); + double EvaluatePartialDerivative11(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative12(double var_chaste_interface__environment__time, std::vector& rY); + double EvaluatePartialDerivative12(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative13(double var_chaste_interface__environment__time, std::vector& rY); + double EvaluatePartialDerivative13(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative14(double var_chaste_interface__environment__time, std::vector& rY); + double EvaluatePartialDerivative14(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative15(double var_chaste_interface__environment__time, std::vector& rY); + double EvaluatePartialDerivative15(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative16(double var_chaste_interface__environment__time, std::vector& rY); + double EvaluatePartialDerivative16(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative17(double var_chaste_interface__environment__time, std::vector& rY); + double EvaluatePartialDerivative17(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative18(double var_chaste_interface__environment__time, std::vector& rY); + double EvaluatePartialDerivative18(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative19(double var_chaste_interface__environment__time, std::vector& rY); + double EvaluatePartialDerivative19(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative20(double var_chaste_interface__environment__time, std::vector& rY); + double EvaluatePartialDerivative20(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative21(double var_chaste_interface__environment__time, std::vector& rY); + double EvaluatePartialDerivative21(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative22(double var_chaste_interface__environment__time, std::vector& rY); + double EvaluatePartialDerivative22(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative23(double var_chaste_interface__environment__time, std::vector& rY); + double EvaluatePartialDerivative23(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative24(double var_chaste_interface__environment__time, std::vector& rY); + double EvaluatePartialDerivative24(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative25(double var_chaste_interface__environment__time, std::vector& rY); + double EvaluatePartialDerivative25(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative26(double var_chaste_interface__environment__time, std::vector& rY); + double EvaluatePartialDerivative26(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative27(double var_chaste_interface__environment__time, std::vector& rY); + double EvaluatePartialDerivative27(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative28(double var_chaste_interface__environment__time, std::vector& rY); + double EvaluatePartialDerivative28(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative29(double var_chaste_interface__environment__time, std::vector& rY); + double EvaluatePartialDerivative29(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative30(double var_chaste_interface__environment__time, std::vector& rY); + double EvaluatePartialDerivative30(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative31(double var_chaste_interface__environment__time, std::vector& rY); + double EvaluatePartialDerivative31(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative32(double var_chaste_interface__environment__time, std::vector& rY); + double EvaluatePartialDerivative32(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative33(double var_chaste_interface__environment__time, std::vector& rY); + double EvaluatePartialDerivative33(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative34(double var_chaste_interface__environment__time, std::vector& rY); + double EvaluatePartialDerivative34(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative35(double var_chaste_interface__environment__time, std::vector& rY); + double EvaluatePartialDerivative35(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative36(double var_chaste_interface__environment__time, std::vector& rY); + double EvaluatePartialDerivative36(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical=false); + + std::vector ComputeDerivedQuantities(double var_chaste_interface__environment__time, const std::vector & rY); +}; + +// Needs to be included last +#include "SerializationExportWrapper.hpp" +CHASTE_CLASS_EXPORT(Dynamicmatsuoka_model_2003FromCellMLGRL1) + +namespace boost +{ + namespace serialization + { + template + inline void save_construct_data( + Archive & ar, const Dynamicmatsuoka_model_2003FromCellMLGRL1 * t, const unsigned int fileVersion) + { + const boost::shared_ptr p_solver = t->GetSolver(); + const boost::shared_ptr p_stimulus = t->GetStimulusFunction(); + ar << p_solver; + ar << p_stimulus; + } + + template + inline void load_construct_data( + Archive & ar, Dynamicmatsuoka_model_2003FromCellMLGRL1 * t, const unsigned int fileVersion) + { + boost::shared_ptr p_solver; + boost::shared_ptr p_stimulus; + ar >> p_solver; + ar >> p_stimulus; + ::new(t)Dynamicmatsuoka_model_2003FromCellMLGRL1(p_solver, p_stimulus); + } + + } + +} + +#endif // DYNAMICMATSUOKA_MODEL_2003FROMCELLMLGRL1_HPP_ \ No newline at end of file diff --git a/chaste_codegen/tests/numerical/baseline/GRL1/hodgkin_huxley_squid_axon_model_1952_modified.cpp b/chaste_codegen/tests/numerical/baseline/GRL1/hodgkin_huxley_squid_axon_model_1952_modified.cpp new file mode 100644 index 00000000..93d90713 --- /dev/null +++ b/chaste_codegen/tests/numerical/baseline/GRL1/hodgkin_huxley_squid_axon_model_1952_modified.cpp @@ -0,0 +1,548 @@ +//! @file +//! +//! This source file was generated from CellML by chaste_codegen version (version omitted as unimportant) +//! +//! Model: hodgkin_huxley_squid_axon_model_1952_modified +//! +//! Processed by chaste_codegen: https://github.com/ModellingWebLab/chaste-codegen +//! (translator: chaste_codegen, model type: GeneralizedRushLarsenFirstOrder) +//! on (date omitted as unimportant) +//! +//! + +#include "hodgkin_huxley_squid_axon_model_1952_modified.hpp" +#include +#include +#include +#include +#include "Exception.hpp" +#include "OdeSystemInformation.hpp" +#include "RegularStimulus.hpp" +#include "HeartConfig.hpp" +#include "IsNan.hpp" +#include "MathsCustomFunctions.hpp" + + + + + + boost::shared_ptr Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLGRL1::UseCellMLDefaultStimulus() + { + // Use the default stimulus specified by CellML metadata + const double var_chaste_interface__membrane__stim_amplitude = -20; // microA_per_cm2 + const double var_chaste_interface__membrane__stim_duration = 0.5; // millisecond + const double var_chaste_interface__membrane__stim_period = 1000; // millisecond + const double var_chaste_interface__membrane__stim_start = 10; // millisecond + boost::shared_ptr p_cellml_stim(new RegularStimulus( + -fabs(var_chaste_interface__membrane__stim_amplitude), + var_chaste_interface__membrane__stim_duration, + var_chaste_interface__membrane__stim_period, + var_chaste_interface__membrane__stim_start + )); + mpIntracellularStimulus = p_cellml_stim; + return p_cellml_stim; + } + + Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLGRL1::Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLGRL1(boost::shared_ptr /* unused; should be empty */, boost::shared_ptr pIntracellularStimulus) + : AbstractGeneralizedRushLarsenCardiacCell( + 4, + 0, + pIntracellularStimulus) + { + // Time units: millisecond + // + this->mpSystemInfo = OdeSystemInformation::Instance(); + Init(); + + // We have a default stimulus specified in the CellML file metadata + this->mHasDefaultStimulusFromCellML = true; + + this->mParameters[0] = 1; // (var_membrane__Cm) [microF_per_cm2] + this->mParameters[1] = 120; // (var_sodium_channel__g_Na) [milliS_per_cm2] + this->mParameters[2] = 0.29999999999999999; // (var_leakage_current__g_L) [milliS_per_cm2] + this->mParameters[3] = 36; // (var_potassium_channel__g_K) [milliS_per_cm2] + } + + Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLGRL1::~Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLGRL1() + { + } + + + void Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLGRL1::VerifyStateVariables() + { + std::vector& rY = rGetStateVariables(); + std::string error_message = ""; + + for (unsigned i=0; i < 4; i++) + { + if(std::isnan(rY[i])) + { + error_message += "State variable " + this->rGetStateVariableNames()[i] + " is not a number\n"; + } + if(std::isinf(rY[i])) + { + error_message += "State variable " + this->rGetStateVariableNames()[i] + " has become INFINITE\n"; + } + if(this->is_concentration[i] && rY[i] < 0) + { + error_message += "Concentration " + this->rGetStateVariableNames()[i] + " below 0\n"; + } + if(this->is_probability[i] && rY[i] < 0) + { + error_message += "Probability " + this->rGetStateVariableNames()[i] + " below 0\n"; + } + if(this->is_probability[i] && rY[i] > 1) + { + error_message += "Probability " + this->rGetStateVariableNames()[i] + " above 1\n"; + } + } + if (error_message != ""){ + EXCEPTION(DumpState(error_message)); + } + } + + double Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLGRL1::GetIIonic(const std::vector* pStateVariables) + { + // For state variable interpolation (SVI) we read in interpolated state variables, + // otherwise for ionic current interpolation (ICI) we use the state variables of this model (node). + if (!pStateVariables) pStateVariables = &rGetStateVariables(); + const std::vector& rY = *pStateVariables; + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -75.0 + double var_chaste_interface__sodium_channel_m_gate__m = rY[1]; + // Units: dimensionless; Initial value: 0.05 + double var_chaste_interface__sodium_channel_h_gate__h = rY[2]; + // Units: dimensionless; Initial value: 0.6 + double var_chaste_interface__potassium_channel_n_gate__n = rY[3]; + // Units: dimensionless; Initial value: 0.325 + + const double var_membrane__E_R = -75; // millivolt + const double var_leakage_current__E_L = 10.613 + var_membrane__E_R; // millivolt + const double var_leakage_current__i_L = (-var_leakage_current__E_L + var_chaste_interface__membrane__V) * mParameters[2]; // microA_per_cm2 + const double var_potassium_channel__E_K = -12 + var_membrane__E_R; // millivolt + const double var_potassium_channel__i_K = pow(var_chaste_interface__potassium_channel_n_gate__n, 4) * (-var_potassium_channel__E_K + var_chaste_interface__membrane__V) * mParameters[3]; // microA_per_cm2 + const double var_sodium_channel__E_Na = 115 + var_membrane__E_R; // millivolt + const double var_sodium_channel__i_Na = pow(var_chaste_interface__sodium_channel_m_gate__m, 3) * (-var_sodium_channel__E_Na + var_chaste_interface__membrane__V) * mParameters[1] * var_chaste_interface__sodium_channel_h_gate__h; // microA_per_cm2 + const double var_chaste_interface__i_ionic = var_leakage_current__i_L + var_potassium_channel__i_K + var_sodium_channel__i_Na; // uA_per_cm2 + + const double i_ionic = var_chaste_interface__i_ionic; + EXCEPT_IF_NOT(!std::isnan(i_ionic)); + return i_ionic; + } + + void Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLGRL1::UpdateTransmembranePotential(double var_chaste_interface__environment__time) + { + std::vector& rY = rGetStateVariables(); + unsigned v_index = GetVoltageIndex(); + const double delta = 1e-8; + + double d_dt_chaste_interface_var_membrane__V; + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -75.0 + double var_chaste_interface__sodium_channel_m_gate__m = rY[1]; + // Units: dimensionless; Initial value: 0.05 + double var_chaste_interface__sodium_channel_h_gate__h = rY[2]; + // Units: dimensionless; Initial value: 0.6 + double var_chaste_interface__potassium_channel_n_gate__n = rY[3]; + // Units: dimensionless; Initial value: 0.325 + + + // Mathematics + const double var_membrane__E_R = -75; // millivolt + const double var_leakage_current__E_L = 10.613 + var_membrane__E_R; // millivolt + const double var_leakage_current__i_L = (-var_leakage_current__E_L + var_chaste_interface__membrane__V) * mParameters[2]; // microA_per_cm2 + const double var_membrane__i_Stim = GetIntracellularAreaStimulus(var_chaste_interface__environment__time); // microA_per_cm2 + const double var_potassium_channel__E_K = -12 + var_membrane__E_R; // millivolt + const double var_potassium_channel__i_K = pow(var_chaste_interface__potassium_channel_n_gate__n, 4) * (-var_potassium_channel__E_K + var_chaste_interface__membrane__V) * mParameters[3]; // microA_per_cm2 + const double var_sodium_channel__E_Na = 115 + var_membrane__E_R; // millivolt + const double var_sodium_channel__i_Na = pow(var_chaste_interface__sodium_channel_m_gate__m, 3) * (-var_sodium_channel__E_Na + var_chaste_interface__membrane__V) * mParameters[1] * var_chaste_interface__sodium_channel_h_gate__h; // microA_per_cm2 + d_dt_chaste_interface_var_membrane__V = (-var_leakage_current__i_L - var_membrane__i_Stim - var_potassium_channel__i_K - var_sodium_channel__i_Na) / mParameters[0]; // millivolt / millisecond + + double evalF = d_dt_chaste_interface_var_membrane__V; + mEvalF[0] = d_dt_chaste_interface_var_membrane__V; + double partialF = EvaluatePartialDerivative0(var_chaste_interface__environment__time, rY, delta, true); + if (fabs(partialF) < delta) + { + rY[v_index] += evalF*mDt; + } + else + { + rY[v_index] += (evalF/partialF)*(exp(partialF*mDt)-1.0); + } + } + + void Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLGRL1::ComputeOneStepExceptVoltage(double var_chaste_interface__environment__time) + { + std::vector& rY = rGetStateVariables(); + const double delta = 1e-8; + + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -75.0 + double var_chaste_interface__sodium_channel_m_gate__m = rY[1]; + // Units: dimensionless; Initial value: 0.05 + double var_chaste_interface__sodium_channel_h_gate__h = rY[2]; + // Units: dimensionless; Initial value: 0.6 + double var_chaste_interface__potassium_channel_n_gate__n = rY[3]; + // Units: dimensionless; Initial value: 0.325 + + + // Mathematics + const double var_potassium_channel_n_gate__B = -0.10000000000000001; // per_millivolt + const double var_potassium_channel_n_gate__A = -0.01 / var_potassium_channel_n_gate__B; // per_millisecond + const double var_potassium_channel_n_gate__beta_n = 0.125 * exp(0.9375 + 0.012500000000000001 * var_chaste_interface__membrane__V); // per_millisecond + const double var_potassium_channel_n_gate__v0 = -65; // millivolt + const double var_potassium_channel_n_gate__U = (-var_potassium_channel_n_gate__v0 + var_chaste_interface__membrane__V) * var_potassium_channel_n_gate__B; // dimensionless + const double var_potassium_channel_n_gate__alpha_n = (((var_potassium_channel_n_gate__U >= -9.9999999999999995e-8) && (var_potassium_channel_n_gate__U <= 9.9999999999999995e-8)) ? ((1 - 0.5 * var_potassium_channel_n_gate__U) * var_potassium_channel_n_gate__A) : (var_potassium_channel_n_gate__A * var_potassium_channel_n_gate__U / (-1 + exp(var_potassium_channel_n_gate__U)))); // per_millisecond + const double d_dt_chaste_interface_var_potassium_channel_n_gate__n = (1 - var_chaste_interface__potassium_channel_n_gate__n) * var_potassium_channel_n_gate__alpha_n - var_potassium_channel_n_gate__beta_n * var_chaste_interface__potassium_channel_n_gate__n; // 1 / millisecond + const double var_sodium_channel_h_gate__alpha_h = 0.070000000000000007 * exp(-3.75 - 0.050000000000000003 * var_chaste_interface__membrane__V); // per_millisecond + const double var_sodium_channel_h_gate__beta_h = 1 / (1 + exp(-4.5 - 0.10000000000000001 * var_chaste_interface__membrane__V)); // per_millisecond + const double d_dt_chaste_interface_var_sodium_channel_h_gate__h = (1 - var_chaste_interface__sodium_channel_h_gate__h) * var_sodium_channel_h_gate__alpha_h - var_sodium_channel_h_gate__beta_h * var_chaste_interface__sodium_channel_h_gate__h; // 1 / millisecond + const double var_sodium_channel_m_gate__B = -0.10000000000000001; // per_millivolt + const double var_sodium_channel_m_gate__A = -0.10000000000000001 / var_sodium_channel_m_gate__B; // per_millisecond + const double var_sodium_channel_m_gate__beta_m = 4 * exp(-4.166666666666667 - 0.055555555555555552 * var_chaste_interface__membrane__V); // per_millisecond + const double var_sodium_channel_m_gate__v0 = -50; // millivolt + const double var_sodium_channel_m_gate__U = (-var_sodium_channel_m_gate__v0 + var_chaste_interface__membrane__V) * var_sodium_channel_m_gate__B; // dimensionless + const double var_sodium_channel_m_gate__alpha_m = (((var_sodium_channel_m_gate__U >= -9.9999999999999995e-8) && (var_sodium_channel_m_gate__U <= 9.9999999999999995e-8)) ? ((1 - 0.5 * var_sodium_channel_m_gate__U) * var_sodium_channel_m_gate__A) : (var_sodium_channel_m_gate__A * var_sodium_channel_m_gate__U / (-1 + exp(var_sodium_channel_m_gate__U)))); // per_millisecond + const double d_dt_chaste_interface_var_sodium_channel_m_gate__m = (1 - var_chaste_interface__sodium_channel_m_gate__m) * var_sodium_channel_m_gate__alpha_m - var_sodium_channel_m_gate__beta_m * var_chaste_interface__sodium_channel_m_gate__m; // 1 / millisecond + + mEvalF[1] = d_dt_chaste_interface_var_sodium_channel_m_gate__m; + mPartialF[1] = EvaluatePartialDerivative1(var_chaste_interface__environment__time, rY, delta); + mEvalF[2] = d_dt_chaste_interface_var_sodium_channel_h_gate__h; + mPartialF[2] = EvaluatePartialDerivative2(var_chaste_interface__environment__time, rY, delta); + mEvalF[3] = d_dt_chaste_interface_var_potassium_channel_n_gate__n; + mPartialF[3] = EvaluatePartialDerivative3(var_chaste_interface__environment__time, rY, delta); + + { + if (fabs(mPartialF[1]) < delta){ + rY[1] += mDt*d_dt_chaste_interface_var_sodium_channel_m_gate__m; + } + else + { + rY[1] += (d_dt_chaste_interface_var_sodium_channel_m_gate__m/mPartialF[1])*(exp(mPartialF[1]*mDt)-1.0); + } + + } + { + if (fabs(mPartialF[2]) < delta){ + rY[2] += mDt*d_dt_chaste_interface_var_sodium_channel_h_gate__h; + } + else + { + rY[2] += (d_dt_chaste_interface_var_sodium_channel_h_gate__h/mPartialF[2])*(exp(mPartialF[2]*mDt)-1.0); + } + + } + { + if (fabs(mPartialF[3]) < delta){ + rY[3] += mDt*d_dt_chaste_interface_var_potassium_channel_n_gate__n; + } + else + { + rY[3] += (d_dt_chaste_interface_var_potassium_channel_n_gate__n/mPartialF[3])*(exp(mPartialF[3]*mDt)-1.0); + } + + } + + } + + + double Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLGRL1::EvaluateYDerivative0(double var_chaste_interface__environment__time, std::vector& rY) + { + double d_dt_chaste_interface_var_membrane__V; + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -75.0 + double var_chaste_interface__sodium_channel_m_gate__m = rY[1]; + // Units: dimensionless; Initial value: 0.05 + double var_chaste_interface__sodium_channel_h_gate__h = rY[2]; + // Units: dimensionless; Initial value: 0.6 + double var_chaste_interface__potassium_channel_n_gate__n = rY[3]; + // Units: dimensionless; Initial value: 0.325 + + + // Mathematics + const double var_membrane__E_R = -75; // millivolt + const double var_leakage_current__E_L = 10.613 + var_membrane__E_R; // millivolt + const double var_leakage_current__i_L = (-var_leakage_current__E_L + var_chaste_interface__membrane__V) * mParameters[2]; // microA_per_cm2 + const double var_membrane__i_Stim = GetIntracellularAreaStimulus(var_chaste_interface__environment__time); // microA_per_cm2 + const double var_potassium_channel__E_K = -12 + var_membrane__E_R; // millivolt + const double var_potassium_channel__i_K = pow(var_chaste_interface__potassium_channel_n_gate__n, 4) * (-var_potassium_channel__E_K + var_chaste_interface__membrane__V) * mParameters[3]; // microA_per_cm2 + const double var_sodium_channel__E_Na = 115 + var_membrane__E_R; // millivolt + const double var_sodium_channel__i_Na = pow(var_chaste_interface__sodium_channel_m_gate__m, 3) * (-var_sodium_channel__E_Na + var_chaste_interface__membrane__V) * mParameters[1] * var_chaste_interface__sodium_channel_h_gate__h; // microA_per_cm2 + d_dt_chaste_interface_var_membrane__V = (-var_leakage_current__i_L - var_membrane__i_Stim - var_potassium_channel__i_K - var_sodium_channel__i_Na) / mParameters[0]; // millivolt / millisecond + + return d_dt_chaste_interface_var_membrane__V; + } + + double Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLGRL1::EvaluatePartialDerivative0(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__sodium_channel_m_gate__m = rY[1]; + // Units: dimensionless; Initial value: 0.05 + double var_chaste_interface__sodium_channel_h_gate__h = rY[2]; + // Units: dimensionless; Initial value: 0.6 + double var_chaste_interface__potassium_channel_n_gate__n = rY[3]; + // Units: dimensionless; Initial value: 0.325 + + + const double var_x0 = 1 / mParameters[0]; + const double var_x1 = pow(var_chaste_interface__sodium_channel_m_gate__m, 3) * mParameters[1]; + + partialF = var_x0 * (-mParameters[2] - var_x1 * var_chaste_interface__sodium_channel_h_gate__h - pow(var_chaste_interface__potassium_channel_n_gate__n, 4) * mParameters[3]); + } + else + { + const double y_save = rY[0]; + rY[0] += delta; + const double temp = EvaluateYDerivative0(var_chaste_interface__environment__time, rY); + partialF = (temp-mEvalF[0])/delta; + rY[0] = y_save; + } + return partialF; + } + double Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLGRL1::EvaluateYDerivative1(double var_chaste_interface__environment__time, std::vector& rY) + { + + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -75.0 + double var_chaste_interface__sodium_channel_m_gate__m = rY[1]; + // Units: dimensionless; Initial value: 0.05 + + + // Mathematics + const double var_sodium_channel_m_gate__B = -0.10000000000000001; // per_millivolt + const double var_sodium_channel_m_gate__A = -0.10000000000000001 / var_sodium_channel_m_gate__B; // per_millisecond + const double var_sodium_channel_m_gate__beta_m = 4 * exp(-4.166666666666667 - 0.055555555555555552 * var_chaste_interface__membrane__V); // per_millisecond + const double var_sodium_channel_m_gate__v0 = -50; // millivolt + const double var_sodium_channel_m_gate__U = (-var_sodium_channel_m_gate__v0 + var_chaste_interface__membrane__V) * var_sodium_channel_m_gate__B; // dimensionless + const double var_sodium_channel_m_gate__alpha_m = (((var_sodium_channel_m_gate__U >= -9.9999999999999995e-8) && (var_sodium_channel_m_gate__U <= 9.9999999999999995e-8)) ? ((1 - 0.5 * var_sodium_channel_m_gate__U) * var_sodium_channel_m_gate__A) : (var_sodium_channel_m_gate__A * var_sodium_channel_m_gate__U / (-1 + exp(var_sodium_channel_m_gate__U)))); // per_millisecond + const double d_dt_chaste_interface_var_sodium_channel_m_gate__m = (1 - var_chaste_interface__sodium_channel_m_gate__m) * var_sodium_channel_m_gate__alpha_m - var_sodium_channel_m_gate__beta_m * var_chaste_interface__sodium_channel_m_gate__m; // 1 / millisecond + + return d_dt_chaste_interface_var_sodium_channel_m_gate__m; + } + + double Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLGRL1::EvaluatePartialDerivative1(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -75.0 + + + const double var_x3 = 0.10000000000000001 * var_chaste_interface__membrane__V; + const double var_x4 = 5 + var_x3; + const double var_x5 = (var_x4 >= -9.9999999999999995e-8) && (var_x4 <= 9.9999999999999995e-8); + const double var_x6 = exp(-var_x4); + const double var_x7 = -1 + var_x6; + const double var_x8 = 1 / var_x7; + const double var_x9 = exp(-4.166666666666667 - 0.055555555555555552 * var_chaste_interface__membrane__V); + + partialF = -((var_x5) ? (3.5 + 0.050000000000000003 * var_chaste_interface__membrane__V) : (-var_x4 * var_x8)) - 4 * var_x9; + } + else + { + const double y_save = rY[1]; + rY[1] += delta; + const double temp = EvaluateYDerivative1(var_chaste_interface__environment__time, rY); + partialF = (temp-mEvalF[1])/delta; + rY[1] = y_save; + } + return partialF; + } + double Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLGRL1::EvaluateYDerivative2(double var_chaste_interface__environment__time, std::vector& rY) + { + + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -75.0 + double var_chaste_interface__sodium_channel_h_gate__h = rY[2]; + // Units: dimensionless; Initial value: 0.6 + + + // Mathematics + const double var_sodium_channel_h_gate__alpha_h = 0.070000000000000007 * exp(-3.75 - 0.050000000000000003 * var_chaste_interface__membrane__V); // per_millisecond + const double var_sodium_channel_h_gate__beta_h = 1 / (1 + exp(-4.5 - 0.10000000000000001 * var_chaste_interface__membrane__V)); // per_millisecond + const double d_dt_chaste_interface_var_sodium_channel_h_gate__h = (1 - var_chaste_interface__sodium_channel_h_gate__h) * var_sodium_channel_h_gate__alpha_h - var_sodium_channel_h_gate__beta_h * var_chaste_interface__sodium_channel_h_gate__h; // 1 / millisecond + + return d_dt_chaste_interface_var_sodium_channel_h_gate__h; + } + + double Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLGRL1::EvaluatePartialDerivative2(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -75.0 + + + const double var_x10 = exp(-3.75 - 0.050000000000000003 * var_chaste_interface__membrane__V); + const double var_x11 = exp(-4.5 - 0.10000000000000001 * var_chaste_interface__membrane__V); + const double var_x12 = 1 + var_x11; + + partialF = -1 / var_x12 - 0.070000000000000007 * var_x10; + } + else + { + const double y_save = rY[2]; + rY[2] += delta; + const double temp = EvaluateYDerivative2(var_chaste_interface__environment__time, rY); + partialF = (temp-mEvalF[2])/delta; + rY[2] = y_save; + } + return partialF; + } + double Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLGRL1::EvaluateYDerivative3(double var_chaste_interface__environment__time, std::vector& rY) + { + + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -75.0 + double var_chaste_interface__potassium_channel_n_gate__n = rY[3]; + // Units: dimensionless; Initial value: 0.325 + + + // Mathematics + const double var_potassium_channel_n_gate__B = -0.10000000000000001; // per_millivolt + const double var_potassium_channel_n_gate__A = -0.01 / var_potassium_channel_n_gate__B; // per_millisecond + const double var_potassium_channel_n_gate__beta_n = 0.125 * exp(0.9375 + 0.012500000000000001 * var_chaste_interface__membrane__V); // per_millisecond + const double var_potassium_channel_n_gate__v0 = -65; // millivolt + const double var_potassium_channel_n_gate__U = (-var_potassium_channel_n_gate__v0 + var_chaste_interface__membrane__V) * var_potassium_channel_n_gate__B; // dimensionless + const double var_potassium_channel_n_gate__alpha_n = (((var_potassium_channel_n_gate__U >= -9.9999999999999995e-8) && (var_potassium_channel_n_gate__U <= 9.9999999999999995e-8)) ? ((1 - 0.5 * var_potassium_channel_n_gate__U) * var_potassium_channel_n_gate__A) : (var_potassium_channel_n_gate__A * var_potassium_channel_n_gate__U / (-1 + exp(var_potassium_channel_n_gate__U)))); // per_millisecond + const double d_dt_chaste_interface_var_potassium_channel_n_gate__n = (1 - var_chaste_interface__potassium_channel_n_gate__n) * var_potassium_channel_n_gate__alpha_n - var_potassium_channel_n_gate__beta_n * var_chaste_interface__potassium_channel_n_gate__n; // 1 / millisecond + + return d_dt_chaste_interface_var_potassium_channel_n_gate__n; + } + + double Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLGRL1::EvaluatePartialDerivative3(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -75.0 + + + const double var_x3 = 0.10000000000000001 * var_chaste_interface__membrane__V; + const double var_x13 = 6.5 + var_x3; + const double var_x14 = (var_x13 >= -9.9999999999999995e-8) && (var_x13 <= 9.9999999999999995e-8); + const double var_x15 = exp(-var_x13); + const double var_x16 = -1 + var_x15; + const double var_x17 = 1 / var_x16; + const double var_x18 = exp(0.9375 + 0.012500000000000001 * var_chaste_interface__membrane__V); + + partialF = -((var_x14) ? (0.42499999999999999 + 0.0050000000000000001 * var_chaste_interface__membrane__V) : (-0.099999999999999992 * var_x13 * var_x17)) - 0.125 * var_x18; + } + else + { + const double y_save = rY[3]; + rY[3] += delta; + const double temp = EvaluateYDerivative3(var_chaste_interface__environment__time, rY); + partialF = (temp-mEvalF[3])/delta; + rY[3] = y_save; + } + return partialF; + } + + std::vector Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLGRL1::ComputeDerivedQuantities(double var_chaste_interface__environment__time, const std::vector & rY) + { + // Inputs: + // Time units: millisecond + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -75.0 + double var_chaste_interface__sodium_channel_m_gate__m = rY[1]; + // Units: dimensionless; Initial value: 0.05 + double var_chaste_interface__sodium_channel_h_gate__h = rY[2]; + // Units: dimensionless; Initial value: 0.6 + double var_chaste_interface__potassium_channel_n_gate__n = rY[3]; + // Units: dimensionless; Initial value: 0.325 + + // Mathematics + const double var_membrane__E_R = -75; // millivolt + const double var_leakage_current__E_L = 10.613 + var_membrane__E_R; // millivolt + const double var_leakage_current__i_L = (-var_leakage_current__E_L + var_chaste_interface__membrane__V) * mParameters[2]; // microA_per_cm2 + const double var_membrane__i_Stim = GetIntracellularAreaStimulus(var_chaste_interface__environment__time); // microA_per_cm2 + const double var_potassium_channel__E_K = -12 + var_membrane__E_R; // millivolt + const double var_potassium_channel__i_K = pow(var_chaste_interface__potassium_channel_n_gate__n, 4) * (-var_potassium_channel__E_K + var_chaste_interface__membrane__V) * mParameters[3]; // microA_per_cm2 + const double var_sodium_channel__E_Na = 115 + var_membrane__E_R; // millivolt + const double var_sodium_channel__i_Na = pow(var_chaste_interface__sodium_channel_m_gate__m, 3) * (-var_sodium_channel__E_Na + var_chaste_interface__membrane__V) * mParameters[1] * var_chaste_interface__sodium_channel_h_gate__h; // microA_per_cm2 + + std::vector dqs(5); + dqs[0] = var_sodium_channel__i_Na; + dqs[1] = var_leakage_current__i_L; + dqs[2] = var_potassium_channel__i_K; + dqs[3] = var_membrane__i_Stim; + dqs[4] = var_chaste_interface__environment__time; + return dqs; + } + +template<> +void OdeSystemInformation::Initialise(void) +{ + this->mSystemName = "hodgkin_huxley_squid_axon_model_1952_modified"; + this->mFreeVariableName = "time"; + this->mFreeVariableUnits = "millisecond"; + + // rY[0]: + this->mVariableNames.push_back("membrane_voltage"); + this->mVariableUnits.push_back("millivolt"); + this->mInitialConditions.push_back(-75.0); + + // rY[1]: + this->mVariableNames.push_back("sodium_channel_m_gate__m"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.05); + + // rY[2]: + this->mVariableNames.push_back("sodium_channel_h_gate__h"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.6); + + // rY[3]: + this->mVariableNames.push_back("potassium_channel_n_gate__n"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.325); + + // mParameters[0]: + this->mParameterNames.push_back("membrane_capacitance"); + this->mParameterUnits.push_back("microF_per_cm2"); + + // mParameters[1]: + this->mParameterNames.push_back("membrane_fast_sodium_current_conductance"); + this->mParameterUnits.push_back("milliS_per_cm2"); + + // mParameters[2]: + this->mParameterNames.push_back("membrane_leakage_current_conductance"); + this->mParameterUnits.push_back("milliS_per_cm2"); + + // mParameters[3]: + this->mParameterNames.push_back("membrane_potassium_current_conductance"); + this->mParameterUnits.push_back("milliS_per_cm2"); + + // Derived Quantity index [0]: + this->mDerivedQuantityNames.push_back("membrane_fast_sodium_current"); + this->mDerivedQuantityUnits.push_back("microA_per_cm2"); + + // Derived Quantity index [1]: + this->mDerivedQuantityNames.push_back("membrane_leakage_current"); + this->mDerivedQuantityUnits.push_back("microA_per_cm2"); + + // Derived Quantity index [2]: + this->mDerivedQuantityNames.push_back("membrane_potassium_current"); + this->mDerivedQuantityUnits.push_back("microA_per_cm2"); + + // Derived Quantity index [3]: + this->mDerivedQuantityNames.push_back("membrane_stimulus_current"); + this->mDerivedQuantityUnits.push_back("microA_per_cm2"); + + // Derived Quantity index [4]: + this->mDerivedQuantityNames.push_back("time"); + this->mDerivedQuantityUnits.push_back("millisecond"); + + this->mInitialised = true; +} + +// Serialization for Boost >= 1.36 +#include "SerializationExportWrapperForCpp.hpp" +CHASTE_CLASS_EXPORT(Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLGRL1) + diff --git a/chaste_codegen/tests/numerical/baseline/GRL1/hodgkin_huxley_squid_axon_model_1952_modified.hpp b/chaste_codegen/tests/numerical/baseline/GRL1/hodgkin_huxley_squid_axon_model_1952_modified.hpp new file mode 100644 index 00000000..8616dfcf --- /dev/null +++ b/chaste_codegen/tests/numerical/baseline/GRL1/hodgkin_huxley_squid_axon_model_1952_modified.hpp @@ -0,0 +1,94 @@ +#ifndef CELLHODGKIN_HUXLEY_SQUID_AXON_MODEL_1952_MODIFIEDFROMCELLMLGRL1_HPP_ +#define CELLHODGKIN_HUXLEY_SQUID_AXON_MODEL_1952_MODIFIEDFROMCELLMLGRL1_HPP_ + +//! @file +//! +//! This source file was generated from CellML by chaste_codegen version (version omitted as unimportant) +//! +//! Model: hodgkin_huxley_squid_axon_model_1952_modified +//! +//! Processed by chaste_codegen: https://github.com/ModellingWebLab/chaste-codegen +//! (translator: chaste_codegen, model type: GeneralizedRushLarsenFirstOrder) +//! on (date omitted as unimportant) +//! +//! + +#include "ChasteSerialization.hpp" +#include +#include "AbstractStimulusFunction.hpp" +#include "AbstractGeneralizedRushLarsenCardiacCell.hpp" + +class Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLGRL1 : public AbstractGeneralizedRushLarsenCardiacCell +{ + friend class boost::serialization::access; + template + void serialize(Archive & archive, const unsigned int version) + { + archive & boost::serialization::base_object(*this); + + } + + // + // Settable parameters and readable variables + // + + +private: +const bool is_concentration[4] = {false, false, false, false}; +const bool is_probability[4] = {false, false, false, false}; +public: + + boost::shared_ptr UseCellMLDefaultStimulus(); + Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLGRL1(boost::shared_ptr /* unused; should be empty */, boost::shared_ptr pIntracellularStimulus); + ~Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLGRL1(); + void VerifyStateVariables(); + double GetIIonic(const std::vector* pStateVariables=NULL); + void UpdateTransmembranePotential(double var_chaste_interface__environment__time); + void ComputeOneStepExceptVoltage(double var_chaste_interface__environment__time); + + double EvaluateYDerivative0(double var_chaste_interface__environment__time, std::vector& rY); + double EvaluatePartialDerivative0(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative1(double var_chaste_interface__environment__time, std::vector& rY); + double EvaluatePartialDerivative1(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative2(double var_chaste_interface__environment__time, std::vector& rY); + double EvaluatePartialDerivative2(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative3(double var_chaste_interface__environment__time, std::vector& rY); + double EvaluatePartialDerivative3(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical=false); + + std::vector ComputeDerivedQuantities(double var_chaste_interface__environment__time, const std::vector & rY); +}; + +// Needs to be included last +#include "SerializationExportWrapper.hpp" +CHASTE_CLASS_EXPORT(Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLGRL1) + +namespace boost +{ + namespace serialization + { + template + inline void save_construct_data( + Archive & ar, const Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLGRL1 * t, const unsigned int fileVersion) + { + const boost::shared_ptr p_solver = t->GetSolver(); + const boost::shared_ptr p_stimulus = t->GetStimulusFunction(); + ar << p_solver; + ar << p_stimulus; + } + + template + inline void load_construct_data( + Archive & ar, Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLGRL1 * t, const unsigned int fileVersion) + { + boost::shared_ptr p_solver; + boost::shared_ptr p_stimulus; + ar >> p_solver; + ar >> p_stimulus; + ::new(t)Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLGRL1(p_solver, p_stimulus); + } + + } + +} + +#endif // CELLHODGKIN_HUXLEY_SQUID_AXON_MODEL_1952_MODIFIEDFROMCELLMLGRL1_HPP_ \ No newline at end of file diff --git a/chaste_codegen/tests/numerical/baseline/GRL1Opt/beeler_reuter_model_1977.cpp b/chaste_codegen/tests/numerical/baseline/GRL1Opt/beeler_reuter_model_1977.cpp new file mode 100644 index 00000000..164285d9 --- /dev/null +++ b/chaste_codegen/tests/numerical/baseline/GRL1Opt/beeler_reuter_model_1977.cpp @@ -0,0 +1,1345 @@ +//! @file +//! +//! This source file was generated from CellML by chaste_codegen version (version omitted as unimportant) +//! +//! Model: beeler_reuter_model_1977 +//! +//! Processed by chaste_codegen: https://github.com/ModellingWebLab/chaste-codegen +//! (translator: chaste_codegen, model type: GeneralizedRushLarsenFirstOrderOpt) +//! on (date omitted as unimportant) +//! +//! + +#include "beeler_reuter_model_1977.hpp" +#include +#include +#include +#include +#include "Exception.hpp" +#include "OdeSystemInformation.hpp" +#include "RegularStimulus.hpp" +#include "HeartConfig.hpp" +#include "IsNan.hpp" +#include "MathsCustomFunctions.hpp" + + + +class Cellbeeler_reuter_model_1977FromCellMLGRL1Opt_LookupTables : public AbstractLookupTableCollection +{ +public: + static Cellbeeler_reuter_model_1977FromCellMLGRL1Opt_LookupTables* Instance() + { + if (mpInstance.get() == NULL) + { + mpInstance.reset(new Cellbeeler_reuter_model_1977FromCellMLGRL1Opt_LookupTables); + } + return mpInstance.get(); + } + + void FreeMemory() + { + + if (_lookup_table_0) + { + delete[] _lookup_table_0; + _lookup_table_0 = NULL; + } + + mNeedsRegeneration.assign(mNeedsRegeneration.size(), true); + } + + // Row lookup methods + // using linear-interpolation + + double* _lookup_0_row(unsigned i, double _factor_) + { + for (unsigned j=0; j<17; j++) + { + const double y1 = _lookup_table_0[i][j]; + const double y2 = _lookup_table_0[i+1][j]; + _lookup_table_0_row[j] = y1 + (y2-y1)*_factor_; + } + return _lookup_table_0_row; + } + + + const double * IndexTable0(double var_chaste_interface__membrane__V) + { + const double _offset_0 = var_chaste_interface__membrane__V - mTableMins[0]; + const double _offset_0_over_table_step = _offset_0 * mTableStepInverses[0]; + const unsigned _table_index_0 = (unsigned)(_offset_0_over_table_step); + const double _factor_0 = _offset_0_over_table_step - _table_index_0; + const double* const _lt_0_row = Cellbeeler_reuter_model_1977FromCellMLGRL1Opt_LookupTables::Instance()->_lookup_0_row(_table_index_0, _factor_0); + return _lt_0_row; + } + + +// LCOV_EXCL_START + bool CheckIndex0(double& var_chaste_interface__membrane__V) + { + bool _oob_0 = false; + if (var_chaste_interface__membrane__V>mTableMaxs[0] || var_chaste_interface__membrane__V= -9.9999999999999995e-8) && (0.92000000000000004 + 0.040000000000000001 * var_chaste_interface__membrane__V <= 9.9999999999999995e-8)) ? (7.3000000000000007 + 0.10000000000000001 * var_chaste_interface__membrane__V) : (-5 * (0.92000000000000004 + 0.040000000000000001 * var_chaste_interface__membrane__V) / (-1 + exp(-0.92000000000000004 - 0.040000000000000001 * var_chaste_interface__membrane__V)))); + }; + const double var_chaste_interface__membrane__V = mTableMins[0] + i*mTableSteps[0]; + double val = f(var_chaste_interface__membrane__V); + + _lookup_table_0[i][2] = val; + } + + for (unsigned i=0 ; i<_table_size_0; i++) + { + auto f = [](double var_chaste_interface__membrane__V) { + return 1 + exp(0.35997120230381568 - 0.071994240460763137 * var_chaste_interface__membrane__V); + }; + const double var_chaste_interface__membrane__V = mTableMins[0] + i*mTableSteps[0]; + double val = f(var_chaste_interface__membrane__V); + + _lookup_table_0[i][3] = val; + } + + for (unsigned i=0 ; i<_table_size_0; i++) + { + auto f = [](double var_chaste_interface__membrane__V) { + return exp(0.050000000000000003 - 0.01 * var_chaste_interface__membrane__V); + }; + const double var_chaste_interface__membrane__V = mTableMins[0] + i*mTableSteps[0]; + double val = f(var_chaste_interface__membrane__V); + + _lookup_table_0[i][4] = val; + } + + for (unsigned i=0 ; i<_table_size_0; i++) + { + auto f = [](double var_chaste_interface__membrane__V) { + return 1 + exp(2.2000000000000002 + 0.050000000000000003 * var_chaste_interface__membrane__V); + }; + const double var_chaste_interface__membrane__V = mTableMins[0] + i*mTableSteps[0]; + double val = f(var_chaste_interface__membrane__V); + + _lookup_table_0[i][5] = val; + } + + for (unsigned i=0 ; i<_table_size_0; i++) + { + auto f = [](double var_chaste_interface__membrane__V) { + return exp(-0.74576271186440679 - 0.016949152542372881 * var_chaste_interface__membrane__V); + }; + const double var_chaste_interface__membrane__V = mTableMins[0] + i*mTableSteps[0]; + double val = f(var_chaste_interface__membrane__V); + + _lookup_table_0[i][6] = val; + } + + for (unsigned i=0 ; i<_table_size_0; i++) + { + auto f = [](double var_chaste_interface__membrane__V) { + return 1 + exp(4.197901049475262 + 0.14992503748125938 * var_chaste_interface__membrane__V); + }; + const double var_chaste_interface__membrane__V = mTableMins[0] + i*mTableSteps[0]; + double val = f(var_chaste_interface__membrane__V); + + _lookup_table_0[i][7] = val; + } + + for (unsigned i=0 ; i<_table_size_0; i++) + { + auto f = [](double var_chaste_interface__membrane__V) { + return exp(-0.224 - 0.0080000000000000002 * var_chaste_interface__membrane__V); + }; + const double var_chaste_interface__membrane__V = mTableMins[0] + i*mTableSteps[0]; + double val = f(var_chaste_interface__membrane__V); + + _lookup_table_0[i][8] = val; + } + + for (unsigned i=0 ; i<_table_size_0; i++) + { + auto f = [](double var_chaste_interface__membrane__V) { + return 1 + exp(-6 - 0.20000000000000001 * var_chaste_interface__membrane__V); + }; + const double var_chaste_interface__membrane__V = mTableMins[0] + i*mTableSteps[0]; + double val = f(var_chaste_interface__membrane__V); + + _lookup_table_0[i][9] = val; + } + + for (unsigned i=0 ; i<_table_size_0; i++) + { + auto f = [](double var_chaste_interface__membrane__V) { + return exp(-0.59999999999999998 - 0.02 * var_chaste_interface__membrane__V); + }; + const double var_chaste_interface__membrane__V = mTableMins[0] + i*mTableSteps[0]; + double val = f(var_chaste_interface__membrane__V); + + _lookup_table_0[i][10] = val; + } + + for (unsigned i=0 ; i<_table_size_0; i++) + { + auto f = [](double var_chaste_interface__membrane__V) { + return (((4.7000000000000002 + 0.10000000000000001 * var_chaste_interface__membrane__V >= -9.9999999999999995e-8) && (4.7000000000000002 + 0.10000000000000001 * var_chaste_interface__membrane__V <= 9.9999999999999995e-8)) ? (33.5 + 0.5 * var_chaste_interface__membrane__V) : (-10 * (4.7000000000000002 + 0.10000000000000001 * var_chaste_interface__membrane__V) / (-1 + exp(-4.7000000000000002 - 0.10000000000000001 * var_chaste_interface__membrane__V)))); + }; + const double var_chaste_interface__membrane__V = mTableMins[0] + i*mTableSteps[0]; + double val = f(var_chaste_interface__membrane__V); + //Expressions which are part of a piecewise could be inf / nan, this is generally accptable, due to the piecewise, however occasionally interpolation of the lookup table from a nan/inf version can give problems. + //To avoid this values stored in the table are intrpolated. Occurances of this to at most 2 per expression. + if (!std::isfinite(val) && _lookup_table_0_num_misshit_piecewise[11] < 2){ + double left = f(var_chaste_interface__membrane__V - mTableSteps[0]); + double right = f(var_chaste_interface__membrane__V + mTableSteps[0]); + val = (left + right) / 2.0; + // count and limit number of misshits + _lookup_table_0_num_misshit_piecewise[11] +=1; + } + else if (!std::isfinite(val) && _lookup_table_0_num_misshit_piecewise[11] >= 2){ + EXCEPTION("Lookup table 11 at ["< mpInstance; + + // Row lookup methods memory + double _lookup_table_0_row[17]; + + // Lookup tables + double (*_lookup_table_0)[17]; + int _lookup_table_0_num_misshit_piecewise[17] = {0}; + +}; + +std::shared_ptr Cellbeeler_reuter_model_1977FromCellMLGRL1Opt_LookupTables::mpInstance; + + + boost::shared_ptr Cellbeeler_reuter_model_1977FromCellMLGRL1Opt::UseCellMLDefaultStimulus() + { + // Use the default stimulus specified by CellML metadata + const double var_chaste_interface__stimulus_protocol__IstimAmplitude_converted = 50.000000000000007; // uA_per_cm2 + const double var_chaste_interface__stimulus_protocol__IstimPeriod = 1000; // ms + const double var_chaste_interface__stimulus_protocol__IstimPulseDuration = 1; // ms + const double var_chaste_interface__stimulus_protocol__IstimStart = 10; // ms + boost::shared_ptr p_cellml_stim(new RegularStimulus( + -fabs(var_chaste_interface__stimulus_protocol__IstimAmplitude_converted), + var_chaste_interface__stimulus_protocol__IstimPulseDuration, + var_chaste_interface__stimulus_protocol__IstimPeriod, + var_chaste_interface__stimulus_protocol__IstimStart + )); + mpIntracellularStimulus = p_cellml_stim; + return p_cellml_stim; + } + double Cellbeeler_reuter_model_1977FromCellMLGRL1Opt::GetIntracellularCalciumConcentration() + { + return mStateVariables[1]; + } + Cellbeeler_reuter_model_1977FromCellMLGRL1Opt::Cellbeeler_reuter_model_1977FromCellMLGRL1Opt(boost::shared_ptr /* unused; should be empty */, boost::shared_ptr pIntracellularStimulus) + : AbstractGeneralizedRushLarsenCardiacCell( + 8, + 0, + pIntracellularStimulus) + { + // Time units: millisecond + // + this->mpSystemInfo = OdeSystemInformation::Instance(); + Init(); + + // We have a default stimulus specified in the CellML file metadata + this->mHasDefaultStimulusFromCellML = true; + + this->mParameters[0] = 0.00089999999999999998; // (var_slow_inward_current__g_s) [mS_per_mm2] + this->mParameters[1] = 0.01; // (var_membrane__C) [uF_per_mm2] + this->mParameters[2] = 0.040000000000000001; // (var_sodium_current__g_Na) [mS_per_mm2] + this->mParameters[3] = 0; // (var_sodium_current__perc_reduced_inact_for_IpNa) [dimensionless] + this->mParameters[4] = 0; // (var_sodium_current__shift_INa_inact) [mV] + this->mParameters[5] = 0.0035000000000000001; // (var_time_independent_outward_current__G_K1) [uA_per_mm2] + this->mParameters[6] = 0.0080000000000000002; // (var_time_dependent_outward_current__G_Kr) [uA_per_mm2] + this->mParameters[7] = 50; // (var_sodium_current__E_Na) [mV] + } + + Cellbeeler_reuter_model_1977FromCellMLGRL1Opt::~Cellbeeler_reuter_model_1977FromCellMLGRL1Opt() + { + } + + AbstractLookupTableCollection* Cellbeeler_reuter_model_1977FromCellMLGRL1Opt::GetLookupTableCollection() + { + return Cellbeeler_reuter_model_1977FromCellMLGRL1Opt_LookupTables::Instance(); + } + + void Cellbeeler_reuter_model_1977FromCellMLGRL1Opt::VerifyStateVariables() + { + std::vector& rY = rGetStateVariables(); + std::string error_message = ""; + + for (unsigned i=0; i < 8; i++) + { + if(std::isnan(rY[i])) + { + error_message += "State variable " + this->rGetStateVariableNames()[i] + " is not a number\n"; + } + if(std::isinf(rY[i])) + { + error_message += "State variable " + this->rGetStateVariableNames()[i] + " has become INFINITE\n"; + } + if(this->is_concentration[i] && rY[i] < 0) + { + error_message += "Concentration " + this->rGetStateVariableNames()[i] + " below 0\n"; + } + if(this->is_probability[i] && rY[i] < 0) + { + error_message += "Probability " + this->rGetStateVariableNames()[i] + " below 0\n"; + } + if(this->is_probability[i] && rY[i] > 1) + { + error_message += "Probability " + this->rGetStateVariableNames()[i] + " above 1\n"; + } + } + if (error_message != ""){ + EXCEPTION(DumpState(error_message)); + } + } + + double Cellbeeler_reuter_model_1977FromCellMLGRL1Opt::GetIIonic(const std::vector* pStateVariables) + { + // For state variable interpolation (SVI) we read in interpolated state variables, + // otherwise for ionic current interpolation (ICI) we use the state variables of this model (node). + if (!pStateVariables) pStateVariables = &rGetStateVariables(); + const std::vector& rY = *pStateVariables; + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: mV; Initial value: -84.624 + double var_chaste_interface__slow_inward_current__Cai = rY[1]; + // Units: concentration_units; Initial value: 0.0001 + double var_chaste_interface__sodium_current_m_gate__m = rY[2]; + // Units: dimensionless; Initial value: 0.011 + double var_chaste_interface__sodium_current_h_gate__h = rY[3]; + // Units: dimensionless; Initial value: 0.988 + double var_chaste_interface__sodium_current_j_gate__j = rY[4]; + // Units: dimensionless; Initial value: 0.975 + double var_chaste_interface__slow_inward_current_d_gate__d = rY[5]; + // Units: dimensionless; Initial value: 0.003 + double var_chaste_interface__slow_inward_current_f_gate__f = rY[6]; + // Units: dimensionless; Initial value: 0.994 + double var_chaste_interface__time_dependent_outward_current_x1_gate__x1 = rY[7]; + // Units: dimensionless; Initial value: 0.0001 + + // Lookup table indexing + const bool _oob_0 = Cellbeeler_reuter_model_1977FromCellMLGRL1Opt_LookupTables::Instance()->CheckIndex0(var_chaste_interface__membrane__V); +// LCOV_EXCL_START + if (_oob_0) + EXCEPTION(DumpState("membrane_voltage outside lookup table range", rY)); +// LCOV_EXCL_STOP + const double* const _lt_0_row = Cellbeeler_reuter_model_1977FromCellMLGRL1Opt_LookupTables::Instance()->IndexTable0(var_chaste_interface__membrane__V); + + const double var_slow_inward_current__i_s_converted = 100.00000000000001 * (-7.6990712032745758 + 13.028700000000001 * log(var_chaste_interface__slow_inward_current__Cai) + var_chaste_interface__membrane__V) * mParameters[0] * var_chaste_interface__slow_inward_current_d_gate__d * var_chaste_interface__slow_inward_current_f_gate__f; // uA_per_cm2 + const double var_sodium_current__i_Na_converted = 100.00000000000001 * (3.0000000000000001e-5 + pow(var_chaste_interface__sodium_current_m_gate__m, 3) * mParameters[2] * var_chaste_interface__sodium_current_h_gate__h * var_chaste_interface__sodium_current_j_gate__j) * (-mParameters[7] + var_chaste_interface__membrane__V); // uA_per_cm2 + const double var_time_dependent_outward_current__i_x1_converted = 100.00000000000001 * (_lt_0_row[1]) * mParameters[6] * var_chaste_interface__time_dependent_outward_current_x1_gate__x1 / _lt_0_row[0]; // uA_per_cm2 + const double var_time_independent_outward_current__i_K1_converted = 100.00000000000001 * (_lt_0_row[2]) * mParameters[5]; // uA_per_cm2 + const double var_chaste_interface__i_ionic = var_slow_inward_current__i_s_converted + var_sodium_current__i_Na_converted + var_time_dependent_outward_current__i_x1_converted + var_time_independent_outward_current__i_K1_converted; // uA_per_cm2 + + const double i_ionic = var_chaste_interface__i_ionic; + EXCEPT_IF_NOT(!std::isnan(i_ionic)); + return i_ionic; + } + + void Cellbeeler_reuter_model_1977FromCellMLGRL1Opt::UpdateTransmembranePotential(double var_chaste_interface__environment__time) + { + std::vector& rY = rGetStateVariables(); + unsigned v_index = GetVoltageIndex(); + const double delta = 1e-8; + + double d_dt_chaste_interface_var_membrane__V; + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: mV; Initial value: -84.624 + double var_chaste_interface__slow_inward_current__Cai = rY[1]; + // Units: concentration_units; Initial value: 0.0001 + double var_chaste_interface__sodium_current_m_gate__m = rY[2]; + // Units: dimensionless; Initial value: 0.011 + double var_chaste_interface__sodium_current_h_gate__h = rY[3]; + // Units: dimensionless; Initial value: 0.988 + double var_chaste_interface__sodium_current_j_gate__j = rY[4]; + // Units: dimensionless; Initial value: 0.975 + double var_chaste_interface__slow_inward_current_d_gate__d = rY[5]; + // Units: dimensionless; Initial value: 0.003 + double var_chaste_interface__slow_inward_current_f_gate__f = rY[6]; + // Units: dimensionless; Initial value: 0.994 + double var_chaste_interface__time_dependent_outward_current_x1_gate__x1 = rY[7]; + // Units: dimensionless; Initial value: 0.0001 + + + // Lookup table indexing + const bool _oob_0 = Cellbeeler_reuter_model_1977FromCellMLGRL1Opt_LookupTables::Instance()->CheckIndex0(var_chaste_interface__membrane__V); +// LCOV_EXCL_START + if (_oob_0) + EXCEPTION(DumpState("membrane_voltage outside lookup table range", rY , var_chaste_interface__environment__time)); +// LCOV_EXCL_STOP + const double* const _lt_0_row = Cellbeeler_reuter_model_1977FromCellMLGRL1Opt_LookupTables::Instance()->IndexTable0(var_chaste_interface__membrane__V); + + // Mathematics + const double var_slow_inward_current__i_s = (-7.6990712032745758 + 13.028700000000001 * log(var_chaste_interface__slow_inward_current__Cai) + var_chaste_interface__membrane__V) * mParameters[0] * var_chaste_interface__slow_inward_current_d_gate__d * var_chaste_interface__slow_inward_current_f_gate__f; // uA_per_mm2 + d_dt_chaste_interface_var_membrane__V = (-var_slow_inward_current__i_s - 0.0099999999999999985 * GetIntracellularAreaStimulus(var_chaste_interface__environment__time) - (3.0000000000000001e-5 + pow(var_chaste_interface__sodium_current_m_gate__m, 3) * mParameters[2] * var_chaste_interface__sodium_current_h_gate__h * var_chaste_interface__sodium_current_j_gate__j) * (-mParameters[7] + var_chaste_interface__membrane__V) - (_lt_0_row[2]) * mParameters[5] - (_lt_0_row[1]) * mParameters[6] * var_chaste_interface__time_dependent_outward_current_x1_gate__x1 / _lt_0_row[0]) / mParameters[1]; // mV / ms + + double evalF = d_dt_chaste_interface_var_membrane__V; + mEvalF[0] = d_dt_chaste_interface_var_membrane__V; + double partialF = EvaluatePartialDerivative0(var_chaste_interface__environment__time, rY, delta, true); + if (fabs(partialF) < delta) + { + rY[v_index] += evalF*mDt; + } + else + { + rY[v_index] += (evalF/partialF)*(exp(partialF*mDt)-1.0); + } + } + + void Cellbeeler_reuter_model_1977FromCellMLGRL1Opt::ComputeOneStepExceptVoltage(double var_chaste_interface__environment__time) + { + std::vector& rY = rGetStateVariables(); + const double delta = 1e-8; + + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: mV; Initial value: -84.624 + double var_chaste_interface__slow_inward_current__Cai = rY[1]; + // Units: concentration_units; Initial value: 0.0001 + double var_chaste_interface__sodium_current_m_gate__m = rY[2]; + // Units: dimensionless; Initial value: 0.011 + double var_chaste_interface__sodium_current_h_gate__h = rY[3]; + // Units: dimensionless; Initial value: 0.988 + double var_chaste_interface__sodium_current_j_gate__j = rY[4]; + // Units: dimensionless; Initial value: 0.975 + double var_chaste_interface__slow_inward_current_d_gate__d = rY[5]; + // Units: dimensionless; Initial value: 0.003 + double var_chaste_interface__slow_inward_current_f_gate__f = rY[6]; + // Units: dimensionless; Initial value: 0.994 + double var_chaste_interface__time_dependent_outward_current_x1_gate__x1 = rY[7]; + // Units: dimensionless; Initial value: 0.0001 + + + // Lookup table indexing + const bool _oob_0 = Cellbeeler_reuter_model_1977FromCellMLGRL1Opt_LookupTables::Instance()->CheckIndex0(var_chaste_interface__membrane__V); +// LCOV_EXCL_START + if (_oob_0) + EXCEPTION(DumpState("membrane_voltage outside lookup table range", rY , var_chaste_interface__environment__time)); +// LCOV_EXCL_STOP + const double* const _lt_0_row = Cellbeeler_reuter_model_1977FromCellMLGRL1Opt_LookupTables::Instance()->IndexTable0(var_chaste_interface__membrane__V); + + // Mathematics + const double d_dt_chaste_interface_var_slow_inward_current_d_gate__d = 0.095000000000000001 * (1 - var_chaste_interface__slow_inward_current_d_gate__d) * _lt_0_row[4] / (_lt_0_row[3]) - 0.070000000000000007 * var_chaste_interface__slow_inward_current_d_gate__d * _lt_0_row[6] / (_lt_0_row[5]); // 1 / ms + const double d_dt_chaste_interface_var_slow_inward_current_f_gate__f = 0.012 * (1 - var_chaste_interface__slow_inward_current_f_gate__f) * _lt_0_row[8] / (_lt_0_row[7]) - 0.0064999999999999997 * var_chaste_interface__slow_inward_current_f_gate__f * _lt_0_row[10] / (_lt_0_row[9]); // 1 / ms + const double var_slow_inward_current__i_s = (-7.6990712032745758 + 13.028700000000001 * log(var_chaste_interface__slow_inward_current__Cai) + var_chaste_interface__membrane__V) * mParameters[0] * var_chaste_interface__slow_inward_current_d_gate__d * var_chaste_interface__slow_inward_current_f_gate__f; // uA_per_mm2 + const double d_dt_chaste_interface_var_slow_inward_current__Cai = 7.0000000000000007e-6 - 0.070000000000000007 * var_chaste_interface__slow_inward_current__Cai - 0.01 * var_slow_inward_current__i_s; // concentration_units / ms + const double var_sodium_current_h_gate__alpha_h = 0.126 * exp(-19.25 + 0.25 * mParameters[4] - 0.25 * var_chaste_interface__membrane__V); // per_ms + const double var_sodium_current_h_gate__beta_h = 1.7 / (1 + exp(-1.845 + 0.082000000000000003 * mParameters[4] - 0.082000000000000003 * var_chaste_interface__membrane__V)); // per_ms + const double d_dt_chaste_interface_var_sodium_current_h_gate__h = (var_sodium_current_h_gate__alpha_h + var_sodium_current_h_gate__beta_h) * (-var_chaste_interface__sodium_current_h_gate__h + 0.01 * mParameters[3] + (1 - 0.01 * mParameters[3]) * var_sodium_current_h_gate__alpha_h / (var_sodium_current_h_gate__alpha_h + var_sodium_current_h_gate__beta_h)); // 1 / ms + const double var_sodium_current_j_gate__alpha_j = 0.055 * exp(-19.5 + 0.25 * mParameters[4] - 0.25 * var_chaste_interface__membrane__V) / (1 + exp(-15.600000000000001 + 0.20000000000000001 * mParameters[4] - 0.20000000000000001 * var_chaste_interface__membrane__V)); // per_ms + const double var_sodium_current_j_gate__beta_j = 0.29999999999999999 / (1 + exp(-3.2000000000000002 + 0.10000000000000001 * mParameters[4] - 0.10000000000000001 * var_chaste_interface__membrane__V)); // per_ms + const double d_dt_chaste_interface_var_sodium_current_j_gate__j = (var_sodium_current_j_gate__alpha_j + var_sodium_current_j_gate__beta_j) * (-var_chaste_interface__sodium_current_j_gate__j + 0.01 * mParameters[3] + (1 - 0.01 * mParameters[3]) * var_sodium_current_j_gate__alpha_j / (var_sodium_current_j_gate__alpha_j + var_sodium_current_j_gate__beta_j)); // 1 / ms + const double d_dt_chaste_interface_var_sodium_current_m_gate__m = (1 - var_chaste_interface__sodium_current_m_gate__m) * _lt_0_row[11] - 40 * var_chaste_interface__sodium_current_m_gate__m * _lt_0_row[12]; // 1 / ms + const double d_dt_chaste_interface_var_time_dependent_outward_current_x1_gate__x1 = 0.00050000000000000001 * (1 - var_chaste_interface__time_dependent_outward_current_x1_gate__x1) * _lt_0_row[14] / (_lt_0_row[13]) - 0.0012999999999999999 * var_chaste_interface__time_dependent_outward_current_x1_gate__x1 * _lt_0_row[16] / (_lt_0_row[15]); // 1 / ms + + mEvalF[1] = d_dt_chaste_interface_var_slow_inward_current__Cai; + mPartialF[1] = EvaluatePartialDerivative1(var_chaste_interface__environment__time, rY, delta); + mEvalF[2] = d_dt_chaste_interface_var_sodium_current_m_gate__m; + mPartialF[2] = EvaluatePartialDerivative2(var_chaste_interface__environment__time, rY, delta); + mEvalF[3] = d_dt_chaste_interface_var_sodium_current_h_gate__h; + mPartialF[3] = EvaluatePartialDerivative3(var_chaste_interface__environment__time, rY, delta); + mEvalF[4] = d_dt_chaste_interface_var_sodium_current_j_gate__j; + mPartialF[4] = EvaluatePartialDerivative4(var_chaste_interface__environment__time, rY, delta); + mEvalF[5] = d_dt_chaste_interface_var_slow_inward_current_d_gate__d; + mPartialF[5] = EvaluatePartialDerivative5(var_chaste_interface__environment__time, rY, delta); + mEvalF[6] = d_dt_chaste_interface_var_slow_inward_current_f_gate__f; + mPartialF[6] = EvaluatePartialDerivative6(var_chaste_interface__environment__time, rY, delta); + mEvalF[7] = d_dt_chaste_interface_var_time_dependent_outward_current_x1_gate__x1; + mPartialF[7] = EvaluatePartialDerivative7(var_chaste_interface__environment__time, rY, delta); + + { + if (fabs(mPartialF[1]) < delta){ + rY[1] += mDt*d_dt_chaste_interface_var_slow_inward_current__Cai; + } + else + { + rY[1] += (d_dt_chaste_interface_var_slow_inward_current__Cai/mPartialF[1])*(exp(mPartialF[1]*mDt)-1.0); + } + + } + { + if (fabs(mPartialF[2]) < delta){ + rY[2] += mDt*d_dt_chaste_interface_var_sodium_current_m_gate__m; + } + else + { + rY[2] += (d_dt_chaste_interface_var_sodium_current_m_gate__m/mPartialF[2])*(exp(mPartialF[2]*mDt)-1.0); + } + + } + { + if (fabs(mPartialF[3]) < delta){ + rY[3] += mDt*d_dt_chaste_interface_var_sodium_current_h_gate__h; + } + else + { + rY[3] += (d_dt_chaste_interface_var_sodium_current_h_gate__h/mPartialF[3])*(exp(mPartialF[3]*mDt)-1.0); + } + + } + { + if (fabs(mPartialF[4]) < delta){ + rY[4] += mDt*d_dt_chaste_interface_var_sodium_current_j_gate__j; + } + else + { + rY[4] += (d_dt_chaste_interface_var_sodium_current_j_gate__j/mPartialF[4])*(exp(mPartialF[4]*mDt)-1.0); + } + + } + { + if (fabs(mPartialF[5]) < delta){ + rY[5] += mDt*d_dt_chaste_interface_var_slow_inward_current_d_gate__d; + } + else + { + rY[5] += (d_dt_chaste_interface_var_slow_inward_current_d_gate__d/mPartialF[5])*(exp(mPartialF[5]*mDt)-1.0); + } + + } + { + if (fabs(mPartialF[6]) < delta){ + rY[6] += mDt*d_dt_chaste_interface_var_slow_inward_current_f_gate__f; + } + else + { + rY[6] += (d_dt_chaste_interface_var_slow_inward_current_f_gate__f/mPartialF[6])*(exp(mPartialF[6]*mDt)-1.0); + } + + } + { + if (fabs(mPartialF[7]) < delta){ + rY[7] += mDt*d_dt_chaste_interface_var_time_dependent_outward_current_x1_gate__x1; + } + else + { + rY[7] += (d_dt_chaste_interface_var_time_dependent_outward_current_x1_gate__x1/mPartialF[7])*(exp(mPartialF[7]*mDt)-1.0); + } + + } + + } + + + double Cellbeeler_reuter_model_1977FromCellMLGRL1Opt::EvaluateYDerivative0(double var_chaste_interface__environment__time, std::vector& rY) + { + double d_dt_chaste_interface_var_membrane__V; + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: mV; Initial value: -84.624 + double var_chaste_interface__slow_inward_current__Cai = rY[1]; + // Units: concentration_units; Initial value: 0.0001 + double var_chaste_interface__sodium_current_m_gate__m = rY[2]; + // Units: dimensionless; Initial value: 0.011 + double var_chaste_interface__sodium_current_h_gate__h = rY[3]; + // Units: dimensionless; Initial value: 0.988 + double var_chaste_interface__sodium_current_j_gate__j = rY[4]; + // Units: dimensionless; Initial value: 0.975 + double var_chaste_interface__slow_inward_current_d_gate__d = rY[5]; + // Units: dimensionless; Initial value: 0.003 + double var_chaste_interface__slow_inward_current_f_gate__f = rY[6]; + // Units: dimensionless; Initial value: 0.994 + double var_chaste_interface__time_dependent_outward_current_x1_gate__x1 = rY[7]; + // Units: dimensionless; Initial value: 0.0001 + + + // Lookup table indexing + const bool _oob_0 = Cellbeeler_reuter_model_1977FromCellMLGRL1Opt_LookupTables::Instance()->CheckIndex0(var_chaste_interface__membrane__V); +// LCOV_EXCL_START + if (_oob_0) + EXCEPTION(DumpState("membrane_voltage outside lookup table range", rY , var_chaste_interface__environment__time)); +// LCOV_EXCL_STOP + const double* const _lt_0_row = Cellbeeler_reuter_model_1977FromCellMLGRL1Opt_LookupTables::Instance()->IndexTable0(var_chaste_interface__membrane__V); + + // Mathematics + const double var_slow_inward_current__i_s = (-7.6990712032745758 + 13.028700000000001 * log(var_chaste_interface__slow_inward_current__Cai) + var_chaste_interface__membrane__V) * mParameters[0] * var_chaste_interface__slow_inward_current_d_gate__d * var_chaste_interface__slow_inward_current_f_gate__f; // uA_per_mm2 + d_dt_chaste_interface_var_membrane__V = (-var_slow_inward_current__i_s - 0.0099999999999999985 * GetIntracellularAreaStimulus(var_chaste_interface__environment__time) - (3.0000000000000001e-5 + pow(var_chaste_interface__sodium_current_m_gate__m, 3) * mParameters[2] * var_chaste_interface__sodium_current_h_gate__h * var_chaste_interface__sodium_current_j_gate__j) * (-mParameters[7] + var_chaste_interface__membrane__V) - (_lt_0_row[2]) * mParameters[5] - (_lt_0_row[1]) * mParameters[6] * var_chaste_interface__time_dependent_outward_current_x1_gate__x1 / _lt_0_row[0]) / mParameters[1]; // mV / ms + + return d_dt_chaste_interface_var_membrane__V; + } + + double Cellbeeler_reuter_model_1977FromCellMLGRL1Opt::EvaluatePartialDerivative0(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: mV; Initial value: -84.624 + double var_chaste_interface__sodium_current_m_gate__m = rY[2]; + // Units: dimensionless; Initial value: 0.011 + double var_chaste_interface__sodium_current_h_gate__h = rY[3]; + // Units: dimensionless; Initial value: 0.988 + double var_chaste_interface__sodium_current_j_gate__j = rY[4]; + // Units: dimensionless; Initial value: 0.975 + double var_chaste_interface__slow_inward_current_d_gate__d = rY[5]; + // Units: dimensionless; Initial value: 0.003 + double var_chaste_interface__slow_inward_current_f_gate__f = rY[6]; + // Units: dimensionless; Initial value: 0.994 + double var_chaste_interface__time_dependent_outward_current_x1_gate__x1 = rY[7]; + // Units: dimensionless; Initial value: 0.0001 + + + + const double var_x0 = 1 / mParameters[1]; + const double var_x1 = 0.040000000000000001 * var_chaste_interface__membrane__V; + const double var_x2 = exp(2.1200000000000001 + var_x1); + const double var_x3 = exp(4.2400000000000002 + 0.080000000000000002 * var_chaste_interface__membrane__V); + const double var_x4 = var_x2 + var_x3; + const double var_x5 = exp(3.3999999999999999 + var_x1); + const double var_x6 = 0.16 * var_x5 / var_x4; + const double var_x7 = 4 * (-1 + var_x5) * (-0.040000000000000001 * var_x2 - 0.080000000000000002 * var_x3) / pow(var_x4, 2); + const double var_x8 = mParameters[0] * var_chaste_interface__slow_inward_current_f_gate__f; + const double var_x9 = var_x8 * var_chaste_interface__slow_inward_current_d_gate__d; + const double var_x10 = pow(var_chaste_interface__sodium_current_m_gate__m, 3); + const double var_x11 = var_x10 * mParameters[2] * var_chaste_interface__sodium_current_j_gate__j; + const double var_x12 = exp(3.0800000000000001 + var_x1); + const double var_x13 = 1 / exp(1.4000000000000001 + var_x1); + const double var_x14 = var_x13 * mParameters[6]; + const double var_x15 = -1 + var_x12; + const double var_x16 = 3.0000000000000001e-5 + var_x9 + var_x11 * var_chaste_interface__sodium_current_h_gate__h + 0.040000000000000001 * var_x12 * var_x14 * var_chaste_interface__time_dependent_outward_current_x1_gate__x1 - 0.040000000000000001 * var_x13 * var_x15 * mParameters[6] * var_chaste_interface__time_dependent_outward_current_x1_gate__x1; + const double var_x17 = 0.92000000000000004 + var_x1; + const double var_x18 = exp(-var_x17); + const double var_x19 = -1 + var_x18; + + partialF = (((var_x17 >= -9.9999999999999995e-8) && (var_x17 <= 9.9999999999999995e-8)) ? (var_x0 * (-var_x16 + (-0.10000000000000001 - var_x6 - var_x7) * mParameters[5])) : (var_x0 * (-var_x16 + (-var_x6 - var_x7 + 0.20000000000000001 / var_x19 + 0.20000000000000001 * var_x17 * var_x18 / pow(var_x19, 2)) * mParameters[5]))); + } + else + { + const double y_save = rY[0]; + rY[0] += delta; + const double temp = EvaluateYDerivative0(var_chaste_interface__environment__time, rY); + partialF = (temp-mEvalF[0])/delta; + rY[0] = y_save; + } + return partialF; + } + double Cellbeeler_reuter_model_1977FromCellMLGRL1Opt::EvaluateYDerivative1(double var_chaste_interface__environment__time, std::vector& rY) + { + + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: mV; Initial value: -84.624 + double var_chaste_interface__slow_inward_current__Cai = rY[1]; + // Units: concentration_units; Initial value: 0.0001 + double var_chaste_interface__slow_inward_current_d_gate__d = rY[5]; + // Units: dimensionless; Initial value: 0.003 + double var_chaste_interface__slow_inward_current_f_gate__f = rY[6]; + // Units: dimensionless; Initial value: 0.994 + + + + // Mathematics + const double var_slow_inward_current__i_s = (-7.6990712032745758 + 13.028700000000001 * log(var_chaste_interface__slow_inward_current__Cai) + var_chaste_interface__membrane__V) * mParameters[0] * var_chaste_interface__slow_inward_current_d_gate__d * var_chaste_interface__slow_inward_current_f_gate__f; // uA_per_mm2 + const double d_dt_chaste_interface_var_slow_inward_current__Cai = 7.0000000000000007e-6 - 0.070000000000000007 * var_chaste_interface__slow_inward_current__Cai - 0.01 * var_slow_inward_current__i_s; // concentration_units / ms + + return d_dt_chaste_interface_var_slow_inward_current__Cai; + } + + double Cellbeeler_reuter_model_1977FromCellMLGRL1Opt::EvaluatePartialDerivative1(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__slow_inward_current__Cai = rY[1]; + // Units: concentration_units; Initial value: 0.0001 + double var_chaste_interface__slow_inward_current_d_gate__d = rY[5]; + // Units: dimensionless; Initial value: 0.003 + double var_chaste_interface__slow_inward_current_f_gate__f = rY[6]; + // Units: dimensionless; Initial value: 0.994 + + + + const double var_x8 = mParameters[0] * var_chaste_interface__slow_inward_current_f_gate__f; + const double var_x9 = var_x8 * var_chaste_interface__slow_inward_current_d_gate__d; + const double var_x20 = var_x9 / var_chaste_interface__slow_inward_current__Cai; + + partialF = -0.070000000000000007 - 0.13028700000000001 * var_x20; + } + else + { + const double y_save = rY[1]; + rY[1] += delta; + const double temp = EvaluateYDerivative1(var_chaste_interface__environment__time, rY); + partialF = (temp-mEvalF[1])/delta; + rY[1] = y_save; + } + return partialF; + } + double Cellbeeler_reuter_model_1977FromCellMLGRL1Opt::EvaluateYDerivative2(double var_chaste_interface__environment__time, std::vector& rY) + { + + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: mV; Initial value: -84.624 + double var_chaste_interface__sodium_current_m_gate__m = rY[2]; + // Units: dimensionless; Initial value: 0.011 + + + // Lookup table indexing + const bool _oob_0 = Cellbeeler_reuter_model_1977FromCellMLGRL1Opt_LookupTables::Instance()->CheckIndex0(var_chaste_interface__membrane__V); +// LCOV_EXCL_START + if (_oob_0) + EXCEPTION(DumpState("membrane_voltage outside lookup table range", rY , var_chaste_interface__environment__time)); +// LCOV_EXCL_STOP + const double* const _lt_0_row = Cellbeeler_reuter_model_1977FromCellMLGRL1Opt_LookupTables::Instance()->IndexTable0(var_chaste_interface__membrane__V); + + // Mathematics + const double d_dt_chaste_interface_var_sodium_current_m_gate__m = (1 - var_chaste_interface__sodium_current_m_gate__m) * _lt_0_row[11] - 40 * var_chaste_interface__sodium_current_m_gate__m * _lt_0_row[12]; // 1 / ms + + return d_dt_chaste_interface_var_sodium_current_m_gate__m; + } + + double Cellbeeler_reuter_model_1977FromCellMLGRL1Opt::EvaluatePartialDerivative2(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: mV; Initial value: -84.624 + + + // Lookup table indexing + const bool _oob_0 = Cellbeeler_reuter_model_1977FromCellMLGRL1Opt_LookupTables::Instance()->CheckIndex0(var_chaste_interface__membrane__V); +// LCOV_EXCL_START + if (_oob_0) + EXCEPTION(DumpState("membrane_voltage outside lookup table range", rY , var_chaste_interface__environment__time)); +// LCOV_EXCL_STOP + const double* const _lt_0_row = Cellbeeler_reuter_model_1977FromCellMLGRL1Opt_LookupTables::Instance()->IndexTable0(var_chaste_interface__membrane__V); + + const double var_x27 = _lt_0_row[12]; + const double var_x28 = 0.10000000000000001 * var_chaste_interface__membrane__V; + const double var_x29 = 4.7000000000000002 + var_x28; + const double var_x30 = (var_x29 >= -9.9999999999999995e-8) && (var_x29 <= 9.9999999999999995e-8); + const double var_x31 = exp(-var_x29); + const double var_x32 = -1 + var_x31; + const double var_x33 = 1 / var_x32; + const double var_x35 = 40 * var_x27; + + partialF = ((var_x30) ? (-33.5 - var_x35 - 0.5 * var_chaste_interface__membrane__V) : (-var_x35 + 10 * var_x29 * var_x33)); + } + else + { + const double y_save = rY[2]; + rY[2] += delta; + const double temp = EvaluateYDerivative2(var_chaste_interface__environment__time, rY); + partialF = (temp-mEvalF[2])/delta; + rY[2] = y_save; + } + return partialF; + } + double Cellbeeler_reuter_model_1977FromCellMLGRL1Opt::EvaluateYDerivative3(double var_chaste_interface__environment__time, std::vector& rY) + { + + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: mV; Initial value: -84.624 + double var_chaste_interface__sodium_current_h_gate__h = rY[3]; + // Units: dimensionless; Initial value: 0.988 + + + + // Mathematics + const double var_sodium_current_h_gate__alpha_h = 0.126 * exp(-19.25 + 0.25 * mParameters[4] - 0.25 * var_chaste_interface__membrane__V); // per_ms + const double var_sodium_current_h_gate__beta_h = 1.7 / (1 + exp(-1.845 + 0.082000000000000003 * mParameters[4] - 0.082000000000000003 * var_chaste_interface__membrane__V)); // per_ms + const double d_dt_chaste_interface_var_sodium_current_h_gate__h = (var_sodium_current_h_gate__alpha_h + var_sodium_current_h_gate__beta_h) * (-var_chaste_interface__sodium_current_h_gate__h + 0.01 * mParameters[3] + (1 - 0.01 * mParameters[3]) * var_sodium_current_h_gate__alpha_h / (var_sodium_current_h_gate__alpha_h + var_sodium_current_h_gate__beta_h)); // 1 / ms + + return d_dt_chaste_interface_var_sodium_current_h_gate__h; + } + + double Cellbeeler_reuter_model_1977FromCellMLGRL1Opt::EvaluatePartialDerivative3(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: mV; Initial value: -84.624 + + + + const double var_x36 = 0.25 * var_chaste_interface__membrane__V - 0.25 * mParameters[4]; + const double var_x37 = exp(-19.25 - var_x36); + const double var_x38 = 0.126 * var_x37; + const double var_x39 = exp(-1.845 + 0.082000000000000003 * mParameters[4] - 0.082000000000000003 * var_chaste_interface__membrane__V); + const double var_x40 = 1 + var_x39; + const double var_x41 = 1 / var_x40; + const double var_x42 = var_x38 + 1.7 * var_x41; + + partialF = -var_x42; + } + else + { + const double y_save = rY[3]; + rY[3] += delta; + const double temp = EvaluateYDerivative3(var_chaste_interface__environment__time, rY); + partialF = (temp-mEvalF[3])/delta; + rY[3] = y_save; + } + return partialF; + } + double Cellbeeler_reuter_model_1977FromCellMLGRL1Opt::EvaluateYDerivative4(double var_chaste_interface__environment__time, std::vector& rY) + { + + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: mV; Initial value: -84.624 + double var_chaste_interface__sodium_current_j_gate__j = rY[4]; + // Units: dimensionless; Initial value: 0.975 + + + + // Mathematics + const double var_sodium_current_j_gate__alpha_j = 0.055 * exp(-19.5 + 0.25 * mParameters[4] - 0.25 * var_chaste_interface__membrane__V) / (1 + exp(-15.600000000000001 + 0.20000000000000001 * mParameters[4] - 0.20000000000000001 * var_chaste_interface__membrane__V)); // per_ms + const double var_sodium_current_j_gate__beta_j = 0.29999999999999999 / (1 + exp(-3.2000000000000002 + 0.10000000000000001 * mParameters[4] - 0.10000000000000001 * var_chaste_interface__membrane__V)); // per_ms + const double d_dt_chaste_interface_var_sodium_current_j_gate__j = (var_sodium_current_j_gate__alpha_j + var_sodium_current_j_gate__beta_j) * (-var_chaste_interface__sodium_current_j_gate__j + 0.01 * mParameters[3] + (1 - 0.01 * mParameters[3]) * var_sodium_current_j_gate__alpha_j / (var_sodium_current_j_gate__alpha_j + var_sodium_current_j_gate__beta_j)); // 1 / ms + + return d_dt_chaste_interface_var_sodium_current_j_gate__j; + } + + double Cellbeeler_reuter_model_1977FromCellMLGRL1Opt::EvaluatePartialDerivative4(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: mV; Initial value: -84.624 + + + + const double var_x28 = 0.10000000000000001 * var_chaste_interface__membrane__V; + const double var_x36 = 0.25 * var_chaste_interface__membrane__V - 0.25 * mParameters[4]; + const double var_x48 = exp(-3.2000000000000002 - var_x28 + 0.10000000000000001 * mParameters[4]); + const double var_x49 = 1 + var_x48; + const double var_x50 = 1 / var_x49; + const double var_x51 = exp(-15.600000000000001 + 0.20000000000000001 * mParameters[4] - 0.20000000000000001 * var_chaste_interface__membrane__V); + const double var_x52 = 1 + var_x51; + const double var_x53 = 1 / var_x52; + const double var_x54 = exp(-19.5 - var_x36); + const double var_x55 = var_x53 * var_x54; + const double var_x56 = 0.055 * var_x55; + const double var_x57 = var_x56 + 0.29999999999999999 * var_x50; + + partialF = -var_x57; + } + else + { + const double y_save = rY[4]; + rY[4] += delta; + const double temp = EvaluateYDerivative4(var_chaste_interface__environment__time, rY); + partialF = (temp-mEvalF[4])/delta; + rY[4] = y_save; + } + return partialF; + } + double Cellbeeler_reuter_model_1977FromCellMLGRL1Opt::EvaluateYDerivative5(double var_chaste_interface__environment__time, std::vector& rY) + { + + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: mV; Initial value: -84.624 + double var_chaste_interface__slow_inward_current_d_gate__d = rY[5]; + // Units: dimensionless; Initial value: 0.003 + + + // Lookup table indexing + const bool _oob_0 = Cellbeeler_reuter_model_1977FromCellMLGRL1Opt_LookupTables::Instance()->CheckIndex0(var_chaste_interface__membrane__V); +// LCOV_EXCL_START + if (_oob_0) + EXCEPTION(DumpState("membrane_voltage outside lookup table range", rY , var_chaste_interface__environment__time)); +// LCOV_EXCL_STOP + const double* const _lt_0_row = Cellbeeler_reuter_model_1977FromCellMLGRL1Opt_LookupTables::Instance()->IndexTable0(var_chaste_interface__membrane__V); + + // Mathematics + const double d_dt_chaste_interface_var_slow_inward_current_d_gate__d = 0.095000000000000001 * (1 - var_chaste_interface__slow_inward_current_d_gate__d) * _lt_0_row[4] / (_lt_0_row[3]) - 0.070000000000000007 * var_chaste_interface__slow_inward_current_d_gate__d * _lt_0_row[6] / (_lt_0_row[5]); // 1 / ms + + return d_dt_chaste_interface_var_slow_inward_current_d_gate__d; + } + + double Cellbeeler_reuter_model_1977FromCellMLGRL1Opt::EvaluatePartialDerivative5(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: mV; Initial value: -84.624 + + + // Lookup table indexing + const bool _oob_0 = Cellbeeler_reuter_model_1977FromCellMLGRL1Opt_LookupTables::Instance()->CheckIndex0(var_chaste_interface__membrane__V); +// LCOV_EXCL_START + if (_oob_0) + EXCEPTION(DumpState("membrane_voltage outside lookup table range", rY , var_chaste_interface__environment__time)); +// LCOV_EXCL_STOP + const double* const _lt_0_row = Cellbeeler_reuter_model_1977FromCellMLGRL1Opt_LookupTables::Instance()->IndexTable0(var_chaste_interface__membrane__V); + + const double var_x61 = exp(2.2000000000000002 + 0.050000000000000003 * var_chaste_interface__membrane__V); + const double var_x62 = 1 + var_x61; + const double var_x63 = _lt_0_row[6]; + const double var_x64 = var_x63 / var_x62; + const double var_x66 = exp(0.35997120230381568 - 0.071994240460763137 * var_chaste_interface__membrane__V); + const double var_x67 = 1 + var_x66; + const double var_x68 = _lt_0_row[4]; + const double var_x69 = var_x68 / var_x67; + + partialF = -0.070000000000000007 * var_x64 - 0.095000000000000001 * var_x69; + } + else + { + const double y_save = rY[5]; + rY[5] += delta; + const double temp = EvaluateYDerivative5(var_chaste_interface__environment__time, rY); + partialF = (temp-mEvalF[5])/delta; + rY[5] = y_save; + } + return partialF; + } + double Cellbeeler_reuter_model_1977FromCellMLGRL1Opt::EvaluateYDerivative6(double var_chaste_interface__environment__time, std::vector& rY) + { + + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: mV; Initial value: -84.624 + double var_chaste_interface__slow_inward_current_f_gate__f = rY[6]; + // Units: dimensionless; Initial value: 0.994 + + + // Lookup table indexing + const bool _oob_0 = Cellbeeler_reuter_model_1977FromCellMLGRL1Opt_LookupTables::Instance()->CheckIndex0(var_chaste_interface__membrane__V); +// LCOV_EXCL_START + if (_oob_0) + EXCEPTION(DumpState("membrane_voltage outside lookup table range", rY , var_chaste_interface__environment__time)); +// LCOV_EXCL_STOP + const double* const _lt_0_row = Cellbeeler_reuter_model_1977FromCellMLGRL1Opt_LookupTables::Instance()->IndexTable0(var_chaste_interface__membrane__V); + + // Mathematics + const double d_dt_chaste_interface_var_slow_inward_current_f_gate__f = 0.012 * (1 - var_chaste_interface__slow_inward_current_f_gate__f) * _lt_0_row[8] / (_lt_0_row[7]) - 0.0064999999999999997 * var_chaste_interface__slow_inward_current_f_gate__f * _lt_0_row[10] / (_lt_0_row[9]); // 1 / ms + + return d_dt_chaste_interface_var_slow_inward_current_f_gate__f; + } + + double Cellbeeler_reuter_model_1977FromCellMLGRL1Opt::EvaluatePartialDerivative6(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: mV; Initial value: -84.624 + + + // Lookup table indexing + const bool _oob_0 = Cellbeeler_reuter_model_1977FromCellMLGRL1Opt_LookupTables::Instance()->CheckIndex0(var_chaste_interface__membrane__V); +// LCOV_EXCL_START + if (_oob_0) + EXCEPTION(DumpState("membrane_voltage outside lookup table range", rY , var_chaste_interface__environment__time)); +// LCOV_EXCL_STOP + const double* const _lt_0_row = Cellbeeler_reuter_model_1977FromCellMLGRL1Opt_LookupTables::Instance()->IndexTable0(var_chaste_interface__membrane__V); + + const double var_x71 = exp(4.197901049475262 + 0.14992503748125938 * var_chaste_interface__membrane__V); + const double var_x72 = 1 + var_x71; + const double var_x73 = _lt_0_row[8]; + const double var_x74 = var_x73 / var_x72; + const double var_x75 = exp(-6 - 0.20000000000000001 * var_chaste_interface__membrane__V); + const double var_x76 = 1 + var_x75; + const double var_x77 = 1 / var_x76; + const double var_x78 = _lt_0_row[10]; + + partialF = -0.012 * var_x74 - 0.0064999999999999997 * var_x77 * var_x78; + } + else + { + const double y_save = rY[6]; + rY[6] += delta; + const double temp = EvaluateYDerivative6(var_chaste_interface__environment__time, rY); + partialF = (temp-mEvalF[6])/delta; + rY[6] = y_save; + } + return partialF; + } + double Cellbeeler_reuter_model_1977FromCellMLGRL1Opt::EvaluateYDerivative7(double var_chaste_interface__environment__time, std::vector& rY) + { + + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: mV; Initial value: -84.624 + double var_chaste_interface__time_dependent_outward_current_x1_gate__x1 = rY[7]; + // Units: dimensionless; Initial value: 0.0001 + + + // Lookup table indexing + const bool _oob_0 = Cellbeeler_reuter_model_1977FromCellMLGRL1Opt_LookupTables::Instance()->CheckIndex0(var_chaste_interface__membrane__V); +// LCOV_EXCL_START + if (_oob_0) + EXCEPTION(DumpState("membrane_voltage outside lookup table range", rY , var_chaste_interface__environment__time)); +// LCOV_EXCL_STOP + const double* const _lt_0_row = Cellbeeler_reuter_model_1977FromCellMLGRL1Opt_LookupTables::Instance()->IndexTable0(var_chaste_interface__membrane__V); + + // Mathematics + const double d_dt_chaste_interface_var_time_dependent_outward_current_x1_gate__x1 = 0.00050000000000000001 * (1 - var_chaste_interface__time_dependent_outward_current_x1_gate__x1) * _lt_0_row[14] / (_lt_0_row[13]) - 0.0012999999999999999 * var_chaste_interface__time_dependent_outward_current_x1_gate__x1 * _lt_0_row[16] / (_lt_0_row[15]); // 1 / ms + + return d_dt_chaste_interface_var_time_dependent_outward_current_x1_gate__x1; + } + + double Cellbeeler_reuter_model_1977FromCellMLGRL1Opt::EvaluatePartialDerivative7(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: mV; Initial value: -84.624 + + + // Lookup table indexing + const bool _oob_0 = Cellbeeler_reuter_model_1977FromCellMLGRL1Opt_LookupTables::Instance()->CheckIndex0(var_chaste_interface__membrane__V); +// LCOV_EXCL_START + if (_oob_0) + EXCEPTION(DumpState("membrane_voltage outside lookup table range", rY , var_chaste_interface__environment__time)); +// LCOV_EXCL_STOP + const double* const _lt_0_row = Cellbeeler_reuter_model_1977FromCellMLGRL1Opt_LookupTables::Instance()->IndexTable0(var_chaste_interface__membrane__V); + + const double var_x79 = exp(-0.80000000000000004 - 0.040000000000000001 * var_chaste_interface__membrane__V); + const double var_x80 = 1 + var_x79; + const double var_x81 = _lt_0_row[16]; + const double var_x82 = var_x81 / var_x80; + const double var_x84 = exp(2.8571428571428572 + 0.057142857142857141 * var_chaste_interface__membrane__V); + const double var_x85 = 1 + var_x84; + const double var_x86 = _lt_0_row[14]; + const double var_x87 = var_x86 / var_x85; + + partialF = -0.00050000000000000001 * var_x87 - 0.0012999999999999999 * var_x82; + } + else + { + const double y_save = rY[7]; + rY[7] += delta; + const double temp = EvaluateYDerivative7(var_chaste_interface__environment__time, rY); + partialF = (temp-mEvalF[7])/delta; + rY[7] = y_save; + } + return partialF; + } + + std::vector Cellbeeler_reuter_model_1977FromCellMLGRL1Opt::ComputeDerivedQuantities(double var_chaste_interface__environment__time, const std::vector & rY) + { + // Inputs: + // Time units: millisecond + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: mV; Initial value: -84.624 + double var_chaste_interface__slow_inward_current__Cai = rY[1]; + // Units: concentration_units; Initial value: 0.0001 + double var_chaste_interface__sodium_current_m_gate__m = rY[2]; + // Units: dimensionless; Initial value: 0.011 + double var_chaste_interface__sodium_current_h_gate__h = rY[3]; + // Units: dimensionless; Initial value: 0.988 + double var_chaste_interface__sodium_current_j_gate__j = rY[4]; + // Units: dimensionless; Initial value: 0.975 + double var_chaste_interface__slow_inward_current_d_gate__d = rY[5]; + // Units: dimensionless; Initial value: 0.003 + double var_chaste_interface__slow_inward_current_f_gate__f = rY[6]; + // Units: dimensionless; Initial value: 0.994 + double var_chaste_interface__time_dependent_outward_current_x1_gate__x1 = rY[7]; + // Units: dimensionless; Initial value: 0.0001 + + // Lookup table indexing + const bool _oob_0 = Cellbeeler_reuter_model_1977FromCellMLGRL1Opt_LookupTables::Instance()->CheckIndex0(var_chaste_interface__membrane__V); +// LCOV_EXCL_START + if (_oob_0) + EXCEPTION(DumpState("membrane_voltage outside lookup table range", rY , var_chaste_interface__environment__time)); +// LCOV_EXCL_STOP + const double* const _lt_0_row = Cellbeeler_reuter_model_1977FromCellMLGRL1Opt_LookupTables::Instance()->IndexTable0(var_chaste_interface__membrane__V); + + // Mathematics + const double var_slow_inward_current__E_s = 7.6990712032745758 - 13.028700000000001 * log(var_chaste_interface__slow_inward_current__Cai); // mV + const double var_slow_inward_current__i_s = (-var_slow_inward_current__E_s + var_chaste_interface__membrane__V) * mParameters[0] * var_chaste_interface__slow_inward_current_d_gate__d * var_chaste_interface__slow_inward_current_f_gate__f; // uA_per_mm2 + const double var_slow_inward_current__i_s_converted = 100.00000000000001 * var_slow_inward_current__i_s; // uA_per_cm2 + const double var_sodium_current__g_Nac = 3.0000000000000001e-5; // mS_per_mm2 + const double var_sodium_current_h_gate__alpha_h = 0.126 * exp(-19.25 + 0.25 * mParameters[4] - 0.25 * var_chaste_interface__membrane__V); // per_ms + const double var_sodium_current_h_gate__beta_h = 1.7 / (1 + exp(-1.845 + 0.082000000000000003 * mParameters[4] - 0.082000000000000003 * var_chaste_interface__membrane__V)); // per_ms + const double var_sodium_current_h_gate__tau_h = 1 / (var_sodium_current_h_gate__alpha_h + var_sodium_current_h_gate__beta_h); // ms + const double var_sodium_current_j_gate__alpha_j = 0.055 * exp(-19.5 + 0.25 * mParameters[4] - 0.25 * var_chaste_interface__membrane__V) / (1 + exp(-15.600000000000001 + 0.20000000000000001 * mParameters[4] - 0.20000000000000001 * var_chaste_interface__membrane__V)); // per_ms + const double var_sodium_current_j_gate__beta_j = 0.29999999999999999 / (1 + exp(-3.2000000000000002 + 0.10000000000000001 * mParameters[4] - 0.10000000000000001 * var_chaste_interface__membrane__V)); // per_ms + const double var_sodium_current_j_gate__tau_j = 1 / (var_sodium_current_j_gate__alpha_j + var_sodium_current_j_gate__beta_j); // ms + const double var_sodium_current__i_Na = (-mParameters[7] + var_chaste_interface__membrane__V) * (pow(var_chaste_interface__sodium_current_m_gate__m, 3) * mParameters[2] * var_chaste_interface__sodium_current_h_gate__h * var_chaste_interface__sodium_current_j_gate__j + var_sodium_current__g_Nac); // uA_per_mm2 + const double var_sodium_current__i_Na_converted = 100.00000000000001 * var_sodium_current__i_Na; // uA_per_cm2 + const double var_stimulus_protocol__Istim_converted = -GetIntracellularAreaStimulus(var_chaste_interface__environment__time); // uA_per_cm2 + const double var_time_dependent_outward_current__i_x1 = (_lt_0_row[1]) * mParameters[6] * var_chaste_interface__time_dependent_outward_current_x1_gate__x1 / _lt_0_row[0]; // uA_per_mm2 + const double var_time_dependent_outward_current__i_x1_converted = 100.00000000000001 * var_time_dependent_outward_current__i_x1; // uA_per_cm2 + const double var_time_independent_outward_current__B = -0.040000000000000001; // per_mV + const double var_time_independent_outward_current__A = -0.20000000000000001 / var_time_independent_outward_current__B; // dimensionless + const double var_time_independent_outward_current__v0 = -23; // mV + const double var_time_independent_outward_current__U = (-var_time_independent_outward_current__v0 + var_chaste_interface__membrane__V) * var_time_independent_outward_current__B; // dimensionless + const double var_time_independent_outward_current__temp_current = (((var_time_independent_outward_current__U >= -9.9999999999999995e-8) && (var_time_independent_outward_current__U <= 9.9999999999999995e-8)) ? ((1 - 0.5 * var_time_independent_outward_current__U) * var_time_independent_outward_current__A) : (var_time_independent_outward_current__A * var_time_independent_outward_current__U / (-1 + exp(var_time_independent_outward_current__U)))); // dimensionless + const double var_time_independent_outward_current__i_K1 = (4 * (-1 + exp(3.3999999999999999 + 0.040000000000000001 * var_chaste_interface__membrane__V)) / (exp(2.1200000000000001 + 0.040000000000000001 * var_chaste_interface__membrane__V) + exp(4.2400000000000002 + 0.080000000000000002 * var_chaste_interface__membrane__V)) + var_time_independent_outward_current__temp_current) * mParameters[5]; // uA_per_mm2 + const double var_time_independent_outward_current__i_K1_converted = 100.00000000000001 * var_time_independent_outward_current__i_K1; // uA_per_cm2 + + std::vector dqs(8); + dqs[0] = var_slow_inward_current__i_s_converted; + dqs[1] = var_sodium_current__i_Na_converted; + dqs[2] = var_sodium_current_h_gate__tau_h; + dqs[3] = var_sodium_current_j_gate__tau_j; + dqs[4] = var_time_independent_outward_current__i_K1_converted; + dqs[5] = var_time_dependent_outward_current__i_x1_converted; + dqs[6] = var_stimulus_protocol__Istim_converted; + dqs[7] = var_chaste_interface__environment__time; + return dqs; + } + +template<> +void OdeSystemInformation::Initialise(void) +{ + this->mSystemName = "beeler_reuter_model_1977"; + this->mFreeVariableName = "time"; + this->mFreeVariableUnits = "ms"; + + // rY[0]: + this->mVariableNames.push_back("membrane_voltage"); + this->mVariableUnits.push_back("mV"); + this->mInitialConditions.push_back(-84.624); + + // rY[1]: + this->mVariableNames.push_back("cytosolic_calcium_concentration"); + this->mVariableUnits.push_back("concentration_units"); + this->mInitialConditions.push_back(0.0001); + + // rY[2]: + this->mVariableNames.push_back("membrane_fast_sodium_current_m_gate"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.011); + + // rY[3]: + this->mVariableNames.push_back("membrane_fast_sodium_current_h_gate"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.988); + + // rY[4]: + this->mVariableNames.push_back("membrane_fast_sodium_current_j_gate"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.975); + + // rY[5]: + this->mVariableNames.push_back("membrane_L_type_calcium_current_d_gate"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.003); + + // rY[6]: + this->mVariableNames.push_back("membrane_L_type_calcium_current_f_gate"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.994); + + // rY[7]: + this->mVariableNames.push_back("time_dependent_outward_current_x1_gate__x1"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.0001); + + // mParameters[0]: + this->mParameterNames.push_back("membrane_L_type_calcium_current_conductance"); + this->mParameterUnits.push_back("mS_per_mm2"); + + // mParameters[1]: + this->mParameterNames.push_back("membrane_capacitance"); + this->mParameterUnits.push_back("uF_per_mm2"); + + // mParameters[2]: + this->mParameterNames.push_back("membrane_fast_sodium_current_conductance"); + this->mParameterUnits.push_back("mS_per_mm2"); + + // mParameters[3]: + this->mParameterNames.push_back("membrane_fast_sodium_current_reduced_inactivation"); + this->mParameterUnits.push_back("dimensionless"); + + // mParameters[4]: + this->mParameterNames.push_back("membrane_fast_sodium_current_shift_inactivation"); + this->mParameterUnits.push_back("mV"); + + // mParameters[5]: + this->mParameterNames.push_back("membrane_inward_rectifier_potassium_current_conductance"); + this->mParameterUnits.push_back("uA_per_mm2"); + + // mParameters[6]: + this->mParameterNames.push_back("membrane_rapid_delayed_rectifier_potassium_current_conductance"); + this->mParameterUnits.push_back("uA_per_mm2"); + + // mParameters[7]: + this->mParameterNames.push_back("sodium_reversal_potential"); + this->mParameterUnits.push_back("mV"); + + // Derived Quantity index [0]: + this->mDerivedQuantityNames.push_back("membrane_L_type_calcium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [1]: + this->mDerivedQuantityNames.push_back("membrane_fast_sodium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [2]: + this->mDerivedQuantityNames.push_back("membrane_fast_sodium_current_h_gate_tau"); + this->mDerivedQuantityUnits.push_back("ms"); + + // Derived Quantity index [3]: + this->mDerivedQuantityNames.push_back("membrane_fast_sodium_current_j_gate_tau"); + this->mDerivedQuantityUnits.push_back("ms"); + + // Derived Quantity index [4]: + this->mDerivedQuantityNames.push_back("membrane_inward_rectifier_potassium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [5]: + this->mDerivedQuantityNames.push_back("membrane_rapid_delayed_rectifier_potassium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [6]: + this->mDerivedQuantityNames.push_back("membrane_stimulus_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [7]: + this->mDerivedQuantityNames.push_back("time"); + this->mDerivedQuantityUnits.push_back("ms"); + + this->mInitialised = true; +} + +// Serialization for Boost >= 1.36 +#include "SerializationExportWrapperForCpp.hpp" +CHASTE_CLASS_EXPORT(Cellbeeler_reuter_model_1977FromCellMLGRL1Opt) + diff --git a/chaste_codegen/tests/numerical/baseline/GRL1Opt/beeler_reuter_model_1977.hpp b/chaste_codegen/tests/numerical/baseline/GRL1Opt/beeler_reuter_model_1977.hpp new file mode 100644 index 00000000..a8897e42 --- /dev/null +++ b/chaste_codegen/tests/numerical/baseline/GRL1Opt/beeler_reuter_model_1977.hpp @@ -0,0 +1,104 @@ +#ifndef CELLBEELER_REUTER_MODEL_1977FROMCELLMLGRL1OPT_HPP_ +#define CELLBEELER_REUTER_MODEL_1977FROMCELLMLGRL1OPT_HPP_ + +//! @file +//! +//! This source file was generated from CellML by chaste_codegen version (version omitted as unimportant) +//! +//! Model: beeler_reuter_model_1977 +//! +//! Processed by chaste_codegen: https://github.com/ModellingWebLab/chaste-codegen +//! (translator: chaste_codegen, model type: GeneralizedRushLarsenFirstOrderOpt) +//! on (date omitted as unimportant) +//! +//! + +#include "ChasteSerialization.hpp" +#include +#include "AbstractStimulusFunction.hpp" +#include "AbstractGeneralizedRushLarsenCardiacCell.hpp" + +class Cellbeeler_reuter_model_1977FromCellMLGRL1Opt : public AbstractGeneralizedRushLarsenCardiacCell +{ + friend class boost::serialization::access; + template + void serialize(Archive & archive, const unsigned int version) + { + archive & boost::serialization::base_object(*this); + + } + + // + // Settable parameters and readable variables + // + + +private: +const bool is_concentration[8] = {false, true, false, false, false, false, false, false}; +const bool is_probability[8] = {false, false, true, true, true, true, true, false}; +public: + + boost::shared_ptr UseCellMLDefaultStimulus(); + double GetIntracellularCalciumConcentration(); + Cellbeeler_reuter_model_1977FromCellMLGRL1Opt(boost::shared_ptr /* unused; should be empty */, boost::shared_ptr pIntracellularStimulus); + ~Cellbeeler_reuter_model_1977FromCellMLGRL1Opt(); + void VerifyStateVariables(); + AbstractLookupTableCollection* GetLookupTableCollection(); + double GetIIonic(const std::vector* pStateVariables=NULL); + void UpdateTransmembranePotential(double var_chaste_interface__environment__time); + void ComputeOneStepExceptVoltage(double var_chaste_interface__environment__time); + + double EvaluateYDerivative0(double var_chaste_interface__environment__time, std::vector& rY); + double EvaluatePartialDerivative0(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative1(double var_chaste_interface__environment__time, std::vector& rY); + double EvaluatePartialDerivative1(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative2(double var_chaste_interface__environment__time, std::vector& rY); + double EvaluatePartialDerivative2(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative3(double var_chaste_interface__environment__time, std::vector& rY); + double EvaluatePartialDerivative3(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative4(double var_chaste_interface__environment__time, std::vector& rY); + double EvaluatePartialDerivative4(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative5(double var_chaste_interface__environment__time, std::vector& rY); + double EvaluatePartialDerivative5(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative6(double var_chaste_interface__environment__time, std::vector& rY); + double EvaluatePartialDerivative6(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative7(double var_chaste_interface__environment__time, std::vector& rY); + double EvaluatePartialDerivative7(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical=false); + + std::vector ComputeDerivedQuantities(double var_chaste_interface__environment__time, const std::vector & rY); +}; + +// Needs to be included last +#include "SerializationExportWrapper.hpp" +CHASTE_CLASS_EXPORT(Cellbeeler_reuter_model_1977FromCellMLGRL1Opt) + +namespace boost +{ + namespace serialization + { + template + inline void save_construct_data( + Archive & ar, const Cellbeeler_reuter_model_1977FromCellMLGRL1Opt * t, const unsigned int fileVersion) + { + const boost::shared_ptr p_solver = t->GetSolver(); + const boost::shared_ptr p_stimulus = t->GetStimulusFunction(); + ar << p_solver; + ar << p_stimulus; + } + + template + inline void load_construct_data( + Archive & ar, Cellbeeler_reuter_model_1977FromCellMLGRL1Opt * t, const unsigned int fileVersion) + { + boost::shared_ptr p_solver; + boost::shared_ptr p_stimulus; + ar >> p_solver; + ar >> p_stimulus; + ::new(t)Cellbeeler_reuter_model_1977FromCellMLGRL1Opt(p_solver, p_stimulus); + } + + } + +} + +#endif // CELLBEELER_REUTER_MODEL_1977FROMCELLMLGRL1OPT_HPP_ \ No newline at end of file diff --git a/chaste_codegen/tests/numerical/baseline/GRL1Opt/dynamic_matsuoka_model_2003.cpp b/chaste_codegen/tests/numerical/baseline/GRL1Opt/dynamic_matsuoka_model_2003.cpp new file mode 100644 index 00000000..357d7df8 --- /dev/null +++ b/chaste_codegen/tests/numerical/baseline/GRL1Opt/dynamic_matsuoka_model_2003.cpp @@ -0,0 +1,5080 @@ +//! @file +//! +//! This source file was generated from CellML by chaste_codegen version (version omitted as unimportant) +//! +//! Model: matsuoka_model_2003 +//! +//! Processed by chaste_codegen: https://github.com/ModellingWebLab/chaste-codegen +//! (translator: chaste_codegen, model type: GeneralizedRushLarsenFirstOrderOpt) +//! on (date omitted as unimportant) +//! +//! + +#include "dynamic_matsuoka_model_2003.hpp" +#include +#include +#include +#include +#include "Exception.hpp" +#include "OdeSystemInformation.hpp" +#include "RegularStimulus.hpp" +#include "HeartConfig.hpp" +#include "IsNan.hpp" +#include "MathsCustomFunctions.hpp" + +#include "ModelFactory.hpp" + +AbstractGeneralizedRushLarsenCardiacCell* Dynamicmatsuoka_model_2003FromCellMLGRL1Opt::CreateMethod(boost::shared_ptr p_solver, boost::shared_ptr p_stimulus) { + return new Dynamicmatsuoka_model_2003FromCellMLGRL1Opt(p_solver, p_stimulus); +} + +bool Dynamicmatsuoka_model_2003FromCellMLGRL1Opt::registered = ModelFactory::Register("dynamic_matsuoka_model_2003", "GeneralizedRushLarsenFirstOrderOpt", (ModelFactory::TCreateMethod)Dynamicmatsuoka_model_2003FromCellMLGRL1Opt::CreateMethod); + +class Dynamicmatsuoka_model_2003FromCellMLGRL1Opt_LookupTables : public AbstractLookupTableCollection +{ +public: + static Dynamicmatsuoka_model_2003FromCellMLGRL1Opt_LookupTables* Instance() + { + if (mpInstance.get() == NULL) + { + mpInstance.reset(new Dynamicmatsuoka_model_2003FromCellMLGRL1Opt_LookupTables); + } + return mpInstance.get(); + } + + void FreeMemory() + { + + if (_lookup_table_0) + { + delete[] _lookup_table_0; + _lookup_table_0 = NULL; + } + + mNeedsRegeneration.assign(mNeedsRegeneration.size(), true); + } + + // Row lookup methods + // using linear-interpolation + + double* _lookup_0_row(unsigned i, double _factor_) + { + for (unsigned j=0; j<41; j++) + { + const double y1 = _lookup_table_0[i][j]; + const double y2 = _lookup_table_0[i+1][j]; + _lookup_table_0_row[j] = y1 + (y2-y1)*_factor_; + } + return _lookup_table_0_row; + } + + + const double * IndexTable0(double var_chaste_interface__membrane__Vm) + { + const double _offset_0 = var_chaste_interface__membrane__Vm - mTableMins[0]; + const double _offset_0_over_table_step = _offset_0 * mTableStepInverses[0]; + const unsigned _table_index_0 = (unsigned)(_offset_0_over_table_step); + const double _factor_0 = _offset_0_over_table_step - _table_index_0; + const double* const _lt_0_row = Dynamicmatsuoka_model_2003FromCellMLGRL1Opt_LookupTables::Instance()->_lookup_0_row(_table_index_0, _factor_0); + return _lt_0_row; + } + + +// LCOV_EXCL_START + bool CheckIndex0(double& var_chaste_interface__membrane__Vm) + { + bool _oob_0 = false; + if (var_chaste_interface__membrane__Vm>mTableMaxs[0] || var_chaste_interface__membrane__Vm= 2){ + EXCEPTION("Lookup table 0 at ["<= 2){ + EXCEPTION("Lookup table 1 at ["<= 2){ + EXCEPTION("Lookup table 2 at ["<= 2){ + EXCEPTION("Lookup table 3 at ["<= 2){ + EXCEPTION("Lookup table 7 at ["< mpInstance; + + // Row lookup methods memory + double _lookup_table_0_row[41]; + + // Lookup tables + double (*_lookup_table_0)[41]; + int _lookup_table_0_num_misshit_piecewise[41] = {0}; + +}; + +std::shared_ptr Dynamicmatsuoka_model_2003FromCellMLGRL1Opt_LookupTables::mpInstance; + + + boost::shared_ptr Dynamicmatsuoka_model_2003FromCellMLGRL1Opt::UseCellMLDefaultStimulus() + { + // Use the default stimulus specified by CellML metadata + const double var_chaste_interface__membrane__stim_amplitude_converted = -4000 * HeartConfig::Instance()->GetCapacitance() / mParameters[9]; // uA_per_cm2 + const double var_chaste_interface__membrane__stim_duration = 2; // millisecond + const double var_chaste_interface__membrane__stim_period = 400; // millisecond + const double var_chaste_interface__membrane__stim_start = 100; // millisecond + boost::shared_ptr p_cellml_stim(new RegularStimulus( + -fabs(var_chaste_interface__membrane__stim_amplitude_converted), + var_chaste_interface__membrane__stim_duration, + var_chaste_interface__membrane__stim_period, + var_chaste_interface__membrane__stim_start + )); + mpIntracellularStimulus = p_cellml_stim; + return p_cellml_stim; + } + + Dynamicmatsuoka_model_2003FromCellMLGRL1Opt::Dynamicmatsuoka_model_2003FromCellMLGRL1Opt(boost::shared_ptr /* unused; should be empty */, boost::shared_ptr pIntracellularStimulus) + : AbstractGeneralizedRushLarsenCardiacCell( + 37, + 0, + pIntracellularStimulus) + { + // Time units: millisecond + // + this->mpSystemInfo = OdeSystemInformation::Instance(); + Init(); + + // We have a default stimulus specified in the CellML file metadata + this->mHasDefaultStimulusFromCellML = true; + + this->mParameters[0] = 459; // (var_SR_L_current__P_SR_L) [picoA_per_millimolar] + this->mParameters[1] = 62000; // (var_RyR_channel__P_RyR) [picoA_per_millimolar] + this->mParameters[2] = 1; // (var_RyR_channel__K_m_Ca_cyt) [millimolar] + this->mParameters[3] = 162500; // (var_SR_calcium_pump__i_max) [picoA] + this->mParameters[4] = 1; // (var_internal_ion_concentrations__conc_clamp) [dimensionless] + this->mParameters[5] = 1.8; // (var_external_ion_concentrations__Cao) [millimolar] + this->mParameters[6] = 5.4000000000000004; // (var_external_ion_concentrations__Ko) [millimolar] + this->mParameters[7] = 140; // (var_external_ion_concentrations__Nao) [millimolar] + this->mParameters[8] = 8712; // (var_L_type_Ca_channel__P_CaL) [picoA_per_millimolar] + this->mParameters[9] = 132; // (var_membrane__Cm) [picoF] + this->mParameters[10] = 2860; // (var_sodium_current__P_Na) [picoA_per_millimolar] + this->mParameters[11] = 1.1459999999999999; // (var_time_independent_potassium_current__P_K1_0) [nanoS_per_picoF] + this->mParameters[12] = 0.0086400000000000001; // (var_rapid_time_dependent_potassium_current__P_Kr) [nanoS_per_picoF] + this->mParameters[13] = 5.04; // (var_slow_time_dependent_potassium_current__P_Ks_K) [picoA_per_millimolar] + this->mParameters[14] = 6.8099999999999996; // (var_sodium_calcium_exchanger__P_NaCa) [picoA_per_picoF] + this->mParameters[15] = 0.033000000000000002; // (var_transient_outward_current__P_to_K) [picoA_per_millimolar] + } + + Dynamicmatsuoka_model_2003FromCellMLGRL1Opt::~Dynamicmatsuoka_model_2003FromCellMLGRL1Opt() + { + } + + AbstractLookupTableCollection* Dynamicmatsuoka_model_2003FromCellMLGRL1Opt::GetLookupTableCollection() + { + return Dynamicmatsuoka_model_2003FromCellMLGRL1Opt_LookupTables::Instance(); + } + + void Dynamicmatsuoka_model_2003FromCellMLGRL1Opt::VerifyStateVariables() + { + std::vector& rY = rGetStateVariables(); + std::string error_message = ""; + + for (unsigned i=0; i < 37; i++) + { + if(std::isnan(rY[i])) + { + error_message += "State variable " + this->rGetStateVariableNames()[i] + " is not a number\n"; + } + if(std::isinf(rY[i])) + { + error_message += "State variable " + this->rGetStateVariableNames()[i] + " has become INFINITE\n"; + } + if(this->is_concentration[i] && rY[i] < 0) + { + error_message += "Concentration " + this->rGetStateVariableNames()[i] + " below 0\n"; + } + if(this->is_probability[i] && rY[i] < 0) + { + error_message += "Probability " + this->rGetStateVariableNames()[i] + " below 0\n"; + } + if(this->is_probability[i] && rY[i] > 1) + { + error_message += "Probability " + this->rGetStateVariableNames()[i] + " above 1\n"; + } + } + if (error_message != ""){ + EXCEPTION(DumpState(error_message)); + } + } + + double Dynamicmatsuoka_model_2003FromCellMLGRL1Opt::GetIIonic(const std::vector* pStateVariables) + { + // For state variable interpolation (SVI) we read in interpolated state variables, + // otherwise for ionic current interpolation (ICI) we use the state variables of this model (node). + if (!pStateVariables) pStateVariables = &rGetStateVariables(); + const std::vector& rY = *pStateVariables; + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -85.95752434460744 + double var_chaste_interface__internal_ion_concentrations__Nai = rY[1]; + // Units: millimolar; Initial value: 4.925761439682025 + double var_chaste_interface__internal_ion_concentrations__Ki = rY[2]; + // Units: millimolar; Initial value: 143.1837333000449 + double var_chaste_interface__internal_ion_concentrations__Ca_Total = rY[3]; + // Units: millimolar; Initial value: 0.00040180173572968586 + double var_chaste_interface__ATP_production__ATPi = rY[4]; + // Units: millimolar; Initial value: 4.657102729020499 + double var_chaste_interface__sodium_current_voltage_dependent_gate__p_AP_Na = rY[5]; + // Units: dimensionless; Initial value: 1.779648367445368e-05 + double var_chaste_interface__sodium_current_ultra_slow_gate__y = rY[8]; + // Units: dimensionless; Initial value: 0.5861887862983165 + double var_chaste_interface__L_type_Ca_channel_voltage_dependent_gate__p_AP_CaL = rY[9]; + // Units: dimensionless; Initial value: 1.5445004166497696e-06 + double var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_U = rY[12]; + // Units: dimensionless; Initial value: 0.17246483915629204 + double var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_UCa = rY[13]; + // Units: dimensionless; Initial value: 6.098246017787626e-05 + double var_chaste_interface__L_type_Ca_channel_ultra_slow_gate__y = rY[15]; + // Units: dimensionless; Initial value: 0.9985266538252986 + double var_chaste_interface__T_type_Ca_channel_y1_gate__y1 = rY[16]; + // Units: dimensionless; Initial value: 1.6882718240109127e-05 + double var_chaste_interface__T_type_Ca_channel_y2_gate__y2 = rY[17]; + // Units: dimensionless; Initial value: 0.8585352091865849 + double var_chaste_interface__time_independent_potassium_current_y_gate__y = rY[18]; + // Units: dimensionless; Initial value: 0.6080573900752752 + double var_chaste_interface__rapid_time_dependent_potassium_current_y1_gate__y1 = rY[19]; + // Units: dimensionless; Initial value: 0.0018339931180983765 + double var_chaste_interface__rapid_time_dependent_potassium_current_y2_gate__y2 = rY[20]; + // Units: dimensionless; Initial value: 0.20443083454225305 + double var_chaste_interface__rapid_time_dependent_potassium_current_y3_gate__y3 = rY[21]; + // Units: dimensionless; Initial value: 0.967887666264921 + double var_chaste_interface__slow_time_dependent_potassium_current_y1_gate__y1 = rY[22]; + // Units: dimensionless; Initial value: 0.09738789658609195 + double var_chaste_interface__slow_time_dependent_potassium_current_y2_gate__y2 = rY[23]; + // Units: dimensionless; Initial value: 0.09745345578743213 + double var_chaste_interface__transient_outward_current_y1_gate__y1 = rY[24]; + // Units: dimensionless; Initial value: 0.0007956883250874798 + double var_chaste_interface__transient_outward_current_y2_gate__y2 = rY[25]; + // Units: dimensionless; Initial value: 0.9999125083105881 + double var_chaste_interface__sodium_calcium_exchanger_y_gate__y = rY[26]; + // Units: dimensionless; Initial value: 0.9891789193465331 + double var_chaste_interface__sodium_potassium_pump_y_gate__y = rY[27]; + // Units: dimensionless; Initial value: 0.5910747147428818 + + // Lookup table indexing + const bool _oob_0 = Dynamicmatsuoka_model_2003FromCellMLGRL1Opt_LookupTables::Instance()->CheckIndex0(var_chaste_interface__membrane__Vm); +// LCOV_EXCL_START + if (_oob_0) + EXCEPTION(DumpState("membrane_voltage outside lookup table range", rY)); +// LCOV_EXCL_STOP + const double* const _lt_0_row = Dynamicmatsuoka_model_2003FromCellMLGRL1Opt_LookupTables::Instance()->IndexTable0(var_chaste_interface__membrane__Vm); + + const double var_L_type_Ca_channel__p_open_CaL = (var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_U + var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_UCa) * var_chaste_interface__L_type_Ca_channel_ultra_slow_gate__y * var_chaste_interface__L_type_Ca_channel_voltage_dependent_gate__p_AP_CaL / (1 + 2.7439999999999993 / pow(var_chaste_interface__ATP_production__ATPi, 3)); // dimensionless + const double var_internal_ion_concentrations__Cai = -0.026190000000000001 + 0.5 * sqrt(pow((0.052380000000000003 - var_chaste_interface__internal_ion_concentrations__Ca_Total), 2) + 0.0095200000000000007 * var_chaste_interface__internal_ion_concentrations__Ca_Total) + 0.5 * var_chaste_interface__internal_ion_concentrations__Ca_Total; // millimolar + const double var_background_lCa_current__p_open = 1 / (1 + 1.7279999999999996e-9 / pow(var_internal_ion_concentrations__Cai, 3)); // dimensionless + const double var_constant_field_equations__CF_Ca = ((var_chaste_interface__membrane__Vm == 0) ? (-mParameters[5]) : (0.074870384603595908 * (-mParameters[5] * _lt_0_row[0] + var_internal_ion_concentrations__Cai) * var_chaste_interface__membrane__Vm / (_lt_0_row[1]))); // millimolar + const double var_constant_field_equations__CF_K = ((var_chaste_interface__membrane__Vm == 0) ? (var_chaste_interface__internal_ion_concentrations__Ki) : (0.037435192301797954 * (-mParameters[6] * _lt_0_row[2] + var_chaste_interface__internal_ion_concentrations__Ki) * var_chaste_interface__membrane__Vm / (_lt_0_row[3]))); // millimolar + const double var_constant_field_equations__CF_Na = ((var_chaste_interface__membrane__Vm == 0) ? (-mParameters[7]) : (0.037435192301797954 * (-mParameters[7] * _lt_0_row[2] + var_chaste_interface__internal_ion_concentrations__Nai) * var_chaste_interface__membrane__Vm / (_lt_0_row[3]))); // millimolar + const double var_time_independent_potassium_current__E_K = 26.712831923985377 * log(mParameters[6] / var_chaste_interface__internal_ion_concentrations__Ki); // millivolt + const double var_time_independent_potassium_current__lambda = 3 * (1 + exp(-2.4319999999999999 + 0.064000000000000001 * var_chaste_interface__membrane__Vm - 0.064000000000000001 * var_time_independent_potassium_current__E_K)) * exp(0.47999999999999998 + 0.048000000000000001 * var_time_independent_potassium_current__E_K - 0.048000000000000001 * var_chaste_interface__membrane__Vm) / (1 + exp(-2.1000000000000001 + 0.029999999999999999 * var_chaste_interface__membrane__Vm - 0.029999999999999999 * var_time_independent_potassium_current__E_K)); // per_millisecond + const double var_time_independent_potassium_current__mu = 0.75 * exp(-0.35000000000000003 + 0.035000000000000003 * var_chaste_interface__membrane__Vm - 0.035000000000000003 * var_time_independent_potassium_current__E_K) / (1 + exp(-2.1000000000000001 + 0.014999999999999999 * var_chaste_interface__membrane__Vm - 0.014999999999999999 * var_time_independent_potassium_current__E_K)); // per_millisecond + const double var_time_independent_potassium_current__fB = var_time_independent_potassium_current__mu / (var_time_independent_potassium_current__lambda + var_time_independent_potassium_current__mu); // dimensionless + const double var_time_independent_potassium_current__fO = var_time_independent_potassium_current__lambda / (var_time_independent_potassium_current__lambda + var_time_independent_potassium_current__mu); // dimensionless + const double var_membrane__i_tot = 0.38500000000000001 * var_constant_field_equations__CF_Na + 0.040000000000000001 * var_constant_field_equations__CF_Ca + 0.15400000000000003 * var_constant_field_equations__CF_K + 21 * (-0.040000000000000001 * (1 - var_chaste_interface__sodium_potassium_pump_y_gate__y) / (1 + 90.050628437051003 * pow((1 / (mParameters[7] * _lt_0_row[4])), 1.0600000000000001) * (1 + 4.560221410801109 * pow(mParameters[6], 1.1200000000000001))) + 0.37 * var_chaste_interface__sodium_potassium_pump_y_gate__y / ((1 + 0.094 / var_chaste_interface__ATP_production__ATPi) * (1 + 4.4045579125871104 * pow((1 / var_chaste_interface__internal_ion_concentrations__Nai), 1.0600000000000001) * (1 + 0.020000293738509214 * pow(var_chaste_interface__internal_ion_concentrations__Ki, 1.1200000000000001))))) * mParameters[9] + 0.11 * var_background_lCa_current__p_open * var_constant_field_equations__CF_K + 0.11 * var_background_lCa_current__p_open * var_constant_field_equations__CF_Na + mParameters[8] * var_L_type_Ca_channel__p_open_CaL * var_constant_field_equations__CF_Ca + (var_chaste_interface__sodium_calcium_exchanger_y_gate__y * _lt_0_row[5] / (1 + 669.921875 * (1 + 724.63768115942037 * var_internal_ion_concentrations__Cai) / pow(var_chaste_interface__internal_ion_concentrations__Nai, 3)) - (1 - var_chaste_interface__sodium_calcium_exchanger_y_gate__y) * _lt_0_row[6] / (1 + 669921.875 * (1 + 0.7246376811594204 * mParameters[5]) / pow(mParameters[7], 3))) * mParameters[9] * mParameters[14] + 612 * var_chaste_interface__T_type_Ca_channel_y1_gate__y1 * var_chaste_interface__T_type_Ca_channel_y2_gate__y2 * var_constant_field_equations__CF_Ca + 0.2016 * pow(var_chaste_interface__slow_time_dependent_potassium_current_y1_gate__y1, 2) * (0.10000000000000001 + 0.90000000000000002 * var_chaste_interface__slow_time_dependent_potassium_current_y2_gate__y2) * var_constant_field_equations__CF_Na + 0.00036499999999999998 * mParameters[8] * var_L_type_Ca_channel__p_open_CaL * var_constant_field_equations__CF_K + 1.8499999999999999e-5 * mParameters[8] * var_L_type_Ca_channel__p_open_CaL * var_constant_field_equations__CF_Na + 0.00297 * pow(var_chaste_interface__transient_outward_current_y1_gate__y1, 3) * var_constant_field_equations__CF_Na * var_chaste_interface__transient_outward_current_y2_gate__y2 + 44.047040000000003 * pow(mParameters[6], 0.23999999999999999) * (-var_time_independent_potassium_current__E_K + var_chaste_interface__membrane__Vm) / (1 + 99.999999999999986 * pow(var_chaste_interface__ATP_production__ATPi, 2)) + pow(var_chaste_interface__slow_time_dependent_potassium_current_y1_gate__y1, 2) * (0.10000000000000001 + 0.90000000000000002 * var_chaste_interface__slow_time_dependent_potassium_current_y2_gate__y2) * var_constant_field_equations__CF_K * mParameters[13] + pow(var_chaste_interface__transient_outward_current_y1_gate__y1, 3) * var_constant_field_equations__CF_K * mParameters[15] * var_chaste_interface__transient_outward_current_y2_gate__y2 + var_constant_field_equations__CF_Na * mParameters[10] * var_chaste_interface__sodium_current_ultra_slow_gate__y * var_chaste_interface__sodium_current_voltage_dependent_gate__p_AP_Na + 0.10000000000000001 * var_constant_field_equations__CF_K * mParameters[10] * var_chaste_interface__sodium_current_ultra_slow_gate__y * var_chaste_interface__sodium_current_voltage_dependent_gate__p_AP_Na + 0.71370912277944121 * pow(mParameters[6], 0.20000000000000001) * (-var_time_independent_potassium_current__E_K + var_chaste_interface__membrane__Vm) * (0.40000000000000002 * var_chaste_interface__rapid_time_dependent_potassium_current_y2_gate__y2 + 0.59999999999999998 * var_chaste_interface__rapid_time_dependent_potassium_current_y1_gate__y1) * mParameters[9] * mParameters[12] * var_chaste_interface__rapid_time_dependent_potassium_current_y3_gate__y3 + 0.50938071193859957 * pow(mParameters[6], 0.40000000000000002) * (-var_time_independent_potassium_current__E_K + var_chaste_interface__membrane__Vm) * (pow(var_time_independent_potassium_current__fO, 4) + 2 * pow(var_time_independent_potassium_current__fB, 2) * pow(var_time_independent_potassium_current__fO, 2) + 2.6666666666666665 * pow(var_time_independent_potassium_current__fO, 3) * var_time_independent_potassium_current__fB) * mParameters[9] * mParameters[11] * var_chaste_interface__time_independent_potassium_current_y_gate__y + ((var_chaste_interface__membrane__Vm == (-3)) ? (0.0010924717003124302 * pow(mParameters[6], 0.16) * var_constant_field_equations__CF_K) : (8.3986538766456042e-5 * pow(mParameters[6], 0.16) * (3 + var_chaste_interface__membrane__Vm) * var_constant_field_equations__CF_K / (_lt_0_row[7]))); // picoA + const double var_chaste_interface__i_ionic = HeartConfig::Instance()->GetCapacitance() * var_membrane__i_tot / mParameters[9]; // uA_per_cm2 + + const double i_ionic = var_chaste_interface__i_ionic; + EXCEPT_IF_NOT(!std::isnan(i_ionic)); + return i_ionic; + } + + void Dynamicmatsuoka_model_2003FromCellMLGRL1Opt::UpdateTransmembranePotential(double var_chaste_interface__environment__time) + { + std::vector& rY = rGetStateVariables(); + unsigned v_index = GetVoltageIndex(); + const double delta = 1e-8; + + double d_dt_chaste_interface_var_membrane__Vm; + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -85.95752434460744 + double var_chaste_interface__internal_ion_concentrations__Nai = rY[1]; + // Units: millimolar; Initial value: 4.925761439682025 + double var_chaste_interface__internal_ion_concentrations__Ki = rY[2]; + // Units: millimolar; Initial value: 143.1837333000449 + double var_chaste_interface__internal_ion_concentrations__Ca_Total = rY[3]; + // Units: millimolar; Initial value: 0.00040180173572968586 + double var_chaste_interface__ATP_production__ATPi = rY[4]; + // Units: millimolar; Initial value: 4.657102729020499 + double var_chaste_interface__sodium_current_voltage_dependent_gate__p_AP_Na = rY[5]; + // Units: dimensionless; Initial value: 1.779648367445368e-05 + double var_chaste_interface__sodium_current_ultra_slow_gate__y = rY[8]; + // Units: dimensionless; Initial value: 0.5861887862983165 + double var_chaste_interface__L_type_Ca_channel_voltage_dependent_gate__p_AP_CaL = rY[9]; + // Units: dimensionless; Initial value: 1.5445004166497696e-06 + double var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_U = rY[12]; + // Units: dimensionless; Initial value: 0.17246483915629204 + double var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_UCa = rY[13]; + // Units: dimensionless; Initial value: 6.098246017787626e-05 + double var_chaste_interface__L_type_Ca_channel_ultra_slow_gate__y = rY[15]; + // Units: dimensionless; Initial value: 0.9985266538252986 + double var_chaste_interface__T_type_Ca_channel_y1_gate__y1 = rY[16]; + // Units: dimensionless; Initial value: 1.6882718240109127e-05 + double var_chaste_interface__T_type_Ca_channel_y2_gate__y2 = rY[17]; + // Units: dimensionless; Initial value: 0.8585352091865849 + double var_chaste_interface__time_independent_potassium_current_y_gate__y = rY[18]; + // Units: dimensionless; Initial value: 0.6080573900752752 + double var_chaste_interface__rapid_time_dependent_potassium_current_y1_gate__y1 = rY[19]; + // Units: dimensionless; Initial value: 0.0018339931180983765 + double var_chaste_interface__rapid_time_dependent_potassium_current_y2_gate__y2 = rY[20]; + // Units: dimensionless; Initial value: 0.20443083454225305 + double var_chaste_interface__rapid_time_dependent_potassium_current_y3_gate__y3 = rY[21]; + // Units: dimensionless; Initial value: 0.967887666264921 + double var_chaste_interface__slow_time_dependent_potassium_current_y1_gate__y1 = rY[22]; + // Units: dimensionless; Initial value: 0.09738789658609195 + double var_chaste_interface__slow_time_dependent_potassium_current_y2_gate__y2 = rY[23]; + // Units: dimensionless; Initial value: 0.09745345578743213 + double var_chaste_interface__transient_outward_current_y1_gate__y1 = rY[24]; + // Units: dimensionless; Initial value: 0.0007956883250874798 + double var_chaste_interface__transient_outward_current_y2_gate__y2 = rY[25]; + // Units: dimensionless; Initial value: 0.9999125083105881 + double var_chaste_interface__sodium_calcium_exchanger_y_gate__y = rY[26]; + // Units: dimensionless; Initial value: 0.9891789193465331 + double var_chaste_interface__sodium_potassium_pump_y_gate__y = rY[27]; + // Units: dimensionless; Initial value: 0.5910747147428818 + + + // Lookup table indexing + const bool _oob_0 = Dynamicmatsuoka_model_2003FromCellMLGRL1Opt_LookupTables::Instance()->CheckIndex0(var_chaste_interface__membrane__Vm); +// LCOV_EXCL_START + if (_oob_0) + EXCEPTION(DumpState("membrane_voltage outside lookup table range", rY , var_chaste_interface__environment__time)); +// LCOV_EXCL_STOP + const double* const _lt_0_row = Dynamicmatsuoka_model_2003FromCellMLGRL1Opt_LookupTables::Instance()->IndexTable0(var_chaste_interface__membrane__Vm); + + // Mathematics + const double var_L_type_Ca_channel__p_open_CaL = (var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_U + var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_UCa) * var_chaste_interface__L_type_Ca_channel_ultra_slow_gate__y * var_chaste_interface__L_type_Ca_channel_voltage_dependent_gate__p_AP_CaL / (1 + 2.7439999999999993 / pow(var_chaste_interface__ATP_production__ATPi, 3)); // dimensionless + const double var_internal_ion_concentrations__Cai = -0.026190000000000001 + 0.5 * sqrt(pow((0.052380000000000003 - var_chaste_interface__internal_ion_concentrations__Ca_Total), 2) + 0.0095200000000000007 * var_chaste_interface__internal_ion_concentrations__Ca_Total) + 0.5 * var_chaste_interface__internal_ion_concentrations__Ca_Total; // millimolar + const double var_background_lCa_current__p_open = 1 / (1 + 1.7279999999999996e-9 / pow(var_internal_ion_concentrations__Cai, 3)); // dimensionless + const double var_constant_field_equations__CF_Ca = ((var_chaste_interface__membrane__Vm == 0) ? (-mParameters[5]) : (0.074870384603595908 * (-mParameters[5] * _lt_0_row[0] + var_internal_ion_concentrations__Cai) * var_chaste_interface__membrane__Vm / (_lt_0_row[1]))); // millimolar + const double var_L_type_Ca_channel__i_CaL_Ca = mParameters[8] * var_L_type_Ca_channel__p_open_CaL * var_constant_field_equations__CF_Ca; // picoA + const double var_T_type_Ca_channel__i_Ca_T = 612 * var_chaste_interface__T_type_Ca_channel_y1_gate__y1 * var_chaste_interface__T_type_Ca_channel_y2_gate__y2 * var_constant_field_equations__CF_Ca; // picoA + const double var_background_Cab_current__i_Cab = 0.040000000000000001 * var_constant_field_equations__CF_Ca; // picoA + const double var_constant_field_equations__CF_K = ((var_chaste_interface__membrane__Vm == 0) ? (var_chaste_interface__internal_ion_concentrations__Ki) : (0.037435192301797954 * (-mParameters[6] * _lt_0_row[2] + var_chaste_interface__internal_ion_concentrations__Ki) * var_chaste_interface__membrane__Vm / (_lt_0_row[3]))); // millimolar + const double var_L_type_Ca_channel__i_CaL_K = 0.00036499999999999998 * mParameters[8] * var_L_type_Ca_channel__p_open_CaL * var_constant_field_equations__CF_K; // picoA + const double var_background_Kpl_current__i_Kpl = ((var_chaste_interface__membrane__Vm == (-3)) ? (0.0010924717003124302 * pow(mParameters[6], 0.16) * var_constant_field_equations__CF_K) : (8.3986538766456042e-5 * pow(mParameters[6], 0.16) * (3 + var_chaste_interface__membrane__Vm) * var_constant_field_equations__CF_K / (_lt_0_row[7]))); // picoA + const double var_background_NSC_current__i_bNSC_K = 0.15400000000000003 * var_constant_field_equations__CF_K; // picoA + const double var_background_lCa_current__i_lCa_K = 0.11 * var_background_lCa_current__p_open * var_constant_field_equations__CF_K; // picoA + const double var_constant_field_equations__CF_Na = ((var_chaste_interface__membrane__Vm == 0) ? (-mParameters[7]) : (0.037435192301797954 * (-mParameters[7] * _lt_0_row[2] + var_chaste_interface__internal_ion_concentrations__Nai) * var_chaste_interface__membrane__Vm / (_lt_0_row[3]))); // millimolar + const double var_L_type_Ca_channel__i_CaL_Na = 1.8499999999999999e-5 * mParameters[8] * var_L_type_Ca_channel__p_open_CaL * var_constant_field_equations__CF_Na; // picoA + const double var_background_NSC_current__i_bNSC_Na = 0.38500000000000001 * var_constant_field_equations__CF_Na; // picoA + const double var_background_lCa_current__i_lCa_Na = 0.11 * var_background_lCa_current__p_open * var_constant_field_equations__CF_Na; // picoA + const double var_membrane__i_ext = 1 * GetIntracellularAreaStimulus(var_chaste_interface__environment__time) * mParameters[9] / HeartConfig::Instance()->GetCapacitance(); // picoA + const double var_slow_time_dependent_potassium_current__i_Ks_K = pow(var_chaste_interface__slow_time_dependent_potassium_current_y1_gate__y1, 2) * (0.10000000000000001 + 0.90000000000000002 * var_chaste_interface__slow_time_dependent_potassium_current_y2_gate__y2) * var_constant_field_equations__CF_K * mParameters[13]; // picoA + const double var_slow_time_dependent_potassium_current__i_Ks_Na = 0.2016 * pow(var_chaste_interface__slow_time_dependent_potassium_current_y1_gate__y1, 2) * (0.10000000000000001 + 0.90000000000000002 * var_chaste_interface__slow_time_dependent_potassium_current_y2_gate__y2) * var_constant_field_equations__CF_Na; // picoA + const double var_sodium_calcium_exchanger__k1 = _lt_0_row[26]; // per_millisecond + const double var_sodium_calcium_exchanger__k2 = _lt_0_row[27]; // per_millisecond + const double var_sodium_calcium_exchanger__p_E1Na = 1 / (1 + 669.921875 * (1 + 724.63768115942037 * var_internal_ion_concentrations__Cai) / pow(var_chaste_interface__internal_ion_concentrations__Nai, 3)); // dimensionless + const double var_sodium_calcium_exchanger__p_E2Na = 1 / (1 + 669921.875 * (1 + 0.7246376811594204 * mParameters[5]) / pow(mParameters[7], 3)); // dimensionless + const double var_sodium_calcium_exchanger__i_NaCa = (var_sodium_calcium_exchanger__k1 * var_sodium_calcium_exchanger__p_E1Na * var_chaste_interface__sodium_calcium_exchanger_y_gate__y - (1 - var_chaste_interface__sodium_calcium_exchanger_y_gate__y) * var_sodium_calcium_exchanger__k2 * var_sodium_calcium_exchanger__p_E2Na) * mParameters[9] * mParameters[14]; // picoA + const double var_sodium_current__i_Na_K = 0.10000000000000001 * var_constant_field_equations__CF_K * mParameters[10] * var_chaste_interface__sodium_current_ultra_slow_gate__y * var_chaste_interface__sodium_current_voltage_dependent_gate__p_AP_Na; // picoA + const double var_sodium_current__i_Na_Na = var_constant_field_equations__CF_Na * mParameters[10] * var_chaste_interface__sodium_current_ultra_slow_gate__y * var_chaste_interface__sodium_current_voltage_dependent_gate__p_AP_Na; // picoA + const double var_sodium_potassium_pump__Nao_Eff = mParameters[7] * _lt_0_row[4]; // millimolar + const double var_sodium_potassium_pump__k1 = 0.37 / (1 + 0.094 / var_chaste_interface__ATP_production__ATPi); // per_millisecond + const double var_sodium_potassium_pump__p_E1Na = 1 / (1 + 4.4045579125871104 * pow((1 / var_chaste_interface__internal_ion_concentrations__Nai), 1.0600000000000001) * (1 + 0.020000293738509214 * pow(var_chaste_interface__internal_ion_concentrations__Ki, 1.1200000000000001))); // dimensionless + const double var_sodium_potassium_pump__p_E2Na = 1 / (1 + 90.050628437051003 * pow((1 / var_sodium_potassium_pump__Nao_Eff), 1.0600000000000001) * (1 + 4.560221410801109 * pow(mParameters[6], 1.1200000000000001))); // dimensionless + const double var_sodium_potassium_pump__i_NaK = 21 * (-0.040000000000000001 * (1 - var_chaste_interface__sodium_potassium_pump_y_gate__y) * var_sodium_potassium_pump__p_E2Na + var_sodium_potassium_pump__k1 * var_sodium_potassium_pump__p_E1Na * var_chaste_interface__sodium_potassium_pump_y_gate__y) * mParameters[9]; // picoA + const double var_time_independent_potassium_current__E_K = 26.712831923985377 * log(mParameters[6] / var_chaste_interface__internal_ion_concentrations__Ki); // millivolt + const double var_background_KATP_current__i_KATP = 44.047040000000003 * pow(mParameters[6], 0.23999999999999999) * (-var_time_independent_potassium_current__E_K + var_chaste_interface__membrane__Vm) / (1 + 99.999999999999986 * pow(var_chaste_interface__ATP_production__ATPi, 2)); // picoA + const double var_rapid_time_dependent_potassium_current__i_Kr = 0.71370912277944121 * pow(mParameters[6], 0.20000000000000001) * (-var_time_independent_potassium_current__E_K + var_chaste_interface__membrane__Vm) * (0.40000000000000002 * var_chaste_interface__rapid_time_dependent_potassium_current_y2_gate__y2 + 0.59999999999999998 * var_chaste_interface__rapid_time_dependent_potassium_current_y1_gate__y1) * mParameters[9] * mParameters[12] * var_chaste_interface__rapid_time_dependent_potassium_current_y3_gate__y3; // picoA + const double var_time_independent_potassium_current__lambda = 3 * (1 + exp(-2.4319999999999999 + 0.064000000000000001 * var_chaste_interface__membrane__Vm - 0.064000000000000001 * var_time_independent_potassium_current__E_K)) * exp(0.47999999999999998 + 0.048000000000000001 * var_time_independent_potassium_current__E_K - 0.048000000000000001 * var_chaste_interface__membrane__Vm) / (1 + exp(-2.1000000000000001 + 0.029999999999999999 * var_chaste_interface__membrane__Vm - 0.029999999999999999 * var_time_independent_potassium_current__E_K)); // per_millisecond + const double var_time_independent_potassium_current__mu = 0.75 * exp(-0.35000000000000003 + 0.035000000000000003 * var_chaste_interface__membrane__Vm - 0.035000000000000003 * var_time_independent_potassium_current__E_K) / (1 + exp(-2.1000000000000001 + 0.014999999999999999 * var_chaste_interface__membrane__Vm - 0.014999999999999999 * var_time_independent_potassium_current__E_K)); // per_millisecond + const double var_time_independent_potassium_current__fB = var_time_independent_potassium_current__mu / (var_time_independent_potassium_current__lambda + var_time_independent_potassium_current__mu); // dimensionless + const double var_time_independent_potassium_current__fO = var_time_independent_potassium_current__lambda / (var_time_independent_potassium_current__lambda + var_time_independent_potassium_current__mu); // dimensionless + const double var_time_independent_potassium_current__i_K1 = 0.50938071193859957 * pow(mParameters[6], 0.40000000000000002) * (-var_time_independent_potassium_current__E_K + var_chaste_interface__membrane__Vm) * (pow(var_time_independent_potassium_current__fO, 4) + 2 * pow(var_time_independent_potassium_current__fB, 2) * pow(var_time_independent_potassium_current__fO, 2) + 2.6666666666666665 * pow(var_time_independent_potassium_current__fO, 3) * var_time_independent_potassium_current__fB) * mParameters[9] * mParameters[11] * var_chaste_interface__time_independent_potassium_current_y_gate__y; // picoA + const double var_transient_outward_current__i_to_K = pow(var_chaste_interface__transient_outward_current_y1_gate__y1, 3) * var_constant_field_equations__CF_K * mParameters[15] * var_chaste_interface__transient_outward_current_y2_gate__y2; // picoA + const double var_transient_outward_current__i_to_Na = 0.00297 * pow(var_chaste_interface__transient_outward_current_y1_gate__y1, 3) * var_constant_field_equations__CF_Na * var_chaste_interface__transient_outward_current_y2_gate__y2; // picoA + d_dt_chaste_interface_var_membrane__Vm = (-var_L_type_Ca_channel__i_CaL_Ca - var_L_type_Ca_channel__i_CaL_K - var_L_type_Ca_channel__i_CaL_Na - var_T_type_Ca_channel__i_Ca_T - var_background_Cab_current__i_Cab - var_background_KATP_current__i_KATP - var_background_Kpl_current__i_Kpl - var_background_NSC_current__i_bNSC_K - var_background_NSC_current__i_bNSC_Na - var_background_lCa_current__i_lCa_K - var_background_lCa_current__i_lCa_Na - var_membrane__i_ext - var_rapid_time_dependent_potassium_current__i_Kr - var_slow_time_dependent_potassium_current__i_Ks_K - var_slow_time_dependent_potassium_current__i_Ks_Na - var_sodium_calcium_exchanger__i_NaCa - var_sodium_current__i_Na_K - var_sodium_current__i_Na_Na - var_sodium_potassium_pump__i_NaK - var_time_independent_potassium_current__i_K1 - var_transient_outward_current__i_to_K - var_transient_outward_current__i_to_Na) / mParameters[9]; // millivolt / millisecond + + double evalF = d_dt_chaste_interface_var_membrane__Vm; + mEvalF[0] = d_dt_chaste_interface_var_membrane__Vm; + double partialF = EvaluatePartialDerivative0(var_chaste_interface__environment__time, rY, delta, true); + if (fabs(partialF) < delta) + { + rY[v_index] += evalF*mDt; + } + else + { + rY[v_index] += (evalF/partialF)*(exp(partialF*mDt)-1.0); + } + } + + void Dynamicmatsuoka_model_2003FromCellMLGRL1Opt::ComputeOneStepExceptVoltage(double var_chaste_interface__environment__time) + { + std::vector& rY = rGetStateVariables(); + const double delta = 1e-8; + + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -85.95752434460744 + double var_chaste_interface__internal_ion_concentrations__Nai = rY[1]; + // Units: millimolar; Initial value: 4.925761439682025 + double var_chaste_interface__internal_ion_concentrations__Ki = rY[2]; + // Units: millimolar; Initial value: 143.1837333000449 + double var_chaste_interface__internal_ion_concentrations__Ca_Total = rY[3]; + // Units: millimolar; Initial value: 0.00040180173572968586 + double var_chaste_interface__ATP_production__ATPi = rY[4]; + // Units: millimolar; Initial value: 4.657102729020499 + double var_chaste_interface__sodium_current_voltage_dependent_gate__p_AP_Na = rY[5]; + // Units: dimensionless; Initial value: 1.779648367445368e-05 + double var_chaste_interface__sodium_current_voltage_dependent_gate__p_RP_Na = rY[6]; + // Units: dimensionless; Initial value: 0.3556412697995689 + double var_chaste_interface__sodium_current_voltage_dependent_gate__p_AI_Na = rY[7]; + // Units: dimensionless; Initial value: 0.40285968661346977 + double var_chaste_interface__sodium_current_ultra_slow_gate__y = rY[8]; + // Units: dimensionless; Initial value: 0.5861887862983165 + double var_chaste_interface__L_type_Ca_channel_voltage_dependent_gate__p_AP_CaL = rY[9]; + // Units: dimensionless; Initial value: 1.5445004166497696e-06 + double var_chaste_interface__L_type_Ca_channel_voltage_dependent_gate__p_RP_CaL = rY[10]; + // Units: dimensionless; Initial value: 0.9968480629364956 + double var_chaste_interface__L_type_Ca_channel_voltage_dependent_gate__p_AI_CaL = rY[11]; + // Units: dimensionless; Initial value: 0.000877325391245903 + double var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_U = rY[12]; + // Units: dimensionless; Initial value: 0.17246483915629204 + double var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_UCa = rY[13]; + // Units: dimensionless; Initial value: 6.098246017787626e-05 + double var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_C = rY[14]; + // Units: dimensionless; Initial value: 0.4250747299372254 + double var_chaste_interface__L_type_Ca_channel_ultra_slow_gate__y = rY[15]; + // Units: dimensionless; Initial value: 0.9985266538252986 + double var_chaste_interface__T_type_Ca_channel_y1_gate__y1 = rY[16]; + // Units: dimensionless; Initial value: 1.6882718240109127e-05 + double var_chaste_interface__T_type_Ca_channel_y2_gate__y2 = rY[17]; + // Units: dimensionless; Initial value: 0.8585352091865849 + double var_chaste_interface__time_independent_potassium_current_y_gate__y = rY[18]; + // Units: dimensionless; Initial value: 0.6080573900752752 + double var_chaste_interface__rapid_time_dependent_potassium_current_y1_gate__y1 = rY[19]; + // Units: dimensionless; Initial value: 0.0018339931180983765 + double var_chaste_interface__rapid_time_dependent_potassium_current_y2_gate__y2 = rY[20]; + // Units: dimensionless; Initial value: 0.20443083454225305 + double var_chaste_interface__rapid_time_dependent_potassium_current_y3_gate__y3 = rY[21]; + // Units: dimensionless; Initial value: 0.967887666264921 + double var_chaste_interface__slow_time_dependent_potassium_current_y1_gate__y1 = rY[22]; + // Units: dimensionless; Initial value: 0.09738789658609195 + double var_chaste_interface__slow_time_dependent_potassium_current_y2_gate__y2 = rY[23]; + // Units: dimensionless; Initial value: 0.09745345578743213 + double var_chaste_interface__transient_outward_current_y1_gate__y1 = rY[24]; + // Units: dimensionless; Initial value: 0.0007956883250874798 + double var_chaste_interface__transient_outward_current_y2_gate__y2 = rY[25]; + // Units: dimensionless; Initial value: 0.9999125083105881 + double var_chaste_interface__sodium_calcium_exchanger_y_gate__y = rY[26]; + // Units: dimensionless; Initial value: 0.9891789193465331 + double var_chaste_interface__sodium_potassium_pump_y_gate__y = rY[27]; + // Units: dimensionless; Initial value: 0.5910747147428818 + double var_chaste_interface__SR_calcium_pump_y_gate__y = rY[28]; + // Units: dimensionless; Initial value: 0.46108441538480216 + double var_chaste_interface__RyR_channel__p_open_RyR = rY[29]; + // Units: dimensionless; Initial value: 0.00034314360001543243 + double var_chaste_interface__RyR_channel__p_close_RyR = rY[30]; + // Units: dimensionless; Initial value: 0.19135178123107768 + double var_chaste_interface__Ca_concentrations_in_SR__Ca_Total = rY[31]; + // Units: millimolar; Initial value: 9.455741736977666 + double var_chaste_interface__Ca_concentrations_in_SR__Caup = rY[32]; + // Units: millimolar; Initial value: 2.611712901567567 + double var_chaste_interface__NL_model__pCa = rY[33]; + // Units: dimensionless; Initial value: 0.02490898775497523 + double var_chaste_interface__NL_model__pCaCB = rY[34]; + // Units: dimensionless; Initial value: 0.001990153835322864 + double var_chaste_interface__NL_model__pCB = rY[35]; + // Units: dimensionless; Initial value: 0.00042941813853474524 + double var_chaste_interface__NL_model__X = rY[36]; + // Units: micrometre; Initial value: 0.9573749975411884 + + + // Lookup table indexing + const bool _oob_0 = Dynamicmatsuoka_model_2003FromCellMLGRL1Opt_LookupTables::Instance()->CheckIndex0(var_chaste_interface__membrane__Vm); +// LCOV_EXCL_START + if (_oob_0) + EXCEPTION(DumpState("membrane_voltage outside lookup table range", rY , var_chaste_interface__environment__time)); +// LCOV_EXCL_STOP + const double* const _lt_0_row = Dynamicmatsuoka_model_2003FromCellMLGRL1Opt_LookupTables::Instance()->IndexTable0(var_chaste_interface__membrane__Vm); + + // Mathematics + const double var_Ca_concentrations_in_SR__Carel = -5.4000000000000004 + 0.5 * var_chaste_interface__Ca_concentrations_in_SR__Ca_Total + 5.4000000000000004 * sqrt(pow((1 - 0.092592592592592587 * var_chaste_interface__Ca_concentrations_in_SR__Ca_Total), 2) + 0.027434842249657067 * var_chaste_interface__Ca_concentrations_in_SR__Ca_Total); // millimolar + const double var_L_type_Ca_channel_Ca_dependent_gate__p_CCa = 1 - var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_C - var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_U - var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_UCa; // dimensionless + const double var_L_type_Ca_channel__p_open_CaL = (var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_U + var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_UCa) * var_chaste_interface__L_type_Ca_channel_ultra_slow_gate__y * var_chaste_interface__L_type_Ca_channel_voltage_dependent_gate__p_AP_CaL / (1 + 2.7439999999999993 / pow(var_chaste_interface__ATP_production__ATPi, 3)); // dimensionless + const double var_L_type_Ca_channel_voltage_dependent_gate__p_RI_CaL = 1 - var_chaste_interface__L_type_Ca_channel_voltage_dependent_gate__p_AI_CaL - var_chaste_interface__L_type_Ca_channel_voltage_dependent_gate__p_AP_CaL - var_chaste_interface__L_type_Ca_channel_voltage_dependent_gate__p_RP_CaL; // dimensionless + const double d_dt_chaste_interface_var_NL_model__X = 1.1488559970494261 - 1.2 * var_chaste_interface__NL_model__X; // micrometre / millisecond + const double var_NL_model__Q_a = -0.0038999999999999998 * var_chaste_interface__NL_model__pCaCB + 0.0038999999999999998 * var_chaste_interface__NL_model__pCa * exp(-0.86212130841993795); // per_millisecond + const double var_NL_model__Q_d2 = 0.027 * pow(d_dt_chaste_interface_var_NL_model__X, 2) * var_chaste_interface__NL_model__pCaCB; // per_millisecond + const double var_SR_T_current__i_SR_T = 386 * var_chaste_interface__Ca_concentrations_in_SR__Caup - 386 * var_Ca_concentrations_in_SR__Carel; // picoA + const double var_SR_calcium_pump__k2 = 1 / (1 + 0.10000000000000001 / var_chaste_interface__ATP_production__ATPi); // per_millisecond + const double var_SR_calcium_pump__p_E1Ca = 1 / (1 + 0.080000000000000002 / var_chaste_interface__Ca_concentrations_in_SR__Caup); // dimensionless + const double var_internal_ion_concentrations__Cai = -0.026190000000000001 + 0.5 * sqrt(pow((0.052380000000000003 - var_chaste_interface__internal_ion_concentrations__Ca_Total), 2) + 0.0095200000000000007 * var_chaste_interface__internal_ion_concentrations__Ca_Total) + 0.5 * var_chaste_interface__internal_ion_concentrations__Ca_Total; // millimolar + const double var_NL_model__Q_b = -0.029999999999999999 * var_chaste_interface__NL_model__pCa + 39 * (1 - var_chaste_interface__NL_model__pCB - var_chaste_interface__NL_model__pCa - var_chaste_interface__NL_model__pCaCB) * var_internal_ion_concentrations__Cai; // per_millisecond + const double d_dt_chaste_interface_var_NL_model__pCa = -var_NL_model__Q_a + var_NL_model__Q_b; // 1 / millisecond + const double var_NL_model__Q_r = 0.029999999999999999 * var_chaste_interface__NL_model__pCaCB - 1560 * var_chaste_interface__NL_model__pCB * var_internal_ion_concentrations__Cai; // per_millisecond + const double d_dt_chaste_interface_var_NL_model__pCB = -0.12 * var_chaste_interface__NL_model__pCB - 0.027 * pow(d_dt_chaste_interface_var_NL_model__X, 2) * var_chaste_interface__NL_model__pCB + var_NL_model__Q_r; // 1 / millisecond + const double d_dt_chaste_interface_var_NL_model__pCaCB = -var_NL_model__Q_d2 - var_NL_model__Q_r + var_NL_model__Q_a; // 1 / millisecond + const double var_RyR_channel__i_RyR = (-var_internal_ion_concentrations__Cai + var_Ca_concentrations_in_SR__Carel) * mParameters[1] * var_chaste_interface__RyR_channel__p_open_RyR; // picoA + const double var_SR_L_current__i_SR_L = (-var_internal_ion_concentrations__Cai + var_chaste_interface__Ca_concentrations_in_SR__Caup) * mParameters[0]; // picoA + const double var_SR_calcium_pump__p_E2Ca = 1 / (1 + 0.00080000000000000004 / var_internal_ion_concentrations__Cai); // dimensionless + const double var_SR_calcium_pump__i_SR_U = (0.01 * var_SR_calcium_pump__p_E1Ca * var_chaste_interface__SR_calcium_pump_y_gate__y - (1 - var_chaste_interface__SR_calcium_pump_y_gate__y) * var_SR_calcium_pump__k2 * var_SR_calcium_pump__p_E2Ca) * mParameters[3]; // picoA + const double d_dt_chaste_interface_var_SR_calcium_pump_y_gate__y = (1 - var_chaste_interface__SR_calcium_pump_y_gate__y) * (0.01 - 0.01 * var_SR_calcium_pump__p_E2Ca + var_SR_calcium_pump__k2 * var_SR_calcium_pump__p_E2Ca) - (1 - 0.98999999999999999 * var_SR_calcium_pump__p_E1Ca) * var_chaste_interface__SR_calcium_pump_y_gate__y; // 1 / millisecond + const double var_background_lCa_current__p_open = 1 / (1 + 1.7279999999999996e-9 / pow(var_internal_ion_concentrations__Cai, 3)); // dimensionless + const double d_dt_chaste_interface_var_Ca_concentrations_in_SR__Ca_Total = 3.2387883511406234e-5 * var_SR_T_current__i_SR_T - 3.2387883511406234e-5 * var_RyR_channel__i_RyR; // millimolar / millisecond + const double d_dt_chaste_interface_var_Ca_concentrations_in_SR__Caup = -1.2955153404562494e-5 * var_SR_L_current__i_SR_L - 1.2955153404562494e-5 * var_SR_T_current__i_SR_T - 1.2955153404562494e-5 * var_SR_calcium_pump__i_SR_U; // millimolar / millisecond + const double d_dt_chaste_interface_var_L_type_Ca_channel_ultra_slow_gate__y = (1 - var_chaste_interface__L_type_Ca_channel_ultra_slow_gate__y) / (_lt_0_row[8]) - var_chaste_interface__L_type_Ca_channel_ultra_slow_gate__y / (_lt_0_row[9]); // 1 / millisecond + const double var_L_type_Ca_channel_voltage_dependent_gate__k_AI_RI = _lt_0_row[10]; // per_millisecond + const double var_L_type_Ca_channel_voltage_dependent_gate__k_AP_RP = _lt_0_row[11]; // per_millisecond + const double var_L_type_Ca_channel_voltage_dependent_gate__k_RI_AI = _lt_0_row[12]; // per_millisecond + const double d_dt_chaste_interface_var_L_type_Ca_channel_voltage_dependent_gate__p_AI_CaL = 0.0040000000000000001 * var_chaste_interface__L_type_Ca_channel_voltage_dependent_gate__p_AP_CaL + var_L_type_Ca_channel_voltage_dependent_gate__k_RI_AI * var_L_type_Ca_channel_voltage_dependent_gate__p_RI_CaL - (0.001 + var_L_type_Ca_channel_voltage_dependent_gate__k_AI_RI) * var_chaste_interface__L_type_Ca_channel_voltage_dependent_gate__p_AI_CaL; // 1 / millisecond + const double var_L_type_Ca_channel_voltage_dependent_gate__k_RP_AP = _lt_0_row[13]; // per_millisecond + const double d_dt_chaste_interface_var_L_type_Ca_channel_voltage_dependent_gate__p_AP_CaL = 0.001 * var_chaste_interface__L_type_Ca_channel_voltage_dependent_gate__p_AI_CaL + var_L_type_Ca_channel_voltage_dependent_gate__k_RP_AP * var_chaste_interface__L_type_Ca_channel_voltage_dependent_gate__p_RP_CaL - (0.0040000000000000001 + var_L_type_Ca_channel_voltage_dependent_gate__k_AP_RP) * var_chaste_interface__L_type_Ca_channel_voltage_dependent_gate__p_AP_CaL; // 1 / millisecond + const double var_L_type_Ca_channel_voltage_dependent_gate__k_RP_RI = 0.040000000000000001 / (1 + 0.25 * var_L_type_Ca_channel_voltage_dependent_gate__k_AP_RP * var_L_type_Ca_channel_voltage_dependent_gate__k_RI_AI / (var_L_type_Ca_channel_voltage_dependent_gate__k_AI_RI * var_L_type_Ca_channel_voltage_dependent_gate__k_RP_AP)); // per_millisecond + const double d_dt_chaste_interface_var_L_type_Ca_channel_voltage_dependent_gate__p_RP_CaL = (0.040000000000000001 - var_L_type_Ca_channel_voltage_dependent_gate__k_RP_RI) * var_L_type_Ca_channel_voltage_dependent_gate__p_RI_CaL + var_L_type_Ca_channel_voltage_dependent_gate__k_AP_RP * var_chaste_interface__L_type_Ca_channel_voltage_dependent_gate__p_AP_CaL - (var_L_type_Ca_channel_voltage_dependent_gate__k_RP_AP + var_L_type_Ca_channel_voltage_dependent_gate__k_RP_RI) * var_chaste_interface__L_type_Ca_channel_voltage_dependent_gate__p_RP_CaL; // 1 / millisecond + const double d_dt_chaste_interface_var_T_type_Ca_channel_y1_gate__y1 = (1 - var_chaste_interface__T_type_Ca_channel_y1_gate__y1) / (_lt_0_row[14]) - var_chaste_interface__T_type_Ca_channel_y1_gate__y1 / (_lt_0_row[15]); // 1 / millisecond + const double d_dt_chaste_interface_var_T_type_Ca_channel_y2_gate__y2 = (1 - var_chaste_interface__T_type_Ca_channel_y2_gate__y2) / (_lt_0_row[16]) - var_chaste_interface__T_type_Ca_channel_y2_gate__y2 / (_lt_0_row[17]); // 1 / millisecond + const double var_constant_field_equations__CF_Ca = ((var_chaste_interface__membrane__Vm == 0) ? (-mParameters[5]) : (0.074870384603595908 * (-mParameters[5] * _lt_0_row[0] + var_internal_ion_concentrations__Cai) * var_chaste_interface__membrane__Vm / (_lt_0_row[1]))); // millimolar + const double var_L_type_Ca_channel__i_CaL_Ca = mParameters[8] * var_L_type_Ca_channel__p_open_CaL * var_constant_field_equations__CF_Ca; // picoA + const double var_L_type_Ca_channel_Ca_dependent_gate__iCaL = 0.067599999999999993 * var_constant_field_equations__CF_Ca; // picoA + const double var_L_type_Ca_channel_Ca_dependent_gate__Cacm = -0.29999999999999999 * var_L_type_Ca_channel_Ca_dependent_gate__iCaL + var_internal_ion_concentrations__Cai; // millimolar + const double d_dt_chaste_interface_var_L_type_Ca_channel_Ca_dependent_gate__p_C = 0.34999999999999998 * var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_U + 0.0041999999999999997 * var_L_type_Ca_channel_Ca_dependent_gate__p_CCa - (0.14299999999999999 + 6.9539999999999997 * var_L_type_Ca_channel_Ca_dependent_gate__Cacm * var_chaste_interface__L_type_Ca_channel_voltage_dependent_gate__p_AP_CaL) * var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_C; // 1 / millisecond + const double var_L_type_Ca_channel_Ca_dependent_gate__k_UUCa_Ca = 6.9539999999999997 * (1 - var_chaste_interface__L_type_Ca_channel_voltage_dependent_gate__p_AP_CaL) * var_internal_ion_concentrations__Cai + 6.9539999999999997 * var_L_type_Ca_channel_Ca_dependent_gate__Cacm * var_chaste_interface__L_type_Ca_channel_voltage_dependent_gate__p_AP_CaL; // per_millisecond + const double d_dt_chaste_interface_var_L_type_Ca_channel_Ca_dependent_gate__p_U = 0.14299999999999999 * var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_C + 2.0019999999999998 * var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_UCa - (0.34999999999999998 + var_L_type_Ca_channel_Ca_dependent_gate__k_UUCa_Ca) * var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_U; // 1 / millisecond + const double d_dt_chaste_interface_var_L_type_Ca_channel_Ca_dependent_gate__p_UCa = 0.00029999999999999997 * var_L_type_Ca_channel_Ca_dependent_gate__p_CCa - 2.3519999999999999 * var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_UCa + var_L_type_Ca_channel_Ca_dependent_gate__k_UUCa_Ca * var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_U; // 1 / millisecond + const double var_RyR_channel__k1 = 280000 * pow(var_internal_ion_concentrations__Cai, 2) / pow(mParameters[2], 2) - 150 * var_L_type_Ca_channel__p_open_CaL * var_L_type_Ca_channel_Ca_dependent_gate__iCaL; // per_millisecond + const double d_dt_chaste_interface_var_RyR_channel__p_close_RyR = -(0.00084900000000000004 + var_RyR_channel__k1) * var_chaste_interface__RyR_channel__p_close_RyR + 0.000377 * pow(var_Ca_concentrations_in_SR__Carel, 2) * (1 - var_chaste_interface__RyR_channel__p_close_RyR - var_chaste_interface__RyR_channel__p_open_RyR); // 1 / millisecond + const double d_dt_chaste_interface_var_RyR_channel__p_open_RyR = var_RyR_channel__k1 * var_chaste_interface__RyR_channel__p_close_RyR - 0.080000000000000002 * var_chaste_interface__RyR_channel__p_open_RyR / (1 + 0.35999999999999999 / var_Ca_concentrations_in_SR__Carel); // 1 / millisecond + const double var_T_type_Ca_channel__i_Ca_T = 612 * var_chaste_interface__T_type_Ca_channel_y1_gate__y1 * var_chaste_interface__T_type_Ca_channel_y2_gate__y2 * var_constant_field_equations__CF_Ca; // picoA + const double var_background_Cab_current__i_Cab = 0.040000000000000001 * var_constant_field_equations__CF_Ca; // picoA + const double var_constant_field_equations__CF_K = ((var_chaste_interface__membrane__Vm == 0) ? (var_chaste_interface__internal_ion_concentrations__Ki) : (0.037435192301797954 * (-mParameters[6] * _lt_0_row[2] + var_chaste_interface__internal_ion_concentrations__Ki) * var_chaste_interface__membrane__Vm / (_lt_0_row[3]))); // millimolar + const double var_L_type_Ca_channel__i_CaL_K = 0.00036499999999999998 * mParameters[8] * var_L_type_Ca_channel__p_open_CaL * var_constant_field_equations__CF_K; // picoA + const double var_background_Kpl_current__i_Kpl = ((var_chaste_interface__membrane__Vm == (-3)) ? (0.0010924717003124302 * pow(mParameters[6], 0.16) * var_constant_field_equations__CF_K) : (8.3986538766456042e-5 * pow(mParameters[6], 0.16) * (3 + var_chaste_interface__membrane__Vm) * var_constant_field_equations__CF_K / (_lt_0_row[7]))); // picoA + const double var_background_NSC_current__i_bNSC_K = 0.15400000000000003 * var_constant_field_equations__CF_K; // picoA + const double var_background_lCa_current__i_lCa_K = 0.11 * var_background_lCa_current__p_open * var_constant_field_equations__CF_K; // picoA + const double var_constant_field_equations__CF_Na = ((var_chaste_interface__membrane__Vm == 0) ? (-mParameters[7]) : (0.037435192301797954 * (-mParameters[7] * _lt_0_row[2] + var_chaste_interface__internal_ion_concentrations__Nai) * var_chaste_interface__membrane__Vm / (_lt_0_row[3]))); // millimolar + const double var_L_type_Ca_channel__i_CaL_Na = 1.8499999999999999e-5 * mParameters[8] * var_L_type_Ca_channel__p_open_CaL * var_constant_field_equations__CF_Na; // picoA + const double var_background_NSC_current__i_bNSC_Na = 0.38500000000000001 * var_constant_field_equations__CF_Na; // picoA + const double var_background_lCa_current__i_lCa_Na = 0.11 * var_background_lCa_current__p_open * var_constant_field_equations__CF_Na; // picoA + const double var_membrane__i_ext = 1 * GetIntracellularAreaStimulus(var_chaste_interface__environment__time) * mParameters[9] / HeartConfig::Instance()->GetCapacitance(); // picoA + const double d_dt_chaste_interface_var_rapid_time_dependent_potassium_current_y1_gate__y1 = -(_lt_0_row[18]) * var_chaste_interface__rapid_time_dependent_potassium_current_y1_gate__y1 + (1 - var_chaste_interface__rapid_time_dependent_potassium_current_y1_gate__y1) / (_lt_0_row[19]); // 1 / millisecond + const double d_dt_chaste_interface_var_rapid_time_dependent_potassium_current_y2_gate__y2 = -(_lt_0_row[20]) * var_chaste_interface__rapid_time_dependent_potassium_current_y2_gate__y2 + (1 - var_chaste_interface__rapid_time_dependent_potassium_current_y2_gate__y2) / (_lt_0_row[21]); // 1 / millisecond + const double d_dt_chaste_interface_var_rapid_time_dependent_potassium_current_y3_gate__y3 = (1 - var_chaste_interface__rapid_time_dependent_potassium_current_y3_gate__y3) / (_lt_0_row[22]) - var_chaste_interface__rapid_time_dependent_potassium_current_y3_gate__y3 / (_lt_0_row[23]); // 1 / millisecond + const double d_dt_chaste_interface_var_slow_time_dependent_potassium_current_y1_gate__y1 = (1 - var_chaste_interface__slow_time_dependent_potassium_current_y1_gate__y1) / (_lt_0_row[24]) - var_chaste_interface__slow_time_dependent_potassium_current_y1_gate__y1 / (_lt_0_row[25]); // 1 / millisecond + const double d_dt_chaste_interface_var_slow_time_dependent_potassium_current_y2_gate__y2 = -0.004444 * var_chaste_interface__slow_time_dependent_potassium_current_y2_gate__y2 + 3.7000000000000002 * (1 - var_chaste_interface__slow_time_dependent_potassium_current_y2_gate__y2) * var_internal_ion_concentrations__Cai; // 1 / millisecond + const double var_slow_time_dependent_potassium_current__i_Ks_K = pow(var_chaste_interface__slow_time_dependent_potassium_current_y1_gate__y1, 2) * (0.10000000000000001 + 0.90000000000000002 * var_chaste_interface__slow_time_dependent_potassium_current_y2_gate__y2) * var_constant_field_equations__CF_K * mParameters[13]; // picoA + const double var_slow_time_dependent_potassium_current__i_Ks_Na = 0.2016 * pow(var_chaste_interface__slow_time_dependent_potassium_current_y1_gate__y1, 2) * (0.10000000000000001 + 0.90000000000000002 * var_chaste_interface__slow_time_dependent_potassium_current_y2_gate__y2) * var_constant_field_equations__CF_Na; // picoA + const double var_sodium_calcium_exchanger__k1 = _lt_0_row[26]; // per_millisecond + const double var_sodium_calcium_exchanger__k2 = _lt_0_row[27]; // per_millisecond + const double var_sodium_calcium_exchanger__p_E1Na = 1 / (1 + 669.921875 * (1 + 724.63768115942037 * var_internal_ion_concentrations__Cai) / pow(var_chaste_interface__internal_ion_concentrations__Nai, 3)); // dimensionless + const double var_sodium_calcium_exchanger__p_E2Na = 1 / (1 + 669921.875 * (1 + 0.7246376811594204 * mParameters[5]) / pow(mParameters[7], 3)); // dimensionless + const double d_dt_chaste_interface_var_sodium_calcium_exchanger_y_gate__y = (1 - var_chaste_interface__sodium_calcium_exchanger_y_gate__y) * (1 / (1 + 1.3799999999999999 * (1 + 1.4927113702623908e-6 * pow(mParameters[7], 3)) / mParameters[5]) + var_sodium_calcium_exchanger__k2 * var_sodium_calcium_exchanger__p_E2Na) - (1 / (1 + 0.0013799999999999999 * (1 + 0.0014927113702623907 * pow(var_chaste_interface__internal_ion_concentrations__Nai, 3)) / var_internal_ion_concentrations__Cai) + var_sodium_calcium_exchanger__k1 * var_sodium_calcium_exchanger__p_E1Na) * var_chaste_interface__sodium_calcium_exchanger_y_gate__y; // 1 / millisecond + const double var_sodium_calcium_exchanger__i_NaCa = (var_sodium_calcium_exchanger__k1 * var_sodium_calcium_exchanger__p_E1Na * var_chaste_interface__sodium_calcium_exchanger_y_gate__y - (1 - var_chaste_interface__sodium_calcium_exchanger_y_gate__y) * var_sodium_calcium_exchanger__k2 * var_sodium_calcium_exchanger__p_E2Na) * mParameters[9] * mParameters[14]; // picoA + const double d_dt_chaste_interface_var_internal_ion_concentrations__Ca_Total = 0.070000000000000007 * var_NL_model__Q_d2 + 0.070000000000000007 * var_NL_model__Q_r + 6.4775767022812476e-7 * var_RyR_channel__i_RyR + 6.4775767022812476e-7 * var_SR_L_current__i_SR_L + 6.4775767022812476e-7 * var_SR_calcium_pump__i_SR_U + 1.2955153404562495e-6 * var_sodium_calcium_exchanger__i_NaCa - 0.070000000000000007 * var_NL_model__Q_b - 6.4775767022812476e-7 * var_L_type_Ca_channel__i_CaL_Ca - 6.4775767022812476e-7 * var_T_type_Ca_channel__i_Ca_T - 6.4775767022812476e-7 * var_background_Cab_current__i_Cab; // millimolar / millisecond + const double d_dt_chaste_interface_var_sodium_current_ultra_slow_gate__y = (1 - var_chaste_interface__sodium_current_ultra_slow_gate__y) / (_lt_0_row[28]) - var_chaste_interface__sodium_current_ultra_slow_gate__y / (_lt_0_row[29]); // 1 / millisecond + const double var_sodium_current_voltage_dependent_gate__k_AI_RI = _lt_0_row[30]; // per_millisecond + const double var_sodium_current_voltage_dependent_gate__k_AP_AI = _lt_0_row[31]; // per_millisecond + const double var_sodium_current_voltage_dependent_gate__k_AP_RP = _lt_0_row[32]; // per_millisecond + const double var_sodium_current_voltage_dependent_gate__k_RI_AI = _lt_0_row[33]; // per_millisecond + const double var_sodium_current_voltage_dependent_gate__k_RP_AP = _lt_0_row[34]; // per_millisecond + const double var_sodium_current_voltage_dependent_gate__k_RP_RI = 0.01 / (1 + 8.7499999999999999e-5 * var_sodium_current_voltage_dependent_gate__k_AP_RP * var_sodium_current_voltage_dependent_gate__k_RI_AI / (var_sodium_current_voltage_dependent_gate__k_AI_RI * var_sodium_current_voltage_dependent_gate__k_AP_AI * var_sodium_current_voltage_dependent_gate__k_RP_AP)); // per_millisecond + const double var_sodium_current__i_Na_K = 0.10000000000000001 * var_constant_field_equations__CF_K * mParameters[10] * var_chaste_interface__sodium_current_ultra_slow_gate__y * var_chaste_interface__sodium_current_voltage_dependent_gate__p_AP_Na; // picoA + const double var_sodium_current__i_Na_Na = var_constant_field_equations__CF_Na * mParameters[10] * var_chaste_interface__sodium_current_ultra_slow_gate__y * var_chaste_interface__sodium_current_voltage_dependent_gate__p_AP_Na; // picoA + const double d_dt_chaste_interface_var_sodium_current_voltage_dependent_gate__p_AP_Na = 8.7499999999999999e-5 * var_chaste_interface__sodium_current_voltage_dependent_gate__p_AI_Na + var_sodium_current_voltage_dependent_gate__k_RP_AP * var_chaste_interface__sodium_current_voltage_dependent_gate__p_RP_Na - (var_sodium_current_voltage_dependent_gate__k_AP_AI + var_sodium_current_voltage_dependent_gate__k_AP_RP) * var_chaste_interface__sodium_current_voltage_dependent_gate__p_AP_Na; // 1 / millisecond + const double var_sodium_current_voltage_dependent_gate__p_RI_Na = 1 - var_chaste_interface__sodium_current_voltage_dependent_gate__p_AI_Na - var_chaste_interface__sodium_current_voltage_dependent_gate__p_AP_Na - var_chaste_interface__sodium_current_voltage_dependent_gate__p_RP_Na; // dimensionless + const double d_dt_chaste_interface_var_sodium_current_voltage_dependent_gate__p_AI_Na = var_sodium_current_voltage_dependent_gate__k_AP_AI * var_chaste_interface__sodium_current_voltage_dependent_gate__p_AP_Na + var_sodium_current_voltage_dependent_gate__k_RI_AI * var_sodium_current_voltage_dependent_gate__p_RI_Na - (8.7499999999999999e-5 + var_sodium_current_voltage_dependent_gate__k_AI_RI) * var_chaste_interface__sodium_current_voltage_dependent_gate__p_AI_Na; // 1 / millisecond + const double d_dt_chaste_interface_var_sodium_current_voltage_dependent_gate__p_RP_Na = (0.01 - var_sodium_current_voltage_dependent_gate__k_RP_RI) * var_sodium_current_voltage_dependent_gate__p_RI_Na + var_sodium_current_voltage_dependent_gate__k_AP_RP * var_chaste_interface__sodium_current_voltage_dependent_gate__p_AP_Na - (var_sodium_current_voltage_dependent_gate__k_RP_AP + var_sodium_current_voltage_dependent_gate__k_RP_RI) * var_chaste_interface__sodium_current_voltage_dependent_gate__p_RP_Na; // 1 / millisecond + const double var_sodium_potassium_pump__Nao_Eff = mParameters[7] * _lt_0_row[4]; // millimolar + const double var_sodium_potassium_pump__k1 = 0.37 / (1 + 0.094 / var_chaste_interface__ATP_production__ATPi); // per_millisecond + const double var_sodium_potassium_pump__p_E1Na = 1 / (1 + 4.4045579125871104 * pow((1 / var_chaste_interface__internal_ion_concentrations__Nai), 1.0600000000000001) * (1 + 0.020000293738509214 * pow(var_chaste_interface__internal_ion_concentrations__Ki, 1.1200000000000001))); // dimensionless + const double var_sodium_potassium_pump__p_E2Na = 1 / (1 + 90.050628437051003 * pow((1 / var_sodium_potassium_pump__Nao_Eff), 1.0600000000000001) * (1 + 4.560221410801109 * pow(mParameters[6], 1.1200000000000001))); // dimensionless + const double d_dt_chaste_interface_var_sodium_potassium_pump_y_gate__y = (1 - var_chaste_interface__sodium_potassium_pump_y_gate__y) * (0.040000000000000001 * var_sodium_potassium_pump__p_E2Na + 0.16500000000000001 / (1 + 0.21928759810465578 * pow((1 / mParameters[6]), 1.1200000000000001) * (1 + 0.011104864200909382 * pow(var_sodium_potassium_pump__Nao_Eff, 1.0600000000000001)))) - (0.01 / (1 + 49.999265664512095 * pow((1 / var_chaste_interface__internal_ion_concentrations__Ki), 1.1200000000000001) * (1 + 0.22703754152993499 * pow(var_chaste_interface__internal_ion_concentrations__Nai, 1.0600000000000001))) + var_sodium_potassium_pump__k1 * var_sodium_potassium_pump__p_E1Na) * var_chaste_interface__sodium_potassium_pump_y_gate__y; // 1 / millisecond + const double var_sodium_potassium_pump__i_NaK = 21 * (-0.040000000000000001 * (1 - var_chaste_interface__sodium_potassium_pump_y_gate__y) * var_sodium_potassium_pump__p_E2Na + var_sodium_potassium_pump__k1 * var_sodium_potassium_pump__p_E1Na * var_chaste_interface__sodium_potassium_pump_y_gate__y) * mParameters[9]; // picoA + const double d_dt_chaste_interface_var_ATP_production__ATPi = 0.014999999999999999 + 3.2387883511406238e-7 * var_SR_calcium_pump__i_SR_U - 0.0030000000000000001 * var_chaste_interface__ATP_production__ATPi - 0.028000000000000004 * var_chaste_interface__NL_model__pCaCB - 1.2955153404562495e-6 * var_sodium_potassium_pump__i_NaK; // millimolar / millisecond + const double var_time_independent_potassium_current__E_K = 26.712831923985377 * log(mParameters[6] / var_chaste_interface__internal_ion_concentrations__Ki); // millivolt + const double var_background_KATP_current__i_KATP = 44.047040000000003 * pow(mParameters[6], 0.23999999999999999) * (-var_time_independent_potassium_current__E_K + var_chaste_interface__membrane__Vm) / (1 + 99.999999999999986 * pow(var_chaste_interface__ATP_production__ATPi, 2)); // picoA + const double var_rapid_time_dependent_potassium_current__i_Kr = 0.71370912277944121 * pow(mParameters[6], 0.20000000000000001) * (-var_time_independent_potassium_current__E_K + var_chaste_interface__membrane__Vm) * (0.40000000000000002 * var_chaste_interface__rapid_time_dependent_potassium_current_y2_gate__y2 + 0.59999999999999998 * var_chaste_interface__rapid_time_dependent_potassium_current_y1_gate__y1) * mParameters[9] * mParameters[12] * var_chaste_interface__rapid_time_dependent_potassium_current_y3_gate__y3; // picoA + const double var_time_independent_potassium_current__lambda = 3 * (1 + exp(-2.4319999999999999 + 0.064000000000000001 * var_chaste_interface__membrane__Vm - 0.064000000000000001 * var_time_independent_potassium_current__E_K)) * exp(0.47999999999999998 + 0.048000000000000001 * var_time_independent_potassium_current__E_K - 0.048000000000000001 * var_chaste_interface__membrane__Vm) / (1 + exp(-2.1000000000000001 + 0.029999999999999999 * var_chaste_interface__membrane__Vm - 0.029999999999999999 * var_time_independent_potassium_current__E_K)); // per_millisecond + const double var_time_independent_potassium_current__mu = 0.75 * exp(-0.35000000000000003 + 0.035000000000000003 * var_chaste_interface__membrane__Vm - 0.035000000000000003 * var_time_independent_potassium_current__E_K) / (1 + exp(-2.1000000000000001 + 0.014999999999999999 * var_chaste_interface__membrane__Vm - 0.014999999999999999 * var_time_independent_potassium_current__E_K)); // per_millisecond + const double var_time_independent_potassium_current__fB = var_time_independent_potassium_current__mu / (var_time_independent_potassium_current__lambda + var_time_independent_potassium_current__mu); // dimensionless + const double var_time_independent_potassium_current__fO = var_time_independent_potassium_current__lambda / (var_time_independent_potassium_current__lambda + var_time_independent_potassium_current__mu); // dimensionless + const double d_dt_chaste_interface_var_time_independent_potassium_current_y_gate__y = (1 - var_chaste_interface__time_independent_potassium_current_y_gate__y) / (7 * exp(-0.32333333333333331 + 0.0033333333333333335 * var_chaste_interface__membrane__Vm - 0.0033333333333333335 * var_time_independent_potassium_current__E_K) + 8000 * exp(-11.411764705882353 + 0.11764705882352941 * var_chaste_interface__membrane__Vm - 0.11764705882352941 * var_time_independent_potassium_current__E_K)) - pow(var_time_independent_potassium_current__fO, 4) * var_chaste_interface__time_independent_potassium_current_y_gate__y / (0.00013999999999999999 * exp(10.659340659340661 + 0.10989010989010989 * var_time_independent_potassium_current__E_K - 0.10989010989010989 * var_chaste_interface__membrane__Vm) + 0.20000000000000001 * exp(0.19400000000000001 + 0.002 * var_time_independent_potassium_current__E_K - 0.002 * var_chaste_interface__membrane__Vm)); // 1 / millisecond + const double var_time_independent_potassium_current__i_K1 = 0.50938071193859957 * pow(mParameters[6], 0.40000000000000002) * (-var_time_independent_potassium_current__E_K + var_chaste_interface__membrane__Vm) * (pow(var_time_independent_potassium_current__fO, 4) + 2 * pow(var_time_independent_potassium_current__fB, 2) * pow(var_time_independent_potassium_current__fO, 2) + 2.6666666666666665 * pow(var_time_independent_potassium_current__fO, 3) * var_time_independent_potassium_current__fB) * mParameters[9] * mParameters[11] * var_chaste_interface__time_independent_potassium_current_y_gate__y; // picoA + const double d_dt_chaste_interface_var_transient_outward_current_y1_gate__y1 = (1 - var_chaste_interface__transient_outward_current_y1_gate__y1) / (_lt_0_row[35]) - var_chaste_interface__transient_outward_current_y1_gate__y1 / (_lt_0_row[36]); // 1 / millisecond + const double d_dt_chaste_interface_var_transient_outward_current_y2_gate__y2 = 0.0038 * (1 - var_chaste_interface__transient_outward_current_y2_gate__y2) * _lt_0_row[38] / (_lt_0_row[37]) - 0.0038 * var_chaste_interface__transient_outward_current_y2_gate__y2 * _lt_0_row[40] / (_lt_0_row[39]); // 1 / millisecond + const double var_transient_outward_current__i_to_K = pow(var_chaste_interface__transient_outward_current_y1_gate__y1, 3) * var_constant_field_equations__CF_K * mParameters[15] * var_chaste_interface__transient_outward_current_y2_gate__y2; // picoA + const double d_dt_chaste_interface_var_internal_ion_concentrations__Ki = -1.2955153404562495e-6 * (-2 * var_sodium_potassium_pump__i_NaK + var_L_type_Ca_channel__i_CaL_K + var_background_KATP_current__i_KATP + var_background_Kpl_current__i_Kpl + var_background_NSC_current__i_bNSC_K + var_background_lCa_current__i_lCa_K + var_membrane__i_ext + var_rapid_time_dependent_potassium_current__i_Kr + var_slow_time_dependent_potassium_current__i_Ks_K + var_sodium_current__i_Na_K + var_time_independent_potassium_current__i_K1 + var_transient_outward_current__i_to_K) * mParameters[4]; // millimolar / millisecond + const double var_transient_outward_current__i_to_Na = 0.00297 * pow(var_chaste_interface__transient_outward_current_y1_gate__y1, 3) * var_constant_field_equations__CF_Na * var_chaste_interface__transient_outward_current_y2_gate__y2; // picoA + const double d_dt_chaste_interface_var_internal_ion_concentrations__Nai = -1.2955153404562495e-6 * (3 * var_sodium_calcium_exchanger__i_NaCa + 3 * var_sodium_potassium_pump__i_NaK + var_L_type_Ca_channel__i_CaL_Na + var_background_NSC_current__i_bNSC_Na + var_background_lCa_current__i_lCa_Na + var_slow_time_dependent_potassium_current__i_Ks_Na + var_sodium_current__i_Na_Na + var_transient_outward_current__i_to_Na) * mParameters[4]; // millimolar / millisecond + + mEvalF[1] = d_dt_chaste_interface_var_internal_ion_concentrations__Nai; + mPartialF[1] = EvaluatePartialDerivative1(var_chaste_interface__environment__time, rY, delta); + mEvalF[2] = d_dt_chaste_interface_var_internal_ion_concentrations__Ki; + mPartialF[2] = EvaluatePartialDerivative2(var_chaste_interface__environment__time, rY, delta); + mEvalF[3] = d_dt_chaste_interface_var_internal_ion_concentrations__Ca_Total; + mPartialF[3] = EvaluatePartialDerivative3(var_chaste_interface__environment__time, rY, delta); + mEvalF[4] = d_dt_chaste_interface_var_ATP_production__ATPi; + mPartialF[4] = EvaluatePartialDerivative4(var_chaste_interface__environment__time, rY, delta); + mEvalF[5] = d_dt_chaste_interface_var_sodium_current_voltage_dependent_gate__p_AP_Na; + mPartialF[5] = EvaluatePartialDerivative5(var_chaste_interface__environment__time, rY, delta); + mEvalF[6] = d_dt_chaste_interface_var_sodium_current_voltage_dependent_gate__p_RP_Na; + mPartialF[6] = EvaluatePartialDerivative6(var_chaste_interface__environment__time, rY, delta); + mEvalF[7] = d_dt_chaste_interface_var_sodium_current_voltage_dependent_gate__p_AI_Na; + mPartialF[7] = EvaluatePartialDerivative7(var_chaste_interface__environment__time, rY, delta); + mEvalF[8] = d_dt_chaste_interface_var_sodium_current_ultra_slow_gate__y; + mPartialF[8] = EvaluatePartialDerivative8(var_chaste_interface__environment__time, rY, delta); + mEvalF[9] = d_dt_chaste_interface_var_L_type_Ca_channel_voltage_dependent_gate__p_AP_CaL; + mPartialF[9] = EvaluatePartialDerivative9(var_chaste_interface__environment__time, rY, delta); + mEvalF[10] = d_dt_chaste_interface_var_L_type_Ca_channel_voltage_dependent_gate__p_RP_CaL; + mPartialF[10] = EvaluatePartialDerivative10(var_chaste_interface__environment__time, rY, delta); + mEvalF[11] = d_dt_chaste_interface_var_L_type_Ca_channel_voltage_dependent_gate__p_AI_CaL; + mPartialF[11] = EvaluatePartialDerivative11(var_chaste_interface__environment__time, rY, delta); + mEvalF[12] = d_dt_chaste_interface_var_L_type_Ca_channel_Ca_dependent_gate__p_U; + mPartialF[12] = EvaluatePartialDerivative12(var_chaste_interface__environment__time, rY, delta); + mEvalF[13] = d_dt_chaste_interface_var_L_type_Ca_channel_Ca_dependent_gate__p_UCa; + mPartialF[13] = EvaluatePartialDerivative13(var_chaste_interface__environment__time, rY, delta); + mEvalF[14] = d_dt_chaste_interface_var_L_type_Ca_channel_Ca_dependent_gate__p_C; + mPartialF[14] = EvaluatePartialDerivative14(var_chaste_interface__environment__time, rY, delta); + mEvalF[15] = d_dt_chaste_interface_var_L_type_Ca_channel_ultra_slow_gate__y; + mPartialF[15] = EvaluatePartialDerivative15(var_chaste_interface__environment__time, rY, delta); + mEvalF[16] = d_dt_chaste_interface_var_T_type_Ca_channel_y1_gate__y1; + mPartialF[16] = EvaluatePartialDerivative16(var_chaste_interface__environment__time, rY, delta); + mEvalF[17] = d_dt_chaste_interface_var_T_type_Ca_channel_y2_gate__y2; + mPartialF[17] = EvaluatePartialDerivative17(var_chaste_interface__environment__time, rY, delta); + mEvalF[18] = d_dt_chaste_interface_var_time_independent_potassium_current_y_gate__y; + mPartialF[18] = EvaluatePartialDerivative18(var_chaste_interface__environment__time, rY, delta); + mEvalF[19] = d_dt_chaste_interface_var_rapid_time_dependent_potassium_current_y1_gate__y1; + mPartialF[19] = EvaluatePartialDerivative19(var_chaste_interface__environment__time, rY, delta); + mEvalF[20] = d_dt_chaste_interface_var_rapid_time_dependent_potassium_current_y2_gate__y2; + mPartialF[20] = EvaluatePartialDerivative20(var_chaste_interface__environment__time, rY, delta); + mEvalF[21] = d_dt_chaste_interface_var_rapid_time_dependent_potassium_current_y3_gate__y3; + mPartialF[21] = EvaluatePartialDerivative21(var_chaste_interface__environment__time, rY, delta); + mEvalF[22] = d_dt_chaste_interface_var_slow_time_dependent_potassium_current_y1_gate__y1; + mPartialF[22] = EvaluatePartialDerivative22(var_chaste_interface__environment__time, rY, delta); + mEvalF[23] = d_dt_chaste_interface_var_slow_time_dependent_potassium_current_y2_gate__y2; + mPartialF[23] = EvaluatePartialDerivative23(var_chaste_interface__environment__time, rY, delta); + mEvalF[24] = d_dt_chaste_interface_var_transient_outward_current_y1_gate__y1; + mPartialF[24] = EvaluatePartialDerivative24(var_chaste_interface__environment__time, rY, delta); + mEvalF[25] = d_dt_chaste_interface_var_transient_outward_current_y2_gate__y2; + mPartialF[25] = EvaluatePartialDerivative25(var_chaste_interface__environment__time, rY, delta); + mEvalF[26] = d_dt_chaste_interface_var_sodium_calcium_exchanger_y_gate__y; + mPartialF[26] = EvaluatePartialDerivative26(var_chaste_interface__environment__time, rY, delta); + mEvalF[27] = d_dt_chaste_interface_var_sodium_potassium_pump_y_gate__y; + mPartialF[27] = EvaluatePartialDerivative27(var_chaste_interface__environment__time, rY, delta); + mEvalF[28] = d_dt_chaste_interface_var_SR_calcium_pump_y_gate__y; + mPartialF[28] = EvaluatePartialDerivative28(var_chaste_interface__environment__time, rY, delta); + mEvalF[29] = d_dt_chaste_interface_var_RyR_channel__p_open_RyR; + mPartialF[29] = EvaluatePartialDerivative29(var_chaste_interface__environment__time, rY, delta); + mEvalF[30] = d_dt_chaste_interface_var_RyR_channel__p_close_RyR; + mPartialF[30] = EvaluatePartialDerivative30(var_chaste_interface__environment__time, rY, delta); + mEvalF[31] = d_dt_chaste_interface_var_Ca_concentrations_in_SR__Ca_Total; + mPartialF[31] = EvaluatePartialDerivative31(var_chaste_interface__environment__time, rY, delta); + mEvalF[32] = d_dt_chaste_interface_var_Ca_concentrations_in_SR__Caup; + mPartialF[32] = EvaluatePartialDerivative32(var_chaste_interface__environment__time, rY, delta); + mEvalF[33] = d_dt_chaste_interface_var_NL_model__pCa; + mPartialF[33] = EvaluatePartialDerivative33(var_chaste_interface__environment__time, rY, delta); + mEvalF[34] = d_dt_chaste_interface_var_NL_model__pCaCB; + mPartialF[34] = EvaluatePartialDerivative34(var_chaste_interface__environment__time, rY, delta); + mEvalF[35] = d_dt_chaste_interface_var_NL_model__pCB; + mPartialF[35] = EvaluatePartialDerivative35(var_chaste_interface__environment__time, rY, delta); + mEvalF[36] = d_dt_chaste_interface_var_NL_model__X; + mPartialF[36] = EvaluatePartialDerivative36(var_chaste_interface__environment__time, rY, delta); + + { + if (fabs(mPartialF[1]) < delta){ + rY[1] += mDt*d_dt_chaste_interface_var_internal_ion_concentrations__Nai; + } + else + { + rY[1] += (d_dt_chaste_interface_var_internal_ion_concentrations__Nai/mPartialF[1])*(exp(mPartialF[1]*mDt)-1.0); + } + + } + { + if (fabs(mPartialF[2]) < delta){ + rY[2] += mDt*d_dt_chaste_interface_var_internal_ion_concentrations__Ki; + } + else + { + rY[2] += (d_dt_chaste_interface_var_internal_ion_concentrations__Ki/mPartialF[2])*(exp(mPartialF[2]*mDt)-1.0); + } + + } + { + if (fabs(mPartialF[3]) < delta){ + rY[3] += mDt*d_dt_chaste_interface_var_internal_ion_concentrations__Ca_Total; + } + else + { + rY[3] += (d_dt_chaste_interface_var_internal_ion_concentrations__Ca_Total/mPartialF[3])*(exp(mPartialF[3]*mDt)-1.0); + } + + } + { + if (fabs(mPartialF[4]) < delta){ + rY[4] += mDt*d_dt_chaste_interface_var_ATP_production__ATPi; + } + else + { + rY[4] += (d_dt_chaste_interface_var_ATP_production__ATPi/mPartialF[4])*(exp(mPartialF[4]*mDt)-1.0); + } + + } + { + if (fabs(mPartialF[5]) < delta){ + rY[5] += mDt*d_dt_chaste_interface_var_sodium_current_voltage_dependent_gate__p_AP_Na; + } + else + { + rY[5] += (d_dt_chaste_interface_var_sodium_current_voltage_dependent_gate__p_AP_Na/mPartialF[5])*(exp(mPartialF[5]*mDt)-1.0); + } + + } + { + if (fabs(mPartialF[6]) < delta){ + rY[6] += mDt*d_dt_chaste_interface_var_sodium_current_voltage_dependent_gate__p_RP_Na; + } + else + { + rY[6] += (d_dt_chaste_interface_var_sodium_current_voltage_dependent_gate__p_RP_Na/mPartialF[6])*(exp(mPartialF[6]*mDt)-1.0); + } + + } + { + if (fabs(mPartialF[7]) < delta){ + rY[7] += mDt*d_dt_chaste_interface_var_sodium_current_voltage_dependent_gate__p_AI_Na; + } + else + { + rY[7] += (d_dt_chaste_interface_var_sodium_current_voltage_dependent_gate__p_AI_Na/mPartialF[7])*(exp(mPartialF[7]*mDt)-1.0); + } + + } + { + if (fabs(mPartialF[8]) < delta){ + rY[8] += mDt*d_dt_chaste_interface_var_sodium_current_ultra_slow_gate__y; + } + else + { + rY[8] += (d_dt_chaste_interface_var_sodium_current_ultra_slow_gate__y/mPartialF[8])*(exp(mPartialF[8]*mDt)-1.0); + } + + } + { + if (fabs(mPartialF[9]) < delta){ + rY[9] += mDt*d_dt_chaste_interface_var_L_type_Ca_channel_voltage_dependent_gate__p_AP_CaL; + } + else + { + rY[9] += (d_dt_chaste_interface_var_L_type_Ca_channel_voltage_dependent_gate__p_AP_CaL/mPartialF[9])*(exp(mPartialF[9]*mDt)-1.0); + } + + } + { + if (fabs(mPartialF[10]) < delta){ + rY[10] += mDt*d_dt_chaste_interface_var_L_type_Ca_channel_voltage_dependent_gate__p_RP_CaL; + } + else + { + rY[10] += (d_dt_chaste_interface_var_L_type_Ca_channel_voltage_dependent_gate__p_RP_CaL/mPartialF[10])*(exp(mPartialF[10]*mDt)-1.0); + } + + } + { + if (fabs(mPartialF[11]) < delta){ + rY[11] += mDt*d_dt_chaste_interface_var_L_type_Ca_channel_voltage_dependent_gate__p_AI_CaL; + } + else + { + rY[11] += (d_dt_chaste_interface_var_L_type_Ca_channel_voltage_dependent_gate__p_AI_CaL/mPartialF[11])*(exp(mPartialF[11]*mDt)-1.0); + } + + } + { + if (fabs(mPartialF[12]) < delta){ + rY[12] += mDt*d_dt_chaste_interface_var_L_type_Ca_channel_Ca_dependent_gate__p_U; + } + else + { + rY[12] += (d_dt_chaste_interface_var_L_type_Ca_channel_Ca_dependent_gate__p_U/mPartialF[12])*(exp(mPartialF[12]*mDt)-1.0); + } + + } + { + if (fabs(mPartialF[13]) < delta){ + rY[13] += mDt*d_dt_chaste_interface_var_L_type_Ca_channel_Ca_dependent_gate__p_UCa; + } + else + { + rY[13] += (d_dt_chaste_interface_var_L_type_Ca_channel_Ca_dependent_gate__p_UCa/mPartialF[13])*(exp(mPartialF[13]*mDt)-1.0); + } + + } + { + if (fabs(mPartialF[14]) < delta){ + rY[14] += mDt*d_dt_chaste_interface_var_L_type_Ca_channel_Ca_dependent_gate__p_C; + } + else + { + rY[14] += (d_dt_chaste_interface_var_L_type_Ca_channel_Ca_dependent_gate__p_C/mPartialF[14])*(exp(mPartialF[14]*mDt)-1.0); + } + + } + { + if (fabs(mPartialF[15]) < delta){ + rY[15] += mDt*d_dt_chaste_interface_var_L_type_Ca_channel_ultra_slow_gate__y; + } + else + { + rY[15] += (d_dt_chaste_interface_var_L_type_Ca_channel_ultra_slow_gate__y/mPartialF[15])*(exp(mPartialF[15]*mDt)-1.0); + } + + } + { + if (fabs(mPartialF[16]) < delta){ + rY[16] += mDt*d_dt_chaste_interface_var_T_type_Ca_channel_y1_gate__y1; + } + else + { + rY[16] += (d_dt_chaste_interface_var_T_type_Ca_channel_y1_gate__y1/mPartialF[16])*(exp(mPartialF[16]*mDt)-1.0); + } + + } + { + if (fabs(mPartialF[17]) < delta){ + rY[17] += mDt*d_dt_chaste_interface_var_T_type_Ca_channel_y2_gate__y2; + } + else + { + rY[17] += (d_dt_chaste_interface_var_T_type_Ca_channel_y2_gate__y2/mPartialF[17])*(exp(mPartialF[17]*mDt)-1.0); + } + + } + { + if (fabs(mPartialF[18]) < delta){ + rY[18] += mDt*d_dt_chaste_interface_var_time_independent_potassium_current_y_gate__y; + } + else + { + rY[18] += (d_dt_chaste_interface_var_time_independent_potassium_current_y_gate__y/mPartialF[18])*(exp(mPartialF[18]*mDt)-1.0); + } + + } + { + if (fabs(mPartialF[19]) < delta){ + rY[19] += mDt*d_dt_chaste_interface_var_rapid_time_dependent_potassium_current_y1_gate__y1; + } + else + { + rY[19] += (d_dt_chaste_interface_var_rapid_time_dependent_potassium_current_y1_gate__y1/mPartialF[19])*(exp(mPartialF[19]*mDt)-1.0); + } + + } + { + if (fabs(mPartialF[20]) < delta){ + rY[20] += mDt*d_dt_chaste_interface_var_rapid_time_dependent_potassium_current_y2_gate__y2; + } + else + { + rY[20] += (d_dt_chaste_interface_var_rapid_time_dependent_potassium_current_y2_gate__y2/mPartialF[20])*(exp(mPartialF[20]*mDt)-1.0); + } + + } + { + if (fabs(mPartialF[21]) < delta){ + rY[21] += mDt*d_dt_chaste_interface_var_rapid_time_dependent_potassium_current_y3_gate__y3; + } + else + { + rY[21] += (d_dt_chaste_interface_var_rapid_time_dependent_potassium_current_y3_gate__y3/mPartialF[21])*(exp(mPartialF[21]*mDt)-1.0); + } + + } + { + if (fabs(mPartialF[22]) < delta){ + rY[22] += mDt*d_dt_chaste_interface_var_slow_time_dependent_potassium_current_y1_gate__y1; + } + else + { + rY[22] += (d_dt_chaste_interface_var_slow_time_dependent_potassium_current_y1_gate__y1/mPartialF[22])*(exp(mPartialF[22]*mDt)-1.0); + } + + } + { + if (fabs(mPartialF[23]) < delta){ + rY[23] += mDt*d_dt_chaste_interface_var_slow_time_dependent_potassium_current_y2_gate__y2; + } + else + { + rY[23] += (d_dt_chaste_interface_var_slow_time_dependent_potassium_current_y2_gate__y2/mPartialF[23])*(exp(mPartialF[23]*mDt)-1.0); + } + + } + { + if (fabs(mPartialF[24]) < delta){ + rY[24] += mDt*d_dt_chaste_interface_var_transient_outward_current_y1_gate__y1; + } + else + { + rY[24] += (d_dt_chaste_interface_var_transient_outward_current_y1_gate__y1/mPartialF[24])*(exp(mPartialF[24]*mDt)-1.0); + } + + } + { + if (fabs(mPartialF[25]) < delta){ + rY[25] += mDt*d_dt_chaste_interface_var_transient_outward_current_y2_gate__y2; + } + else + { + rY[25] += (d_dt_chaste_interface_var_transient_outward_current_y2_gate__y2/mPartialF[25])*(exp(mPartialF[25]*mDt)-1.0); + } + + } + { + if (fabs(mPartialF[26]) < delta){ + rY[26] += mDt*d_dt_chaste_interface_var_sodium_calcium_exchanger_y_gate__y; + } + else + { + rY[26] += (d_dt_chaste_interface_var_sodium_calcium_exchanger_y_gate__y/mPartialF[26])*(exp(mPartialF[26]*mDt)-1.0); + } + + } + { + if (fabs(mPartialF[27]) < delta){ + rY[27] += mDt*d_dt_chaste_interface_var_sodium_potassium_pump_y_gate__y; + } + else + { + rY[27] += (d_dt_chaste_interface_var_sodium_potassium_pump_y_gate__y/mPartialF[27])*(exp(mPartialF[27]*mDt)-1.0); + } + + } + { + if (fabs(mPartialF[28]) < delta){ + rY[28] += mDt*d_dt_chaste_interface_var_SR_calcium_pump_y_gate__y; + } + else + { + rY[28] += (d_dt_chaste_interface_var_SR_calcium_pump_y_gate__y/mPartialF[28])*(exp(mPartialF[28]*mDt)-1.0); + } + + } + { + if (fabs(mPartialF[29]) < delta){ + rY[29] += mDt*d_dt_chaste_interface_var_RyR_channel__p_open_RyR; + } + else + { + rY[29] += (d_dt_chaste_interface_var_RyR_channel__p_open_RyR/mPartialF[29])*(exp(mPartialF[29]*mDt)-1.0); + } + + } + { + if (fabs(mPartialF[30]) < delta){ + rY[30] += mDt*d_dt_chaste_interface_var_RyR_channel__p_close_RyR; + } + else + { + rY[30] += (d_dt_chaste_interface_var_RyR_channel__p_close_RyR/mPartialF[30])*(exp(mPartialF[30]*mDt)-1.0); + } + + } + { + if (fabs(mPartialF[31]) < delta){ + rY[31] += mDt*d_dt_chaste_interface_var_Ca_concentrations_in_SR__Ca_Total; + } + else + { + rY[31] += (d_dt_chaste_interface_var_Ca_concentrations_in_SR__Ca_Total/mPartialF[31])*(exp(mPartialF[31]*mDt)-1.0); + } + + } + { + if (fabs(mPartialF[32]) < delta){ + rY[32] += mDt*d_dt_chaste_interface_var_Ca_concentrations_in_SR__Caup; + } + else + { + rY[32] += (d_dt_chaste_interface_var_Ca_concentrations_in_SR__Caup/mPartialF[32])*(exp(mPartialF[32]*mDt)-1.0); + } + + } + { + if (fabs(mPartialF[33]) < delta){ + rY[33] += mDt*d_dt_chaste_interface_var_NL_model__pCa; + } + else + { + rY[33] += (d_dt_chaste_interface_var_NL_model__pCa/mPartialF[33])*(exp(mPartialF[33]*mDt)-1.0); + } + + } + { + if (fabs(mPartialF[34]) < delta){ + rY[34] += mDt*d_dt_chaste_interface_var_NL_model__pCaCB; + } + else + { + rY[34] += (d_dt_chaste_interface_var_NL_model__pCaCB/mPartialF[34])*(exp(mPartialF[34]*mDt)-1.0); + } + + } + { + if (fabs(mPartialF[35]) < delta){ + rY[35] += mDt*d_dt_chaste_interface_var_NL_model__pCB; + } + else + { + rY[35] += (d_dt_chaste_interface_var_NL_model__pCB/mPartialF[35])*(exp(mPartialF[35]*mDt)-1.0); + } + + } + { + if (fabs(mPartialF[36]) < delta){ + rY[36] += mDt*d_dt_chaste_interface_var_NL_model__X; + } + else + { + rY[36] += (d_dt_chaste_interface_var_NL_model__X/mPartialF[36])*(exp(mPartialF[36]*mDt)-1.0); + } + + } + + } + + + double Dynamicmatsuoka_model_2003FromCellMLGRL1Opt::EvaluateYDerivative0(double var_chaste_interface__environment__time, std::vector& rY) + { + double d_dt_chaste_interface_var_membrane__Vm; + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -85.95752434460744 + double var_chaste_interface__internal_ion_concentrations__Nai = rY[1]; + // Units: millimolar; Initial value: 4.925761439682025 + double var_chaste_interface__internal_ion_concentrations__Ki = rY[2]; + // Units: millimolar; Initial value: 143.1837333000449 + double var_chaste_interface__internal_ion_concentrations__Ca_Total = rY[3]; + // Units: millimolar; Initial value: 0.00040180173572968586 + double var_chaste_interface__ATP_production__ATPi = rY[4]; + // Units: millimolar; Initial value: 4.657102729020499 + double var_chaste_interface__sodium_current_voltage_dependent_gate__p_AP_Na = rY[5]; + // Units: dimensionless; Initial value: 1.779648367445368e-05 + double var_chaste_interface__sodium_current_ultra_slow_gate__y = rY[8]; + // Units: dimensionless; Initial value: 0.5861887862983165 + double var_chaste_interface__L_type_Ca_channel_voltage_dependent_gate__p_AP_CaL = rY[9]; + // Units: dimensionless; Initial value: 1.5445004166497696e-06 + double var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_U = rY[12]; + // Units: dimensionless; Initial value: 0.17246483915629204 + double var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_UCa = rY[13]; + // Units: dimensionless; Initial value: 6.098246017787626e-05 + double var_chaste_interface__L_type_Ca_channel_ultra_slow_gate__y = rY[15]; + // Units: dimensionless; Initial value: 0.9985266538252986 + double var_chaste_interface__T_type_Ca_channel_y1_gate__y1 = rY[16]; + // Units: dimensionless; Initial value: 1.6882718240109127e-05 + double var_chaste_interface__T_type_Ca_channel_y2_gate__y2 = rY[17]; + // Units: dimensionless; Initial value: 0.8585352091865849 + double var_chaste_interface__time_independent_potassium_current_y_gate__y = rY[18]; + // Units: dimensionless; Initial value: 0.6080573900752752 + double var_chaste_interface__rapid_time_dependent_potassium_current_y1_gate__y1 = rY[19]; + // Units: dimensionless; Initial value: 0.0018339931180983765 + double var_chaste_interface__rapid_time_dependent_potassium_current_y2_gate__y2 = rY[20]; + // Units: dimensionless; Initial value: 0.20443083454225305 + double var_chaste_interface__rapid_time_dependent_potassium_current_y3_gate__y3 = rY[21]; + // Units: dimensionless; Initial value: 0.967887666264921 + double var_chaste_interface__slow_time_dependent_potassium_current_y1_gate__y1 = rY[22]; + // Units: dimensionless; Initial value: 0.09738789658609195 + double var_chaste_interface__slow_time_dependent_potassium_current_y2_gate__y2 = rY[23]; + // Units: dimensionless; Initial value: 0.09745345578743213 + double var_chaste_interface__transient_outward_current_y1_gate__y1 = rY[24]; + // Units: dimensionless; Initial value: 0.0007956883250874798 + double var_chaste_interface__transient_outward_current_y2_gate__y2 = rY[25]; + // Units: dimensionless; Initial value: 0.9999125083105881 + double var_chaste_interface__sodium_calcium_exchanger_y_gate__y = rY[26]; + // Units: dimensionless; Initial value: 0.9891789193465331 + double var_chaste_interface__sodium_potassium_pump_y_gate__y = rY[27]; + // Units: dimensionless; Initial value: 0.5910747147428818 + + + // Lookup table indexing + const bool _oob_0 = Dynamicmatsuoka_model_2003FromCellMLGRL1Opt_LookupTables::Instance()->CheckIndex0(var_chaste_interface__membrane__Vm); +// LCOV_EXCL_START + if (_oob_0) + EXCEPTION(DumpState("membrane_voltage outside lookup table range", rY , var_chaste_interface__environment__time)); +// LCOV_EXCL_STOP + const double* const _lt_0_row = Dynamicmatsuoka_model_2003FromCellMLGRL1Opt_LookupTables::Instance()->IndexTable0(var_chaste_interface__membrane__Vm); + + // Mathematics + const double var_L_type_Ca_channel__p_open_CaL = (var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_U + var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_UCa) * var_chaste_interface__L_type_Ca_channel_ultra_slow_gate__y * var_chaste_interface__L_type_Ca_channel_voltage_dependent_gate__p_AP_CaL / (1 + 2.7439999999999993 / pow(var_chaste_interface__ATP_production__ATPi, 3)); // dimensionless + const double var_internal_ion_concentrations__Cai = -0.026190000000000001 + 0.5 * sqrt(pow((0.052380000000000003 - var_chaste_interface__internal_ion_concentrations__Ca_Total), 2) + 0.0095200000000000007 * var_chaste_interface__internal_ion_concentrations__Ca_Total) + 0.5 * var_chaste_interface__internal_ion_concentrations__Ca_Total; // millimolar + const double var_background_lCa_current__p_open = 1 / (1 + 1.7279999999999996e-9 / pow(var_internal_ion_concentrations__Cai, 3)); // dimensionless + const double var_constant_field_equations__CF_Ca = ((var_chaste_interface__membrane__Vm == 0) ? (-mParameters[5]) : (0.074870384603595908 * (-mParameters[5] * _lt_0_row[0] + var_internal_ion_concentrations__Cai) * var_chaste_interface__membrane__Vm / (_lt_0_row[1]))); // millimolar + const double var_L_type_Ca_channel__i_CaL_Ca = mParameters[8] * var_L_type_Ca_channel__p_open_CaL * var_constant_field_equations__CF_Ca; // picoA + const double var_T_type_Ca_channel__i_Ca_T = 612 * var_chaste_interface__T_type_Ca_channel_y1_gate__y1 * var_chaste_interface__T_type_Ca_channel_y2_gate__y2 * var_constant_field_equations__CF_Ca; // picoA + const double var_background_Cab_current__i_Cab = 0.040000000000000001 * var_constant_field_equations__CF_Ca; // picoA + const double var_constant_field_equations__CF_K = ((var_chaste_interface__membrane__Vm == 0) ? (var_chaste_interface__internal_ion_concentrations__Ki) : (0.037435192301797954 * (-mParameters[6] * _lt_0_row[2] + var_chaste_interface__internal_ion_concentrations__Ki) * var_chaste_interface__membrane__Vm / (_lt_0_row[3]))); // millimolar + const double var_L_type_Ca_channel__i_CaL_K = 0.00036499999999999998 * mParameters[8] * var_L_type_Ca_channel__p_open_CaL * var_constant_field_equations__CF_K; // picoA + const double var_background_Kpl_current__i_Kpl = ((var_chaste_interface__membrane__Vm == (-3)) ? (0.0010924717003124302 * pow(mParameters[6], 0.16) * var_constant_field_equations__CF_K) : (8.3986538766456042e-5 * pow(mParameters[6], 0.16) * (3 + var_chaste_interface__membrane__Vm) * var_constant_field_equations__CF_K / (_lt_0_row[7]))); // picoA + const double var_background_NSC_current__i_bNSC_K = 0.15400000000000003 * var_constant_field_equations__CF_K; // picoA + const double var_background_lCa_current__i_lCa_K = 0.11 * var_background_lCa_current__p_open * var_constant_field_equations__CF_K; // picoA + const double var_constant_field_equations__CF_Na = ((var_chaste_interface__membrane__Vm == 0) ? (-mParameters[7]) : (0.037435192301797954 * (-mParameters[7] * _lt_0_row[2] + var_chaste_interface__internal_ion_concentrations__Nai) * var_chaste_interface__membrane__Vm / (_lt_0_row[3]))); // millimolar + const double var_L_type_Ca_channel__i_CaL_Na = 1.8499999999999999e-5 * mParameters[8] * var_L_type_Ca_channel__p_open_CaL * var_constant_field_equations__CF_Na; // picoA + const double var_background_NSC_current__i_bNSC_Na = 0.38500000000000001 * var_constant_field_equations__CF_Na; // picoA + const double var_background_lCa_current__i_lCa_Na = 0.11 * var_background_lCa_current__p_open * var_constant_field_equations__CF_Na; // picoA + const double var_membrane__i_ext = 1 * GetIntracellularAreaStimulus(var_chaste_interface__environment__time) * mParameters[9] / HeartConfig::Instance()->GetCapacitance(); // picoA + const double var_slow_time_dependent_potassium_current__i_Ks_K = pow(var_chaste_interface__slow_time_dependent_potassium_current_y1_gate__y1, 2) * (0.10000000000000001 + 0.90000000000000002 * var_chaste_interface__slow_time_dependent_potassium_current_y2_gate__y2) * var_constant_field_equations__CF_K * mParameters[13]; // picoA + const double var_slow_time_dependent_potassium_current__i_Ks_Na = 0.2016 * pow(var_chaste_interface__slow_time_dependent_potassium_current_y1_gate__y1, 2) * (0.10000000000000001 + 0.90000000000000002 * var_chaste_interface__slow_time_dependent_potassium_current_y2_gate__y2) * var_constant_field_equations__CF_Na; // picoA + const double var_sodium_calcium_exchanger__k1 = _lt_0_row[26]; // per_millisecond + const double var_sodium_calcium_exchanger__k2 = _lt_0_row[27]; // per_millisecond + const double var_sodium_calcium_exchanger__p_E1Na = 1 / (1 + 669.921875 * (1 + 724.63768115942037 * var_internal_ion_concentrations__Cai) / pow(var_chaste_interface__internal_ion_concentrations__Nai, 3)); // dimensionless + const double var_sodium_calcium_exchanger__p_E2Na = 1 / (1 + 669921.875 * (1 + 0.7246376811594204 * mParameters[5]) / pow(mParameters[7], 3)); // dimensionless + const double var_sodium_calcium_exchanger__i_NaCa = (var_sodium_calcium_exchanger__k1 * var_sodium_calcium_exchanger__p_E1Na * var_chaste_interface__sodium_calcium_exchanger_y_gate__y - (1 - var_chaste_interface__sodium_calcium_exchanger_y_gate__y) * var_sodium_calcium_exchanger__k2 * var_sodium_calcium_exchanger__p_E2Na) * mParameters[9] * mParameters[14]; // picoA + const double var_sodium_current__i_Na_K = 0.10000000000000001 * var_constant_field_equations__CF_K * mParameters[10] * var_chaste_interface__sodium_current_ultra_slow_gate__y * var_chaste_interface__sodium_current_voltage_dependent_gate__p_AP_Na; // picoA + const double var_sodium_current__i_Na_Na = var_constant_field_equations__CF_Na * mParameters[10] * var_chaste_interface__sodium_current_ultra_slow_gate__y * var_chaste_interface__sodium_current_voltage_dependent_gate__p_AP_Na; // picoA + const double var_sodium_potassium_pump__Nao_Eff = mParameters[7] * _lt_0_row[4]; // millimolar + const double var_sodium_potassium_pump__k1 = 0.37 / (1 + 0.094 / var_chaste_interface__ATP_production__ATPi); // per_millisecond + const double var_sodium_potassium_pump__p_E1Na = 1 / (1 + 4.4045579125871104 * pow((1 / var_chaste_interface__internal_ion_concentrations__Nai), 1.0600000000000001) * (1 + 0.020000293738509214 * pow(var_chaste_interface__internal_ion_concentrations__Ki, 1.1200000000000001))); // dimensionless + const double var_sodium_potassium_pump__p_E2Na = 1 / (1 + 90.050628437051003 * pow((1 / var_sodium_potassium_pump__Nao_Eff), 1.0600000000000001) * (1 + 4.560221410801109 * pow(mParameters[6], 1.1200000000000001))); // dimensionless + const double var_sodium_potassium_pump__i_NaK = 21 * (-0.040000000000000001 * (1 - var_chaste_interface__sodium_potassium_pump_y_gate__y) * var_sodium_potassium_pump__p_E2Na + var_sodium_potassium_pump__k1 * var_sodium_potassium_pump__p_E1Na * var_chaste_interface__sodium_potassium_pump_y_gate__y) * mParameters[9]; // picoA + const double var_time_independent_potassium_current__E_K = 26.712831923985377 * log(mParameters[6] / var_chaste_interface__internal_ion_concentrations__Ki); // millivolt + const double var_background_KATP_current__i_KATP = 44.047040000000003 * pow(mParameters[6], 0.23999999999999999) * (-var_time_independent_potassium_current__E_K + var_chaste_interface__membrane__Vm) / (1 + 99.999999999999986 * pow(var_chaste_interface__ATP_production__ATPi, 2)); // picoA + const double var_rapid_time_dependent_potassium_current__i_Kr = 0.71370912277944121 * pow(mParameters[6], 0.20000000000000001) * (-var_time_independent_potassium_current__E_K + var_chaste_interface__membrane__Vm) * (0.40000000000000002 * var_chaste_interface__rapid_time_dependent_potassium_current_y2_gate__y2 + 0.59999999999999998 * var_chaste_interface__rapid_time_dependent_potassium_current_y1_gate__y1) * mParameters[9] * mParameters[12] * var_chaste_interface__rapid_time_dependent_potassium_current_y3_gate__y3; // picoA + const double var_time_independent_potassium_current__lambda = 3 * (1 + exp(-2.4319999999999999 + 0.064000000000000001 * var_chaste_interface__membrane__Vm - 0.064000000000000001 * var_time_independent_potassium_current__E_K)) * exp(0.47999999999999998 + 0.048000000000000001 * var_time_independent_potassium_current__E_K - 0.048000000000000001 * var_chaste_interface__membrane__Vm) / (1 + exp(-2.1000000000000001 + 0.029999999999999999 * var_chaste_interface__membrane__Vm - 0.029999999999999999 * var_time_independent_potassium_current__E_K)); // per_millisecond + const double var_time_independent_potassium_current__mu = 0.75 * exp(-0.35000000000000003 + 0.035000000000000003 * var_chaste_interface__membrane__Vm - 0.035000000000000003 * var_time_independent_potassium_current__E_K) / (1 + exp(-2.1000000000000001 + 0.014999999999999999 * var_chaste_interface__membrane__Vm - 0.014999999999999999 * var_time_independent_potassium_current__E_K)); // per_millisecond + const double var_time_independent_potassium_current__fB = var_time_independent_potassium_current__mu / (var_time_independent_potassium_current__lambda + var_time_independent_potassium_current__mu); // dimensionless + const double var_time_independent_potassium_current__fO = var_time_independent_potassium_current__lambda / (var_time_independent_potassium_current__lambda + var_time_independent_potassium_current__mu); // dimensionless + const double var_time_independent_potassium_current__i_K1 = 0.50938071193859957 * pow(mParameters[6], 0.40000000000000002) * (-var_time_independent_potassium_current__E_K + var_chaste_interface__membrane__Vm) * (pow(var_time_independent_potassium_current__fO, 4) + 2 * pow(var_time_independent_potassium_current__fB, 2) * pow(var_time_independent_potassium_current__fO, 2) + 2.6666666666666665 * pow(var_time_independent_potassium_current__fO, 3) * var_time_independent_potassium_current__fB) * mParameters[9] * mParameters[11] * var_chaste_interface__time_independent_potassium_current_y_gate__y; // picoA + const double var_transient_outward_current__i_to_K = pow(var_chaste_interface__transient_outward_current_y1_gate__y1, 3) * var_constant_field_equations__CF_K * mParameters[15] * var_chaste_interface__transient_outward_current_y2_gate__y2; // picoA + const double var_transient_outward_current__i_to_Na = 0.00297 * pow(var_chaste_interface__transient_outward_current_y1_gate__y1, 3) * var_constant_field_equations__CF_Na * var_chaste_interface__transient_outward_current_y2_gate__y2; // picoA + d_dt_chaste_interface_var_membrane__Vm = (-var_L_type_Ca_channel__i_CaL_Ca - var_L_type_Ca_channel__i_CaL_K - var_L_type_Ca_channel__i_CaL_Na - var_T_type_Ca_channel__i_Ca_T - var_background_Cab_current__i_Cab - var_background_KATP_current__i_KATP - var_background_Kpl_current__i_Kpl - var_background_NSC_current__i_bNSC_K - var_background_NSC_current__i_bNSC_Na - var_background_lCa_current__i_lCa_K - var_background_lCa_current__i_lCa_Na - var_membrane__i_ext - var_rapid_time_dependent_potassium_current__i_Kr - var_slow_time_dependent_potassium_current__i_Ks_K - var_slow_time_dependent_potassium_current__i_Ks_Na - var_sodium_calcium_exchanger__i_NaCa - var_sodium_current__i_Na_K - var_sodium_current__i_Na_Na - var_sodium_potassium_pump__i_NaK - var_time_independent_potassium_current__i_K1 - var_transient_outward_current__i_to_K - var_transient_outward_current__i_to_Na) / mParameters[9]; // millivolt / millisecond + + return d_dt_chaste_interface_var_membrane__Vm; + } + + double Dynamicmatsuoka_model_2003FromCellMLGRL1Opt::EvaluatePartialDerivative0(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -85.95752434460744 + double var_chaste_interface__internal_ion_concentrations__Nai = rY[1]; + // Units: millimolar; Initial value: 4.925761439682025 + double var_chaste_interface__internal_ion_concentrations__Ki = rY[2]; + // Units: millimolar; Initial value: 143.1837333000449 + double var_chaste_interface__internal_ion_concentrations__Ca_Total = rY[3]; + // Units: millimolar; Initial value: 0.00040180173572968586 + double var_chaste_interface__ATP_production__ATPi = rY[4]; + // Units: millimolar; Initial value: 4.657102729020499 + double var_chaste_interface__sodium_current_voltage_dependent_gate__p_AP_Na = rY[5]; + // Units: dimensionless; Initial value: 1.779648367445368e-05 + double var_chaste_interface__sodium_current_ultra_slow_gate__y = rY[8]; + // Units: dimensionless; Initial value: 0.5861887862983165 + double var_chaste_interface__L_type_Ca_channel_voltage_dependent_gate__p_AP_CaL = rY[9]; + // Units: dimensionless; Initial value: 1.5445004166497696e-06 + double var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_U = rY[12]; + // Units: dimensionless; Initial value: 0.17246483915629204 + double var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_UCa = rY[13]; + // Units: dimensionless; Initial value: 6.098246017787626e-05 + double var_chaste_interface__L_type_Ca_channel_ultra_slow_gate__y = rY[15]; + // Units: dimensionless; Initial value: 0.9985266538252986 + double var_chaste_interface__T_type_Ca_channel_y1_gate__y1 = rY[16]; + // Units: dimensionless; Initial value: 1.6882718240109127e-05 + double var_chaste_interface__T_type_Ca_channel_y2_gate__y2 = rY[17]; + // Units: dimensionless; Initial value: 0.8585352091865849 + double var_chaste_interface__time_independent_potassium_current_y_gate__y = rY[18]; + // Units: dimensionless; Initial value: 0.6080573900752752 + double var_chaste_interface__rapid_time_dependent_potassium_current_y1_gate__y1 = rY[19]; + // Units: dimensionless; Initial value: 0.0018339931180983765 + double var_chaste_interface__rapid_time_dependent_potassium_current_y2_gate__y2 = rY[20]; + // Units: dimensionless; Initial value: 0.20443083454225305 + double var_chaste_interface__rapid_time_dependent_potassium_current_y3_gate__y3 = rY[21]; + // Units: dimensionless; Initial value: 0.967887666264921 + double var_chaste_interface__slow_time_dependent_potassium_current_y1_gate__y1 = rY[22]; + // Units: dimensionless; Initial value: 0.09738789658609195 + double var_chaste_interface__slow_time_dependent_potassium_current_y2_gate__y2 = rY[23]; + // Units: dimensionless; Initial value: 0.09745345578743213 + double var_chaste_interface__transient_outward_current_y1_gate__y1 = rY[24]; + // Units: dimensionless; Initial value: 0.0007956883250874798 + double var_chaste_interface__transient_outward_current_y2_gate__y2 = rY[25]; + // Units: dimensionless; Initial value: 0.9999125083105881 + double var_chaste_interface__sodium_calcium_exchanger_y_gate__y = rY[26]; + // Units: dimensionless; Initial value: 0.9891789193465331 + double var_chaste_interface__sodium_potassium_pump_y_gate__y = rY[27]; + // Units: dimensionless; Initial value: 0.5910747147428818 + + + // Lookup table indexing + const bool _oob_0 = Dynamicmatsuoka_model_2003FromCellMLGRL1Opt_LookupTables::Instance()->CheckIndex0(var_chaste_interface__membrane__Vm); +// LCOV_EXCL_START + if (_oob_0) + EXCEPTION(DumpState("membrane_voltage outside lookup table range", rY , var_chaste_interface__environment__time)); +// LCOV_EXCL_STOP + const double* const _lt_0_row = Dynamicmatsuoka_model_2003FromCellMLGRL1Opt_LookupTables::Instance()->IndexTable0(var_chaste_interface__membrane__Vm); + + const double var_x0 = 1 / mParameters[9]; + const double var_x1 = var_chaste_interface__membrane__Vm == 0; + const double var_x2 = 0.037435192301797954 * var_chaste_interface__membrane__Vm; + const double var_x3 = exp(-var_x2); + const double var_x4 = var_x3 * mParameters[7]; + const double var_x5 = -var_x4 + var_chaste_interface__internal_ion_concentrations__Nai; + const double var_x6 = 1 - var_x3; + const double var_x7 = 1 / var_x6; + const double var_x8 = 0.037435192301797954 * var_x7; + const double var_x9 = 0.0014013936226725929 * var_chaste_interface__membrane__Vm; + const double var_x10 = var_x7 * var_x9; + const double var_x11 = var_x3 * var_x9 / pow(var_x6, 2); + const double var_x12 = ((var_x1) ? (0) : (var_x10 * var_x4 + var_x5 * var_x8 - var_x11 * var_x5)); + const double var_x13 = 0.074870384603595908 * var_chaste_interface__membrane__Vm; + const double var_x14 = exp(-var_x13); + const double var_x15 = 1 - var_x14; + const double var_x16 = 1 / var_x15; + const double var_x17 = -0.052380000000000003 + var_chaste_interface__internal_ion_concentrations__Ca_Total; + const double var_x18 = sqrt(pow(var_x17, 2) + 0.0095200000000000007 * var_chaste_interface__internal_ion_concentrations__Ca_Total); + const double var_x19 = var_x14 * mParameters[5]; + const double var_x20 = -0.026190000000000001 - var_x19 + 0.5 * var_x18 + 0.5 * var_chaste_interface__internal_ion_concentrations__Ca_Total; + const double var_x21 = var_x16 * var_x20; + const double var_x22 = 0.0056055744906903715 * var_chaste_interface__membrane__Vm; + const double var_x23 = ((var_x1) ? (0) : (0.074870384603595908 * var_x21 + var_x16 * var_x19 * var_x22 - var_x14 * var_x20 * var_x22 / pow(var_x15, 2))); + const double var_x24 = var_x3 * mParameters[6]; + const double var_x25 = -var_x24 + var_chaste_interface__internal_ion_concentrations__Ki; + const double var_x26 = ((var_x1) ? (0) : (var_x10 * var_x24 + var_x25 * var_x8 - var_x11 * var_x25)); + const double var_x27 = var_x17 + var_x18; + const double var_x28 = 1 + 1.3823999999999997e-8 / pow(var_x27, 3); + const double var_x29 = 1 / var_x28; + const double var_x30 = 0.11 * var_x29; + const double var_x31 = pow(var_chaste_interface__ATP_production__ATPi, 2); + const double var_x32 = pow(mParameters[6], 0.23999999999999999); + const double var_x33 = var_x32 / (1 + 99.999999999999986 * var_x31); + const double var_x34 = pow(var_chaste_interface__internal_ion_concentrations__Nai, 3); + const double var_x35 = 1 / var_x34; + const double var_x36 = -17.978260869565219 + 362.31884057971018 * var_x18 + 362.31884057971018 * var_chaste_interface__internal_ion_concentrations__Ca_Total; + const double var_x37 = var_x35 * var_x36; + const double var_x38 = _lt_0_row[5]; + const double var_x39 = var_x38 / (1 + 669.921875 * var_x37); + const double var_x40 = var_x39 * var_chaste_interface__sodium_calcium_exchanger_y_gate__y; + const double var_x41 = pow(mParameters[7], 3); + const double var_x42 = _lt_0_row[6] / (1 + 669921.875 * (1 + 0.7246376811594204 * mParameters[5]) / var_x41); + const double var_x43 = var_x42 * (1 - var_chaste_interface__sodium_calcium_exchanger_y_gate__y); + const double var_x44 = -0.011979261536575346 * var_x40 - 0.025455930765222609 * var_x43; + const double var_x45 = 612 * var_chaste_interface__T_type_Ca_channel_y2_gate__y2; + const double var_x46 = var_x45 * var_chaste_interface__T_type_Ca_channel_y1_gate__y1; + const double var_x47 = pow(var_chaste_interface__slow_time_dependent_potassium_current_y1_gate__y1, 2); + const double var_x48 = 0.10000000000000001 + 0.90000000000000002 * var_chaste_interface__slow_time_dependent_potassium_current_y2_gate__y2; + const double var_x49 = var_x47 * var_x48; + const double var_x50 = 0.2016 * var_x49; + const double var_x51 = pow(var_chaste_interface__transient_outward_current_y1_gate__y1, 3); + const double var_x52 = 0.00297 * var_x51; + const double var_x53 = var_x52 * var_chaste_interface__transient_outward_current_y2_gate__y2; + const double var_x54 = var_x49 * mParameters[13]; + const double var_x55 = var_x26 * var_x54; + const double var_x56 = var_x51 * mParameters[15]; + const double var_x57 = var_x56 * var_chaste_interface__transient_outward_current_y2_gate__y2; + const double var_x58 = var_x26 * var_x57; + const double var_x59 = mParameters[10] * var_chaste_interface__sodium_current_ultra_slow_gate__y; + const double var_x60 = var_x59 * var_chaste_interface__sodium_current_voltage_dependent_gate__p_AP_Na; + const double var_x61 = var_x12 * var_x60; + const double var_x62 = 0.10000000000000001 * var_x60; + const double var_x63 = 1 - var_chaste_interface__sodium_potassium_pump_y_gate__y; + const double var_x64 = _lt_0_row[4]; + const double var_x65 = pow((1 / (var_x64 * mParameters[7])), 1.0600000000000001); + const double var_x66 = 1 + 4.560221410801109 * pow(mParameters[6], 1.1200000000000001); + const double var_x67 = var_x65 * var_x66; + const double var_x68 = pow((0.011104864200909382 + var_x67), (-2)); + const double var_x69 = var_x67 * var_x68; + const double var_x70 = var_x63 * var_x69 * mParameters[9]; + const double var_x71 = 0.40000000000000002 * var_chaste_interface__rapid_time_dependent_potassium_current_y2_gate__y2 + 0.59999999999999998 * var_chaste_interface__rapid_time_dependent_potassium_current_y1_gate__y1; + const double var_x72 = 0.71370912277944121 * var_x71; + const double var_x73 = pow(mParameters[6], 0.20000000000000001); + const double var_x74 = var_x73 * mParameters[9] * mParameters[12] * var_chaste_interface__rapid_time_dependent_potassium_current_y3_gate__y3; + const double var_x75 = pow(mParameters[6], 0.40000000000000002); + const double var_x76 = 1 / var_chaste_interface__internal_ion_concentrations__Ki; + const double var_x77 = log(var_x76 * mParameters[6]); + const double var_x78 = exp(-2.4319999999999999 + 0.064000000000000001 * var_chaste_interface__membrane__Vm - 1.7096212431350641 * var_x77); + const double var_x79 = 1 + var_x78; + const double var_x80 = pow(var_x79, 4); + const double var_x81 = exp(-2.1000000000000001 + 0.029999999999999999 * var_chaste_interface__membrane__Vm - 0.80138495771956131 * var_x77); + const double var_x82 = 1 + var_x81; + const double var_x83 = pow(var_x82, (-4)); + const double var_x84 = exp(-2.1000000000000001 + 0.014999999999999999 * var_chaste_interface__membrane__Vm - 0.40069247885978065 * var_x77); + const double var_x85 = 1 + var_x84; + const double var_x86 = 1 / var_x85; + const double var_x87 = exp(-0.35000000000000003 + 0.035000000000000003 * var_chaste_interface__membrane__Vm - 0.93494911733948827 * var_x77); + const double var_x88 = var_x86 * var_x87; + const double var_x89 = exp(0.47999999999999998 + 1.282215932351298 * var_x77 - 0.048000000000000001 * var_chaste_interface__membrane__Vm); + const double var_x90 = var_x89 / var_x82; + const double var_x91 = var_x79 * var_x90; + const double var_x92 = var_x91 + 0.25 * var_x88; + const double var_x93 = pow(var_x92, (-4)); + const double var_x94 = pow(var_x89, 4); + const double var_x95 = var_x83 * var_x93 * var_x94; + const double var_x96 = var_x80 * var_x95; + const double var_x97 = var_x96; + const double var_x98 = pow(var_x85, (-2)); + const double var_x99 = pow(var_x89, 2); + const double var_x100 = pow(var_x87, 2); + const double var_x101 = var_x100 * var_x93 * var_x98 * var_x99; + const double var_x102 = pow(var_x82, (-2)); + const double var_x103 = pow(var_x79, 2); + const double var_x104 = var_x102 * var_x103; + const double var_x105 = var_x101 * var_x104; + const double var_x106 = pow(var_x79, 3); + const double var_x107 = pow(var_x82, (-3)); + const double var_x108 = pow(var_x89, 3); + const double var_x109 = pow(var_x92, (-3)); + const double var_x110 = 1 / (0.75 * var_x88 + 3 * var_x91); + const double var_x111 = var_x109 * var_x110; + const double var_x112 = var_x106 * var_x107 * var_x108 * var_x111 * var_x88; + const double var_x113 = var_x75 * (var_x97 + 0.125 * var_x105 + 2 * var_x112) * mParameters[11]; + const double var_x114 = 0.50938071193859957 * var_x113; + const double var_x115 = mParameters[9] * var_chaste_interface__time_independent_potassium_current_y_gate__y; + const double var_x116 = var_x23 * var_chaste_interface__L_type_Ca_channel_voltage_dependent_gate__p_AP_CaL; + const double var_x117 = var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_U + var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_UCa; + const double var_x118 = pow(var_chaste_interface__ATP_production__ATPi, (-3)); + const double var_x119 = 1 / (1 + 2.7439999999999993 * var_x118); + const double var_x120 = var_x119 * mParameters[8] * var_chaste_interface__L_type_Ca_channel_ultra_slow_gate__y; + const double var_x121 = var_x117 * var_x120; + const double var_x122 = var_x116 * var_x121; + const double var_x123 = var_x120 * var_chaste_interface__L_type_Ca_channel_voltage_dependent_gate__p_AP_CaL; + const double var_x124 = var_x117 * var_x123; + const double var_x125 = 0.00036499999999999998 * var_x124; + const double var_x126 = 1.8499999999999999e-5 * var_x124; + const double var_x127 = 0.12 * var_x81; + const double var_x128 = pow(var_x82, (-5)); + const double var_x129 = var_x80 * var_x94; + const double var_x130 = var_x128 * var_x129 * var_x93; + const double var_x131 = pow(var_x92, (-5)); + const double var_x132 = var_x84 * var_x87 * var_x98; + const double var_x133 = var_x78 * var_x90; + const double var_x134 = var_x102 * var_x79 * var_x89; + const double var_x135 = 0.014999999999999999 * var_x132 + 0.192 * var_x91 - 0.25600000000000001 * var_x133 - 0.035000000000000003 * var_x88 + var_x127 * var_x134; + const double var_x136 = var_x100 * var_x104 * var_x84 * var_x93 * var_x99 / pow(var_x85, 3); + const double var_x137 = var_x101 * var_x103 * var_x107; + const double var_x138 = var_x134 * var_x81; + const double var_x139 = 0.01125 * var_x132 + 0.089999999999999997 * var_x138 + 0.14400000000000002 * var_x91 - 0.192 * var_x133 - 0.026250000000000002 * var_x88; + const double var_x140 = var_x108 * var_x111; + const double var_x141 = var_x106 * var_x140; + const double var_x142 = var_x107 * var_x141; + const double var_x143 = var_x81 * var_x83; + const double var_x144 = -0.0032499999999999994 * var_x105 - 0.0037499999999999999 * var_x136 - 0.192 * var_x96 - 0.218 * var_x112 - var_x127 * var_x130 - 0.0074999999999999997 * var_x137 * var_x81 - 0.029999999999999999 * var_x132 * var_x142 - 0.17999999999999999 * var_x106 * var_x140 * var_x143 * var_x88 + var_x131 * var_x135 * var_x80 * var_x83 * var_x94 + 0.25600000000000001 * var_x106 * var_x78 * var_x83 * var_x93 * var_x94 + 0.125 * var_x100 * var_x102 * var_x103 * var_x131 * var_x135 * var_x98 * var_x99 + 0.016 * var_x100 * var_x102 * var_x78 * var_x79 * var_x93 * var_x98 * var_x99 + 0.22222222222222221 * var_x106 * var_x107 * var_x108 * var_x131 * var_x139 * var_x86 * var_x87 + 2 * var_x106 * var_x107 * var_x108 * var_x110 * var_x139 * var_x86 * var_x87 * var_x93 + 0.38400000000000001 * var_x103 * var_x107 * var_x108 * var_x109 * var_x110 * var_x78 * var_x86 * var_x87; + const double var_x145 = -26.712831923985377 * var_x77 + var_chaste_interface__membrane__Vm; + const double var_x146 = var_x115 * var_x145 * var_x75 * mParameters[11]; + const double var_x147 = 0.50938071193859957 * var_x146; + const double var_x148 = pow(mParameters[6], 0.16); + const double var_x149 = 0.0010924717003124302 * var_x148; + const double var_x150 = var_chaste_interface__membrane__Vm == (-3); + const double var_x151 = var_x2 * var_x7; + const double var_x152 = ((var_x1) ? (var_chaste_interface__internal_ion_concentrations__Ki) : (var_x151 * var_x25)); + const double var_x153 = var_x148 * var_x152; + const double var_x154 = 0.076923076923076927 * var_chaste_interface__membrane__Vm; + const double var_x155 = exp(-0.23076923076923078 - var_x154); + const double var_x156 = 1 - var_x155; + const double var_x157 = 8.3986538766456042e-5 / var_x156; + const double var_x158 = 3 + var_chaste_interface__membrane__Vm; + const double var_x159 = var_x148 * var_x157 * var_x158; + const double var_x160 = ((var_x150) ? (var_x149 * var_x26) : (var_x153 * var_x157 + var_x159 * var_x26 - 6.4605029820350801e-6 * var_x153 * var_x155 * var_x158 / pow(var_x156, 2))); + + partialF = var_x0 * (-var_x122 - var_x160 - var_x55 - var_x58 - var_x61 - 0.38500000000000001 * var_x12 - 0.040000000000000001 * var_x23 - 0.0003035235018269044 * var_x70 - 44.047040000000003 * var_x33 - 0.15400000000000003 * var_x26 - var_x114 * var_x115 - var_x12 * var_x126 - var_x12 * var_x30 - var_x12 * var_x50 - var_x12 * var_x53 - var_x125 * var_x26 - var_x144 * var_x147 - var_x23 * var_x46 - var_x26 * var_x30 - var_x26 * var_x62 - var_x72 * var_x74 + var_x44 * mParameters[9] * mParameters[14]); + } + else + { + const double y_save = rY[0]; + rY[0] += delta; + const double temp = EvaluateYDerivative0(var_chaste_interface__environment__time, rY); + partialF = (temp-mEvalF[0])/delta; + rY[0] = y_save; + } + return partialF; + } + double Dynamicmatsuoka_model_2003FromCellMLGRL1Opt::EvaluateYDerivative1(double var_chaste_interface__environment__time, std::vector& rY) + { + + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -85.95752434460744 + double var_chaste_interface__internal_ion_concentrations__Nai = rY[1]; + // Units: millimolar; Initial value: 4.925761439682025 + double var_chaste_interface__internal_ion_concentrations__Ki = rY[2]; + // Units: millimolar; Initial value: 143.1837333000449 + double var_chaste_interface__internal_ion_concentrations__Ca_Total = rY[3]; + // Units: millimolar; Initial value: 0.00040180173572968586 + double var_chaste_interface__ATP_production__ATPi = rY[4]; + // Units: millimolar; Initial value: 4.657102729020499 + double var_chaste_interface__sodium_current_voltage_dependent_gate__p_AP_Na = rY[5]; + // Units: dimensionless; Initial value: 1.779648367445368e-05 + double var_chaste_interface__sodium_current_ultra_slow_gate__y = rY[8]; + // Units: dimensionless; Initial value: 0.5861887862983165 + double var_chaste_interface__L_type_Ca_channel_voltage_dependent_gate__p_AP_CaL = rY[9]; + // Units: dimensionless; Initial value: 1.5445004166497696e-06 + double var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_U = rY[12]; + // Units: dimensionless; Initial value: 0.17246483915629204 + double var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_UCa = rY[13]; + // Units: dimensionless; Initial value: 6.098246017787626e-05 + double var_chaste_interface__L_type_Ca_channel_ultra_slow_gate__y = rY[15]; + // Units: dimensionless; Initial value: 0.9985266538252986 + double var_chaste_interface__slow_time_dependent_potassium_current_y1_gate__y1 = rY[22]; + // Units: dimensionless; Initial value: 0.09738789658609195 + double var_chaste_interface__slow_time_dependent_potassium_current_y2_gate__y2 = rY[23]; + // Units: dimensionless; Initial value: 0.09745345578743213 + double var_chaste_interface__transient_outward_current_y1_gate__y1 = rY[24]; + // Units: dimensionless; Initial value: 0.0007956883250874798 + double var_chaste_interface__transient_outward_current_y2_gate__y2 = rY[25]; + // Units: dimensionless; Initial value: 0.9999125083105881 + double var_chaste_interface__sodium_calcium_exchanger_y_gate__y = rY[26]; + // Units: dimensionless; Initial value: 0.9891789193465331 + double var_chaste_interface__sodium_potassium_pump_y_gate__y = rY[27]; + // Units: dimensionless; Initial value: 0.5910747147428818 + + + // Lookup table indexing + const bool _oob_0 = Dynamicmatsuoka_model_2003FromCellMLGRL1Opt_LookupTables::Instance()->CheckIndex0(var_chaste_interface__membrane__Vm); +// LCOV_EXCL_START + if (_oob_0) + EXCEPTION(DumpState("membrane_voltage outside lookup table range", rY , var_chaste_interface__environment__time)); +// LCOV_EXCL_STOP + const double* const _lt_0_row = Dynamicmatsuoka_model_2003FromCellMLGRL1Opt_LookupTables::Instance()->IndexTable0(var_chaste_interface__membrane__Vm); + + // Mathematics + const double var_L_type_Ca_channel__p_open_CaL = (var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_U + var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_UCa) * var_chaste_interface__L_type_Ca_channel_ultra_slow_gate__y * var_chaste_interface__L_type_Ca_channel_voltage_dependent_gate__p_AP_CaL / (1 + 2.7439999999999993 / pow(var_chaste_interface__ATP_production__ATPi, 3)); // dimensionless + const double var_internal_ion_concentrations__Cai = -0.026190000000000001 + 0.5 * sqrt(pow((0.052380000000000003 - var_chaste_interface__internal_ion_concentrations__Ca_Total), 2) + 0.0095200000000000007 * var_chaste_interface__internal_ion_concentrations__Ca_Total) + 0.5 * var_chaste_interface__internal_ion_concentrations__Ca_Total; // millimolar + const double var_background_lCa_current__p_open = 1 / (1 + 1.7279999999999996e-9 / pow(var_internal_ion_concentrations__Cai, 3)); // dimensionless + const double var_constant_field_equations__CF_Na = ((var_chaste_interface__membrane__Vm == 0) ? (-mParameters[7]) : (0.037435192301797954 * (-mParameters[7] * _lt_0_row[2] + var_chaste_interface__internal_ion_concentrations__Nai) * var_chaste_interface__membrane__Vm / (_lt_0_row[3]))); // millimolar + const double var_L_type_Ca_channel__i_CaL_Na = 1.8499999999999999e-5 * mParameters[8] * var_L_type_Ca_channel__p_open_CaL * var_constant_field_equations__CF_Na; // picoA + const double var_background_NSC_current__i_bNSC_Na = 0.38500000000000001 * var_constant_field_equations__CF_Na; // picoA + const double var_background_lCa_current__i_lCa_Na = 0.11 * var_background_lCa_current__p_open * var_constant_field_equations__CF_Na; // picoA + const double var_slow_time_dependent_potassium_current__i_Ks_Na = 0.2016 * pow(var_chaste_interface__slow_time_dependent_potassium_current_y1_gate__y1, 2) * (0.10000000000000001 + 0.90000000000000002 * var_chaste_interface__slow_time_dependent_potassium_current_y2_gate__y2) * var_constant_field_equations__CF_Na; // picoA + const double var_sodium_calcium_exchanger__k1 = _lt_0_row[26]; // per_millisecond + const double var_sodium_calcium_exchanger__k2 = _lt_0_row[27]; // per_millisecond + const double var_sodium_calcium_exchanger__p_E1Na = 1 / (1 + 669.921875 * (1 + 724.63768115942037 * var_internal_ion_concentrations__Cai) / pow(var_chaste_interface__internal_ion_concentrations__Nai, 3)); // dimensionless + const double var_sodium_calcium_exchanger__p_E2Na = 1 / (1 + 669921.875 * (1 + 0.7246376811594204 * mParameters[5]) / pow(mParameters[7], 3)); // dimensionless + const double var_sodium_calcium_exchanger__i_NaCa = (var_sodium_calcium_exchanger__k1 * var_sodium_calcium_exchanger__p_E1Na * var_chaste_interface__sodium_calcium_exchanger_y_gate__y - (1 - var_chaste_interface__sodium_calcium_exchanger_y_gate__y) * var_sodium_calcium_exchanger__k2 * var_sodium_calcium_exchanger__p_E2Na) * mParameters[9] * mParameters[14]; // picoA + const double var_sodium_current__i_Na_Na = var_constant_field_equations__CF_Na * mParameters[10] * var_chaste_interface__sodium_current_ultra_slow_gate__y * var_chaste_interface__sodium_current_voltage_dependent_gate__p_AP_Na; // picoA + const double var_sodium_potassium_pump__Nao_Eff = mParameters[7] * _lt_0_row[4]; // millimolar + const double var_sodium_potassium_pump__k1 = 0.37 / (1 + 0.094 / var_chaste_interface__ATP_production__ATPi); // per_millisecond + const double var_sodium_potassium_pump__p_E1Na = 1 / (1 + 4.4045579125871104 * pow((1 / var_chaste_interface__internal_ion_concentrations__Nai), 1.0600000000000001) * (1 + 0.020000293738509214 * pow(var_chaste_interface__internal_ion_concentrations__Ki, 1.1200000000000001))); // dimensionless + const double var_sodium_potassium_pump__p_E2Na = 1 / (1 + 90.050628437051003 * pow((1 / var_sodium_potassium_pump__Nao_Eff), 1.0600000000000001) * (1 + 4.560221410801109 * pow(mParameters[6], 1.1200000000000001))); // dimensionless + const double var_sodium_potassium_pump__i_NaK = 21 * (-0.040000000000000001 * (1 - var_chaste_interface__sodium_potassium_pump_y_gate__y) * var_sodium_potassium_pump__p_E2Na + var_sodium_potassium_pump__k1 * var_sodium_potassium_pump__p_E1Na * var_chaste_interface__sodium_potassium_pump_y_gate__y) * mParameters[9]; // picoA + const double var_transient_outward_current__i_to_Na = 0.00297 * pow(var_chaste_interface__transient_outward_current_y1_gate__y1, 3) * var_constant_field_equations__CF_Na * var_chaste_interface__transient_outward_current_y2_gate__y2; // picoA + const double d_dt_chaste_interface_var_internal_ion_concentrations__Nai = -1.2955153404562495e-6 * (3 * var_sodium_calcium_exchanger__i_NaCa + 3 * var_sodium_potassium_pump__i_NaK + var_L_type_Ca_channel__i_CaL_Na + var_background_NSC_current__i_bNSC_Na + var_background_lCa_current__i_lCa_Na + var_slow_time_dependent_potassium_current__i_Ks_Na + var_sodium_current__i_Na_Na + var_transient_outward_current__i_to_Na) * mParameters[4]; // millimolar / millisecond + + return d_dt_chaste_interface_var_internal_ion_concentrations__Nai; + } + + double Dynamicmatsuoka_model_2003FromCellMLGRL1Opt::EvaluatePartialDerivative1(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -85.95752434460744 + double var_chaste_interface__internal_ion_concentrations__Nai = rY[1]; + // Units: millimolar; Initial value: 4.925761439682025 + double var_chaste_interface__internal_ion_concentrations__Ki = rY[2]; + // Units: millimolar; Initial value: 143.1837333000449 + double var_chaste_interface__internal_ion_concentrations__Ca_Total = rY[3]; + // Units: millimolar; Initial value: 0.00040180173572968586 + double var_chaste_interface__ATP_production__ATPi = rY[4]; + // Units: millimolar; Initial value: 4.657102729020499 + double var_chaste_interface__sodium_current_voltage_dependent_gate__p_AP_Na = rY[5]; + // Units: dimensionless; Initial value: 1.779648367445368e-05 + double var_chaste_interface__sodium_current_ultra_slow_gate__y = rY[8]; + // Units: dimensionless; Initial value: 0.5861887862983165 + double var_chaste_interface__L_type_Ca_channel_voltage_dependent_gate__p_AP_CaL = rY[9]; + // Units: dimensionless; Initial value: 1.5445004166497696e-06 + double var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_U = rY[12]; + // Units: dimensionless; Initial value: 0.17246483915629204 + double var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_UCa = rY[13]; + // Units: dimensionless; Initial value: 6.098246017787626e-05 + double var_chaste_interface__L_type_Ca_channel_ultra_slow_gate__y = rY[15]; + // Units: dimensionless; Initial value: 0.9985266538252986 + double var_chaste_interface__slow_time_dependent_potassium_current_y1_gate__y1 = rY[22]; + // Units: dimensionless; Initial value: 0.09738789658609195 + double var_chaste_interface__slow_time_dependent_potassium_current_y2_gate__y2 = rY[23]; + // Units: dimensionless; Initial value: 0.09745345578743213 + double var_chaste_interface__transient_outward_current_y1_gate__y1 = rY[24]; + // Units: dimensionless; Initial value: 0.0007956883250874798 + double var_chaste_interface__transient_outward_current_y2_gate__y2 = rY[25]; + // Units: dimensionless; Initial value: 0.9999125083105881 + double var_chaste_interface__sodium_calcium_exchanger_y_gate__y = rY[26]; + // Units: dimensionless; Initial value: 0.9891789193465331 + double var_chaste_interface__sodium_potassium_pump_y_gate__y = rY[27]; + // Units: dimensionless; Initial value: 0.5910747147428818 + + + // Lookup table indexing + const bool _oob_0 = Dynamicmatsuoka_model_2003FromCellMLGRL1Opt_LookupTables::Instance()->CheckIndex0(var_chaste_interface__membrane__Vm); +// LCOV_EXCL_START + if (_oob_0) + EXCEPTION(DumpState("membrane_voltage outside lookup table range", rY , var_chaste_interface__environment__time)); +// LCOV_EXCL_STOP + const double* const _lt_0_row = Dynamicmatsuoka_model_2003FromCellMLGRL1Opt_LookupTables::Instance()->IndexTable0(var_chaste_interface__membrane__Vm); + + const double var_x1 = var_chaste_interface__membrane__Vm == 0; + const double var_x2 = 0.037435192301797954 * var_chaste_interface__membrane__Vm; + const double var_x3 = exp(-var_x2); + const double var_x6 = 1 - var_x3; + const double var_x7 = 1 / var_x6; + const double var_x17 = -0.052380000000000003 + var_chaste_interface__internal_ion_concentrations__Ca_Total; + const double var_x18 = sqrt(pow(var_x17, 2) + 0.0095200000000000007 * var_chaste_interface__internal_ion_concentrations__Ca_Total); + const double var_x27 = var_x17 + var_x18; + const double var_x28 = 1 + 1.3823999999999997e-8 / pow(var_x27, 3); + const double var_x29 = 1 / var_x28; + const double var_x34 = pow(var_chaste_interface__internal_ion_concentrations__Nai, 3); + const double var_x35 = 1 / var_x34; + const double var_x36 = -17.978260869565219 + 362.31884057971018 * var_x18 + 362.31884057971018 * var_chaste_interface__internal_ion_concentrations__Ca_Total; + const double var_x37 = var_x35 * var_x36; + const double var_x38 = _lt_0_row[5]; + const double var_x47 = pow(var_chaste_interface__slow_time_dependent_potassium_current_y1_gate__y1, 2); + const double var_x48 = 0.10000000000000001 + 0.90000000000000002 * var_chaste_interface__slow_time_dependent_potassium_current_y2_gate__y2; + const double var_x49 = var_x47 * var_x48; + const double var_x51 = pow(var_chaste_interface__transient_outward_current_y1_gate__y1, 3); + const double var_x59 = mParameters[10] * var_chaste_interface__sodium_current_ultra_slow_gate__y; + const double var_x60 = var_x59 * var_chaste_interface__sodium_current_voltage_dependent_gate__p_AP_Na; + const double var_x117 = var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_U + var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_UCa; + const double var_x118 = pow(var_chaste_interface__ATP_production__ATPi, (-3)); + const double var_x119 = 1 / (1 + 2.7439999999999993 * var_x118); + const double var_x120 = var_x119 * mParameters[8] * var_chaste_interface__L_type_Ca_channel_ultra_slow_gate__y; + const double var_x123 = var_x120 * var_chaste_interface__L_type_Ca_channel_voltage_dependent_gate__p_AP_CaL; + const double var_x124 = var_x117 * var_x123; + const double var_x151 = var_x2 * var_x7; + const double var_x161 = ((var_x1) ? (0) : (var_x151)); + const double var_x162 = var_x161 * var_x60; + const double var_x163 = 1 / var_chaste_interface__internal_ion_concentrations__Nai; + const double var_x164 = pow(var_x163, 1.0600000000000001); + const double var_x165 = var_x164 * (1 + 0.020000293738509214 * pow(var_chaste_interface__internal_ion_concentrations__Ki, 1.1200000000000001)); + const double var_x166 = 1 / var_chaste_interface__ATP_production__ATPi; + const double var_x167 = 1 + 0.094 * var_x166; + const double var_x168 = 1 / var_x167; + const double var_x169 = pow((0.22703754152993499 + var_x165), (-2)); + const double var_x170 = var_x168 * var_x169; + const double var_x171 = var_x163 * var_x165 * var_x170; + const double var_x172 = mParameters[9] * var_chaste_interface__sodium_potassium_pump_y_gate__y; + const double var_x173 = var_x171 * var_x172; + const double var_x174 = pow((0.0014927113702623907 + var_x37), (-2)); + const double var_x175 = var_x174 * var_x38; + const double var_x176 = var_x175 * var_x36 / pow(var_chaste_interface__internal_ion_concentrations__Nai, 4); + const double var_x178 = mParameters[9] * mParameters[14]; + const double var_x179 = var_x178 * var_chaste_interface__sodium_calcium_exchanger_y_gate__y; + const double var_x252 = 1.4250668745018745e-7 * var_x29; + const double var_x253 = 3.8476805611550606e-9 * var_x51; + const double var_x254 = var_x253 * var_chaste_interface__transient_outward_current_y2_gate__y2; + const double var_x255 = 2.6117589263597991e-7 * var_x49; + const double var_x257 = 2.3967033798440612e-11 * var_x124; + const double var_x258 = var_x176 * var_x179; + + partialF = (-7.2675557857281787e-6 * var_x173 - 4.9877340607565601e-7 * var_x161 - 1.7404474311435562e-8 * var_x258 - 1.2955153404562495e-6 * var_x162 - var_x161 * var_x252 - var_x161 * var_x254 - var_x161 * var_x255 - var_x161 * var_x257) * mParameters[4]; + } + else + { + const double y_save = rY[1]; + rY[1] += delta; + const double temp = EvaluateYDerivative1(var_chaste_interface__environment__time, rY); + partialF = (temp-mEvalF[1])/delta; + rY[1] = y_save; + } + return partialF; + } + double Dynamicmatsuoka_model_2003FromCellMLGRL1Opt::EvaluateYDerivative2(double var_chaste_interface__environment__time, std::vector& rY) + { + + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -85.95752434460744 + double var_chaste_interface__internal_ion_concentrations__Nai = rY[1]; + // Units: millimolar; Initial value: 4.925761439682025 + double var_chaste_interface__internal_ion_concentrations__Ki = rY[2]; + // Units: millimolar; Initial value: 143.1837333000449 + double var_chaste_interface__internal_ion_concentrations__Ca_Total = rY[3]; + // Units: millimolar; Initial value: 0.00040180173572968586 + double var_chaste_interface__ATP_production__ATPi = rY[4]; + // Units: millimolar; Initial value: 4.657102729020499 + double var_chaste_interface__sodium_current_voltage_dependent_gate__p_AP_Na = rY[5]; + // Units: dimensionless; Initial value: 1.779648367445368e-05 + double var_chaste_interface__sodium_current_ultra_slow_gate__y = rY[8]; + // Units: dimensionless; Initial value: 0.5861887862983165 + double var_chaste_interface__L_type_Ca_channel_voltage_dependent_gate__p_AP_CaL = rY[9]; + // Units: dimensionless; Initial value: 1.5445004166497696e-06 + double var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_U = rY[12]; + // Units: dimensionless; Initial value: 0.17246483915629204 + double var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_UCa = rY[13]; + // Units: dimensionless; Initial value: 6.098246017787626e-05 + double var_chaste_interface__L_type_Ca_channel_ultra_slow_gate__y = rY[15]; + // Units: dimensionless; Initial value: 0.9985266538252986 + double var_chaste_interface__time_independent_potassium_current_y_gate__y = rY[18]; + // Units: dimensionless; Initial value: 0.6080573900752752 + double var_chaste_interface__rapid_time_dependent_potassium_current_y1_gate__y1 = rY[19]; + // Units: dimensionless; Initial value: 0.0018339931180983765 + double var_chaste_interface__rapid_time_dependent_potassium_current_y2_gate__y2 = rY[20]; + // Units: dimensionless; Initial value: 0.20443083454225305 + double var_chaste_interface__rapid_time_dependent_potassium_current_y3_gate__y3 = rY[21]; + // Units: dimensionless; Initial value: 0.967887666264921 + double var_chaste_interface__slow_time_dependent_potassium_current_y1_gate__y1 = rY[22]; + // Units: dimensionless; Initial value: 0.09738789658609195 + double var_chaste_interface__slow_time_dependent_potassium_current_y2_gate__y2 = rY[23]; + // Units: dimensionless; Initial value: 0.09745345578743213 + double var_chaste_interface__transient_outward_current_y1_gate__y1 = rY[24]; + // Units: dimensionless; Initial value: 0.0007956883250874798 + double var_chaste_interface__transient_outward_current_y2_gate__y2 = rY[25]; + // Units: dimensionless; Initial value: 0.9999125083105881 + double var_chaste_interface__sodium_potassium_pump_y_gate__y = rY[27]; + // Units: dimensionless; Initial value: 0.5910747147428818 + + + // Lookup table indexing + const bool _oob_0 = Dynamicmatsuoka_model_2003FromCellMLGRL1Opt_LookupTables::Instance()->CheckIndex0(var_chaste_interface__membrane__Vm); +// LCOV_EXCL_START + if (_oob_0) + EXCEPTION(DumpState("membrane_voltage outside lookup table range", rY , var_chaste_interface__environment__time)); +// LCOV_EXCL_STOP + const double* const _lt_0_row = Dynamicmatsuoka_model_2003FromCellMLGRL1Opt_LookupTables::Instance()->IndexTable0(var_chaste_interface__membrane__Vm); + + // Mathematics + const double var_L_type_Ca_channel__p_open_CaL = (var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_U + var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_UCa) * var_chaste_interface__L_type_Ca_channel_ultra_slow_gate__y * var_chaste_interface__L_type_Ca_channel_voltage_dependent_gate__p_AP_CaL / (1 + 2.7439999999999993 / pow(var_chaste_interface__ATP_production__ATPi, 3)); // dimensionless + const double var_internal_ion_concentrations__Cai = -0.026190000000000001 + 0.5 * sqrt(pow((0.052380000000000003 - var_chaste_interface__internal_ion_concentrations__Ca_Total), 2) + 0.0095200000000000007 * var_chaste_interface__internal_ion_concentrations__Ca_Total) + 0.5 * var_chaste_interface__internal_ion_concentrations__Ca_Total; // millimolar + const double var_background_lCa_current__p_open = 1 / (1 + 1.7279999999999996e-9 / pow(var_internal_ion_concentrations__Cai, 3)); // dimensionless + const double var_constant_field_equations__CF_K = ((var_chaste_interface__membrane__Vm == 0) ? (var_chaste_interface__internal_ion_concentrations__Ki) : (0.037435192301797954 * (-mParameters[6] * _lt_0_row[2] + var_chaste_interface__internal_ion_concentrations__Ki) * var_chaste_interface__membrane__Vm / (_lt_0_row[3]))); // millimolar + const double var_L_type_Ca_channel__i_CaL_K = 0.00036499999999999998 * mParameters[8] * var_L_type_Ca_channel__p_open_CaL * var_constant_field_equations__CF_K; // picoA + const double var_background_Kpl_current__i_Kpl = ((var_chaste_interface__membrane__Vm == (-3)) ? (0.0010924717003124302 * pow(mParameters[6], 0.16) * var_constant_field_equations__CF_K) : (8.3986538766456042e-5 * pow(mParameters[6], 0.16) * (3 + var_chaste_interface__membrane__Vm) * var_constant_field_equations__CF_K / (_lt_0_row[7]))); // picoA + const double var_background_NSC_current__i_bNSC_K = 0.15400000000000003 * var_constant_field_equations__CF_K; // picoA + const double var_background_lCa_current__i_lCa_K = 0.11 * var_background_lCa_current__p_open * var_constant_field_equations__CF_K; // picoA + const double var_membrane__i_ext = 1 * GetIntracellularAreaStimulus(var_chaste_interface__environment__time) * mParameters[9] / HeartConfig::Instance()->GetCapacitance(); // picoA + const double var_slow_time_dependent_potassium_current__i_Ks_K = pow(var_chaste_interface__slow_time_dependent_potassium_current_y1_gate__y1, 2) * (0.10000000000000001 + 0.90000000000000002 * var_chaste_interface__slow_time_dependent_potassium_current_y2_gate__y2) * var_constant_field_equations__CF_K * mParameters[13]; // picoA + const double var_sodium_current__i_Na_K = 0.10000000000000001 * var_constant_field_equations__CF_K * mParameters[10] * var_chaste_interface__sodium_current_ultra_slow_gate__y * var_chaste_interface__sodium_current_voltage_dependent_gate__p_AP_Na; // picoA + const double var_sodium_potassium_pump__Nao_Eff = mParameters[7] * _lt_0_row[4]; // millimolar + const double var_sodium_potassium_pump__k1 = 0.37 / (1 + 0.094 / var_chaste_interface__ATP_production__ATPi); // per_millisecond + const double var_sodium_potassium_pump__p_E1Na = 1 / (1 + 4.4045579125871104 * pow((1 / var_chaste_interface__internal_ion_concentrations__Nai), 1.0600000000000001) * (1 + 0.020000293738509214 * pow(var_chaste_interface__internal_ion_concentrations__Ki, 1.1200000000000001))); // dimensionless + const double var_sodium_potassium_pump__p_E2Na = 1 / (1 + 90.050628437051003 * pow((1 / var_sodium_potassium_pump__Nao_Eff), 1.0600000000000001) * (1 + 4.560221410801109 * pow(mParameters[6], 1.1200000000000001))); // dimensionless + const double var_sodium_potassium_pump__i_NaK = 21 * (-0.040000000000000001 * (1 - var_chaste_interface__sodium_potassium_pump_y_gate__y) * var_sodium_potassium_pump__p_E2Na + var_sodium_potassium_pump__k1 * var_sodium_potassium_pump__p_E1Na * var_chaste_interface__sodium_potassium_pump_y_gate__y) * mParameters[9]; // picoA + const double var_time_independent_potassium_current__E_K = 26.712831923985377 * log(mParameters[6] / var_chaste_interface__internal_ion_concentrations__Ki); // millivolt + const double var_background_KATP_current__i_KATP = 44.047040000000003 * pow(mParameters[6], 0.23999999999999999) * (-var_time_independent_potassium_current__E_K + var_chaste_interface__membrane__Vm) / (1 + 99.999999999999986 * pow(var_chaste_interface__ATP_production__ATPi, 2)); // picoA + const double var_rapid_time_dependent_potassium_current__i_Kr = 0.71370912277944121 * pow(mParameters[6], 0.20000000000000001) * (-var_time_independent_potassium_current__E_K + var_chaste_interface__membrane__Vm) * (0.40000000000000002 * var_chaste_interface__rapid_time_dependent_potassium_current_y2_gate__y2 + 0.59999999999999998 * var_chaste_interface__rapid_time_dependent_potassium_current_y1_gate__y1) * mParameters[9] * mParameters[12] * var_chaste_interface__rapid_time_dependent_potassium_current_y3_gate__y3; // picoA + const double var_time_independent_potassium_current__lambda = 3 * (1 + exp(-2.4319999999999999 + 0.064000000000000001 * var_chaste_interface__membrane__Vm - 0.064000000000000001 * var_time_independent_potassium_current__E_K)) * exp(0.47999999999999998 + 0.048000000000000001 * var_time_independent_potassium_current__E_K - 0.048000000000000001 * var_chaste_interface__membrane__Vm) / (1 + exp(-2.1000000000000001 + 0.029999999999999999 * var_chaste_interface__membrane__Vm - 0.029999999999999999 * var_time_independent_potassium_current__E_K)); // per_millisecond + const double var_time_independent_potassium_current__mu = 0.75 * exp(-0.35000000000000003 + 0.035000000000000003 * var_chaste_interface__membrane__Vm - 0.035000000000000003 * var_time_independent_potassium_current__E_K) / (1 + exp(-2.1000000000000001 + 0.014999999999999999 * var_chaste_interface__membrane__Vm - 0.014999999999999999 * var_time_independent_potassium_current__E_K)); // per_millisecond + const double var_time_independent_potassium_current__fB = var_time_independent_potassium_current__mu / (var_time_independent_potassium_current__lambda + var_time_independent_potassium_current__mu); // dimensionless + const double var_time_independent_potassium_current__fO = var_time_independent_potassium_current__lambda / (var_time_independent_potassium_current__lambda + var_time_independent_potassium_current__mu); // dimensionless + const double var_time_independent_potassium_current__i_K1 = 0.50938071193859957 * pow(mParameters[6], 0.40000000000000002) * (-var_time_independent_potassium_current__E_K + var_chaste_interface__membrane__Vm) * (pow(var_time_independent_potassium_current__fO, 4) + 2 * pow(var_time_independent_potassium_current__fB, 2) * pow(var_time_independent_potassium_current__fO, 2) + 2.6666666666666665 * pow(var_time_independent_potassium_current__fO, 3) * var_time_independent_potassium_current__fB) * mParameters[9] * mParameters[11] * var_chaste_interface__time_independent_potassium_current_y_gate__y; // picoA + const double var_transient_outward_current__i_to_K = pow(var_chaste_interface__transient_outward_current_y1_gate__y1, 3) * var_constant_field_equations__CF_K * mParameters[15] * var_chaste_interface__transient_outward_current_y2_gate__y2; // picoA + const double d_dt_chaste_interface_var_internal_ion_concentrations__Ki = -1.2955153404562495e-6 * (-2 * var_sodium_potassium_pump__i_NaK + var_L_type_Ca_channel__i_CaL_K + var_background_KATP_current__i_KATP + var_background_Kpl_current__i_Kpl + var_background_NSC_current__i_bNSC_K + var_background_lCa_current__i_lCa_K + var_membrane__i_ext + var_rapid_time_dependent_potassium_current__i_Kr + var_slow_time_dependent_potassium_current__i_Ks_K + var_sodium_current__i_Na_K + var_time_independent_potassium_current__i_K1 + var_transient_outward_current__i_to_K) * mParameters[4]; // millimolar / millisecond + + return d_dt_chaste_interface_var_internal_ion_concentrations__Ki; + } + + double Dynamicmatsuoka_model_2003FromCellMLGRL1Opt::EvaluatePartialDerivative2(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -85.95752434460744 + double var_chaste_interface__internal_ion_concentrations__Nai = rY[1]; + // Units: millimolar; Initial value: 4.925761439682025 + double var_chaste_interface__internal_ion_concentrations__Ki = rY[2]; + // Units: millimolar; Initial value: 143.1837333000449 + double var_chaste_interface__internal_ion_concentrations__Ca_Total = rY[3]; + // Units: millimolar; Initial value: 0.00040180173572968586 + double var_chaste_interface__ATP_production__ATPi = rY[4]; + // Units: millimolar; Initial value: 4.657102729020499 + double var_chaste_interface__sodium_current_voltage_dependent_gate__p_AP_Na = rY[5]; + // Units: dimensionless; Initial value: 1.779648367445368e-05 + double var_chaste_interface__sodium_current_ultra_slow_gate__y = rY[8]; + // Units: dimensionless; Initial value: 0.5861887862983165 + double var_chaste_interface__L_type_Ca_channel_voltage_dependent_gate__p_AP_CaL = rY[9]; + // Units: dimensionless; Initial value: 1.5445004166497696e-06 + double var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_U = rY[12]; + // Units: dimensionless; Initial value: 0.17246483915629204 + double var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_UCa = rY[13]; + // Units: dimensionless; Initial value: 6.098246017787626e-05 + double var_chaste_interface__L_type_Ca_channel_ultra_slow_gate__y = rY[15]; + // Units: dimensionless; Initial value: 0.9985266538252986 + double var_chaste_interface__time_independent_potassium_current_y_gate__y = rY[18]; + // Units: dimensionless; Initial value: 0.6080573900752752 + double var_chaste_interface__rapid_time_dependent_potassium_current_y1_gate__y1 = rY[19]; + // Units: dimensionless; Initial value: 0.0018339931180983765 + double var_chaste_interface__rapid_time_dependent_potassium_current_y2_gate__y2 = rY[20]; + // Units: dimensionless; Initial value: 0.20443083454225305 + double var_chaste_interface__rapid_time_dependent_potassium_current_y3_gate__y3 = rY[21]; + // Units: dimensionless; Initial value: 0.967887666264921 + double var_chaste_interface__slow_time_dependent_potassium_current_y1_gate__y1 = rY[22]; + // Units: dimensionless; Initial value: 0.09738789658609195 + double var_chaste_interface__slow_time_dependent_potassium_current_y2_gate__y2 = rY[23]; + // Units: dimensionless; Initial value: 0.09745345578743213 + double var_chaste_interface__transient_outward_current_y1_gate__y1 = rY[24]; + // Units: dimensionless; Initial value: 0.0007956883250874798 + double var_chaste_interface__transient_outward_current_y2_gate__y2 = rY[25]; + // Units: dimensionless; Initial value: 0.9999125083105881 + double var_chaste_interface__sodium_potassium_pump_y_gate__y = rY[27]; + // Units: dimensionless; Initial value: 0.5910747147428818 + + + + const double var_x1 = var_chaste_interface__membrane__Vm == 0; + const double var_x2 = 0.037435192301797954 * var_chaste_interface__membrane__Vm; + const double var_x3 = exp(-var_x2); + const double var_x6 = 1 - var_x3; + const double var_x7 = 1 / var_x6; + const double var_x17 = -0.052380000000000003 + var_chaste_interface__internal_ion_concentrations__Ca_Total; + const double var_x18 = sqrt(pow(var_x17, 2) + 0.0095200000000000007 * var_chaste_interface__internal_ion_concentrations__Ca_Total); + const double var_x27 = var_x17 + var_x18; + const double var_x28 = 1 + 1.3823999999999997e-8 / pow(var_x27, 3); + const double var_x29 = 1 / var_x28; + const double var_x31 = pow(var_chaste_interface__ATP_production__ATPi, 2); + const double var_x32 = pow(mParameters[6], 0.23999999999999999); + const double var_x33 = var_x32 / (1 + 99.999999999999986 * var_x31); + const double var_x47 = pow(var_chaste_interface__slow_time_dependent_potassium_current_y1_gate__y1, 2); + const double var_x48 = 0.10000000000000001 + 0.90000000000000002 * var_chaste_interface__slow_time_dependent_potassium_current_y2_gate__y2; + const double var_x49 = var_x47 * var_x48; + const double var_x51 = pow(var_chaste_interface__transient_outward_current_y1_gate__y1, 3); + const double var_x54 = var_x49 * mParameters[13]; + const double var_x56 = var_x51 * mParameters[15]; + const double var_x57 = var_x56 * var_chaste_interface__transient_outward_current_y2_gate__y2; + const double var_x59 = mParameters[10] * var_chaste_interface__sodium_current_ultra_slow_gate__y; + const double var_x60 = var_x59 * var_chaste_interface__sodium_current_voltage_dependent_gate__p_AP_Na; + const double var_x71 = 0.40000000000000002 * var_chaste_interface__rapid_time_dependent_potassium_current_y2_gate__y2 + 0.59999999999999998 * var_chaste_interface__rapid_time_dependent_potassium_current_y1_gate__y1; + const double var_x73 = pow(mParameters[6], 0.20000000000000001); + const double var_x74 = var_x73 * mParameters[9] * mParameters[12] * var_chaste_interface__rapid_time_dependent_potassium_current_y3_gate__y3; + const double var_x75 = pow(mParameters[6], 0.40000000000000002); + const double var_x76 = 1 / var_chaste_interface__internal_ion_concentrations__Ki; + const double var_x77 = log(var_x76 * mParameters[6]); + const double var_x78 = exp(-2.4319999999999999 + 0.064000000000000001 * var_chaste_interface__membrane__Vm - 1.7096212431350641 * var_x77); + const double var_x79 = 1 + var_x78; + const double var_x80 = pow(var_x79, 4); + const double var_x81 = exp(-2.1000000000000001 + 0.029999999999999999 * var_chaste_interface__membrane__Vm - 0.80138495771956131 * var_x77); + const double var_x82 = 1 + var_x81; + const double var_x83 = pow(var_x82, (-4)); + const double var_x84 = exp(-2.1000000000000001 + 0.014999999999999999 * var_chaste_interface__membrane__Vm - 0.40069247885978065 * var_x77); + const double var_x85 = 1 + var_x84; + const double var_x86 = 1 / var_x85; + const double var_x87 = exp(-0.35000000000000003 + 0.035000000000000003 * var_chaste_interface__membrane__Vm - 0.93494911733948827 * var_x77); + const double var_x88 = var_x86 * var_x87; + const double var_x89 = exp(0.47999999999999998 + 1.282215932351298 * var_x77 - 0.048000000000000001 * var_chaste_interface__membrane__Vm); + const double var_x90 = var_x89 / var_x82; + const double var_x91 = var_x79 * var_x90; + const double var_x92 = var_x91 + 0.25 * var_x88; + const double var_x93 = pow(var_x92, (-4)); + const double var_x94 = pow(var_x89, 4); + const double var_x95 = var_x83 * var_x93 * var_x94; + const double var_x96 = var_x80 * var_x95; + const double var_x97 = var_x96; + const double var_x98 = pow(var_x85, (-2)); + const double var_x99 = pow(var_x89, 2); + const double var_x100 = pow(var_x87, 2); + const double var_x101 = var_x100 * var_x93 * var_x98 * var_x99; + const double var_x102 = pow(var_x82, (-2)); + const double var_x103 = pow(var_x79, 2); + const double var_x104 = var_x102 * var_x103; + const double var_x105 = var_x101 * var_x104; + const double var_x106 = pow(var_x79, 3); + const double var_x107 = pow(var_x82, (-3)); + const double var_x108 = pow(var_x89, 3); + const double var_x109 = pow(var_x92, (-3)); + const double var_x110 = 1 / (0.75 * var_x88 + 3 * var_x91); + const double var_x111 = var_x109 * var_x110; + const double var_x112 = var_x106 * var_x107 * var_x108 * var_x111 * var_x88; + const double var_x113 = var_x75 * (var_x97 + 0.125 * var_x105 + 2 * var_x112) * mParameters[11]; + const double var_x115 = mParameters[9] * var_chaste_interface__time_independent_potassium_current_y_gate__y; + const double var_x117 = var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_U + var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_UCa; + const double var_x118 = pow(var_chaste_interface__ATP_production__ATPi, (-3)); + const double var_x119 = 1 / (1 + 2.7439999999999993 * var_x118); + const double var_x120 = var_x119 * mParameters[8] * var_chaste_interface__L_type_Ca_channel_ultra_slow_gate__y; + const double var_x123 = var_x120 * var_chaste_interface__L_type_Ca_channel_voltage_dependent_gate__p_AP_CaL; + const double var_x124 = var_x117 * var_x123; + const double var_x128 = pow(var_x82, (-5)); + const double var_x129 = var_x80 * var_x94; + const double var_x130 = var_x128 * var_x129 * var_x93; + const double var_x131 = pow(var_x92, (-5)); + const double var_x132 = var_x84 * var_x87 * var_x98; + const double var_x133 = var_x78 * var_x90; + const double var_x134 = var_x102 * var_x79 * var_x89; + const double var_x136 = var_x100 * var_x104 * var_x84 * var_x93 * var_x99 / pow(var_x85, 3); + const double var_x137 = var_x101 * var_x103 * var_x107; + const double var_x138 = var_x134 * var_x81; + const double var_x140 = var_x108 * var_x111; + const double var_x141 = var_x106 * var_x140; + const double var_x142 = var_x107 * var_x141; + const double var_x143 = var_x81 * var_x83; + const double var_x145 = -26.712831923985377 * var_x77 + var_chaste_interface__membrane__Vm; + const double var_x146 = var_x115 * var_x145 * var_x75 * mParameters[11]; + const double var_x148 = pow(mParameters[6], 0.16); + const double var_x149 = 0.0010924717003124302 * var_x148; + const double var_x150 = var_chaste_interface__membrane__Vm == (-3); + const double var_x151 = var_x2 * var_x7; + const double var_x154 = 0.076923076923076927 * var_chaste_interface__membrane__Vm; + const double var_x155 = exp(-0.23076923076923078 - var_x154); + const double var_x156 = 1 - var_x155; + const double var_x157 = 8.3986538766456042e-5 / var_x156; + const double var_x158 = 3 + var_chaste_interface__membrane__Vm; + const double var_x159 = var_x148 * var_x157 * var_x158; + const double var_x163 = 1 / var_chaste_interface__internal_ion_concentrations__Nai; + const double var_x164 = pow(var_x163, 1.0600000000000001); + const double var_x165 = var_x164 * (1 + 0.020000293738509214 * pow(var_chaste_interface__internal_ion_concentrations__Ki, 1.1200000000000001)); + const double var_x166 = 1 / var_chaste_interface__ATP_production__ATPi; + const double var_x167 = 1 + 0.094 * var_x166; + const double var_x168 = 1 / var_x167; + const double var_x169 = pow((0.22703754152993499 + var_x165), (-2)); + const double var_x170 = var_x168 * var_x169; + const double var_x172 = mParameters[9] * var_chaste_interface__sodium_potassium_pump_y_gate__y; + const double var_x180 = ((var_x1) ? (1) : (var_x151)); + const double var_x181 = var_x33 * var_x76; + const double var_x182 = var_x180 * var_x54; + const double var_x183 = var_x180 * var_x57; + const double var_x184 = var_x71 * var_x74; + const double var_x185 = var_x184 * var_x76; + const double var_x186 = var_x76 * var_x88; + const double var_x187 = var_x132 * var_x76; + const double var_x188 = var_x76 * var_x91; + const double var_x189 = var_x133 * var_x76; + const double var_x190 = var_x138 * var_x76; + const double var_x191 = 0.40069247885978065 * var_x187 + 3.2055398308782452 * var_x190 + 5.1288637294051922 * var_x188 - 6.8384849725402566 * var_x189 - 0.93494911733948827 * var_x186; + const double var_x192 = var_x76 * var_x81; + const double var_x193 = 0.30051935914483546 * var_x187 + 2.4041548731586837 * var_x190 + 3.8466477970538944 * var_x188 - 5.1288637294051922 * var_x189 - 0.70121183800461617 * var_x186; + const double var_x194 = -0.10017311971494516 * var_x136 * var_x76 - 0.20034623942989033 * var_x137 * var_x192 - 0.80138495771956131 * var_x142 * var_x187 - 3.2055398308782452 * var_x130 * var_x192 - 5.1288637294051922 * var_x76 * var_x96 - 0.086816703752952459 * var_x105 * var_x76 - 5.823397359428812 * var_x142 * var_x186 - 4.8083097463173674 * var_x141 * var_x143 * var_x186 + var_x131 * var_x191 * var_x80 * var_x83 * var_x94 + 6.8384849725402566 * var_x106 * var_x76 * var_x78 * var_x83 * var_x93 * var_x94 + 0.125 * var_x100 * var_x102 * var_x103 * var_x131 * var_x191 * var_x98 * var_x99 + 0.22222222222222221 * var_x106 * var_x107 * var_x108 * var_x131 * var_x193 * var_x86 * var_x87 + 2 * var_x106 * var_x107 * var_x108 * var_x110 * var_x193 * var_x86 * var_x87 * var_x93 + 0.42740531078376603 * var_x100 * var_x102 * var_x76 * var_x78 * var_x79 * var_x93 * var_x98 * var_x99 + 10.257727458810384 * var_x103 * var_x107 * var_x108 * var_x109 * var_x110 * var_x76 * var_x78 * var_x86 * var_x87; + const double var_x195 = var_x113 * var_x115; + const double var_x196 = var_x195 * var_x76; + const double var_x197 = pow(var_chaste_interface__internal_ion_concentrations__Ki, 0.12000000000000011); + const double var_x198 = ((var_x150) ? (var_x149 * var_x180) : (var_x159 * var_x180)); + const double var_x252 = 1.4250668745018745e-7 * var_x29; + const double var_x259 = var_x164 * var_x170 * var_x197; + const double var_x260 = var_x172 * var_x259; + const double var_x269 = 1.2955153404562495e-7 * var_x60; + const double var_x270 = 6.5991052644898155e-7 * var_x146; + const double var_x271 = 4.72863099266531e-10 * var_x124; + + partialF = (-1.7628078977900349e-5 * var_x196 - 2.4699248496712833e-5 * var_x185 - 1.2955153404562495e-6 * var_x182 - 1.2955153404562495e-6 * var_x183 - 1.2955153404562495e-6 * var_x198 - 0.0015243307837622452 * var_x181 - 1.9950936243026244e-7 * var_x180 - 1.0238719530354315e-7 * var_x260 - var_x180 * var_x252 - var_x180 * var_x269 - var_x180 * var_x271 - var_x194 * var_x270) * mParameters[4]; + } + else + { + const double y_save = rY[2]; + rY[2] += delta; + const double temp = EvaluateYDerivative2(var_chaste_interface__environment__time, rY); + partialF = (temp-mEvalF[2])/delta; + rY[2] = y_save; + } + return partialF; + } + double Dynamicmatsuoka_model_2003FromCellMLGRL1Opt::EvaluateYDerivative3(double var_chaste_interface__environment__time, std::vector& rY) + { + + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -85.95752434460744 + double var_chaste_interface__internal_ion_concentrations__Nai = rY[1]; + // Units: millimolar; Initial value: 4.925761439682025 + double var_chaste_interface__internal_ion_concentrations__Ca_Total = rY[3]; + // Units: millimolar; Initial value: 0.00040180173572968586 + double var_chaste_interface__ATP_production__ATPi = rY[4]; + // Units: millimolar; Initial value: 4.657102729020499 + double var_chaste_interface__L_type_Ca_channel_voltage_dependent_gate__p_AP_CaL = rY[9]; + // Units: dimensionless; Initial value: 1.5445004166497696e-06 + double var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_U = rY[12]; + // Units: dimensionless; Initial value: 0.17246483915629204 + double var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_UCa = rY[13]; + // Units: dimensionless; Initial value: 6.098246017787626e-05 + double var_chaste_interface__L_type_Ca_channel_ultra_slow_gate__y = rY[15]; + // Units: dimensionless; Initial value: 0.9985266538252986 + double var_chaste_interface__T_type_Ca_channel_y1_gate__y1 = rY[16]; + // Units: dimensionless; Initial value: 1.6882718240109127e-05 + double var_chaste_interface__T_type_Ca_channel_y2_gate__y2 = rY[17]; + // Units: dimensionless; Initial value: 0.8585352091865849 + double var_chaste_interface__sodium_calcium_exchanger_y_gate__y = rY[26]; + // Units: dimensionless; Initial value: 0.9891789193465331 + double var_chaste_interface__SR_calcium_pump_y_gate__y = rY[28]; + // Units: dimensionless; Initial value: 0.46108441538480216 + double var_chaste_interface__RyR_channel__p_open_RyR = rY[29]; + // Units: dimensionless; Initial value: 0.00034314360001543243 + double var_chaste_interface__Ca_concentrations_in_SR__Ca_Total = rY[31]; + // Units: millimolar; Initial value: 9.455741736977666 + double var_chaste_interface__Ca_concentrations_in_SR__Caup = rY[32]; + // Units: millimolar; Initial value: 2.611712901567567 + double var_chaste_interface__NL_model__pCa = rY[33]; + // Units: dimensionless; Initial value: 0.02490898775497523 + double var_chaste_interface__NL_model__pCaCB = rY[34]; + // Units: dimensionless; Initial value: 0.001990153835322864 + double var_chaste_interface__NL_model__pCB = rY[35]; + // Units: dimensionless; Initial value: 0.00042941813853474524 + double var_chaste_interface__NL_model__X = rY[36]; + // Units: micrometre; Initial value: 0.9573749975411884 + + + // Lookup table indexing + const bool _oob_0 = Dynamicmatsuoka_model_2003FromCellMLGRL1Opt_LookupTables::Instance()->CheckIndex0(var_chaste_interface__membrane__Vm); +// LCOV_EXCL_START + if (_oob_0) + EXCEPTION(DumpState("membrane_voltage outside lookup table range", rY , var_chaste_interface__environment__time)); +// LCOV_EXCL_STOP + const double* const _lt_0_row = Dynamicmatsuoka_model_2003FromCellMLGRL1Opt_LookupTables::Instance()->IndexTable0(var_chaste_interface__membrane__Vm); + + // Mathematics + const double var_Ca_concentrations_in_SR__Carel = -5.4000000000000004 + 0.5 * var_chaste_interface__Ca_concentrations_in_SR__Ca_Total + 5.4000000000000004 * sqrt(pow((1 - 0.092592592592592587 * var_chaste_interface__Ca_concentrations_in_SR__Ca_Total), 2) + 0.027434842249657067 * var_chaste_interface__Ca_concentrations_in_SR__Ca_Total); // millimolar + const double var_L_type_Ca_channel__p_open_CaL = (var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_U + var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_UCa) * var_chaste_interface__L_type_Ca_channel_ultra_slow_gate__y * var_chaste_interface__L_type_Ca_channel_voltage_dependent_gate__p_AP_CaL / (1 + 2.7439999999999993 / pow(var_chaste_interface__ATP_production__ATPi, 3)); // dimensionless + const double d_dt_chaste_interface_var_NL_model__X = 1.1488559970494261 - 1.2 * var_chaste_interface__NL_model__X; // micrometre / millisecond + const double var_NL_model__Q_d2 = 0.027 * pow(d_dt_chaste_interface_var_NL_model__X, 2) * var_chaste_interface__NL_model__pCaCB; // per_millisecond + const double var_SR_calcium_pump__k2 = 1 / (1 + 0.10000000000000001 / var_chaste_interface__ATP_production__ATPi); // per_millisecond + const double var_SR_calcium_pump__p_E1Ca = 1 / (1 + 0.080000000000000002 / var_chaste_interface__Ca_concentrations_in_SR__Caup); // dimensionless + const double var_internal_ion_concentrations__Cai = -0.026190000000000001 + 0.5 * sqrt(pow((0.052380000000000003 - var_chaste_interface__internal_ion_concentrations__Ca_Total), 2) + 0.0095200000000000007 * var_chaste_interface__internal_ion_concentrations__Ca_Total) + 0.5 * var_chaste_interface__internal_ion_concentrations__Ca_Total; // millimolar + const double var_NL_model__Q_b = -0.029999999999999999 * var_chaste_interface__NL_model__pCa + 39 * (1 - var_chaste_interface__NL_model__pCB - var_chaste_interface__NL_model__pCa - var_chaste_interface__NL_model__pCaCB) * var_internal_ion_concentrations__Cai; // per_millisecond + const double var_NL_model__Q_r = 0.029999999999999999 * var_chaste_interface__NL_model__pCaCB - 1560 * var_chaste_interface__NL_model__pCB * var_internal_ion_concentrations__Cai; // per_millisecond + const double var_RyR_channel__i_RyR = (-var_internal_ion_concentrations__Cai + var_Ca_concentrations_in_SR__Carel) * mParameters[1] * var_chaste_interface__RyR_channel__p_open_RyR; // picoA + const double var_SR_L_current__i_SR_L = (-var_internal_ion_concentrations__Cai + var_chaste_interface__Ca_concentrations_in_SR__Caup) * mParameters[0]; // picoA + const double var_SR_calcium_pump__p_E2Ca = 1 / (1 + 0.00080000000000000004 / var_internal_ion_concentrations__Cai); // dimensionless + const double var_SR_calcium_pump__i_SR_U = (0.01 * var_SR_calcium_pump__p_E1Ca * var_chaste_interface__SR_calcium_pump_y_gate__y - (1 - var_chaste_interface__SR_calcium_pump_y_gate__y) * var_SR_calcium_pump__k2 * var_SR_calcium_pump__p_E2Ca) * mParameters[3]; // picoA + const double var_constant_field_equations__CF_Ca = ((var_chaste_interface__membrane__Vm == 0) ? (-mParameters[5]) : (0.074870384603595908 * (-mParameters[5] * _lt_0_row[0] + var_internal_ion_concentrations__Cai) * var_chaste_interface__membrane__Vm / (_lt_0_row[1]))); // millimolar + const double var_L_type_Ca_channel__i_CaL_Ca = mParameters[8] * var_L_type_Ca_channel__p_open_CaL * var_constant_field_equations__CF_Ca; // picoA + const double var_T_type_Ca_channel__i_Ca_T = 612 * var_chaste_interface__T_type_Ca_channel_y1_gate__y1 * var_chaste_interface__T_type_Ca_channel_y2_gate__y2 * var_constant_field_equations__CF_Ca; // picoA + const double var_background_Cab_current__i_Cab = 0.040000000000000001 * var_constant_field_equations__CF_Ca; // picoA + const double var_sodium_calcium_exchanger__k1 = _lt_0_row[26]; // per_millisecond + const double var_sodium_calcium_exchanger__k2 = _lt_0_row[27]; // per_millisecond + const double var_sodium_calcium_exchanger__p_E1Na = 1 / (1 + 669.921875 * (1 + 724.63768115942037 * var_internal_ion_concentrations__Cai) / pow(var_chaste_interface__internal_ion_concentrations__Nai, 3)); // dimensionless + const double var_sodium_calcium_exchanger__p_E2Na = 1 / (1 + 669921.875 * (1 + 0.7246376811594204 * mParameters[5]) / pow(mParameters[7], 3)); // dimensionless + const double var_sodium_calcium_exchanger__i_NaCa = (var_sodium_calcium_exchanger__k1 * var_sodium_calcium_exchanger__p_E1Na * var_chaste_interface__sodium_calcium_exchanger_y_gate__y - (1 - var_chaste_interface__sodium_calcium_exchanger_y_gate__y) * var_sodium_calcium_exchanger__k2 * var_sodium_calcium_exchanger__p_E2Na) * mParameters[9] * mParameters[14]; // picoA + const double d_dt_chaste_interface_var_internal_ion_concentrations__Ca_Total = 0.070000000000000007 * var_NL_model__Q_d2 + 0.070000000000000007 * var_NL_model__Q_r + 6.4775767022812476e-7 * var_RyR_channel__i_RyR + 6.4775767022812476e-7 * var_SR_L_current__i_SR_L + 6.4775767022812476e-7 * var_SR_calcium_pump__i_SR_U + 1.2955153404562495e-6 * var_sodium_calcium_exchanger__i_NaCa - 0.070000000000000007 * var_NL_model__Q_b - 6.4775767022812476e-7 * var_L_type_Ca_channel__i_CaL_Ca - 6.4775767022812476e-7 * var_T_type_Ca_channel__i_Ca_T - 6.4775767022812476e-7 * var_background_Cab_current__i_Cab; // millimolar / millisecond + + return d_dt_chaste_interface_var_internal_ion_concentrations__Ca_Total; + } + + double Dynamicmatsuoka_model_2003FromCellMLGRL1Opt::EvaluatePartialDerivative3(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -85.95752434460744 + double var_chaste_interface__internal_ion_concentrations__Nai = rY[1]; + // Units: millimolar; Initial value: 4.925761439682025 + double var_chaste_interface__internal_ion_concentrations__Ca_Total = rY[3]; + // Units: millimolar; Initial value: 0.00040180173572968586 + double var_chaste_interface__ATP_production__ATPi = rY[4]; + // Units: millimolar; Initial value: 4.657102729020499 + double var_chaste_interface__L_type_Ca_channel_voltage_dependent_gate__p_AP_CaL = rY[9]; + // Units: dimensionless; Initial value: 1.5445004166497696e-06 + double var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_U = rY[12]; + // Units: dimensionless; Initial value: 0.17246483915629204 + double var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_UCa = rY[13]; + // Units: dimensionless; Initial value: 6.098246017787626e-05 + double var_chaste_interface__L_type_Ca_channel_ultra_slow_gate__y = rY[15]; + // Units: dimensionless; Initial value: 0.9985266538252986 + double var_chaste_interface__T_type_Ca_channel_y1_gate__y1 = rY[16]; + // Units: dimensionless; Initial value: 1.6882718240109127e-05 + double var_chaste_interface__T_type_Ca_channel_y2_gate__y2 = rY[17]; + // Units: dimensionless; Initial value: 0.8585352091865849 + double var_chaste_interface__sodium_calcium_exchanger_y_gate__y = rY[26]; + // Units: dimensionless; Initial value: 0.9891789193465331 + double var_chaste_interface__SR_calcium_pump_y_gate__y = rY[28]; + // Units: dimensionless; Initial value: 0.46108441538480216 + double var_chaste_interface__RyR_channel__p_open_RyR = rY[29]; + // Units: dimensionless; Initial value: 0.00034314360001543243 + double var_chaste_interface__NL_model__pCa = rY[33]; + // Units: dimensionless; Initial value: 0.02490898775497523 + double var_chaste_interface__NL_model__pCaCB = rY[34]; + // Units: dimensionless; Initial value: 0.001990153835322864 + double var_chaste_interface__NL_model__pCB = rY[35]; + // Units: dimensionless; Initial value: 0.00042941813853474524 + + + // Lookup table indexing + const bool _oob_0 = Dynamicmatsuoka_model_2003FromCellMLGRL1Opt_LookupTables::Instance()->CheckIndex0(var_chaste_interface__membrane__Vm); +// LCOV_EXCL_START + if (_oob_0) + EXCEPTION(DumpState("membrane_voltage outside lookup table range", rY , var_chaste_interface__environment__time)); +// LCOV_EXCL_STOP + const double* const _lt_0_row = Dynamicmatsuoka_model_2003FromCellMLGRL1Opt_LookupTables::Instance()->IndexTable0(var_chaste_interface__membrane__Vm); + + const double var_x1 = var_chaste_interface__membrane__Vm == 0; + const double var_x13 = 0.074870384603595908 * var_chaste_interface__membrane__Vm; + const double var_x14 = exp(-var_x13); + const double var_x15 = 1 - var_x14; + const double var_x16 = 1 / var_x15; + const double var_x17 = -0.052380000000000003 + var_chaste_interface__internal_ion_concentrations__Ca_Total; + const double var_x18 = sqrt(pow(var_x17, 2) + 0.0095200000000000007 * var_chaste_interface__internal_ion_concentrations__Ca_Total); + const double var_x27 = var_x17 + var_x18; + const double var_x34 = pow(var_chaste_interface__internal_ion_concentrations__Nai, 3); + const double var_x35 = 1 / var_x34; + const double var_x36 = -17.978260869565219 + 362.31884057971018 * var_x18 + 362.31884057971018 * var_chaste_interface__internal_ion_concentrations__Ca_Total; + const double var_x37 = var_x35 * var_x36; + const double var_x38 = _lt_0_row[5]; + const double var_x117 = var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_U + var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_UCa; + const double var_x118 = pow(var_chaste_interface__ATP_production__ATPi, (-3)); + const double var_x119 = 1 / (1 + 2.7439999999999993 * var_x118); + const double var_x120 = var_x119 * mParameters[8] * var_chaste_interface__L_type_Ca_channel_ultra_slow_gate__y; + const double var_x123 = var_x120 * var_chaste_interface__L_type_Ca_channel_voltage_dependent_gate__p_AP_CaL; + const double var_x166 = 1 / var_chaste_interface__ATP_production__ATPi; + const double var_x174 = pow((0.0014927113702623907 + var_x37), (-2)); + const double var_x175 = var_x174 * var_x38; + const double var_x178 = mParameters[9] * mParameters[14]; + const double var_x179 = var_x178 * var_chaste_interface__sodium_calcium_exchanger_y_gate__y; + const double var_x199 = (-0.047620000000000003 + var_chaste_interface__internal_ion_concentrations__Ca_Total) / var_x18; + const double var_x200 = 0.5 + 0.5 * var_x199; + const double var_x201 = ((var_x1) ? (0) : (var_x13 * var_x16 * var_x200)); + const double var_x206 = var_x117 * var_x201; + const double var_x207 = var_x123 * var_x206; + const double var_x208 = 362.31884057971018 + 362.31884057971018 * var_x199; + const double var_x262 = var_x175 * var_x208 * var_x35; + const double var_x263 = var_x179 * var_x262; + const double var_x278 = 0.00039642769417961232 * var_chaste_interface__T_type_Ca_channel_y1_gate__y1 * var_chaste_interface__T_type_Ca_channel_y2_gate__y2; + const double var_x279 = 1 - var_chaste_interface__NL_model__pCB - var_chaste_interface__NL_model__pCa - var_chaste_interface__NL_model__pCaCB; + const double var_x280 = -3.2387883511406238e-7 - 3.2387883511406238e-7 * var_x199; + const double var_x281 = mParameters[1] * var_chaste_interface__RyR_channel__p_open_RyR; + const double var_x282 = 1 - var_chaste_interface__SR_calcium_pump_y_gate__y; + const double var_x283 = 1 + 0.10000000000000001 * var_x166; + const double var_x284 = 1 / var_x283; + const double var_x285 = -0.026190000000000001 + 0.5 * var_x18 + 0.5 * var_chaste_interface__internal_ion_concentrations__Ca_Total; + const double var_x286 = 1 / var_x285; + const double var_x287 = 1 + 0.00080000000000000004 * var_x286; + const double var_x288 = pow(var_x27, 2); + const double var_x289 = -var_x200 / var_x288; + const double var_x290 = var_x289 / pow(var_x287, 2); + const double var_x291 = var_x284 * var_x290; + const double var_x292 = var_x282 * var_x291 * mParameters[3]; + + partialF = 2.0728245447299993e-9 * var_x292 - 1.9338304790483955e-9 * var_x263 - 6.4775767022812476e-7 * var_x207 - 2.591030680912499e-8 * var_x201 + var_x279 * (-1.3650000000000002 - 1.3650000000000002 * var_x199) + var_x280 * var_x281 + var_x280 * mParameters[0] + (-54.600000000000009 - 54.600000000000009 * var_x199) * var_chaste_interface__NL_model__pCB - var_x201 * var_x278; + } + else + { + const double y_save = rY[3]; + rY[3] += delta; + const double temp = EvaluateYDerivative3(var_chaste_interface__environment__time, rY); + partialF = (temp-mEvalF[3])/delta; + rY[3] = y_save; + } + return partialF; + } + double Dynamicmatsuoka_model_2003FromCellMLGRL1Opt::EvaluateYDerivative4(double var_chaste_interface__environment__time, std::vector& rY) + { + + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -85.95752434460744 + double var_chaste_interface__internal_ion_concentrations__Nai = rY[1]; + // Units: millimolar; Initial value: 4.925761439682025 + double var_chaste_interface__internal_ion_concentrations__Ki = rY[2]; + // Units: millimolar; Initial value: 143.1837333000449 + double var_chaste_interface__internal_ion_concentrations__Ca_Total = rY[3]; + // Units: millimolar; Initial value: 0.00040180173572968586 + double var_chaste_interface__ATP_production__ATPi = rY[4]; + // Units: millimolar; Initial value: 4.657102729020499 + double var_chaste_interface__sodium_potassium_pump_y_gate__y = rY[27]; + // Units: dimensionless; Initial value: 0.5910747147428818 + double var_chaste_interface__SR_calcium_pump_y_gate__y = rY[28]; + // Units: dimensionless; Initial value: 0.46108441538480216 + double var_chaste_interface__Ca_concentrations_in_SR__Caup = rY[32]; + // Units: millimolar; Initial value: 2.611712901567567 + double var_chaste_interface__NL_model__pCaCB = rY[34]; + // Units: dimensionless; Initial value: 0.001990153835322864 + + + // Lookup table indexing + const bool _oob_0 = Dynamicmatsuoka_model_2003FromCellMLGRL1Opt_LookupTables::Instance()->CheckIndex0(var_chaste_interface__membrane__Vm); +// LCOV_EXCL_START + if (_oob_0) + EXCEPTION(DumpState("membrane_voltage outside lookup table range", rY , var_chaste_interface__environment__time)); +// LCOV_EXCL_STOP + const double* const _lt_0_row = Dynamicmatsuoka_model_2003FromCellMLGRL1Opt_LookupTables::Instance()->IndexTable0(var_chaste_interface__membrane__Vm); + + // Mathematics + const double var_SR_calcium_pump__k2 = 1 / (1 + 0.10000000000000001 / var_chaste_interface__ATP_production__ATPi); // per_millisecond + const double var_SR_calcium_pump__p_E1Ca = 1 / (1 + 0.080000000000000002 / var_chaste_interface__Ca_concentrations_in_SR__Caup); // dimensionless + const double var_internal_ion_concentrations__Cai = -0.026190000000000001 + 0.5 * sqrt(pow((0.052380000000000003 - var_chaste_interface__internal_ion_concentrations__Ca_Total), 2) + 0.0095200000000000007 * var_chaste_interface__internal_ion_concentrations__Ca_Total) + 0.5 * var_chaste_interface__internal_ion_concentrations__Ca_Total; // millimolar + const double var_SR_calcium_pump__p_E2Ca = 1 / (1 + 0.00080000000000000004 / var_internal_ion_concentrations__Cai); // dimensionless + const double var_SR_calcium_pump__i_SR_U = (0.01 * var_SR_calcium_pump__p_E1Ca * var_chaste_interface__SR_calcium_pump_y_gate__y - (1 - var_chaste_interface__SR_calcium_pump_y_gate__y) * var_SR_calcium_pump__k2 * var_SR_calcium_pump__p_E2Ca) * mParameters[3]; // picoA + const double var_sodium_potassium_pump__Nao_Eff = mParameters[7] * _lt_0_row[4]; // millimolar + const double var_sodium_potassium_pump__k1 = 0.37 / (1 + 0.094 / var_chaste_interface__ATP_production__ATPi); // per_millisecond + const double var_sodium_potassium_pump__p_E1Na = 1 / (1 + 4.4045579125871104 * pow((1 / var_chaste_interface__internal_ion_concentrations__Nai), 1.0600000000000001) * (1 + 0.020000293738509214 * pow(var_chaste_interface__internal_ion_concentrations__Ki, 1.1200000000000001))); // dimensionless + const double var_sodium_potassium_pump__p_E2Na = 1 / (1 + 90.050628437051003 * pow((1 / var_sodium_potassium_pump__Nao_Eff), 1.0600000000000001) * (1 + 4.560221410801109 * pow(mParameters[6], 1.1200000000000001))); // dimensionless + const double var_sodium_potassium_pump__i_NaK = 21 * (-0.040000000000000001 * (1 - var_chaste_interface__sodium_potassium_pump_y_gate__y) * var_sodium_potassium_pump__p_E2Na + var_sodium_potassium_pump__k1 * var_sodium_potassium_pump__p_E1Na * var_chaste_interface__sodium_potassium_pump_y_gate__y) * mParameters[9]; // picoA + const double d_dt_chaste_interface_var_ATP_production__ATPi = 0.014999999999999999 + 3.2387883511406238e-7 * var_SR_calcium_pump__i_SR_U - 0.0030000000000000001 * var_chaste_interface__ATP_production__ATPi - 0.028000000000000004 * var_chaste_interface__NL_model__pCaCB - 1.2955153404562495e-6 * var_sodium_potassium_pump__i_NaK; // millimolar / millisecond + + return d_dt_chaste_interface_var_ATP_production__ATPi; + } + + double Dynamicmatsuoka_model_2003FromCellMLGRL1Opt::EvaluatePartialDerivative4(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__internal_ion_concentrations__Nai = rY[1]; + // Units: millimolar; Initial value: 4.925761439682025 + double var_chaste_interface__internal_ion_concentrations__Ki = rY[2]; + // Units: millimolar; Initial value: 143.1837333000449 + double var_chaste_interface__internal_ion_concentrations__Ca_Total = rY[3]; + // Units: millimolar; Initial value: 0.00040180173572968586 + double var_chaste_interface__ATP_production__ATPi = rY[4]; + // Units: millimolar; Initial value: 4.657102729020499 + double var_chaste_interface__sodium_potassium_pump_y_gate__y = rY[27]; + // Units: dimensionless; Initial value: 0.5910747147428818 + double var_chaste_interface__SR_calcium_pump_y_gate__y = rY[28]; + // Units: dimensionless; Initial value: 0.46108441538480216 + + + + const double var_x17 = -0.052380000000000003 + var_chaste_interface__internal_ion_concentrations__Ca_Total; + const double var_x18 = sqrt(pow(var_x17, 2) + 0.0095200000000000007 * var_chaste_interface__internal_ion_concentrations__Ca_Total); + const double var_x31 = pow(var_chaste_interface__ATP_production__ATPi, 2); + const double var_x163 = 1 / var_chaste_interface__internal_ion_concentrations__Nai; + const double var_x164 = pow(var_x163, 1.0600000000000001); + const double var_x165 = var_x164 * (1 + 0.020000293738509214 * pow(var_chaste_interface__internal_ion_concentrations__Ki, 1.1200000000000001)); + const double var_x166 = 1 / var_chaste_interface__ATP_production__ATPi; + const double var_x167 = 1 + 0.094 * var_x166; + const double var_x210 = 1 / (1 + 4.4045579125871104 * var_x165); + const double var_x211 = 1 / var_x31; + const double var_x212 = var_x210 * var_x211 * var_chaste_interface__sodium_potassium_pump_y_gate__y / pow(var_x167, 2); + const double var_x213 = var_x212 * mParameters[9]; + const double var_x282 = 1 - var_chaste_interface__SR_calcium_pump_y_gate__y; + const double var_x283 = 1 + 0.10000000000000001 * var_x166; + const double var_x285 = -0.026190000000000001 + 0.5 * var_x18 + 0.5 * var_chaste_interface__internal_ion_concentrations__Ca_Total; + const double var_x286 = 1 / var_x285; + const double var_x287 = 1 + 0.00080000000000000004 * var_x286; + const double var_x293 = 1 / var_x287; + const double var_x294 = var_x211 * var_x282 * var_x293 / pow(var_x283, 2); + const double var_x295 = var_x294 * mParameters[3]; + + partialF = -0.0030000000000000001 - 3.2387883511406238e-8 * var_x295 - 9.4621849436243545e-7 * var_x213; + } + else + { + const double y_save = rY[4]; + rY[4] += delta; + const double temp = EvaluateYDerivative4(var_chaste_interface__environment__time, rY); + partialF = (temp-mEvalF[4])/delta; + rY[4] = y_save; + } + return partialF; + } + double Dynamicmatsuoka_model_2003FromCellMLGRL1Opt::EvaluateYDerivative5(double var_chaste_interface__environment__time, std::vector& rY) + { + + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -85.95752434460744 + double var_chaste_interface__sodium_current_voltage_dependent_gate__p_AP_Na = rY[5]; + // Units: dimensionless; Initial value: 1.779648367445368e-05 + double var_chaste_interface__sodium_current_voltage_dependent_gate__p_RP_Na = rY[6]; + // Units: dimensionless; Initial value: 0.3556412697995689 + double var_chaste_interface__sodium_current_voltage_dependent_gate__p_AI_Na = rY[7]; + // Units: dimensionless; Initial value: 0.40285968661346977 + + + // Lookup table indexing + const bool _oob_0 = Dynamicmatsuoka_model_2003FromCellMLGRL1Opt_LookupTables::Instance()->CheckIndex0(var_chaste_interface__membrane__Vm); +// LCOV_EXCL_START + if (_oob_0) + EXCEPTION(DumpState("membrane_voltage outside lookup table range", rY , var_chaste_interface__environment__time)); +// LCOV_EXCL_STOP + const double* const _lt_0_row = Dynamicmatsuoka_model_2003FromCellMLGRL1Opt_LookupTables::Instance()->IndexTable0(var_chaste_interface__membrane__Vm); + + // Mathematics + const double var_sodium_current_voltage_dependent_gate__k_AP_AI = _lt_0_row[31]; // per_millisecond + const double var_sodium_current_voltage_dependent_gate__k_AP_RP = _lt_0_row[32]; // per_millisecond + const double var_sodium_current_voltage_dependent_gate__k_RP_AP = _lt_0_row[34]; // per_millisecond + const double d_dt_chaste_interface_var_sodium_current_voltage_dependent_gate__p_AP_Na = 8.7499999999999999e-5 * var_chaste_interface__sodium_current_voltage_dependent_gate__p_AI_Na + var_sodium_current_voltage_dependent_gate__k_RP_AP * var_chaste_interface__sodium_current_voltage_dependent_gate__p_RP_Na - (var_sodium_current_voltage_dependent_gate__k_AP_AI + var_sodium_current_voltage_dependent_gate__k_AP_RP) * var_chaste_interface__sodium_current_voltage_dependent_gate__p_AP_Na; // 1 / millisecond + + return d_dt_chaste_interface_var_sodium_current_voltage_dependent_gate__p_AP_Na; + } + + double Dynamicmatsuoka_model_2003FromCellMLGRL1Opt::EvaluatePartialDerivative5(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -85.95752434460744 + + + + const double var_x308 = exp(-0.0025000000000000001 * var_chaste_interface__membrane__Vm); + const double var_x309 = 1 / var_x308; + const double var_x311 = exp(0.00125 * var_chaste_interface__membrane__Vm); + const double var_x312 = 0.058823529411764705 * var_chaste_interface__membrane__Vm; + const double var_x313 = exp(var_x312); + const double var_x320 = 1 / (26 * var_x313 + 0.02 * var_x311); + const double var_x321 = var_x320; + const double var_x322 = 1.25 * var_x309; + + partialF = -var_x321 - var_x322; + } + else + { + const double y_save = rY[5]; + rY[5] += delta; + const double temp = EvaluateYDerivative5(var_chaste_interface__environment__time, rY); + partialF = (temp-mEvalF[5])/delta; + rY[5] = y_save; + } + return partialF; + } + double Dynamicmatsuoka_model_2003FromCellMLGRL1Opt::EvaluateYDerivative6(double var_chaste_interface__environment__time, std::vector& rY) + { + + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -85.95752434460744 + double var_chaste_interface__sodium_current_voltage_dependent_gate__p_AP_Na = rY[5]; + // Units: dimensionless; Initial value: 1.779648367445368e-05 + double var_chaste_interface__sodium_current_voltage_dependent_gate__p_RP_Na = rY[6]; + // Units: dimensionless; Initial value: 0.3556412697995689 + double var_chaste_interface__sodium_current_voltage_dependent_gate__p_AI_Na = rY[7]; + // Units: dimensionless; Initial value: 0.40285968661346977 + + + // Lookup table indexing + const bool _oob_0 = Dynamicmatsuoka_model_2003FromCellMLGRL1Opt_LookupTables::Instance()->CheckIndex0(var_chaste_interface__membrane__Vm); +// LCOV_EXCL_START + if (_oob_0) + EXCEPTION(DumpState("membrane_voltage outside lookup table range", rY , var_chaste_interface__environment__time)); +// LCOV_EXCL_STOP + const double* const _lt_0_row = Dynamicmatsuoka_model_2003FromCellMLGRL1Opt_LookupTables::Instance()->IndexTable0(var_chaste_interface__membrane__Vm); + + // Mathematics + const double var_sodium_current_voltage_dependent_gate__k_AI_RI = _lt_0_row[30]; // per_millisecond + const double var_sodium_current_voltage_dependent_gate__k_AP_AI = _lt_0_row[31]; // per_millisecond + const double var_sodium_current_voltage_dependent_gate__k_AP_RP = _lt_0_row[32]; // per_millisecond + const double var_sodium_current_voltage_dependent_gate__k_RI_AI = _lt_0_row[33]; // per_millisecond + const double var_sodium_current_voltage_dependent_gate__k_RP_AP = _lt_0_row[34]; // per_millisecond + const double var_sodium_current_voltage_dependent_gate__k_RP_RI = 0.01 / (1 + 8.7499999999999999e-5 * var_sodium_current_voltage_dependent_gate__k_AP_RP * var_sodium_current_voltage_dependent_gate__k_RI_AI / (var_sodium_current_voltage_dependent_gate__k_AI_RI * var_sodium_current_voltage_dependent_gate__k_AP_AI * var_sodium_current_voltage_dependent_gate__k_RP_AP)); // per_millisecond + const double var_sodium_current_voltage_dependent_gate__p_RI_Na = 1 - var_chaste_interface__sodium_current_voltage_dependent_gate__p_AI_Na - var_chaste_interface__sodium_current_voltage_dependent_gate__p_AP_Na - var_chaste_interface__sodium_current_voltage_dependent_gate__p_RP_Na; // dimensionless + const double d_dt_chaste_interface_var_sodium_current_voltage_dependent_gate__p_RP_Na = (0.01 - var_sodium_current_voltage_dependent_gate__k_RP_RI) * var_sodium_current_voltage_dependent_gate__p_RI_Na + var_sodium_current_voltage_dependent_gate__k_AP_RP * var_chaste_interface__sodium_current_voltage_dependent_gate__p_AP_Na - (var_sodium_current_voltage_dependent_gate__k_RP_AP + var_sodium_current_voltage_dependent_gate__k_RP_RI) * var_chaste_interface__sodium_current_voltage_dependent_gate__p_RP_Na; // 1 / millisecond + + return d_dt_chaste_interface_var_sodium_current_voltage_dependent_gate__p_RP_Na; + } + + double Dynamicmatsuoka_model_2003FromCellMLGRL1Opt::EvaluatePartialDerivative6(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -85.95752434460744 + + + + const double var_x316 = exp(-0.125 * var_chaste_interface__membrane__Vm); + const double var_x317 = exp(-0.02 * var_chaste_interface__membrane__Vm); + const double var_x323 = 0.25 * var_x317 + 0.1027 * var_x316; + const double var_x324 = 1 / var_x323; + + partialF = -0.01 - var_x324; + } + else + { + const double y_save = rY[6]; + rY[6] += delta; + const double temp = EvaluateYDerivative6(var_chaste_interface__environment__time, rY); + partialF = (temp-mEvalF[6])/delta; + rY[6] = y_save; + } + return partialF; + } + double Dynamicmatsuoka_model_2003FromCellMLGRL1Opt::EvaluateYDerivative7(double var_chaste_interface__environment__time, std::vector& rY) + { + + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -85.95752434460744 + double var_chaste_interface__sodium_current_voltage_dependent_gate__p_AP_Na = rY[5]; + // Units: dimensionless; Initial value: 1.779648367445368e-05 + double var_chaste_interface__sodium_current_voltage_dependent_gate__p_RP_Na = rY[6]; + // Units: dimensionless; Initial value: 0.3556412697995689 + double var_chaste_interface__sodium_current_voltage_dependent_gate__p_AI_Na = rY[7]; + // Units: dimensionless; Initial value: 0.40285968661346977 + + + // Lookup table indexing + const bool _oob_0 = Dynamicmatsuoka_model_2003FromCellMLGRL1Opt_LookupTables::Instance()->CheckIndex0(var_chaste_interface__membrane__Vm); +// LCOV_EXCL_START + if (_oob_0) + EXCEPTION(DumpState("membrane_voltage outside lookup table range", rY , var_chaste_interface__environment__time)); +// LCOV_EXCL_STOP + const double* const _lt_0_row = Dynamicmatsuoka_model_2003FromCellMLGRL1Opt_LookupTables::Instance()->IndexTable0(var_chaste_interface__membrane__Vm); + + // Mathematics + const double var_sodium_current_voltage_dependent_gate__k_AI_RI = _lt_0_row[30]; // per_millisecond + const double var_sodium_current_voltage_dependent_gate__k_AP_AI = _lt_0_row[31]; // per_millisecond + const double var_sodium_current_voltage_dependent_gate__k_RI_AI = _lt_0_row[33]; // per_millisecond + const double var_sodium_current_voltage_dependent_gate__p_RI_Na = 1 - var_chaste_interface__sodium_current_voltage_dependent_gate__p_AI_Na - var_chaste_interface__sodium_current_voltage_dependent_gate__p_AP_Na - var_chaste_interface__sodium_current_voltage_dependent_gate__p_RP_Na; // dimensionless + const double d_dt_chaste_interface_var_sodium_current_voltage_dependent_gate__p_AI_Na = var_sodium_current_voltage_dependent_gate__k_AP_AI * var_chaste_interface__sodium_current_voltage_dependent_gate__p_AP_Na + var_sodium_current_voltage_dependent_gate__k_RI_AI * var_sodium_current_voltage_dependent_gate__p_RI_Na - (8.7499999999999999e-5 + var_sodium_current_voltage_dependent_gate__k_AI_RI) * var_chaste_interface__sodium_current_voltage_dependent_gate__p_AI_Na; // 1 / millisecond + + return d_dt_chaste_interface_var_sodium_current_voltage_dependent_gate__p_AI_Na; + } + + double Dynamicmatsuoka_model_2003FromCellMLGRL1Opt::EvaluatePartialDerivative7(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -85.95752434460744 + + + + const double var_x308 = exp(-0.0025000000000000001 * var_chaste_interface__membrane__Vm); + const double var_x311 = exp(0.00125 * var_chaste_interface__membrane__Vm); + const double var_x316 = exp(-0.125 * var_chaste_interface__membrane__Vm); + const double var_x325 = 1 / (5 * var_x308 + 0.0001027 * var_x316); + const double var_x326 = exp(0.050000000000000003 * var_chaste_interface__membrane__Vm); + const double var_x327 = 1300 * var_x326 + 0.040000000000000001 * var_x311; + const double var_x337 = var_x325; + + partialF = -8.7499999999999999e-5 - var_x337 - 1 / var_x327; + } + else + { + const double y_save = rY[7]; + rY[7] += delta; + const double temp = EvaluateYDerivative7(var_chaste_interface__environment__time, rY); + partialF = (temp-mEvalF[7])/delta; + rY[7] = y_save; + } + return partialF; + } + double Dynamicmatsuoka_model_2003FromCellMLGRL1Opt::EvaluateYDerivative8(double var_chaste_interface__environment__time, std::vector& rY) + { + + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -85.95752434460744 + double var_chaste_interface__sodium_current_ultra_slow_gate__y = rY[8]; + // Units: dimensionless; Initial value: 0.5861887862983165 + + + // Lookup table indexing + const bool _oob_0 = Dynamicmatsuoka_model_2003FromCellMLGRL1Opt_LookupTables::Instance()->CheckIndex0(var_chaste_interface__membrane__Vm); +// LCOV_EXCL_START + if (_oob_0) + EXCEPTION(DumpState("membrane_voltage outside lookup table range", rY , var_chaste_interface__environment__time)); +// LCOV_EXCL_STOP + const double* const _lt_0_row = Dynamicmatsuoka_model_2003FromCellMLGRL1Opt_LookupTables::Instance()->IndexTable0(var_chaste_interface__membrane__Vm); + + // Mathematics + const double d_dt_chaste_interface_var_sodium_current_ultra_slow_gate__y = (1 - var_chaste_interface__sodium_current_ultra_slow_gate__y) / (_lt_0_row[28]) - var_chaste_interface__sodium_current_ultra_slow_gate__y / (_lt_0_row[29]); // 1 / millisecond + + return d_dt_chaste_interface_var_sodium_current_ultra_slow_gate__y; + } + + double Dynamicmatsuoka_model_2003FromCellMLGRL1Opt::EvaluatePartialDerivative8(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -85.95752434460744 + + + + const double var_x339 = 0.20000000000000001 * var_chaste_interface__membrane__Vm; + const double var_x340 = exp(-var_x339); + const double var_x341 = 0.01 * var_chaste_interface__membrane__Vm; + const double var_x342 = exp(-var_x341); + const double var_x343 = exp(var_x341); + const double var_x344 = exp(var_x339); + + partialF = -1 / (4000 * var_x342 + 0.014 * var_x340) - 1 / (8000 * var_x343 + 9000000000.0 * var_x344); + } + else + { + const double y_save = rY[8]; + rY[8] += delta; + const double temp = EvaluateYDerivative8(var_chaste_interface__environment__time, rY); + partialF = (temp-mEvalF[8])/delta; + rY[8] = y_save; + } + return partialF; + } + double Dynamicmatsuoka_model_2003FromCellMLGRL1Opt::EvaluateYDerivative9(double var_chaste_interface__environment__time, std::vector& rY) + { + + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -85.95752434460744 + double var_chaste_interface__L_type_Ca_channel_voltage_dependent_gate__p_AP_CaL = rY[9]; + // Units: dimensionless; Initial value: 1.5445004166497696e-06 + double var_chaste_interface__L_type_Ca_channel_voltage_dependent_gate__p_RP_CaL = rY[10]; + // Units: dimensionless; Initial value: 0.9968480629364956 + double var_chaste_interface__L_type_Ca_channel_voltage_dependent_gate__p_AI_CaL = rY[11]; + // Units: dimensionless; Initial value: 0.000877325391245903 + + + // Lookup table indexing + const bool _oob_0 = Dynamicmatsuoka_model_2003FromCellMLGRL1Opt_LookupTables::Instance()->CheckIndex0(var_chaste_interface__membrane__Vm); +// LCOV_EXCL_START + if (_oob_0) + EXCEPTION(DumpState("membrane_voltage outside lookup table range", rY , var_chaste_interface__environment__time)); +// LCOV_EXCL_STOP + const double* const _lt_0_row = Dynamicmatsuoka_model_2003FromCellMLGRL1Opt_LookupTables::Instance()->IndexTable0(var_chaste_interface__membrane__Vm); + + // Mathematics + const double var_L_type_Ca_channel_voltage_dependent_gate__k_AP_RP = _lt_0_row[11]; // per_millisecond + const double var_L_type_Ca_channel_voltage_dependent_gate__k_RP_AP = _lt_0_row[13]; // per_millisecond + const double d_dt_chaste_interface_var_L_type_Ca_channel_voltage_dependent_gate__p_AP_CaL = 0.001 * var_chaste_interface__L_type_Ca_channel_voltage_dependent_gate__p_AI_CaL + var_L_type_Ca_channel_voltage_dependent_gate__k_RP_AP * var_chaste_interface__L_type_Ca_channel_voltage_dependent_gate__p_RP_CaL - (0.0040000000000000001 + var_L_type_Ca_channel_voltage_dependent_gate__k_AP_RP) * var_chaste_interface__L_type_Ca_channel_voltage_dependent_gate__p_AP_CaL; // 1 / millisecond + + return d_dt_chaste_interface_var_L_type_Ca_channel_voltage_dependent_gate__p_AP_CaL; + } + + double Dynamicmatsuoka_model_2003FromCellMLGRL1Opt::EvaluatePartialDerivative9(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -85.95752434460744 + + + + const double var_x345 = 0.015384615384615385 * var_chaste_interface__membrane__Vm; + const double var_x346 = exp(var_x345); + const double var_x347 = exp(0.14285714285714285 * var_chaste_interface__membrane__Vm); + const double var_x354 = 1 / (480 * var_x347 + 2.2000000000000002 * var_x346); + const double var_x355 = var_x354; + + partialF = -0.0040000000000000001 - var_x355; + } + else + { + const double y_save = rY[9]; + rY[9] += delta; + const double temp = EvaluateYDerivative9(var_chaste_interface__environment__time, rY); + partialF = (temp-mEvalF[9])/delta; + rY[9] = y_save; + } + return partialF; + } + double Dynamicmatsuoka_model_2003FromCellMLGRL1Opt::EvaluateYDerivative10(double var_chaste_interface__environment__time, std::vector& rY) + { + + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -85.95752434460744 + double var_chaste_interface__L_type_Ca_channel_voltage_dependent_gate__p_AP_CaL = rY[9]; + // Units: dimensionless; Initial value: 1.5445004166497696e-06 + double var_chaste_interface__L_type_Ca_channel_voltage_dependent_gate__p_RP_CaL = rY[10]; + // Units: dimensionless; Initial value: 0.9968480629364956 + double var_chaste_interface__L_type_Ca_channel_voltage_dependent_gate__p_AI_CaL = rY[11]; + // Units: dimensionless; Initial value: 0.000877325391245903 + + + // Lookup table indexing + const bool _oob_0 = Dynamicmatsuoka_model_2003FromCellMLGRL1Opt_LookupTables::Instance()->CheckIndex0(var_chaste_interface__membrane__Vm); +// LCOV_EXCL_START + if (_oob_0) + EXCEPTION(DumpState("membrane_voltage outside lookup table range", rY , var_chaste_interface__environment__time)); +// LCOV_EXCL_STOP + const double* const _lt_0_row = Dynamicmatsuoka_model_2003FromCellMLGRL1Opt_LookupTables::Instance()->IndexTable0(var_chaste_interface__membrane__Vm); + + // Mathematics + const double var_L_type_Ca_channel_voltage_dependent_gate__p_RI_CaL = 1 - var_chaste_interface__L_type_Ca_channel_voltage_dependent_gate__p_AI_CaL - var_chaste_interface__L_type_Ca_channel_voltage_dependent_gate__p_AP_CaL - var_chaste_interface__L_type_Ca_channel_voltage_dependent_gate__p_RP_CaL; // dimensionless + const double var_L_type_Ca_channel_voltage_dependent_gate__k_AI_RI = _lt_0_row[10]; // per_millisecond + const double var_L_type_Ca_channel_voltage_dependent_gate__k_AP_RP = _lt_0_row[11]; // per_millisecond + const double var_L_type_Ca_channel_voltage_dependent_gate__k_RI_AI = _lt_0_row[12]; // per_millisecond + const double var_L_type_Ca_channel_voltage_dependent_gate__k_RP_AP = _lt_0_row[13]; // per_millisecond + const double var_L_type_Ca_channel_voltage_dependent_gate__k_RP_RI = 0.040000000000000001 / (1 + 0.25 * var_L_type_Ca_channel_voltage_dependent_gate__k_AP_RP * var_L_type_Ca_channel_voltage_dependent_gate__k_RI_AI / (var_L_type_Ca_channel_voltage_dependent_gate__k_AI_RI * var_L_type_Ca_channel_voltage_dependent_gate__k_RP_AP)); // per_millisecond + const double d_dt_chaste_interface_var_L_type_Ca_channel_voltage_dependent_gate__p_RP_CaL = (0.040000000000000001 - var_L_type_Ca_channel_voltage_dependent_gate__k_RP_RI) * var_L_type_Ca_channel_voltage_dependent_gate__p_RI_CaL + var_L_type_Ca_channel_voltage_dependent_gate__k_AP_RP * var_chaste_interface__L_type_Ca_channel_voltage_dependent_gate__p_AP_CaL - (var_L_type_Ca_channel_voltage_dependent_gate__k_RP_AP + var_L_type_Ca_channel_voltage_dependent_gate__k_RP_RI) * var_chaste_interface__L_type_Ca_channel_voltage_dependent_gate__p_RP_CaL; // 1 / millisecond + + return d_dt_chaste_interface_var_L_type_Ca_channel_voltage_dependent_gate__p_RP_CaL; + } + + double Dynamicmatsuoka_model_2003FromCellMLGRL1Opt::EvaluatePartialDerivative10(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -85.95752434460744 + + + + const double var_x345 = 0.015384615384615385 * var_chaste_interface__membrane__Vm; + const double var_x350 = exp(-0.16949152542372881 * var_chaste_interface__membrane__Vm); + const double var_x351 = exp(-var_x345); + const double var_x356 = 1.5 * var_x351 + 0.27000000000000002 * var_x350; + const double var_x357 = 1 / var_x356; + + partialF = -0.040000000000000001 - var_x357; + } + else + { + const double y_save = rY[10]; + rY[10] += delta; + const double temp = EvaluateYDerivative10(var_chaste_interface__environment__time, rY); + partialF = (temp-mEvalF[10])/delta; + rY[10] = y_save; + } + return partialF; + } + double Dynamicmatsuoka_model_2003FromCellMLGRL1Opt::EvaluateYDerivative11(double var_chaste_interface__environment__time, std::vector& rY) + { + + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -85.95752434460744 + double var_chaste_interface__L_type_Ca_channel_voltage_dependent_gate__p_AP_CaL = rY[9]; + // Units: dimensionless; Initial value: 1.5445004166497696e-06 + double var_chaste_interface__L_type_Ca_channel_voltage_dependent_gate__p_RP_CaL = rY[10]; + // Units: dimensionless; Initial value: 0.9968480629364956 + double var_chaste_interface__L_type_Ca_channel_voltage_dependent_gate__p_AI_CaL = rY[11]; + // Units: dimensionless; Initial value: 0.000877325391245903 + + + // Lookup table indexing + const bool _oob_0 = Dynamicmatsuoka_model_2003FromCellMLGRL1Opt_LookupTables::Instance()->CheckIndex0(var_chaste_interface__membrane__Vm); +// LCOV_EXCL_START + if (_oob_0) + EXCEPTION(DumpState("membrane_voltage outside lookup table range", rY , var_chaste_interface__environment__time)); +// LCOV_EXCL_STOP + const double* const _lt_0_row = Dynamicmatsuoka_model_2003FromCellMLGRL1Opt_LookupTables::Instance()->IndexTable0(var_chaste_interface__membrane__Vm); + + // Mathematics + const double var_L_type_Ca_channel_voltage_dependent_gate__p_RI_CaL = 1 - var_chaste_interface__L_type_Ca_channel_voltage_dependent_gate__p_AI_CaL - var_chaste_interface__L_type_Ca_channel_voltage_dependent_gate__p_AP_CaL - var_chaste_interface__L_type_Ca_channel_voltage_dependent_gate__p_RP_CaL; // dimensionless + const double var_L_type_Ca_channel_voltage_dependent_gate__k_AI_RI = _lt_0_row[10]; // per_millisecond + const double var_L_type_Ca_channel_voltage_dependent_gate__k_RI_AI = _lt_0_row[12]; // per_millisecond + const double d_dt_chaste_interface_var_L_type_Ca_channel_voltage_dependent_gate__p_AI_CaL = 0.0040000000000000001 * var_chaste_interface__L_type_Ca_channel_voltage_dependent_gate__p_AP_CaL + var_L_type_Ca_channel_voltage_dependent_gate__k_RI_AI * var_L_type_Ca_channel_voltage_dependent_gate__p_RI_CaL - (0.001 + var_L_type_Ca_channel_voltage_dependent_gate__k_AI_RI) * var_chaste_interface__L_type_Ca_channel_voltage_dependent_gate__p_AI_CaL; // 1 / millisecond + + return d_dt_chaste_interface_var_L_type_Ca_channel_voltage_dependent_gate__p_AI_CaL; + } + + double Dynamicmatsuoka_model_2003FromCellMLGRL1Opt::EvaluatePartialDerivative11(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -85.95752434460744 + + + + const double var_x341 = 0.01 * var_chaste_interface__membrane__Vm; + const double var_x342 = exp(-var_x341); + const double var_x343 = exp(var_x341); + const double var_x358 = 0.13513513513513511 * var_chaste_interface__membrane__Vm; + const double var_x359 = exp(var_x358); + const double var_x360 = 11 * var_x343 + 2200000 * var_x359; + const double var_x362 = exp(-var_x358); + const double var_x363 = 1 / (2 * var_x342 + 0.0018 * var_x362); + const double var_x374 = var_x363; + + partialF = -0.001 - var_x374 - 1 / var_x360; + } + else + { + const double y_save = rY[11]; + rY[11] += delta; + const double temp = EvaluateYDerivative11(var_chaste_interface__environment__time, rY); + partialF = (temp-mEvalF[11])/delta; + rY[11] = y_save; + } + return partialF; + } + double Dynamicmatsuoka_model_2003FromCellMLGRL1Opt::EvaluateYDerivative12(double var_chaste_interface__environment__time, std::vector& rY) + { + + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -85.95752434460744 + double var_chaste_interface__internal_ion_concentrations__Ca_Total = rY[3]; + // Units: millimolar; Initial value: 0.00040180173572968586 + double var_chaste_interface__L_type_Ca_channel_voltage_dependent_gate__p_AP_CaL = rY[9]; + // Units: dimensionless; Initial value: 1.5445004166497696e-06 + double var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_U = rY[12]; + // Units: dimensionless; Initial value: 0.17246483915629204 + double var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_UCa = rY[13]; + // Units: dimensionless; Initial value: 6.098246017787626e-05 + double var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_C = rY[14]; + // Units: dimensionless; Initial value: 0.4250747299372254 + + + // Lookup table indexing + const bool _oob_0 = Dynamicmatsuoka_model_2003FromCellMLGRL1Opt_LookupTables::Instance()->CheckIndex0(var_chaste_interface__membrane__Vm); +// LCOV_EXCL_START + if (_oob_0) + EXCEPTION(DumpState("membrane_voltage outside lookup table range", rY , var_chaste_interface__environment__time)); +// LCOV_EXCL_STOP + const double* const _lt_0_row = Dynamicmatsuoka_model_2003FromCellMLGRL1Opt_LookupTables::Instance()->IndexTable0(var_chaste_interface__membrane__Vm); + + // Mathematics + const double var_internal_ion_concentrations__Cai = -0.026190000000000001 + 0.5 * sqrt(pow((0.052380000000000003 - var_chaste_interface__internal_ion_concentrations__Ca_Total), 2) + 0.0095200000000000007 * var_chaste_interface__internal_ion_concentrations__Ca_Total) + 0.5 * var_chaste_interface__internal_ion_concentrations__Ca_Total; // millimolar + const double var_constant_field_equations__CF_Ca = ((var_chaste_interface__membrane__Vm == 0) ? (-mParameters[5]) : (0.074870384603595908 * (-mParameters[5] * _lt_0_row[0] + var_internal_ion_concentrations__Cai) * var_chaste_interface__membrane__Vm / (_lt_0_row[1]))); // millimolar + const double var_L_type_Ca_channel_Ca_dependent_gate__iCaL = 0.067599999999999993 * var_constant_field_equations__CF_Ca; // picoA + const double var_L_type_Ca_channel_Ca_dependent_gate__Cacm = -0.29999999999999999 * var_L_type_Ca_channel_Ca_dependent_gate__iCaL + var_internal_ion_concentrations__Cai; // millimolar + const double var_L_type_Ca_channel_Ca_dependent_gate__k_UUCa_Ca = 6.9539999999999997 * (1 - var_chaste_interface__L_type_Ca_channel_voltage_dependent_gate__p_AP_CaL) * var_internal_ion_concentrations__Cai + 6.9539999999999997 * var_L_type_Ca_channel_Ca_dependent_gate__Cacm * var_chaste_interface__L_type_Ca_channel_voltage_dependent_gate__p_AP_CaL; // per_millisecond + const double d_dt_chaste_interface_var_L_type_Ca_channel_Ca_dependent_gate__p_U = 0.14299999999999999 * var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_C + 2.0019999999999998 * var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_UCa - (0.34999999999999998 + var_L_type_Ca_channel_Ca_dependent_gate__k_UUCa_Ca) * var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_U; // 1 / millisecond + + return d_dt_chaste_interface_var_L_type_Ca_channel_Ca_dependent_gate__p_U; + } + + double Dynamicmatsuoka_model_2003FromCellMLGRL1Opt::EvaluatePartialDerivative12(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -85.95752434460744 + double var_chaste_interface__internal_ion_concentrations__Ca_Total = rY[3]; + // Units: millimolar; Initial value: 0.00040180173572968586 + double var_chaste_interface__L_type_Ca_channel_voltage_dependent_gate__p_AP_CaL = rY[9]; + // Units: dimensionless; Initial value: 1.5445004166497696e-06 + + + + const double var_x1 = var_chaste_interface__membrane__Vm == 0; + const double var_x13 = 0.074870384603595908 * var_chaste_interface__membrane__Vm; + const double var_x14 = exp(-var_x13); + const double var_x15 = 1 - var_x14; + const double var_x16 = 1 / var_x15; + const double var_x17 = -0.052380000000000003 + var_chaste_interface__internal_ion_concentrations__Ca_Total; + const double var_x18 = sqrt(pow(var_x17, 2) + 0.0095200000000000007 * var_chaste_interface__internal_ion_concentrations__Ca_Total); + const double var_x19 = var_x14 * mParameters[5]; + const double var_x20 = -0.026190000000000001 - var_x19 + 0.5 * var_x18 + 0.5 * var_chaste_interface__internal_ion_concentrations__Ca_Total; + const double var_x21 = var_x16 * var_x20; + const double var_x214 = ((var_x1) ? (-mParameters[5]) : (var_x13 * var_x21)); + const double var_x285 = -0.026190000000000001 + 0.5 * var_x18 + 0.5 * var_chaste_interface__internal_ion_concentrations__Ca_Total; + const double var_x371 = -1 + var_chaste_interface__L_type_Ca_channel_voltage_dependent_gate__p_AP_CaL; + const double var_x378 = 6.9539999999999997 * var_chaste_interface__L_type_Ca_channel_voltage_dependent_gate__p_AP_CaL; + const double var_x382 = var_x378 * (var_x285 - 0.020279999999999996 * var_x214); + const double var_x383 = var_x382 - 6.9539999999999997 * var_x285 * var_x371; + + partialF = -0.34999999999999998 - var_x383; + } + else + { + const double y_save = rY[12]; + rY[12] += delta; + const double temp = EvaluateYDerivative12(var_chaste_interface__environment__time, rY); + partialF = (temp-mEvalF[12])/delta; + rY[12] = y_save; + } + return partialF; + } + double Dynamicmatsuoka_model_2003FromCellMLGRL1Opt::EvaluateYDerivative13(double var_chaste_interface__environment__time, std::vector& rY) + { + + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -85.95752434460744 + double var_chaste_interface__internal_ion_concentrations__Ca_Total = rY[3]; + // Units: millimolar; Initial value: 0.00040180173572968586 + double var_chaste_interface__L_type_Ca_channel_voltage_dependent_gate__p_AP_CaL = rY[9]; + // Units: dimensionless; Initial value: 1.5445004166497696e-06 + double var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_U = rY[12]; + // Units: dimensionless; Initial value: 0.17246483915629204 + double var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_UCa = rY[13]; + // Units: dimensionless; Initial value: 6.098246017787626e-05 + double var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_C = rY[14]; + // Units: dimensionless; Initial value: 0.4250747299372254 + + + // Lookup table indexing + const bool _oob_0 = Dynamicmatsuoka_model_2003FromCellMLGRL1Opt_LookupTables::Instance()->CheckIndex0(var_chaste_interface__membrane__Vm); +// LCOV_EXCL_START + if (_oob_0) + EXCEPTION(DumpState("membrane_voltage outside lookup table range", rY , var_chaste_interface__environment__time)); +// LCOV_EXCL_STOP + const double* const _lt_0_row = Dynamicmatsuoka_model_2003FromCellMLGRL1Opt_LookupTables::Instance()->IndexTable0(var_chaste_interface__membrane__Vm); + + // Mathematics + const double var_L_type_Ca_channel_Ca_dependent_gate__p_CCa = 1 - var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_C - var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_U - var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_UCa; // dimensionless + const double var_internal_ion_concentrations__Cai = -0.026190000000000001 + 0.5 * sqrt(pow((0.052380000000000003 - var_chaste_interface__internal_ion_concentrations__Ca_Total), 2) + 0.0095200000000000007 * var_chaste_interface__internal_ion_concentrations__Ca_Total) + 0.5 * var_chaste_interface__internal_ion_concentrations__Ca_Total; // millimolar + const double var_constant_field_equations__CF_Ca = ((var_chaste_interface__membrane__Vm == 0) ? (-mParameters[5]) : (0.074870384603595908 * (-mParameters[5] * _lt_0_row[0] + var_internal_ion_concentrations__Cai) * var_chaste_interface__membrane__Vm / (_lt_0_row[1]))); // millimolar + const double var_L_type_Ca_channel_Ca_dependent_gate__iCaL = 0.067599999999999993 * var_constant_field_equations__CF_Ca; // picoA + const double var_L_type_Ca_channel_Ca_dependent_gate__Cacm = -0.29999999999999999 * var_L_type_Ca_channel_Ca_dependent_gate__iCaL + var_internal_ion_concentrations__Cai; // millimolar + const double var_L_type_Ca_channel_Ca_dependent_gate__k_UUCa_Ca = 6.9539999999999997 * (1 - var_chaste_interface__L_type_Ca_channel_voltage_dependent_gate__p_AP_CaL) * var_internal_ion_concentrations__Cai + 6.9539999999999997 * var_L_type_Ca_channel_Ca_dependent_gate__Cacm * var_chaste_interface__L_type_Ca_channel_voltage_dependent_gate__p_AP_CaL; // per_millisecond + const double d_dt_chaste_interface_var_L_type_Ca_channel_Ca_dependent_gate__p_UCa = 0.00029999999999999997 * var_L_type_Ca_channel_Ca_dependent_gate__p_CCa - 2.3519999999999999 * var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_UCa + var_L_type_Ca_channel_Ca_dependent_gate__k_UUCa_Ca * var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_U; // 1 / millisecond + + return d_dt_chaste_interface_var_L_type_Ca_channel_Ca_dependent_gate__p_UCa; + } + + double Dynamicmatsuoka_model_2003FromCellMLGRL1Opt::EvaluatePartialDerivative13(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + + + + + partialF = -2.3523000000000001; + } + else + { + const double y_save = rY[13]; + rY[13] += delta; + const double temp = EvaluateYDerivative13(var_chaste_interface__environment__time, rY); + partialF = (temp-mEvalF[13])/delta; + rY[13] = y_save; + } + return partialF; + } + double Dynamicmatsuoka_model_2003FromCellMLGRL1Opt::EvaluateYDerivative14(double var_chaste_interface__environment__time, std::vector& rY) + { + + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -85.95752434460744 + double var_chaste_interface__internal_ion_concentrations__Ca_Total = rY[3]; + // Units: millimolar; Initial value: 0.00040180173572968586 + double var_chaste_interface__L_type_Ca_channel_voltage_dependent_gate__p_AP_CaL = rY[9]; + // Units: dimensionless; Initial value: 1.5445004166497696e-06 + double var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_U = rY[12]; + // Units: dimensionless; Initial value: 0.17246483915629204 + double var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_UCa = rY[13]; + // Units: dimensionless; Initial value: 6.098246017787626e-05 + double var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_C = rY[14]; + // Units: dimensionless; Initial value: 0.4250747299372254 + + + // Lookup table indexing + const bool _oob_0 = Dynamicmatsuoka_model_2003FromCellMLGRL1Opt_LookupTables::Instance()->CheckIndex0(var_chaste_interface__membrane__Vm); +// LCOV_EXCL_START + if (_oob_0) + EXCEPTION(DumpState("membrane_voltage outside lookup table range", rY , var_chaste_interface__environment__time)); +// LCOV_EXCL_STOP + const double* const _lt_0_row = Dynamicmatsuoka_model_2003FromCellMLGRL1Opt_LookupTables::Instance()->IndexTable0(var_chaste_interface__membrane__Vm); + + // Mathematics + const double var_L_type_Ca_channel_Ca_dependent_gate__p_CCa = 1 - var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_C - var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_U - var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_UCa; // dimensionless + const double var_internal_ion_concentrations__Cai = -0.026190000000000001 + 0.5 * sqrt(pow((0.052380000000000003 - var_chaste_interface__internal_ion_concentrations__Ca_Total), 2) + 0.0095200000000000007 * var_chaste_interface__internal_ion_concentrations__Ca_Total) + 0.5 * var_chaste_interface__internal_ion_concentrations__Ca_Total; // millimolar + const double var_constant_field_equations__CF_Ca = ((var_chaste_interface__membrane__Vm == 0) ? (-mParameters[5]) : (0.074870384603595908 * (-mParameters[5] * _lt_0_row[0] + var_internal_ion_concentrations__Cai) * var_chaste_interface__membrane__Vm / (_lt_0_row[1]))); // millimolar + const double var_L_type_Ca_channel_Ca_dependent_gate__iCaL = 0.067599999999999993 * var_constant_field_equations__CF_Ca; // picoA + const double var_L_type_Ca_channel_Ca_dependent_gate__Cacm = -0.29999999999999999 * var_L_type_Ca_channel_Ca_dependent_gate__iCaL + var_internal_ion_concentrations__Cai; // millimolar + const double d_dt_chaste_interface_var_L_type_Ca_channel_Ca_dependent_gate__p_C = 0.34999999999999998 * var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_U + 0.0041999999999999997 * var_L_type_Ca_channel_Ca_dependent_gate__p_CCa - (0.14299999999999999 + 6.9539999999999997 * var_L_type_Ca_channel_Ca_dependent_gate__Cacm * var_chaste_interface__L_type_Ca_channel_voltage_dependent_gate__p_AP_CaL) * var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_C; // 1 / millisecond + + return d_dt_chaste_interface_var_L_type_Ca_channel_Ca_dependent_gate__p_C; + } + + double Dynamicmatsuoka_model_2003FromCellMLGRL1Opt::EvaluatePartialDerivative14(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -85.95752434460744 + double var_chaste_interface__internal_ion_concentrations__Ca_Total = rY[3]; + // Units: millimolar; Initial value: 0.00040180173572968586 + double var_chaste_interface__L_type_Ca_channel_voltage_dependent_gate__p_AP_CaL = rY[9]; + // Units: dimensionless; Initial value: 1.5445004166497696e-06 + + + + const double var_x1 = var_chaste_interface__membrane__Vm == 0; + const double var_x13 = 0.074870384603595908 * var_chaste_interface__membrane__Vm; + const double var_x14 = exp(-var_x13); + const double var_x15 = 1 - var_x14; + const double var_x16 = 1 / var_x15; + const double var_x17 = -0.052380000000000003 + var_chaste_interface__internal_ion_concentrations__Ca_Total; + const double var_x18 = sqrt(pow(var_x17, 2) + 0.0095200000000000007 * var_chaste_interface__internal_ion_concentrations__Ca_Total); + const double var_x19 = var_x14 * mParameters[5]; + const double var_x20 = -0.026190000000000001 - var_x19 + 0.5 * var_x18 + 0.5 * var_chaste_interface__internal_ion_concentrations__Ca_Total; + const double var_x21 = var_x16 * var_x20; + const double var_x214 = ((var_x1) ? (-mParameters[5]) : (var_x13 * var_x21)); + const double var_x285 = -0.026190000000000001 + 0.5 * var_x18 + 0.5 * var_chaste_interface__internal_ion_concentrations__Ca_Total; + const double var_x378 = 6.9539999999999997 * var_chaste_interface__L_type_Ca_channel_voltage_dependent_gate__p_AP_CaL; + const double var_x382 = var_x378 * (var_x285 - 0.020279999999999996 * var_x214); + + partialF = -0.1472 - var_x382; + } + else + { + const double y_save = rY[14]; + rY[14] += delta; + const double temp = EvaluateYDerivative14(var_chaste_interface__environment__time, rY); + partialF = (temp-mEvalF[14])/delta; + rY[14] = y_save; + } + return partialF; + } + double Dynamicmatsuoka_model_2003FromCellMLGRL1Opt::EvaluateYDerivative15(double var_chaste_interface__environment__time, std::vector& rY) + { + + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -85.95752434460744 + double var_chaste_interface__L_type_Ca_channel_ultra_slow_gate__y = rY[15]; + // Units: dimensionless; Initial value: 0.9985266538252986 + + + // Lookup table indexing + const bool _oob_0 = Dynamicmatsuoka_model_2003FromCellMLGRL1Opt_LookupTables::Instance()->CheckIndex0(var_chaste_interface__membrane__Vm); +// LCOV_EXCL_START + if (_oob_0) + EXCEPTION(DumpState("membrane_voltage outside lookup table range", rY , var_chaste_interface__environment__time)); +// LCOV_EXCL_STOP + const double* const _lt_0_row = Dynamicmatsuoka_model_2003FromCellMLGRL1Opt_LookupTables::Instance()->IndexTable0(var_chaste_interface__membrane__Vm); + + // Mathematics + const double d_dt_chaste_interface_var_L_type_Ca_channel_ultra_slow_gate__y = (1 - var_chaste_interface__L_type_Ca_channel_ultra_slow_gate__y) / (_lt_0_row[8]) - var_chaste_interface__L_type_Ca_channel_ultra_slow_gate__y / (_lt_0_row[9]); // 1 / millisecond + + return d_dt_chaste_interface_var_L_type_Ca_channel_ultra_slow_gate__y; + } + + double Dynamicmatsuoka_model_2003FromCellMLGRL1Opt::EvaluatePartialDerivative15(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -85.95752434460744 + + + + const double var_x345 = 0.015384615384615385 * var_chaste_interface__membrane__Vm; + const double var_x346 = exp(var_x345); + const double var_x351 = exp(-var_x345); + const double var_x384 = exp(-0.071428571428571425 * var_chaste_interface__membrane__Vm); + const double var_x385 = exp(0.1111111111111111 * var_chaste_interface__membrane__Vm); + + partialF = -1 / (58 * var_x346 + 250000 * var_x385) - 1 / (66 * var_x351 + 1800 * var_x384); + } + else + { + const double y_save = rY[15]; + rY[15] += delta; + const double temp = EvaluateYDerivative15(var_chaste_interface__environment__time, rY); + partialF = (temp-mEvalF[15])/delta; + rY[15] = y_save; + } + return partialF; + } + double Dynamicmatsuoka_model_2003FromCellMLGRL1Opt::EvaluateYDerivative16(double var_chaste_interface__environment__time, std::vector& rY) + { + + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -85.95752434460744 + double var_chaste_interface__T_type_Ca_channel_y1_gate__y1 = rY[16]; + // Units: dimensionless; Initial value: 1.6882718240109127e-05 + + + // Lookup table indexing + const bool _oob_0 = Dynamicmatsuoka_model_2003FromCellMLGRL1Opt_LookupTables::Instance()->CheckIndex0(var_chaste_interface__membrane__Vm); +// LCOV_EXCL_START + if (_oob_0) + EXCEPTION(DumpState("membrane_voltage outside lookup table range", rY , var_chaste_interface__environment__time)); +// LCOV_EXCL_STOP + const double* const _lt_0_row = Dynamicmatsuoka_model_2003FromCellMLGRL1Opt_LookupTables::Instance()->IndexTable0(var_chaste_interface__membrane__Vm); + + // Mathematics + const double d_dt_chaste_interface_var_T_type_Ca_channel_y1_gate__y1 = (1 - var_chaste_interface__T_type_Ca_channel_y1_gate__y1) / (_lt_0_row[14]) - var_chaste_interface__T_type_Ca_channel_y1_gate__y1 / (_lt_0_row[15]); // 1 / millisecond + + return d_dt_chaste_interface_var_T_type_Ca_channel_y1_gate__y1; + } + + double Dynamicmatsuoka_model_2003FromCellMLGRL1Opt::EvaluatePartialDerivative16(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -85.95752434460744 + + + + const double var_x386 = exp(0.0001 * var_chaste_interface__membrane__Vm); + const double var_x387 = exp(0.15873015873015872 * var_chaste_interface__membrane__Vm); + const double var_x388 = exp(-0.17857142857142858 * var_chaste_interface__membrane__Vm); + const double var_x389 = exp(-0.0040000000000000001 * var_chaste_interface__membrane__Vm); + + partialF = -1 / (1.5 * var_x386 + 40 * var_x387) - 1 / (0.019 * var_x388 + 0.81999999999999995 * var_x389); + } + else + { + const double y_save = rY[16]; + rY[16] += delta; + const double temp = EvaluateYDerivative16(var_chaste_interface__environment__time, rY); + partialF = (temp-mEvalF[16])/delta; + rY[16] = y_save; + } + return partialF; + } + double Dynamicmatsuoka_model_2003FromCellMLGRL1Opt::EvaluateYDerivative17(double var_chaste_interface__environment__time, std::vector& rY) + { + + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -85.95752434460744 + double var_chaste_interface__T_type_Ca_channel_y2_gate__y2 = rY[17]; + // Units: dimensionless; Initial value: 0.8585352091865849 + + + // Lookup table indexing + const bool _oob_0 = Dynamicmatsuoka_model_2003FromCellMLGRL1Opt_LookupTables::Instance()->CheckIndex0(var_chaste_interface__membrane__Vm); +// LCOV_EXCL_START + if (_oob_0) + EXCEPTION(DumpState("membrane_voltage outside lookup table range", rY , var_chaste_interface__environment__time)); +// LCOV_EXCL_STOP + const double* const _lt_0_row = Dynamicmatsuoka_model_2003FromCellMLGRL1Opt_LookupTables::Instance()->IndexTable0(var_chaste_interface__membrane__Vm); + + // Mathematics + const double d_dt_chaste_interface_var_T_type_Ca_channel_y2_gate__y2 = (1 - var_chaste_interface__T_type_Ca_channel_y2_gate__y2) / (_lt_0_row[16]) - var_chaste_interface__T_type_Ca_channel_y2_gate__y2 / (_lt_0_row[17]); // 1 / millisecond + + return d_dt_chaste_interface_var_T_type_Ca_channel_y2_gate__y2; + } + + double Dynamicmatsuoka_model_2003FromCellMLGRL1Opt::EvaluatePartialDerivative17(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -85.95752434460744 + + + + const double var_x390 = exp(-0.14925373134328357 * var_chaste_interface__membrane__Vm); + const double var_x391 = exp(-0.040000000000000001 * var_chaste_interface__membrane__Vm); + const double var_x392 = exp(0.00033333333333333332 * var_chaste_interface__membrane__Vm); + const double var_x393 = exp(0.099009900990099015 * var_chaste_interface__membrane__Vm); + + partialF = -1 / (30 * var_x392 + 62000 * var_x393) - 1 / (1.2 * var_x391 + 0.00059999999999999995 * var_x390); + } + else + { + const double y_save = rY[17]; + rY[17] += delta; + const double temp = EvaluateYDerivative17(var_chaste_interface__environment__time, rY); + partialF = (temp-mEvalF[17])/delta; + rY[17] = y_save; + } + return partialF; + } + double Dynamicmatsuoka_model_2003FromCellMLGRL1Opt::EvaluateYDerivative18(double var_chaste_interface__environment__time, std::vector& rY) + { + + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -85.95752434460744 + double var_chaste_interface__internal_ion_concentrations__Ki = rY[2]; + // Units: millimolar; Initial value: 143.1837333000449 + double var_chaste_interface__time_independent_potassium_current_y_gate__y = rY[18]; + // Units: dimensionless; Initial value: 0.6080573900752752 + + + + // Mathematics + const double var_time_independent_potassium_current__E_K = 26.712831923985377 * log(mParameters[6] / var_chaste_interface__internal_ion_concentrations__Ki); // millivolt + const double var_time_independent_potassium_current__lambda = 3 * (1 + exp(-2.4319999999999999 + 0.064000000000000001 * var_chaste_interface__membrane__Vm - 0.064000000000000001 * var_time_independent_potassium_current__E_K)) * exp(0.47999999999999998 + 0.048000000000000001 * var_time_independent_potassium_current__E_K - 0.048000000000000001 * var_chaste_interface__membrane__Vm) / (1 + exp(-2.1000000000000001 + 0.029999999999999999 * var_chaste_interface__membrane__Vm - 0.029999999999999999 * var_time_independent_potassium_current__E_K)); // per_millisecond + const double var_time_independent_potassium_current__mu = 0.75 * exp(-0.35000000000000003 + 0.035000000000000003 * var_chaste_interface__membrane__Vm - 0.035000000000000003 * var_time_independent_potassium_current__E_K) / (1 + exp(-2.1000000000000001 + 0.014999999999999999 * var_chaste_interface__membrane__Vm - 0.014999999999999999 * var_time_independent_potassium_current__E_K)); // per_millisecond + const double var_time_independent_potassium_current__fO = var_time_independent_potassium_current__lambda / (var_time_independent_potassium_current__lambda + var_time_independent_potassium_current__mu); // dimensionless + const double d_dt_chaste_interface_var_time_independent_potassium_current_y_gate__y = (1 - var_chaste_interface__time_independent_potassium_current_y_gate__y) / (7 * exp(-0.32333333333333331 + 0.0033333333333333335 * var_chaste_interface__membrane__Vm - 0.0033333333333333335 * var_time_independent_potassium_current__E_K) + 8000 * exp(-11.411764705882353 + 0.11764705882352941 * var_chaste_interface__membrane__Vm - 0.11764705882352941 * var_time_independent_potassium_current__E_K)) - pow(var_time_independent_potassium_current__fO, 4) * var_chaste_interface__time_independent_potassium_current_y_gate__y / (0.00013999999999999999 * exp(10.659340659340661 + 0.10989010989010989 * var_time_independent_potassium_current__E_K - 0.10989010989010989 * var_chaste_interface__membrane__Vm) + 0.20000000000000001 * exp(0.19400000000000001 + 0.002 * var_time_independent_potassium_current__E_K - 0.002 * var_chaste_interface__membrane__Vm)); // 1 / millisecond + + return d_dt_chaste_interface_var_time_independent_potassium_current_y_gate__y; + } + + double Dynamicmatsuoka_model_2003FromCellMLGRL1Opt::EvaluatePartialDerivative18(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -85.95752434460744 + double var_chaste_interface__internal_ion_concentrations__Ki = rY[2]; + // Units: millimolar; Initial value: 143.1837333000449 + + + + const double var_x76 = 1 / var_chaste_interface__internal_ion_concentrations__Ki; + const double var_x77 = log(var_x76 * mParameters[6]); + const double var_x78 = exp(-2.4319999999999999 + 0.064000000000000001 * var_chaste_interface__membrane__Vm - 1.7096212431350641 * var_x77); + const double var_x79 = 1 + var_x78; + const double var_x80 = pow(var_x79, 4); + const double var_x81 = exp(-2.1000000000000001 + 0.029999999999999999 * var_chaste_interface__membrane__Vm - 0.80138495771956131 * var_x77); + const double var_x82 = 1 + var_x81; + const double var_x83 = pow(var_x82, (-4)); + const double var_x84 = exp(-2.1000000000000001 + 0.014999999999999999 * var_chaste_interface__membrane__Vm - 0.40069247885978065 * var_x77); + const double var_x85 = 1 + var_x84; + const double var_x86 = 1 / var_x85; + const double var_x87 = exp(-0.35000000000000003 + 0.035000000000000003 * var_chaste_interface__membrane__Vm - 0.93494911733948827 * var_x77); + const double var_x88 = var_x86 * var_x87; + const double var_x89 = exp(0.47999999999999998 + 1.282215932351298 * var_x77 - 0.048000000000000001 * var_chaste_interface__membrane__Vm); + const double var_x90 = var_x89 / var_x82; + const double var_x91 = var_x79 * var_x90; + const double var_x92 = var_x91 + 0.25 * var_x88; + const double var_x93 = pow(var_x92, (-4)); + const double var_x94 = pow(var_x89, 4); + const double var_x95 = var_x83 * var_x93 * var_x94; + const double var_x96 = var_x80 * var_x95; + const double var_x97 = var_x96; + const double var_x394 = 0.0033333333333333335 * var_chaste_interface__membrane__Vm; + const double var_x395 = -var_x394; + const double var_x396 = exp(-0.32333333333333331 - var_x395 - 0.08904277307995126 * var_x77); + const double var_x397 = exp(-11.411764705882353 + 0.11764705882352941 * var_chaste_interface__membrane__Vm - 3.142686108704162 * var_x77); + const double var_x400 = exp(10.659340659340661 + 2.9354760356027887 * var_x77 - 0.10989010989010989 * var_chaste_interface__membrane__Vm); + const double var_x401 = 0.002 * var_chaste_interface__membrane__Vm; + const double var_x402 = exp(0.19400000000000001 - var_x401 + 0.053425663847970754 * var_x77); + const double var_x403 = 1 / (0.00013999999999999999 * var_x400 + 0.20000000000000001 * var_x402); + + partialF = -1 / (7 * var_x396 + 8000 * var_x397) - var_x403 * var_x97; + } + else + { + const double y_save = rY[18]; + rY[18] += delta; + const double temp = EvaluateYDerivative18(var_chaste_interface__environment__time, rY); + partialF = (temp-mEvalF[18])/delta; + rY[18] = y_save; + } + return partialF; + } + double Dynamicmatsuoka_model_2003FromCellMLGRL1Opt::EvaluateYDerivative19(double var_chaste_interface__environment__time, std::vector& rY) + { + + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -85.95752434460744 + double var_chaste_interface__rapid_time_dependent_potassium_current_y1_gate__y1 = rY[19]; + // Units: dimensionless; Initial value: 0.0018339931180983765 + + + // Lookup table indexing + const bool _oob_0 = Dynamicmatsuoka_model_2003FromCellMLGRL1Opt_LookupTables::Instance()->CheckIndex0(var_chaste_interface__membrane__Vm); +// LCOV_EXCL_START + if (_oob_0) + EXCEPTION(DumpState("membrane_voltage outside lookup table range", rY , var_chaste_interface__environment__time)); +// LCOV_EXCL_STOP + const double* const _lt_0_row = Dynamicmatsuoka_model_2003FromCellMLGRL1Opt_LookupTables::Instance()->IndexTable0(var_chaste_interface__membrane__Vm); + + // Mathematics + const double d_dt_chaste_interface_var_rapid_time_dependent_potassium_current_y1_gate__y1 = -(_lt_0_row[18]) * var_chaste_interface__rapid_time_dependent_potassium_current_y1_gate__y1 + (1 - var_chaste_interface__rapid_time_dependent_potassium_current_y1_gate__y1) / (_lt_0_row[19]); // 1 / millisecond + + return d_dt_chaste_interface_var_rapid_time_dependent_potassium_current_y1_gate__y1; + } + + double Dynamicmatsuoka_model_2003FromCellMLGRL1Opt::EvaluatePartialDerivative19(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -85.95752434460744 + + + + const double var_x326 = exp(0.050000000000000003 * var_chaste_interface__membrane__Vm); + const double var_x394 = 0.0033333333333333335 * var_chaste_interface__membrane__Vm; + const double var_x395 = -var_x394; + const double var_x408 = 1 / var_x326; + const double var_x409 = 0.035714285714285712 * var_chaste_interface__membrane__Vm; + const double var_x410 = exp(var_x409); + const double var_x411 = exp(0.001 * var_chaste_interface__membrane__Vm); + const double var_x413 = exp(var_x395); + const double var_x414 = exp(-0.086956521739130432 * var_chaste_interface__membrane__Vm); + + partialF = -1 / (5 * var_x413 + 20 * var_x414) - 1 / (160 * var_x410 + 200 * var_x411) - 0.00040000000000000002 * var_x408; + } + else + { + const double y_save = rY[19]; + rY[19] += delta; + const double temp = EvaluateYDerivative19(var_chaste_interface__environment__time, rY); + partialF = (temp-mEvalF[19])/delta; + rY[19] = y_save; + } + return partialF; + } + double Dynamicmatsuoka_model_2003FromCellMLGRL1Opt::EvaluateYDerivative20(double var_chaste_interface__environment__time, std::vector& rY) + { + + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -85.95752434460744 + double var_chaste_interface__rapid_time_dependent_potassium_current_y2_gate__y2 = rY[20]; + // Units: dimensionless; Initial value: 0.20443083454225305 + + + // Lookup table indexing + const bool _oob_0 = Dynamicmatsuoka_model_2003FromCellMLGRL1Opt_LookupTables::Instance()->CheckIndex0(var_chaste_interface__membrane__Vm); +// LCOV_EXCL_START + if (_oob_0) + EXCEPTION(DumpState("membrane_voltage outside lookup table range", rY , var_chaste_interface__environment__time)); +// LCOV_EXCL_STOP + const double* const _lt_0_row = Dynamicmatsuoka_model_2003FromCellMLGRL1Opt_LookupTables::Instance()->IndexTable0(var_chaste_interface__membrane__Vm); + + // Mathematics + const double d_dt_chaste_interface_var_rapid_time_dependent_potassium_current_y2_gate__y2 = -(_lt_0_row[20]) * var_chaste_interface__rapid_time_dependent_potassium_current_y2_gate__y2 + (1 - var_chaste_interface__rapid_time_dependent_potassium_current_y2_gate__y2) / (_lt_0_row[21]); // 1 / millisecond + + return d_dt_chaste_interface_var_rapid_time_dependent_potassium_current_y2_gate__y2; + } + + double Dynamicmatsuoka_model_2003FromCellMLGRL1Opt::EvaluatePartialDerivative20(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -85.95752434460744 + + + + const double var_x154 = 0.076923076923076927 * var_chaste_interface__membrane__Vm; + const double var_x326 = exp(0.050000000000000003 * var_chaste_interface__membrane__Vm); + const double var_x394 = 0.0033333333333333335 * var_chaste_interface__membrane__Vm; + const double var_x395 = -var_x394; + const double var_x408 = 1 / var_x326; + const double var_x409 = 0.035714285714285712 * var_chaste_interface__membrane__Vm; + const double var_x410 = exp(var_x409); + const double var_x411 = exp(0.001 * var_chaste_interface__membrane__Vm); + const double var_x413 = exp(var_x395); + const double var_x415 = exp(-var_x154); + + partialF = -1 / (20 * var_x413 + 200 * var_x415) - 1 / (1600 * var_x410 + 2000 * var_x411) - 0.0001 * var_x408; + } + else + { + const double y_save = rY[20]; + rY[20] += delta; + const double temp = EvaluateYDerivative20(var_chaste_interface__environment__time, rY); + partialF = (temp-mEvalF[20])/delta; + rY[20] = y_save; + } + return partialF; + } + double Dynamicmatsuoka_model_2003FromCellMLGRL1Opt::EvaluateYDerivative21(double var_chaste_interface__environment__time, std::vector& rY) + { + + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -85.95752434460744 + double var_chaste_interface__rapid_time_dependent_potassium_current_y3_gate__y3 = rY[21]; + // Units: dimensionless; Initial value: 0.967887666264921 + + + // Lookup table indexing + const bool _oob_0 = Dynamicmatsuoka_model_2003FromCellMLGRL1Opt_LookupTables::Instance()->CheckIndex0(var_chaste_interface__membrane__Vm); +// LCOV_EXCL_START + if (_oob_0) + EXCEPTION(DumpState("membrane_voltage outside lookup table range", rY , var_chaste_interface__environment__time)); +// LCOV_EXCL_STOP + const double* const _lt_0_row = Dynamicmatsuoka_model_2003FromCellMLGRL1Opt_LookupTables::Instance()->IndexTable0(var_chaste_interface__membrane__Vm); + + // Mathematics + const double d_dt_chaste_interface_var_rapid_time_dependent_potassium_current_y3_gate__y3 = (1 - var_chaste_interface__rapid_time_dependent_potassium_current_y3_gate__y3) / (_lt_0_row[22]) - var_chaste_interface__rapid_time_dependent_potassium_current_y3_gate__y3 / (_lt_0_row[23]); // 1 / millisecond + + return d_dt_chaste_interface_var_rapid_time_dependent_potassium_current_y3_gate__y3; + } + + double Dynamicmatsuoka_model_2003FromCellMLGRL1Opt::EvaluatePartialDerivative21(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -85.95752434460744 + + + + const double var_x312 = 0.058823529411764705 * var_chaste_interface__membrane__Vm; + const double var_x313 = exp(var_x312); + const double var_x394 = 0.0033333333333333335 * var_chaste_interface__membrane__Vm; + const double var_x416 = exp(-var_x312); + const double var_x417 = exp(-0.0066666666666666671 * var_chaste_interface__membrane__Vm); + const double var_x418 = exp(var_x394); + + partialF = -1 / (2 * var_x417 + 0.34999999999999998 * var_x416) - 1 / (2.5 * var_x418 + 10 * var_x313); + } + else + { + const double y_save = rY[21]; + rY[21] += delta; + const double temp = EvaluateYDerivative21(var_chaste_interface__environment__time, rY); + partialF = (temp-mEvalF[21])/delta; + rY[21] = y_save; + } + return partialF; + } + double Dynamicmatsuoka_model_2003FromCellMLGRL1Opt::EvaluateYDerivative22(double var_chaste_interface__environment__time, std::vector& rY) + { + + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -85.95752434460744 + double var_chaste_interface__slow_time_dependent_potassium_current_y1_gate__y1 = rY[22]; + // Units: dimensionless; Initial value: 0.09738789658609195 + + + // Lookup table indexing + const bool _oob_0 = Dynamicmatsuoka_model_2003FromCellMLGRL1Opt_LookupTables::Instance()->CheckIndex0(var_chaste_interface__membrane__Vm); +// LCOV_EXCL_START + if (_oob_0) + EXCEPTION(DumpState("membrane_voltage outside lookup table range", rY , var_chaste_interface__environment__time)); +// LCOV_EXCL_STOP + const double* const _lt_0_row = Dynamicmatsuoka_model_2003FromCellMLGRL1Opt_LookupTables::Instance()->IndexTable0(var_chaste_interface__membrane__Vm); + + // Mathematics + const double d_dt_chaste_interface_var_slow_time_dependent_potassium_current_y1_gate__y1 = (1 - var_chaste_interface__slow_time_dependent_potassium_current_y1_gate__y1) / (_lt_0_row[24]) - var_chaste_interface__slow_time_dependent_potassium_current_y1_gate__y1 / (_lt_0_row[25]); // 1 / millisecond + + return d_dt_chaste_interface_var_slow_time_dependent_potassium_current_y1_gate__y1; + } + + double Dynamicmatsuoka_model_2003FromCellMLGRL1Opt::EvaluatePartialDerivative22(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -85.95752434460744 + + + + const double var_x326 = exp(0.050000000000000003 * var_chaste_interface__membrane__Vm); + const double var_x341 = 0.01 * var_chaste_interface__membrane__Vm; + const double var_x343 = exp(var_x341); + const double var_x419 = exp(-0.095238095238095233 * var_chaste_interface__membrane__Vm); + const double var_x420 = exp(-0.016129032258064516 * var_chaste_interface__membrane__Vm); + + partialF = -1 / (260 * var_x343 + 1450 * var_x326) - 1 / (85 * var_x419 + 370 * var_x420); + } + else + { + const double y_save = rY[22]; + rY[22] += delta; + const double temp = EvaluateYDerivative22(var_chaste_interface__environment__time, rY); + partialF = (temp-mEvalF[22])/delta; + rY[22] = y_save; + } + return partialF; + } + double Dynamicmatsuoka_model_2003FromCellMLGRL1Opt::EvaluateYDerivative23(double var_chaste_interface__environment__time, std::vector& rY) + { + + double var_chaste_interface__internal_ion_concentrations__Ca_Total = rY[3]; + // Units: millimolar; Initial value: 0.00040180173572968586 + double var_chaste_interface__slow_time_dependent_potassium_current_y2_gate__y2 = rY[23]; + // Units: dimensionless; Initial value: 0.09745345578743213 + + + + // Mathematics + const double var_internal_ion_concentrations__Cai = -0.026190000000000001 + 0.5 * sqrt(pow((0.052380000000000003 - var_chaste_interface__internal_ion_concentrations__Ca_Total), 2) + 0.0095200000000000007 * var_chaste_interface__internal_ion_concentrations__Ca_Total) + 0.5 * var_chaste_interface__internal_ion_concentrations__Ca_Total; // millimolar + const double d_dt_chaste_interface_var_slow_time_dependent_potassium_current_y2_gate__y2 = -0.004444 * var_chaste_interface__slow_time_dependent_potassium_current_y2_gate__y2 + 3.7000000000000002 * (1 - var_chaste_interface__slow_time_dependent_potassium_current_y2_gate__y2) * var_internal_ion_concentrations__Cai; // 1 / millisecond + + return d_dt_chaste_interface_var_slow_time_dependent_potassium_current_y2_gate__y2; + } + + double Dynamicmatsuoka_model_2003FromCellMLGRL1Opt::EvaluatePartialDerivative23(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__internal_ion_concentrations__Ca_Total = rY[3]; + // Units: millimolar; Initial value: 0.00040180173572968586 + + + + const double var_x17 = -0.052380000000000003 + var_chaste_interface__internal_ion_concentrations__Ca_Total; + const double var_x18 = sqrt(pow(var_x17, 2) + 0.0095200000000000007 * var_chaste_interface__internal_ion_concentrations__Ca_Total); + + partialF = 0.092459000000000013 - 1.8500000000000001 * var_x18 - 1.8500000000000001 * var_chaste_interface__internal_ion_concentrations__Ca_Total; + } + else + { + const double y_save = rY[23]; + rY[23] += delta; + const double temp = EvaluateYDerivative23(var_chaste_interface__environment__time, rY); + partialF = (temp-mEvalF[23])/delta; + rY[23] = y_save; + } + return partialF; + } + double Dynamicmatsuoka_model_2003FromCellMLGRL1Opt::EvaluateYDerivative24(double var_chaste_interface__environment__time, std::vector& rY) + { + + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -85.95752434460744 + double var_chaste_interface__transient_outward_current_y1_gate__y1 = rY[24]; + // Units: dimensionless; Initial value: 0.0007956883250874798 + + + // Lookup table indexing + const bool _oob_0 = Dynamicmatsuoka_model_2003FromCellMLGRL1Opt_LookupTables::Instance()->CheckIndex0(var_chaste_interface__membrane__Vm); +// LCOV_EXCL_START + if (_oob_0) + EXCEPTION(DumpState("membrane_voltage outside lookup table range", rY , var_chaste_interface__environment__time)); +// LCOV_EXCL_STOP + const double* const _lt_0_row = Dynamicmatsuoka_model_2003FromCellMLGRL1Opt_LookupTables::Instance()->IndexTable0(var_chaste_interface__membrane__Vm); + + // Mathematics + const double d_dt_chaste_interface_var_transient_outward_current_y1_gate__y1 = (1 - var_chaste_interface__transient_outward_current_y1_gate__y1) / (_lt_0_row[35]) - var_chaste_interface__transient_outward_current_y1_gate__y1 / (_lt_0_row[36]); // 1 / millisecond + + return d_dt_chaste_interface_var_transient_outward_current_y1_gate__y1; + } + + double Dynamicmatsuoka_model_2003FromCellMLGRL1Opt::EvaluatePartialDerivative24(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -85.95752434460744 + + + + const double var_x308 = exp(-0.0025000000000000001 * var_chaste_interface__membrane__Vm); + const double var_x401 = 0.002 * var_chaste_interface__membrane__Vm; + const double var_x409 = 0.035714285714285712 * var_chaste_interface__membrane__Vm; + const double var_x421 = exp(var_x401); + const double var_x422 = exp(0.0625 * var_chaste_interface__membrane__Vm); + const double var_x423 = exp(-var_x409); + + partialF = -1 / (11 * var_x423 + 0.20000000000000001 * var_x308) - 1 / (4.4000000000000004 * var_x422 + 0.20000000000000001 * var_x421); + } + else + { + const double y_save = rY[24]; + rY[24] += delta; + const double temp = EvaluateYDerivative24(var_chaste_interface__environment__time, rY); + partialF = (temp-mEvalF[24])/delta; + rY[24] = y_save; + } + return partialF; + } + double Dynamicmatsuoka_model_2003FromCellMLGRL1Opt::EvaluateYDerivative25(double var_chaste_interface__environment__time, std::vector& rY) + { + + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -85.95752434460744 + double var_chaste_interface__transient_outward_current_y2_gate__y2 = rY[25]; + // Units: dimensionless; Initial value: 0.9999125083105881 + + + // Lookup table indexing + const bool _oob_0 = Dynamicmatsuoka_model_2003FromCellMLGRL1Opt_LookupTables::Instance()->CheckIndex0(var_chaste_interface__membrane__Vm); +// LCOV_EXCL_START + if (_oob_0) + EXCEPTION(DumpState("membrane_voltage outside lookup table range", rY , var_chaste_interface__environment__time)); +// LCOV_EXCL_STOP + const double* const _lt_0_row = Dynamicmatsuoka_model_2003FromCellMLGRL1Opt_LookupTables::Instance()->IndexTable0(var_chaste_interface__membrane__Vm); + + // Mathematics + const double d_dt_chaste_interface_var_transient_outward_current_y2_gate__y2 = 0.0038 * (1 - var_chaste_interface__transient_outward_current_y2_gate__y2) * _lt_0_row[38] / (_lt_0_row[37]) - 0.0038 * var_chaste_interface__transient_outward_current_y2_gate__y2 * _lt_0_row[40] / (_lt_0_row[39]); // 1 / millisecond + + return d_dt_chaste_interface_var_transient_outward_current_y2_gate__y2; + } + + double Dynamicmatsuoka_model_2003FromCellMLGRL1Opt::EvaluatePartialDerivative25(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -85.95752434460744 + + + + const double var_x424 = 1.1946902654867255 + 0.088495575221238937 * var_chaste_interface__membrane__Vm; + const double var_x425 = exp(var_x424); + const double var_x426 = 1 + 0.067083000000000004 * var_x425; + const double var_x427 = var_x425 / var_x426; + const double var_x429 = exp(-var_x424); + const double var_x430 = 1 + 0.051334999999999999 * var_x429; + const double var_x431 = var_x429 / var_x430; + + partialF = -0.0038 * var_x427 - 0.0038 * var_x431; + } + else + { + const double y_save = rY[25]; + rY[25] += delta; + const double temp = EvaluateYDerivative25(var_chaste_interface__environment__time, rY); + partialF = (temp-mEvalF[25])/delta; + rY[25] = y_save; + } + return partialF; + } + double Dynamicmatsuoka_model_2003FromCellMLGRL1Opt::EvaluateYDerivative26(double var_chaste_interface__environment__time, std::vector& rY) + { + + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -85.95752434460744 + double var_chaste_interface__internal_ion_concentrations__Nai = rY[1]; + // Units: millimolar; Initial value: 4.925761439682025 + double var_chaste_interface__internal_ion_concentrations__Ca_Total = rY[3]; + // Units: millimolar; Initial value: 0.00040180173572968586 + double var_chaste_interface__sodium_calcium_exchanger_y_gate__y = rY[26]; + // Units: dimensionless; Initial value: 0.9891789193465331 + + + // Lookup table indexing + const bool _oob_0 = Dynamicmatsuoka_model_2003FromCellMLGRL1Opt_LookupTables::Instance()->CheckIndex0(var_chaste_interface__membrane__Vm); +// LCOV_EXCL_START + if (_oob_0) + EXCEPTION(DumpState("membrane_voltage outside lookup table range", rY , var_chaste_interface__environment__time)); +// LCOV_EXCL_STOP + const double* const _lt_0_row = Dynamicmatsuoka_model_2003FromCellMLGRL1Opt_LookupTables::Instance()->IndexTable0(var_chaste_interface__membrane__Vm); + + // Mathematics + const double var_internal_ion_concentrations__Cai = -0.026190000000000001 + 0.5 * sqrt(pow((0.052380000000000003 - var_chaste_interface__internal_ion_concentrations__Ca_Total), 2) + 0.0095200000000000007 * var_chaste_interface__internal_ion_concentrations__Ca_Total) + 0.5 * var_chaste_interface__internal_ion_concentrations__Ca_Total; // millimolar + const double var_sodium_calcium_exchanger__k1 = _lt_0_row[26]; // per_millisecond + const double var_sodium_calcium_exchanger__k2 = _lt_0_row[27]; // per_millisecond + const double var_sodium_calcium_exchanger__p_E1Na = 1 / (1 + 669.921875 * (1 + 724.63768115942037 * var_internal_ion_concentrations__Cai) / pow(var_chaste_interface__internal_ion_concentrations__Nai, 3)); // dimensionless + const double var_sodium_calcium_exchanger__p_E2Na = 1 / (1 + 669921.875 * (1 + 0.7246376811594204 * mParameters[5]) / pow(mParameters[7], 3)); // dimensionless + const double d_dt_chaste_interface_var_sodium_calcium_exchanger_y_gate__y = (1 - var_chaste_interface__sodium_calcium_exchanger_y_gate__y) * (1 / (1 + 1.3799999999999999 * (1 + 1.4927113702623908e-6 * pow(mParameters[7], 3)) / mParameters[5]) + var_sodium_calcium_exchanger__k2 * var_sodium_calcium_exchanger__p_E2Na) - (1 / (1 + 0.0013799999999999999 * (1 + 0.0014927113702623907 * pow(var_chaste_interface__internal_ion_concentrations__Nai, 3)) / var_internal_ion_concentrations__Cai) + var_sodium_calcium_exchanger__k1 * var_sodium_calcium_exchanger__p_E1Na) * var_chaste_interface__sodium_calcium_exchanger_y_gate__y; // 1 / millisecond + + return d_dt_chaste_interface_var_sodium_calcium_exchanger_y_gate__y; + } + + double Dynamicmatsuoka_model_2003FromCellMLGRL1Opt::EvaluatePartialDerivative26(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -85.95752434460744 + double var_chaste_interface__internal_ion_concentrations__Nai = rY[1]; + // Units: millimolar; Initial value: 4.925761439682025 + double var_chaste_interface__internal_ion_concentrations__Ca_Total = rY[3]; + // Units: millimolar; Initial value: 0.00040180173572968586 + + + // Lookup table indexing + const bool _oob_0 = Dynamicmatsuoka_model_2003FromCellMLGRL1Opt_LookupTables::Instance()->CheckIndex0(var_chaste_interface__membrane__Vm); +// LCOV_EXCL_START + if (_oob_0) + EXCEPTION(DumpState("membrane_voltage outside lookup table range", rY , var_chaste_interface__environment__time)); +// LCOV_EXCL_STOP + const double* const _lt_0_row = Dynamicmatsuoka_model_2003FromCellMLGRL1Opt_LookupTables::Instance()->IndexTable0(var_chaste_interface__membrane__Vm); + + const double var_x17 = -0.052380000000000003 + var_chaste_interface__internal_ion_concentrations__Ca_Total; + const double var_x18 = sqrt(pow(var_x17, 2) + 0.0095200000000000007 * var_chaste_interface__internal_ion_concentrations__Ca_Total); + const double var_x34 = pow(var_chaste_interface__internal_ion_concentrations__Nai, 3); + const double var_x35 = 1 / var_x34; + const double var_x36 = -17.978260869565219 + 362.31884057971018 * var_x18 + 362.31884057971018 * var_chaste_interface__internal_ion_concentrations__Ca_Total; + const double var_x37 = var_x35 * var_x36; + const double var_x38 = _lt_0_row[5]; + const double var_x39 = var_x38 / (1 + 669.921875 * var_x37); + const double var_x41 = pow(mParameters[7], 3); + const double var_x42 = _lt_0_row[6] / (1 + 669921.875 * (1 + 0.7246376811594204 * mParameters[5]) / var_x41); + const double var_x249 = var_x39 + var_x42; + const double var_x285 = -0.026190000000000001 + 0.5 * var_x18 + 0.5 * var_chaste_interface__internal_ion_concentrations__Ca_Total; + const double var_x286 = 1 / var_x285; + const double var_x432 = 1 + 0.0014927113702623907 * var_x34; + const double var_x433 = 1 + 0.0013799999999999999 * var_x286 * var_x432; + + partialF = -var_x249 - 1 / var_x433 - 1 / (1 + 1.3799999999999999 * (1 + 1.4927113702623908e-6 * var_x41) / mParameters[5]); + } + else + { + const double y_save = rY[26]; + rY[26] += delta; + const double temp = EvaluateYDerivative26(var_chaste_interface__environment__time, rY); + partialF = (temp-mEvalF[26])/delta; + rY[26] = y_save; + } + return partialF; + } + double Dynamicmatsuoka_model_2003FromCellMLGRL1Opt::EvaluateYDerivative27(double var_chaste_interface__environment__time, std::vector& rY) + { + + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -85.95752434460744 + double var_chaste_interface__internal_ion_concentrations__Nai = rY[1]; + // Units: millimolar; Initial value: 4.925761439682025 + double var_chaste_interface__internal_ion_concentrations__Ki = rY[2]; + // Units: millimolar; Initial value: 143.1837333000449 + double var_chaste_interface__ATP_production__ATPi = rY[4]; + // Units: millimolar; Initial value: 4.657102729020499 + double var_chaste_interface__sodium_potassium_pump_y_gate__y = rY[27]; + // Units: dimensionless; Initial value: 0.5910747147428818 + + + // Lookup table indexing + const bool _oob_0 = Dynamicmatsuoka_model_2003FromCellMLGRL1Opt_LookupTables::Instance()->CheckIndex0(var_chaste_interface__membrane__Vm); +// LCOV_EXCL_START + if (_oob_0) + EXCEPTION(DumpState("membrane_voltage outside lookup table range", rY , var_chaste_interface__environment__time)); +// LCOV_EXCL_STOP + const double* const _lt_0_row = Dynamicmatsuoka_model_2003FromCellMLGRL1Opt_LookupTables::Instance()->IndexTable0(var_chaste_interface__membrane__Vm); + + // Mathematics + const double var_sodium_potassium_pump__Nao_Eff = mParameters[7] * _lt_0_row[4]; // millimolar + const double var_sodium_potassium_pump__k1 = 0.37 / (1 + 0.094 / var_chaste_interface__ATP_production__ATPi); // per_millisecond + const double var_sodium_potassium_pump__p_E1Na = 1 / (1 + 4.4045579125871104 * pow((1 / var_chaste_interface__internal_ion_concentrations__Nai), 1.0600000000000001) * (1 + 0.020000293738509214 * pow(var_chaste_interface__internal_ion_concentrations__Ki, 1.1200000000000001))); // dimensionless + const double var_sodium_potassium_pump__p_E2Na = 1 / (1 + 90.050628437051003 * pow((1 / var_sodium_potassium_pump__Nao_Eff), 1.0600000000000001) * (1 + 4.560221410801109 * pow(mParameters[6], 1.1200000000000001))); // dimensionless + const double d_dt_chaste_interface_var_sodium_potassium_pump_y_gate__y = (1 - var_chaste_interface__sodium_potassium_pump_y_gate__y) * (0.040000000000000001 * var_sodium_potassium_pump__p_E2Na + 0.16500000000000001 / (1 + 0.21928759810465578 * pow((1 / mParameters[6]), 1.1200000000000001) * (1 + 0.011104864200909382 * pow(var_sodium_potassium_pump__Nao_Eff, 1.0600000000000001)))) - (0.01 / (1 + 49.999265664512095 * pow((1 / var_chaste_interface__internal_ion_concentrations__Ki), 1.1200000000000001) * (1 + 0.22703754152993499 * pow(var_chaste_interface__internal_ion_concentrations__Nai, 1.0600000000000001))) + var_sodium_potassium_pump__k1 * var_sodium_potassium_pump__p_E1Na) * var_chaste_interface__sodium_potassium_pump_y_gate__y; // 1 / millisecond + + return d_dt_chaste_interface_var_sodium_potassium_pump_y_gate__y; + } + + double Dynamicmatsuoka_model_2003FromCellMLGRL1Opt::EvaluatePartialDerivative27(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -85.95752434460744 + double var_chaste_interface__internal_ion_concentrations__Nai = rY[1]; + // Units: millimolar; Initial value: 4.925761439682025 + double var_chaste_interface__internal_ion_concentrations__Ki = rY[2]; + // Units: millimolar; Initial value: 143.1837333000449 + double var_chaste_interface__ATP_production__ATPi = rY[4]; + // Units: millimolar; Initial value: 4.657102729020499 + + + // Lookup table indexing + const bool _oob_0 = Dynamicmatsuoka_model_2003FromCellMLGRL1Opt_LookupTables::Instance()->CheckIndex0(var_chaste_interface__membrane__Vm); +// LCOV_EXCL_START + if (_oob_0) + EXCEPTION(DumpState("membrane_voltage outside lookup table range", rY , var_chaste_interface__environment__time)); +// LCOV_EXCL_STOP + const double* const _lt_0_row = Dynamicmatsuoka_model_2003FromCellMLGRL1Opt_LookupTables::Instance()->IndexTable0(var_chaste_interface__membrane__Vm); + + const double var_x64 = _lt_0_row[4]; + const double var_x65 = pow((1 / (var_x64 * mParameters[7])), 1.0600000000000001); + const double var_x66 = 1 + 4.560221410801109 * pow(mParameters[6], 1.1200000000000001); + const double var_x67 = var_x65 * var_x66; + const double var_x76 = 1 / var_chaste_interface__internal_ion_concentrations__Ki; + const double var_x163 = 1 / var_chaste_interface__internal_ion_concentrations__Nai; + const double var_x164 = pow(var_x163, 1.0600000000000001); + const double var_x165 = var_x164 * (1 + 0.020000293738509214 * pow(var_chaste_interface__internal_ion_concentrations__Ki, 1.1200000000000001)); + const double var_x166 = 1 / var_chaste_interface__ATP_production__ATPi; + const double var_x167 = 1 + 0.094 * var_x166; + const double var_x168 = 1 / var_x167; + const double var_x210 = 1 / (1 + 4.4045579125871104 * var_x165); + const double var_x250 = 1 / (1 + 90.050628437051003 * var_x67); + const double var_x251 = var_x168 * var_x210; + const double var_x435 = pow((1 / mParameters[6]), 1.1200000000000001); + const double var_x436 = pow((var_x64 * mParameters[7]), 1.0600000000000001); + const double var_x437 = 1 + 0.21928759810465578 * var_x435 * (1 + 0.011104864200909382 * var_x436); + const double var_x438 = pow(var_x76, 1.1200000000000001); + const double var_x439 = var_x438 * (1 + 0.22703754152993499 * pow(var_chaste_interface__internal_ion_concentrations__Nai, 1.0600000000000001)); + + partialF = -0.37 * var_x251 - 0.01 / (1 + 49.999265664512095 * var_x439) - 0.040000000000000001 * var_x250 - 0.16500000000000001 / var_x437; + } + else + { + const double y_save = rY[27]; + rY[27] += delta; + const double temp = EvaluateYDerivative27(var_chaste_interface__environment__time, rY); + partialF = (temp-mEvalF[27])/delta; + rY[27] = y_save; + } + return partialF; + } + double Dynamicmatsuoka_model_2003FromCellMLGRL1Opt::EvaluateYDerivative28(double var_chaste_interface__environment__time, std::vector& rY) + { + + double var_chaste_interface__internal_ion_concentrations__Ca_Total = rY[3]; + // Units: millimolar; Initial value: 0.00040180173572968586 + double var_chaste_interface__ATP_production__ATPi = rY[4]; + // Units: millimolar; Initial value: 4.657102729020499 + double var_chaste_interface__SR_calcium_pump_y_gate__y = rY[28]; + // Units: dimensionless; Initial value: 0.46108441538480216 + double var_chaste_interface__Ca_concentrations_in_SR__Caup = rY[32]; + // Units: millimolar; Initial value: 2.611712901567567 + + + + // Mathematics + const double var_SR_calcium_pump__k2 = 1 / (1 + 0.10000000000000001 / var_chaste_interface__ATP_production__ATPi); // per_millisecond + const double var_SR_calcium_pump__p_E1Ca = 1 / (1 + 0.080000000000000002 / var_chaste_interface__Ca_concentrations_in_SR__Caup); // dimensionless + const double var_internal_ion_concentrations__Cai = -0.026190000000000001 + 0.5 * sqrt(pow((0.052380000000000003 - var_chaste_interface__internal_ion_concentrations__Ca_Total), 2) + 0.0095200000000000007 * var_chaste_interface__internal_ion_concentrations__Ca_Total) + 0.5 * var_chaste_interface__internal_ion_concentrations__Ca_Total; // millimolar + const double var_SR_calcium_pump__p_E2Ca = 1 / (1 + 0.00080000000000000004 / var_internal_ion_concentrations__Cai); // dimensionless + const double d_dt_chaste_interface_var_SR_calcium_pump_y_gate__y = (1 - var_chaste_interface__SR_calcium_pump_y_gate__y) * (0.01 - 0.01 * var_SR_calcium_pump__p_E2Ca + var_SR_calcium_pump__k2 * var_SR_calcium_pump__p_E2Ca) - (1 - 0.98999999999999999 * var_SR_calcium_pump__p_E1Ca) * var_chaste_interface__SR_calcium_pump_y_gate__y; // 1 / millisecond + + return d_dt_chaste_interface_var_SR_calcium_pump_y_gate__y; + } + + double Dynamicmatsuoka_model_2003FromCellMLGRL1Opt::EvaluatePartialDerivative28(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__internal_ion_concentrations__Ca_Total = rY[3]; + // Units: millimolar; Initial value: 0.00040180173572968586 + double var_chaste_interface__ATP_production__ATPi = rY[4]; + // Units: millimolar; Initial value: 4.657102729020499 + double var_chaste_interface__Ca_concentrations_in_SR__Caup = rY[32]; + // Units: millimolar; Initial value: 2.611712901567567 + + + + const double var_x17 = -0.052380000000000003 + var_chaste_interface__internal_ion_concentrations__Ca_Total; + const double var_x18 = sqrt(pow(var_x17, 2) + 0.0095200000000000007 * var_chaste_interface__internal_ion_concentrations__Ca_Total); + const double var_x166 = 1 / var_chaste_interface__ATP_production__ATPi; + const double var_x283 = 1 + 0.10000000000000001 * var_x166; + const double var_x284 = 1 / var_x283; + const double var_x285 = -0.026190000000000001 + 0.5 * var_x18 + 0.5 * var_chaste_interface__internal_ion_concentrations__Ca_Total; + const double var_x286 = 1 / var_x285; + const double var_x287 = 1 + 0.00080000000000000004 * var_x286; + const double var_x293 = 1 / var_x287; + const double var_x298 = 1 + 0.080000000000000002 / var_chaste_interface__Ca_concentrations_in_SR__Caup; + const double var_x299 = 1 / var_x298; + const double var_x300 = var_x284 * var_x293; + + partialF = -1.01 + 0.01 * var_x293 + 0.98999999999999999 * var_x299 - var_x300; + } + else + { + const double y_save = rY[28]; + rY[28] += delta; + const double temp = EvaluateYDerivative28(var_chaste_interface__environment__time, rY); + partialF = (temp-mEvalF[28])/delta; + rY[28] = y_save; + } + return partialF; + } + double Dynamicmatsuoka_model_2003FromCellMLGRL1Opt::EvaluateYDerivative29(double var_chaste_interface__environment__time, std::vector& rY) + { + + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -85.95752434460744 + double var_chaste_interface__internal_ion_concentrations__Ca_Total = rY[3]; + // Units: millimolar; Initial value: 0.00040180173572968586 + double var_chaste_interface__ATP_production__ATPi = rY[4]; + // Units: millimolar; Initial value: 4.657102729020499 + double var_chaste_interface__L_type_Ca_channel_voltage_dependent_gate__p_AP_CaL = rY[9]; + // Units: dimensionless; Initial value: 1.5445004166497696e-06 + double var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_U = rY[12]; + // Units: dimensionless; Initial value: 0.17246483915629204 + double var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_UCa = rY[13]; + // Units: dimensionless; Initial value: 6.098246017787626e-05 + double var_chaste_interface__L_type_Ca_channel_ultra_slow_gate__y = rY[15]; + // Units: dimensionless; Initial value: 0.9985266538252986 + double var_chaste_interface__RyR_channel__p_open_RyR = rY[29]; + // Units: dimensionless; Initial value: 0.00034314360001543243 + double var_chaste_interface__RyR_channel__p_close_RyR = rY[30]; + // Units: dimensionless; Initial value: 0.19135178123107768 + double var_chaste_interface__Ca_concentrations_in_SR__Ca_Total = rY[31]; + // Units: millimolar; Initial value: 9.455741736977666 + + + // Lookup table indexing + const bool _oob_0 = Dynamicmatsuoka_model_2003FromCellMLGRL1Opt_LookupTables::Instance()->CheckIndex0(var_chaste_interface__membrane__Vm); +// LCOV_EXCL_START + if (_oob_0) + EXCEPTION(DumpState("membrane_voltage outside lookup table range", rY , var_chaste_interface__environment__time)); +// LCOV_EXCL_STOP + const double* const _lt_0_row = Dynamicmatsuoka_model_2003FromCellMLGRL1Opt_LookupTables::Instance()->IndexTable0(var_chaste_interface__membrane__Vm); + + // Mathematics + const double var_Ca_concentrations_in_SR__Carel = -5.4000000000000004 + 0.5 * var_chaste_interface__Ca_concentrations_in_SR__Ca_Total + 5.4000000000000004 * sqrt(pow((1 - 0.092592592592592587 * var_chaste_interface__Ca_concentrations_in_SR__Ca_Total), 2) + 0.027434842249657067 * var_chaste_interface__Ca_concentrations_in_SR__Ca_Total); // millimolar + const double var_L_type_Ca_channel__p_open_CaL = (var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_U + var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_UCa) * var_chaste_interface__L_type_Ca_channel_ultra_slow_gate__y * var_chaste_interface__L_type_Ca_channel_voltage_dependent_gate__p_AP_CaL / (1 + 2.7439999999999993 / pow(var_chaste_interface__ATP_production__ATPi, 3)); // dimensionless + const double var_internal_ion_concentrations__Cai = -0.026190000000000001 + 0.5 * sqrt(pow((0.052380000000000003 - var_chaste_interface__internal_ion_concentrations__Ca_Total), 2) + 0.0095200000000000007 * var_chaste_interface__internal_ion_concentrations__Ca_Total) + 0.5 * var_chaste_interface__internal_ion_concentrations__Ca_Total; // millimolar + const double var_constant_field_equations__CF_Ca = ((var_chaste_interface__membrane__Vm == 0) ? (-mParameters[5]) : (0.074870384603595908 * (-mParameters[5] * _lt_0_row[0] + var_internal_ion_concentrations__Cai) * var_chaste_interface__membrane__Vm / (_lt_0_row[1]))); // millimolar + const double var_L_type_Ca_channel_Ca_dependent_gate__iCaL = 0.067599999999999993 * var_constant_field_equations__CF_Ca; // picoA + const double var_RyR_channel__k1 = 280000 * pow(var_internal_ion_concentrations__Cai, 2) / pow(mParameters[2], 2) - 150 * var_L_type_Ca_channel__p_open_CaL * var_L_type_Ca_channel_Ca_dependent_gate__iCaL; // per_millisecond + const double d_dt_chaste_interface_var_RyR_channel__p_open_RyR = var_RyR_channel__k1 * var_chaste_interface__RyR_channel__p_close_RyR - 0.080000000000000002 * var_chaste_interface__RyR_channel__p_open_RyR / (1 + 0.35999999999999999 / var_Ca_concentrations_in_SR__Carel); // 1 / millisecond + + return d_dt_chaste_interface_var_RyR_channel__p_open_RyR; + } + + double Dynamicmatsuoka_model_2003FromCellMLGRL1Opt::EvaluatePartialDerivative29(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__Ca_concentrations_in_SR__Ca_Total = rY[31]; + // Units: millimolar; Initial value: 9.455741736977666 + + + + const double var_x301 = -1 + 0.092592592592592587 * var_chaste_interface__Ca_concentrations_in_SR__Ca_Total; + const double var_x302 = sqrt(pow(var_x301, 2) + 0.027434842249657067 * var_chaste_interface__Ca_concentrations_in_SR__Ca_Total); + const double var_x453 = 1 + 0.35999999999999999 / (-5.4000000000000004 + 0.5 * var_chaste_interface__Ca_concentrations_in_SR__Ca_Total + 5.4000000000000004 * var_x302); + + partialF = -0.080000000000000002 / var_x453; + } + else + { + const double y_save = rY[29]; + rY[29] += delta; + const double temp = EvaluateYDerivative29(var_chaste_interface__environment__time, rY); + partialF = (temp-mEvalF[29])/delta; + rY[29] = y_save; + } + return partialF; + } + double Dynamicmatsuoka_model_2003FromCellMLGRL1Opt::EvaluateYDerivative30(double var_chaste_interface__environment__time, std::vector& rY) + { + + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -85.95752434460744 + double var_chaste_interface__internal_ion_concentrations__Ca_Total = rY[3]; + // Units: millimolar; Initial value: 0.00040180173572968586 + double var_chaste_interface__ATP_production__ATPi = rY[4]; + // Units: millimolar; Initial value: 4.657102729020499 + double var_chaste_interface__L_type_Ca_channel_voltage_dependent_gate__p_AP_CaL = rY[9]; + // Units: dimensionless; Initial value: 1.5445004166497696e-06 + double var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_U = rY[12]; + // Units: dimensionless; Initial value: 0.17246483915629204 + double var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_UCa = rY[13]; + // Units: dimensionless; Initial value: 6.098246017787626e-05 + double var_chaste_interface__L_type_Ca_channel_ultra_slow_gate__y = rY[15]; + // Units: dimensionless; Initial value: 0.9985266538252986 + double var_chaste_interface__RyR_channel__p_open_RyR = rY[29]; + // Units: dimensionless; Initial value: 0.00034314360001543243 + double var_chaste_interface__RyR_channel__p_close_RyR = rY[30]; + // Units: dimensionless; Initial value: 0.19135178123107768 + double var_chaste_interface__Ca_concentrations_in_SR__Ca_Total = rY[31]; + // Units: millimolar; Initial value: 9.455741736977666 + + + // Lookup table indexing + const bool _oob_0 = Dynamicmatsuoka_model_2003FromCellMLGRL1Opt_LookupTables::Instance()->CheckIndex0(var_chaste_interface__membrane__Vm); +// LCOV_EXCL_START + if (_oob_0) + EXCEPTION(DumpState("membrane_voltage outside lookup table range", rY , var_chaste_interface__environment__time)); +// LCOV_EXCL_STOP + const double* const _lt_0_row = Dynamicmatsuoka_model_2003FromCellMLGRL1Opt_LookupTables::Instance()->IndexTable0(var_chaste_interface__membrane__Vm); + + // Mathematics + const double var_Ca_concentrations_in_SR__Carel = -5.4000000000000004 + 0.5 * var_chaste_interface__Ca_concentrations_in_SR__Ca_Total + 5.4000000000000004 * sqrt(pow((1 - 0.092592592592592587 * var_chaste_interface__Ca_concentrations_in_SR__Ca_Total), 2) + 0.027434842249657067 * var_chaste_interface__Ca_concentrations_in_SR__Ca_Total); // millimolar + const double var_L_type_Ca_channel__p_open_CaL = (var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_U + var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_UCa) * var_chaste_interface__L_type_Ca_channel_ultra_slow_gate__y * var_chaste_interface__L_type_Ca_channel_voltage_dependent_gate__p_AP_CaL / (1 + 2.7439999999999993 / pow(var_chaste_interface__ATP_production__ATPi, 3)); // dimensionless + const double var_internal_ion_concentrations__Cai = -0.026190000000000001 + 0.5 * sqrt(pow((0.052380000000000003 - var_chaste_interface__internal_ion_concentrations__Ca_Total), 2) + 0.0095200000000000007 * var_chaste_interface__internal_ion_concentrations__Ca_Total) + 0.5 * var_chaste_interface__internal_ion_concentrations__Ca_Total; // millimolar + const double var_constant_field_equations__CF_Ca = ((var_chaste_interface__membrane__Vm == 0) ? (-mParameters[5]) : (0.074870384603595908 * (-mParameters[5] * _lt_0_row[0] + var_internal_ion_concentrations__Cai) * var_chaste_interface__membrane__Vm / (_lt_0_row[1]))); // millimolar + const double var_L_type_Ca_channel_Ca_dependent_gate__iCaL = 0.067599999999999993 * var_constant_field_equations__CF_Ca; // picoA + const double var_RyR_channel__k1 = 280000 * pow(var_internal_ion_concentrations__Cai, 2) / pow(mParameters[2], 2) - 150 * var_L_type_Ca_channel__p_open_CaL * var_L_type_Ca_channel_Ca_dependent_gate__iCaL; // per_millisecond + const double d_dt_chaste_interface_var_RyR_channel__p_close_RyR = -(0.00084900000000000004 + var_RyR_channel__k1) * var_chaste_interface__RyR_channel__p_close_RyR + 0.000377 * pow(var_Ca_concentrations_in_SR__Carel, 2) * (1 - var_chaste_interface__RyR_channel__p_close_RyR - var_chaste_interface__RyR_channel__p_open_RyR); // 1 / millisecond + + return d_dt_chaste_interface_var_RyR_channel__p_close_RyR; + } + + double Dynamicmatsuoka_model_2003FromCellMLGRL1Opt::EvaluatePartialDerivative30(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -85.95752434460744 + double var_chaste_interface__internal_ion_concentrations__Ca_Total = rY[3]; + // Units: millimolar; Initial value: 0.00040180173572968586 + double var_chaste_interface__ATP_production__ATPi = rY[4]; + // Units: millimolar; Initial value: 4.657102729020499 + double var_chaste_interface__L_type_Ca_channel_voltage_dependent_gate__p_AP_CaL = rY[9]; + // Units: dimensionless; Initial value: 1.5445004166497696e-06 + double var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_U = rY[12]; + // Units: dimensionless; Initial value: 0.17246483915629204 + double var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_UCa = rY[13]; + // Units: dimensionless; Initial value: 6.098246017787626e-05 + double var_chaste_interface__L_type_Ca_channel_ultra_slow_gate__y = rY[15]; + // Units: dimensionless; Initial value: 0.9985266538252986 + double var_chaste_interface__Ca_concentrations_in_SR__Ca_Total = rY[31]; + // Units: millimolar; Initial value: 9.455741736977666 + + + + const double var_x1 = var_chaste_interface__membrane__Vm == 0; + const double var_x13 = 0.074870384603595908 * var_chaste_interface__membrane__Vm; + const double var_x14 = exp(-var_x13); + const double var_x15 = 1 - var_x14; + const double var_x16 = 1 / var_x15; + const double var_x17 = -0.052380000000000003 + var_chaste_interface__internal_ion_concentrations__Ca_Total; + const double var_x18 = sqrt(pow(var_x17, 2) + 0.0095200000000000007 * var_chaste_interface__internal_ion_concentrations__Ca_Total); + const double var_x19 = var_x14 * mParameters[5]; + const double var_x20 = -0.026190000000000001 - var_x19 + 0.5 * var_x18 + 0.5 * var_chaste_interface__internal_ion_concentrations__Ca_Total; + const double var_x21 = var_x16 * var_x20; + const double var_x27 = var_x17 + var_x18; + const double var_x117 = var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_U + var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_UCa; + const double var_x118 = pow(var_chaste_interface__ATP_production__ATPi, (-3)); + const double var_x119 = 1 / (1 + 2.7439999999999993 * var_x118); + const double var_x214 = ((var_x1) ? (-mParameters[5]) : (var_x13 * var_x21)); + const double var_x215 = var_x117 * var_x214; + const double var_x232 = var_x119 * var_chaste_interface__L_type_Ca_channel_voltage_dependent_gate__p_AP_CaL; + const double var_x288 = pow(var_x27, 2); + const double var_x301 = -1 + 0.092592592592592587 * var_chaste_interface__Ca_concentrations_in_SR__Ca_Total; + const double var_x302 = sqrt(pow(var_x301, 2) + 0.027434842249657067 * var_chaste_interface__Ca_concentrations_in_SR__Ca_Total); + const double var_x441 = 10.139999999999999 * var_chaste_interface__L_type_Ca_channel_ultra_slow_gate__y; + const double var_x444 = pow(mParameters[2], (-2)); + const double var_x445 = var_x232 * var_x441; + const double var_x454 = 70000 * var_x288 * var_x444; + const double var_x455 = var_x215 * var_x445; + const double var_x456 = var_x301 + var_x302; + const double var_x457 = pow(var_x456, 2); + const double var_x458 = 0.010993320000000001 * var_x457; + + partialF = -0.00084900000000000004 + var_x455 - var_x454 - var_x458; + } + else + { + const double y_save = rY[30]; + rY[30] += delta; + const double temp = EvaluateYDerivative30(var_chaste_interface__environment__time, rY); + partialF = (temp-mEvalF[30])/delta; + rY[30] = y_save; + } + return partialF; + } + double Dynamicmatsuoka_model_2003FromCellMLGRL1Opt::EvaluateYDerivative31(double var_chaste_interface__environment__time, std::vector& rY) + { + + double var_chaste_interface__internal_ion_concentrations__Ca_Total = rY[3]; + // Units: millimolar; Initial value: 0.00040180173572968586 + double var_chaste_interface__RyR_channel__p_open_RyR = rY[29]; + // Units: dimensionless; Initial value: 0.00034314360001543243 + double var_chaste_interface__Ca_concentrations_in_SR__Ca_Total = rY[31]; + // Units: millimolar; Initial value: 9.455741736977666 + double var_chaste_interface__Ca_concentrations_in_SR__Caup = rY[32]; + // Units: millimolar; Initial value: 2.611712901567567 + + + + // Mathematics + const double var_Ca_concentrations_in_SR__Carel = -5.4000000000000004 + 0.5 * var_chaste_interface__Ca_concentrations_in_SR__Ca_Total + 5.4000000000000004 * sqrt(pow((1 - 0.092592592592592587 * var_chaste_interface__Ca_concentrations_in_SR__Ca_Total), 2) + 0.027434842249657067 * var_chaste_interface__Ca_concentrations_in_SR__Ca_Total); // millimolar + const double var_SR_T_current__i_SR_T = 386 * var_chaste_interface__Ca_concentrations_in_SR__Caup - 386 * var_Ca_concentrations_in_SR__Carel; // picoA + const double var_internal_ion_concentrations__Cai = -0.026190000000000001 + 0.5 * sqrt(pow((0.052380000000000003 - var_chaste_interface__internal_ion_concentrations__Ca_Total), 2) + 0.0095200000000000007 * var_chaste_interface__internal_ion_concentrations__Ca_Total) + 0.5 * var_chaste_interface__internal_ion_concentrations__Ca_Total; // millimolar + const double var_RyR_channel__i_RyR = (-var_internal_ion_concentrations__Cai + var_Ca_concentrations_in_SR__Carel) * mParameters[1] * var_chaste_interface__RyR_channel__p_open_RyR; // picoA + const double d_dt_chaste_interface_var_Ca_concentrations_in_SR__Ca_Total = 3.2387883511406234e-5 * var_SR_T_current__i_SR_T - 3.2387883511406234e-5 * var_RyR_channel__i_RyR; // millimolar / millisecond + + return d_dt_chaste_interface_var_Ca_concentrations_in_SR__Ca_Total; + } + + double Dynamicmatsuoka_model_2003FromCellMLGRL1Opt::EvaluatePartialDerivative31(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__RyR_channel__p_open_RyR = rY[29]; + // Units: dimensionless; Initial value: 0.00034314360001543243 + double var_chaste_interface__Ca_concentrations_in_SR__Ca_Total = rY[31]; + // Units: millimolar; Initial value: 9.455741736977666 + + + + const double var_x301 = -1 + 0.092592592592592587 * var_chaste_interface__Ca_concentrations_in_SR__Ca_Total; + const double var_x302 = sqrt(pow(var_x301, 2) + 0.027434842249657067 * var_chaste_interface__Ca_concentrations_in_SR__Ca_Total); + const double var_x303 = (-0.078875171467764058 + 0.0085733882030178329 * var_chaste_interface__Ca_concentrations_in_SR__Ca_Total) / var_x302; + + partialF = -0.0062508615177014034 - 0.067509304391175154 * var_x303 + (-1.6193941755703117e-5 - 0.00017489457096159366 * var_x303) * mParameters[1] * var_chaste_interface__RyR_channel__p_open_RyR; + } + else + { + const double y_save = rY[31]; + rY[31] += delta; + const double temp = EvaluateYDerivative31(var_chaste_interface__environment__time, rY); + partialF = (temp-mEvalF[31])/delta; + rY[31] = y_save; + } + return partialF; + } + double Dynamicmatsuoka_model_2003FromCellMLGRL1Opt::EvaluateYDerivative32(double var_chaste_interface__environment__time, std::vector& rY) + { + + double var_chaste_interface__internal_ion_concentrations__Ca_Total = rY[3]; + // Units: millimolar; Initial value: 0.00040180173572968586 + double var_chaste_interface__ATP_production__ATPi = rY[4]; + // Units: millimolar; Initial value: 4.657102729020499 + double var_chaste_interface__SR_calcium_pump_y_gate__y = rY[28]; + // Units: dimensionless; Initial value: 0.46108441538480216 + double var_chaste_interface__Ca_concentrations_in_SR__Ca_Total = rY[31]; + // Units: millimolar; Initial value: 9.455741736977666 + double var_chaste_interface__Ca_concentrations_in_SR__Caup = rY[32]; + // Units: millimolar; Initial value: 2.611712901567567 + + + + // Mathematics + const double var_Ca_concentrations_in_SR__Carel = -5.4000000000000004 + 0.5 * var_chaste_interface__Ca_concentrations_in_SR__Ca_Total + 5.4000000000000004 * sqrt(pow((1 - 0.092592592592592587 * var_chaste_interface__Ca_concentrations_in_SR__Ca_Total), 2) + 0.027434842249657067 * var_chaste_interface__Ca_concentrations_in_SR__Ca_Total); // millimolar + const double var_SR_T_current__i_SR_T = 386 * var_chaste_interface__Ca_concentrations_in_SR__Caup - 386 * var_Ca_concentrations_in_SR__Carel; // picoA + const double var_SR_calcium_pump__k2 = 1 / (1 + 0.10000000000000001 / var_chaste_interface__ATP_production__ATPi); // per_millisecond + const double var_SR_calcium_pump__p_E1Ca = 1 / (1 + 0.080000000000000002 / var_chaste_interface__Ca_concentrations_in_SR__Caup); // dimensionless + const double var_internal_ion_concentrations__Cai = -0.026190000000000001 + 0.5 * sqrt(pow((0.052380000000000003 - var_chaste_interface__internal_ion_concentrations__Ca_Total), 2) + 0.0095200000000000007 * var_chaste_interface__internal_ion_concentrations__Ca_Total) + 0.5 * var_chaste_interface__internal_ion_concentrations__Ca_Total; // millimolar + const double var_SR_L_current__i_SR_L = (-var_internal_ion_concentrations__Cai + var_chaste_interface__Ca_concentrations_in_SR__Caup) * mParameters[0]; // picoA + const double var_SR_calcium_pump__p_E2Ca = 1 / (1 + 0.00080000000000000004 / var_internal_ion_concentrations__Cai); // dimensionless + const double var_SR_calcium_pump__i_SR_U = (0.01 * var_SR_calcium_pump__p_E1Ca * var_chaste_interface__SR_calcium_pump_y_gate__y - (1 - var_chaste_interface__SR_calcium_pump_y_gate__y) * var_SR_calcium_pump__k2 * var_SR_calcium_pump__p_E2Ca) * mParameters[3]; // picoA + const double d_dt_chaste_interface_var_Ca_concentrations_in_SR__Caup = -1.2955153404562494e-5 * var_SR_L_current__i_SR_L - 1.2955153404562494e-5 * var_SR_T_current__i_SR_T - 1.2955153404562494e-5 * var_SR_calcium_pump__i_SR_U; // millimolar / millisecond + + return d_dt_chaste_interface_var_Ca_concentrations_in_SR__Caup; + } + + double Dynamicmatsuoka_model_2003FromCellMLGRL1Opt::EvaluatePartialDerivative32(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__SR_calcium_pump_y_gate__y = rY[28]; + // Units: dimensionless; Initial value: 0.46108441538480216 + double var_chaste_interface__Ca_concentrations_in_SR__Caup = rY[32]; + // Units: millimolar; Initial value: 2.611712901567567 + + + + const double var_x298 = 1 + 0.080000000000000002 / var_chaste_interface__Ca_concentrations_in_SR__Caup; + const double var_x304 = var_chaste_interface__SR_calcium_pump_y_gate__y / (pow(var_x298, 2) * pow(var_chaste_interface__Ca_concentrations_in_SR__Caup, 2)); + const double var_x305 = var_x304 * mParameters[3]; + + partialF = -0.0050006892141611229 - 1.2955153404562494e-5 * mParameters[0] - 1.0364122723649996e-8 * var_x305; + } + else + { + const double y_save = rY[32]; + rY[32] += delta; + const double temp = EvaluateYDerivative32(var_chaste_interface__environment__time, rY); + partialF = (temp-mEvalF[32])/delta; + rY[32] = y_save; + } + return partialF; + } + double Dynamicmatsuoka_model_2003FromCellMLGRL1Opt::EvaluateYDerivative33(double var_chaste_interface__environment__time, std::vector& rY) + { + + double var_chaste_interface__internal_ion_concentrations__Ca_Total = rY[3]; + // Units: millimolar; Initial value: 0.00040180173572968586 + double var_chaste_interface__NL_model__pCa = rY[33]; + // Units: dimensionless; Initial value: 0.02490898775497523 + double var_chaste_interface__NL_model__pCaCB = rY[34]; + // Units: dimensionless; Initial value: 0.001990153835322864 + double var_chaste_interface__NL_model__pCB = rY[35]; + // Units: dimensionless; Initial value: 0.00042941813853474524 + + + + // Mathematics + const double var_NL_model__Q_a = -0.0038999999999999998 * var_chaste_interface__NL_model__pCaCB + 0.0038999999999999998 * var_chaste_interface__NL_model__pCa * exp(-0.86212130841993795); // per_millisecond + const double var_internal_ion_concentrations__Cai = -0.026190000000000001 + 0.5 * sqrt(pow((0.052380000000000003 - var_chaste_interface__internal_ion_concentrations__Ca_Total), 2) + 0.0095200000000000007 * var_chaste_interface__internal_ion_concentrations__Ca_Total) + 0.5 * var_chaste_interface__internal_ion_concentrations__Ca_Total; // millimolar + const double var_NL_model__Q_b = -0.029999999999999999 * var_chaste_interface__NL_model__pCa + 39 * (1 - var_chaste_interface__NL_model__pCB - var_chaste_interface__NL_model__pCa - var_chaste_interface__NL_model__pCaCB) * var_internal_ion_concentrations__Cai; // per_millisecond + const double d_dt_chaste_interface_var_NL_model__pCa = -var_NL_model__Q_a + var_NL_model__Q_b; // 1 / millisecond + + return d_dt_chaste_interface_var_NL_model__pCa; + } + + double Dynamicmatsuoka_model_2003FromCellMLGRL1Opt::EvaluatePartialDerivative33(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__internal_ion_concentrations__Ca_Total = rY[3]; + // Units: millimolar; Initial value: 0.00040180173572968586 + + + + const double var_x17 = -0.052380000000000003 + var_chaste_interface__internal_ion_concentrations__Ca_Total; + const double var_x18 = sqrt(pow(var_x17, 2) + 0.0095200000000000007 * var_chaste_interface__internal_ion_concentrations__Ca_Total); + const double var_x459 = 0.0038999999999999998 * exp(-0.86212130841993795); + const double var_x460 = 19.5 * var_x18 + 19.5 * var_chaste_interface__internal_ion_concentrations__Ca_Total; + + partialF = 0.99141000000000001 - var_x459 - var_x460; + } + else + { + const double y_save = rY[33]; + rY[33] += delta; + const double temp = EvaluateYDerivative33(var_chaste_interface__environment__time, rY); + partialF = (temp-mEvalF[33])/delta; + rY[33] = y_save; + } + return partialF; + } + double Dynamicmatsuoka_model_2003FromCellMLGRL1Opt::EvaluateYDerivative34(double var_chaste_interface__environment__time, std::vector& rY) + { + + double var_chaste_interface__internal_ion_concentrations__Ca_Total = rY[3]; + // Units: millimolar; Initial value: 0.00040180173572968586 + double var_chaste_interface__NL_model__pCa = rY[33]; + // Units: dimensionless; Initial value: 0.02490898775497523 + double var_chaste_interface__NL_model__pCaCB = rY[34]; + // Units: dimensionless; Initial value: 0.001990153835322864 + double var_chaste_interface__NL_model__pCB = rY[35]; + // Units: dimensionless; Initial value: 0.00042941813853474524 + double var_chaste_interface__NL_model__X = rY[36]; + // Units: micrometre; Initial value: 0.9573749975411884 + + + + // Mathematics + const double d_dt_chaste_interface_var_NL_model__X = 1.1488559970494261 - 1.2 * var_chaste_interface__NL_model__X; // micrometre / millisecond + const double var_NL_model__Q_a = -0.0038999999999999998 * var_chaste_interface__NL_model__pCaCB + 0.0038999999999999998 * var_chaste_interface__NL_model__pCa * exp(-0.86212130841993795); // per_millisecond + const double var_NL_model__Q_d2 = 0.027 * pow(d_dt_chaste_interface_var_NL_model__X, 2) * var_chaste_interface__NL_model__pCaCB; // per_millisecond + const double var_internal_ion_concentrations__Cai = -0.026190000000000001 + 0.5 * sqrt(pow((0.052380000000000003 - var_chaste_interface__internal_ion_concentrations__Ca_Total), 2) + 0.0095200000000000007 * var_chaste_interface__internal_ion_concentrations__Ca_Total) + 0.5 * var_chaste_interface__internal_ion_concentrations__Ca_Total; // millimolar + const double var_NL_model__Q_r = 0.029999999999999999 * var_chaste_interface__NL_model__pCaCB - 1560 * var_chaste_interface__NL_model__pCB * var_internal_ion_concentrations__Cai; // per_millisecond + const double d_dt_chaste_interface_var_NL_model__pCaCB = -var_NL_model__Q_d2 - var_NL_model__Q_r + var_NL_model__Q_a; // 1 / millisecond + + return d_dt_chaste_interface_var_NL_model__pCaCB; + } + + double Dynamicmatsuoka_model_2003FromCellMLGRL1Opt::EvaluatePartialDerivative34(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__NL_model__X = rY[36]; + // Units: micrometre; Initial value: 0.9573749975411884 + + + + const double var_x307 = pow((0.95737999754118841 - var_chaste_interface__NL_model__X), 2); + const double var_x462 = 0.038879999999999998 * var_x307; + + partialF = -0.0339 - var_x462; + } + else + { + const double y_save = rY[34]; + rY[34] += delta; + const double temp = EvaluateYDerivative34(var_chaste_interface__environment__time, rY); + partialF = (temp-mEvalF[34])/delta; + rY[34] = y_save; + } + return partialF; + } + double Dynamicmatsuoka_model_2003FromCellMLGRL1Opt::EvaluateYDerivative35(double var_chaste_interface__environment__time, std::vector& rY) + { + + double var_chaste_interface__internal_ion_concentrations__Ca_Total = rY[3]; + // Units: millimolar; Initial value: 0.00040180173572968586 + double var_chaste_interface__NL_model__pCaCB = rY[34]; + // Units: dimensionless; Initial value: 0.001990153835322864 + double var_chaste_interface__NL_model__pCB = rY[35]; + // Units: dimensionless; Initial value: 0.00042941813853474524 + double var_chaste_interface__NL_model__X = rY[36]; + // Units: micrometre; Initial value: 0.9573749975411884 + + + + // Mathematics + const double d_dt_chaste_interface_var_NL_model__X = 1.1488559970494261 - 1.2 * var_chaste_interface__NL_model__X; // micrometre / millisecond + const double var_internal_ion_concentrations__Cai = -0.026190000000000001 + 0.5 * sqrt(pow((0.052380000000000003 - var_chaste_interface__internal_ion_concentrations__Ca_Total), 2) + 0.0095200000000000007 * var_chaste_interface__internal_ion_concentrations__Ca_Total) + 0.5 * var_chaste_interface__internal_ion_concentrations__Ca_Total; // millimolar + const double var_NL_model__Q_r = 0.029999999999999999 * var_chaste_interface__NL_model__pCaCB - 1560 * var_chaste_interface__NL_model__pCB * var_internal_ion_concentrations__Cai; // per_millisecond + const double d_dt_chaste_interface_var_NL_model__pCB = -0.12 * var_chaste_interface__NL_model__pCB - 0.027 * pow(d_dt_chaste_interface_var_NL_model__X, 2) * var_chaste_interface__NL_model__pCB + var_NL_model__Q_r; // 1 / millisecond + + return d_dt_chaste_interface_var_NL_model__pCB; + } + + double Dynamicmatsuoka_model_2003FromCellMLGRL1Opt::EvaluatePartialDerivative35(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__internal_ion_concentrations__Ca_Total = rY[3]; + // Units: millimolar; Initial value: 0.00040180173572968586 + double var_chaste_interface__NL_model__X = rY[36]; + // Units: micrometre; Initial value: 0.9573749975411884 + + + + const double var_x17 = -0.052380000000000003 + var_chaste_interface__internal_ion_concentrations__Ca_Total; + const double var_x18 = sqrt(pow(var_x17, 2) + 0.0095200000000000007 * var_chaste_interface__internal_ion_concentrations__Ca_Total); + const double var_x307 = pow((0.95737999754118841 - var_chaste_interface__NL_model__X), 2); + const double var_x462 = 0.038879999999999998 * var_x307; + const double var_x463 = 780 * var_x18 + 780 * var_chaste_interface__internal_ion_concentrations__Ca_Total; + + partialF = 40.736400000000003 - var_x462 - var_x463; + } + else + { + const double y_save = rY[35]; + rY[35] += delta; + const double temp = EvaluateYDerivative35(var_chaste_interface__environment__time, rY); + partialF = (temp-mEvalF[35])/delta; + rY[35] = y_save; + } + return partialF; + } + double Dynamicmatsuoka_model_2003FromCellMLGRL1Opt::EvaluateYDerivative36(double var_chaste_interface__environment__time, std::vector& rY) + { + + double var_chaste_interface__NL_model__X = rY[36]; + // Units: micrometre; Initial value: 0.9573749975411884 + + + + // Mathematics + const double d_dt_chaste_interface_var_NL_model__X = 1.1488559970494261 - 1.2 * var_chaste_interface__NL_model__X; // micrometre / millisecond + + return d_dt_chaste_interface_var_NL_model__X; + } + + double Dynamicmatsuoka_model_2003FromCellMLGRL1Opt::EvaluatePartialDerivative36(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + + + + + partialF = -1.2; + } + else + { + const double y_save = rY[36]; + rY[36] += delta; + const double temp = EvaluateYDerivative36(var_chaste_interface__environment__time, rY); + partialF = (temp-mEvalF[36])/delta; + rY[36] = y_save; + } + return partialF; + } + + std::vector Dynamicmatsuoka_model_2003FromCellMLGRL1Opt::ComputeDerivedQuantities(double var_chaste_interface__environment__time, const std::vector & rY) + { + // Inputs: + // Time units: millisecond + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -85.95752434460744 + double var_chaste_interface__internal_ion_concentrations__Nai = rY[1]; + // Units: millimolar; Initial value: 4.925761439682025 + double var_chaste_interface__internal_ion_concentrations__Ki = rY[2]; + // Units: millimolar; Initial value: 143.1837333000449 + double var_chaste_interface__internal_ion_concentrations__Ca_Total = rY[3]; + // Units: millimolar; Initial value: 0.00040180173572968586 + double var_chaste_interface__ATP_production__ATPi = rY[4]; + // Units: millimolar; Initial value: 4.657102729020499 + double var_chaste_interface__sodium_current_voltage_dependent_gate__p_AP_Na = rY[5]; + // Units: dimensionless; Initial value: 1.779648367445368e-05 + double var_chaste_interface__sodium_current_ultra_slow_gate__y = rY[8]; + // Units: dimensionless; Initial value: 0.5861887862983165 + double var_chaste_interface__L_type_Ca_channel_voltage_dependent_gate__p_AP_CaL = rY[9]; + // Units: dimensionless; Initial value: 1.5445004166497696e-06 + double var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_U = rY[12]; + // Units: dimensionless; Initial value: 0.17246483915629204 + double var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_UCa = rY[13]; + // Units: dimensionless; Initial value: 6.098246017787626e-05 + double var_chaste_interface__L_type_Ca_channel_ultra_slow_gate__y = rY[15]; + // Units: dimensionless; Initial value: 0.9985266538252986 + double var_chaste_interface__time_independent_potassium_current_y_gate__y = rY[18]; + // Units: dimensionless; Initial value: 0.6080573900752752 + double var_chaste_interface__rapid_time_dependent_potassium_current_y1_gate__y1 = rY[19]; + // Units: dimensionless; Initial value: 0.0018339931180983765 + double var_chaste_interface__rapid_time_dependent_potassium_current_y2_gate__y2 = rY[20]; + // Units: dimensionless; Initial value: 0.20443083454225305 + double var_chaste_interface__rapid_time_dependent_potassium_current_y3_gate__y3 = rY[21]; + // Units: dimensionless; Initial value: 0.967887666264921 + double var_chaste_interface__slow_time_dependent_potassium_current_y1_gate__y1 = rY[22]; + // Units: dimensionless; Initial value: 0.09738789658609195 + double var_chaste_interface__slow_time_dependent_potassium_current_y2_gate__y2 = rY[23]; + // Units: dimensionless; Initial value: 0.09745345578743213 + double var_chaste_interface__transient_outward_current_y1_gate__y1 = rY[24]; + // Units: dimensionless; Initial value: 0.0007956883250874798 + double var_chaste_interface__transient_outward_current_y2_gate__y2 = rY[25]; + // Units: dimensionless; Initial value: 0.9999125083105881 + double var_chaste_interface__sodium_calcium_exchanger_y_gate__y = rY[26]; + // Units: dimensionless; Initial value: 0.9891789193465331 + double var_chaste_interface__RyR_channel__p_open_RyR = rY[29]; + // Units: dimensionless; Initial value: 0.00034314360001543243 + double var_chaste_interface__Ca_concentrations_in_SR__Ca_Total = rY[31]; + // Units: millimolar; Initial value: 9.455741736977666 + + + // Mathematics + const double var_Ca_concentrations_in_SR__CSQN_max = 10; // millimolar + const double var_Ca_concentrations_in_SR__K_mCSQN = 0.80000000000000004; // millimolar + const double var_Ca_concentrations_in_SR__b1 = -var_chaste_interface__Ca_concentrations_in_SR__Ca_Total + var_Ca_concentrations_in_SR__CSQN_max + var_Ca_concentrations_in_SR__K_mCSQN; // millimolar + const double var_Ca_concentrations_in_SR__c1 = var_chaste_interface__Ca_concentrations_in_SR__Ca_Total * var_Ca_concentrations_in_SR__K_mCSQN; // millimolar2 + const double var_Ca_concentrations_in_SR__Carel = sqrt(0.25 * pow(var_Ca_concentrations_in_SR__b1, 2) + var_Ca_concentrations_in_SR__c1) - 0.5 * var_Ca_concentrations_in_SR__b1; // millimolar + const double var_L_type_Ca_channel__p_open_CaL = (var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_U + var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_UCa) * var_chaste_interface__L_type_Ca_channel_ultra_slow_gate__y * var_chaste_interface__L_type_Ca_channel_voltage_dependent_gate__p_AP_CaL / (1 + 2.7439999999999993 / pow(var_chaste_interface__ATP_production__ATPi, 3)); // dimensionless + const double var_internal_ion_concentrations__CMDN_max = 0.050000000000000003; // millimolar + const double var_internal_ion_concentrations__K_mCMDN = 0.0023800000000000002; // millimolar + const double var_internal_ion_concentrations__b1 = -var_chaste_interface__internal_ion_concentrations__Ca_Total + var_internal_ion_concentrations__CMDN_max + var_internal_ion_concentrations__K_mCMDN; // millimolar + const double var_internal_ion_concentrations__c1 = var_chaste_interface__internal_ion_concentrations__Ca_Total * var_internal_ion_concentrations__K_mCMDN; // millimolar2 + const double var_internal_ion_concentrations__Cai = sqrt(0.25 * pow(var_internal_ion_concentrations__b1, 2) + var_internal_ion_concentrations__c1) - 0.5 * var_internal_ion_concentrations__b1; // millimolar + const double var_RyR_channel__i_RyR = (-var_internal_ion_concentrations__Cai + var_Ca_concentrations_in_SR__Carel) * mParameters[1] * var_chaste_interface__RyR_channel__p_open_RyR; // picoA + const double var_membrane__Cm_converted = 9.9999999999999995e-7 * mParameters[9]; // uF + const double var_membrane__F = 96.486699999999999; // coulomb_per_millimole + const double var_membrane__R = 8.3142999999999994; // coulomb_millivolt_per_kelvin_millimole + const double var_membrane__T = 310; // kelvin + const double var_constant_field_equations__CF_Ca = ((var_chaste_interface__membrane__Vm == 0) ? (-mParameters[5]) : (2 * (-mParameters[5] * exp(-2 * var_membrane__F * var_chaste_interface__membrane__Vm / (var_membrane__R * var_membrane__T)) + var_internal_ion_concentrations__Cai) * var_membrane__F * var_chaste_interface__membrane__Vm / ((1 - exp(-2 * var_membrane__F * var_chaste_interface__membrane__Vm / (var_membrane__R * var_membrane__T))) * var_membrane__R * var_membrane__T))); // millimolar + const double var_L_type_Ca_channel__i_CaL_Ca = mParameters[8] * var_L_type_Ca_channel__p_open_CaL * var_constant_field_equations__CF_Ca; // picoA + const double var_constant_field_equations__CF_K = ((var_chaste_interface__membrane__Vm == 0) ? (var_chaste_interface__internal_ion_concentrations__Ki) : ((-mParameters[6] * exp(-var_membrane__F * var_chaste_interface__membrane__Vm / (var_membrane__R * var_membrane__T)) + var_chaste_interface__internal_ion_concentrations__Ki) * var_membrane__F * var_chaste_interface__membrane__Vm / ((1 - exp(-var_membrane__F * var_chaste_interface__membrane__Vm / (var_membrane__R * var_membrane__T))) * var_membrane__R * var_membrane__T))); // millimolar + const double var_L_type_Ca_channel__i_CaL_K = 0.00036499999999999998 * mParameters[8] * var_L_type_Ca_channel__p_open_CaL * var_constant_field_equations__CF_K; // picoA + const double var_constant_field_equations__CF_Na = ((var_chaste_interface__membrane__Vm == 0) ? (-mParameters[7]) : ((-mParameters[7] * exp(-var_membrane__F * var_chaste_interface__membrane__Vm / (var_membrane__R * var_membrane__T)) + var_chaste_interface__internal_ion_concentrations__Nai) * var_membrane__F * var_chaste_interface__membrane__Vm / ((1 - exp(-var_membrane__F * var_chaste_interface__membrane__Vm / (var_membrane__R * var_membrane__T))) * var_membrane__R * var_membrane__T))); // millimolar + const double var_L_type_Ca_channel__i_CaL_Na = 1.8499999999999999e-5 * mParameters[8] * var_L_type_Ca_channel__p_open_CaL * var_constant_field_equations__CF_Na; // picoA + const double var_L_type_Ca_channel__i_Ca_L = var_L_type_Ca_channel__i_CaL_Ca + var_L_type_Ca_channel__i_CaL_K + var_L_type_Ca_channel__i_CaL_Na; // picoA + const double var_L_type_Ca_channel__i_Ca_L_converted = 9.9999999999999995e-7 * HeartConfig::Instance()->GetCapacitance() * var_L_type_Ca_channel__i_Ca_L / var_membrane__Cm_converted; // uA_per_cm2 + const double var_membrane__i_ext_converted = GetIntracellularAreaStimulus(var_chaste_interface__environment__time); // uA_per_cm2 + const double var_rapid_time_dependent_potassium_current__g_Kr = 0.71370912277944121 * pow(mParameters[6], 0.20000000000000001) * mParameters[9] * mParameters[12]; // nanoS + const double var_slow_time_dependent_potassium_current__P_Ks_Na = 0.2016; // picoA_per_millimolar + const double var_slow_time_dependent_potassium_current__i_Ks_K = pow(var_chaste_interface__slow_time_dependent_potassium_current_y1_gate__y1, 2) * (0.10000000000000001 + 0.90000000000000002 * var_chaste_interface__slow_time_dependent_potassium_current_y2_gate__y2) * var_constant_field_equations__CF_K * mParameters[13]; // picoA + const double var_slow_time_dependent_potassium_current__i_Ks_Na = pow(var_chaste_interface__slow_time_dependent_potassium_current_y1_gate__y1, 2) * (0.10000000000000001 + 0.90000000000000002 * var_chaste_interface__slow_time_dependent_potassium_current_y2_gate__y2) * var_constant_field_equations__CF_Na * var_slow_time_dependent_potassium_current__P_Ks_Na; // picoA + const double var_slow_time_dependent_potassium_current__i_Ks = var_slow_time_dependent_potassium_current__i_Ks_K + var_slow_time_dependent_potassium_current__i_Ks_Na; // picoA + const double var_slow_time_dependent_potassium_current__i_Ks_converted = 9.9999999999999995e-7 * HeartConfig::Instance()->GetCapacitance() * var_slow_time_dependent_potassium_current__i_Ks / var_membrane__Cm_converted; // uA_per_cm2 + const double var_sodium_calcium_exchanger__Km_Cai = 0.0013799999999999999; // millimolar + const double var_sodium_calcium_exchanger__Km_Cao = 1.3799999999999999; // millimolar + const double var_sodium_calcium_exchanger__Km_Nai = 8.75; // millimolar + const double var_sodium_calcium_exchanger__Km_Nao = 87.5; // millimolar + const double var_sodium_calcium_exchanger__Partition = 0.32000000000000001; // dimensionless + const double var_sodium_calcium_exchanger__k1 = exp(var_membrane__F * var_chaste_interface__membrane__Vm * var_sodium_calcium_exchanger__Partition / (var_membrane__R * var_membrane__T)); // per_millisecond + const double var_sodium_calcium_exchanger__k2 = exp((-1 + var_sodium_calcium_exchanger__Partition) * var_membrane__F * var_chaste_interface__membrane__Vm / (var_membrane__R * var_membrane__T)); // per_millisecond + const double var_sodium_calcium_exchanger__p_E1Na = 1 / (1 + pow(var_sodium_calcium_exchanger__Km_Nai, 3) * (1 + var_internal_ion_concentrations__Cai / var_sodium_calcium_exchanger__Km_Cai) / pow(var_chaste_interface__internal_ion_concentrations__Nai, 3)); // dimensionless + const double var_sodium_calcium_exchanger__p_E2Na = 1 / (1 + pow(var_sodium_calcium_exchanger__Km_Nao, 3) * (1 + mParameters[5] / var_sodium_calcium_exchanger__Km_Cao) / pow(mParameters[7], 3)); // dimensionless + const double var_sodium_calcium_exchanger__i_NaCa = (var_sodium_calcium_exchanger__k1 * var_sodium_calcium_exchanger__p_E1Na * var_chaste_interface__sodium_calcium_exchanger_y_gate__y - (1 - var_chaste_interface__sodium_calcium_exchanger_y_gate__y) * var_sodium_calcium_exchanger__k2 * var_sodium_calcium_exchanger__p_E2Na) * mParameters[9] * mParameters[14]; // picoA + const double var_sodium_calcium_exchanger__i_NaCa_converted = 9.9999999999999995e-7 * HeartConfig::Instance()->GetCapacitance() * var_sodium_calcium_exchanger__i_NaCa / var_membrane__Cm_converted; // uA_per_cm2 + const double var_sodium_current__i_Na_K = 0.10000000000000001 * var_constant_field_equations__CF_K * mParameters[10] * var_chaste_interface__sodium_current_ultra_slow_gate__y * var_chaste_interface__sodium_current_voltage_dependent_gate__p_AP_Na; // picoA + const double var_sodium_current__i_Na_Na = var_constant_field_equations__CF_Na * mParameters[10] * var_chaste_interface__sodium_current_ultra_slow_gate__y * var_chaste_interface__sodium_current_voltage_dependent_gate__p_AP_Na; // picoA + const double var_sodium_current__i_Na = var_sodium_current__i_Na_K + var_sodium_current__i_Na_Na; // picoA + const double var_sodium_current__i_Na_converted = 9.9999999999999995e-7 * HeartConfig::Instance()->GetCapacitance() * var_sodium_current__i_Na / var_membrane__Cm_converted; // uA_per_cm2 + const double var_time_independent_potassium_current__E_K = var_membrane__R * var_membrane__T * log(mParameters[6] / var_chaste_interface__internal_ion_concentrations__Ki) / var_membrane__F; // millivolt + const double var_rapid_time_dependent_potassium_current__i_Kr = (-var_time_independent_potassium_current__E_K + var_chaste_interface__membrane__Vm) * (0.40000000000000002 * var_chaste_interface__rapid_time_dependent_potassium_current_y2_gate__y2 + 0.59999999999999998 * var_chaste_interface__rapid_time_dependent_potassium_current_y1_gate__y1) * var_rapid_time_dependent_potassium_current__g_Kr * var_chaste_interface__rapid_time_dependent_potassium_current_y3_gate__y3; // picoA + const double var_rapid_time_dependent_potassium_current__i_Kr_converted = 9.9999999999999995e-7 * HeartConfig::Instance()->GetCapacitance() * var_rapid_time_dependent_potassium_current__i_Kr / var_membrane__Cm_converted; // uA_per_cm2 + const double var_time_independent_potassium_current__g_K1 = 0.50938071193859957 * pow(mParameters[6], 0.40000000000000002) * mParameters[9] * mParameters[11]; // nanoS + const double var_time_independent_potassium_current__lambda = 3 * (1 + exp(-2.4319999999999999 + 0.064000000000000001 * var_chaste_interface__membrane__Vm - 0.064000000000000001 * var_time_independent_potassium_current__E_K)) * exp(0.47999999999999998 + 0.048000000000000001 * var_time_independent_potassium_current__E_K - 0.048000000000000001 * var_chaste_interface__membrane__Vm) / (1 + exp(-2.1000000000000001 + 0.029999999999999999 * var_chaste_interface__membrane__Vm - 0.029999999999999999 * var_time_independent_potassium_current__E_K)); // per_millisecond + const double var_time_independent_potassium_current__mu = 0.75 * exp(-0.35000000000000003 + 0.035000000000000003 * var_chaste_interface__membrane__Vm - 0.035000000000000003 * var_time_independent_potassium_current__E_K) / (1 + exp(-2.1000000000000001 + 0.014999999999999999 * var_chaste_interface__membrane__Vm - 0.014999999999999999 * var_time_independent_potassium_current__E_K)); // per_millisecond + const double var_time_independent_potassium_current__fB = var_time_independent_potassium_current__mu / (var_time_independent_potassium_current__lambda + var_time_independent_potassium_current__mu); // dimensionless + const double var_time_independent_potassium_current__fO = var_time_independent_potassium_current__lambda / (var_time_independent_potassium_current__lambda + var_time_independent_potassium_current__mu); // dimensionless + const double var_time_independent_potassium_current__fO2 = 2 * pow(var_time_independent_potassium_current__fB, 2) * pow(var_time_independent_potassium_current__fO, 2); // dimensionless + const double var_time_independent_potassium_current__fO3 = 2.6666666666666665 * pow(var_time_independent_potassium_current__fO, 3) * var_time_independent_potassium_current__fB; // dimensionless + const double var_time_independent_potassium_current__fO4 = pow(var_time_independent_potassium_current__fO, 4); // dimensionless + const double var_time_independent_potassium_current__i_K1 = (-var_time_independent_potassium_current__E_K + var_chaste_interface__membrane__Vm) * (var_time_independent_potassium_current__fO2 + var_time_independent_potassium_current__fO3 + var_time_independent_potassium_current__fO4) * var_time_independent_potassium_current__g_K1 * var_chaste_interface__time_independent_potassium_current_y_gate__y; // picoA + const double var_time_independent_potassium_current__i_K1_converted = 9.9999999999999995e-7 * HeartConfig::Instance()->GetCapacitance() * var_time_independent_potassium_current__i_K1 / var_membrane__Cm_converted; // uA_per_cm2 + const double var_transient_outward_current__P_to_Na = 0.00297; // picoA_per_millimolar + const double var_transient_outward_current__i_to_K = pow(var_chaste_interface__transient_outward_current_y1_gate__y1, 3) * var_constant_field_equations__CF_K * mParameters[15] * var_chaste_interface__transient_outward_current_y2_gate__y2; // picoA + const double var_transient_outward_current__i_to_Na = pow(var_chaste_interface__transient_outward_current_y1_gate__y1, 3) * var_constant_field_equations__CF_Na * var_transient_outward_current__P_to_Na * var_chaste_interface__transient_outward_current_y2_gate__y2; // picoA + const double var_transient_outward_current__i_to = var_transient_outward_current__i_to_K + var_transient_outward_current__i_to_Na; // picoA + const double var_transient_outward_current__i_to_converted = 9.9999999999999995e-7 * HeartConfig::Instance()->GetCapacitance() * var_transient_outward_current__i_to / var_membrane__Cm_converted; // uA_per_cm2 + + std::vector dqs(13); + dqs[0] = var_Ca_concentrations_in_SR__Carel; + dqs[1] = var_RyR_channel__i_RyR; + dqs[2] = var_internal_ion_concentrations__Cai; + dqs[3] = var_L_type_Ca_channel__i_Ca_L_converted; + dqs[4] = var_membrane__Cm_converted; + dqs[5] = var_sodium_current__i_Na_converted; + dqs[6] = var_time_independent_potassium_current__i_K1_converted; + dqs[7] = var_rapid_time_dependent_potassium_current__i_Kr_converted; + dqs[8] = var_slow_time_dependent_potassium_current__i_Ks_converted; + dqs[9] = var_sodium_calcium_exchanger__i_NaCa_converted; + dqs[10] = var_membrane__i_ext_converted; + dqs[11] = var_transient_outward_current__i_to_converted; + dqs[12] = var_chaste_interface__environment__time; + return dqs; + } + +template<> +void OdeSystemInformation::Initialise(void) +{ + this->mSystemName = "matsuoka_model_2003"; + this->mFreeVariableName = "time"; + this->mFreeVariableUnits = "millisecond"; + + // rY[0]: + this->mVariableNames.push_back("membrane_voltage"); + this->mVariableUnits.push_back("millivolt"); + this->mInitialConditions.push_back(-85.95752434460744); + + // rY[1]: + this->mVariableNames.push_back("cytosolic_sodium_concentration"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(4.925761439682025); + + // rY[2]: + this->mVariableNames.push_back("cytosolic_potassium_concentration"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(143.1837333000449); + + // rY[3]: + this->mVariableNames.push_back("internal_ion_concentrations__Ca_Total"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(0.00040180173572968586); + + // rY[4]: + this->mVariableNames.push_back("ATP_production__ATPi"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(4.657102729020499); + + // rY[5]: + this->mVariableNames.push_back("membrane_fast_sodium_current_m_gate"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(1.779648367445368e-05); + + // rY[6]: + this->mVariableNames.push_back("sodium_current_voltage_dependent_gate__p_RP_Na"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.3556412697995689); + + // rY[7]: + this->mVariableNames.push_back("sodium_current_voltage_dependent_gate__p_AI_Na"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.40285968661346977); + + // rY[8]: + this->mVariableNames.push_back("membrane_fast_sodium_current_h_gate"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.5861887862983165); + + // rY[9]: + this->mVariableNames.push_back("membrane_L_type_calcium_current_d_gate"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(1.5445004166497696e-06); + + // rY[10]: + this->mVariableNames.push_back("L_type_Ca_channel_voltage_dependent_gate__p_RP_CaL"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.9968480629364956); + + // rY[11]: + this->mVariableNames.push_back("L_type_Ca_channel_voltage_dependent_gate__p_AI_CaL"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.000877325391245903); + + // rY[12]: + this->mVariableNames.push_back("membrane_L_type_calcium_current_f_gate"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.17246483915629204); + + // rY[13]: + this->mVariableNames.push_back("membrane_L_type_calcium_current_fCa_gate"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(6.098246017787626e-05); + + // rY[14]: + this->mVariableNames.push_back("L_type_Ca_channel_Ca_dependent_gate__p_C"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.4250747299372254); + + // rY[15]: + this->mVariableNames.push_back("membrane_L_type_calcium_current_d2_gate"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.9985266538252986); + + // rY[16]: + this->mVariableNames.push_back("T_type_Ca_channel_y1_gate__y1"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(1.6882718240109127e-05); + + // rY[17]: + this->mVariableNames.push_back("T_type_Ca_channel_y2_gate__y2"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.8585352091865849); + + // rY[18]: + this->mVariableNames.push_back("time_independent_potassium_current_y_gate__y"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.6080573900752752); + + // rY[19]: + this->mVariableNames.push_back("rapid_time_dependent_potassium_current_y1_gate__y1"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.0018339931180983765); + + // rY[20]: + this->mVariableNames.push_back("rapid_time_dependent_potassium_current_y2_gate__y2"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.20443083454225305); + + // rY[21]: + this->mVariableNames.push_back("rapid_time_dependent_potassium_current_y3_gate__y3"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.967887666264921); + + // rY[22]: + this->mVariableNames.push_back("slow_time_dependent_potassium_current_y1_gate__y1"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.09738789658609195); + + // rY[23]: + this->mVariableNames.push_back("slow_time_dependent_potassium_current_y2_gate__y2"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.09745345578743213); + + // rY[24]: + this->mVariableNames.push_back("transient_outward_current_y1_gate__y1"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.0007956883250874798); + + // rY[25]: + this->mVariableNames.push_back("transient_outward_current_y2_gate__y2"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.9999125083105881); + + // rY[26]: + this->mVariableNames.push_back("sodium_calcium_exchanger_y_gate__y"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.9891789193465331); + + // rY[27]: + this->mVariableNames.push_back("sodium_potassium_pump_y_gate__y"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.5910747147428818); + + // rY[28]: + this->mVariableNames.push_back("SR_calcium_pump_y_gate__y"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.46108441538480216); + + // rY[29]: + this->mVariableNames.push_back("RyR_channel__p_open_RyR"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.00034314360001543243); + + // rY[30]: + this->mVariableNames.push_back("RyR_channel__p_close_RyR"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.19135178123107768); + + // rY[31]: + this->mVariableNames.push_back("Ca_concentrations_in_SR__Ca_Total"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(9.455741736977666); + + // rY[32]: + this->mVariableNames.push_back("Ca_concentrations_in_SR__Caup"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(2.611712901567567); + + // rY[33]: + this->mVariableNames.push_back("NL_model__pCa"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.02490898775497523); + + // rY[34]: + this->mVariableNames.push_back("NL_model__pCaCB"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.001990153835322864); + + // rY[35]: + this->mVariableNames.push_back("NL_model__pCB"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.00042941813853474524); + + // rY[36]: + this->mVariableNames.push_back("NL_model__X"); + this->mVariableUnits.push_back("micrometre"); + this->mInitialConditions.push_back(0.9573749975411884); + + // mParameters[0]: + this->mParameterNames.push_back("SR_leak_current_max"); + this->mParameterUnits.push_back("picoA_per_millimolar"); + + // mParameters[1]: + this->mParameterNames.push_back("SR_release_current_max"); + this->mParameterUnits.push_back("picoA_per_millimolar"); + + // mParameters[2]: + this->mParameterNames.push_back("SR_release_kmcacyt"); + this->mParameterUnits.push_back("millimolar"); + + // mParameters[3]: + this->mParameterNames.push_back("SR_uptake_current_max"); + this->mParameterUnits.push_back("picoA"); + + // mParameters[4]: + this->mParameterNames.push_back("concentration_clamp_onoff"); + this->mParameterUnits.push_back("dimensionless"); + + // mParameters[5]: + this->mParameterNames.push_back("extracellular_calcium_concentration"); + this->mParameterUnits.push_back("millimolar"); + + // mParameters[6]: + this->mParameterNames.push_back("extracellular_potassium_concentration"); + this->mParameterUnits.push_back("millimolar"); + + // mParameters[7]: + this->mParameterNames.push_back("extracellular_sodium_concentration"); + this->mParameterUnits.push_back("millimolar"); + + // mParameters[8]: + this->mParameterNames.push_back("membrane_L_type_calcium_current_conductance"); + this->mParameterUnits.push_back("picoA_per_millimolar"); + + // mParameters[9]: + this->mParameterNames.push_back("membrane__Cm"); + this->mParameterUnits.push_back("picoF"); + + // mParameters[10]: + this->mParameterNames.push_back("membrane_fast_sodium_current_conductance"); + this->mParameterUnits.push_back("picoA_per_millimolar"); + + // mParameters[11]: + this->mParameterNames.push_back("membrane_inward_rectifier_potassium_current_conductance"); + this->mParameterUnits.push_back("nanoS_per_picoF"); + + // mParameters[12]: + this->mParameterNames.push_back("membrane_rapid_delayed_rectifier_potassium_current_conductance"); + this->mParameterUnits.push_back("nanoS_per_picoF"); + + // mParameters[13]: + this->mParameterNames.push_back("membrane_slow_delayed_rectifier_potassium_current_conductance"); + this->mParameterUnits.push_back("picoA_per_millimolar"); + + // mParameters[14]: + this->mParameterNames.push_back("membrane_sodium_calcium_exchanger_current_conductance"); + this->mParameterUnits.push_back("picoA_per_picoF"); + + // mParameters[15]: + this->mParameterNames.push_back("membrane_transient_outward_current_conductance"); + this->mParameterUnits.push_back("picoA_per_millimolar"); + + // Derived Quantity index [0]: + this->mDerivedQuantityNames.push_back("JSR_calcium_concentration"); + this->mDerivedQuantityUnits.push_back("millimolar"); + + // Derived Quantity index [1]: + this->mDerivedQuantityNames.push_back("SR_release_current"); + this->mDerivedQuantityUnits.push_back("picoA"); + + // Derived Quantity index [2]: + this->mDerivedQuantityNames.push_back("cytosolic_calcium_concentration"); + this->mDerivedQuantityUnits.push_back("millimolar"); + + // Derived Quantity index [3]: + this->mDerivedQuantityNames.push_back("membrane_L_type_calcium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [4]: + this->mDerivedQuantityNames.push_back("membrane_capacitance"); + this->mDerivedQuantityUnits.push_back("uF"); + + // Derived Quantity index [5]: + this->mDerivedQuantityNames.push_back("membrane_fast_sodium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [6]: + this->mDerivedQuantityNames.push_back("membrane_inward_rectifier_potassium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [7]: + this->mDerivedQuantityNames.push_back("membrane_rapid_delayed_rectifier_potassium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [8]: + this->mDerivedQuantityNames.push_back("membrane_slow_delayed_rectifier_potassium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [9]: + this->mDerivedQuantityNames.push_back("membrane_sodium_calcium_exchanger_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [10]: + this->mDerivedQuantityNames.push_back("membrane_stimulus_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [11]: + this->mDerivedQuantityNames.push_back("membrane_transient_outward_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [12]: + this->mDerivedQuantityNames.push_back("time"); + this->mDerivedQuantityUnits.push_back("millisecond"); + + this->mInitialised = true; +} + +// Serialization for Boost >= 1.36 +#include "SerializationExportWrapperForCpp.hpp" +CHASTE_CLASS_EXPORT(Dynamicmatsuoka_model_2003FromCellMLGRL1Opt) +extern "C" +{ + AbstractCardiacCellInterface* MakeCardiacCell( + boost::shared_ptr pSolver, + boost::shared_ptr pStimulus) + { + return new Dynamicmatsuoka_model_2003FromCellMLGRL1Opt(pSolver, pStimulus); + } + +} diff --git a/chaste_codegen/tests/numerical/baseline/GRL1Opt/dynamic_matsuoka_model_2003.hpp b/chaste_codegen/tests/numerical/baseline/GRL1Opt/dynamic_matsuoka_model_2003.hpp new file mode 100644 index 00000000..ea268fee --- /dev/null +++ b/chaste_codegen/tests/numerical/baseline/GRL1Opt/dynamic_matsuoka_model_2003.hpp @@ -0,0 +1,164 @@ +#ifndef DYNAMICMATSUOKA_MODEL_2003FROMCELLMLGRL1OPT_HPP_ +#define DYNAMICMATSUOKA_MODEL_2003FROMCELLMLGRL1OPT_HPP_ + +//! @file +//! +//! This source file was generated from CellML by chaste_codegen version (version omitted as unimportant) +//! +//! Model: matsuoka_model_2003 +//! +//! Processed by chaste_codegen: https://github.com/ModellingWebLab/chaste-codegen +//! (translator: chaste_codegen, model type: GeneralizedRushLarsenFirstOrderOpt) +//! on (date omitted as unimportant) +//! +//! + +#include "ChasteSerialization.hpp" +#include +#include "AbstractDynamicallyLoadableEntity.hpp" +#include "AbstractStimulusFunction.hpp" +#include "AbstractGeneralizedRushLarsenCardiacCell.hpp" + +class Dynamicmatsuoka_model_2003FromCellMLGRL1Opt : public AbstractGeneralizedRushLarsenCardiacCell, public AbstractDynamicallyLoadableEntity +{ + friend class boost::serialization::access; + template + void serialize(Archive & archive, const unsigned int version) + { + archive & boost::serialization::base_object(*this); + archive & boost::serialization::base_object(*this); + } + + // + // Settable parameters and readable variables + // + +private: + static AbstractGeneralizedRushLarsenCardiacCell* CreateMethod(boost::shared_ptr p_solver, boost::shared_ptr p_stimulus); + static bool registered; +private: +const bool is_concentration[37] = {false, true, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false}; +const bool is_probability[37] = {false, false, false, false, false, true, false, false, true, true, false, false, true, true, false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false}; +public: + + boost::shared_ptr UseCellMLDefaultStimulus(); + Dynamicmatsuoka_model_2003FromCellMLGRL1Opt(boost::shared_ptr /* unused; should be empty */, boost::shared_ptr pIntracellularStimulus); + ~Dynamicmatsuoka_model_2003FromCellMLGRL1Opt(); + void VerifyStateVariables(); + AbstractLookupTableCollection* GetLookupTableCollection(); + double GetIIonic(const std::vector* pStateVariables=NULL); + void UpdateTransmembranePotential(double var_chaste_interface__environment__time); + void ComputeOneStepExceptVoltage(double var_chaste_interface__environment__time); + + double EvaluateYDerivative0(double var_chaste_interface__environment__time, std::vector& rY); + double EvaluatePartialDerivative0(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative1(double var_chaste_interface__environment__time, std::vector& rY); + double EvaluatePartialDerivative1(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative2(double var_chaste_interface__environment__time, std::vector& rY); + double EvaluatePartialDerivative2(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative3(double var_chaste_interface__environment__time, std::vector& rY); + double EvaluatePartialDerivative3(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative4(double var_chaste_interface__environment__time, std::vector& rY); + double EvaluatePartialDerivative4(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative5(double var_chaste_interface__environment__time, std::vector& rY); + double EvaluatePartialDerivative5(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative6(double var_chaste_interface__environment__time, std::vector& rY); + double EvaluatePartialDerivative6(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative7(double var_chaste_interface__environment__time, std::vector& rY); + double EvaluatePartialDerivative7(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative8(double var_chaste_interface__environment__time, std::vector& rY); + double EvaluatePartialDerivative8(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative9(double var_chaste_interface__environment__time, std::vector& rY); + double EvaluatePartialDerivative9(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative10(double var_chaste_interface__environment__time, std::vector& rY); + double EvaluatePartialDerivative10(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative11(double var_chaste_interface__environment__time, std::vector& rY); + double EvaluatePartialDerivative11(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative12(double var_chaste_interface__environment__time, std::vector& rY); + double EvaluatePartialDerivative12(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative13(double var_chaste_interface__environment__time, std::vector& rY); + double EvaluatePartialDerivative13(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative14(double var_chaste_interface__environment__time, std::vector& rY); + double EvaluatePartialDerivative14(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative15(double var_chaste_interface__environment__time, std::vector& rY); + double EvaluatePartialDerivative15(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative16(double var_chaste_interface__environment__time, std::vector& rY); + double EvaluatePartialDerivative16(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative17(double var_chaste_interface__environment__time, std::vector& rY); + double EvaluatePartialDerivative17(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative18(double var_chaste_interface__environment__time, std::vector& rY); + double EvaluatePartialDerivative18(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative19(double var_chaste_interface__environment__time, std::vector& rY); + double EvaluatePartialDerivative19(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative20(double var_chaste_interface__environment__time, std::vector& rY); + double EvaluatePartialDerivative20(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative21(double var_chaste_interface__environment__time, std::vector& rY); + double EvaluatePartialDerivative21(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative22(double var_chaste_interface__environment__time, std::vector& rY); + double EvaluatePartialDerivative22(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative23(double var_chaste_interface__environment__time, std::vector& rY); + double EvaluatePartialDerivative23(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative24(double var_chaste_interface__environment__time, std::vector& rY); + double EvaluatePartialDerivative24(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative25(double var_chaste_interface__environment__time, std::vector& rY); + double EvaluatePartialDerivative25(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative26(double var_chaste_interface__environment__time, std::vector& rY); + double EvaluatePartialDerivative26(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative27(double var_chaste_interface__environment__time, std::vector& rY); + double EvaluatePartialDerivative27(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative28(double var_chaste_interface__environment__time, std::vector& rY); + double EvaluatePartialDerivative28(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative29(double var_chaste_interface__environment__time, std::vector& rY); + double EvaluatePartialDerivative29(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative30(double var_chaste_interface__environment__time, std::vector& rY); + double EvaluatePartialDerivative30(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative31(double var_chaste_interface__environment__time, std::vector& rY); + double EvaluatePartialDerivative31(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative32(double var_chaste_interface__environment__time, std::vector& rY); + double EvaluatePartialDerivative32(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative33(double var_chaste_interface__environment__time, std::vector& rY); + double EvaluatePartialDerivative33(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative34(double var_chaste_interface__environment__time, std::vector& rY); + double EvaluatePartialDerivative34(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative35(double var_chaste_interface__environment__time, std::vector& rY); + double EvaluatePartialDerivative35(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative36(double var_chaste_interface__environment__time, std::vector& rY); + double EvaluatePartialDerivative36(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical=false); + + std::vector ComputeDerivedQuantities(double var_chaste_interface__environment__time, const std::vector & rY); +}; + +// Needs to be included last +#include "SerializationExportWrapper.hpp" +CHASTE_CLASS_EXPORT(Dynamicmatsuoka_model_2003FromCellMLGRL1Opt) + +namespace boost +{ + namespace serialization + { + template + inline void save_construct_data( + Archive & ar, const Dynamicmatsuoka_model_2003FromCellMLGRL1Opt * t, const unsigned int fileVersion) + { + const boost::shared_ptr p_solver = t->GetSolver(); + const boost::shared_ptr p_stimulus = t->GetStimulusFunction(); + ar << p_solver; + ar << p_stimulus; + } + + template + inline void load_construct_data( + Archive & ar, Dynamicmatsuoka_model_2003FromCellMLGRL1Opt * t, const unsigned int fileVersion) + { + boost::shared_ptr p_solver; + boost::shared_ptr p_stimulus; + ar >> p_solver; + ar >> p_stimulus; + ::new(t)Dynamicmatsuoka_model_2003FromCellMLGRL1Opt(p_solver, p_stimulus); + } + + } + +} + +#endif // DYNAMICMATSUOKA_MODEL_2003FROMCELLMLGRL1OPT_HPP_ \ No newline at end of file diff --git a/chaste_codegen/tests/numerical/baseline/GRL2/dynamic_winslow_model_1999.cpp b/chaste_codegen/tests/numerical/baseline/GRL2/dynamic_winslow_model_1999.cpp new file mode 100644 index 00000000..b341b189 --- /dev/null +++ b/chaste_codegen/tests/numerical/baseline/GRL2/dynamic_winslow_model_1999.cpp @@ -0,0 +1,3451 @@ +//! @file +//! +//! This source file was generated from CellML by chaste_codegen version (version omitted as unimportant) +//! +//! Model: winslow_model_1999 +//! +//! Processed by chaste_codegen: https://github.com/ModellingWebLab/chaste-codegen +//! (translator: chaste_codegen, model type: GeneralizedRushLarsenSecondOrder) +//! on (date omitted as unimportant) +//! +//! + +#include "dynamic_winslow_model_1999.hpp" +#include +#include +#include +#include +#include "Exception.hpp" +#include "OdeSystemInformation.hpp" +#include "RegularStimulus.hpp" +#include "HeartConfig.hpp" +#include "IsNan.hpp" +#include "MathsCustomFunctions.hpp" + + + + + + boost::shared_ptr Dynamicwinslow_model_1999FromCellMLGRL2::UseCellMLDefaultStimulus() + { + // Use the default stimulus specified by CellML metadata + const double var_chaste_interface__membrane__stim_amplitude_converted = -21.126799999999999 * HeartConfig::Instance()->GetCapacitance(); // uA_per_cm2 + const double var_chaste_interface__membrane__stim_duration_converted = 2; // millisecond + const double var_chaste_interface__membrane__stim_period_converted = 1000; // millisecond + const double var_chaste_interface__membrane__stim_start_converted = 100; // millisecond + boost::shared_ptr p_cellml_stim(new RegularStimulus( + -fabs(var_chaste_interface__membrane__stim_amplitude_converted), + var_chaste_interface__membrane__stim_duration_converted, + var_chaste_interface__membrane__stim_period_converted, + var_chaste_interface__membrane__stim_start_converted + )); + mpIntracellularStimulus = p_cellml_stim; + return p_cellml_stim; + } + double Dynamicwinslow_model_1999FromCellMLGRL2::GetIntracellularCalciumConcentration() + { + return mStateVariables[1]; + } + Dynamicwinslow_model_1999FromCellMLGRL2::Dynamicwinslow_model_1999FromCellMLGRL2(boost::shared_ptr /* unused; should be empty */, boost::shared_ptr pIntracellularStimulus) + : AbstractGeneralizedRushLarsenCardiacCell( + 33, + 0, + pIntracellularStimulus) + { + // Time units: millisecond + // + this->mpSystemInfo = OdeSystemInformation::Instance(); + Init(); + + // We have a default stimulus specified in the CellML file metadata + this->mHasDefaultStimulusFromCellML = true; + + this->mParameters[0] = 1800; // (var_RyR_channel__v1) [per_second] + this->mParameters[1] = 1; // (var_SERCA2a_pump__K_SR) [dimensionless] + this->mParameters[2] = 1; // (var_intracellular_ion_concentrations__conc_clamp) [dimensionless] + this->mParameters[3] = 2; // (var_standard_ionic_concentrations__Cao) [millimolar] + this->mParameters[4] = 4; // (var_standard_ionic_concentrations__Ko) [millimolar] + this->mParameters[5] = 138; // (var_standard_ionic_concentrations__Nao) [millimolar] + this->mParameters[6] = 0.00031250000000000001; // (var_L_type_Ca_current__P_Ca) [cm_per_second] + this->mParameters[7] = 0.001; // (var_membrane__C_sc) [microF_per_cm2] + this->mParameters[8] = 12.800000000000001; // (var_fast_sodium_current__g_Na) [milliS_per_microF] + this->mParameters[9] = 0; // (var_fast_sodium_current__perc_reduced_inact_for_IpNa) [dimensionless] + this->mParameters[10] = 0; // (var_fast_sodium_current__shift_INa_inact) [millivolt] + this->mParameters[11] = 2.7999999999999998; // (var_time_independent_potassium_current__g_K1) [milliS_per_microF] + this->mParameters[12] = 0.0033999999999999998; // (var_rapid_activating_delayed_rectifiyer_K_current__g_Kr) [milliS_per_microF] + this->mParameters[13] = 0.0027133999999999999; // (var_slow_activating_delayed_rectifiyer_K_current__g_Ks) [milliS_per_microF] + this->mParameters[14] = 0.29999999999999999; // (var_Na_Ca_exchanger__K_NaCa) [microA_per_microF] + this->mParameters[15] = 0.23815; // (var_transient_outward_potassium_current__g_to1) [milliS_per_microF] + } + + Dynamicwinslow_model_1999FromCellMLGRL2::~Dynamicwinslow_model_1999FromCellMLGRL2() + { + } + + + void Dynamicwinslow_model_1999FromCellMLGRL2::VerifyStateVariables() + { + std::vector& rY = rGetStateVariables(); + std::string error_message = ""; + + for (unsigned i=0; i < 33; i++) + { + if(std::isnan(rY[i])) + { + error_message += "State variable " + this->rGetStateVariableNames()[i] + " is not a number\n"; + } + if(std::isinf(rY[i])) + { + error_message += "State variable " + this->rGetStateVariableNames()[i] + " has become INFINITE\n"; + } + if(this->is_concentration[i] && rY[i] < 0) + { + error_message += "Concentration " + this->rGetStateVariableNames()[i] + " below 0\n"; + } + if(this->is_probability[i] && rY[i] < 0) + { + error_message += "Probability " + this->rGetStateVariableNames()[i] + " below 0\n"; + } + if(this->is_probability[i] && rY[i] > 1) + { + error_message += "Probability " + this->rGetStateVariableNames()[i] + " above 1\n"; + } + } + if (error_message != ""){ + EXCEPTION(DumpState(error_message)); + } + } + + double Dynamicwinslow_model_1999FromCellMLGRL2::GetIIonic(const std::vector* pStateVariables) + { + // For state variable interpolation (SVI) we read in interpolated state variables, + // otherwise for ionic current interpolation (ICI) we use the state variables of this model (node). + if (!pStateVariables) pStateVariables = &rGetStateVariables(); + const std::vector& rY = *pStateVariables; + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -96.1638 + double var_chaste_interface__intracellular_ion_concentrations__Cai = rY[1]; + // Units: millimolar; Initial value: 8e-05 + double var_chaste_interface__fast_sodium_current_m_gate__m = rY[2]; + // Units: dimensionless; Initial value: 0.0328302 + double var_chaste_interface__fast_sodium_current_h_gate__h = rY[3]; + // Units: dimensionless; Initial value: 0.988354 + double var_chaste_interface__fast_sodium_current_j_gate__j = rY[4]; + // Units: dimensionless; Initial value: 0.99254 + double var_chaste_interface__rapid_activating_delayed_rectifiyer_K_current_X_kr_gate__X_kr = rY[5]; + // Units: dimensionless; Initial value: 0.51 + double var_chaste_interface__slow_activating_delayed_rectifiyer_K_current_X_ks_gate__X_ks = rY[6]; + // Units: dimensionless; Initial value: 0.264 + double var_chaste_interface__transient_outward_potassium_current_X_to1_gate__X_to1 = rY[7]; + // Units: dimensionless; Initial value: 2.63 + double var_chaste_interface__transient_outward_potassium_current_Y_to1_gate__Y_to1 = rY[8]; + // Units: dimensionless; Initial value: 0.99 + double var_chaste_interface__L_type_Ca_current__O = rY[9]; + // Units: dimensionless; Initial value: 9.84546e-21 + double var_chaste_interface__L_type_Ca_current__O_Ca = rY[10]; + // Units: dimensionless; Initial value: 0.0 + double var_chaste_interface__L_type_Ca_current_y_gate__y = rY[21]; + // Units: dimensionless; Initial value: 0.798 + double var_chaste_interface__intracellular_ion_concentrations__Nai = rY[28]; + // Units: millimolar; Initial value: 10.0 + double var_chaste_interface__intracellular_ion_concentrations__Ki = rY[29]; + // Units: millimolar; Initial value: 157.8 + + const double var_L_type_Ca_current__P_K = 5.7899999999999998e-7; // cm_per_second + const double var_L_type_Ca_current__i_Ca_half = -0.26500000000000001; // microA_per_microF + const double var_Na_Ca_exchanger__K_mCa = 1.3799999999999999; // millimolar + const double var_Na_Ca_exchanger__K_mNa = 87.5; // millimolar + const double var_Na_Ca_exchanger__K_sat = 0.20000000000000001; // dimensionless + const double var_Na_Ca_exchanger__eta = 0.34999999999999998; // dimensionless + const double var_calcium_background_current__g_Cab = 0.00038420000000000001; // milliS_per_microF + const double var_membrane__F = 96.485341500000004; // coulomb_per_millimole + const double var_membrane__R = 8.3144720000000003; // joule_per_mole_kelvin + const double var_membrane__T = 310; // kelvin + const double var_plateau_potassium_current__g_Kp = 0.0022160000000000001; // milliS_per_microF + const double var_plateau_potassium_current_Kp_gate__Kp_V = 1 / (1 + exp(1.2521739130434781 - 0.16722408026755853 * var_chaste_interface__membrane__V)); // dimensionless + const double var_rapid_activating_delayed_rectifiyer_K_current__R_V = 1 / (1 + 1.4944999999999999 * exp(0.044600000000000001 * var_chaste_interface__membrane__V)); // dimensionless + const double var_sarcolemmal_calcium_pump__I_pCa = 0.050000000000000003; // microA_per_microF + const double var_sarcolemmal_calcium_pump__K_mpCa = 5.0000000000000002e-5; // millimolar + const double var_sarcolemmal_calcium_pump__i_p_Ca = var_chaste_interface__intracellular_ion_concentrations__Cai * var_sarcolemmal_calcium_pump__I_pCa / (var_chaste_interface__intracellular_ion_concentrations__Cai + var_sarcolemmal_calcium_pump__K_mpCa); // microA_per_microF + const double var_sodium_background_current__g_Nab = 0.0030999999999999999; // milliS_per_microF + const double var_sodium_potassium_pump__I_NaK = 0.69299999999999995; // microA_per_microF + const double var_sodium_potassium_pump__K_mKo = 1.5; // millimolar + const double var_sodium_potassium_pump__K_mNai = 10; // millimolar + const double var_L_type_Ca_current__i_Ca_max = 4000 * pow(var_membrane__F, 2) * (0.001 * exp(2 * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T)) - 0.34100000000000003 * mParameters[3]) * mParameters[6] * var_chaste_interface__membrane__V / ((-1 + exp(2 * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * var_membrane__R * var_membrane__T); // microA_per_microF + const double var_L_type_Ca_current__i_Ca = (var_chaste_interface__L_type_Ca_current__O + var_chaste_interface__L_type_Ca_current__O_Ca) * var_L_type_Ca_current__i_Ca_max * var_chaste_interface__L_type_Ca_current_y_gate__y; // microA_per_microF + const double var_L_type_Ca_current__i_Ca_converted = HeartConfig::Instance()->GetCapacitance() * var_L_type_Ca_current__i_Ca; // uA_per_cm2 + const double var_L_type_Ca_current__p_prime_k = var_L_type_Ca_current__P_K / (1 + var_L_type_Ca_current__i_Ca_max / var_L_type_Ca_current__i_Ca_half); // cm_per_second + const double var_calcium_background_current__E_Ca = 0.5 * var_membrane__R * var_membrane__T * log(mParameters[3] / var_chaste_interface__intracellular_ion_concentrations__Cai) / var_membrane__F; // millivolt + const double var_calcium_background_current__i_Ca_b = (-var_calcium_background_current__E_Ca + var_chaste_interface__membrane__V) * var_calcium_background_current__g_Cab; // microA_per_microF + const double var_L_type_Ca_current__i_Ca_K = pow(var_membrane__F, 2) * (-mParameters[4] + var_chaste_interface__intracellular_ion_concentrations__Ki * exp(var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * (var_chaste_interface__L_type_Ca_current__O + var_chaste_interface__L_type_Ca_current__O_Ca) * var_L_type_Ca_current__p_prime_k * var_chaste_interface__L_type_Ca_current_y_gate__y * var_chaste_interface__membrane__V / ((-1 + exp(var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * var_membrane__R * var_membrane__T); // microA_per_microF + const double var_rapid_activating_delayed_rectifiyer_K_current__E_K = var_membrane__R * var_membrane__T * log(mParameters[4] / var_chaste_interface__intracellular_ion_concentrations__Ki) / var_membrane__F; // millivolt + const double var_plateau_potassium_current__i_Kp = (-var_rapid_activating_delayed_rectifiyer_K_current__E_K + var_chaste_interface__membrane__V) * var_plateau_potassium_current__g_Kp * var_plateau_potassium_current_Kp_gate__Kp_V; // microA_per_microF + const double var_rapid_activating_delayed_rectifiyer_K_current__f_Ko = 0.5 * sqrt(mParameters[4]); // dimensionless + const double var_rapid_activating_delayed_rectifiyer_K_current__i_Kr = (-var_rapid_activating_delayed_rectifiyer_K_current__E_K + var_chaste_interface__membrane__V) * var_rapid_activating_delayed_rectifiyer_K_current__R_V * var_rapid_activating_delayed_rectifiyer_K_current__f_Ko * mParameters[12] * var_chaste_interface__rapid_activating_delayed_rectifiyer_K_current_X_kr_gate__X_kr; // microA_per_microF + const double var_rapid_activating_delayed_rectifiyer_K_current__i_Kr_converted = HeartConfig::Instance()->GetCapacitance() * var_rapid_activating_delayed_rectifiyer_K_current__i_Kr; // uA_per_cm2 + const double var_Na_Ca_exchanger__i_NaCa = 5000 * (pow(var_chaste_interface__intracellular_ion_concentrations__Nai, 3) * mParameters[3] * exp(var_Na_Ca_exchanger__eta * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T)) - pow(mParameters[5], 3) * var_chaste_interface__intracellular_ion_concentrations__Cai * exp((-1 + var_Na_Ca_exchanger__eta) * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * mParameters[14] / ((1 + var_Na_Ca_exchanger__K_sat * exp((-1 + var_Na_Ca_exchanger__eta) * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * (pow(var_Na_Ca_exchanger__K_mNa, 3) + pow(mParameters[5], 3)) * (var_Na_Ca_exchanger__K_mCa + mParameters[3])); // microA_per_microF + const double var_Na_Ca_exchanger__i_NaCa_converted = HeartConfig::Instance()->GetCapacitance() * var_Na_Ca_exchanger__i_NaCa; // uA_per_cm2 + const double var_fast_sodium_current__E_Na = var_membrane__R * var_membrane__T * log(mParameters[5] / var_chaste_interface__intracellular_ion_concentrations__Nai) / var_membrane__F; // millivolt + const double var_fast_sodium_current__i_Na = pow(var_chaste_interface__fast_sodium_current_m_gate__m, 3) * (-var_fast_sodium_current__E_Na + var_chaste_interface__membrane__V) * mParameters[8] * var_chaste_interface__fast_sodium_current_h_gate__h * var_chaste_interface__fast_sodium_current_j_gate__j; // microA_per_microF + const double var_fast_sodium_current__i_Na_converted = HeartConfig::Instance()->GetCapacitance() * var_fast_sodium_current__i_Na; // uA_per_cm2 + const double var_slow_activating_delayed_rectifiyer_K_current__E_Ks = var_membrane__R * var_membrane__T * log((mParameters[4] + 0.018329999999999999 * mParameters[5]) / (var_chaste_interface__intracellular_ion_concentrations__Ki + 0.018329999999999999 * var_chaste_interface__intracellular_ion_concentrations__Nai)) / var_membrane__F; // millivolt + const double var_slow_activating_delayed_rectifiyer_K_current__i_Ks = pow(var_chaste_interface__slow_activating_delayed_rectifiyer_K_current_X_ks_gate__X_ks, 2) * (-var_slow_activating_delayed_rectifiyer_K_current__E_Ks + var_chaste_interface__membrane__V) * mParameters[13]; // microA_per_microF + const double var_slow_activating_delayed_rectifiyer_K_current__i_Ks_converted = HeartConfig::Instance()->GetCapacitance() * var_slow_activating_delayed_rectifiyer_K_current__i_Ks; // uA_per_cm2 + const double var_sodium_background_current__i_Na_b = (-var_fast_sodium_current__E_Na + var_chaste_interface__membrane__V) * var_sodium_background_current__g_Nab; // microA_per_microF + const double var_sodium_potassium_pump__sigma = -0.14285714285714285 + 0.14285714285714285 * exp(0.01485884101040119 * mParameters[5]); // dimensionless + const double var_sodium_potassium_pump__f_NaK = 1 / (1 + 0.1245 * exp(-0.10000000000000001 * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T)) + 0.036499999999999998 * var_sodium_potassium_pump__sigma * exp(-var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))); // dimensionless + const double var_sodium_potassium_pump__i_NaK = var_sodium_potassium_pump__I_NaK * var_sodium_potassium_pump__f_NaK * mParameters[4] / ((1 + pow((var_sodium_potassium_pump__K_mNai / var_chaste_interface__intracellular_ion_concentrations__Nai), 1.5)) * (var_sodium_potassium_pump__K_mKo + mParameters[4])); // microA_per_microF + const double var_time_independent_potassium_current__K_mK1 = 13; // millimolar + const double var_time_independent_potassium_current_K1_gate__K1_infinity_V = 1 / (2 + exp(1.5 * (-var_rapid_activating_delayed_rectifiyer_K_current__E_K + var_chaste_interface__membrane__V) * var_membrane__F / (var_membrane__R * var_membrane__T))); // dimensionless + const double var_time_independent_potassium_current__i_K1 = (-var_rapid_activating_delayed_rectifiyer_K_current__E_K + var_chaste_interface__membrane__V) * mParameters[4] * mParameters[11] * var_time_independent_potassium_current_K1_gate__K1_infinity_V / (mParameters[4] + var_time_independent_potassium_current__K_mK1); // microA_per_microF + const double var_time_independent_potassium_current__i_K1_converted = HeartConfig::Instance()->GetCapacitance() * var_time_independent_potassium_current__i_K1; // uA_per_cm2 + const double var_transient_outward_potassium_current__i_to1 = (-var_rapid_activating_delayed_rectifiyer_K_current__E_K + var_chaste_interface__membrane__V) * mParameters[15] * var_chaste_interface__transient_outward_potassium_current_X_to1_gate__X_to1 * var_chaste_interface__transient_outward_potassium_current_Y_to1_gate__Y_to1; // microA_per_microF + const double var_transient_outward_potassium_current__i_to1_converted = HeartConfig::Instance()->GetCapacitance() * var_transient_outward_potassium_current__i_to1; // uA_per_cm2 + const double var_chaste_interface__i_ionic = HeartConfig::Instance()->GetCapacitance() * var_L_type_Ca_current__i_Ca_K + HeartConfig::Instance()->GetCapacitance() * var_calcium_background_current__i_Ca_b + HeartConfig::Instance()->GetCapacitance() * var_plateau_potassium_current__i_Kp + HeartConfig::Instance()->GetCapacitance() * var_sarcolemmal_calcium_pump__i_p_Ca + HeartConfig::Instance()->GetCapacitance() * var_sodium_background_current__i_Na_b + HeartConfig::Instance()->GetCapacitance() * var_sodium_potassium_pump__i_NaK + var_L_type_Ca_current__i_Ca_converted + var_Na_Ca_exchanger__i_NaCa_converted + var_fast_sodium_current__i_Na_converted + var_rapid_activating_delayed_rectifiyer_K_current__i_Kr_converted + var_slow_activating_delayed_rectifiyer_K_current__i_Ks_converted + var_time_independent_potassium_current__i_K1_converted + var_transient_outward_potassium_current__i_to1_converted; // uA_per_cm2 + + const double i_ionic = var_chaste_interface__i_ionic; + EXCEPT_IF_NOT(!std::isnan(i_ionic)); + return i_ionic; + } + + void Dynamicwinslow_model_1999FromCellMLGRL2::UpdateTransmembranePotential(double var_chaste_interface__environment__time_converted) + { + std::vector& rY = rGetStateVariables(); + const unsigned v_index = GetVoltageIndex(); + const double delta = 1e-8; + const double yinit = rY[v_index]; + + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -96.1638 + double var_chaste_interface__intracellular_ion_concentrations__Cai = rY[1]; + // Units: millimolar; Initial value: 8e-05 + double var_chaste_interface__fast_sodium_current_m_gate__m = rY[2]; + // Units: dimensionless; Initial value: 0.0328302 + double var_chaste_interface__fast_sodium_current_h_gate__h = rY[3]; + // Units: dimensionless; Initial value: 0.988354 + double var_chaste_interface__fast_sodium_current_j_gate__j = rY[4]; + // Units: dimensionless; Initial value: 0.99254 + double var_chaste_interface__rapid_activating_delayed_rectifiyer_K_current_X_kr_gate__X_kr = rY[5]; + // Units: dimensionless; Initial value: 0.51 + double var_chaste_interface__slow_activating_delayed_rectifiyer_K_current_X_ks_gate__X_ks = rY[6]; + // Units: dimensionless; Initial value: 0.264 + double var_chaste_interface__transient_outward_potassium_current_X_to1_gate__X_to1 = rY[7]; + // Units: dimensionless; Initial value: 2.63 + double var_chaste_interface__transient_outward_potassium_current_Y_to1_gate__Y_to1 = rY[8]; + // Units: dimensionless; Initial value: 0.99 + double var_chaste_interface__L_type_Ca_current__O = rY[9]; + // Units: dimensionless; Initial value: 9.84546e-21 + double var_chaste_interface__L_type_Ca_current__O_Ca = rY[10]; + // Units: dimensionless; Initial value: 0.0 + double var_chaste_interface__L_type_Ca_current_y_gate__y = rY[21]; + // Units: dimensionless; Initial value: 0.798 + double var_chaste_interface__intracellular_ion_concentrations__Nai = rY[28]; + // Units: millimolar; Initial value: 10.0 + double var_chaste_interface__intracellular_ion_concentrations__Ki = rY[29]; + // Units: millimolar; Initial value: 157.8 + + + // Mathematics + double d_dt_chaste_interface_var_membrane__V; + const double var_L_type_Ca_current__P_K = 5.7899999999999998e-7; // cm_per_second + const double var_L_type_Ca_current__i_Ca_half = -0.26500000000000001; // microA_per_microF + const double var_Na_Ca_exchanger__K_mCa = 1.3799999999999999; // millimolar + const double var_Na_Ca_exchanger__K_mNa = 87.5; // millimolar + const double var_Na_Ca_exchanger__K_sat = 0.20000000000000001; // dimensionless + const double var_Na_Ca_exchanger__eta = 0.34999999999999998; // dimensionless + const double var_calcium_background_current__g_Cab = 0.00038420000000000001; // milliS_per_microF + const double var_membrane__F = 96.485341500000004; // coulomb_per_millimole + const double var_membrane__R = 8.3144720000000003; // joule_per_mole_kelvin + const double var_membrane__T = 310; // kelvin + const double var_membrane__i_Stim_converted = GetIntracellularAreaStimulus(var_chaste_interface__environment__time_converted); // uA_per_cm2 + const double var_membrane__i_Stim = var_membrane__i_Stim_converted / HeartConfig::Instance()->GetCapacitance(); // microA_per_microF + const double var_plateau_potassium_current__g_Kp = 0.0022160000000000001; // milliS_per_microF + const double var_plateau_potassium_current_Kp_gate__Kp_V = 1 / (1 + exp(1.2521739130434781 - 0.16722408026755853 * var_chaste_interface__membrane__V)); // dimensionless + const double var_rapid_activating_delayed_rectifiyer_K_current__R_V = 1 / (1 + 1.4944999999999999 * exp(0.044600000000000001 * var_chaste_interface__membrane__V)); // dimensionless + const double var_sarcolemmal_calcium_pump__I_pCa = 0.050000000000000003; // microA_per_microF + const double var_sarcolemmal_calcium_pump__K_mpCa = 5.0000000000000002e-5; // millimolar + const double var_sarcolemmal_calcium_pump__i_p_Ca = var_chaste_interface__intracellular_ion_concentrations__Cai * var_sarcolemmal_calcium_pump__I_pCa / (var_chaste_interface__intracellular_ion_concentrations__Cai + var_sarcolemmal_calcium_pump__K_mpCa); // microA_per_microF + const double var_sodium_background_current__g_Nab = 0.0030999999999999999; // milliS_per_microF + const double var_sodium_potassium_pump__I_NaK = 0.69299999999999995; // microA_per_microF + const double var_sodium_potassium_pump__K_mKo = 1.5; // millimolar + const double var_sodium_potassium_pump__K_mNai = 10; // millimolar + const double var_L_type_Ca_current__i_Ca_max = 4000 * pow(var_membrane__F, 2) * (0.001 * exp(2 * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T)) - 0.34100000000000003 * mParameters[3]) * mParameters[6] * var_chaste_interface__membrane__V / ((-1 + exp(2 * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * var_membrane__R * var_membrane__T); // microA_per_microF + const double var_L_type_Ca_current__i_Ca = (var_chaste_interface__L_type_Ca_current__O + var_chaste_interface__L_type_Ca_current__O_Ca) * var_L_type_Ca_current__i_Ca_max * var_chaste_interface__L_type_Ca_current_y_gate__y; // microA_per_microF + const double var_L_type_Ca_current__p_prime_k = var_L_type_Ca_current__P_K / (1 + var_L_type_Ca_current__i_Ca_max / var_L_type_Ca_current__i_Ca_half); // cm_per_second + const double var_calcium_background_current__E_Ca = 0.5 * var_membrane__R * var_membrane__T * log(mParameters[3] / var_chaste_interface__intracellular_ion_concentrations__Cai) / var_membrane__F; // millivolt + const double var_calcium_background_current__i_Ca_b = (-var_calcium_background_current__E_Ca + var_chaste_interface__membrane__V) * var_calcium_background_current__g_Cab; // microA_per_microF + const double var_L_type_Ca_current__i_Ca_K = pow(var_membrane__F, 2) * (-mParameters[4] + var_chaste_interface__intracellular_ion_concentrations__Ki * exp(var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * (var_chaste_interface__L_type_Ca_current__O + var_chaste_interface__L_type_Ca_current__O_Ca) * var_L_type_Ca_current__p_prime_k * var_chaste_interface__L_type_Ca_current_y_gate__y * var_chaste_interface__membrane__V / ((-1 + exp(var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * var_membrane__R * var_membrane__T); // microA_per_microF + const double var_rapid_activating_delayed_rectifiyer_K_current__E_K = var_membrane__R * var_membrane__T * log(mParameters[4] / var_chaste_interface__intracellular_ion_concentrations__Ki) / var_membrane__F; // millivolt + const double var_plateau_potassium_current__i_Kp = (-var_rapid_activating_delayed_rectifiyer_K_current__E_K + var_chaste_interface__membrane__V) * var_plateau_potassium_current__g_Kp * var_plateau_potassium_current_Kp_gate__Kp_V; // microA_per_microF + const double var_rapid_activating_delayed_rectifiyer_K_current__f_Ko = 0.5 * sqrt(mParameters[4]); // dimensionless + const double var_rapid_activating_delayed_rectifiyer_K_current__i_Kr = (-var_rapid_activating_delayed_rectifiyer_K_current__E_K + var_chaste_interface__membrane__V) * var_rapid_activating_delayed_rectifiyer_K_current__R_V * var_rapid_activating_delayed_rectifiyer_K_current__f_Ko * mParameters[12] * var_chaste_interface__rapid_activating_delayed_rectifiyer_K_current_X_kr_gate__X_kr; // microA_per_microF + const double var_Na_Ca_exchanger__i_NaCa = 5000 * (pow(var_chaste_interface__intracellular_ion_concentrations__Nai, 3) * mParameters[3] * exp(var_Na_Ca_exchanger__eta * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T)) - pow(mParameters[5], 3) * var_chaste_interface__intracellular_ion_concentrations__Cai * exp((-1 + var_Na_Ca_exchanger__eta) * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * mParameters[14] / ((1 + var_Na_Ca_exchanger__K_sat * exp((-1 + var_Na_Ca_exchanger__eta) * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * (pow(var_Na_Ca_exchanger__K_mNa, 3) + pow(mParameters[5], 3)) * (var_Na_Ca_exchanger__K_mCa + mParameters[3])); // microA_per_microF + const double var_fast_sodium_current__E_Na = var_membrane__R * var_membrane__T * log(mParameters[5] / var_chaste_interface__intracellular_ion_concentrations__Nai) / var_membrane__F; // millivolt + const double var_fast_sodium_current__i_Na = pow(var_chaste_interface__fast_sodium_current_m_gate__m, 3) * (-var_fast_sodium_current__E_Na + var_chaste_interface__membrane__V) * mParameters[8] * var_chaste_interface__fast_sodium_current_h_gate__h * var_chaste_interface__fast_sodium_current_j_gate__j; // microA_per_microF + const double var_slow_activating_delayed_rectifiyer_K_current__E_Ks = var_membrane__R * var_membrane__T * log((mParameters[4] + 0.018329999999999999 * mParameters[5]) / (var_chaste_interface__intracellular_ion_concentrations__Ki + 0.018329999999999999 * var_chaste_interface__intracellular_ion_concentrations__Nai)) / var_membrane__F; // millivolt + const double var_slow_activating_delayed_rectifiyer_K_current__i_Ks = pow(var_chaste_interface__slow_activating_delayed_rectifiyer_K_current_X_ks_gate__X_ks, 2) * (-var_slow_activating_delayed_rectifiyer_K_current__E_Ks + var_chaste_interface__membrane__V) * mParameters[13]; // microA_per_microF + const double var_sodium_background_current__i_Na_b = (-var_fast_sodium_current__E_Na + var_chaste_interface__membrane__V) * var_sodium_background_current__g_Nab; // microA_per_microF + const double var_sodium_potassium_pump__sigma = -0.14285714285714285 + 0.14285714285714285 * exp(0.01485884101040119 * mParameters[5]); // dimensionless + const double var_sodium_potassium_pump__f_NaK = 1 / (1 + 0.1245 * exp(-0.10000000000000001 * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T)) + 0.036499999999999998 * var_sodium_potassium_pump__sigma * exp(-var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))); // dimensionless + const double var_sodium_potassium_pump__i_NaK = var_sodium_potassium_pump__I_NaK * var_sodium_potassium_pump__f_NaK * mParameters[4] / ((1 + pow((var_sodium_potassium_pump__K_mNai / var_chaste_interface__intracellular_ion_concentrations__Nai), 1.5)) * (var_sodium_potassium_pump__K_mKo + mParameters[4])); // microA_per_microF + const double var_time_independent_potassium_current__K_mK1 = 13; // millimolar + const double var_time_independent_potassium_current_K1_gate__K1_infinity_V = 1 / (2 + exp(1.5 * (-var_rapid_activating_delayed_rectifiyer_K_current__E_K + var_chaste_interface__membrane__V) * var_membrane__F / (var_membrane__R * var_membrane__T))); // dimensionless + const double var_time_independent_potassium_current__i_K1 = (-var_rapid_activating_delayed_rectifiyer_K_current__E_K + var_chaste_interface__membrane__V) * mParameters[4] * mParameters[11] * var_time_independent_potassium_current_K1_gate__K1_infinity_V / (mParameters[4] + var_time_independent_potassium_current__K_mK1); // microA_per_microF + const double var_transient_outward_potassium_current__i_to1 = (-var_rapid_activating_delayed_rectifiyer_K_current__E_K + var_chaste_interface__membrane__V) * mParameters[15] * var_chaste_interface__transient_outward_potassium_current_X_to1_gate__X_to1 * var_chaste_interface__transient_outward_potassium_current_Y_to1_gate__Y_to1; // microA_per_microF + const double var_membrane__V_orig_deriv = -(var_L_type_Ca_current__i_Ca + var_L_type_Ca_current__i_Ca_K + var_Na_Ca_exchanger__i_NaCa + var_calcium_background_current__i_Ca_b + var_fast_sodium_current__i_Na + var_membrane__i_Stim + var_plateau_potassium_current__i_Kp + var_rapid_activating_delayed_rectifiyer_K_current__i_Kr + var_sarcolemmal_calcium_pump__i_p_Ca + var_slow_activating_delayed_rectifiyer_K_current__i_Ks + var_sodium_background_current__i_Na_b + var_sodium_potassium_pump__i_NaK + var_time_independent_potassium_current__i_K1 + var_transient_outward_potassium_current__i_to1) / mParameters[7]; // millivolt / second + d_dt_chaste_interface_var_membrane__V = 0.001 * var_membrane__V_orig_deriv; // millivolt / millisecond + + double evalF = d_dt_chaste_interface_var_membrane__V; + mEvalF[0] = d_dt_chaste_interface_var_membrane__V; + double partialF = EvaluatePartialDerivative0(var_chaste_interface__environment__time_converted, rY, delta, true); + if (fabs(partialF) < delta) + { + rY[v_index] += 0.5*evalF*mDt; + } + else + { + rY[v_index] += (evalF/partialF)*(exp(partialF*0.5*mDt)-1.0); + } + + rY[v_index] = yinit; + evalF = EvaluateYDerivative0(var_chaste_interface__environment__time_converted, rY); + mEvalF[0] = evalF; + partialF = EvaluatePartialDerivative0(var_chaste_interface__environment__time_converted, rY, delta, true); + if (fabs(partialF) < delta) + { + rY[v_index] = yinit + evalF*mDt; + } + else + { + rY[v_index] = yinit + (evalF/partialF)*(exp(partialF*mDt)-1.0); + } + } + + void Dynamicwinslow_model_1999FromCellMLGRL2::ComputeOneStepExceptVoltage(double var_chaste_interface__environment__time_converted) + { + std::vector& rY = rGetStateVariables(); + const double delta=1e-8; + const unsigned size = GetNumberOfStateVariables(); + mYInit = rY; + double y_save; + + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -96.1638 + double var_chaste_interface__intracellular_ion_concentrations__Cai = rY[1]; + // Units: millimolar; Initial value: 8e-05 + double var_chaste_interface__fast_sodium_current_m_gate__m = rY[2]; + // Units: dimensionless; Initial value: 0.0328302 + double var_chaste_interface__fast_sodium_current_h_gate__h = rY[3]; + // Units: dimensionless; Initial value: 0.988354 + double var_chaste_interface__fast_sodium_current_j_gate__j = rY[4]; + // Units: dimensionless; Initial value: 0.99254 + double var_chaste_interface__rapid_activating_delayed_rectifiyer_K_current_X_kr_gate__X_kr = rY[5]; + // Units: dimensionless; Initial value: 0.51 + double var_chaste_interface__slow_activating_delayed_rectifiyer_K_current_X_ks_gate__X_ks = rY[6]; + // Units: dimensionless; Initial value: 0.264 + double var_chaste_interface__transient_outward_potassium_current_X_to1_gate__X_to1 = rY[7]; + // Units: dimensionless; Initial value: 2.63 + double var_chaste_interface__transient_outward_potassium_current_Y_to1_gate__Y_to1 = rY[8]; + // Units: dimensionless; Initial value: 0.99 + double var_chaste_interface__L_type_Ca_current__O = rY[9]; + // Units: dimensionless; Initial value: 9.84546e-21 + double var_chaste_interface__L_type_Ca_current__O_Ca = rY[10]; + // Units: dimensionless; Initial value: 0.0 + double var_chaste_interface__L_type_Ca_current__C0 = rY[11]; + // Units: dimensionless; Initial value: 0.997208 + double var_chaste_interface__L_type_Ca_current__C1 = rY[12]; + // Units: dimensionless; Initial value: 6.38897e-05 + double var_chaste_interface__L_type_Ca_current__C2 = rY[13]; + // Units: dimensionless; Initial value: 1.535e-09 + double var_chaste_interface__L_type_Ca_current__C3 = rY[14]; + // Units: dimensionless; Initial value: 1.63909e-14 + double var_chaste_interface__L_type_Ca_current__C4 = rY[15]; + // Units: dimensionless; Initial value: 6.56337e-20 + double var_chaste_interface__L_type_Ca_current__C_Ca0 = rY[16]; + // Units: dimensionless; Initial value: 0.00272826 + double var_chaste_interface__L_type_Ca_current__C_Ca1 = rY[17]; + // Units: dimensionless; Initial value: 6.99215e-07 + double var_chaste_interface__L_type_Ca_current__C_Ca2 = rY[18]; + // Units: dimensionless; Initial value: 6.71989e-11 + double var_chaste_interface__L_type_Ca_current__C_Ca3 = rY[19]; + // Units: dimensionless; Initial value: 2.87031e-15 + double var_chaste_interface__L_type_Ca_current__C_Ca4 = rY[20]; + // Units: dimensionless; Initial value: 4.59752e-20 + double var_chaste_interface__L_type_Ca_current_y_gate__y = rY[21]; + // Units: dimensionless; Initial value: 0.798 + double var_chaste_interface__RyR_channel__P_O1 = rY[22]; + // Units: dimensionless; Initial value: 0.0 + double var_chaste_interface__RyR_channel__P_O2 = rY[23]; + // Units: dimensionless; Initial value: 0.0 + double var_chaste_interface__RyR_channel__P_C1 = rY[24]; + // Units: dimensionless; Initial value: 0.47 + double var_chaste_interface__RyR_channel__P_C2 = rY[25]; + // Units: dimensionless; Initial value: 0.53 + double var_chaste_interface__intracellular_Ca_fluxes__HTRPNCa = rY[26]; + // Units: millimolar; Initial value: 0.98 + double var_chaste_interface__intracellular_Ca_fluxes__LTRPNCa = rY[27]; + // Units: millimolar; Initial value: 0.078 + double var_chaste_interface__intracellular_ion_concentrations__Nai = rY[28]; + // Units: millimolar; Initial value: 10.0 + double var_chaste_interface__intracellular_ion_concentrations__Ki = rY[29]; + // Units: millimolar; Initial value: 157.8 + double var_chaste_interface__intracellular_ion_concentrations__Ca_ss = rY[30]; + // Units: millimolar; Initial value: 0.00011 + double var_chaste_interface__intracellular_ion_concentrations__Ca_JSR = rY[31]; + // Units: millimolar; Initial value: 0.257 + double var_chaste_interface__intracellular_ion_concentrations__Ca_NSR = rY[32]; + // Units: millimolar; Initial value: 0.257 + + + // Mathematics + double d_dt_chaste_interface_var_membrane__V; + const double var_L_type_Ca_current__P_K = 5.7899999999999998e-7; // cm_per_second + const double var_L_type_Ca_current__a = 2; // dimensionless + const double var_L_type_Ca_current__b = 2; // dimensionless + const double var_L_type_Ca_current__f = 300; // per_second + const double var_L_type_Ca_current__fprime = 7; // per_second + const double var_L_type_Ca_current__g = 2000; // per_second + const double var_L_type_Ca_current__O_orig_deriv = var_chaste_interface__L_type_Ca_current__C4 * var_L_type_Ca_current__f - var_chaste_interface__L_type_Ca_current__O * var_L_type_Ca_current__g; // 1 / second + const double d_dt_chaste_interface_var_L_type_Ca_current__O = 0.001 * var_L_type_Ca_current__O_orig_deriv; // 1 / millisecond + const double var_L_type_Ca_current__gprime = 7000; // per_second + const double var_L_type_Ca_current__O_Ca_orig_deriv = var_chaste_interface__L_type_Ca_current__C_Ca4 * var_L_type_Ca_current__fprime - var_chaste_interface__L_type_Ca_current__O_Ca * var_L_type_Ca_current__gprime; // 1 / second + const double d_dt_chaste_interface_var_L_type_Ca_current__O_Ca = 0.001 * var_L_type_Ca_current__O_Ca_orig_deriv; // 1 / millisecond + const double var_L_type_Ca_current__i_Ca_half = -0.26500000000000001; // microA_per_microF + const double var_L_type_Ca_current__omega = 10; // per_second + const double var_Na_Ca_exchanger__K_mCa = 1.3799999999999999; // millimolar + const double var_Na_Ca_exchanger__K_mNa = 87.5; // millimolar + const double var_Na_Ca_exchanger__K_sat = 0.20000000000000001; // dimensionless + const double var_Na_Ca_exchanger__eta = 0.34999999999999998; // dimensionless + const double var_RyR_channel__k_a_minus = 576; // per_second + const double var_RyR_channel__k_a_plus = 12150000000000.0; // millimolar4_per_second + const double var_RyR_channel__k_b_minus = 1930; // per_second + const double var_RyR_channel__k_b_plus = 4050000000.0; // millimolar3_per_second + const double var_RyR_channel__k_c_minus = 0.80000000000000004; // per_second + const double var_RyR_channel__k_c_plus = 100; // per_second + const double var_RyR_channel__P_C2_orig_deriv = var_chaste_interface__RyR_channel__P_O1 * var_RyR_channel__k_c_plus - var_chaste_interface__RyR_channel__P_C2 * var_RyR_channel__k_c_minus; // 1 / second + const double d_dt_chaste_interface_var_RyR_channel__P_C2 = 0.001 * var_RyR_channel__P_C2_orig_deriv; // 1 / millisecond + const double var_RyR_channel__m = 3; // dimensionless + const double var_RyR_channel__n = 4; // dimensionless + const double var_SERCA2a_pump__K_fb = 0.00016799999999999999; // millimolar + const double var_SERCA2a_pump__K_rb = 3.29; // millimolar + const double var_SERCA2a_pump__N_fb = 1.2; // dimensionless + const double var_SERCA2a_pump__N_rb = 1; // dimensionless + const double var_SERCA2a_pump__Vmaxf = 0.081299999999999997; // millimolar_per_second + const double var_SERCA2a_pump__Vmaxr = 0.318; // millimolar_per_second + const double var_calcium_background_current__g_Cab = 0.00038420000000000001; // milliS_per_microF + const double var_intracellular_Ca_fluxes__HTRPN_tot = 0.14000000000000001; // dimensionless + const double var_intracellular_Ca_fluxes__LTRPN_tot = 0.070000000000000007; // dimensionless + const double var_intracellular_Ca_fluxes__k_htrpn_minus = 0.066000000000000003; // per_second + const double var_intracellular_Ca_fluxes__k_htrpn_plus = 20000; // per_millimolar_second + const double var_intracellular_Ca_fluxes__k_ltrpn_minus = 40; // per_second + const double var_intracellular_Ca_fluxes__k_ltrpn_plus = 40000; // per_millimolar_second + const double var_intracellular_Ca_fluxes__tau_tr = 0.00057470000000000004; // second + const double var_intracellular_Ca_fluxes__tau_xfer = 0.026700000000000002; // second + const double var_intracellular_ion_concentrations__A_cap = 0.00015339999999999999; // cm2 + const double var_intracellular_ion_concentrations__CMDN_tot = 0.050000000000000003; // millimolar + const double var_intracellular_ion_concentrations__CSQN_tot = 15; // millimolar + const double var_SERCA2a_pump__rb = pow((var_chaste_interface__intracellular_ion_concentrations__Ca_NSR / var_SERCA2a_pump__K_rb), var_SERCA2a_pump__N_rb); // dimensionless + const double var_intracellular_Ca_fluxes__J_tr = (-var_chaste_interface__intracellular_ion_concentrations__Ca_JSR + var_chaste_interface__intracellular_ion_concentrations__Ca_NSR) / var_intracellular_Ca_fluxes__tau_tr; // millimolar_per_second + const double var_L_type_Ca_current__gamma = 103.75 * var_chaste_interface__intracellular_ion_concentrations__Ca_ss; // per_second + const double var_RyR_channel__J_rel = (-var_chaste_interface__intracellular_ion_concentrations__Ca_ss + var_chaste_interface__intracellular_ion_concentrations__Ca_JSR) * (var_chaste_interface__RyR_channel__P_O1 + var_chaste_interface__RyR_channel__P_O2) * mParameters[0]; // millimolar_per_second + const double var_RyR_channel__P_C1_orig_deriv = var_chaste_interface__RyR_channel__P_O1 * var_RyR_channel__k_a_minus - pow(var_chaste_interface__intracellular_ion_concentrations__Ca_ss, var_RyR_channel__n) * var_chaste_interface__RyR_channel__P_C1 * var_RyR_channel__k_a_plus; // 1 / second + const double d_dt_chaste_interface_var_RyR_channel__P_C1 = 0.001 * var_RyR_channel__P_C1_orig_deriv; // 1 / millisecond + const double var_RyR_channel__P_O1_orig_deriv = var_chaste_interface__RyR_channel__P_C2 * var_RyR_channel__k_c_minus + var_chaste_interface__RyR_channel__P_O2 * var_RyR_channel__k_b_minus - var_chaste_interface__RyR_channel__P_O1 * var_RyR_channel__k_a_minus - var_chaste_interface__RyR_channel__P_O1 * var_RyR_channel__k_c_plus + pow(var_chaste_interface__intracellular_ion_concentrations__Ca_ss, var_RyR_channel__n) * var_chaste_interface__RyR_channel__P_C1 * var_RyR_channel__k_a_plus - pow(var_chaste_interface__intracellular_ion_concentrations__Ca_ss, var_RyR_channel__m) * var_chaste_interface__RyR_channel__P_O1 * var_RyR_channel__k_b_plus; // 1 / second + const double d_dt_chaste_interface_var_RyR_channel__P_O1 = 0.001 * var_RyR_channel__P_O1_orig_deriv; // 1 / millisecond + const double var_RyR_channel__P_O2_orig_deriv = -var_chaste_interface__RyR_channel__P_O2 * var_RyR_channel__k_b_minus + pow(var_chaste_interface__intracellular_ion_concentrations__Ca_ss, var_RyR_channel__m) * var_chaste_interface__RyR_channel__P_O1 * var_RyR_channel__k_b_plus; // 1 / second + const double d_dt_chaste_interface_var_RyR_channel__P_O2 = 0.001 * var_RyR_channel__P_O2_orig_deriv; // 1 / millisecond + const double var_SERCA2a_pump__fb = pow((var_chaste_interface__intracellular_ion_concentrations__Cai / var_SERCA2a_pump__K_fb), var_SERCA2a_pump__N_fb); // dimensionless + const double var_SERCA2a_pump__J_up = (var_SERCA2a_pump__Vmaxf * var_SERCA2a_pump__fb - var_SERCA2a_pump__Vmaxr * var_SERCA2a_pump__rb) * mParameters[1] / (1 + var_SERCA2a_pump__fb + var_SERCA2a_pump__rb); // millimolar_per_second + const double var_intracellular_Ca_fluxes__HTRPNCa_orig_deriv = -var_chaste_interface__intracellular_Ca_fluxes__HTRPNCa * var_intracellular_Ca_fluxes__k_htrpn_minus + (1 - var_chaste_interface__intracellular_Ca_fluxes__HTRPNCa) * var_intracellular_Ca_fluxes__k_htrpn_plus * var_chaste_interface__intracellular_ion_concentrations__Cai; // millimolar / second + const double d_dt_chaste_interface_var_intracellular_Ca_fluxes__HTRPNCa = 0.001 * var_intracellular_Ca_fluxes__HTRPNCa_orig_deriv; // millimolar / millisecond + const double var_intracellular_Ca_fluxes__J_HTRPNCa = var_intracellular_Ca_fluxes__HTRPNCa_orig_deriv; // millimolar_per_second + const double var_intracellular_Ca_fluxes__J_xfer = (-var_chaste_interface__intracellular_ion_concentrations__Cai + var_chaste_interface__intracellular_ion_concentrations__Ca_ss) / var_intracellular_Ca_fluxes__tau_xfer; // millimolar_per_second + const double var_intracellular_Ca_fluxes__LTRPNCa_orig_deriv = -var_chaste_interface__intracellular_Ca_fluxes__LTRPNCa * var_intracellular_Ca_fluxes__k_ltrpn_minus + (1 - var_chaste_interface__intracellular_Ca_fluxes__LTRPNCa) * var_intracellular_Ca_fluxes__k_ltrpn_plus * var_chaste_interface__intracellular_ion_concentrations__Cai; // millimolar / second + const double d_dt_chaste_interface_var_intracellular_Ca_fluxes__LTRPNCa = 0.001 * var_intracellular_Ca_fluxes__LTRPNCa_orig_deriv; // millimolar / millisecond + const double var_intracellular_Ca_fluxes__J_LTRPNCa = var_intracellular_Ca_fluxes__LTRPNCa_orig_deriv; // millimolar_per_second + const double var_intracellular_Ca_fluxes__J_trpn = var_intracellular_Ca_fluxes__HTRPN_tot * var_intracellular_Ca_fluxes__J_HTRPNCa + var_intracellular_Ca_fluxes__J_LTRPNCa * var_intracellular_Ca_fluxes__LTRPN_tot; // millimolar_per_second + const double var_intracellular_ion_concentrations__EGTA_tot = 0; // millimolar + const double var_intracellular_ion_concentrations__K_mCMDN = 0.0023800000000000002; // millimolar + const double var_intracellular_ion_concentrations__K_mCSQN = 0.80000000000000004; // millimolar + const double var_intracellular_ion_concentrations__K_mEGTA = 0.00014999999999999999; // millimolar + const double var_intracellular_ion_concentrations__V_JSR = 1.6e-7; // micro_litre + const double var_intracellular_ion_concentrations__V_NSR = 2.0999999999999998e-6; // micro_litre + const double var_intracellular_ion_concentrations__V_SS = 1.2e-9; // micro_litre + const double var_intracellular_ion_concentrations__V_myo = 2.584e-5; // micro_litre + const double var_intracellular_ion_concentrations__Ca_NSR_orig_deriv = var_SERCA2a_pump__J_up * var_intracellular_ion_concentrations__V_myo / var_intracellular_ion_concentrations__V_NSR - var_intracellular_Ca_fluxes__J_tr * var_intracellular_ion_concentrations__V_JSR / var_intracellular_ion_concentrations__V_NSR; // millimolar / second + const double d_dt_chaste_interface_var_intracellular_ion_concentrations__Ca_NSR = 0.001 * var_intracellular_ion_concentrations__Ca_NSR_orig_deriv; // millimolar / millisecond + const double var_intracellular_ion_concentrations__beta_JSR = 1 / (1 + var_intracellular_ion_concentrations__CSQN_tot * var_intracellular_ion_concentrations__K_mCSQN / pow((var_chaste_interface__intracellular_ion_concentrations__Ca_JSR + var_intracellular_ion_concentrations__K_mCSQN), 2)); // dimensionless + const double var_intracellular_ion_concentrations__Ca_JSR_orig_deriv = (-var_RyR_channel__J_rel + var_intracellular_Ca_fluxes__J_tr) * var_intracellular_ion_concentrations__beta_JSR; // millimolar / second + const double d_dt_chaste_interface_var_intracellular_ion_concentrations__Ca_JSR = 0.001 * var_intracellular_ion_concentrations__Ca_JSR_orig_deriv; // millimolar / millisecond + const double var_intracellular_ion_concentrations__beta_SS = 1 / (1 + var_intracellular_ion_concentrations__CMDN_tot * var_intracellular_ion_concentrations__K_mCMDN / pow((var_chaste_interface__intracellular_ion_concentrations__Ca_ss + var_intracellular_ion_concentrations__K_mCMDN), 2) + var_intracellular_ion_concentrations__EGTA_tot * var_intracellular_ion_concentrations__K_mEGTA / pow((var_chaste_interface__intracellular_ion_concentrations__Ca_ss + var_intracellular_ion_concentrations__K_mEGTA), 2)); // dimensionless + const double var_intracellular_ion_concentrations__beta_i = 1 / (1 + var_intracellular_ion_concentrations__CMDN_tot * var_intracellular_ion_concentrations__K_mCMDN / pow((var_chaste_interface__intracellular_ion_concentrations__Cai + var_intracellular_ion_concentrations__K_mCMDN), 2) + var_intracellular_ion_concentrations__EGTA_tot * var_intracellular_ion_concentrations__K_mEGTA / pow((var_chaste_interface__intracellular_ion_concentrations__Cai + var_intracellular_ion_concentrations__K_mEGTA), 2)); // dimensionless + const double var_membrane__F = 96.485341500000004; // coulomb_per_millimole + const double var_membrane__R = 8.3144720000000003; // joule_per_mole_kelvin + const double var_membrane__T = 310; // kelvin + const double var_L_type_Ca_current__alpha = 400 * exp(0.20000000000000001 + 0.10000000000000001 * var_chaste_interface__membrane__V); // per_second + const double var_L_type_Ca_current__alpha_a = var_L_type_Ca_current__a * var_L_type_Ca_current__alpha; // per_second + const double var_L_type_Ca_current__beta = 50 * exp(-0.15384615384615385 - 0.076923076923076927 * var_chaste_interface__membrane__V); // per_second + const double var_L_type_Ca_current__C0_orig_deriv = var_chaste_interface__L_type_Ca_current__C1 * var_L_type_Ca_current__beta + var_chaste_interface__L_type_Ca_current__C_Ca0 * var_L_type_Ca_current__omega - (4 * var_L_type_Ca_current__alpha + var_L_type_Ca_current__gamma) * var_chaste_interface__L_type_Ca_current__C0; // 1 / second + const double d_dt_chaste_interface_var_L_type_Ca_current__C0 = 0.001 * var_L_type_Ca_current__C0_orig_deriv; // 1 / millisecond + const double var_L_type_Ca_current__C1_orig_deriv = -(3 * var_L_type_Ca_current__alpha + var_L_type_Ca_current__a * var_L_type_Ca_current__gamma + var_L_type_Ca_current__beta) * var_chaste_interface__L_type_Ca_current__C1 + 2 * var_chaste_interface__L_type_Ca_current__C2 * var_L_type_Ca_current__beta + 4 * var_chaste_interface__L_type_Ca_current__C0 * var_L_type_Ca_current__alpha + var_chaste_interface__L_type_Ca_current__C_Ca1 * var_L_type_Ca_current__omega / var_L_type_Ca_current__b; // 1 / second + const double d_dt_chaste_interface_var_L_type_Ca_current__C1 = 0.001 * var_L_type_Ca_current__C1_orig_deriv; // 1 / millisecond + const double var_L_type_Ca_current__C2_orig_deriv = -(2 * var_L_type_Ca_current__alpha + 2 * var_L_type_Ca_current__beta + pow(var_L_type_Ca_current__a, 2) * var_L_type_Ca_current__gamma) * var_chaste_interface__L_type_Ca_current__C2 + 3 * var_chaste_interface__L_type_Ca_current__C1 * var_L_type_Ca_current__alpha + 3 * var_chaste_interface__L_type_Ca_current__C3 * var_L_type_Ca_current__beta + var_chaste_interface__L_type_Ca_current__C_Ca2 * var_L_type_Ca_current__omega / pow(var_L_type_Ca_current__b, 2); // 1 / second + const double d_dt_chaste_interface_var_L_type_Ca_current__C2 = 0.001 * var_L_type_Ca_current__C2_orig_deriv; // 1 / millisecond + const double var_L_type_Ca_current__C3_orig_deriv = -(3 * var_L_type_Ca_current__beta + pow(var_L_type_Ca_current__a, 3) * var_L_type_Ca_current__gamma + var_L_type_Ca_current__alpha) * var_chaste_interface__L_type_Ca_current__C3 + 2 * var_chaste_interface__L_type_Ca_current__C2 * var_L_type_Ca_current__alpha + 4 * var_chaste_interface__L_type_Ca_current__C4 * var_L_type_Ca_current__beta + var_chaste_interface__L_type_Ca_current__C_Ca3 * var_L_type_Ca_current__omega / pow(var_L_type_Ca_current__b, 3); // 1 / second + const double d_dt_chaste_interface_var_L_type_Ca_current__C3 = 0.001 * var_L_type_Ca_current__C3_orig_deriv; // 1 / millisecond + const double var_L_type_Ca_current__C4_orig_deriv = var_chaste_interface__L_type_Ca_current__C3 * var_L_type_Ca_current__alpha + var_chaste_interface__L_type_Ca_current__O * var_L_type_Ca_current__g - (4 * var_L_type_Ca_current__beta + pow(var_L_type_Ca_current__a, 4) * var_L_type_Ca_current__gamma + var_L_type_Ca_current__f) * var_chaste_interface__L_type_Ca_current__C4 + var_chaste_interface__L_type_Ca_current__C_Ca4 * var_L_type_Ca_current__omega / pow(var_L_type_Ca_current__b, 4); // 1 / second + const double d_dt_chaste_interface_var_L_type_Ca_current__C4 = 0.001 * var_L_type_Ca_current__C4_orig_deriv; // 1 / millisecond + const double var_L_type_Ca_current__beta_b = var_L_type_Ca_current__beta / var_L_type_Ca_current__b; // per_second + const double var_L_type_Ca_current__C_Ca0_orig_deriv = var_chaste_interface__L_type_Ca_current__C0 * var_L_type_Ca_current__gamma + var_chaste_interface__L_type_Ca_current__C_Ca1 * var_L_type_Ca_current__beta_b - (4 * var_L_type_Ca_current__alpha_a + var_L_type_Ca_current__omega) * var_chaste_interface__L_type_Ca_current__C_Ca0; // 1 / second + const double d_dt_chaste_interface_var_L_type_Ca_current__C_Ca0 = 0.001 * var_L_type_Ca_current__C_Ca0_orig_deriv; // 1 / millisecond + const double var_L_type_Ca_current__C_Ca1_orig_deriv = -(3 * var_L_type_Ca_current__alpha_a + var_L_type_Ca_current__omega / var_L_type_Ca_current__b + var_L_type_Ca_current__beta_b) * var_chaste_interface__L_type_Ca_current__C_Ca1 + 2 * var_chaste_interface__L_type_Ca_current__C_Ca2 * var_L_type_Ca_current__beta_b + 4 * var_chaste_interface__L_type_Ca_current__C_Ca0 * var_L_type_Ca_current__alpha_a + var_chaste_interface__L_type_Ca_current__C1 * var_L_type_Ca_current__a * var_L_type_Ca_current__gamma; // 1 / second + const double d_dt_chaste_interface_var_L_type_Ca_current__C_Ca1 = 0.001 * var_L_type_Ca_current__C_Ca1_orig_deriv; // 1 / millisecond + const double var_L_type_Ca_current__C_Ca2_orig_deriv = -(2 * var_L_type_Ca_current__alpha_a + 2 * var_L_type_Ca_current__beta_b + var_L_type_Ca_current__omega / pow(var_L_type_Ca_current__b, 2)) * var_chaste_interface__L_type_Ca_current__C_Ca2 + 3 * var_chaste_interface__L_type_Ca_current__C_Ca1 * var_L_type_Ca_current__alpha_a + 3 * var_chaste_interface__L_type_Ca_current__C_Ca3 * var_L_type_Ca_current__beta_b + pow(var_L_type_Ca_current__a, 2) * var_chaste_interface__L_type_Ca_current__C2 * var_L_type_Ca_current__gamma; // 1 / second + const double d_dt_chaste_interface_var_L_type_Ca_current__C_Ca2 = 0.001 * var_L_type_Ca_current__C_Ca2_orig_deriv; // 1 / millisecond + const double var_L_type_Ca_current__C_Ca3_orig_deriv = -(3 * var_L_type_Ca_current__beta_b + var_L_type_Ca_current__omega / pow(var_L_type_Ca_current__b, 3) + var_L_type_Ca_current__alpha_a) * var_chaste_interface__L_type_Ca_current__C_Ca3 + 2 * var_chaste_interface__L_type_Ca_current__C_Ca2 * var_L_type_Ca_current__alpha_a + 4 * var_chaste_interface__L_type_Ca_current__C_Ca4 * var_L_type_Ca_current__beta_b + pow(var_L_type_Ca_current__a, 3) * var_chaste_interface__L_type_Ca_current__C3 * var_L_type_Ca_current__gamma; // 1 / second + const double d_dt_chaste_interface_var_L_type_Ca_current__C_Ca3 = 0.001 * var_L_type_Ca_current__C_Ca3_orig_deriv; // 1 / millisecond + const double var_L_type_Ca_current__C_Ca4_orig_deriv = var_chaste_interface__L_type_Ca_current__C_Ca3 * var_L_type_Ca_current__alpha_a + var_chaste_interface__L_type_Ca_current__O_Ca * var_L_type_Ca_current__gprime - (4 * var_L_type_Ca_current__beta_b + var_L_type_Ca_current__omega / pow(var_L_type_Ca_current__b, 4) + var_L_type_Ca_current__fprime) * var_chaste_interface__L_type_Ca_current__C_Ca4 + pow(var_L_type_Ca_current__a, 4) * var_chaste_interface__L_type_Ca_current__C4 * var_L_type_Ca_current__gamma; // 1 / second + const double d_dt_chaste_interface_var_L_type_Ca_current__C_Ca4 = 0.001 * var_L_type_Ca_current__C_Ca4_orig_deriv; // 1 / millisecond + const double var_L_type_Ca_current_y_gate__tau_y = 0.02 + 0.59999999999999998 / (1 + exp(2.1052631578947367 + 0.10526315789473684 * var_chaste_interface__membrane__V)); // second + const double var_L_type_Ca_current_y_gate__y_infinity = 0.20000000000000001 + 0.80000000000000004 / (1 + exp(2.5 + 0.20000000000000001 * var_chaste_interface__membrane__V)); // dimensionless + const double var_L_type_Ca_current_y_gate__y_orig_deriv = (-var_chaste_interface__L_type_Ca_current_y_gate__y + var_L_type_Ca_current_y_gate__y_infinity) / var_L_type_Ca_current_y_gate__tau_y; // 1 / second + const double d_dt_chaste_interface_var_L_type_Ca_current_y_gate__y = 0.001 * var_L_type_Ca_current_y_gate__y_orig_deriv; // 1 / millisecond + const double var_fast_sodium_current_h_gate__alpha_h = ((var_chaste_interface__membrane__V < -40) ? (135 * exp(-11.764705882352942 + 0.14705882352941177 * mParameters[10] - 0.14705882352941177 * var_chaste_interface__membrane__V)) : (0)); // per_second + const double var_fast_sodium_current_h_gate__beta_h = ((var_chaste_interface__membrane__V < -40) ? (3560 * exp(0.079000000000000001 * var_chaste_interface__membrane__V - 0.079000000000000001 * mParameters[10]) + 310000 * exp(0.34999999999999998 * var_chaste_interface__membrane__V - 0.34999999999999998 * mParameters[10])) : (7692.3076923076924 / (1 + exp(-0.96036036036036043 + 0.0900900900900901 * mParameters[10] - 0.0900900900900901 * var_chaste_interface__membrane__V)))); // per_second + const double var_fast_sodium_current_h_gate__h_inf = 0.01 * mParameters[9] + (1 - 0.01 * mParameters[9]) * var_fast_sodium_current_h_gate__alpha_h / (var_fast_sodium_current_h_gate__alpha_h + var_fast_sodium_current_h_gate__beta_h); // dimensionless + const double var_fast_sodium_current_h_gate__tau_h = 1 / (var_fast_sodium_current_h_gate__alpha_h + var_fast_sodium_current_h_gate__beta_h); // second + const double var_fast_sodium_current_h_gate__h_orig_deriv = (-var_chaste_interface__fast_sodium_current_h_gate__h + var_fast_sodium_current_h_gate__h_inf) / var_fast_sodium_current_h_gate__tau_h; // 1 / second + const double d_dt_chaste_interface_var_fast_sodium_current_h_gate__h = 0.001 * var_fast_sodium_current_h_gate__h_orig_deriv; // 1 / millisecond + const double var_fast_sodium_current_j_gate__alpha_j = ((var_chaste_interface__membrane__V < -40) ? (1000 * (37.780000000000001 + var_chaste_interface__membrane__V) * (-127140 * exp(0.24440000000000001 * var_chaste_interface__membrane__V - 0.24440000000000001 * mParameters[10]) - 3.4740000000000003e-5 * exp(0.043909999999999998 * mParameters[10] - 0.043909999999999998 * var_chaste_interface__membrane__V)) / (1 + exp(24.640530000000002 + 0.311 * var_chaste_interface__membrane__V - 0.311 * mParameters[10]))) : (0)); // per_second + const double var_fast_sodium_current_j_gate__beta_j = ((var_chaste_interface__membrane__V < -40) ? (121.2 * exp(0.01052 * mParameters[10] - 0.01052 * var_chaste_interface__membrane__V) / (1 + exp(-5.5312920000000005 + 0.13780000000000001 * mParameters[10] - 0.13780000000000001 * var_chaste_interface__membrane__V))) : (300 * exp(2.5349999999999999e-7 * mParameters[10] - 2.5349999999999999e-7 * var_chaste_interface__membrane__V) / (1 + exp(-3.2000000000000002 + 0.10000000000000001 * mParameters[10] - 0.10000000000000001 * var_chaste_interface__membrane__V)))); // per_second + const double var_fast_sodium_current_j_gate__j_inf = 0.01 * mParameters[9] + (1 - 0.01 * mParameters[9]) * var_fast_sodium_current_j_gate__alpha_j / (var_fast_sodium_current_j_gate__alpha_j + var_fast_sodium_current_j_gate__beta_j); // dimensionless + const double var_fast_sodium_current_j_gate__tau_j = 1 / (var_fast_sodium_current_j_gate__alpha_j + var_fast_sodium_current_j_gate__beta_j); // second + const double var_fast_sodium_current_j_gate__j_orig_deriv = (-var_chaste_interface__fast_sodium_current_j_gate__j + var_fast_sodium_current_j_gate__j_inf) / var_fast_sodium_current_j_gate__tau_j; // 1 / second + const double d_dt_chaste_interface_var_fast_sodium_current_j_gate__j = 0.001 * var_fast_sodium_current_j_gate__j_orig_deriv; // 1 / millisecond + const double var_fast_sodium_current_m_gate__E0_m = 47.130000000000003 + var_chaste_interface__membrane__V; // millivolt + const double var_fast_sodium_current_m_gate__alpha_m = ((fabs(var_fast_sodium_current_m_gate__E0_m) < 1.0000000000000001e-5) ? (1000 / (0.10000000000000001 - 0.0050000000000000001 * var_fast_sodium_current_m_gate__E0_m)) : (320 * var_fast_sodium_current_m_gate__E0_m / (1 - exp(-0.10000000000000001 * var_fast_sodium_current_m_gate__E0_m)))); // per_second + const double var_fast_sodium_current_m_gate__beta_m = 80 * exp(-0.090909090909090912 * var_chaste_interface__membrane__V); // per_second + const double var_fast_sodium_current_m_gate__m_orig_deriv = ((var_chaste_interface__membrane__V >= -90) ? ((1 - var_chaste_interface__fast_sodium_current_m_gate__m) * var_fast_sodium_current_m_gate__alpha_m - var_fast_sodium_current_m_gate__beta_m * var_chaste_interface__fast_sodium_current_m_gate__m) : (0)); // 1 / second + const double d_dt_chaste_interface_var_fast_sodium_current_m_gate__m = 0.001 * var_fast_sodium_current_m_gate__m_orig_deriv; // 1 / millisecond + const double var_plateau_potassium_current__g_Kp = 0.0022160000000000001; // milliS_per_microF + const double var_plateau_potassium_current_Kp_gate__Kp_V = 1 / (1 + exp(1.2521739130434781 - 0.16722408026755853 * var_chaste_interface__membrane__V)); // dimensionless + const double var_rapid_activating_delayed_rectifiyer_K_current__R_V = 1 / (1 + 1.4944999999999999 * exp(0.044600000000000001 * var_chaste_interface__membrane__V)); // dimensionless + const double var_rapid_activating_delayed_rectifiyer_K_current_X_kr_gate__K12 = exp(-5.4950000000000001 + 0.1691 * var_chaste_interface__membrane__V); // dimensionless + const double var_rapid_activating_delayed_rectifiyer_K_current_X_kr_gate__K21 = exp(-7.6769999999999996 - 0.012800000000000001 * var_chaste_interface__membrane__V); // dimensionless + const double var_rapid_activating_delayed_rectifiyer_K_current_X_kr_gate__X_kr_inf = var_rapid_activating_delayed_rectifiyer_K_current_X_kr_gate__K12 / (var_rapid_activating_delayed_rectifiyer_K_current_X_kr_gate__K12 + var_rapid_activating_delayed_rectifiyer_K_current_X_kr_gate__K21); // dimensionless + const double var_rapid_activating_delayed_rectifiyer_K_current_X_kr_gate__tau_factor = 1; // dimensionless + const double var_rapid_activating_delayed_rectifiyer_K_current_X_kr_gate__tau_X_kr = 0.001 / (var_rapid_activating_delayed_rectifiyer_K_current_X_kr_gate__K12 + var_rapid_activating_delayed_rectifiyer_K_current_X_kr_gate__K21) + 0.027 * var_rapid_activating_delayed_rectifiyer_K_current_X_kr_gate__tau_factor; // second + const double var_rapid_activating_delayed_rectifiyer_K_current_X_kr_gate__X_kr_orig_deriv = (-var_chaste_interface__rapid_activating_delayed_rectifiyer_K_current_X_kr_gate__X_kr + var_rapid_activating_delayed_rectifiyer_K_current_X_kr_gate__X_kr_inf) / var_rapid_activating_delayed_rectifiyer_K_current_X_kr_gate__tau_X_kr; // 1 / second + const double d_dt_chaste_interface_var_rapid_activating_delayed_rectifiyer_K_current_X_kr_gate__X_kr = 0.001 * var_rapid_activating_delayed_rectifiyer_K_current_X_kr_gate__X_kr_orig_deriv; // 1 / millisecond + const double var_sarcolemmal_calcium_pump__I_pCa = 0.050000000000000003; // microA_per_microF + const double var_sarcolemmal_calcium_pump__K_mpCa = 5.0000000000000002e-5; // millimolar + const double var_sarcolemmal_calcium_pump__i_p_Ca = var_chaste_interface__intracellular_ion_concentrations__Cai * var_sarcolemmal_calcium_pump__I_pCa / (var_chaste_interface__intracellular_ion_concentrations__Cai + var_sarcolemmal_calcium_pump__K_mpCa); // microA_per_microF + const double var_slow_activating_delayed_rectifiyer_K_current_X_ks_gate__X_ks_infinity = 1 / (1 + exp(1.8161764705882353 - 0.073529411764705885 * var_chaste_interface__membrane__V)); // dimensionless + const double var_slow_activating_delayed_rectifiyer_K_current_X_ks_gate__tau_X_ks = 0.001 / (0.00013100000000000001 * (-10 + var_chaste_interface__membrane__V) / (-1 + exp(-0.68699999999999994 + 0.068699999999999997 * var_chaste_interface__membrane__V)) + 7.1899999999999999e-5 * (-10 + var_chaste_interface__membrane__V) / (1 - exp(1.48 - 0.14799999999999999 * var_chaste_interface__membrane__V))); // second + const double var_slow_activating_delayed_rectifiyer_K_current_X_ks_gate__X_ks_orig_deriv = (-var_chaste_interface__slow_activating_delayed_rectifiyer_K_current_X_ks_gate__X_ks + var_slow_activating_delayed_rectifiyer_K_current_X_ks_gate__X_ks_infinity) / var_slow_activating_delayed_rectifiyer_K_current_X_ks_gate__tau_X_ks; // 1 / second + const double d_dt_chaste_interface_var_slow_activating_delayed_rectifiyer_K_current_X_ks_gate__X_ks = 0.001 * var_slow_activating_delayed_rectifiyer_K_current_X_ks_gate__X_ks_orig_deriv; // 1 / millisecond + const double var_sodium_background_current__g_Nab = 0.0030999999999999999; // milliS_per_microF + const double var_sodium_potassium_pump__I_NaK = 0.69299999999999995; // microA_per_microF + const double var_sodium_potassium_pump__K_mKo = 1.5; // millimolar + const double var_sodium_potassium_pump__K_mNai = 10; // millimolar + const double var_L_type_Ca_current__i_Ca_max = 4000 * pow(var_membrane__F, 2) * (0.001 * exp(2 * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T)) - 0.34100000000000003 * mParameters[3]) * mParameters[6] * var_chaste_interface__membrane__V / ((-1 + exp(2 * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * var_membrane__R * var_membrane__T); // microA_per_microF + const double var_L_type_Ca_current__i_Ca = (var_chaste_interface__L_type_Ca_current__O + var_chaste_interface__L_type_Ca_current__O_Ca) * var_L_type_Ca_current__i_Ca_max * var_chaste_interface__L_type_Ca_current_y_gate__y; // microA_per_microF + const double var_L_type_Ca_current__p_prime_k = var_L_type_Ca_current__P_K / (1 + var_L_type_Ca_current__i_Ca_max / var_L_type_Ca_current__i_Ca_half); // cm_per_second + const double var_calcium_background_current__E_Ca = 0.5 * var_membrane__R * var_membrane__T * log(mParameters[3] / var_chaste_interface__intracellular_ion_concentrations__Cai) / var_membrane__F; // millivolt + const double var_calcium_background_current__i_Ca_b = (-var_calcium_background_current__E_Ca + var_chaste_interface__membrane__V) * var_calcium_background_current__g_Cab; // microA_per_microF + const double var_intracellular_ion_concentrations__Ca_ss_orig_deriv = (var_RyR_channel__J_rel * var_intracellular_ion_concentrations__V_JSR / var_intracellular_ion_concentrations__V_SS - var_intracellular_Ca_fluxes__J_xfer * var_intracellular_ion_concentrations__V_myo / var_intracellular_ion_concentrations__V_SS - 0.5 * var_L_type_Ca_current__i_Ca * var_intracellular_ion_concentrations__A_cap / (var_intracellular_ion_concentrations__V_SS * var_membrane__F)) * var_intracellular_ion_concentrations__beta_SS; // millimolar / second + const double d_dt_chaste_interface_var_intracellular_ion_concentrations__Ca_ss = 0.001 * var_intracellular_ion_concentrations__Ca_ss_orig_deriv; // millimolar / millisecond + const double var_L_type_Ca_current__i_Ca_K = pow(var_membrane__F, 2) * (-mParameters[4] + var_chaste_interface__intracellular_ion_concentrations__Ki * exp(var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * (var_chaste_interface__L_type_Ca_current__O + var_chaste_interface__L_type_Ca_current__O_Ca) * var_L_type_Ca_current__p_prime_k * var_chaste_interface__L_type_Ca_current_y_gate__y * var_chaste_interface__membrane__V / ((-1 + exp(var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * var_membrane__R * var_membrane__T); // microA_per_microF + const double var_rapid_activating_delayed_rectifiyer_K_current__E_K = var_membrane__R * var_membrane__T * log(mParameters[4] / var_chaste_interface__intracellular_ion_concentrations__Ki) / var_membrane__F; // millivolt + const double var_plateau_potassium_current__i_Kp = (-var_rapid_activating_delayed_rectifiyer_K_current__E_K + var_chaste_interface__membrane__V) * var_plateau_potassium_current__g_Kp * var_plateau_potassium_current_Kp_gate__Kp_V; // microA_per_microF + const double var_rapid_activating_delayed_rectifiyer_K_current__f_Ko = 0.5 * sqrt(mParameters[4]); // dimensionless + const double var_rapid_activating_delayed_rectifiyer_K_current__i_Kr = (-var_rapid_activating_delayed_rectifiyer_K_current__E_K + var_chaste_interface__membrane__V) * var_rapid_activating_delayed_rectifiyer_K_current__R_V * var_rapid_activating_delayed_rectifiyer_K_current__f_Ko * mParameters[12] * var_chaste_interface__rapid_activating_delayed_rectifiyer_K_current_X_kr_gate__X_kr; // microA_per_microF + const double var_Na_Ca_exchanger__i_NaCa = 5000 * (pow(var_chaste_interface__intracellular_ion_concentrations__Nai, 3) * mParameters[3] * exp(var_Na_Ca_exchanger__eta * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T)) - pow(mParameters[5], 3) * var_chaste_interface__intracellular_ion_concentrations__Cai * exp((-1 + var_Na_Ca_exchanger__eta) * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * mParameters[14] / ((1 + var_Na_Ca_exchanger__K_sat * exp((-1 + var_Na_Ca_exchanger__eta) * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * (pow(var_Na_Ca_exchanger__K_mNa, 3) + pow(mParameters[5], 3)) * (var_Na_Ca_exchanger__K_mCa + mParameters[3])); // microA_per_microF + const double var_fast_sodium_current__E_Na = var_membrane__R * var_membrane__T * log(mParameters[5] / var_chaste_interface__intracellular_ion_concentrations__Nai) / var_membrane__F; // millivolt + const double var_fast_sodium_current__i_Na = pow(var_chaste_interface__fast_sodium_current_m_gate__m, 3) * (-var_fast_sodium_current__E_Na + var_chaste_interface__membrane__V) * mParameters[8] * var_chaste_interface__fast_sodium_current_h_gate__h * var_chaste_interface__fast_sodium_current_j_gate__j; // microA_per_microF + const double var_intracellular_ion_concentrations__Cai_orig_deriv = (-var_SERCA2a_pump__J_up - var_intracellular_Ca_fluxes__J_trpn + 0.5 * (-var_calcium_background_current__i_Ca_b - var_sarcolemmal_calcium_pump__i_p_Ca + 2 * var_Na_Ca_exchanger__i_NaCa) * var_intracellular_ion_concentrations__A_cap / (var_intracellular_ion_concentrations__V_myo * var_membrane__F) + var_intracellular_Ca_fluxes__J_xfer) * var_intracellular_ion_concentrations__beta_i; // millimolar / second + const double d_dt_chaste_interface_var_intracellular_ion_concentrations__Cai = 0.001 * var_intracellular_ion_concentrations__Cai_orig_deriv; // millimolar / millisecond + const double var_slow_activating_delayed_rectifiyer_K_current__E_Ks = var_membrane__R * var_membrane__T * log((mParameters[4] + 0.018329999999999999 * mParameters[5]) / (var_chaste_interface__intracellular_ion_concentrations__Ki + 0.018329999999999999 * var_chaste_interface__intracellular_ion_concentrations__Nai)) / var_membrane__F; // millivolt + const double var_slow_activating_delayed_rectifiyer_K_current__i_Ks = pow(var_chaste_interface__slow_activating_delayed_rectifiyer_K_current_X_ks_gate__X_ks, 2) * (-var_slow_activating_delayed_rectifiyer_K_current__E_Ks + var_chaste_interface__membrane__V) * mParameters[13]; // microA_per_microF + const double var_sodium_background_current__i_Na_b = (-var_fast_sodium_current__E_Na + var_chaste_interface__membrane__V) * var_sodium_background_current__g_Nab; // microA_per_microF + const double var_sodium_potassium_pump__sigma = -0.14285714285714285 + 0.14285714285714285 * exp(0.01485884101040119 * mParameters[5]); // dimensionless + const double var_sodium_potassium_pump__f_NaK = 1 / (1 + 0.1245 * exp(-0.10000000000000001 * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T)) + 0.036499999999999998 * var_sodium_potassium_pump__sigma * exp(-var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))); // dimensionless + const double var_sodium_potassium_pump__i_NaK = var_sodium_potassium_pump__I_NaK * var_sodium_potassium_pump__f_NaK * mParameters[4] / ((1 + pow((var_sodium_potassium_pump__K_mNai / var_chaste_interface__intracellular_ion_concentrations__Nai), 1.5)) * (var_sodium_potassium_pump__K_mKo + mParameters[4])); // microA_per_microF + const double var_intracellular_ion_concentrations__Nai_orig_deriv = -(3 * var_Na_Ca_exchanger__i_NaCa + 3 * var_sodium_potassium_pump__i_NaK + var_fast_sodium_current__i_Na + var_sodium_background_current__i_Na_b) * var_intracellular_ion_concentrations__A_cap * mParameters[2] / (var_intracellular_ion_concentrations__V_myo * var_membrane__F); // millimolar / second + const double d_dt_chaste_interface_var_intracellular_ion_concentrations__Nai = 0.001 * var_intracellular_ion_concentrations__Nai_orig_deriv; // millimolar / millisecond + const double var_time_independent_potassium_current__K_mK1 = 13; // millimolar + const double var_time_independent_potassium_current_K1_gate__K1_infinity_V = 1 / (2 + exp(1.5 * (-var_rapid_activating_delayed_rectifiyer_K_current__E_K + var_chaste_interface__membrane__V) * var_membrane__F / (var_membrane__R * var_membrane__T))); // dimensionless + const double var_time_independent_potassium_current__i_K1 = (-var_rapid_activating_delayed_rectifiyer_K_current__E_K + var_chaste_interface__membrane__V) * mParameters[4] * mParameters[11] * var_time_independent_potassium_current_K1_gate__K1_infinity_V / (mParameters[4] + var_time_independent_potassium_current__K_mK1); // microA_per_microF + const double var_transient_outward_potassium_current_X_to1_gate__alpha_X_to1 = 45.159999999999997 * exp(0.035770000000000003 * var_chaste_interface__membrane__V); // per_second + const double var_transient_outward_potassium_current_X_to1_gate__beta_X_to1 = 98.900000000000006 * exp(-0.062370000000000002 * var_chaste_interface__membrane__V); // per_second + const double var_transient_outward_potassium_current_X_to1_gate__X_to1_orig_deriv = (1 - var_chaste_interface__transient_outward_potassium_current_X_to1_gate__X_to1) * var_transient_outward_potassium_current_X_to1_gate__alpha_X_to1 - var_chaste_interface__transient_outward_potassium_current_X_to1_gate__X_to1 * var_transient_outward_potassium_current_X_to1_gate__beta_X_to1; // 1 / second + const double d_dt_chaste_interface_var_transient_outward_potassium_current_X_to1_gate__X_to1 = 0.001 * var_transient_outward_potassium_current_X_to1_gate__X_to1_orig_deriv; // 1 / millisecond + const double var_transient_outward_potassium_current__i_to1 = (-var_rapid_activating_delayed_rectifiyer_K_current__E_K + var_chaste_interface__membrane__V) * mParameters[15] * var_chaste_interface__transient_outward_potassium_current_X_to1_gate__X_to1 * var_chaste_interface__transient_outward_potassium_current_Y_to1_gate__Y_to1; // microA_per_microF + const double var_intracellular_ion_concentrations__Ki_orig_deriv = -(-2 * var_sodium_potassium_pump__i_NaK + var_L_type_Ca_current__i_Ca_K + var_plateau_potassium_current__i_Kp + var_rapid_activating_delayed_rectifiyer_K_current__i_Kr + var_slow_activating_delayed_rectifiyer_K_current__i_Ks + var_time_independent_potassium_current__i_K1 + var_transient_outward_potassium_current__i_to1) * var_intracellular_ion_concentrations__A_cap * mParameters[2] / (var_intracellular_ion_concentrations__V_myo * var_membrane__F); // millimolar / second + const double d_dt_chaste_interface_var_intracellular_ion_concentrations__Ki = 0.001 * var_intracellular_ion_concentrations__Ki_orig_deriv; // millimolar / millisecond + const double var_transient_outward_potassium_current_Y_to1_gate__alpha_Y_to1 = 5.415 * exp(-6.7000000000000002 - 0.20000000000000001 * var_chaste_interface__membrane__V) / (1 + 0.051334999999999999 * exp(-6.7000000000000002 - 0.20000000000000001 * var_chaste_interface__membrane__V)); // per_second + const double var_transient_outward_potassium_current_Y_to1_gate__beta_Y_to1 = 5.415 * exp(6.7000000000000002 + 0.20000000000000001 * var_chaste_interface__membrane__V) / (1 + 0.051334999999999999 * exp(6.7000000000000002 + 0.20000000000000001 * var_chaste_interface__membrane__V)); // per_second + const double var_transient_outward_potassium_current_Y_to1_gate__Y_to1_orig_deriv = (1 - var_chaste_interface__transient_outward_potassium_current_Y_to1_gate__Y_to1) * var_transient_outward_potassium_current_Y_to1_gate__alpha_Y_to1 - var_chaste_interface__transient_outward_potassium_current_Y_to1_gate__Y_to1 * var_transient_outward_potassium_current_Y_to1_gate__beta_Y_to1; // 1 / second + const double d_dt_chaste_interface_var_transient_outward_potassium_current_Y_to1_gate__Y_to1 = 0.001 * var_transient_outward_potassium_current_Y_to1_gate__Y_to1_orig_deriv; // 1 / millisecond + + if (mSetVoltageDerivativeToZero) + { + d_dt_chaste_interface_var_membrane__V = 0.0; + } + else + { + const double var_membrane__i_Stim_converted = GetIntracellularAreaStimulus(var_chaste_interface__environment__time_converted); // uA_per_cm2 + const double var_membrane__i_Stim = var_membrane__i_Stim_converted / HeartConfig::Instance()->GetCapacitance(); // microA_per_microF + const double var_membrane__V_orig_deriv = -(var_L_type_Ca_current__i_Ca + var_L_type_Ca_current__i_Ca_K + var_Na_Ca_exchanger__i_NaCa + var_calcium_background_current__i_Ca_b + var_fast_sodium_current__i_Na + var_membrane__i_Stim + var_plateau_potassium_current__i_Kp + var_rapid_activating_delayed_rectifiyer_K_current__i_Kr + var_sarcolemmal_calcium_pump__i_p_Ca + var_slow_activating_delayed_rectifiyer_K_current__i_Ks + var_sodium_background_current__i_Na_b + var_sodium_potassium_pump__i_NaK + var_time_independent_potassium_current__i_K1 + var_transient_outward_potassium_current__i_to1) / mParameters[7]; // millivolt / second + d_dt_chaste_interface_var_membrane__V = 0.001 * var_membrane__V_orig_deriv; // millivolt / millisecond + } + + mEvalF[0] = d_dt_chaste_interface_var_membrane__V; + mEvalF[1] = d_dt_chaste_interface_var_intracellular_ion_concentrations__Cai; + mEvalF[2] = d_dt_chaste_interface_var_fast_sodium_current_m_gate__m; + mEvalF[3] = d_dt_chaste_interface_var_fast_sodium_current_h_gate__h; + mEvalF[4] = d_dt_chaste_interface_var_fast_sodium_current_j_gate__j; + mEvalF[5] = d_dt_chaste_interface_var_rapid_activating_delayed_rectifiyer_K_current_X_kr_gate__X_kr; + mEvalF[6] = d_dt_chaste_interface_var_slow_activating_delayed_rectifiyer_K_current_X_ks_gate__X_ks; + mEvalF[7] = d_dt_chaste_interface_var_transient_outward_potassium_current_X_to1_gate__X_to1; + mEvalF[8] = d_dt_chaste_interface_var_transient_outward_potassium_current_Y_to1_gate__Y_to1; + mEvalF[9] = d_dt_chaste_interface_var_L_type_Ca_current__O; + mEvalF[10] = d_dt_chaste_interface_var_L_type_Ca_current__O_Ca; + mEvalF[11] = d_dt_chaste_interface_var_L_type_Ca_current__C0; + mEvalF[12] = d_dt_chaste_interface_var_L_type_Ca_current__C1; + mEvalF[13] = d_dt_chaste_interface_var_L_type_Ca_current__C2; + mEvalF[14] = d_dt_chaste_interface_var_L_type_Ca_current__C3; + mEvalF[15] = d_dt_chaste_interface_var_L_type_Ca_current__C4; + mEvalF[16] = d_dt_chaste_interface_var_L_type_Ca_current__C_Ca0; + mEvalF[17] = d_dt_chaste_interface_var_L_type_Ca_current__C_Ca1; + mEvalF[18] = d_dt_chaste_interface_var_L_type_Ca_current__C_Ca2; + mEvalF[19] = d_dt_chaste_interface_var_L_type_Ca_current__C_Ca3; + mEvalF[20] = d_dt_chaste_interface_var_L_type_Ca_current__C_Ca4; + mEvalF[21] = d_dt_chaste_interface_var_L_type_Ca_current_y_gate__y; + mEvalF[22] = d_dt_chaste_interface_var_RyR_channel__P_O1; + mEvalF[23] = d_dt_chaste_interface_var_RyR_channel__P_O2; + mEvalF[24] = d_dt_chaste_interface_var_RyR_channel__P_C1; + mEvalF[25] = d_dt_chaste_interface_var_RyR_channel__P_C2; + mEvalF[26] = d_dt_chaste_interface_var_intracellular_Ca_fluxes__HTRPNCa; + mEvalF[27] = d_dt_chaste_interface_var_intracellular_Ca_fluxes__LTRPNCa; + mEvalF[28] = d_dt_chaste_interface_var_intracellular_ion_concentrations__Nai; + mEvalF[29] = d_dt_chaste_interface_var_intracellular_ion_concentrations__Ki; + mEvalF[30] = d_dt_chaste_interface_var_intracellular_ion_concentrations__Ca_ss; + mEvalF[31] = d_dt_chaste_interface_var_intracellular_ion_concentrations__Ca_JSR; + mEvalF[32] = d_dt_chaste_interface_var_intracellular_ion_concentrations__Ca_NSR; + + + mPartialF[0] = EvaluatePartialDerivative0(var_chaste_interface__environment__time_converted, rY, delta); + mPartialF[1] = EvaluatePartialDerivative1(var_chaste_interface__environment__time_converted, rY, delta); + mPartialF[2] = EvaluatePartialDerivative2(var_chaste_interface__environment__time_converted, rY, delta); + mPartialF[3] = EvaluatePartialDerivative3(var_chaste_interface__environment__time_converted, rY, delta); + mPartialF[4] = EvaluatePartialDerivative4(var_chaste_interface__environment__time_converted, rY, delta); + mPartialF[5] = EvaluatePartialDerivative5(var_chaste_interface__environment__time_converted, rY, delta); + mPartialF[6] = EvaluatePartialDerivative6(var_chaste_interface__environment__time_converted, rY, delta); + mPartialF[7] = EvaluatePartialDerivative7(var_chaste_interface__environment__time_converted, rY, delta); + mPartialF[8] = EvaluatePartialDerivative8(var_chaste_interface__environment__time_converted, rY, delta); + mPartialF[9] = EvaluatePartialDerivative9(var_chaste_interface__environment__time_converted, rY, delta); + mPartialF[10] = EvaluatePartialDerivative10(var_chaste_interface__environment__time_converted, rY, delta); + mPartialF[11] = EvaluatePartialDerivative11(var_chaste_interface__environment__time_converted, rY, delta); + mPartialF[12] = EvaluatePartialDerivative12(var_chaste_interface__environment__time_converted, rY, delta); + mPartialF[13] = EvaluatePartialDerivative13(var_chaste_interface__environment__time_converted, rY, delta); + mPartialF[14] = EvaluatePartialDerivative14(var_chaste_interface__environment__time_converted, rY, delta); + mPartialF[15] = EvaluatePartialDerivative15(var_chaste_interface__environment__time_converted, rY, delta); + mPartialF[16] = EvaluatePartialDerivative16(var_chaste_interface__environment__time_converted, rY, delta); + mPartialF[17] = EvaluatePartialDerivative17(var_chaste_interface__environment__time_converted, rY, delta); + mPartialF[18] = EvaluatePartialDerivative18(var_chaste_interface__environment__time_converted, rY, delta); + mPartialF[19] = EvaluatePartialDerivative19(var_chaste_interface__environment__time_converted, rY, delta); + mPartialF[20] = EvaluatePartialDerivative20(var_chaste_interface__environment__time_converted, rY, delta); + mPartialF[21] = EvaluatePartialDerivative21(var_chaste_interface__environment__time_converted, rY, delta); + mPartialF[22] = EvaluatePartialDerivative22(var_chaste_interface__environment__time_converted, rY, delta); + mPartialF[23] = EvaluatePartialDerivative23(var_chaste_interface__environment__time_converted, rY, delta); + mPartialF[24] = EvaluatePartialDerivative24(var_chaste_interface__environment__time_converted, rY, delta); + mPartialF[25] = EvaluatePartialDerivative25(var_chaste_interface__environment__time_converted, rY, delta); + mPartialF[26] = EvaluatePartialDerivative26(var_chaste_interface__environment__time_converted, rY, delta); + mPartialF[27] = EvaluatePartialDerivative27(var_chaste_interface__environment__time_converted, rY, delta); + mPartialF[28] = EvaluatePartialDerivative28(var_chaste_interface__environment__time_converted, rY, delta); + mPartialF[29] = EvaluatePartialDerivative29(var_chaste_interface__environment__time_converted, rY, delta); + mPartialF[30] = EvaluatePartialDerivative30(var_chaste_interface__environment__time_converted, rY, delta); + mPartialF[31] = EvaluatePartialDerivative31(var_chaste_interface__environment__time_converted, rY, delta); + mPartialF[32] = EvaluatePartialDerivative32(var_chaste_interface__environment__time_converted, rY, delta); + for (unsigned var=0; var& rY) + { + double d_dt_chaste_interface_var_membrane__V; + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -96.1638 + double var_chaste_interface__intracellular_ion_concentrations__Cai = rY[1]; + // Units: millimolar; Initial value: 8e-05 + double var_chaste_interface__fast_sodium_current_m_gate__m = rY[2]; + // Units: dimensionless; Initial value: 0.0328302 + double var_chaste_interface__fast_sodium_current_h_gate__h = rY[3]; + // Units: dimensionless; Initial value: 0.988354 + double var_chaste_interface__fast_sodium_current_j_gate__j = rY[4]; + // Units: dimensionless; Initial value: 0.99254 + double var_chaste_interface__rapid_activating_delayed_rectifiyer_K_current_X_kr_gate__X_kr = rY[5]; + // Units: dimensionless; Initial value: 0.51 + double var_chaste_interface__slow_activating_delayed_rectifiyer_K_current_X_ks_gate__X_ks = rY[6]; + // Units: dimensionless; Initial value: 0.264 + double var_chaste_interface__transient_outward_potassium_current_X_to1_gate__X_to1 = rY[7]; + // Units: dimensionless; Initial value: 2.63 + double var_chaste_interface__transient_outward_potassium_current_Y_to1_gate__Y_to1 = rY[8]; + // Units: dimensionless; Initial value: 0.99 + double var_chaste_interface__L_type_Ca_current__O = rY[9]; + // Units: dimensionless; Initial value: 9.84546e-21 + double var_chaste_interface__L_type_Ca_current__O_Ca = rY[10]; + // Units: dimensionless; Initial value: 0.0 + double var_chaste_interface__L_type_Ca_current_y_gate__y = rY[21]; + // Units: dimensionless; Initial value: 0.798 + double var_chaste_interface__intracellular_ion_concentrations__Nai = rY[28]; + // Units: millimolar; Initial value: 10.0 + double var_chaste_interface__intracellular_ion_concentrations__Ki = rY[29]; + // Units: millimolar; Initial value: 157.8 + + + // Mathematics + const double var_L_type_Ca_current__P_K = 5.7899999999999998e-7; // cm_per_second + const double var_L_type_Ca_current__i_Ca_half = -0.26500000000000001; // microA_per_microF + const double var_Na_Ca_exchanger__K_mCa = 1.3799999999999999; // millimolar + const double var_Na_Ca_exchanger__K_mNa = 87.5; // millimolar + const double var_Na_Ca_exchanger__K_sat = 0.20000000000000001; // dimensionless + const double var_Na_Ca_exchanger__eta = 0.34999999999999998; // dimensionless + const double var_calcium_background_current__g_Cab = 0.00038420000000000001; // milliS_per_microF + const double var_membrane__F = 96.485341500000004; // coulomb_per_millimole + const double var_membrane__R = 8.3144720000000003; // joule_per_mole_kelvin + const double var_membrane__T = 310; // kelvin + const double var_membrane__i_Stim_converted = GetIntracellularAreaStimulus(var_chaste_interface__environment__time_converted); // uA_per_cm2 + const double var_membrane__i_Stim = var_membrane__i_Stim_converted / HeartConfig::Instance()->GetCapacitance(); // microA_per_microF + const double var_plateau_potassium_current__g_Kp = 0.0022160000000000001; // milliS_per_microF + const double var_plateau_potassium_current_Kp_gate__Kp_V = 1 / (1 + exp(1.2521739130434781 - 0.16722408026755853 * var_chaste_interface__membrane__V)); // dimensionless + const double var_rapid_activating_delayed_rectifiyer_K_current__R_V = 1 / (1 + 1.4944999999999999 * exp(0.044600000000000001 * var_chaste_interface__membrane__V)); // dimensionless + const double var_sarcolemmal_calcium_pump__I_pCa = 0.050000000000000003; // microA_per_microF + const double var_sarcolemmal_calcium_pump__K_mpCa = 5.0000000000000002e-5; // millimolar + const double var_sarcolemmal_calcium_pump__i_p_Ca = var_chaste_interface__intracellular_ion_concentrations__Cai * var_sarcolemmal_calcium_pump__I_pCa / (var_chaste_interface__intracellular_ion_concentrations__Cai + var_sarcolemmal_calcium_pump__K_mpCa); // microA_per_microF + const double var_sodium_background_current__g_Nab = 0.0030999999999999999; // milliS_per_microF + const double var_sodium_potassium_pump__I_NaK = 0.69299999999999995; // microA_per_microF + const double var_sodium_potassium_pump__K_mKo = 1.5; // millimolar + const double var_sodium_potassium_pump__K_mNai = 10; // millimolar + const double var_L_type_Ca_current__i_Ca_max = 4000 * pow(var_membrane__F, 2) * (0.001 * exp(2 * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T)) - 0.34100000000000003 * mParameters[3]) * mParameters[6] * var_chaste_interface__membrane__V / ((-1 + exp(2 * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * var_membrane__R * var_membrane__T); // microA_per_microF + const double var_L_type_Ca_current__i_Ca = (var_chaste_interface__L_type_Ca_current__O + var_chaste_interface__L_type_Ca_current__O_Ca) * var_L_type_Ca_current__i_Ca_max * var_chaste_interface__L_type_Ca_current_y_gate__y; // microA_per_microF + const double var_L_type_Ca_current__p_prime_k = var_L_type_Ca_current__P_K / (1 + var_L_type_Ca_current__i_Ca_max / var_L_type_Ca_current__i_Ca_half); // cm_per_second + const double var_calcium_background_current__E_Ca = 0.5 * var_membrane__R * var_membrane__T * log(mParameters[3] / var_chaste_interface__intracellular_ion_concentrations__Cai) / var_membrane__F; // millivolt + const double var_calcium_background_current__i_Ca_b = (-var_calcium_background_current__E_Ca + var_chaste_interface__membrane__V) * var_calcium_background_current__g_Cab; // microA_per_microF + const double var_L_type_Ca_current__i_Ca_K = pow(var_membrane__F, 2) * (-mParameters[4] + var_chaste_interface__intracellular_ion_concentrations__Ki * exp(var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * (var_chaste_interface__L_type_Ca_current__O + var_chaste_interface__L_type_Ca_current__O_Ca) * var_L_type_Ca_current__p_prime_k * var_chaste_interface__L_type_Ca_current_y_gate__y * var_chaste_interface__membrane__V / ((-1 + exp(var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * var_membrane__R * var_membrane__T); // microA_per_microF + const double var_rapid_activating_delayed_rectifiyer_K_current__E_K = var_membrane__R * var_membrane__T * log(mParameters[4] / var_chaste_interface__intracellular_ion_concentrations__Ki) / var_membrane__F; // millivolt + const double var_plateau_potassium_current__i_Kp = (-var_rapid_activating_delayed_rectifiyer_K_current__E_K + var_chaste_interface__membrane__V) * var_plateau_potassium_current__g_Kp * var_plateau_potassium_current_Kp_gate__Kp_V; // microA_per_microF + const double var_rapid_activating_delayed_rectifiyer_K_current__f_Ko = 0.5 * sqrt(mParameters[4]); // dimensionless + const double var_rapid_activating_delayed_rectifiyer_K_current__i_Kr = (-var_rapid_activating_delayed_rectifiyer_K_current__E_K + var_chaste_interface__membrane__V) * var_rapid_activating_delayed_rectifiyer_K_current__R_V * var_rapid_activating_delayed_rectifiyer_K_current__f_Ko * mParameters[12] * var_chaste_interface__rapid_activating_delayed_rectifiyer_K_current_X_kr_gate__X_kr; // microA_per_microF + const double var_Na_Ca_exchanger__i_NaCa = 5000 * (pow(var_chaste_interface__intracellular_ion_concentrations__Nai, 3) * mParameters[3] * exp(var_Na_Ca_exchanger__eta * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T)) - pow(mParameters[5], 3) * var_chaste_interface__intracellular_ion_concentrations__Cai * exp((-1 + var_Na_Ca_exchanger__eta) * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * mParameters[14] / ((1 + var_Na_Ca_exchanger__K_sat * exp((-1 + var_Na_Ca_exchanger__eta) * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * (pow(var_Na_Ca_exchanger__K_mNa, 3) + pow(mParameters[5], 3)) * (var_Na_Ca_exchanger__K_mCa + mParameters[3])); // microA_per_microF + const double var_fast_sodium_current__E_Na = var_membrane__R * var_membrane__T * log(mParameters[5] / var_chaste_interface__intracellular_ion_concentrations__Nai) / var_membrane__F; // millivolt + const double var_fast_sodium_current__i_Na = pow(var_chaste_interface__fast_sodium_current_m_gate__m, 3) * (-var_fast_sodium_current__E_Na + var_chaste_interface__membrane__V) * mParameters[8] * var_chaste_interface__fast_sodium_current_h_gate__h * var_chaste_interface__fast_sodium_current_j_gate__j; // microA_per_microF + const double var_slow_activating_delayed_rectifiyer_K_current__E_Ks = var_membrane__R * var_membrane__T * log((mParameters[4] + 0.018329999999999999 * mParameters[5]) / (var_chaste_interface__intracellular_ion_concentrations__Ki + 0.018329999999999999 * var_chaste_interface__intracellular_ion_concentrations__Nai)) / var_membrane__F; // millivolt + const double var_slow_activating_delayed_rectifiyer_K_current__i_Ks = pow(var_chaste_interface__slow_activating_delayed_rectifiyer_K_current_X_ks_gate__X_ks, 2) * (-var_slow_activating_delayed_rectifiyer_K_current__E_Ks + var_chaste_interface__membrane__V) * mParameters[13]; // microA_per_microF + const double var_sodium_background_current__i_Na_b = (-var_fast_sodium_current__E_Na + var_chaste_interface__membrane__V) * var_sodium_background_current__g_Nab; // microA_per_microF + const double var_sodium_potassium_pump__sigma = -0.14285714285714285 + 0.14285714285714285 * exp(0.01485884101040119 * mParameters[5]); // dimensionless + const double var_sodium_potassium_pump__f_NaK = 1 / (1 + 0.1245 * exp(-0.10000000000000001 * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T)) + 0.036499999999999998 * var_sodium_potassium_pump__sigma * exp(-var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))); // dimensionless + const double var_sodium_potassium_pump__i_NaK = var_sodium_potassium_pump__I_NaK * var_sodium_potassium_pump__f_NaK * mParameters[4] / ((1 + pow((var_sodium_potassium_pump__K_mNai / var_chaste_interface__intracellular_ion_concentrations__Nai), 1.5)) * (var_sodium_potassium_pump__K_mKo + mParameters[4])); // microA_per_microF + const double var_time_independent_potassium_current__K_mK1 = 13; // millimolar + const double var_time_independent_potassium_current_K1_gate__K1_infinity_V = 1 / (2 + exp(1.5 * (-var_rapid_activating_delayed_rectifiyer_K_current__E_K + var_chaste_interface__membrane__V) * var_membrane__F / (var_membrane__R * var_membrane__T))); // dimensionless + const double var_time_independent_potassium_current__i_K1 = (-var_rapid_activating_delayed_rectifiyer_K_current__E_K + var_chaste_interface__membrane__V) * mParameters[4] * mParameters[11] * var_time_independent_potassium_current_K1_gate__K1_infinity_V / (mParameters[4] + var_time_independent_potassium_current__K_mK1); // microA_per_microF + const double var_transient_outward_potassium_current__i_to1 = (-var_rapid_activating_delayed_rectifiyer_K_current__E_K + var_chaste_interface__membrane__V) * mParameters[15] * var_chaste_interface__transient_outward_potassium_current_X_to1_gate__X_to1 * var_chaste_interface__transient_outward_potassium_current_Y_to1_gate__Y_to1; // microA_per_microF + const double var_membrane__V_orig_deriv = -(var_L_type_Ca_current__i_Ca + var_L_type_Ca_current__i_Ca_K + var_Na_Ca_exchanger__i_NaCa + var_calcium_background_current__i_Ca_b + var_fast_sodium_current__i_Na + var_membrane__i_Stim + var_plateau_potassium_current__i_Kp + var_rapid_activating_delayed_rectifiyer_K_current__i_Kr + var_sarcolemmal_calcium_pump__i_p_Ca + var_slow_activating_delayed_rectifiyer_K_current__i_Ks + var_sodium_background_current__i_Na_b + var_sodium_potassium_pump__i_NaK + var_time_independent_potassium_current__i_K1 + var_transient_outward_potassium_current__i_to1) / mParameters[7]; // millivolt / second + d_dt_chaste_interface_var_membrane__V = 0.001 * var_membrane__V_orig_deriv; // millivolt / millisecond + + return d_dt_chaste_interface_var_membrane__V; + } + + double Dynamicwinslow_model_1999FromCellMLGRL2::EvaluatePartialDerivative0(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -96.1638 + double var_chaste_interface__intracellular_ion_concentrations__Cai = rY[1]; + // Units: millimolar; Initial value: 8e-05 + double var_chaste_interface__fast_sodium_current_m_gate__m = rY[2]; + // Units: dimensionless; Initial value: 0.0328302 + double var_chaste_interface__fast_sodium_current_h_gate__h = rY[3]; + // Units: dimensionless; Initial value: 0.988354 + double var_chaste_interface__fast_sodium_current_j_gate__j = rY[4]; + // Units: dimensionless; Initial value: 0.99254 + double var_chaste_interface__rapid_activating_delayed_rectifiyer_K_current_X_kr_gate__X_kr = rY[5]; + // Units: dimensionless; Initial value: 0.51 + double var_chaste_interface__slow_activating_delayed_rectifiyer_K_current_X_ks_gate__X_ks = rY[6]; + // Units: dimensionless; Initial value: 0.264 + double var_chaste_interface__transient_outward_potassium_current_X_to1_gate__X_to1 = rY[7]; + // Units: dimensionless; Initial value: 2.63 + double var_chaste_interface__transient_outward_potassium_current_Y_to1_gate__Y_to1 = rY[8]; + // Units: dimensionless; Initial value: 0.99 + double var_chaste_interface__L_type_Ca_current__O = rY[9]; + // Units: dimensionless; Initial value: 9.84546e-21 + double var_chaste_interface__L_type_Ca_current__O_Ca = rY[10]; + // Units: dimensionless; Initial value: 0.0 + double var_chaste_interface__L_type_Ca_current_y_gate__y = rY[21]; + // Units: dimensionless; Initial value: 0.798 + double var_chaste_interface__intracellular_ion_concentrations__Nai = rY[28]; + // Units: millimolar; Initial value: 10.0 + double var_chaste_interface__intracellular_ion_concentrations__Ki = rY[29]; + // Units: millimolar; Initial value: 157.8 + + + const double var_x0 = exp(1.2521739130434781 - 0.16722408026755853 * var_chaste_interface__membrane__V); + const double var_x1 = 1 + var_x0; + const double var_x2 = 1 / var_x1; + const double var_x3 = pow(var_chaste_interface__slow_activating_delayed_rectifiyer_K_current_X_ks_gate__X_ks, 2) * mParameters[13]; + const double var_x4 = mParameters[15] * var_chaste_interface__transient_outward_potassium_current_Y_to1_gate__Y_to1; + const double var_x5 = var_x4 * var_chaste_interface__transient_outward_potassium_current_X_to1_gate__X_to1; + const double var_x6 = 1 / var_chaste_interface__intracellular_ion_concentrations__Ki; + const double var_x7 = var_x6 * mParameters[4]; + const double var_x8 = log(var_x7); + const double var_x9 = -26.713760659695648 * var_x8 + var_chaste_interface__membrane__V; + const double var_x10 = var_x0 * var_x9 / pow(var_x1, 2); + const double var_x11 = pow(var_chaste_interface__fast_sodium_current_m_gate__m, 3); + const double var_x12 = var_x11 * mParameters[8] * var_chaste_interface__fast_sodium_current_j_gate__j; + const double var_x13 = var_x12 * var_chaste_interface__fast_sodium_current_h_gate__h; + const double var_x14 = exp(0.044600000000000001 * var_chaste_interface__membrane__V); + const double var_x15 = sqrt(mParameters[4]); + const double var_x16 = var_x15 * mParameters[12] / (1 + 1.4944999999999999 * var_x14); + const double var_x17 = var_x16 * var_chaste_interface__rapid_activating_delayed_rectifiyer_K_current_X_kr_gate__X_kr; + const double var_x18 = mParameters[4]; + const double var_x19 = exp(0.056150836234118207 * var_chaste_interface__membrane__V - 1.5 * var_x8); + const double var_x20 = 1 / (13 + mParameters[4]); + const double var_x21 = var_x20 * mParameters[11]; + const double var_x22 = var_x21 / (2 + var_x19); + const double var_x23 = pow(var_chaste_interface__intracellular_ion_concentrations__Nai, 3); + const double var_x24 = exp(0.013101861787960915 * var_chaste_interface__membrane__V); + const double var_x25 = var_x24 * mParameters[3]; + const double var_x26 = exp(-0.024332029034784559 * var_chaste_interface__membrane__V); + const double var_x27 = pow(mParameters[5], 3); + const double var_x28 = var_x26 * var_x27; + const double var_x29 = var_x28 * var_chaste_interface__intracellular_ion_concentrations__Cai; + const double var_x30 = 1 + 0.20000000000000001 * var_x26; + const double var_x31 = 1 / var_x30; + const double var_x32 = 1 / (669921.875 + var_x27); + const double var_x33 = 1 / (1.3799999999999999 + mParameters[3]); + const double var_x34 = var_x32 * var_x33 * mParameters[14]; + const double var_x35 = var_x31 * var_x34; + const double var_x36 = var_x35 * (0.024332029034784559 * var_x29 + 0.013101861787960915 * var_x23 * var_x25); + const double var_x37 = 1 / var_chaste_interface__intracellular_ion_concentrations__Nai; + const double var_x38 = pow(var_x37, 1.5); + const double var_x39 = 1 / (1 + 31.622776601683793 * var_x38); + const double var_x40 = exp(-0.0037433890822745476 * var_chaste_interface__membrane__V); + const double var_x41 = exp(0.01485884101040119 * mParameters[5]); + const double var_x42 = 0.037433890822745473 * var_chaste_interface__membrane__V; + const double var_x43 = exp(-var_x42); + const double var_x44 = 1 + 0.1245 * var_x40 + 0.036499999999999998 * var_x43 * (-0.14285714285714285 + 0.14285714285714285 * var_x41); + const double var_x45 = pow(var_x44, (-2)); + const double var_x46 = 0.00046605194074318115 * var_x40 + 0.037433890822745473 * var_x43 * (-0.0052142857142857138 + 0.0052142857142857138 * var_x41); + const double var_x47 = 1 / (1.5 + mParameters[4]); + const double var_x48 = var_x47 * mParameters[4]; + const double var_x49 = var_x39 * var_x45 * var_x46 * var_x48; + const double var_x50 = var_chaste_interface__L_type_Ca_current__O + var_chaste_interface__L_type_Ca_current__O_Ca; + const double var_x51 = var_x50 * var_chaste_interface__L_type_Ca_current_y_gate__y; + const double var_x52 = exp(0.074867781645490947 * var_chaste_interface__membrane__V); + const double var_x53 = -1 + var_x52; + const double var_x54 = 1 / var_x53; + const double var_x55 = 0.001 * var_x52 - 0.34100000000000003 * mParameters[3]; + const double var_x56 = var_x54 * var_x55 * mParameters[6]; + const double var_x57 = var_x56 * var_chaste_interface__membrane__V; + const double var_x58 = 1 / (1 - 54518.063995566983 * var_x57); + const double var_x59 = exp(var_x42); + const double var_x60 = -1 + var_x59; + const double var_x61 = 1 / var_x60; + const double var_x62 = var_x59 * var_chaste_interface__intracellular_ion_concentrations__Ki; + const double var_x63 = var_x62 - mParameters[4]; + const double var_x64 = var_x58 * var_x61 * var_x63; + const double var_x65 = 2.0912447872899554e-6 * var_x64; + const double var_x66 = var_x51 * var_x56; + const double var_x67 = var_x52 * mParameters[6] * var_chaste_interface__membrane__V; + const double var_x68 = var_x54 * var_x67; + const double var_x69 = var_x51 * var_x68; + const double var_x70 = -var_x29 + var_x23 * var_x24 * mParameters[3]; + const double var_x71 = var_x26 * var_x34 * var_x70 / pow(var_x30, 2); + const double var_x72 = pow((1 + 0.5 * var_x19), (-2)); + const double var_x73 = var_x19 * var_x21 * var_x72 * var_x9; + const double var_x74 = pow((0.66912010705921721 + var_x14), (-2)); + const double var_x75 = var_x51 * var_x61 * var_chaste_interface__membrane__V; + const double var_x76 = var_x58 * var_x75; + const double var_x77 = var_x62 * var_x76; + const double var_x78 = pow(var_x53, (-2)); + const double var_x79 = var_x55 * var_x67 * var_x78; + const double var_x80 = var_x63 * var_x75 * (4.0816465109550109 * var_x68 + 54518.063995566983 * var_x56 - 4081.6465109550109 * var_x79) / pow((1.8342544226833014e-5 - var_x57), 2); + const double var_x81 = pow(var_x60, (-2)); + const double var_x82 = 1 / mParameters[7]; + const double var_x83 = 0.001 * var_x82; + + partialF = -var_x83 * (0.0034841999999999998 + var_x13 + var_x3 + var_x5 + 0.5 * var_x17 + 5000 * var_x36 + 0.0022160000000000001 * var_x2 + 0.69299999999999995 * var_x49 + 1.0816363254030779 * var_x69 + 7.8283429051047759e-8 * var_x77 + 0.00037056856187290968 * var_x10 + 24.332029034784558 * var_x71 + 7.035970683610309e-16 * var_x80 + 14447.286958825252 * var_x66 + var_x18 * var_x22 + var_x51 * var_x65 - 1081.636325403078 * var_x51 * var_x79 - 0.014037709058529552 * var_x73 * mParameters[4] - 7.8283429051047759e-8 * var_x51 * var_x58 * var_x59 * var_x63 * var_x81 * var_chaste_interface__membrane__V - 0.014921378387420543 * var_x14 * var_x15 * var_x74 * var_x9 * mParameters[12] * var_chaste_interface__rapid_activating_delayed_rectifiyer_K_current_X_kr_gate__X_kr); + } + else + { + const double y_save = rY[0]; + rY[0] += delta; + const double temp = EvaluateYDerivative0(var_chaste_interface__environment__time_converted, rY); + partialF = (temp-mEvalF[0])/delta; + rY[0] = y_save; + } + return partialF; + } + double Dynamicwinslow_model_1999FromCellMLGRL2::EvaluateYDerivative1(double var_chaste_interface__environment__time_converted, std::vector& rY) + { + + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -96.1638 + double var_chaste_interface__intracellular_ion_concentrations__Cai = rY[1]; + // Units: millimolar; Initial value: 8e-05 + double var_chaste_interface__intracellular_Ca_fluxes__HTRPNCa = rY[26]; + // Units: millimolar; Initial value: 0.98 + double var_chaste_interface__intracellular_Ca_fluxes__LTRPNCa = rY[27]; + // Units: millimolar; Initial value: 0.078 + double var_chaste_interface__intracellular_ion_concentrations__Nai = rY[28]; + // Units: millimolar; Initial value: 10.0 + double var_chaste_interface__intracellular_ion_concentrations__Ca_ss = rY[30]; + // Units: millimolar; Initial value: 0.00011 + double var_chaste_interface__intracellular_ion_concentrations__Ca_NSR = rY[32]; + // Units: millimolar; Initial value: 0.257 + + + // Mathematics + const double var_Na_Ca_exchanger__K_mCa = 1.3799999999999999; // millimolar + const double var_Na_Ca_exchanger__K_mNa = 87.5; // millimolar + const double var_Na_Ca_exchanger__K_sat = 0.20000000000000001; // dimensionless + const double var_Na_Ca_exchanger__eta = 0.34999999999999998; // dimensionless + const double var_SERCA2a_pump__K_fb = 0.00016799999999999999; // millimolar + const double var_SERCA2a_pump__K_rb = 3.29; // millimolar + const double var_SERCA2a_pump__N_fb = 1.2; // dimensionless + const double var_SERCA2a_pump__N_rb = 1; // dimensionless + const double var_SERCA2a_pump__Vmaxf = 0.081299999999999997; // millimolar_per_second + const double var_SERCA2a_pump__Vmaxr = 0.318; // millimolar_per_second + const double var_calcium_background_current__g_Cab = 0.00038420000000000001; // milliS_per_microF + const double var_intracellular_Ca_fluxes__HTRPN_tot = 0.14000000000000001; // dimensionless + const double var_intracellular_Ca_fluxes__LTRPN_tot = 0.070000000000000007; // dimensionless + const double var_intracellular_Ca_fluxes__k_htrpn_minus = 0.066000000000000003; // per_second + const double var_intracellular_Ca_fluxes__k_htrpn_plus = 20000; // per_millimolar_second + const double var_intracellular_Ca_fluxes__k_ltrpn_minus = 40; // per_second + const double var_intracellular_Ca_fluxes__k_ltrpn_plus = 40000; // per_millimolar_second + const double var_intracellular_Ca_fluxes__tau_xfer = 0.026700000000000002; // second + const double var_intracellular_ion_concentrations__A_cap = 0.00015339999999999999; // cm2 + const double var_intracellular_ion_concentrations__CMDN_tot = 0.050000000000000003; // millimolar + const double var_SERCA2a_pump__rb = pow((var_chaste_interface__intracellular_ion_concentrations__Ca_NSR / var_SERCA2a_pump__K_rb), var_SERCA2a_pump__N_rb); // dimensionless + const double var_SERCA2a_pump__fb = pow((var_chaste_interface__intracellular_ion_concentrations__Cai / var_SERCA2a_pump__K_fb), var_SERCA2a_pump__N_fb); // dimensionless + const double var_SERCA2a_pump__J_up = (var_SERCA2a_pump__Vmaxf * var_SERCA2a_pump__fb - var_SERCA2a_pump__Vmaxr * var_SERCA2a_pump__rb) * mParameters[1] / (1 + var_SERCA2a_pump__fb + var_SERCA2a_pump__rb); // millimolar_per_second + const double var_intracellular_Ca_fluxes__HTRPNCa_orig_deriv = -var_chaste_interface__intracellular_Ca_fluxes__HTRPNCa * var_intracellular_Ca_fluxes__k_htrpn_minus + (1 - var_chaste_interface__intracellular_Ca_fluxes__HTRPNCa) * var_intracellular_Ca_fluxes__k_htrpn_plus * var_chaste_interface__intracellular_ion_concentrations__Cai; // millimolar / second + const double var_intracellular_Ca_fluxes__J_HTRPNCa = var_intracellular_Ca_fluxes__HTRPNCa_orig_deriv; // millimolar_per_second + const double var_intracellular_Ca_fluxes__J_xfer = (-var_chaste_interface__intracellular_ion_concentrations__Cai + var_chaste_interface__intracellular_ion_concentrations__Ca_ss) / var_intracellular_Ca_fluxes__tau_xfer; // millimolar_per_second + const double var_intracellular_Ca_fluxes__LTRPNCa_orig_deriv = -var_chaste_interface__intracellular_Ca_fluxes__LTRPNCa * var_intracellular_Ca_fluxes__k_ltrpn_minus + (1 - var_chaste_interface__intracellular_Ca_fluxes__LTRPNCa) * var_intracellular_Ca_fluxes__k_ltrpn_plus * var_chaste_interface__intracellular_ion_concentrations__Cai; // millimolar / second + const double var_intracellular_Ca_fluxes__J_LTRPNCa = var_intracellular_Ca_fluxes__LTRPNCa_orig_deriv; // millimolar_per_second + const double var_intracellular_Ca_fluxes__J_trpn = var_intracellular_Ca_fluxes__HTRPN_tot * var_intracellular_Ca_fluxes__J_HTRPNCa + var_intracellular_Ca_fluxes__J_LTRPNCa * var_intracellular_Ca_fluxes__LTRPN_tot; // millimolar_per_second + const double var_intracellular_ion_concentrations__EGTA_tot = 0; // millimolar + const double var_intracellular_ion_concentrations__K_mCMDN = 0.0023800000000000002; // millimolar + const double var_intracellular_ion_concentrations__K_mEGTA = 0.00014999999999999999; // millimolar + const double var_intracellular_ion_concentrations__V_myo = 2.584e-5; // micro_litre + const double var_intracellular_ion_concentrations__beta_i = 1 / (1 + var_intracellular_ion_concentrations__CMDN_tot * var_intracellular_ion_concentrations__K_mCMDN / pow((var_chaste_interface__intracellular_ion_concentrations__Cai + var_intracellular_ion_concentrations__K_mCMDN), 2) + var_intracellular_ion_concentrations__EGTA_tot * var_intracellular_ion_concentrations__K_mEGTA / pow((var_chaste_interface__intracellular_ion_concentrations__Cai + var_intracellular_ion_concentrations__K_mEGTA), 2)); // dimensionless + const double var_membrane__F = 96.485341500000004; // coulomb_per_millimole + const double var_membrane__R = 8.3144720000000003; // joule_per_mole_kelvin + const double var_membrane__T = 310; // kelvin + const double var_sarcolemmal_calcium_pump__I_pCa = 0.050000000000000003; // microA_per_microF + const double var_sarcolemmal_calcium_pump__K_mpCa = 5.0000000000000002e-5; // millimolar + const double var_sarcolemmal_calcium_pump__i_p_Ca = var_chaste_interface__intracellular_ion_concentrations__Cai * var_sarcolemmal_calcium_pump__I_pCa / (var_chaste_interface__intracellular_ion_concentrations__Cai + var_sarcolemmal_calcium_pump__K_mpCa); // microA_per_microF + const double var_calcium_background_current__E_Ca = 0.5 * var_membrane__R * var_membrane__T * log(mParameters[3] / var_chaste_interface__intracellular_ion_concentrations__Cai) / var_membrane__F; // millivolt + const double var_calcium_background_current__i_Ca_b = (-var_calcium_background_current__E_Ca + var_chaste_interface__membrane__V) * var_calcium_background_current__g_Cab; // microA_per_microF + const double var_Na_Ca_exchanger__i_NaCa = 5000 * (pow(var_chaste_interface__intracellular_ion_concentrations__Nai, 3) * mParameters[3] * exp(var_Na_Ca_exchanger__eta * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T)) - pow(mParameters[5], 3) * var_chaste_interface__intracellular_ion_concentrations__Cai * exp((-1 + var_Na_Ca_exchanger__eta) * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * mParameters[14] / ((1 + var_Na_Ca_exchanger__K_sat * exp((-1 + var_Na_Ca_exchanger__eta) * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * (pow(var_Na_Ca_exchanger__K_mNa, 3) + pow(mParameters[5], 3)) * (var_Na_Ca_exchanger__K_mCa + mParameters[3])); // microA_per_microF + const double var_intracellular_ion_concentrations__Cai_orig_deriv = (-var_SERCA2a_pump__J_up - var_intracellular_Ca_fluxes__J_trpn + 0.5 * (-var_calcium_background_current__i_Ca_b - var_sarcolemmal_calcium_pump__i_p_Ca + 2 * var_Na_Ca_exchanger__i_NaCa) * var_intracellular_ion_concentrations__A_cap / (var_intracellular_ion_concentrations__V_myo * var_membrane__F) + var_intracellular_Ca_fluxes__J_xfer) * var_intracellular_ion_concentrations__beta_i; // millimolar / second + const double d_dt_chaste_interface_var_intracellular_ion_concentrations__Cai = 0.001 * var_intracellular_ion_concentrations__Cai_orig_deriv; // millimolar / millisecond + + return d_dt_chaste_interface_var_intracellular_ion_concentrations__Cai; + } + + double Dynamicwinslow_model_1999FromCellMLGRL2::EvaluatePartialDerivative1(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -96.1638 + double var_chaste_interface__intracellular_ion_concentrations__Cai = rY[1]; + // Units: millimolar; Initial value: 8e-05 + double var_chaste_interface__intracellular_Ca_fluxes__HTRPNCa = rY[26]; + // Units: millimolar; Initial value: 0.98 + double var_chaste_interface__intracellular_Ca_fluxes__LTRPNCa = rY[27]; + // Units: millimolar; Initial value: 0.078 + double var_chaste_interface__intracellular_ion_concentrations__Nai = rY[28]; + // Units: millimolar; Initial value: 10.0 + double var_chaste_interface__intracellular_ion_concentrations__Ca_ss = rY[30]; + // Units: millimolar; Initial value: 0.00011 + double var_chaste_interface__intracellular_ion_concentrations__Ca_NSR = rY[32]; + // Units: millimolar; Initial value: 0.257 + + + const double var_x23 = pow(var_chaste_interface__intracellular_ion_concentrations__Nai, 3); + const double var_x24 = exp(0.013101861787960915 * var_chaste_interface__membrane__V); + const double var_x26 = exp(-0.024332029034784559 * var_chaste_interface__membrane__V); + const double var_x27 = pow(mParameters[5], 3); + const double var_x28 = var_x26 * var_x27; + const double var_x29 = var_x28 * var_chaste_interface__intracellular_ion_concentrations__Cai; + const double var_x30 = 1 + 0.20000000000000001 * var_x26; + const double var_x31 = 1 / var_x30; + const double var_x32 = 1 / (669921.875 + var_x27); + const double var_x33 = 1 / (1.3799999999999999 + mParameters[3]); + const double var_x34 = var_x32 * var_x33 * mParameters[14]; + const double var_x35 = var_x31 * var_x34; + const double var_x70 = -var_x29 + var_x23 * var_x24 * mParameters[3]; + const double var_x84 = 5.0000000000000002e-5 + var_chaste_interface__intracellular_ion_concentrations__Cai; + const double var_x85 = 1 / var_x84; + const double var_x86 = 1 / var_chaste_interface__intracellular_ion_concentrations__Cai; + const double var_x87 = pow(var_x84, (-2)); + const double var_x113 = 0.0023800000000000002 + var_chaste_interface__intracellular_ion_concentrations__Cai; + const double var_x114 = 1 + 0.00011900000000000002 / pow(var_x113, 2); + const double var_x115 = 1 / var_x114; + const double var_x116 = 0.001 * var_x115; + const double var_x117 = 0.0015381954438488301 * var_x85; + const double var_x118 = pow(var_chaste_interface__intracellular_ion_concentrations__Cai, 0.19999999999999996); + const double var_x119 = pow(var_chaste_interface__intracellular_ion_concentrations__Cai, 1.2); + const double var_x120 = pow(var_chaste_interface__intracellular_ion_concentrations__Ca_NSR, 1); + const double var_x121 = 1 / (1 + 33855.471141425078 * var_x119 + 0.303951367781155 * var_x120); + const double var_x122 = var_x121 * mParameters[1]; + const double var_x123 = pow((2.9537323401073989e-5 + var_x119 + 8.9779098483507565e-6 * var_x120), (-2)); + const double var_x124 = 2752.4498037978587 * var_x119 - 0.096656534954407292 * var_x120; + const double var_x125 = 2800.0000000000005 * var_chaste_interface__intracellular_ion_concentrations__Cai; + + partialF = var_x116 * (-5637.4531835205999 - var_x117 + 2800.0000000000005 * var_chaste_interface__intracellular_Ca_fluxes__HTRPNCa + 2800.0000000000005 * var_chaste_interface__intracellular_Ca_fluxes__LTRPNCa - 0.00015787156411954756 * var_x86 + 0.0015381954438488301 * var_x87 * var_chaste_interface__intracellular_ion_concentrations__Cai - 307.63908876976598 * var_x28 * var_x35 - 3302.9397645574304 * var_x118 * var_x122 + 3.5444788081288787e-5 * var_x118 * var_x123 * var_x124 * mParameters[1]) + 2.3800000000000004e-7 * (2.8000000000000003 * var_chaste_interface__intracellular_Ca_fluxes__LTRPNCa + 37.453183520599246 * var_chaste_interface__intracellular_ion_concentrations__Ca_ss + 0.0092400000000000017 * var_chaste_interface__intracellular_Ca_fluxes__HTRPNCa + 0.00015787156411954756 * log(var_x86 * mParameters[3]) - 37.453183520599246 * var_chaste_interface__intracellular_ion_concentrations__Cai - 1.181949379053441e-5 * var_chaste_interface__membrane__V - var_x117 * var_chaste_interface__intracellular_ion_concentrations__Cai - var_x122 * var_x124 - var_x125 * (1 - var_chaste_interface__intracellular_Ca_fluxes__HTRPNCa) - var_x125 * (1 - var_chaste_interface__intracellular_Ca_fluxes__LTRPNCa) + 307.63908876976598 * var_x31 * var_x32 * var_x33 * var_x70 * mParameters[14]) / (pow(var_x113, 3) * pow(var_x114, 2)); + } + else + { + const double y_save = rY[1]; + rY[1] += delta; + const double temp = EvaluateYDerivative1(var_chaste_interface__environment__time_converted, rY); + partialF = (temp-mEvalF[1])/delta; + rY[1] = y_save; + } + return partialF; + } + double Dynamicwinslow_model_1999FromCellMLGRL2::EvaluateYDerivative2(double var_chaste_interface__environment__time_converted, std::vector& rY) + { + + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -96.1638 + double var_chaste_interface__fast_sodium_current_m_gate__m = rY[2]; + // Units: dimensionless; Initial value: 0.0328302 + + + // Mathematics + const double var_fast_sodium_current_m_gate__E0_m = 47.130000000000003 + var_chaste_interface__membrane__V; // millivolt + const double var_fast_sodium_current_m_gate__alpha_m = ((fabs(var_fast_sodium_current_m_gate__E0_m) < 1.0000000000000001e-5) ? (1000 / (0.10000000000000001 - 0.0050000000000000001 * var_fast_sodium_current_m_gate__E0_m)) : (320 * var_fast_sodium_current_m_gate__E0_m / (1 - exp(-0.10000000000000001 * var_fast_sodium_current_m_gate__E0_m)))); // per_second + const double var_fast_sodium_current_m_gate__beta_m = 80 * exp(-0.090909090909090912 * var_chaste_interface__membrane__V); // per_second + const double var_fast_sodium_current_m_gate__m_orig_deriv = ((var_chaste_interface__membrane__V >= -90) ? ((1 - var_chaste_interface__fast_sodium_current_m_gate__m) * var_fast_sodium_current_m_gate__alpha_m - var_fast_sodium_current_m_gate__beta_m * var_chaste_interface__fast_sodium_current_m_gate__m) : (0)); // 1 / second + const double d_dt_chaste_interface_var_fast_sodium_current_m_gate__m = 0.001 * var_fast_sodium_current_m_gate__m_orig_deriv; // 1 / millisecond + + return d_dt_chaste_interface_var_fast_sodium_current_m_gate__m; + } + + double Dynamicwinslow_model_1999FromCellMLGRL2::EvaluatePartialDerivative2(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -96.1638 + + + const double var_x128 = exp(-0.090909090909090912 * var_chaste_interface__membrane__V); + const double var_x130 = var_chaste_interface__membrane__V >= -90; + const double var_x131 = 47.130000000000003 + var_chaste_interface__membrane__V; + const double var_x132 = (var_x130) && (fabs(var_x131) < 1.0000000000000001e-5); + const double var_x133 = 0.10000000000000001 * var_chaste_interface__membrane__V; + const double var_x134 = exp(-4.7130000000000001 - var_x133); + const double var_x135 = 1 - var_x134; + const double var_x136 = 320 / var_x135; + const double var_x137 = 80 * var_x128; + + partialF = 0.001 * ((var_x132) ? (-var_x137 - 1000 / (-0.13565000000000002 - 0.0050000000000000001 * var_chaste_interface__membrane__V)) : ((var_x130) ? (-var_x137 - var_x131 * var_x136) : (0))); + } + else + { + const double y_save = rY[2]; + rY[2] += delta; + const double temp = EvaluateYDerivative2(var_chaste_interface__environment__time_converted, rY); + partialF = (temp-mEvalF[2])/delta; + rY[2] = y_save; + } + return partialF; + } + double Dynamicwinslow_model_1999FromCellMLGRL2::EvaluateYDerivative3(double var_chaste_interface__environment__time_converted, std::vector& rY) + { + + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -96.1638 + double var_chaste_interface__fast_sodium_current_h_gate__h = rY[3]; + // Units: dimensionless; Initial value: 0.988354 + + + // Mathematics + const double var_fast_sodium_current_h_gate__alpha_h = ((var_chaste_interface__membrane__V < -40) ? (135 * exp(-11.764705882352942 + 0.14705882352941177 * mParameters[10] - 0.14705882352941177 * var_chaste_interface__membrane__V)) : (0)); // per_second + const double var_fast_sodium_current_h_gate__beta_h = ((var_chaste_interface__membrane__V < -40) ? (3560 * exp(0.079000000000000001 * var_chaste_interface__membrane__V - 0.079000000000000001 * mParameters[10]) + 310000 * exp(0.34999999999999998 * var_chaste_interface__membrane__V - 0.34999999999999998 * mParameters[10])) : (7692.3076923076924 / (1 + exp(-0.96036036036036043 + 0.0900900900900901 * mParameters[10] - 0.0900900900900901 * var_chaste_interface__membrane__V)))); // per_second + const double var_fast_sodium_current_h_gate__h_inf = 0.01 * mParameters[9] + (1 - 0.01 * mParameters[9]) * var_fast_sodium_current_h_gate__alpha_h / (var_fast_sodium_current_h_gate__alpha_h + var_fast_sodium_current_h_gate__beta_h); // dimensionless + const double var_fast_sodium_current_h_gate__tau_h = 1 / (var_fast_sodium_current_h_gate__alpha_h + var_fast_sodium_current_h_gate__beta_h); // second + const double var_fast_sodium_current_h_gate__h_orig_deriv = (-var_chaste_interface__fast_sodium_current_h_gate__h + var_fast_sodium_current_h_gate__h_inf) / var_fast_sodium_current_h_gate__tau_h; // 1 / second + const double d_dt_chaste_interface_var_fast_sodium_current_h_gate__h = 0.001 * var_fast_sodium_current_h_gate__h_orig_deriv; // 1 / millisecond + + return d_dt_chaste_interface_var_fast_sodium_current_h_gate__h; + } + + double Dynamicwinslow_model_1999FromCellMLGRL2::EvaluatePartialDerivative3(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -96.1638 + + + const double var_x138 = exp(-11.764705882352942 + 0.14705882352941177 * mParameters[10] - 0.14705882352941177 * var_chaste_interface__membrane__V); + const double var_x139 = var_chaste_interface__membrane__V < -40; + const double var_x140 = ((var_x139) ? (135 * var_x138) : (0)); + const double var_x141 = exp(0.079000000000000001 * var_chaste_interface__membrane__V - 0.079000000000000001 * mParameters[10]); + const double var_x142 = exp(0.34999999999999998 * var_chaste_interface__membrane__V - 0.34999999999999998 * mParameters[10]); + const double var_x143 = exp(-0.96036036036036043 + 0.0900900900900901 * mParameters[10] - 0.0900900900900901 * var_chaste_interface__membrane__V); + const double var_x144 = 1 + var_x143; + const double var_x145 = ((var_x139) ? (3560 * var_x141 + 310000 * var_x142) : (7692.3076923076924 / var_x144)); + const double var_x146 = 0.001 * var_x140 + 0.001 * var_x145; + + partialF = -var_x146; + } + else + { + const double y_save = rY[3]; + rY[3] += delta; + const double temp = EvaluateYDerivative3(var_chaste_interface__environment__time_converted, rY); + partialF = (temp-mEvalF[3])/delta; + rY[3] = y_save; + } + return partialF; + } + double Dynamicwinslow_model_1999FromCellMLGRL2::EvaluateYDerivative4(double var_chaste_interface__environment__time_converted, std::vector& rY) + { + + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -96.1638 + double var_chaste_interface__fast_sodium_current_j_gate__j = rY[4]; + // Units: dimensionless; Initial value: 0.99254 + + + // Mathematics + const double var_fast_sodium_current_j_gate__alpha_j = ((var_chaste_interface__membrane__V < -40) ? (1000 * (37.780000000000001 + var_chaste_interface__membrane__V) * (-127140 * exp(0.24440000000000001 * var_chaste_interface__membrane__V - 0.24440000000000001 * mParameters[10]) - 3.4740000000000003e-5 * exp(0.043909999999999998 * mParameters[10] - 0.043909999999999998 * var_chaste_interface__membrane__V)) / (1 + exp(24.640530000000002 + 0.311 * var_chaste_interface__membrane__V - 0.311 * mParameters[10]))) : (0)); // per_second + const double var_fast_sodium_current_j_gate__beta_j = ((var_chaste_interface__membrane__V < -40) ? (121.2 * exp(0.01052 * mParameters[10] - 0.01052 * var_chaste_interface__membrane__V) / (1 + exp(-5.5312920000000005 + 0.13780000000000001 * mParameters[10] - 0.13780000000000001 * var_chaste_interface__membrane__V))) : (300 * exp(2.5349999999999999e-7 * mParameters[10] - 2.5349999999999999e-7 * var_chaste_interface__membrane__V) / (1 + exp(-3.2000000000000002 + 0.10000000000000001 * mParameters[10] - 0.10000000000000001 * var_chaste_interface__membrane__V)))); // per_second + const double var_fast_sodium_current_j_gate__j_inf = 0.01 * mParameters[9] + (1 - 0.01 * mParameters[9]) * var_fast_sodium_current_j_gate__alpha_j / (var_fast_sodium_current_j_gate__alpha_j + var_fast_sodium_current_j_gate__beta_j); // dimensionless + const double var_fast_sodium_current_j_gate__tau_j = 1 / (var_fast_sodium_current_j_gate__alpha_j + var_fast_sodium_current_j_gate__beta_j); // second + const double var_fast_sodium_current_j_gate__j_orig_deriv = (-var_chaste_interface__fast_sodium_current_j_gate__j + var_fast_sodium_current_j_gate__j_inf) / var_fast_sodium_current_j_gate__tau_j; // 1 / second + const double d_dt_chaste_interface_var_fast_sodium_current_j_gate__j = 0.001 * var_fast_sodium_current_j_gate__j_orig_deriv; // 1 / millisecond + + return d_dt_chaste_interface_var_fast_sodium_current_j_gate__j; + } + + double Dynamicwinslow_model_1999FromCellMLGRL2::EvaluatePartialDerivative4(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -96.1638 + + + const double var_x133 = 0.10000000000000001 * var_chaste_interface__membrane__V; + const double var_x139 = var_chaste_interface__membrane__V < -40; + const double var_x153 = exp(-5.5312920000000005 + 0.13780000000000001 * mParameters[10] - 0.13780000000000001 * var_chaste_interface__membrane__V); + const double var_x154 = 1 + var_x153; + const double var_x155 = exp(0.01052 * mParameters[10] - 0.01052 * var_chaste_interface__membrane__V); + const double var_x156 = var_x155 / var_x154; + const double var_x157 = exp(-3.2000000000000002 - var_x133 + 0.10000000000000001 * mParameters[10]); + const double var_x158 = 1 + var_x157; + const double var_x159 = exp(2.5349999999999999e-7 * mParameters[10] - 2.5349999999999999e-7 * var_chaste_interface__membrane__V); + const double var_x160 = var_x159 / var_x158; + const double var_x161 = ((var_x139) ? (121.2 * var_x156) : (300 * var_x160)); + const double var_x162 = 37.780000000000001 + var_chaste_interface__membrane__V; + const double var_x163 = exp(0.24440000000000001 * var_chaste_interface__membrane__V - 0.24440000000000001 * mParameters[10]); + const double var_x164 = exp(0.043909999999999998 * mParameters[10] - 0.043909999999999998 * var_chaste_interface__membrane__V); + const double var_x165 = -127140 * var_x163 - 3.4740000000000003e-5 * var_x164; + const double var_x166 = exp(24.640530000000002 + 0.311 * var_chaste_interface__membrane__V - 0.311 * mParameters[10]); + const double var_x167 = 1 + var_x166; + const double var_x168 = 1000 / var_x167; + const double var_x169 = var_x165 * var_x168; + const double var_x170 = ((var_x139) ? (var_x162 * var_x169) : (0)); + const double var_x171 = 0.001 * var_x161 + 0.001 * var_x170; + + partialF = -var_x171; + } + else + { + const double y_save = rY[4]; + rY[4] += delta; + const double temp = EvaluateYDerivative4(var_chaste_interface__environment__time_converted, rY); + partialF = (temp-mEvalF[4])/delta; + rY[4] = y_save; + } + return partialF; + } + double Dynamicwinslow_model_1999FromCellMLGRL2::EvaluateYDerivative5(double var_chaste_interface__environment__time_converted, std::vector& rY) + { + + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -96.1638 + double var_chaste_interface__rapid_activating_delayed_rectifiyer_K_current_X_kr_gate__X_kr = rY[5]; + // Units: dimensionless; Initial value: 0.51 + + + // Mathematics + const double var_rapid_activating_delayed_rectifiyer_K_current_X_kr_gate__K12 = exp(-5.4950000000000001 + 0.1691 * var_chaste_interface__membrane__V); // dimensionless + const double var_rapid_activating_delayed_rectifiyer_K_current_X_kr_gate__K21 = exp(-7.6769999999999996 - 0.012800000000000001 * var_chaste_interface__membrane__V); // dimensionless + const double var_rapid_activating_delayed_rectifiyer_K_current_X_kr_gate__X_kr_inf = var_rapid_activating_delayed_rectifiyer_K_current_X_kr_gate__K12 / (var_rapid_activating_delayed_rectifiyer_K_current_X_kr_gate__K12 + var_rapid_activating_delayed_rectifiyer_K_current_X_kr_gate__K21); // dimensionless + const double var_rapid_activating_delayed_rectifiyer_K_current_X_kr_gate__tau_factor = 1; // dimensionless + const double var_rapid_activating_delayed_rectifiyer_K_current_X_kr_gate__tau_X_kr = 0.001 / (var_rapid_activating_delayed_rectifiyer_K_current_X_kr_gate__K12 + var_rapid_activating_delayed_rectifiyer_K_current_X_kr_gate__K21) + 0.027 * var_rapid_activating_delayed_rectifiyer_K_current_X_kr_gate__tau_factor; // second + const double var_rapid_activating_delayed_rectifiyer_K_current_X_kr_gate__X_kr_orig_deriv = (-var_chaste_interface__rapid_activating_delayed_rectifiyer_K_current_X_kr_gate__X_kr + var_rapid_activating_delayed_rectifiyer_K_current_X_kr_gate__X_kr_inf) / var_rapid_activating_delayed_rectifiyer_K_current_X_kr_gate__tau_X_kr; // 1 / second + const double d_dt_chaste_interface_var_rapid_activating_delayed_rectifiyer_K_current_X_kr_gate__X_kr = 0.001 * var_rapid_activating_delayed_rectifiyer_K_current_X_kr_gate__X_kr_orig_deriv; // 1 / millisecond + + return d_dt_chaste_interface_var_rapid_activating_delayed_rectifiyer_K_current_X_kr_gate__X_kr; + } + + double Dynamicwinslow_model_1999FromCellMLGRL2::EvaluatePartialDerivative5(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -96.1638 + + + const double var_x176 = exp(-7.6769999999999996 - 0.012800000000000001 * var_chaste_interface__membrane__V); + const double var_x177 = exp(-5.4950000000000001 + 0.1691 * var_chaste_interface__membrane__V); + const double var_x178 = var_x176 + var_x177; + const double var_x179 = 1 / var_x178; + const double var_x180 = 1 / (0.027 + 0.001 * var_x179); + + partialF = -0.001 * var_x180; + } + else + { + const double y_save = rY[5]; + rY[5] += delta; + const double temp = EvaluateYDerivative5(var_chaste_interface__environment__time_converted, rY); + partialF = (temp-mEvalF[5])/delta; + rY[5] = y_save; + } + return partialF; + } + double Dynamicwinslow_model_1999FromCellMLGRL2::EvaluateYDerivative6(double var_chaste_interface__environment__time_converted, std::vector& rY) + { + + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -96.1638 + double var_chaste_interface__slow_activating_delayed_rectifiyer_K_current_X_ks_gate__X_ks = rY[6]; + // Units: dimensionless; Initial value: 0.264 + + + // Mathematics + const double var_slow_activating_delayed_rectifiyer_K_current_X_ks_gate__X_ks_infinity = 1 / (1 + exp(1.8161764705882353 - 0.073529411764705885 * var_chaste_interface__membrane__V)); // dimensionless + const double var_slow_activating_delayed_rectifiyer_K_current_X_ks_gate__tau_X_ks = 0.001 / (0.00013100000000000001 * (-10 + var_chaste_interface__membrane__V) / (-1 + exp(-0.68699999999999994 + 0.068699999999999997 * var_chaste_interface__membrane__V)) + 7.1899999999999999e-5 * (-10 + var_chaste_interface__membrane__V) / (1 - exp(1.48 - 0.14799999999999999 * var_chaste_interface__membrane__V))); // second + const double var_slow_activating_delayed_rectifiyer_K_current_X_ks_gate__X_ks_orig_deriv = (-var_chaste_interface__slow_activating_delayed_rectifiyer_K_current_X_ks_gate__X_ks + var_slow_activating_delayed_rectifiyer_K_current_X_ks_gate__X_ks_infinity) / var_slow_activating_delayed_rectifiyer_K_current_X_ks_gate__tau_X_ks; // 1 / second + const double d_dt_chaste_interface_var_slow_activating_delayed_rectifiyer_K_current_X_ks_gate__X_ks = 0.001 * var_slow_activating_delayed_rectifiyer_K_current_X_ks_gate__X_ks_orig_deriv; // 1 / millisecond + + return d_dt_chaste_interface_var_slow_activating_delayed_rectifiyer_K_current_X_ks_gate__X_ks; + } + + double Dynamicwinslow_model_1999FromCellMLGRL2::EvaluatePartialDerivative6(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -96.1638 + + + const double var_x185 = exp(-0.68699999999999994 + 0.068699999999999997 * var_chaste_interface__membrane__V); + const double var_x186 = -1 + var_x185; + const double var_x187 = 1 / var_x186; + const double var_x188 = exp(1.48 - 0.14799999999999999 * var_chaste_interface__membrane__V); + const double var_x189 = 1 - var_x188; + const double var_x190 = 1 / var_x189; + const double var_x191 = -10 + var_chaste_interface__membrane__V; + + partialF = -0.00013100000000000001 * var_x187 * var_x191 - 7.1899999999999999e-5 * var_x190 * var_x191; + } + else + { + const double y_save = rY[6]; + rY[6] += delta; + const double temp = EvaluateYDerivative6(var_chaste_interface__environment__time_converted, rY); + partialF = (temp-mEvalF[6])/delta; + rY[6] = y_save; + } + return partialF; + } + double Dynamicwinslow_model_1999FromCellMLGRL2::EvaluateYDerivative7(double var_chaste_interface__environment__time_converted, std::vector& rY) + { + + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -96.1638 + double var_chaste_interface__transient_outward_potassium_current_X_to1_gate__X_to1 = rY[7]; + // Units: dimensionless; Initial value: 2.63 + + + // Mathematics + const double var_transient_outward_potassium_current_X_to1_gate__alpha_X_to1 = 45.159999999999997 * exp(0.035770000000000003 * var_chaste_interface__membrane__V); // per_second + const double var_transient_outward_potassium_current_X_to1_gate__beta_X_to1 = 98.900000000000006 * exp(-0.062370000000000002 * var_chaste_interface__membrane__V); // per_second + const double var_transient_outward_potassium_current_X_to1_gate__X_to1_orig_deriv = (1 - var_chaste_interface__transient_outward_potassium_current_X_to1_gate__X_to1) * var_transient_outward_potassium_current_X_to1_gate__alpha_X_to1 - var_chaste_interface__transient_outward_potassium_current_X_to1_gate__X_to1 * var_transient_outward_potassium_current_X_to1_gate__beta_X_to1; // 1 / second + const double d_dt_chaste_interface_var_transient_outward_potassium_current_X_to1_gate__X_to1 = 0.001 * var_transient_outward_potassium_current_X_to1_gate__X_to1_orig_deriv; // 1 / millisecond + + return d_dt_chaste_interface_var_transient_outward_potassium_current_X_to1_gate__X_to1; + } + + double Dynamicwinslow_model_1999FromCellMLGRL2::EvaluatePartialDerivative7(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -96.1638 + + + const double var_x192 = exp(0.035770000000000003 * var_chaste_interface__membrane__V); + const double var_x193 = exp(-0.062370000000000002 * var_chaste_interface__membrane__V); + + partialF = -0.045159999999999999 * var_x192 - 0.098900000000000002 * var_x193; + } + else + { + const double y_save = rY[7]; + rY[7] += delta; + const double temp = EvaluateYDerivative7(var_chaste_interface__environment__time_converted, rY); + partialF = (temp-mEvalF[7])/delta; + rY[7] = y_save; + } + return partialF; + } + double Dynamicwinslow_model_1999FromCellMLGRL2::EvaluateYDerivative8(double var_chaste_interface__environment__time_converted, std::vector& rY) + { + + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -96.1638 + double var_chaste_interface__transient_outward_potassium_current_Y_to1_gate__Y_to1 = rY[8]; + // Units: dimensionless; Initial value: 0.99 + + + // Mathematics + const double var_transient_outward_potassium_current_Y_to1_gate__alpha_Y_to1 = 5.415 * exp(-6.7000000000000002 - 0.20000000000000001 * var_chaste_interface__membrane__V) / (1 + 0.051334999999999999 * exp(-6.7000000000000002 - 0.20000000000000001 * var_chaste_interface__membrane__V)); // per_second + const double var_transient_outward_potassium_current_Y_to1_gate__beta_Y_to1 = 5.415 * exp(6.7000000000000002 + 0.20000000000000001 * var_chaste_interface__membrane__V) / (1 + 0.051334999999999999 * exp(6.7000000000000002 + 0.20000000000000001 * var_chaste_interface__membrane__V)); // per_second + const double var_transient_outward_potassium_current_Y_to1_gate__Y_to1_orig_deriv = (1 - var_chaste_interface__transient_outward_potassium_current_Y_to1_gate__Y_to1) * var_transient_outward_potassium_current_Y_to1_gate__alpha_Y_to1 - var_chaste_interface__transient_outward_potassium_current_Y_to1_gate__Y_to1 * var_transient_outward_potassium_current_Y_to1_gate__beta_Y_to1; // 1 / second + const double d_dt_chaste_interface_var_transient_outward_potassium_current_Y_to1_gate__Y_to1 = 0.001 * var_transient_outward_potassium_current_Y_to1_gate__Y_to1_orig_deriv; // 1 / millisecond + + return d_dt_chaste_interface_var_transient_outward_potassium_current_Y_to1_gate__Y_to1; + } + + double Dynamicwinslow_model_1999FromCellMLGRL2::EvaluatePartialDerivative8(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -96.1638 + + + const double var_x194 = 0.20000000000000001 * var_chaste_interface__membrane__V; + const double var_x195 = 6.7000000000000002 + var_x194; + const double var_x196 = exp(var_x195); + const double var_x197 = 1 + 0.051334999999999999 * var_x196; + const double var_x198 = var_x196 / var_x197; + const double var_x200 = exp(-var_x195); + const double var_x201 = 1 + 0.051334999999999999 * var_x200; + const double var_x202 = var_x200 / var_x201; + + partialF = -0.0054149999999999997 * var_x198 - 0.0054149999999999997 * var_x202; + } + else + { + const double y_save = rY[8]; + rY[8] += delta; + const double temp = EvaluateYDerivative8(var_chaste_interface__environment__time_converted, rY); + partialF = (temp-mEvalF[8])/delta; + rY[8] = y_save; + } + return partialF; + } + double Dynamicwinslow_model_1999FromCellMLGRL2::EvaluateYDerivative9(double var_chaste_interface__environment__time_converted, std::vector& rY) + { + + double var_chaste_interface__L_type_Ca_current__O = rY[9]; + // Units: dimensionless; Initial value: 9.84546e-21 + double var_chaste_interface__L_type_Ca_current__C4 = rY[15]; + // Units: dimensionless; Initial value: 6.56337e-20 + + + // Mathematics + const double var_L_type_Ca_current__f = 300; // per_second + const double var_L_type_Ca_current__g = 2000; // per_second + const double var_L_type_Ca_current__O_orig_deriv = var_chaste_interface__L_type_Ca_current__C4 * var_L_type_Ca_current__f - var_chaste_interface__L_type_Ca_current__O * var_L_type_Ca_current__g; // 1 / second + const double d_dt_chaste_interface_var_L_type_Ca_current__O = 0.001 * var_L_type_Ca_current__O_orig_deriv; // 1 / millisecond + + return d_dt_chaste_interface_var_L_type_Ca_current__O; + } + + double Dynamicwinslow_model_1999FromCellMLGRL2::EvaluatePartialDerivative9(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + + + + partialF = -2; + } + else + { + const double y_save = rY[9]; + rY[9] += delta; + const double temp = EvaluateYDerivative9(var_chaste_interface__environment__time_converted, rY); + partialF = (temp-mEvalF[9])/delta; + rY[9] = y_save; + } + return partialF; + } + double Dynamicwinslow_model_1999FromCellMLGRL2::EvaluateYDerivative10(double var_chaste_interface__environment__time_converted, std::vector& rY) + { + + double var_chaste_interface__L_type_Ca_current__O_Ca = rY[10]; + // Units: dimensionless; Initial value: 0.0 + double var_chaste_interface__L_type_Ca_current__C_Ca4 = rY[20]; + // Units: dimensionless; Initial value: 4.59752e-20 + + + // Mathematics + const double var_L_type_Ca_current__fprime = 7; // per_second + const double var_L_type_Ca_current__gprime = 7000; // per_second + const double var_L_type_Ca_current__O_Ca_orig_deriv = var_chaste_interface__L_type_Ca_current__C_Ca4 * var_L_type_Ca_current__fprime - var_chaste_interface__L_type_Ca_current__O_Ca * var_L_type_Ca_current__gprime; // 1 / second + const double d_dt_chaste_interface_var_L_type_Ca_current__O_Ca = 0.001 * var_L_type_Ca_current__O_Ca_orig_deriv; // 1 / millisecond + + return d_dt_chaste_interface_var_L_type_Ca_current__O_Ca; + } + + double Dynamicwinslow_model_1999FromCellMLGRL2::EvaluatePartialDerivative10(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + + + + partialF = -7; + } + else + { + const double y_save = rY[10]; + rY[10] += delta; + const double temp = EvaluateYDerivative10(var_chaste_interface__environment__time_converted, rY); + partialF = (temp-mEvalF[10])/delta; + rY[10] = y_save; + } + return partialF; + } + double Dynamicwinslow_model_1999FromCellMLGRL2::EvaluateYDerivative11(double var_chaste_interface__environment__time_converted, std::vector& rY) + { + + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -96.1638 + double var_chaste_interface__L_type_Ca_current__C0 = rY[11]; + // Units: dimensionless; Initial value: 0.997208 + double var_chaste_interface__L_type_Ca_current__C1 = rY[12]; + // Units: dimensionless; Initial value: 6.38897e-05 + double var_chaste_interface__L_type_Ca_current__C_Ca0 = rY[16]; + // Units: dimensionless; Initial value: 0.00272826 + double var_chaste_interface__intracellular_ion_concentrations__Ca_ss = rY[30]; + // Units: millimolar; Initial value: 0.00011 + + + // Mathematics + const double var_L_type_Ca_current__omega = 10; // per_second + const double var_L_type_Ca_current__gamma = 103.75 * var_chaste_interface__intracellular_ion_concentrations__Ca_ss; // per_second + const double var_L_type_Ca_current__alpha = 400 * exp(0.20000000000000001 + 0.10000000000000001 * var_chaste_interface__membrane__V); // per_second + const double var_L_type_Ca_current__beta = 50 * exp(-0.15384615384615385 - 0.076923076923076927 * var_chaste_interface__membrane__V); // per_second + const double var_L_type_Ca_current__C0_orig_deriv = var_chaste_interface__L_type_Ca_current__C1 * var_L_type_Ca_current__beta + var_chaste_interface__L_type_Ca_current__C_Ca0 * var_L_type_Ca_current__omega - (4 * var_L_type_Ca_current__alpha + var_L_type_Ca_current__gamma) * var_chaste_interface__L_type_Ca_current__C0; // 1 / second + const double d_dt_chaste_interface_var_L_type_Ca_current__C0 = 0.001 * var_L_type_Ca_current__C0_orig_deriv; // 1 / millisecond + + return d_dt_chaste_interface_var_L_type_Ca_current__C0; + } + + double Dynamicwinslow_model_1999FromCellMLGRL2::EvaluatePartialDerivative11(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -96.1638 + double var_chaste_interface__intracellular_ion_concentrations__Ca_ss = rY[30]; + // Units: millimolar; Initial value: 0.00011 + + + const double var_x205 = exp(0.20000000000000001 + 0.10000000000000001 * var_chaste_interface__membrane__V); + const double var_x208 = 1.6000000000000001 * var_x205; + const double var_x209 = 0.10375 * var_chaste_interface__intracellular_ion_concentrations__Ca_ss; + + partialF = -var_x208 - var_x209; + } + else + { + const double y_save = rY[11]; + rY[11] += delta; + const double temp = EvaluateYDerivative11(var_chaste_interface__environment__time_converted, rY); + partialF = (temp-mEvalF[11])/delta; + rY[11] = y_save; + } + return partialF; + } + double Dynamicwinslow_model_1999FromCellMLGRL2::EvaluateYDerivative12(double var_chaste_interface__environment__time_converted, std::vector& rY) + { + + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -96.1638 + double var_chaste_interface__L_type_Ca_current__C0 = rY[11]; + // Units: dimensionless; Initial value: 0.997208 + double var_chaste_interface__L_type_Ca_current__C1 = rY[12]; + // Units: dimensionless; Initial value: 6.38897e-05 + double var_chaste_interface__L_type_Ca_current__C2 = rY[13]; + // Units: dimensionless; Initial value: 1.535e-09 + double var_chaste_interface__L_type_Ca_current__C_Ca1 = rY[17]; + // Units: dimensionless; Initial value: 6.99215e-07 + double var_chaste_interface__intracellular_ion_concentrations__Ca_ss = rY[30]; + // Units: millimolar; Initial value: 0.00011 + + + // Mathematics + const double var_L_type_Ca_current__a = 2; // dimensionless + const double var_L_type_Ca_current__b = 2; // dimensionless + const double var_L_type_Ca_current__omega = 10; // per_second + const double var_L_type_Ca_current__gamma = 103.75 * var_chaste_interface__intracellular_ion_concentrations__Ca_ss; // per_second + const double var_L_type_Ca_current__alpha = 400 * exp(0.20000000000000001 + 0.10000000000000001 * var_chaste_interface__membrane__V); // per_second + const double var_L_type_Ca_current__beta = 50 * exp(-0.15384615384615385 - 0.076923076923076927 * var_chaste_interface__membrane__V); // per_second + const double var_L_type_Ca_current__C1_orig_deriv = -(3 * var_L_type_Ca_current__alpha + var_L_type_Ca_current__a * var_L_type_Ca_current__gamma + var_L_type_Ca_current__beta) * var_chaste_interface__L_type_Ca_current__C1 + 2 * var_chaste_interface__L_type_Ca_current__C2 * var_L_type_Ca_current__beta + 4 * var_chaste_interface__L_type_Ca_current__C0 * var_L_type_Ca_current__alpha + var_chaste_interface__L_type_Ca_current__C_Ca1 * var_L_type_Ca_current__omega / var_L_type_Ca_current__b; // 1 / second + const double d_dt_chaste_interface_var_L_type_Ca_current__C1 = 0.001 * var_L_type_Ca_current__C1_orig_deriv; // 1 / millisecond + + return d_dt_chaste_interface_var_L_type_Ca_current__C1; + } + + double Dynamicwinslow_model_1999FromCellMLGRL2::EvaluatePartialDerivative12(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -96.1638 + double var_chaste_interface__intracellular_ion_concentrations__Ca_ss = rY[30]; + // Units: millimolar; Initial value: 0.00011 + + + const double var_x203 = exp(-0.15384615384615385 - 0.076923076923076927 * var_chaste_interface__membrane__V); + const double var_x205 = exp(0.20000000000000001 + 0.10000000000000001 * var_chaste_interface__membrane__V); + const double var_x210 = 0.050000000000000003 * var_x203; + const double var_x214 = 1.2 * var_x205; + const double var_x215 = 0.20749999999999999 * var_chaste_interface__intracellular_ion_concentrations__Ca_ss; + + partialF = -var_x210 - var_x214 - var_x215; + } + else + { + const double y_save = rY[12]; + rY[12] += delta; + const double temp = EvaluateYDerivative12(var_chaste_interface__environment__time_converted, rY); + partialF = (temp-mEvalF[12])/delta; + rY[12] = y_save; + } + return partialF; + } + double Dynamicwinslow_model_1999FromCellMLGRL2::EvaluateYDerivative13(double var_chaste_interface__environment__time_converted, std::vector& rY) + { + + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -96.1638 + double var_chaste_interface__L_type_Ca_current__C1 = rY[12]; + // Units: dimensionless; Initial value: 6.38897e-05 + double var_chaste_interface__L_type_Ca_current__C2 = rY[13]; + // Units: dimensionless; Initial value: 1.535e-09 + double var_chaste_interface__L_type_Ca_current__C3 = rY[14]; + // Units: dimensionless; Initial value: 1.63909e-14 + double var_chaste_interface__L_type_Ca_current__C_Ca2 = rY[18]; + // Units: dimensionless; Initial value: 6.71989e-11 + double var_chaste_interface__intracellular_ion_concentrations__Ca_ss = rY[30]; + // Units: millimolar; Initial value: 0.00011 + + + // Mathematics + const double var_L_type_Ca_current__a = 2; // dimensionless + const double var_L_type_Ca_current__b = 2; // dimensionless + const double var_L_type_Ca_current__omega = 10; // per_second + const double var_L_type_Ca_current__gamma = 103.75 * var_chaste_interface__intracellular_ion_concentrations__Ca_ss; // per_second + const double var_L_type_Ca_current__alpha = 400 * exp(0.20000000000000001 + 0.10000000000000001 * var_chaste_interface__membrane__V); // per_second + const double var_L_type_Ca_current__beta = 50 * exp(-0.15384615384615385 - 0.076923076923076927 * var_chaste_interface__membrane__V); // per_second + const double var_L_type_Ca_current__C2_orig_deriv = -(2 * var_L_type_Ca_current__alpha + 2 * var_L_type_Ca_current__beta + pow(var_L_type_Ca_current__a, 2) * var_L_type_Ca_current__gamma) * var_chaste_interface__L_type_Ca_current__C2 + 3 * var_chaste_interface__L_type_Ca_current__C1 * var_L_type_Ca_current__alpha + 3 * var_chaste_interface__L_type_Ca_current__C3 * var_L_type_Ca_current__beta + var_chaste_interface__L_type_Ca_current__C_Ca2 * var_L_type_Ca_current__omega / pow(var_L_type_Ca_current__b, 2); // 1 / second + const double d_dt_chaste_interface_var_L_type_Ca_current__C2 = 0.001 * var_L_type_Ca_current__C2_orig_deriv; // 1 / millisecond + + return d_dt_chaste_interface_var_L_type_Ca_current__C2; + } + + double Dynamicwinslow_model_1999FromCellMLGRL2::EvaluatePartialDerivative13(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -96.1638 + double var_chaste_interface__intracellular_ion_concentrations__Ca_ss = rY[30]; + // Units: millimolar; Initial value: 0.00011 + + + const double var_x203 = exp(-0.15384615384615385 - 0.076923076923076927 * var_chaste_interface__membrane__V); + const double var_x205 = exp(0.20000000000000001 + 0.10000000000000001 * var_chaste_interface__membrane__V); + const double var_x216 = 0.10000000000000001 * var_x203; + const double var_x220 = 0.80000000000000004 * var_x205; + const double var_x221 = 0.41499999999999998 * var_chaste_interface__intracellular_ion_concentrations__Ca_ss; + + partialF = -var_x216 - var_x220 - var_x221; + } + else + { + const double y_save = rY[13]; + rY[13] += delta; + const double temp = EvaluateYDerivative13(var_chaste_interface__environment__time_converted, rY); + partialF = (temp-mEvalF[13])/delta; + rY[13] = y_save; + } + return partialF; + } + double Dynamicwinslow_model_1999FromCellMLGRL2::EvaluateYDerivative14(double var_chaste_interface__environment__time_converted, std::vector& rY) + { + + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -96.1638 + double var_chaste_interface__L_type_Ca_current__C2 = rY[13]; + // Units: dimensionless; Initial value: 1.535e-09 + double var_chaste_interface__L_type_Ca_current__C3 = rY[14]; + // Units: dimensionless; Initial value: 1.63909e-14 + double var_chaste_interface__L_type_Ca_current__C4 = rY[15]; + // Units: dimensionless; Initial value: 6.56337e-20 + double var_chaste_interface__L_type_Ca_current__C_Ca3 = rY[19]; + // Units: dimensionless; Initial value: 2.87031e-15 + double var_chaste_interface__intracellular_ion_concentrations__Ca_ss = rY[30]; + // Units: millimolar; Initial value: 0.00011 + + + // Mathematics + const double var_L_type_Ca_current__a = 2; // dimensionless + const double var_L_type_Ca_current__b = 2; // dimensionless + const double var_L_type_Ca_current__omega = 10; // per_second + const double var_L_type_Ca_current__gamma = 103.75 * var_chaste_interface__intracellular_ion_concentrations__Ca_ss; // per_second + const double var_L_type_Ca_current__alpha = 400 * exp(0.20000000000000001 + 0.10000000000000001 * var_chaste_interface__membrane__V); // per_second + const double var_L_type_Ca_current__beta = 50 * exp(-0.15384615384615385 - 0.076923076923076927 * var_chaste_interface__membrane__V); // per_second + const double var_L_type_Ca_current__C3_orig_deriv = -(3 * var_L_type_Ca_current__beta + pow(var_L_type_Ca_current__a, 3) * var_L_type_Ca_current__gamma + var_L_type_Ca_current__alpha) * var_chaste_interface__L_type_Ca_current__C3 + 2 * var_chaste_interface__L_type_Ca_current__C2 * var_L_type_Ca_current__alpha + 4 * var_chaste_interface__L_type_Ca_current__C4 * var_L_type_Ca_current__beta + var_chaste_interface__L_type_Ca_current__C_Ca3 * var_L_type_Ca_current__omega / pow(var_L_type_Ca_current__b, 3); // 1 / second + const double d_dt_chaste_interface_var_L_type_Ca_current__C3 = 0.001 * var_L_type_Ca_current__C3_orig_deriv; // 1 / millisecond + + return d_dt_chaste_interface_var_L_type_Ca_current__C3; + } + + double Dynamicwinslow_model_1999FromCellMLGRL2::EvaluatePartialDerivative14(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -96.1638 + double var_chaste_interface__intracellular_ion_concentrations__Ca_ss = rY[30]; + // Units: millimolar; Initial value: 0.00011 + + + const double var_x203 = exp(-0.15384615384615385 - 0.076923076923076927 * var_chaste_interface__membrane__V); + const double var_x205 = exp(0.20000000000000001 + 0.10000000000000001 * var_chaste_interface__membrane__V); + const double var_x222 = 0.14999999999999999 * var_x203; + const double var_x226 = 0.40000000000000002 * var_x205; + const double var_x227 = 0.82999999999999996 * var_chaste_interface__intracellular_ion_concentrations__Ca_ss; + + partialF = -var_x222 - var_x226 - var_x227; + } + else + { + const double y_save = rY[14]; + rY[14] += delta; + const double temp = EvaluateYDerivative14(var_chaste_interface__environment__time_converted, rY); + partialF = (temp-mEvalF[14])/delta; + rY[14] = y_save; + } + return partialF; + } + double Dynamicwinslow_model_1999FromCellMLGRL2::EvaluateYDerivative15(double var_chaste_interface__environment__time_converted, std::vector& rY) + { + + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -96.1638 + double var_chaste_interface__L_type_Ca_current__O = rY[9]; + // Units: dimensionless; Initial value: 9.84546e-21 + double var_chaste_interface__L_type_Ca_current__C3 = rY[14]; + // Units: dimensionless; Initial value: 1.63909e-14 + double var_chaste_interface__L_type_Ca_current__C4 = rY[15]; + // Units: dimensionless; Initial value: 6.56337e-20 + double var_chaste_interface__L_type_Ca_current__C_Ca4 = rY[20]; + // Units: dimensionless; Initial value: 4.59752e-20 + double var_chaste_interface__intracellular_ion_concentrations__Ca_ss = rY[30]; + // Units: millimolar; Initial value: 0.00011 + + + // Mathematics + const double var_L_type_Ca_current__a = 2; // dimensionless + const double var_L_type_Ca_current__b = 2; // dimensionless + const double var_L_type_Ca_current__f = 300; // per_second + const double var_L_type_Ca_current__g = 2000; // per_second + const double var_L_type_Ca_current__omega = 10; // per_second + const double var_L_type_Ca_current__gamma = 103.75 * var_chaste_interface__intracellular_ion_concentrations__Ca_ss; // per_second + const double var_L_type_Ca_current__alpha = 400 * exp(0.20000000000000001 + 0.10000000000000001 * var_chaste_interface__membrane__V); // per_second + const double var_L_type_Ca_current__beta = 50 * exp(-0.15384615384615385 - 0.076923076923076927 * var_chaste_interface__membrane__V); // per_second + const double var_L_type_Ca_current__C4_orig_deriv = var_chaste_interface__L_type_Ca_current__C3 * var_L_type_Ca_current__alpha + var_chaste_interface__L_type_Ca_current__O * var_L_type_Ca_current__g - (4 * var_L_type_Ca_current__beta + pow(var_L_type_Ca_current__a, 4) * var_L_type_Ca_current__gamma + var_L_type_Ca_current__f) * var_chaste_interface__L_type_Ca_current__C4 + var_chaste_interface__L_type_Ca_current__C_Ca4 * var_L_type_Ca_current__omega / pow(var_L_type_Ca_current__b, 4); // 1 / second + const double d_dt_chaste_interface_var_L_type_Ca_current__C4 = 0.001 * var_L_type_Ca_current__C4_orig_deriv; // 1 / millisecond + + return d_dt_chaste_interface_var_L_type_Ca_current__C4; + } + + double Dynamicwinslow_model_1999FromCellMLGRL2::EvaluatePartialDerivative15(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -96.1638 + double var_chaste_interface__intracellular_ion_concentrations__Ca_ss = rY[30]; + // Units: millimolar; Initial value: 0.00011 + + + const double var_x203 = exp(-0.15384615384615385 - 0.076923076923076927 * var_chaste_interface__membrane__V); + const double var_x228 = 0.20000000000000001 * var_x203; + const double var_x230 = 1.6599999999999999 * var_chaste_interface__intracellular_ion_concentrations__Ca_ss; + + partialF = -0.29999999999999999 - var_x228 - var_x230; + } + else + { + const double y_save = rY[15]; + rY[15] += delta; + const double temp = EvaluateYDerivative15(var_chaste_interface__environment__time_converted, rY); + partialF = (temp-mEvalF[15])/delta; + rY[15] = y_save; + } + return partialF; + } + double Dynamicwinslow_model_1999FromCellMLGRL2::EvaluateYDerivative16(double var_chaste_interface__environment__time_converted, std::vector& rY) + { + + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -96.1638 + double var_chaste_interface__L_type_Ca_current__C0 = rY[11]; + // Units: dimensionless; Initial value: 0.997208 + double var_chaste_interface__L_type_Ca_current__C_Ca0 = rY[16]; + // Units: dimensionless; Initial value: 0.00272826 + double var_chaste_interface__L_type_Ca_current__C_Ca1 = rY[17]; + // Units: dimensionless; Initial value: 6.99215e-07 + double var_chaste_interface__intracellular_ion_concentrations__Ca_ss = rY[30]; + // Units: millimolar; Initial value: 0.00011 + + + // Mathematics + const double var_L_type_Ca_current__a = 2; // dimensionless + const double var_L_type_Ca_current__b = 2; // dimensionless + const double var_L_type_Ca_current__omega = 10; // per_second + const double var_L_type_Ca_current__gamma = 103.75 * var_chaste_interface__intracellular_ion_concentrations__Ca_ss; // per_second + const double var_L_type_Ca_current__alpha = 400 * exp(0.20000000000000001 + 0.10000000000000001 * var_chaste_interface__membrane__V); // per_second + const double var_L_type_Ca_current__alpha_a = var_L_type_Ca_current__a * var_L_type_Ca_current__alpha; // per_second + const double var_L_type_Ca_current__beta = 50 * exp(-0.15384615384615385 - 0.076923076923076927 * var_chaste_interface__membrane__V); // per_second + const double var_L_type_Ca_current__beta_b = var_L_type_Ca_current__beta / var_L_type_Ca_current__b; // per_second + const double var_L_type_Ca_current__C_Ca0_orig_deriv = var_chaste_interface__L_type_Ca_current__C0 * var_L_type_Ca_current__gamma + var_chaste_interface__L_type_Ca_current__C_Ca1 * var_L_type_Ca_current__beta_b - (4 * var_L_type_Ca_current__alpha_a + var_L_type_Ca_current__omega) * var_chaste_interface__L_type_Ca_current__C_Ca0; // 1 / second + const double d_dt_chaste_interface_var_L_type_Ca_current__C_Ca0 = 0.001 * var_L_type_Ca_current__C_Ca0_orig_deriv; // 1 / millisecond + + return d_dt_chaste_interface_var_L_type_Ca_current__C_Ca0; + } + + double Dynamicwinslow_model_1999FromCellMLGRL2::EvaluatePartialDerivative16(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -96.1638 + + + const double var_x205 = exp(0.20000000000000001 + 0.10000000000000001 * var_chaste_interface__membrane__V); + const double var_x234 = 3.2000000000000002 * var_x205; + + partialF = -0.01 - var_x234; + } + else + { + const double y_save = rY[16]; + rY[16] += delta; + const double temp = EvaluateYDerivative16(var_chaste_interface__environment__time_converted, rY); + partialF = (temp-mEvalF[16])/delta; + rY[16] = y_save; + } + return partialF; + } + double Dynamicwinslow_model_1999FromCellMLGRL2::EvaluateYDerivative17(double var_chaste_interface__environment__time_converted, std::vector& rY) + { + + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -96.1638 + double var_chaste_interface__L_type_Ca_current__C1 = rY[12]; + // Units: dimensionless; Initial value: 6.38897e-05 + double var_chaste_interface__L_type_Ca_current__C_Ca0 = rY[16]; + // Units: dimensionless; Initial value: 0.00272826 + double var_chaste_interface__L_type_Ca_current__C_Ca1 = rY[17]; + // Units: dimensionless; Initial value: 6.99215e-07 + double var_chaste_interface__L_type_Ca_current__C_Ca2 = rY[18]; + // Units: dimensionless; Initial value: 6.71989e-11 + double var_chaste_interface__intracellular_ion_concentrations__Ca_ss = rY[30]; + // Units: millimolar; Initial value: 0.00011 + + + // Mathematics + const double var_L_type_Ca_current__a = 2; // dimensionless + const double var_L_type_Ca_current__b = 2; // dimensionless + const double var_L_type_Ca_current__omega = 10; // per_second + const double var_L_type_Ca_current__gamma = 103.75 * var_chaste_interface__intracellular_ion_concentrations__Ca_ss; // per_second + const double var_L_type_Ca_current__alpha = 400 * exp(0.20000000000000001 + 0.10000000000000001 * var_chaste_interface__membrane__V); // per_second + const double var_L_type_Ca_current__alpha_a = var_L_type_Ca_current__a * var_L_type_Ca_current__alpha; // per_second + const double var_L_type_Ca_current__beta = 50 * exp(-0.15384615384615385 - 0.076923076923076927 * var_chaste_interface__membrane__V); // per_second + const double var_L_type_Ca_current__beta_b = var_L_type_Ca_current__beta / var_L_type_Ca_current__b; // per_second + const double var_L_type_Ca_current__C_Ca1_orig_deriv = -(3 * var_L_type_Ca_current__alpha_a + var_L_type_Ca_current__omega / var_L_type_Ca_current__b + var_L_type_Ca_current__beta_b) * var_chaste_interface__L_type_Ca_current__C_Ca1 + 2 * var_chaste_interface__L_type_Ca_current__C_Ca2 * var_L_type_Ca_current__beta_b + 4 * var_chaste_interface__L_type_Ca_current__C_Ca0 * var_L_type_Ca_current__alpha_a + var_chaste_interface__L_type_Ca_current__C1 * var_L_type_Ca_current__a * var_L_type_Ca_current__gamma; // 1 / second + const double d_dt_chaste_interface_var_L_type_Ca_current__C_Ca1 = 0.001 * var_L_type_Ca_current__C_Ca1_orig_deriv; // 1 / millisecond + + return d_dt_chaste_interface_var_L_type_Ca_current__C_Ca1; + } + + double Dynamicwinslow_model_1999FromCellMLGRL2::EvaluatePartialDerivative17(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -96.1638 + + + const double var_x203 = exp(-0.15384615384615385 - 0.076923076923076927 * var_chaste_interface__membrane__V); + const double var_x205 = exp(0.20000000000000001 + 0.10000000000000001 * var_chaste_interface__membrane__V); + const double var_x235 = 0.025000000000000001 * var_x203; + const double var_x237 = 2.3999999999999999 * var_x205; + + partialF = -0.0050000000000000001 - var_x235 - var_x237; + } + else + { + const double y_save = rY[17]; + rY[17] += delta; + const double temp = EvaluateYDerivative17(var_chaste_interface__environment__time_converted, rY); + partialF = (temp-mEvalF[17])/delta; + rY[17] = y_save; + } + return partialF; + } + double Dynamicwinslow_model_1999FromCellMLGRL2::EvaluateYDerivative18(double var_chaste_interface__environment__time_converted, std::vector& rY) + { + + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -96.1638 + double var_chaste_interface__L_type_Ca_current__C2 = rY[13]; + // Units: dimensionless; Initial value: 1.535e-09 + double var_chaste_interface__L_type_Ca_current__C_Ca1 = rY[17]; + // Units: dimensionless; Initial value: 6.99215e-07 + double var_chaste_interface__L_type_Ca_current__C_Ca2 = rY[18]; + // Units: dimensionless; Initial value: 6.71989e-11 + double var_chaste_interface__L_type_Ca_current__C_Ca3 = rY[19]; + // Units: dimensionless; Initial value: 2.87031e-15 + double var_chaste_interface__intracellular_ion_concentrations__Ca_ss = rY[30]; + // Units: millimolar; Initial value: 0.00011 + + + // Mathematics + const double var_L_type_Ca_current__a = 2; // dimensionless + const double var_L_type_Ca_current__b = 2; // dimensionless + const double var_L_type_Ca_current__omega = 10; // per_second + const double var_L_type_Ca_current__gamma = 103.75 * var_chaste_interface__intracellular_ion_concentrations__Ca_ss; // per_second + const double var_L_type_Ca_current__alpha = 400 * exp(0.20000000000000001 + 0.10000000000000001 * var_chaste_interface__membrane__V); // per_second + const double var_L_type_Ca_current__alpha_a = var_L_type_Ca_current__a * var_L_type_Ca_current__alpha; // per_second + const double var_L_type_Ca_current__beta = 50 * exp(-0.15384615384615385 - 0.076923076923076927 * var_chaste_interface__membrane__V); // per_second + const double var_L_type_Ca_current__beta_b = var_L_type_Ca_current__beta / var_L_type_Ca_current__b; // per_second + const double var_L_type_Ca_current__C_Ca2_orig_deriv = -(2 * var_L_type_Ca_current__alpha_a + 2 * var_L_type_Ca_current__beta_b + var_L_type_Ca_current__omega / pow(var_L_type_Ca_current__b, 2)) * var_chaste_interface__L_type_Ca_current__C_Ca2 + 3 * var_chaste_interface__L_type_Ca_current__C_Ca1 * var_L_type_Ca_current__alpha_a + 3 * var_chaste_interface__L_type_Ca_current__C_Ca3 * var_L_type_Ca_current__beta_b + pow(var_L_type_Ca_current__a, 2) * var_chaste_interface__L_type_Ca_current__C2 * var_L_type_Ca_current__gamma; // 1 / second + const double d_dt_chaste_interface_var_L_type_Ca_current__C_Ca2 = 0.001 * var_L_type_Ca_current__C_Ca2_orig_deriv; // 1 / millisecond + + return d_dt_chaste_interface_var_L_type_Ca_current__C_Ca2; + } + + double Dynamicwinslow_model_1999FromCellMLGRL2::EvaluatePartialDerivative18(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -96.1638 + + + const double var_x203 = exp(-0.15384615384615385 - 0.076923076923076927 * var_chaste_interface__membrane__V); + const double var_x205 = exp(0.20000000000000001 + 0.10000000000000001 * var_chaste_interface__membrane__V); + const double var_x208 = 1.6000000000000001 * var_x205; + const double var_x210 = 0.050000000000000003 * var_x203; + + partialF = -0.0025000000000000001 - var_x208 - var_x210; + } + else + { + const double y_save = rY[18]; + rY[18] += delta; + const double temp = EvaluateYDerivative18(var_chaste_interface__environment__time_converted, rY); + partialF = (temp-mEvalF[18])/delta; + rY[18] = y_save; + } + return partialF; + } + double Dynamicwinslow_model_1999FromCellMLGRL2::EvaluateYDerivative19(double var_chaste_interface__environment__time_converted, std::vector& rY) + { + + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -96.1638 + double var_chaste_interface__L_type_Ca_current__C3 = rY[14]; + // Units: dimensionless; Initial value: 1.63909e-14 + double var_chaste_interface__L_type_Ca_current__C_Ca2 = rY[18]; + // Units: dimensionless; Initial value: 6.71989e-11 + double var_chaste_interface__L_type_Ca_current__C_Ca3 = rY[19]; + // Units: dimensionless; Initial value: 2.87031e-15 + double var_chaste_interface__L_type_Ca_current__C_Ca4 = rY[20]; + // Units: dimensionless; Initial value: 4.59752e-20 + double var_chaste_interface__intracellular_ion_concentrations__Ca_ss = rY[30]; + // Units: millimolar; Initial value: 0.00011 + + + // Mathematics + const double var_L_type_Ca_current__a = 2; // dimensionless + const double var_L_type_Ca_current__b = 2; // dimensionless + const double var_L_type_Ca_current__omega = 10; // per_second + const double var_L_type_Ca_current__gamma = 103.75 * var_chaste_interface__intracellular_ion_concentrations__Ca_ss; // per_second + const double var_L_type_Ca_current__alpha = 400 * exp(0.20000000000000001 + 0.10000000000000001 * var_chaste_interface__membrane__V); // per_second + const double var_L_type_Ca_current__alpha_a = var_L_type_Ca_current__a * var_L_type_Ca_current__alpha; // per_second + const double var_L_type_Ca_current__beta = 50 * exp(-0.15384615384615385 - 0.076923076923076927 * var_chaste_interface__membrane__V); // per_second + const double var_L_type_Ca_current__beta_b = var_L_type_Ca_current__beta / var_L_type_Ca_current__b; // per_second + const double var_L_type_Ca_current__C_Ca3_orig_deriv = -(3 * var_L_type_Ca_current__beta_b + var_L_type_Ca_current__omega / pow(var_L_type_Ca_current__b, 3) + var_L_type_Ca_current__alpha_a) * var_chaste_interface__L_type_Ca_current__C_Ca3 + 2 * var_chaste_interface__L_type_Ca_current__C_Ca2 * var_L_type_Ca_current__alpha_a + 4 * var_chaste_interface__L_type_Ca_current__C_Ca4 * var_L_type_Ca_current__beta_b + pow(var_L_type_Ca_current__a, 3) * var_chaste_interface__L_type_Ca_current__C3 * var_L_type_Ca_current__gamma; // 1 / second + const double d_dt_chaste_interface_var_L_type_Ca_current__C_Ca3 = 0.001 * var_L_type_Ca_current__C_Ca3_orig_deriv; // 1 / millisecond + + return d_dt_chaste_interface_var_L_type_Ca_current__C_Ca3; + } + + double Dynamicwinslow_model_1999FromCellMLGRL2::EvaluatePartialDerivative19(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -96.1638 + + + const double var_x203 = exp(-0.15384615384615385 - 0.076923076923076927 * var_chaste_interface__membrane__V); + const double var_x205 = exp(0.20000000000000001 + 0.10000000000000001 * var_chaste_interface__membrane__V); + const double var_x220 = 0.80000000000000004 * var_x205; + const double var_x238 = 0.074999999999999997 * var_x203; + + partialF = -0.00125 - var_x220 - var_x238; + } + else + { + const double y_save = rY[19]; + rY[19] += delta; + const double temp = EvaluateYDerivative19(var_chaste_interface__environment__time_converted, rY); + partialF = (temp-mEvalF[19])/delta; + rY[19] = y_save; + } + return partialF; + } + double Dynamicwinslow_model_1999FromCellMLGRL2::EvaluateYDerivative20(double var_chaste_interface__environment__time_converted, std::vector& rY) + { + + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -96.1638 + double var_chaste_interface__L_type_Ca_current__O_Ca = rY[10]; + // Units: dimensionless; Initial value: 0.0 + double var_chaste_interface__L_type_Ca_current__C4 = rY[15]; + // Units: dimensionless; Initial value: 6.56337e-20 + double var_chaste_interface__L_type_Ca_current__C_Ca3 = rY[19]; + // Units: dimensionless; Initial value: 2.87031e-15 + double var_chaste_interface__L_type_Ca_current__C_Ca4 = rY[20]; + // Units: dimensionless; Initial value: 4.59752e-20 + double var_chaste_interface__intracellular_ion_concentrations__Ca_ss = rY[30]; + // Units: millimolar; Initial value: 0.00011 + + + // Mathematics + const double var_L_type_Ca_current__a = 2; // dimensionless + const double var_L_type_Ca_current__b = 2; // dimensionless + const double var_L_type_Ca_current__fprime = 7; // per_second + const double var_L_type_Ca_current__gprime = 7000; // per_second + const double var_L_type_Ca_current__omega = 10; // per_second + const double var_L_type_Ca_current__gamma = 103.75 * var_chaste_interface__intracellular_ion_concentrations__Ca_ss; // per_second + const double var_L_type_Ca_current__alpha = 400 * exp(0.20000000000000001 + 0.10000000000000001 * var_chaste_interface__membrane__V); // per_second + const double var_L_type_Ca_current__alpha_a = var_L_type_Ca_current__a * var_L_type_Ca_current__alpha; // per_second + const double var_L_type_Ca_current__beta = 50 * exp(-0.15384615384615385 - 0.076923076923076927 * var_chaste_interface__membrane__V); // per_second + const double var_L_type_Ca_current__beta_b = var_L_type_Ca_current__beta / var_L_type_Ca_current__b; // per_second + const double var_L_type_Ca_current__C_Ca4_orig_deriv = var_chaste_interface__L_type_Ca_current__C_Ca3 * var_L_type_Ca_current__alpha_a + var_chaste_interface__L_type_Ca_current__O_Ca * var_L_type_Ca_current__gprime - (4 * var_L_type_Ca_current__beta_b + var_L_type_Ca_current__omega / pow(var_L_type_Ca_current__b, 4) + var_L_type_Ca_current__fprime) * var_chaste_interface__L_type_Ca_current__C_Ca4 + pow(var_L_type_Ca_current__a, 4) * var_chaste_interface__L_type_Ca_current__C4 * var_L_type_Ca_current__gamma; // 1 / second + const double d_dt_chaste_interface_var_L_type_Ca_current__C_Ca4 = 0.001 * var_L_type_Ca_current__C_Ca4_orig_deriv; // 1 / millisecond + + return d_dt_chaste_interface_var_L_type_Ca_current__C_Ca4; + } + + double Dynamicwinslow_model_1999FromCellMLGRL2::EvaluatePartialDerivative20(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -96.1638 + + + const double var_x203 = exp(-0.15384615384615385 - 0.076923076923076927 * var_chaste_interface__membrane__V); + const double var_x216 = 0.10000000000000001 * var_x203; + + partialF = -0.0076249999999999998 - var_x216; + } + else + { + const double y_save = rY[20]; + rY[20] += delta; + const double temp = EvaluateYDerivative20(var_chaste_interface__environment__time_converted, rY); + partialF = (temp-mEvalF[20])/delta; + rY[20] = y_save; + } + return partialF; + } + double Dynamicwinslow_model_1999FromCellMLGRL2::EvaluateYDerivative21(double var_chaste_interface__environment__time_converted, std::vector& rY) + { + + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -96.1638 + double var_chaste_interface__L_type_Ca_current_y_gate__y = rY[21]; + // Units: dimensionless; Initial value: 0.798 + + + // Mathematics + const double var_L_type_Ca_current_y_gate__tau_y = 0.02 + 0.59999999999999998 / (1 + exp(2.1052631578947367 + 0.10526315789473684 * var_chaste_interface__membrane__V)); // second + const double var_L_type_Ca_current_y_gate__y_infinity = 0.20000000000000001 + 0.80000000000000004 / (1 + exp(2.5 + 0.20000000000000001 * var_chaste_interface__membrane__V)); // dimensionless + const double var_L_type_Ca_current_y_gate__y_orig_deriv = (-var_chaste_interface__L_type_Ca_current_y_gate__y + var_L_type_Ca_current_y_gate__y_infinity) / var_L_type_Ca_current_y_gate__tau_y; // 1 / second + const double d_dt_chaste_interface_var_L_type_Ca_current_y_gate__y = 0.001 * var_L_type_Ca_current_y_gate__y_orig_deriv; // 1 / millisecond + + return d_dt_chaste_interface_var_L_type_Ca_current_y_gate__y; + } + + double Dynamicwinslow_model_1999FromCellMLGRL2::EvaluatePartialDerivative21(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -96.1638 + + + const double var_x242 = exp(2.1052631578947367 + 0.10526315789473684 * var_chaste_interface__membrane__V); + const double var_x243 = 1 + var_x242; + const double var_x244 = 1 / var_x243; + const double var_x245 = 1 / (0.02 + 0.59999999999999998 * var_x244); + + partialF = -0.001 * var_x245; + } + else + { + const double y_save = rY[21]; + rY[21] += delta; + const double temp = EvaluateYDerivative21(var_chaste_interface__environment__time_converted, rY); + partialF = (temp-mEvalF[21])/delta; + rY[21] = y_save; + } + return partialF; + } + double Dynamicwinslow_model_1999FromCellMLGRL2::EvaluateYDerivative22(double var_chaste_interface__environment__time_converted, std::vector& rY) + { + + double var_chaste_interface__RyR_channel__P_O1 = rY[22]; + // Units: dimensionless; Initial value: 0.0 + double var_chaste_interface__RyR_channel__P_O2 = rY[23]; + // Units: dimensionless; Initial value: 0.0 + double var_chaste_interface__RyR_channel__P_C1 = rY[24]; + // Units: dimensionless; Initial value: 0.47 + double var_chaste_interface__RyR_channel__P_C2 = rY[25]; + // Units: dimensionless; Initial value: 0.53 + double var_chaste_interface__intracellular_ion_concentrations__Ca_ss = rY[30]; + // Units: millimolar; Initial value: 0.00011 + + + // Mathematics + const double var_RyR_channel__k_a_minus = 576; // per_second + const double var_RyR_channel__k_a_plus = 12150000000000.0; // millimolar4_per_second + const double var_RyR_channel__k_b_minus = 1930; // per_second + const double var_RyR_channel__k_b_plus = 4050000000.0; // millimolar3_per_second + const double var_RyR_channel__k_c_minus = 0.80000000000000004; // per_second + const double var_RyR_channel__k_c_plus = 100; // per_second + const double var_RyR_channel__m = 3; // dimensionless + const double var_RyR_channel__n = 4; // dimensionless + const double var_RyR_channel__P_O1_orig_deriv = var_chaste_interface__RyR_channel__P_C2 * var_RyR_channel__k_c_minus + var_chaste_interface__RyR_channel__P_O2 * var_RyR_channel__k_b_minus - var_chaste_interface__RyR_channel__P_O1 * var_RyR_channel__k_a_minus - var_chaste_interface__RyR_channel__P_O1 * var_RyR_channel__k_c_plus + pow(var_chaste_interface__intracellular_ion_concentrations__Ca_ss, var_RyR_channel__n) * var_chaste_interface__RyR_channel__P_C1 * var_RyR_channel__k_a_plus - pow(var_chaste_interface__intracellular_ion_concentrations__Ca_ss, var_RyR_channel__m) * var_chaste_interface__RyR_channel__P_O1 * var_RyR_channel__k_b_plus; // 1 / second + const double d_dt_chaste_interface_var_RyR_channel__P_O1 = 0.001 * var_RyR_channel__P_O1_orig_deriv; // 1 / millisecond + + return d_dt_chaste_interface_var_RyR_channel__P_O1; + } + + double Dynamicwinslow_model_1999FromCellMLGRL2::EvaluatePartialDerivative22(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__intracellular_ion_concentrations__Ca_ss = rY[30]; + // Units: millimolar; Initial value: 0.00011 + + + const double var_x246 = pow(var_chaste_interface__intracellular_ion_concentrations__Ca_ss, 3); + const double var_x247 = 4050000 * var_x246; + + partialF = -0.67600000000000005 - var_x247; + } + else + { + const double y_save = rY[22]; + rY[22] += delta; + const double temp = EvaluateYDerivative22(var_chaste_interface__environment__time_converted, rY); + partialF = (temp-mEvalF[22])/delta; + rY[22] = y_save; + } + return partialF; + } + double Dynamicwinslow_model_1999FromCellMLGRL2::EvaluateYDerivative23(double var_chaste_interface__environment__time_converted, std::vector& rY) + { + + double var_chaste_interface__RyR_channel__P_O1 = rY[22]; + // Units: dimensionless; Initial value: 0.0 + double var_chaste_interface__RyR_channel__P_O2 = rY[23]; + // Units: dimensionless; Initial value: 0.0 + double var_chaste_interface__intracellular_ion_concentrations__Ca_ss = rY[30]; + // Units: millimolar; Initial value: 0.00011 + + + // Mathematics + const double var_RyR_channel__k_b_minus = 1930; // per_second + const double var_RyR_channel__k_b_plus = 4050000000.0; // millimolar3_per_second + const double var_RyR_channel__m = 3; // dimensionless + const double var_RyR_channel__P_O2_orig_deriv = -var_chaste_interface__RyR_channel__P_O2 * var_RyR_channel__k_b_minus + pow(var_chaste_interface__intracellular_ion_concentrations__Ca_ss, var_RyR_channel__m) * var_chaste_interface__RyR_channel__P_O1 * var_RyR_channel__k_b_plus; // 1 / second + const double d_dt_chaste_interface_var_RyR_channel__P_O2 = 0.001 * var_RyR_channel__P_O2_orig_deriv; // 1 / millisecond + + return d_dt_chaste_interface_var_RyR_channel__P_O2; + } + + double Dynamicwinslow_model_1999FromCellMLGRL2::EvaluatePartialDerivative23(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + + + + partialF = -1.9299999999999999; + } + else + { + const double y_save = rY[23]; + rY[23] += delta; + const double temp = EvaluateYDerivative23(var_chaste_interface__environment__time_converted, rY); + partialF = (temp-mEvalF[23])/delta; + rY[23] = y_save; + } + return partialF; + } + double Dynamicwinslow_model_1999FromCellMLGRL2::EvaluateYDerivative24(double var_chaste_interface__environment__time_converted, std::vector& rY) + { + + double var_chaste_interface__RyR_channel__P_O1 = rY[22]; + // Units: dimensionless; Initial value: 0.0 + double var_chaste_interface__RyR_channel__P_C1 = rY[24]; + // Units: dimensionless; Initial value: 0.47 + double var_chaste_interface__intracellular_ion_concentrations__Ca_ss = rY[30]; + // Units: millimolar; Initial value: 0.00011 + + + // Mathematics + const double var_RyR_channel__k_a_minus = 576; // per_second + const double var_RyR_channel__k_a_plus = 12150000000000.0; // millimolar4_per_second + const double var_RyR_channel__n = 4; // dimensionless + const double var_RyR_channel__P_C1_orig_deriv = var_chaste_interface__RyR_channel__P_O1 * var_RyR_channel__k_a_minus - pow(var_chaste_interface__intracellular_ion_concentrations__Ca_ss, var_RyR_channel__n) * var_chaste_interface__RyR_channel__P_C1 * var_RyR_channel__k_a_plus; // 1 / second + const double d_dt_chaste_interface_var_RyR_channel__P_C1 = 0.001 * var_RyR_channel__P_C1_orig_deriv; // 1 / millisecond + + return d_dt_chaste_interface_var_RyR_channel__P_C1; + } + + double Dynamicwinslow_model_1999FromCellMLGRL2::EvaluatePartialDerivative24(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__intracellular_ion_concentrations__Ca_ss = rY[30]; + // Units: millimolar; Initial value: 0.00011 + + + const double var_x248 = 12150000000.0 * pow(var_chaste_interface__intracellular_ion_concentrations__Ca_ss, 4); + + partialF = -var_x248; + } + else + { + const double y_save = rY[24]; + rY[24] += delta; + const double temp = EvaluateYDerivative24(var_chaste_interface__environment__time_converted, rY); + partialF = (temp-mEvalF[24])/delta; + rY[24] = y_save; + } + return partialF; + } + double Dynamicwinslow_model_1999FromCellMLGRL2::EvaluateYDerivative25(double var_chaste_interface__environment__time_converted, std::vector& rY) + { + + double var_chaste_interface__RyR_channel__P_O1 = rY[22]; + // Units: dimensionless; Initial value: 0.0 + double var_chaste_interface__RyR_channel__P_C2 = rY[25]; + // Units: dimensionless; Initial value: 0.53 + + + // Mathematics + const double var_RyR_channel__k_c_minus = 0.80000000000000004; // per_second + const double var_RyR_channel__k_c_plus = 100; // per_second + const double var_RyR_channel__P_C2_orig_deriv = var_chaste_interface__RyR_channel__P_O1 * var_RyR_channel__k_c_plus - var_chaste_interface__RyR_channel__P_C2 * var_RyR_channel__k_c_minus; // 1 / second + const double d_dt_chaste_interface_var_RyR_channel__P_C2 = 0.001 * var_RyR_channel__P_C2_orig_deriv; // 1 / millisecond + + return d_dt_chaste_interface_var_RyR_channel__P_C2; + } + + double Dynamicwinslow_model_1999FromCellMLGRL2::EvaluatePartialDerivative25(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + + + + partialF = -0.00080000000000000004; + } + else + { + const double y_save = rY[25]; + rY[25] += delta; + const double temp = EvaluateYDerivative25(var_chaste_interface__environment__time_converted, rY); + partialF = (temp-mEvalF[25])/delta; + rY[25] = y_save; + } + return partialF; + } + double Dynamicwinslow_model_1999FromCellMLGRL2::EvaluateYDerivative26(double var_chaste_interface__environment__time_converted, std::vector& rY) + { + + double var_chaste_interface__intracellular_ion_concentrations__Cai = rY[1]; + // Units: millimolar; Initial value: 8e-05 + double var_chaste_interface__intracellular_Ca_fluxes__HTRPNCa = rY[26]; + // Units: millimolar; Initial value: 0.98 + + + // Mathematics + const double var_intracellular_Ca_fluxes__k_htrpn_minus = 0.066000000000000003; // per_second + const double var_intracellular_Ca_fluxes__k_htrpn_plus = 20000; // per_millimolar_second + const double var_intracellular_Ca_fluxes__HTRPNCa_orig_deriv = -var_chaste_interface__intracellular_Ca_fluxes__HTRPNCa * var_intracellular_Ca_fluxes__k_htrpn_minus + (1 - var_chaste_interface__intracellular_Ca_fluxes__HTRPNCa) * var_intracellular_Ca_fluxes__k_htrpn_plus * var_chaste_interface__intracellular_ion_concentrations__Cai; // millimolar / second + const double d_dt_chaste_interface_var_intracellular_Ca_fluxes__HTRPNCa = 0.001 * var_intracellular_Ca_fluxes__HTRPNCa_orig_deriv; // millimolar / millisecond + + return d_dt_chaste_interface_var_intracellular_Ca_fluxes__HTRPNCa; + } + + double Dynamicwinslow_model_1999FromCellMLGRL2::EvaluatePartialDerivative26(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__intracellular_ion_concentrations__Cai = rY[1]; + // Units: millimolar; Initial value: 8e-05 + + + + partialF = -6.6000000000000005e-5 - 20 * var_chaste_interface__intracellular_ion_concentrations__Cai; + } + else + { + const double y_save = rY[26]; + rY[26] += delta; + const double temp = EvaluateYDerivative26(var_chaste_interface__environment__time_converted, rY); + partialF = (temp-mEvalF[26])/delta; + rY[26] = y_save; + } + return partialF; + } + double Dynamicwinslow_model_1999FromCellMLGRL2::EvaluateYDerivative27(double var_chaste_interface__environment__time_converted, std::vector& rY) + { + + double var_chaste_interface__intracellular_ion_concentrations__Cai = rY[1]; + // Units: millimolar; Initial value: 8e-05 + double var_chaste_interface__intracellular_Ca_fluxes__LTRPNCa = rY[27]; + // Units: millimolar; Initial value: 0.078 + + + // Mathematics + const double var_intracellular_Ca_fluxes__k_ltrpn_minus = 40; // per_second + const double var_intracellular_Ca_fluxes__k_ltrpn_plus = 40000; // per_millimolar_second + const double var_intracellular_Ca_fluxes__LTRPNCa_orig_deriv = -var_chaste_interface__intracellular_Ca_fluxes__LTRPNCa * var_intracellular_Ca_fluxes__k_ltrpn_minus + (1 - var_chaste_interface__intracellular_Ca_fluxes__LTRPNCa) * var_intracellular_Ca_fluxes__k_ltrpn_plus * var_chaste_interface__intracellular_ion_concentrations__Cai; // millimolar / second + const double d_dt_chaste_interface_var_intracellular_Ca_fluxes__LTRPNCa = 0.001 * var_intracellular_Ca_fluxes__LTRPNCa_orig_deriv; // millimolar / millisecond + + return d_dt_chaste_interface_var_intracellular_Ca_fluxes__LTRPNCa; + } + + double Dynamicwinslow_model_1999FromCellMLGRL2::EvaluatePartialDerivative27(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__intracellular_ion_concentrations__Cai = rY[1]; + // Units: millimolar; Initial value: 8e-05 + + + + partialF = -0.040000000000000001 - 40 * var_chaste_interface__intracellular_ion_concentrations__Cai; + } + else + { + const double y_save = rY[27]; + rY[27] += delta; + const double temp = EvaluateYDerivative27(var_chaste_interface__environment__time_converted, rY); + partialF = (temp-mEvalF[27])/delta; + rY[27] = y_save; + } + return partialF; + } + double Dynamicwinslow_model_1999FromCellMLGRL2::EvaluateYDerivative28(double var_chaste_interface__environment__time_converted, std::vector& rY) + { + + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -96.1638 + double var_chaste_interface__intracellular_ion_concentrations__Cai = rY[1]; + // Units: millimolar; Initial value: 8e-05 + double var_chaste_interface__fast_sodium_current_m_gate__m = rY[2]; + // Units: dimensionless; Initial value: 0.0328302 + double var_chaste_interface__fast_sodium_current_h_gate__h = rY[3]; + // Units: dimensionless; Initial value: 0.988354 + double var_chaste_interface__fast_sodium_current_j_gate__j = rY[4]; + // Units: dimensionless; Initial value: 0.99254 + double var_chaste_interface__intracellular_ion_concentrations__Nai = rY[28]; + // Units: millimolar; Initial value: 10.0 + + + // Mathematics + const double var_Na_Ca_exchanger__K_mCa = 1.3799999999999999; // millimolar + const double var_Na_Ca_exchanger__K_mNa = 87.5; // millimolar + const double var_Na_Ca_exchanger__K_sat = 0.20000000000000001; // dimensionless + const double var_Na_Ca_exchanger__eta = 0.34999999999999998; // dimensionless + const double var_intracellular_ion_concentrations__A_cap = 0.00015339999999999999; // cm2 + const double var_intracellular_ion_concentrations__V_myo = 2.584e-5; // micro_litre + const double var_membrane__F = 96.485341500000004; // coulomb_per_millimole + const double var_membrane__R = 8.3144720000000003; // joule_per_mole_kelvin + const double var_membrane__T = 310; // kelvin + const double var_sodium_background_current__g_Nab = 0.0030999999999999999; // milliS_per_microF + const double var_sodium_potassium_pump__I_NaK = 0.69299999999999995; // microA_per_microF + const double var_sodium_potassium_pump__K_mKo = 1.5; // millimolar + const double var_sodium_potassium_pump__K_mNai = 10; // millimolar + const double var_Na_Ca_exchanger__i_NaCa = 5000 * (pow(var_chaste_interface__intracellular_ion_concentrations__Nai, 3) * mParameters[3] * exp(var_Na_Ca_exchanger__eta * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T)) - pow(mParameters[5], 3) * var_chaste_interface__intracellular_ion_concentrations__Cai * exp((-1 + var_Na_Ca_exchanger__eta) * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * mParameters[14] / ((1 + var_Na_Ca_exchanger__K_sat * exp((-1 + var_Na_Ca_exchanger__eta) * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * (pow(var_Na_Ca_exchanger__K_mNa, 3) + pow(mParameters[5], 3)) * (var_Na_Ca_exchanger__K_mCa + mParameters[3])); // microA_per_microF + const double var_fast_sodium_current__E_Na = var_membrane__R * var_membrane__T * log(mParameters[5] / var_chaste_interface__intracellular_ion_concentrations__Nai) / var_membrane__F; // millivolt + const double var_fast_sodium_current__i_Na = pow(var_chaste_interface__fast_sodium_current_m_gate__m, 3) * (-var_fast_sodium_current__E_Na + var_chaste_interface__membrane__V) * mParameters[8] * var_chaste_interface__fast_sodium_current_h_gate__h * var_chaste_interface__fast_sodium_current_j_gate__j; // microA_per_microF + const double var_sodium_background_current__i_Na_b = (-var_fast_sodium_current__E_Na + var_chaste_interface__membrane__V) * var_sodium_background_current__g_Nab; // microA_per_microF + const double var_sodium_potassium_pump__sigma = -0.14285714285714285 + 0.14285714285714285 * exp(0.01485884101040119 * mParameters[5]); // dimensionless + const double var_sodium_potassium_pump__f_NaK = 1 / (1 + 0.1245 * exp(-0.10000000000000001 * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T)) + 0.036499999999999998 * var_sodium_potassium_pump__sigma * exp(-var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))); // dimensionless + const double var_sodium_potassium_pump__i_NaK = var_sodium_potassium_pump__I_NaK * var_sodium_potassium_pump__f_NaK * mParameters[4] / ((1 + pow((var_sodium_potassium_pump__K_mNai / var_chaste_interface__intracellular_ion_concentrations__Nai), 1.5)) * (var_sodium_potassium_pump__K_mKo + mParameters[4])); // microA_per_microF + const double var_intracellular_ion_concentrations__Nai_orig_deriv = -(3 * var_Na_Ca_exchanger__i_NaCa + 3 * var_sodium_potassium_pump__i_NaK + var_fast_sodium_current__i_Na + var_sodium_background_current__i_Na_b) * var_intracellular_ion_concentrations__A_cap * mParameters[2] / (var_intracellular_ion_concentrations__V_myo * var_membrane__F); // millimolar / second + const double d_dt_chaste_interface_var_intracellular_ion_concentrations__Nai = 0.001 * var_intracellular_ion_concentrations__Nai_orig_deriv; // millimolar / millisecond + + return d_dt_chaste_interface_var_intracellular_ion_concentrations__Nai; + } + + double Dynamicwinslow_model_1999FromCellMLGRL2::EvaluatePartialDerivative28(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -96.1638 + double var_chaste_interface__fast_sodium_current_m_gate__m = rY[2]; + // Units: dimensionless; Initial value: 0.0328302 + double var_chaste_interface__fast_sodium_current_h_gate__h = rY[3]; + // Units: dimensionless; Initial value: 0.988354 + double var_chaste_interface__fast_sodium_current_j_gate__j = rY[4]; + // Units: dimensionless; Initial value: 0.99254 + double var_chaste_interface__intracellular_ion_concentrations__Nai = rY[28]; + // Units: millimolar; Initial value: 10.0 + + + const double var_x11 = pow(var_chaste_interface__fast_sodium_current_m_gate__m, 3); + const double var_x12 = var_x11 * mParameters[8] * var_chaste_interface__fast_sodium_current_j_gate__j; + const double var_x13 = var_x12 * var_chaste_interface__fast_sodium_current_h_gate__h; + const double var_x24 = exp(0.013101861787960915 * var_chaste_interface__membrane__V); + const double var_x25 = var_x24 * mParameters[3]; + const double var_x26 = exp(-0.024332029034784559 * var_chaste_interface__membrane__V); + const double var_x27 = pow(mParameters[5], 3); + const double var_x30 = 1 + 0.20000000000000001 * var_x26; + const double var_x31 = 1 / var_x30; + const double var_x32 = 1 / (669921.875 + var_x27); + const double var_x33 = 1 / (1.3799999999999999 + mParameters[3]); + const double var_x34 = var_x32 * var_x33 * mParameters[14]; + const double var_x35 = var_x31 * var_x34; + const double var_x37 = 1 / var_chaste_interface__intracellular_ion_concentrations__Nai; + const double var_x38 = pow(var_x37, 1.5); + const double var_x40 = exp(-0.0037433890822745476 * var_chaste_interface__membrane__V); + const double var_x41 = exp(0.01485884101040119 * mParameters[5]); + const double var_x42 = 0.037433890822745473 * var_chaste_interface__membrane__V; + const double var_x43 = exp(-var_x42); + const double var_x44 = 1 + 0.1245 * var_x40 + 0.036499999999999998 * var_x43 * (-0.14285714285714285 + 0.14285714285714285 * var_x41); + const double var_x47 = 1 / (1.5 + mParameters[4]); + const double var_x48 = var_x47 * mParameters[4]; + const double var_x103 = var_x13 * var_x37; + const double var_x104 = pow((0.031622776601683791 + var_x38), (-2)); + const double var_x105 = 1 / var_x44; + const double var_x106 = var_x104 * var_x105 * var_x37 * var_x38 * var_x48; + const double var_x107 = var_x25 * var_x35 * pow(var_chaste_interface__intracellular_ion_concentrations__Nai, 2); + + partialF = (-5.0952821319166834e-6 * var_x37 - 2.768751798927894 * var_x107 - 6.0676044384883792e-6 * var_x106 - 0.0016436393973924784 * var_x103) * mParameters[2]; + } + else + { + const double y_save = rY[28]; + rY[28] += delta; + const double temp = EvaluateYDerivative28(var_chaste_interface__environment__time_converted, rY); + partialF = (temp-mEvalF[28])/delta; + rY[28] = y_save; + } + return partialF; + } + double Dynamicwinslow_model_1999FromCellMLGRL2::EvaluateYDerivative29(double var_chaste_interface__environment__time_converted, std::vector& rY) + { + + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -96.1638 + double var_chaste_interface__rapid_activating_delayed_rectifiyer_K_current_X_kr_gate__X_kr = rY[5]; + // Units: dimensionless; Initial value: 0.51 + double var_chaste_interface__slow_activating_delayed_rectifiyer_K_current_X_ks_gate__X_ks = rY[6]; + // Units: dimensionless; Initial value: 0.264 + double var_chaste_interface__transient_outward_potassium_current_X_to1_gate__X_to1 = rY[7]; + // Units: dimensionless; Initial value: 2.63 + double var_chaste_interface__transient_outward_potassium_current_Y_to1_gate__Y_to1 = rY[8]; + // Units: dimensionless; Initial value: 0.99 + double var_chaste_interface__L_type_Ca_current__O = rY[9]; + // Units: dimensionless; Initial value: 9.84546e-21 + double var_chaste_interface__L_type_Ca_current__O_Ca = rY[10]; + // Units: dimensionless; Initial value: 0.0 + double var_chaste_interface__L_type_Ca_current_y_gate__y = rY[21]; + // Units: dimensionless; Initial value: 0.798 + double var_chaste_interface__intracellular_ion_concentrations__Nai = rY[28]; + // Units: millimolar; Initial value: 10.0 + double var_chaste_interface__intracellular_ion_concentrations__Ki = rY[29]; + // Units: millimolar; Initial value: 157.8 + + + // Mathematics + const double var_L_type_Ca_current__P_K = 5.7899999999999998e-7; // cm_per_second + const double var_L_type_Ca_current__i_Ca_half = -0.26500000000000001; // microA_per_microF + const double var_intracellular_ion_concentrations__A_cap = 0.00015339999999999999; // cm2 + const double var_intracellular_ion_concentrations__V_myo = 2.584e-5; // micro_litre + const double var_membrane__F = 96.485341500000004; // coulomb_per_millimole + const double var_membrane__R = 8.3144720000000003; // joule_per_mole_kelvin + const double var_membrane__T = 310; // kelvin + const double var_plateau_potassium_current__g_Kp = 0.0022160000000000001; // milliS_per_microF + const double var_plateau_potassium_current_Kp_gate__Kp_V = 1 / (1 + exp(1.2521739130434781 - 0.16722408026755853 * var_chaste_interface__membrane__V)); // dimensionless + const double var_rapid_activating_delayed_rectifiyer_K_current__R_V = 1 / (1 + 1.4944999999999999 * exp(0.044600000000000001 * var_chaste_interface__membrane__V)); // dimensionless + const double var_sodium_potassium_pump__I_NaK = 0.69299999999999995; // microA_per_microF + const double var_sodium_potassium_pump__K_mKo = 1.5; // millimolar + const double var_sodium_potassium_pump__K_mNai = 10; // millimolar + const double var_L_type_Ca_current__i_Ca_max = 4000 * pow(var_membrane__F, 2) * (0.001 * exp(2 * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T)) - 0.34100000000000003 * mParameters[3]) * mParameters[6] * var_chaste_interface__membrane__V / ((-1 + exp(2 * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * var_membrane__R * var_membrane__T); // microA_per_microF + const double var_L_type_Ca_current__p_prime_k = var_L_type_Ca_current__P_K / (1 + var_L_type_Ca_current__i_Ca_max / var_L_type_Ca_current__i_Ca_half); // cm_per_second + const double var_L_type_Ca_current__i_Ca_K = pow(var_membrane__F, 2) * (-mParameters[4] + var_chaste_interface__intracellular_ion_concentrations__Ki * exp(var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * (var_chaste_interface__L_type_Ca_current__O + var_chaste_interface__L_type_Ca_current__O_Ca) * var_L_type_Ca_current__p_prime_k * var_chaste_interface__L_type_Ca_current_y_gate__y * var_chaste_interface__membrane__V / ((-1 + exp(var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * var_membrane__R * var_membrane__T); // microA_per_microF + const double var_rapid_activating_delayed_rectifiyer_K_current__E_K = var_membrane__R * var_membrane__T * log(mParameters[4] / var_chaste_interface__intracellular_ion_concentrations__Ki) / var_membrane__F; // millivolt + const double var_plateau_potassium_current__i_Kp = (-var_rapid_activating_delayed_rectifiyer_K_current__E_K + var_chaste_interface__membrane__V) * var_plateau_potassium_current__g_Kp * var_plateau_potassium_current_Kp_gate__Kp_V; // microA_per_microF + const double var_rapid_activating_delayed_rectifiyer_K_current__f_Ko = 0.5 * sqrt(mParameters[4]); // dimensionless + const double var_rapid_activating_delayed_rectifiyer_K_current__i_Kr = (-var_rapid_activating_delayed_rectifiyer_K_current__E_K + var_chaste_interface__membrane__V) * var_rapid_activating_delayed_rectifiyer_K_current__R_V * var_rapid_activating_delayed_rectifiyer_K_current__f_Ko * mParameters[12] * var_chaste_interface__rapid_activating_delayed_rectifiyer_K_current_X_kr_gate__X_kr; // microA_per_microF + const double var_slow_activating_delayed_rectifiyer_K_current__E_Ks = var_membrane__R * var_membrane__T * log((mParameters[4] + 0.018329999999999999 * mParameters[5]) / (var_chaste_interface__intracellular_ion_concentrations__Ki + 0.018329999999999999 * var_chaste_interface__intracellular_ion_concentrations__Nai)) / var_membrane__F; // millivolt + const double var_slow_activating_delayed_rectifiyer_K_current__i_Ks = pow(var_chaste_interface__slow_activating_delayed_rectifiyer_K_current_X_ks_gate__X_ks, 2) * (-var_slow_activating_delayed_rectifiyer_K_current__E_Ks + var_chaste_interface__membrane__V) * mParameters[13]; // microA_per_microF + const double var_sodium_potassium_pump__sigma = -0.14285714285714285 + 0.14285714285714285 * exp(0.01485884101040119 * mParameters[5]); // dimensionless + const double var_sodium_potassium_pump__f_NaK = 1 / (1 + 0.1245 * exp(-0.10000000000000001 * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T)) + 0.036499999999999998 * var_sodium_potassium_pump__sigma * exp(-var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))); // dimensionless + const double var_sodium_potassium_pump__i_NaK = var_sodium_potassium_pump__I_NaK * var_sodium_potassium_pump__f_NaK * mParameters[4] / ((1 + pow((var_sodium_potassium_pump__K_mNai / var_chaste_interface__intracellular_ion_concentrations__Nai), 1.5)) * (var_sodium_potassium_pump__K_mKo + mParameters[4])); // microA_per_microF + const double var_time_independent_potassium_current__K_mK1 = 13; // millimolar + const double var_time_independent_potassium_current_K1_gate__K1_infinity_V = 1 / (2 + exp(1.5 * (-var_rapid_activating_delayed_rectifiyer_K_current__E_K + var_chaste_interface__membrane__V) * var_membrane__F / (var_membrane__R * var_membrane__T))); // dimensionless + const double var_time_independent_potassium_current__i_K1 = (-var_rapid_activating_delayed_rectifiyer_K_current__E_K + var_chaste_interface__membrane__V) * mParameters[4] * mParameters[11] * var_time_independent_potassium_current_K1_gate__K1_infinity_V / (mParameters[4] + var_time_independent_potassium_current__K_mK1); // microA_per_microF + const double var_transient_outward_potassium_current__i_to1 = (-var_rapid_activating_delayed_rectifiyer_K_current__E_K + var_chaste_interface__membrane__V) * mParameters[15] * var_chaste_interface__transient_outward_potassium_current_X_to1_gate__X_to1 * var_chaste_interface__transient_outward_potassium_current_Y_to1_gate__Y_to1; // microA_per_microF + const double var_intracellular_ion_concentrations__Ki_orig_deriv = -(-2 * var_sodium_potassium_pump__i_NaK + var_L_type_Ca_current__i_Ca_K + var_plateau_potassium_current__i_Kp + var_rapid_activating_delayed_rectifiyer_K_current__i_Kr + var_slow_activating_delayed_rectifiyer_K_current__i_Ks + var_time_independent_potassium_current__i_K1 + var_transient_outward_potassium_current__i_to1) * var_intracellular_ion_concentrations__A_cap * mParameters[2] / (var_intracellular_ion_concentrations__V_myo * var_membrane__F); // millimolar / second + const double d_dt_chaste_interface_var_intracellular_ion_concentrations__Ki = 0.001 * var_intracellular_ion_concentrations__Ki_orig_deriv; // millimolar / millisecond + + return d_dt_chaste_interface_var_intracellular_ion_concentrations__Ki; + } + + double Dynamicwinslow_model_1999FromCellMLGRL2::EvaluatePartialDerivative29(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -96.1638 + double var_chaste_interface__rapid_activating_delayed_rectifiyer_K_current_X_kr_gate__X_kr = rY[5]; + // Units: dimensionless; Initial value: 0.51 + double var_chaste_interface__slow_activating_delayed_rectifiyer_K_current_X_ks_gate__X_ks = rY[6]; + // Units: dimensionless; Initial value: 0.264 + double var_chaste_interface__transient_outward_potassium_current_X_to1_gate__X_to1 = rY[7]; + // Units: dimensionless; Initial value: 2.63 + double var_chaste_interface__transient_outward_potassium_current_Y_to1_gate__Y_to1 = rY[8]; + // Units: dimensionless; Initial value: 0.99 + double var_chaste_interface__L_type_Ca_current__O = rY[9]; + // Units: dimensionless; Initial value: 9.84546e-21 + double var_chaste_interface__L_type_Ca_current__O_Ca = rY[10]; + // Units: dimensionless; Initial value: 0.0 + double var_chaste_interface__L_type_Ca_current_y_gate__y = rY[21]; + // Units: dimensionless; Initial value: 0.798 + double var_chaste_interface__intracellular_ion_concentrations__Nai = rY[28]; + // Units: millimolar; Initial value: 10.0 + double var_chaste_interface__intracellular_ion_concentrations__Ki = rY[29]; + // Units: millimolar; Initial value: 157.8 + + + const double var_x0 = exp(1.2521739130434781 - 0.16722408026755853 * var_chaste_interface__membrane__V); + const double var_x1 = 1 + var_x0; + const double var_x2 = 1 / var_x1; + const double var_x3 = pow(var_chaste_interface__slow_activating_delayed_rectifiyer_K_current_X_ks_gate__X_ks, 2) * mParameters[13]; + const double var_x4 = mParameters[15] * var_chaste_interface__transient_outward_potassium_current_Y_to1_gate__Y_to1; + const double var_x5 = var_x4 * var_chaste_interface__transient_outward_potassium_current_X_to1_gate__X_to1; + const double var_x6 = 1 / var_chaste_interface__intracellular_ion_concentrations__Ki; + const double var_x7 = var_x6 * mParameters[4]; + const double var_x8 = log(var_x7); + const double var_x9 = -26.713760659695648 * var_x8 + var_chaste_interface__membrane__V; + const double var_x14 = exp(0.044600000000000001 * var_chaste_interface__membrane__V); + const double var_x15 = sqrt(mParameters[4]); + const double var_x16 = var_x15 * mParameters[12] / (1 + 1.4944999999999999 * var_x14); + const double var_x17 = var_x16 * var_chaste_interface__rapid_activating_delayed_rectifiyer_K_current_X_kr_gate__X_kr; + const double var_x19 = exp(0.056150836234118207 * var_chaste_interface__membrane__V - 1.5 * var_x8); + const double var_x20 = 1 / (13 + mParameters[4]); + const double var_x21 = var_x20 * mParameters[11]; + const double var_x22 = var_x21 / (2 + var_x19); + const double var_x42 = 0.037433890822745473 * var_chaste_interface__membrane__V; + const double var_x50 = var_chaste_interface__L_type_Ca_current__O + var_chaste_interface__L_type_Ca_current__O_Ca; + const double var_x51 = var_x50 * var_chaste_interface__L_type_Ca_current_y_gate__y; + const double var_x52 = exp(0.074867781645490947 * var_chaste_interface__membrane__V); + const double var_x53 = -1 + var_x52; + const double var_x54 = 1 / var_x53; + const double var_x55 = 0.001 * var_x52 - 0.34100000000000003 * mParameters[3]; + const double var_x56 = var_x54 * var_x55 * mParameters[6]; + const double var_x57 = var_x56 * var_chaste_interface__membrane__V; + const double var_x58 = 1 / (1 - 54518.063995566983 * var_x57); + const double var_x59 = exp(var_x42); + const double var_x60 = -1 + var_x59; + const double var_x61 = 1 / var_x60; + const double var_x72 = pow((1 + 0.5 * var_x19), (-2)); + const double var_x75 = var_x51 * var_x61 * var_chaste_interface__membrane__V; + const double var_x76 = var_x58 * var_x75; + const double var_x95 = 1 / (var_chaste_interface__intracellular_ion_concentrations__Ki + 0.018329999999999999 * var_chaste_interface__intracellular_ion_concentrations__Nai); + const double var_x102 = var_x3 * var_x95; + const double var_x108 = var_x2 * var_x6; + const double var_x109 = var_x5 * var_x6; + const double var_x110 = var_x17 * var_x6; + const double var_x111 = var_x22 * var_x7; + const double var_x112 = var_x59 * var_x76; + + partialF = (-3.6423049046217326e-6 * var_x108 - 1.28669728151281e-10 * var_x112 - 0.00082181969869623921 * var_x110 - 0.0016436393973924784 * var_x102 - 0.0016436393973924784 * var_x109 - 0.0016436393973924784 * var_x111 + 2.3072931657732449e-5 * var_x19 * var_x20 * var_x6 * var_x72 * var_x9 * mParameters[4] * mParameters[11]) * mParameters[2]; + } + else + { + const double y_save = rY[29]; + rY[29] += delta; + const double temp = EvaluateYDerivative29(var_chaste_interface__environment__time_converted, rY); + partialF = (temp-mEvalF[29])/delta; + rY[29] = y_save; + } + return partialF; + } + double Dynamicwinslow_model_1999FromCellMLGRL2::EvaluateYDerivative30(double var_chaste_interface__environment__time_converted, std::vector& rY) + { + + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -96.1638 + double var_chaste_interface__intracellular_ion_concentrations__Cai = rY[1]; + // Units: millimolar; Initial value: 8e-05 + double var_chaste_interface__L_type_Ca_current__O = rY[9]; + // Units: dimensionless; Initial value: 9.84546e-21 + double var_chaste_interface__L_type_Ca_current__O_Ca = rY[10]; + // Units: dimensionless; Initial value: 0.0 + double var_chaste_interface__L_type_Ca_current_y_gate__y = rY[21]; + // Units: dimensionless; Initial value: 0.798 + double var_chaste_interface__RyR_channel__P_O1 = rY[22]; + // Units: dimensionless; Initial value: 0.0 + double var_chaste_interface__RyR_channel__P_O2 = rY[23]; + // Units: dimensionless; Initial value: 0.0 + double var_chaste_interface__intracellular_ion_concentrations__Ca_ss = rY[30]; + // Units: millimolar; Initial value: 0.00011 + double var_chaste_interface__intracellular_ion_concentrations__Ca_JSR = rY[31]; + // Units: millimolar; Initial value: 0.257 + + + // Mathematics + const double var_intracellular_Ca_fluxes__tau_xfer = 0.026700000000000002; // second + const double var_intracellular_ion_concentrations__A_cap = 0.00015339999999999999; // cm2 + const double var_intracellular_ion_concentrations__CMDN_tot = 0.050000000000000003; // millimolar + const double var_RyR_channel__J_rel = (-var_chaste_interface__intracellular_ion_concentrations__Ca_ss + var_chaste_interface__intracellular_ion_concentrations__Ca_JSR) * (var_chaste_interface__RyR_channel__P_O1 + var_chaste_interface__RyR_channel__P_O2) * mParameters[0]; // millimolar_per_second + const double var_intracellular_Ca_fluxes__J_xfer = (-var_chaste_interface__intracellular_ion_concentrations__Cai + var_chaste_interface__intracellular_ion_concentrations__Ca_ss) / var_intracellular_Ca_fluxes__tau_xfer; // millimolar_per_second + const double var_intracellular_ion_concentrations__EGTA_tot = 0; // millimolar + const double var_intracellular_ion_concentrations__K_mCMDN = 0.0023800000000000002; // millimolar + const double var_intracellular_ion_concentrations__K_mEGTA = 0.00014999999999999999; // millimolar + const double var_intracellular_ion_concentrations__V_JSR = 1.6e-7; // micro_litre + const double var_intracellular_ion_concentrations__V_SS = 1.2e-9; // micro_litre + const double var_intracellular_ion_concentrations__V_myo = 2.584e-5; // micro_litre + const double var_intracellular_ion_concentrations__beta_SS = 1 / (1 + var_intracellular_ion_concentrations__CMDN_tot * var_intracellular_ion_concentrations__K_mCMDN / pow((var_chaste_interface__intracellular_ion_concentrations__Ca_ss + var_intracellular_ion_concentrations__K_mCMDN), 2) + var_intracellular_ion_concentrations__EGTA_tot * var_intracellular_ion_concentrations__K_mEGTA / pow((var_chaste_interface__intracellular_ion_concentrations__Ca_ss + var_intracellular_ion_concentrations__K_mEGTA), 2)); // dimensionless + const double var_membrane__F = 96.485341500000004; // coulomb_per_millimole + const double var_membrane__R = 8.3144720000000003; // joule_per_mole_kelvin + const double var_membrane__T = 310; // kelvin + const double var_L_type_Ca_current__i_Ca_max = 4000 * pow(var_membrane__F, 2) * (0.001 * exp(2 * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T)) - 0.34100000000000003 * mParameters[3]) * mParameters[6] * var_chaste_interface__membrane__V / ((-1 + exp(2 * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * var_membrane__R * var_membrane__T); // microA_per_microF + const double var_L_type_Ca_current__i_Ca = (var_chaste_interface__L_type_Ca_current__O + var_chaste_interface__L_type_Ca_current__O_Ca) * var_L_type_Ca_current__i_Ca_max * var_chaste_interface__L_type_Ca_current_y_gate__y; // microA_per_microF + const double var_intracellular_ion_concentrations__Ca_ss_orig_deriv = (var_RyR_channel__J_rel * var_intracellular_ion_concentrations__V_JSR / var_intracellular_ion_concentrations__V_SS - var_intracellular_Ca_fluxes__J_xfer * var_intracellular_ion_concentrations__V_myo / var_intracellular_ion_concentrations__V_SS - 0.5 * var_L_type_Ca_current__i_Ca * var_intracellular_ion_concentrations__A_cap / (var_intracellular_ion_concentrations__V_SS * var_membrane__F)) * var_intracellular_ion_concentrations__beta_SS; // millimolar / second + const double d_dt_chaste_interface_var_intracellular_ion_concentrations__Ca_ss = 0.001 * var_intracellular_ion_concentrations__Ca_ss_orig_deriv; // millimolar / millisecond + + return d_dt_chaste_interface_var_intracellular_ion_concentrations__Ca_ss; + } + + double Dynamicwinslow_model_1999FromCellMLGRL2::EvaluatePartialDerivative30(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -96.1638 + double var_chaste_interface__intracellular_ion_concentrations__Cai = rY[1]; + // Units: millimolar; Initial value: 8e-05 + double var_chaste_interface__L_type_Ca_current__O = rY[9]; + // Units: dimensionless; Initial value: 9.84546e-21 + double var_chaste_interface__L_type_Ca_current__O_Ca = rY[10]; + // Units: dimensionless; Initial value: 0.0 + double var_chaste_interface__L_type_Ca_current_y_gate__y = rY[21]; + // Units: dimensionless; Initial value: 0.798 + double var_chaste_interface__RyR_channel__P_O1 = rY[22]; + // Units: dimensionless; Initial value: 0.0 + double var_chaste_interface__RyR_channel__P_O2 = rY[23]; + // Units: dimensionless; Initial value: 0.0 + double var_chaste_interface__intracellular_ion_concentrations__Ca_ss = rY[30]; + // Units: millimolar; Initial value: 0.00011 + double var_chaste_interface__intracellular_ion_concentrations__Ca_JSR = rY[31]; + // Units: millimolar; Initial value: 0.257 + + + const double var_x50 = var_chaste_interface__L_type_Ca_current__O + var_chaste_interface__L_type_Ca_current__O_Ca; + const double var_x51 = var_x50 * var_chaste_interface__L_type_Ca_current_y_gate__y; + const double var_x52 = exp(0.074867781645490947 * var_chaste_interface__membrane__V); + const double var_x53 = -1 + var_x52; + const double var_x54 = 1 / var_x53; + const double var_x55 = 0.001 * var_x52 - 0.34100000000000003 * mParameters[3]; + const double var_x56 = var_x54 * var_x55 * mParameters[6]; + const double var_x57 = var_x56 * var_chaste_interface__membrane__V; + const double var_x257 = 0.0023800000000000002 + var_chaste_interface__intracellular_ion_concentrations__Ca_ss; + const double var_x258 = 1 + 0.00011900000000000002 / pow(var_x257, 2); + const double var_x259 = 1 / var_x258; + const double var_x260 = 0.001 * var_x259; + const double var_x265 = 133.33333333333334 * var_chaste_interface__RyR_channel__P_O1 + 133.33333333333334 * var_chaste_interface__RyR_channel__P_O2; + const double var_x266 = -var_chaste_interface__intracellular_ion_concentrations__Ca_ss + var_chaste_interface__intracellular_ion_concentrations__Ca_JSR; + const double var_x267 = var_chaste_interface__RyR_channel__P_O1 + var_chaste_interface__RyR_channel__P_O2; + + partialF = var_x260 * (-806491.88514357049 - var_x265 * mParameters[0]) + 2.3800000000000004e-7 * (806491.88514357049 * var_chaste_interface__intracellular_ion_concentrations__Cai - 806491.88514357049 * var_chaste_interface__intracellular_ion_concentrations__Ca_ss - 9570598.0870152581 * var_x51 * var_x57 + 133.33333333333334 * var_x266 * var_x267 * mParameters[0]) / (pow(var_x257, 3) * pow(var_x258, 2)); + } + else + { + const double y_save = rY[30]; + rY[30] += delta; + const double temp = EvaluateYDerivative30(var_chaste_interface__environment__time_converted, rY); + partialF = (temp-mEvalF[30])/delta; + rY[30] = y_save; + } + return partialF; + } + double Dynamicwinslow_model_1999FromCellMLGRL2::EvaluateYDerivative31(double var_chaste_interface__environment__time_converted, std::vector& rY) + { + + double var_chaste_interface__RyR_channel__P_O1 = rY[22]; + // Units: dimensionless; Initial value: 0.0 + double var_chaste_interface__RyR_channel__P_O2 = rY[23]; + // Units: dimensionless; Initial value: 0.0 + double var_chaste_interface__intracellular_ion_concentrations__Ca_ss = rY[30]; + // Units: millimolar; Initial value: 0.00011 + double var_chaste_interface__intracellular_ion_concentrations__Ca_JSR = rY[31]; + // Units: millimolar; Initial value: 0.257 + double var_chaste_interface__intracellular_ion_concentrations__Ca_NSR = rY[32]; + // Units: millimolar; Initial value: 0.257 + + + // Mathematics + const double var_intracellular_Ca_fluxes__tau_tr = 0.00057470000000000004; // second + const double var_intracellular_ion_concentrations__CSQN_tot = 15; // millimolar + const double var_intracellular_Ca_fluxes__J_tr = (-var_chaste_interface__intracellular_ion_concentrations__Ca_JSR + var_chaste_interface__intracellular_ion_concentrations__Ca_NSR) / var_intracellular_Ca_fluxes__tau_tr; // millimolar_per_second + const double var_RyR_channel__J_rel = (-var_chaste_interface__intracellular_ion_concentrations__Ca_ss + var_chaste_interface__intracellular_ion_concentrations__Ca_JSR) * (var_chaste_interface__RyR_channel__P_O1 + var_chaste_interface__RyR_channel__P_O2) * mParameters[0]; // millimolar_per_second + const double var_intracellular_ion_concentrations__K_mCSQN = 0.80000000000000004; // millimolar + const double var_intracellular_ion_concentrations__beta_JSR = 1 / (1 + var_intracellular_ion_concentrations__CSQN_tot * var_intracellular_ion_concentrations__K_mCSQN / pow((var_chaste_interface__intracellular_ion_concentrations__Ca_JSR + var_intracellular_ion_concentrations__K_mCSQN), 2)); // dimensionless + const double var_intracellular_ion_concentrations__Ca_JSR_orig_deriv = (-var_RyR_channel__J_rel + var_intracellular_Ca_fluxes__J_tr) * var_intracellular_ion_concentrations__beta_JSR; // millimolar / second + const double d_dt_chaste_interface_var_intracellular_ion_concentrations__Ca_JSR = 0.001 * var_intracellular_ion_concentrations__Ca_JSR_orig_deriv; // millimolar / millisecond + + return d_dt_chaste_interface_var_intracellular_ion_concentrations__Ca_JSR; + } + + double Dynamicwinslow_model_1999FromCellMLGRL2::EvaluatePartialDerivative31(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__RyR_channel__P_O1 = rY[22]; + // Units: dimensionless; Initial value: 0.0 + double var_chaste_interface__RyR_channel__P_O2 = rY[23]; + // Units: dimensionless; Initial value: 0.0 + double var_chaste_interface__intracellular_ion_concentrations__Ca_ss = rY[30]; + // Units: millimolar; Initial value: 0.00011 + double var_chaste_interface__intracellular_ion_concentrations__Ca_JSR = rY[31]; + // Units: millimolar; Initial value: 0.257 + double var_chaste_interface__intracellular_ion_concentrations__Ca_NSR = rY[32]; + // Units: millimolar; Initial value: 0.257 + + + const double var_x266 = -var_chaste_interface__intracellular_ion_concentrations__Ca_ss + var_chaste_interface__intracellular_ion_concentrations__Ca_JSR; + const double var_x267 = var_chaste_interface__RyR_channel__P_O1 + var_chaste_interface__RyR_channel__P_O2; + const double var_x268 = 0.80000000000000004 + var_chaste_interface__intracellular_ion_concentrations__Ca_JSR; + const double var_x269 = pow(var_x268, (-2)); + const double var_x270 = 1 / (1 + 12 * var_x269); + const double var_x271 = 0.001 * var_x270; + const double var_x273 = var_x267 * mParameters[0]; + + partialF = var_x271 * (-1740.0382808421784 - var_x267 * mParameters[0]) + 0.00016666666666666666 * (1740.0382808421784 * var_chaste_interface__intracellular_ion_concentrations__Ca_NSR - 1740.0382808421784 * var_chaste_interface__intracellular_ion_concentrations__Ca_JSR - var_x266 * var_x273) / (pow(var_x268, 3) * pow((0.083333333333333329 + var_x269), 2)); + } + else + { + const double y_save = rY[31]; + rY[31] += delta; + const double temp = EvaluateYDerivative31(var_chaste_interface__environment__time_converted, rY); + partialF = (temp-mEvalF[31])/delta; + rY[31] = y_save; + } + return partialF; + } + double Dynamicwinslow_model_1999FromCellMLGRL2::EvaluateYDerivative32(double var_chaste_interface__environment__time_converted, std::vector& rY) + { + + double var_chaste_interface__intracellular_ion_concentrations__Cai = rY[1]; + // Units: millimolar; Initial value: 8e-05 + double var_chaste_interface__intracellular_ion_concentrations__Ca_JSR = rY[31]; + // Units: millimolar; Initial value: 0.257 + double var_chaste_interface__intracellular_ion_concentrations__Ca_NSR = rY[32]; + // Units: millimolar; Initial value: 0.257 + + + // Mathematics + const double var_SERCA2a_pump__K_fb = 0.00016799999999999999; // millimolar + const double var_SERCA2a_pump__K_rb = 3.29; // millimolar + const double var_SERCA2a_pump__N_fb = 1.2; // dimensionless + const double var_SERCA2a_pump__N_rb = 1; // dimensionless + const double var_SERCA2a_pump__Vmaxf = 0.081299999999999997; // millimolar_per_second + const double var_SERCA2a_pump__Vmaxr = 0.318; // millimolar_per_second + const double var_intracellular_Ca_fluxes__tau_tr = 0.00057470000000000004; // second + const double var_SERCA2a_pump__rb = pow((var_chaste_interface__intracellular_ion_concentrations__Ca_NSR / var_SERCA2a_pump__K_rb), var_SERCA2a_pump__N_rb); // dimensionless + const double var_intracellular_Ca_fluxes__J_tr = (-var_chaste_interface__intracellular_ion_concentrations__Ca_JSR + var_chaste_interface__intracellular_ion_concentrations__Ca_NSR) / var_intracellular_Ca_fluxes__tau_tr; // millimolar_per_second + const double var_SERCA2a_pump__fb = pow((var_chaste_interface__intracellular_ion_concentrations__Cai / var_SERCA2a_pump__K_fb), var_SERCA2a_pump__N_fb); // dimensionless + const double var_SERCA2a_pump__J_up = (var_SERCA2a_pump__Vmaxf * var_SERCA2a_pump__fb - var_SERCA2a_pump__Vmaxr * var_SERCA2a_pump__rb) * mParameters[1] / (1 + var_SERCA2a_pump__fb + var_SERCA2a_pump__rb); // millimolar_per_second + const double var_intracellular_ion_concentrations__V_JSR = 1.6e-7; // micro_litre + const double var_intracellular_ion_concentrations__V_NSR = 2.0999999999999998e-6; // micro_litre + const double var_intracellular_ion_concentrations__V_myo = 2.584e-5; // micro_litre + const double var_intracellular_ion_concentrations__Ca_NSR_orig_deriv = var_SERCA2a_pump__J_up * var_intracellular_ion_concentrations__V_myo / var_intracellular_ion_concentrations__V_NSR - var_intracellular_Ca_fluxes__J_tr * var_intracellular_ion_concentrations__V_JSR / var_intracellular_ion_concentrations__V_NSR; // millimolar / second + const double d_dt_chaste_interface_var_intracellular_ion_concentrations__Ca_NSR = 0.001 * var_intracellular_ion_concentrations__Ca_NSR_orig_deriv; // millimolar / millisecond + + return d_dt_chaste_interface_var_intracellular_ion_concentrations__Ca_NSR; + } + + double Dynamicwinslow_model_1999FromCellMLGRL2::EvaluatePartialDerivative32(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__intracellular_ion_concentrations__Cai = rY[1]; + // Units: millimolar; Initial value: 8e-05 + double var_chaste_interface__intracellular_ion_concentrations__Ca_NSR = rY[32]; + // Units: millimolar; Initial value: 0.257 + + + const double var_x119 = pow(var_chaste_interface__intracellular_ion_concentrations__Cai, 1.2); + const double var_x120 = pow(var_chaste_interface__intracellular_ion_concentrations__Ca_NSR, 1); + const double var_x121 = 1 / (1 + 33855.471141425078 * var_x119 + 0.303951367781155 * var_x120); + const double var_x122 = var_x121 * mParameters[1]; + const double var_x123 = pow((2.9537323401073989e-5 + var_x119 + 8.9779098483507565e-6 * var_x120), (-2)); + const double var_x124 = 2752.4498037978587 * var_x119 - 0.096656534954407292 * var_x120; + const double var_x126 = var_x123 * var_x124 * mParameters[1]; + + partialF = -0.13257434520702313 - 0.0011893356491532784 * var_x122 - 3.2630189260961817e-12 * var_x126; + } + else + { + const double y_save = rY[32]; + rY[32] += delta; + const double temp = EvaluateYDerivative32(var_chaste_interface__environment__time_converted, rY); + partialF = (temp-mEvalF[32])/delta; + rY[32] = y_save; + } + return partialF; + } + + std::vector Dynamicwinslow_model_1999FromCellMLGRL2::ComputeDerivedQuantities(double var_chaste_interface__environment__time_converted, const std::vector & rY) + { + // Inputs: + // Time units: millisecond + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -96.1638 + double var_chaste_interface__intracellular_ion_concentrations__Cai = rY[1]; + // Units: millimolar; Initial value: 8e-05 + double var_chaste_interface__fast_sodium_current_m_gate__m = rY[2]; + // Units: dimensionless; Initial value: 0.0328302 + double var_chaste_interface__fast_sodium_current_h_gate__h = rY[3]; + // Units: dimensionless; Initial value: 0.988354 + double var_chaste_interface__fast_sodium_current_j_gate__j = rY[4]; + // Units: dimensionless; Initial value: 0.99254 + double var_chaste_interface__rapid_activating_delayed_rectifiyer_K_current_X_kr_gate__X_kr = rY[5]; + // Units: dimensionless; Initial value: 0.51 + double var_chaste_interface__slow_activating_delayed_rectifiyer_K_current_X_ks_gate__X_ks = rY[6]; + // Units: dimensionless; Initial value: 0.264 + double var_chaste_interface__transient_outward_potassium_current_X_to1_gate__X_to1 = rY[7]; + // Units: dimensionless; Initial value: 2.63 + double var_chaste_interface__transient_outward_potassium_current_Y_to1_gate__Y_to1 = rY[8]; + // Units: dimensionless; Initial value: 0.99 + double var_chaste_interface__L_type_Ca_current__O = rY[9]; + // Units: dimensionless; Initial value: 9.84546e-21 + double var_chaste_interface__L_type_Ca_current__O_Ca = rY[10]; + // Units: dimensionless; Initial value: 0.0 + double var_chaste_interface__L_type_Ca_current_y_gate__y = rY[21]; + // Units: dimensionless; Initial value: 0.798 + double var_chaste_interface__RyR_channel__P_O1 = rY[22]; + // Units: dimensionless; Initial value: 0.0 + double var_chaste_interface__RyR_channel__P_O2 = rY[23]; + // Units: dimensionless; Initial value: 0.0 + double var_chaste_interface__intracellular_ion_concentrations__Nai = rY[28]; + // Units: millimolar; Initial value: 10.0 + double var_chaste_interface__intracellular_ion_concentrations__Ki = rY[29]; + // Units: millimolar; Initial value: 157.8 + double var_chaste_interface__intracellular_ion_concentrations__Ca_ss = rY[30]; + // Units: millimolar; Initial value: 0.00011 + double var_chaste_interface__intracellular_ion_concentrations__Ca_JSR = rY[31]; + // Units: millimolar; Initial value: 0.257 + + // Mathematics + const double var_Na_Ca_exchanger__K_mCa = 1.3799999999999999; // millimolar + const double var_Na_Ca_exchanger__K_mNa = 87.5; // millimolar + const double var_Na_Ca_exchanger__K_sat = 0.20000000000000001; // dimensionless + const double var_Na_Ca_exchanger__eta = 0.34999999999999998; // dimensionless + const double var_RyR_channel__J_rel = (-var_chaste_interface__intracellular_ion_concentrations__Ca_ss + var_chaste_interface__intracellular_ion_concentrations__Ca_JSR) * (var_chaste_interface__RyR_channel__P_O1 + var_chaste_interface__RyR_channel__P_O2) * mParameters[0]; // millimolar_per_second + const double var_membrane__F = 96.485341500000004; // coulomb_per_millimole + const double var_membrane__R = 8.3144720000000003; // joule_per_mole_kelvin + const double var_membrane__T = 310; // kelvin + const double var_L_type_Ca_current_y_gate__tau_y = 0.02 + 0.59999999999999998 / (1 + exp(2.1052631578947367 + 0.10526315789473684 * var_chaste_interface__membrane__V)); // second + const double var_fast_sodium_current_h_gate__alpha_h = ((var_chaste_interface__membrane__V < -40) ? (135 * exp(-11.764705882352942 + 0.14705882352941177 * mParameters[10] - 0.14705882352941177 * var_chaste_interface__membrane__V)) : (0)); // per_second + const double var_fast_sodium_current_h_gate__beta_h = ((var_chaste_interface__membrane__V < -40) ? (3560 * exp(0.079000000000000001 * var_chaste_interface__membrane__V - 0.079000000000000001 * mParameters[10]) + 310000 * exp(0.34999999999999998 * var_chaste_interface__membrane__V - 0.34999999999999998 * mParameters[10])) : (7692.3076923076924 / (1 + exp(-0.96036036036036043 + 0.0900900900900901 * mParameters[10] - 0.0900900900900901 * var_chaste_interface__membrane__V)))); // per_second + const double var_fast_sodium_current_h_gate__tau_h = 1 / (var_fast_sodium_current_h_gate__alpha_h + var_fast_sodium_current_h_gate__beta_h); // second + const double var_fast_sodium_current_j_gate__alpha_j = ((var_chaste_interface__membrane__V < -40) ? (1000 * (37.780000000000001 + var_chaste_interface__membrane__V) * (-127140 * exp(0.24440000000000001 * var_chaste_interface__membrane__V - 0.24440000000000001 * mParameters[10]) - 3.4740000000000003e-5 * exp(0.043909999999999998 * mParameters[10] - 0.043909999999999998 * var_chaste_interface__membrane__V)) / (1 + exp(24.640530000000002 + 0.311 * var_chaste_interface__membrane__V - 0.311 * mParameters[10]))) : (0)); // per_second + const double var_fast_sodium_current_j_gate__beta_j = ((var_chaste_interface__membrane__V < -40) ? (121.2 * exp(0.01052 * mParameters[10] - 0.01052 * var_chaste_interface__membrane__V) / (1 + exp(-5.5312920000000005 + 0.13780000000000001 * mParameters[10] - 0.13780000000000001 * var_chaste_interface__membrane__V))) : (300 * exp(2.5349999999999999e-7 * mParameters[10] - 2.5349999999999999e-7 * var_chaste_interface__membrane__V) / (1 + exp(-3.2000000000000002 + 0.10000000000000001 * mParameters[10] - 0.10000000000000001 * var_chaste_interface__membrane__V)))); // per_second + const double var_fast_sodium_current_j_gate__tau_j = 1 / (var_fast_sodium_current_j_gate__alpha_j + var_fast_sodium_current_j_gate__beta_j); // second + const double var_membrane__i_Stim_converted = GetIntracellularAreaStimulus(var_chaste_interface__environment__time_converted); // uA_per_cm2 + const double var_rapid_activating_delayed_rectifiyer_K_current__R_V = 1 / (1 + 1.4944999999999999 * exp(0.044600000000000001 * var_chaste_interface__membrane__V)); // dimensionless + const double var_L_type_Ca_current__i_Ca_max = 4000 * pow(var_membrane__F, 2) * (0.001 * exp(2 * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T)) - 0.34100000000000003 * mParameters[3]) * mParameters[6] * var_chaste_interface__membrane__V / ((-1 + exp(2 * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * var_membrane__R * var_membrane__T); // microA_per_microF + const double var_L_type_Ca_current__i_Ca = (var_chaste_interface__L_type_Ca_current__O + var_chaste_interface__L_type_Ca_current__O_Ca) * var_L_type_Ca_current__i_Ca_max * var_chaste_interface__L_type_Ca_current_y_gate__y; // microA_per_microF + const double var_L_type_Ca_current__i_Ca_converted = HeartConfig::Instance()->GetCapacitance() * var_L_type_Ca_current__i_Ca; // uA_per_cm2 + const double var_rapid_activating_delayed_rectifiyer_K_current__E_K = var_membrane__R * var_membrane__T * log(mParameters[4] / var_chaste_interface__intracellular_ion_concentrations__Ki) / var_membrane__F; // millivolt + const double var_rapid_activating_delayed_rectifiyer_K_current__f_Ko = 0.5 * sqrt(mParameters[4]); // dimensionless + const double var_rapid_activating_delayed_rectifiyer_K_current__i_Kr = (-var_rapid_activating_delayed_rectifiyer_K_current__E_K + var_chaste_interface__membrane__V) * var_rapid_activating_delayed_rectifiyer_K_current__R_V * var_rapid_activating_delayed_rectifiyer_K_current__f_Ko * mParameters[12] * var_chaste_interface__rapid_activating_delayed_rectifiyer_K_current_X_kr_gate__X_kr; // microA_per_microF + const double var_rapid_activating_delayed_rectifiyer_K_current__i_Kr_converted = HeartConfig::Instance()->GetCapacitance() * var_rapid_activating_delayed_rectifiyer_K_current__i_Kr; // uA_per_cm2 + const double var_Na_Ca_exchanger__i_NaCa = 5000 * (pow(var_chaste_interface__intracellular_ion_concentrations__Nai, 3) * mParameters[3] * exp(var_Na_Ca_exchanger__eta * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T)) - pow(mParameters[5], 3) * var_chaste_interface__intracellular_ion_concentrations__Cai * exp((-1 + var_Na_Ca_exchanger__eta) * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * mParameters[14] / ((1 + var_Na_Ca_exchanger__K_sat * exp((-1 + var_Na_Ca_exchanger__eta) * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * (pow(var_Na_Ca_exchanger__K_mNa, 3) + pow(mParameters[5], 3)) * (var_Na_Ca_exchanger__K_mCa + mParameters[3])); // microA_per_microF + const double var_Na_Ca_exchanger__i_NaCa_converted = HeartConfig::Instance()->GetCapacitance() * var_Na_Ca_exchanger__i_NaCa; // uA_per_cm2 + const double var_fast_sodium_current__E_Na = var_membrane__R * var_membrane__T * log(mParameters[5] / var_chaste_interface__intracellular_ion_concentrations__Nai) / var_membrane__F; // millivolt + const double var_fast_sodium_current__i_Na = pow(var_chaste_interface__fast_sodium_current_m_gate__m, 3) * (-var_fast_sodium_current__E_Na + var_chaste_interface__membrane__V) * mParameters[8] * var_chaste_interface__fast_sodium_current_h_gate__h * var_chaste_interface__fast_sodium_current_j_gate__j; // microA_per_microF + const double var_fast_sodium_current__i_Na_converted = HeartConfig::Instance()->GetCapacitance() * var_fast_sodium_current__i_Na; // uA_per_cm2 + const double var_slow_activating_delayed_rectifiyer_K_current__E_Ks = var_membrane__R * var_membrane__T * log((mParameters[4] + 0.018329999999999999 * mParameters[5]) / (var_chaste_interface__intracellular_ion_concentrations__Ki + 0.018329999999999999 * var_chaste_interface__intracellular_ion_concentrations__Nai)) / var_membrane__F; // millivolt + const double var_slow_activating_delayed_rectifiyer_K_current__i_Ks = pow(var_chaste_interface__slow_activating_delayed_rectifiyer_K_current_X_ks_gate__X_ks, 2) * (-var_slow_activating_delayed_rectifiyer_K_current__E_Ks + var_chaste_interface__membrane__V) * mParameters[13]; // microA_per_microF + const double var_slow_activating_delayed_rectifiyer_K_current__i_Ks_converted = HeartConfig::Instance()->GetCapacitance() * var_slow_activating_delayed_rectifiyer_K_current__i_Ks; // uA_per_cm2 + const double var_time_independent_potassium_current__K_mK1 = 13; // millimolar + const double var_time_independent_potassium_current_K1_gate__K1_infinity_V = 1 / (2 + exp(1.5 * (-var_rapid_activating_delayed_rectifiyer_K_current__E_K + var_chaste_interface__membrane__V) * var_membrane__F / (var_membrane__R * var_membrane__T))); // dimensionless + const double var_time_independent_potassium_current__i_K1 = (-var_rapid_activating_delayed_rectifiyer_K_current__E_K + var_chaste_interface__membrane__V) * mParameters[4] * mParameters[11] * var_time_independent_potassium_current_K1_gate__K1_infinity_V / (mParameters[4] + var_time_independent_potassium_current__K_mK1); // microA_per_microF + const double var_time_independent_potassium_current__i_K1_converted = HeartConfig::Instance()->GetCapacitance() * var_time_independent_potassium_current__i_K1; // uA_per_cm2 + const double var_transient_outward_potassium_current__i_to1 = (-var_rapid_activating_delayed_rectifiyer_K_current__E_K + var_chaste_interface__membrane__V) * mParameters[15] * var_chaste_interface__transient_outward_potassium_current_X_to1_gate__X_to1 * var_chaste_interface__transient_outward_potassium_current_Y_to1_gate__Y_to1; // microA_per_microF + const double var_transient_outward_potassium_current__i_to1_converted = HeartConfig::Instance()->GetCapacitance() * var_transient_outward_potassium_current__i_to1; // uA_per_cm2 + + std::vector dqs(13); + dqs[0] = var_RyR_channel__J_rel; + dqs[1] = var_L_type_Ca_current__i_Ca_converted; + dqs[2] = var_L_type_Ca_current_y_gate__tau_y; + dqs[3] = var_fast_sodium_current__i_Na_converted; + dqs[4] = var_fast_sodium_current_h_gate__tau_h; + dqs[5] = var_fast_sodium_current_j_gate__tau_j; + dqs[6] = var_time_independent_potassium_current__i_K1_converted; + dqs[7] = var_rapid_activating_delayed_rectifiyer_K_current__i_Kr_converted; + dqs[8] = var_slow_activating_delayed_rectifiyer_K_current__i_Ks_converted; + dqs[9] = var_Na_Ca_exchanger__i_NaCa_converted; + dqs[10] = var_membrane__i_Stim_converted; + dqs[11] = var_transient_outward_potassium_current__i_to1_converted; + dqs[12] = var_chaste_interface__environment__time_converted; + return dqs; + } + +template<> +void OdeSystemInformation::Initialise(void) +{ + this->mSystemName = "winslow_model_1999"; + this->mFreeVariableName = "time"; + this->mFreeVariableUnits = "millisecond"; + + // rY[0]: + this->mVariableNames.push_back("membrane_voltage"); + this->mVariableUnits.push_back("millivolt"); + this->mInitialConditions.push_back(-96.1638); + + // rY[1]: + this->mVariableNames.push_back("cytosolic_calcium_concentration"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(8e-05); + + // rY[2]: + this->mVariableNames.push_back("membrane_fast_sodium_current_m_gate"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.0328302); + + // rY[3]: + this->mVariableNames.push_back("membrane_fast_sodium_current_h_gate"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.988354); + + // rY[4]: + this->mVariableNames.push_back("membrane_fast_sodium_current_j_gate"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.99254); + + // rY[5]: + this->mVariableNames.push_back("rapid_activating_delayed_rectifiyer_K_current_X_kr_gate__X_kr"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.51); + + // rY[6]: + this->mVariableNames.push_back("slow_activating_delayed_rectifiyer_K_current_X_ks_gate__X_ks"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.264); + + // rY[7]: + this->mVariableNames.push_back("transient_outward_potassium_current_X_to1_gate__X_to1"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(2.63); + + // rY[8]: + this->mVariableNames.push_back("transient_outward_potassium_current_Y_to1_gate__Y_to1"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.99); + + // rY[9]: + this->mVariableNames.push_back("membrane_L_type_calcium_current_d_gate"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(9.84546e-21); + + // rY[10]: + this->mVariableNames.push_back("membrane_L_type_calcium_current_d2_gate"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.0); + + // rY[11]: + this->mVariableNames.push_back("L_type_Ca_current__C0"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.997208); + + // rY[12]: + this->mVariableNames.push_back("L_type_Ca_current__C1"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(6.38897e-05); + + // rY[13]: + this->mVariableNames.push_back("L_type_Ca_current__C2"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(1.535e-09); + + // rY[14]: + this->mVariableNames.push_back("L_type_Ca_current__C3"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(1.63909e-14); + + // rY[15]: + this->mVariableNames.push_back("L_type_Ca_current__C4"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(6.56337e-20); + + // rY[16]: + this->mVariableNames.push_back("L_type_Ca_current__C_Ca0"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.00272826); + + // rY[17]: + this->mVariableNames.push_back("L_type_Ca_current__C_Ca1"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(6.99215e-07); + + // rY[18]: + this->mVariableNames.push_back("L_type_Ca_current__C_Ca2"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(6.71989e-11); + + // rY[19]: + this->mVariableNames.push_back("L_type_Ca_current__C_Ca3"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(2.87031e-15); + + // rY[20]: + this->mVariableNames.push_back("L_type_Ca_current__C_Ca4"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(4.59752e-20); + + // rY[21]: + this->mVariableNames.push_back("membrane_L_type_calcium_current_f_gate"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.798); + + // rY[22]: + this->mVariableNames.push_back("RyR_channel__P_O1"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.0); + + // rY[23]: + this->mVariableNames.push_back("RyR_channel__P_O2"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.0); + + // rY[24]: + this->mVariableNames.push_back("RyR_channel__P_C1"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.47); + + // rY[25]: + this->mVariableNames.push_back("RyR_channel__P_C2"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.53); + + // rY[26]: + this->mVariableNames.push_back("intracellular_Ca_fluxes__HTRPNCa"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(0.98); + + // rY[27]: + this->mVariableNames.push_back("intracellular_Ca_fluxes__LTRPNCa"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(0.078); + + // rY[28]: + this->mVariableNames.push_back("cytosolic_sodium_concentration"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(10.0); + + // rY[29]: + this->mVariableNames.push_back("cytosolic_potassium_concentration"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(157.8); + + // rY[30]: + this->mVariableNames.push_back("dyadic_space_calcium_concentration"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(0.00011); + + // rY[31]: + this->mVariableNames.push_back("JSR_calcium_concentration"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(0.257); + + // rY[32]: + this->mVariableNames.push_back("NSR_calcium_concentration"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(0.257); + + // mParameters[0]: + this->mParameterNames.push_back("SR_release_current_max"); + this->mParameterUnits.push_back("per_second"); + + // mParameters[1]: + this->mParameterNames.push_back("SR_uptake_current_max"); + this->mParameterUnits.push_back("dimensionless"); + + // mParameters[2]: + this->mParameterNames.push_back("concentration_clamp_onoff"); + this->mParameterUnits.push_back("dimensionless"); + + // mParameters[3]: + this->mParameterNames.push_back("extracellular_calcium_concentration"); + this->mParameterUnits.push_back("millimolar"); + + // mParameters[4]: + this->mParameterNames.push_back("extracellular_potassium_concentration"); + this->mParameterUnits.push_back("millimolar"); + + // mParameters[5]: + this->mParameterNames.push_back("extracellular_sodium_concentration"); + this->mParameterUnits.push_back("millimolar"); + + // mParameters[6]: + this->mParameterNames.push_back("membrane_L_type_calcium_current_conductance"); + this->mParameterUnits.push_back("cm_per_second"); + + // mParameters[7]: + this->mParameterNames.push_back("membrane_capacitance"); + this->mParameterUnits.push_back("microF_per_cm2"); + + // mParameters[8]: + this->mParameterNames.push_back("membrane_fast_sodium_current_conductance"); + this->mParameterUnits.push_back("milliS_per_microF"); + + // mParameters[9]: + this->mParameterNames.push_back("membrane_fast_sodium_current_reduced_inactivation"); + this->mParameterUnits.push_back("dimensionless"); + + // mParameters[10]: + this->mParameterNames.push_back("membrane_fast_sodium_current_shift_inactivation"); + this->mParameterUnits.push_back("millivolt"); + + // mParameters[11]: + this->mParameterNames.push_back("membrane_inward_rectifier_potassium_current_conductance"); + this->mParameterUnits.push_back("milliS_per_microF"); + + // mParameters[12]: + this->mParameterNames.push_back("membrane_rapid_delayed_rectifier_potassium_current_conductance"); + this->mParameterUnits.push_back("milliS_per_microF"); + + // mParameters[13]: + this->mParameterNames.push_back("membrane_slow_delayed_rectifier_potassium_current_conductance"); + this->mParameterUnits.push_back("milliS_per_microF"); + + // mParameters[14]: + this->mParameterNames.push_back("membrane_sodium_calcium_exchanger_current_conductance"); + this->mParameterUnits.push_back("microA_per_microF"); + + // mParameters[15]: + this->mParameterNames.push_back("membrane_transient_outward_current_conductance"); + this->mParameterUnits.push_back("milliS_per_microF"); + + // Derived Quantity index [0]: + this->mDerivedQuantityNames.push_back("SR_release_current"); + this->mDerivedQuantityUnits.push_back("millimolar_per_second"); + + // Derived Quantity index [1]: + this->mDerivedQuantityNames.push_back("membrane_L_type_calcium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [2]: + this->mDerivedQuantityNames.push_back("membrane_L_type_calcium_current_f_gate_tau"); + this->mDerivedQuantityUnits.push_back("second"); + + // Derived Quantity index [3]: + this->mDerivedQuantityNames.push_back("membrane_fast_sodium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [4]: + this->mDerivedQuantityNames.push_back("membrane_fast_sodium_current_h_gate_tau"); + this->mDerivedQuantityUnits.push_back("second"); + + // Derived Quantity index [5]: + this->mDerivedQuantityNames.push_back("membrane_fast_sodium_current_j_gate_tau"); + this->mDerivedQuantityUnits.push_back("second"); + + // Derived Quantity index [6]: + this->mDerivedQuantityNames.push_back("membrane_inward_rectifier_potassium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [7]: + this->mDerivedQuantityNames.push_back("membrane_rapid_delayed_rectifier_potassium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [8]: + this->mDerivedQuantityNames.push_back("membrane_slow_delayed_rectifier_potassium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [9]: + this->mDerivedQuantityNames.push_back("membrane_sodium_calcium_exchanger_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [10]: + this->mDerivedQuantityNames.push_back("membrane_stimulus_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [11]: + this->mDerivedQuantityNames.push_back("membrane_transient_outward_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [12]: + this->mDerivedQuantityNames.push_back("time"); + this->mDerivedQuantityUnits.push_back("millisecond"); + + this->mInitialised = true; +} + +// Serialization for Boost >= 1.36 +#include "SerializationExportWrapperForCpp.hpp" +CHASTE_CLASS_EXPORT(Dynamicwinslow_model_1999FromCellMLGRL2) +extern "C" +{ + AbstractCardiacCellInterface* MakeCardiacCell( + boost::shared_ptr pSolver, + boost::shared_ptr pStimulus) + { + return new Dynamicwinslow_model_1999FromCellMLGRL2(pSolver, pStimulus); + } + +} diff --git a/chaste_codegen/tests/numerical/baseline/GRL2/dynamic_winslow_model_1999.hpp b/chaste_codegen/tests/numerical/baseline/GRL2/dynamic_winslow_model_1999.hpp new file mode 100644 index 00000000..1aa2841b --- /dev/null +++ b/chaste_codegen/tests/numerical/baseline/GRL2/dynamic_winslow_model_1999.hpp @@ -0,0 +1,154 @@ +#ifndef DYNAMICWINSLOW_MODEL_1999FROMCELLMLGRL2_HPP_ +#define DYNAMICWINSLOW_MODEL_1999FROMCELLMLGRL2_HPP_ + +//! @file +//! +//! This source file was generated from CellML by chaste_codegen version (version omitted as unimportant) +//! +//! Model: winslow_model_1999 +//! +//! Processed by chaste_codegen: https://github.com/ModellingWebLab/chaste-codegen +//! (translator: chaste_codegen, model type: GeneralizedRushLarsenSecondOrder) +//! on (date omitted as unimportant) +//! +//! + +#include "ChasteSerialization.hpp" +#include +#include "AbstractDynamicallyLoadableEntity.hpp" +#include "AbstractStimulusFunction.hpp" +#include "AbstractGeneralizedRushLarsenCardiacCell.hpp" + +class Dynamicwinslow_model_1999FromCellMLGRL2 : public AbstractGeneralizedRushLarsenCardiacCell, public AbstractDynamicallyLoadableEntity +{ + friend class boost::serialization::access; + template + void serialize(Archive & archive, const unsigned int version) + { + archive & boost::serialization::base_object(*this); + archive & boost::serialization::base_object(*this); + } + + // + // Settable parameters and readable variables + // + + +private: +const bool is_concentration[33] = {false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, true, true, true, true}; +const bool is_probability[33] = {false, false, true, true, true, false, false, false, false, true, true, false, false, false, false, false, false, false, false, false, false, true, false, false, false, false, false, false, false, false, false, false, false}; +public: + + boost::shared_ptr UseCellMLDefaultStimulus(); + double GetIntracellularCalciumConcentration(); + Dynamicwinslow_model_1999FromCellMLGRL2(boost::shared_ptr /* unused; should be empty */, boost::shared_ptr pIntracellularStimulus); + ~Dynamicwinslow_model_1999FromCellMLGRL2(); + void VerifyStateVariables(); + double GetIIonic(const std::vector* pStateVariables=NULL); + void UpdateTransmembranePotential(double var_chaste_interface__environment__time_converted); + void ComputeOneStepExceptVoltage(double var_chaste_interface__environment__time_converted); + + double EvaluateYDerivative0(double var_chaste_interface__environment__time_converted, std::vector& rY); + double EvaluatePartialDerivative0(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative1(double var_chaste_interface__environment__time_converted, std::vector& rY); + double EvaluatePartialDerivative1(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative2(double var_chaste_interface__environment__time_converted, std::vector& rY); + double EvaluatePartialDerivative2(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative3(double var_chaste_interface__environment__time_converted, std::vector& rY); + double EvaluatePartialDerivative3(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative4(double var_chaste_interface__environment__time_converted, std::vector& rY); + double EvaluatePartialDerivative4(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative5(double var_chaste_interface__environment__time_converted, std::vector& rY); + double EvaluatePartialDerivative5(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative6(double var_chaste_interface__environment__time_converted, std::vector& rY); + double EvaluatePartialDerivative6(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative7(double var_chaste_interface__environment__time_converted, std::vector& rY); + double EvaluatePartialDerivative7(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative8(double var_chaste_interface__environment__time_converted, std::vector& rY); + double EvaluatePartialDerivative8(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative9(double var_chaste_interface__environment__time_converted, std::vector& rY); + double EvaluatePartialDerivative9(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative10(double var_chaste_interface__environment__time_converted, std::vector& rY); + double EvaluatePartialDerivative10(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative11(double var_chaste_interface__environment__time_converted, std::vector& rY); + double EvaluatePartialDerivative11(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative12(double var_chaste_interface__environment__time_converted, std::vector& rY); + double EvaluatePartialDerivative12(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative13(double var_chaste_interface__environment__time_converted, std::vector& rY); + double EvaluatePartialDerivative13(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative14(double var_chaste_interface__environment__time_converted, std::vector& rY); + double EvaluatePartialDerivative14(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative15(double var_chaste_interface__environment__time_converted, std::vector& rY); + double EvaluatePartialDerivative15(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative16(double var_chaste_interface__environment__time_converted, std::vector& rY); + double EvaluatePartialDerivative16(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative17(double var_chaste_interface__environment__time_converted, std::vector& rY); + double EvaluatePartialDerivative17(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative18(double var_chaste_interface__environment__time_converted, std::vector& rY); + double EvaluatePartialDerivative18(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative19(double var_chaste_interface__environment__time_converted, std::vector& rY); + double EvaluatePartialDerivative19(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative20(double var_chaste_interface__environment__time_converted, std::vector& rY); + double EvaluatePartialDerivative20(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative21(double var_chaste_interface__environment__time_converted, std::vector& rY); + double EvaluatePartialDerivative21(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative22(double var_chaste_interface__environment__time_converted, std::vector& rY); + double EvaluatePartialDerivative22(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative23(double var_chaste_interface__environment__time_converted, std::vector& rY); + double EvaluatePartialDerivative23(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative24(double var_chaste_interface__environment__time_converted, std::vector& rY); + double EvaluatePartialDerivative24(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative25(double var_chaste_interface__environment__time_converted, std::vector& rY); + double EvaluatePartialDerivative25(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative26(double var_chaste_interface__environment__time_converted, std::vector& rY); + double EvaluatePartialDerivative26(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative27(double var_chaste_interface__environment__time_converted, std::vector& rY); + double EvaluatePartialDerivative27(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative28(double var_chaste_interface__environment__time_converted, std::vector& rY); + double EvaluatePartialDerivative28(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative29(double var_chaste_interface__environment__time_converted, std::vector& rY); + double EvaluatePartialDerivative29(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative30(double var_chaste_interface__environment__time_converted, std::vector& rY); + double EvaluatePartialDerivative30(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative31(double var_chaste_interface__environment__time_converted, std::vector& rY); + double EvaluatePartialDerivative31(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative32(double var_chaste_interface__environment__time_converted, std::vector& rY); + double EvaluatePartialDerivative32(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical=false); + + std::vector ComputeDerivedQuantities(double var_chaste_interface__environment__time_converted, const std::vector & rY); +}; + +// Needs to be included last +#include "SerializationExportWrapper.hpp" +CHASTE_CLASS_EXPORT(Dynamicwinslow_model_1999FromCellMLGRL2) + +namespace boost +{ + namespace serialization + { + template + inline void save_construct_data( + Archive & ar, const Dynamicwinslow_model_1999FromCellMLGRL2 * t, const unsigned int fileVersion) + { + const boost::shared_ptr p_solver = t->GetSolver(); + const boost::shared_ptr p_stimulus = t->GetStimulusFunction(); + ar << p_solver; + ar << p_stimulus; + } + + template + inline void load_construct_data( + Archive & ar, Dynamicwinslow_model_1999FromCellMLGRL2 * t, const unsigned int fileVersion) + { + boost::shared_ptr p_solver; + boost::shared_ptr p_stimulus; + ar >> p_solver; + ar >> p_stimulus; + ::new(t)Dynamicwinslow_model_1999FromCellMLGRL2(p_solver, p_stimulus); + } + + } + +} + +#endif // DYNAMICWINSLOW_MODEL_1999FROMCELLMLGRL2_HPP_ \ No newline at end of file diff --git a/chaste_codegen/tests/numerical/baseline/GRL2/hodgkin_huxley_squid_axon_model_1952_modified.cpp b/chaste_codegen/tests/numerical/baseline/GRL2/hodgkin_huxley_squid_axon_model_1952_modified.cpp new file mode 100644 index 00000000..8be4b35b --- /dev/null +++ b/chaste_codegen/tests/numerical/baseline/GRL2/hodgkin_huxley_squid_axon_model_1952_modified.cpp @@ -0,0 +1,605 @@ +//! @file +//! +//! This source file was generated from CellML by chaste_codegen version (version omitted as unimportant) +//! +//! Model: hodgkin_huxley_squid_axon_model_1952_modified +//! +//! Processed by chaste_codegen: https://github.com/ModellingWebLab/chaste-codegen +//! (translator: chaste_codegen, model type: GeneralizedRushLarsenSecondOrder) +//! on (date omitted as unimportant) +//! +//! + +#include "hodgkin_huxley_squid_axon_model_1952_modified.hpp" +#include +#include +#include +#include +#include "Exception.hpp" +#include "OdeSystemInformation.hpp" +#include "RegularStimulus.hpp" +#include "HeartConfig.hpp" +#include "IsNan.hpp" +#include "MathsCustomFunctions.hpp" + + + + + + boost::shared_ptr Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLGRL2::UseCellMLDefaultStimulus() + { + // Use the default stimulus specified by CellML metadata + const double var_chaste_interface__membrane__stim_amplitude = -20; // microA_per_cm2 + const double var_chaste_interface__membrane__stim_duration = 0.5; // millisecond + const double var_chaste_interface__membrane__stim_period = 1000; // millisecond + const double var_chaste_interface__membrane__stim_start = 10; // millisecond + boost::shared_ptr p_cellml_stim(new RegularStimulus( + -fabs(var_chaste_interface__membrane__stim_amplitude), + var_chaste_interface__membrane__stim_duration, + var_chaste_interface__membrane__stim_period, + var_chaste_interface__membrane__stim_start + )); + mpIntracellularStimulus = p_cellml_stim; + return p_cellml_stim; + } + + Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLGRL2::Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLGRL2(boost::shared_ptr /* unused; should be empty */, boost::shared_ptr pIntracellularStimulus) + : AbstractGeneralizedRushLarsenCardiacCell( + 4, + 0, + pIntracellularStimulus) + { + // Time units: millisecond + // + this->mpSystemInfo = OdeSystemInformation::Instance(); + Init(); + + // We have a default stimulus specified in the CellML file metadata + this->mHasDefaultStimulusFromCellML = true; + + this->mParameters[0] = 1; // (var_membrane__Cm) [microF_per_cm2] + this->mParameters[1] = 120; // (var_sodium_channel__g_Na) [milliS_per_cm2] + this->mParameters[2] = 0.29999999999999999; // (var_leakage_current__g_L) [milliS_per_cm2] + this->mParameters[3] = 36; // (var_potassium_channel__g_K) [milliS_per_cm2] + } + + Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLGRL2::~Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLGRL2() + { + } + + + void Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLGRL2::VerifyStateVariables() + { + std::vector& rY = rGetStateVariables(); + std::string error_message = ""; + + for (unsigned i=0; i < 4; i++) + { + if(std::isnan(rY[i])) + { + error_message += "State variable " + this->rGetStateVariableNames()[i] + " is not a number\n"; + } + if(std::isinf(rY[i])) + { + error_message += "State variable " + this->rGetStateVariableNames()[i] + " has become INFINITE\n"; + } + if(this->is_concentration[i] && rY[i] < 0) + { + error_message += "Concentration " + this->rGetStateVariableNames()[i] + " below 0\n"; + } + if(this->is_probability[i] && rY[i] < 0) + { + error_message += "Probability " + this->rGetStateVariableNames()[i] + " below 0\n"; + } + if(this->is_probability[i] && rY[i] > 1) + { + error_message += "Probability " + this->rGetStateVariableNames()[i] + " above 1\n"; + } + } + if (error_message != ""){ + EXCEPTION(DumpState(error_message)); + } + } + + double Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLGRL2::GetIIonic(const std::vector* pStateVariables) + { + // For state variable interpolation (SVI) we read in interpolated state variables, + // otherwise for ionic current interpolation (ICI) we use the state variables of this model (node). + if (!pStateVariables) pStateVariables = &rGetStateVariables(); + const std::vector& rY = *pStateVariables; + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -75.0 + double var_chaste_interface__sodium_channel_m_gate__m = rY[1]; + // Units: dimensionless; Initial value: 0.05 + double var_chaste_interface__sodium_channel_h_gate__h = rY[2]; + // Units: dimensionless; Initial value: 0.6 + double var_chaste_interface__potassium_channel_n_gate__n = rY[3]; + // Units: dimensionless; Initial value: 0.325 + + const double var_membrane__E_R = -75; // millivolt + const double var_leakage_current__E_L = 10.613 + var_membrane__E_R; // millivolt + const double var_leakage_current__i_L = (-var_leakage_current__E_L + var_chaste_interface__membrane__V) * mParameters[2]; // microA_per_cm2 + const double var_potassium_channel__E_K = -12 + var_membrane__E_R; // millivolt + const double var_potassium_channel__i_K = pow(var_chaste_interface__potassium_channel_n_gate__n, 4) * (-var_potassium_channel__E_K + var_chaste_interface__membrane__V) * mParameters[3]; // microA_per_cm2 + const double var_sodium_channel__E_Na = 115 + var_membrane__E_R; // millivolt + const double var_sodium_channel__i_Na = pow(var_chaste_interface__sodium_channel_m_gate__m, 3) * (-var_sodium_channel__E_Na + var_chaste_interface__membrane__V) * mParameters[1] * var_chaste_interface__sodium_channel_h_gate__h; // microA_per_cm2 + const double var_chaste_interface__i_ionic = var_leakage_current__i_L + var_potassium_channel__i_K + var_sodium_channel__i_Na; // uA_per_cm2 + + const double i_ionic = var_chaste_interface__i_ionic; + EXCEPT_IF_NOT(!std::isnan(i_ionic)); + return i_ionic; + } + + void Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLGRL2::UpdateTransmembranePotential(double var_chaste_interface__environment__time) + { + std::vector& rY = rGetStateVariables(); + const unsigned v_index = GetVoltageIndex(); + const double delta = 1e-8; + const double yinit = rY[v_index]; + + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -75.0 + double var_chaste_interface__sodium_channel_m_gate__m = rY[1]; + // Units: dimensionless; Initial value: 0.05 + double var_chaste_interface__sodium_channel_h_gate__h = rY[2]; + // Units: dimensionless; Initial value: 0.6 + double var_chaste_interface__potassium_channel_n_gate__n = rY[3]; + // Units: dimensionless; Initial value: 0.325 + + + // Mathematics + double d_dt_chaste_interface_var_membrane__V; + const double var_membrane__E_R = -75; // millivolt + const double var_leakage_current__E_L = 10.613 + var_membrane__E_R; // millivolt + const double var_leakage_current__i_L = (-var_leakage_current__E_L + var_chaste_interface__membrane__V) * mParameters[2]; // microA_per_cm2 + const double var_membrane__i_Stim = GetIntracellularAreaStimulus(var_chaste_interface__environment__time); // microA_per_cm2 + const double var_potassium_channel__E_K = -12 + var_membrane__E_R; // millivolt + const double var_potassium_channel__i_K = pow(var_chaste_interface__potassium_channel_n_gate__n, 4) * (-var_potassium_channel__E_K + var_chaste_interface__membrane__V) * mParameters[3]; // microA_per_cm2 + const double var_sodium_channel__E_Na = 115 + var_membrane__E_R; // millivolt + const double var_sodium_channel__i_Na = pow(var_chaste_interface__sodium_channel_m_gate__m, 3) * (-var_sodium_channel__E_Na + var_chaste_interface__membrane__V) * mParameters[1] * var_chaste_interface__sodium_channel_h_gate__h; // microA_per_cm2 + d_dt_chaste_interface_var_membrane__V = (-var_leakage_current__i_L - var_membrane__i_Stim - var_potassium_channel__i_K - var_sodium_channel__i_Na) / mParameters[0]; // millivolt / millisecond + + double evalF = d_dt_chaste_interface_var_membrane__V; + mEvalF[0] = d_dt_chaste_interface_var_membrane__V; + double partialF = EvaluatePartialDerivative0(var_chaste_interface__environment__time, rY, delta, true); + if (fabs(partialF) < delta) + { + rY[v_index] += 0.5*evalF*mDt; + } + else + { + rY[v_index] += (evalF/partialF)*(exp(partialF*0.5*mDt)-1.0); + } + + rY[v_index] = yinit; + evalF = EvaluateYDerivative0(var_chaste_interface__environment__time, rY); + mEvalF[0] = evalF; + partialF = EvaluatePartialDerivative0(var_chaste_interface__environment__time, rY, delta, true); + if (fabs(partialF) < delta) + { + rY[v_index] = yinit + evalF*mDt; + } + else + { + rY[v_index] = yinit + (evalF/partialF)*(exp(partialF*mDt)-1.0); + } + } + + void Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLGRL2::ComputeOneStepExceptVoltage(double var_chaste_interface__environment__time) + { + std::vector& rY = rGetStateVariables(); + const double delta=1e-8; + const unsigned size = GetNumberOfStateVariables(); + mYInit = rY; + double y_save; + + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -75.0 + double var_chaste_interface__sodium_channel_m_gate__m = rY[1]; + // Units: dimensionless; Initial value: 0.05 + double var_chaste_interface__sodium_channel_h_gate__h = rY[2]; + // Units: dimensionless; Initial value: 0.6 + double var_chaste_interface__potassium_channel_n_gate__n = rY[3]; + // Units: dimensionless; Initial value: 0.325 + + + // Mathematics + double d_dt_chaste_interface_var_membrane__V; + const double var_potassium_channel_n_gate__B = -0.10000000000000001; // per_millivolt + const double var_potassium_channel_n_gate__A = -0.01 / var_potassium_channel_n_gate__B; // per_millisecond + const double var_potassium_channel_n_gate__beta_n = 0.125 * exp(0.9375 + 0.012500000000000001 * var_chaste_interface__membrane__V); // per_millisecond + const double var_potassium_channel_n_gate__v0 = -65; // millivolt + const double var_potassium_channel_n_gate__U = (-var_potassium_channel_n_gate__v0 + var_chaste_interface__membrane__V) * var_potassium_channel_n_gate__B; // dimensionless + const double var_potassium_channel_n_gate__alpha_n = (((var_potassium_channel_n_gate__U >= -9.9999999999999995e-8) && (var_potassium_channel_n_gate__U <= 9.9999999999999995e-8)) ? ((1 - 0.5 * var_potassium_channel_n_gate__U) * var_potassium_channel_n_gate__A) : (var_potassium_channel_n_gate__A * var_potassium_channel_n_gate__U / (-1 + exp(var_potassium_channel_n_gate__U)))); // per_millisecond + const double d_dt_chaste_interface_var_potassium_channel_n_gate__n = (1 - var_chaste_interface__potassium_channel_n_gate__n) * var_potassium_channel_n_gate__alpha_n - var_potassium_channel_n_gate__beta_n * var_chaste_interface__potassium_channel_n_gate__n; // 1 / millisecond + const double var_sodium_channel_h_gate__alpha_h = 0.070000000000000007 * exp(-3.75 - 0.050000000000000003 * var_chaste_interface__membrane__V); // per_millisecond + const double var_sodium_channel_h_gate__beta_h = 1 / (1 + exp(-4.5 - 0.10000000000000001 * var_chaste_interface__membrane__V)); // per_millisecond + const double d_dt_chaste_interface_var_sodium_channel_h_gate__h = (1 - var_chaste_interface__sodium_channel_h_gate__h) * var_sodium_channel_h_gate__alpha_h - var_sodium_channel_h_gate__beta_h * var_chaste_interface__sodium_channel_h_gate__h; // 1 / millisecond + const double var_sodium_channel_m_gate__B = -0.10000000000000001; // per_millivolt + const double var_sodium_channel_m_gate__A = -0.10000000000000001 / var_sodium_channel_m_gate__B; // per_millisecond + const double var_sodium_channel_m_gate__beta_m = 4 * exp(-4.166666666666667 - 0.055555555555555552 * var_chaste_interface__membrane__V); // per_millisecond + const double var_sodium_channel_m_gate__v0 = -50; // millivolt + const double var_sodium_channel_m_gate__U = (-var_sodium_channel_m_gate__v0 + var_chaste_interface__membrane__V) * var_sodium_channel_m_gate__B; // dimensionless + const double var_sodium_channel_m_gate__alpha_m = (((var_sodium_channel_m_gate__U >= -9.9999999999999995e-8) && (var_sodium_channel_m_gate__U <= 9.9999999999999995e-8)) ? ((1 - 0.5 * var_sodium_channel_m_gate__U) * var_sodium_channel_m_gate__A) : (var_sodium_channel_m_gate__A * var_sodium_channel_m_gate__U / (-1 + exp(var_sodium_channel_m_gate__U)))); // per_millisecond + const double d_dt_chaste_interface_var_sodium_channel_m_gate__m = (1 - var_chaste_interface__sodium_channel_m_gate__m) * var_sodium_channel_m_gate__alpha_m - var_sodium_channel_m_gate__beta_m * var_chaste_interface__sodium_channel_m_gate__m; // 1 / millisecond + + if (mSetVoltageDerivativeToZero) + { + d_dt_chaste_interface_var_membrane__V = 0.0; + } + else + { + const double var_membrane__E_R = -75; // millivolt + const double var_leakage_current__E_L = 10.613 + var_membrane__E_R; // millivolt + const double var_leakage_current__i_L = (-var_leakage_current__E_L + var_chaste_interface__membrane__V) * mParameters[2]; // microA_per_cm2 + const double var_membrane__i_Stim = GetIntracellularAreaStimulus(var_chaste_interface__environment__time); // microA_per_cm2 + const double var_potassium_channel__E_K = -12 + var_membrane__E_R; // millivolt + const double var_potassium_channel__i_K = pow(var_chaste_interface__potassium_channel_n_gate__n, 4) * (-var_potassium_channel__E_K + var_chaste_interface__membrane__V) * mParameters[3]; // microA_per_cm2 + const double var_sodium_channel__E_Na = 115 + var_membrane__E_R; // millivolt + const double var_sodium_channel__i_Na = pow(var_chaste_interface__sodium_channel_m_gate__m, 3) * (-var_sodium_channel__E_Na + var_chaste_interface__membrane__V) * mParameters[1] * var_chaste_interface__sodium_channel_h_gate__h; // microA_per_cm2 + d_dt_chaste_interface_var_membrane__V = (-var_leakage_current__i_L - var_membrane__i_Stim - var_potassium_channel__i_K - var_sodium_channel__i_Na) / mParameters[0]; // millivolt / millisecond + } + + mEvalF[0] = d_dt_chaste_interface_var_membrane__V; + mEvalF[1] = d_dt_chaste_interface_var_sodium_channel_m_gate__m; + mEvalF[2] = d_dt_chaste_interface_var_sodium_channel_h_gate__h; + mEvalF[3] = d_dt_chaste_interface_var_potassium_channel_n_gate__n; + + + mPartialF[0] = EvaluatePartialDerivative0(var_chaste_interface__environment__time, rY, delta); + mPartialF[1] = EvaluatePartialDerivative1(var_chaste_interface__environment__time, rY, delta); + mPartialF[2] = EvaluatePartialDerivative2(var_chaste_interface__environment__time, rY, delta); + mPartialF[3] = EvaluatePartialDerivative3(var_chaste_interface__environment__time, rY, delta); + for (unsigned var=0; var& rY) + { + double d_dt_chaste_interface_var_membrane__V; + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -75.0 + double var_chaste_interface__sodium_channel_m_gate__m = rY[1]; + // Units: dimensionless; Initial value: 0.05 + double var_chaste_interface__sodium_channel_h_gate__h = rY[2]; + // Units: dimensionless; Initial value: 0.6 + double var_chaste_interface__potassium_channel_n_gate__n = rY[3]; + // Units: dimensionless; Initial value: 0.325 + + + // Mathematics + const double var_membrane__E_R = -75; // millivolt + const double var_leakage_current__E_L = 10.613 + var_membrane__E_R; // millivolt + const double var_leakage_current__i_L = (-var_leakage_current__E_L + var_chaste_interface__membrane__V) * mParameters[2]; // microA_per_cm2 + const double var_membrane__i_Stim = GetIntracellularAreaStimulus(var_chaste_interface__environment__time); // microA_per_cm2 + const double var_potassium_channel__E_K = -12 + var_membrane__E_R; // millivolt + const double var_potassium_channel__i_K = pow(var_chaste_interface__potassium_channel_n_gate__n, 4) * (-var_potassium_channel__E_K + var_chaste_interface__membrane__V) * mParameters[3]; // microA_per_cm2 + const double var_sodium_channel__E_Na = 115 + var_membrane__E_R; // millivolt + const double var_sodium_channel__i_Na = pow(var_chaste_interface__sodium_channel_m_gate__m, 3) * (-var_sodium_channel__E_Na + var_chaste_interface__membrane__V) * mParameters[1] * var_chaste_interface__sodium_channel_h_gate__h; // microA_per_cm2 + d_dt_chaste_interface_var_membrane__V = (-var_leakage_current__i_L - var_membrane__i_Stim - var_potassium_channel__i_K - var_sodium_channel__i_Na) / mParameters[0]; // millivolt / millisecond + + return d_dt_chaste_interface_var_membrane__V; + } + + double Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLGRL2::EvaluatePartialDerivative0(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__sodium_channel_m_gate__m = rY[1]; + // Units: dimensionless; Initial value: 0.05 + double var_chaste_interface__sodium_channel_h_gate__h = rY[2]; + // Units: dimensionless; Initial value: 0.6 + double var_chaste_interface__potassium_channel_n_gate__n = rY[3]; + // Units: dimensionless; Initial value: 0.325 + + + const double var_x0 = 1 / mParameters[0]; + const double var_x1 = pow(var_chaste_interface__sodium_channel_m_gate__m, 3) * mParameters[1]; + + partialF = var_x0 * (-mParameters[2] - var_x1 * var_chaste_interface__sodium_channel_h_gate__h - pow(var_chaste_interface__potassium_channel_n_gate__n, 4) * mParameters[3]); + } + else + { + const double y_save = rY[0]; + rY[0] += delta; + const double temp = EvaluateYDerivative0(var_chaste_interface__environment__time, rY); + partialF = (temp-mEvalF[0])/delta; + rY[0] = y_save; + } + return partialF; + } + double Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLGRL2::EvaluateYDerivative1(double var_chaste_interface__environment__time, std::vector& rY) + { + + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -75.0 + double var_chaste_interface__sodium_channel_m_gate__m = rY[1]; + // Units: dimensionless; Initial value: 0.05 + + + // Mathematics + const double var_sodium_channel_m_gate__B = -0.10000000000000001; // per_millivolt + const double var_sodium_channel_m_gate__A = -0.10000000000000001 / var_sodium_channel_m_gate__B; // per_millisecond + const double var_sodium_channel_m_gate__beta_m = 4 * exp(-4.166666666666667 - 0.055555555555555552 * var_chaste_interface__membrane__V); // per_millisecond + const double var_sodium_channel_m_gate__v0 = -50; // millivolt + const double var_sodium_channel_m_gate__U = (-var_sodium_channel_m_gate__v0 + var_chaste_interface__membrane__V) * var_sodium_channel_m_gate__B; // dimensionless + const double var_sodium_channel_m_gate__alpha_m = (((var_sodium_channel_m_gate__U >= -9.9999999999999995e-8) && (var_sodium_channel_m_gate__U <= 9.9999999999999995e-8)) ? ((1 - 0.5 * var_sodium_channel_m_gate__U) * var_sodium_channel_m_gate__A) : (var_sodium_channel_m_gate__A * var_sodium_channel_m_gate__U / (-1 + exp(var_sodium_channel_m_gate__U)))); // per_millisecond + const double d_dt_chaste_interface_var_sodium_channel_m_gate__m = (1 - var_chaste_interface__sodium_channel_m_gate__m) * var_sodium_channel_m_gate__alpha_m - var_sodium_channel_m_gate__beta_m * var_chaste_interface__sodium_channel_m_gate__m; // 1 / millisecond + + return d_dt_chaste_interface_var_sodium_channel_m_gate__m; + } + + double Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLGRL2::EvaluatePartialDerivative1(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -75.0 + + + const double var_x3 = 0.10000000000000001 * var_chaste_interface__membrane__V; + const double var_x4 = 5 + var_x3; + const double var_x5 = (var_x4 >= -9.9999999999999995e-8) && (var_x4 <= 9.9999999999999995e-8); + const double var_x6 = exp(-var_x4); + const double var_x7 = -1 + var_x6; + const double var_x8 = 1 / var_x7; + const double var_x9 = exp(-4.166666666666667 - 0.055555555555555552 * var_chaste_interface__membrane__V); + + partialF = -((var_x5) ? (3.5 + 0.050000000000000003 * var_chaste_interface__membrane__V) : (-var_x4 * var_x8)) - 4 * var_x9; + } + else + { + const double y_save = rY[1]; + rY[1] += delta; + const double temp = EvaluateYDerivative1(var_chaste_interface__environment__time, rY); + partialF = (temp-mEvalF[1])/delta; + rY[1] = y_save; + } + return partialF; + } + double Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLGRL2::EvaluateYDerivative2(double var_chaste_interface__environment__time, std::vector& rY) + { + + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -75.0 + double var_chaste_interface__sodium_channel_h_gate__h = rY[2]; + // Units: dimensionless; Initial value: 0.6 + + + // Mathematics + const double var_sodium_channel_h_gate__alpha_h = 0.070000000000000007 * exp(-3.75 - 0.050000000000000003 * var_chaste_interface__membrane__V); // per_millisecond + const double var_sodium_channel_h_gate__beta_h = 1 / (1 + exp(-4.5 - 0.10000000000000001 * var_chaste_interface__membrane__V)); // per_millisecond + const double d_dt_chaste_interface_var_sodium_channel_h_gate__h = (1 - var_chaste_interface__sodium_channel_h_gate__h) * var_sodium_channel_h_gate__alpha_h - var_sodium_channel_h_gate__beta_h * var_chaste_interface__sodium_channel_h_gate__h; // 1 / millisecond + + return d_dt_chaste_interface_var_sodium_channel_h_gate__h; + } + + double Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLGRL2::EvaluatePartialDerivative2(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -75.0 + + + const double var_x10 = exp(-3.75 - 0.050000000000000003 * var_chaste_interface__membrane__V); + const double var_x11 = exp(-4.5 - 0.10000000000000001 * var_chaste_interface__membrane__V); + const double var_x12 = 1 + var_x11; + + partialF = -1 / var_x12 - 0.070000000000000007 * var_x10; + } + else + { + const double y_save = rY[2]; + rY[2] += delta; + const double temp = EvaluateYDerivative2(var_chaste_interface__environment__time, rY); + partialF = (temp-mEvalF[2])/delta; + rY[2] = y_save; + } + return partialF; + } + double Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLGRL2::EvaluateYDerivative3(double var_chaste_interface__environment__time, std::vector& rY) + { + + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -75.0 + double var_chaste_interface__potassium_channel_n_gate__n = rY[3]; + // Units: dimensionless; Initial value: 0.325 + + + // Mathematics + const double var_potassium_channel_n_gate__B = -0.10000000000000001; // per_millivolt + const double var_potassium_channel_n_gate__A = -0.01 / var_potassium_channel_n_gate__B; // per_millisecond + const double var_potassium_channel_n_gate__beta_n = 0.125 * exp(0.9375 + 0.012500000000000001 * var_chaste_interface__membrane__V); // per_millisecond + const double var_potassium_channel_n_gate__v0 = -65; // millivolt + const double var_potassium_channel_n_gate__U = (-var_potassium_channel_n_gate__v0 + var_chaste_interface__membrane__V) * var_potassium_channel_n_gate__B; // dimensionless + const double var_potassium_channel_n_gate__alpha_n = (((var_potassium_channel_n_gate__U >= -9.9999999999999995e-8) && (var_potassium_channel_n_gate__U <= 9.9999999999999995e-8)) ? ((1 - 0.5 * var_potassium_channel_n_gate__U) * var_potassium_channel_n_gate__A) : (var_potassium_channel_n_gate__A * var_potassium_channel_n_gate__U / (-1 + exp(var_potassium_channel_n_gate__U)))); // per_millisecond + const double d_dt_chaste_interface_var_potassium_channel_n_gate__n = (1 - var_chaste_interface__potassium_channel_n_gate__n) * var_potassium_channel_n_gate__alpha_n - var_potassium_channel_n_gate__beta_n * var_chaste_interface__potassium_channel_n_gate__n; // 1 / millisecond + + return d_dt_chaste_interface_var_potassium_channel_n_gate__n; + } + + double Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLGRL2::EvaluatePartialDerivative3(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -75.0 + + + const double var_x3 = 0.10000000000000001 * var_chaste_interface__membrane__V; + const double var_x13 = 6.5 + var_x3; + const double var_x14 = (var_x13 >= -9.9999999999999995e-8) && (var_x13 <= 9.9999999999999995e-8); + const double var_x15 = exp(-var_x13); + const double var_x16 = -1 + var_x15; + const double var_x17 = 1 / var_x16; + const double var_x18 = exp(0.9375 + 0.012500000000000001 * var_chaste_interface__membrane__V); + + partialF = -((var_x14) ? (0.42499999999999999 + 0.0050000000000000001 * var_chaste_interface__membrane__V) : (-0.099999999999999992 * var_x13 * var_x17)) - 0.125 * var_x18; + } + else + { + const double y_save = rY[3]; + rY[3] += delta; + const double temp = EvaluateYDerivative3(var_chaste_interface__environment__time, rY); + partialF = (temp-mEvalF[3])/delta; + rY[3] = y_save; + } + return partialF; + } + + std::vector Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLGRL2::ComputeDerivedQuantities(double var_chaste_interface__environment__time, const std::vector & rY) + { + // Inputs: + // Time units: millisecond + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -75.0 + double var_chaste_interface__sodium_channel_m_gate__m = rY[1]; + // Units: dimensionless; Initial value: 0.05 + double var_chaste_interface__sodium_channel_h_gate__h = rY[2]; + // Units: dimensionless; Initial value: 0.6 + double var_chaste_interface__potassium_channel_n_gate__n = rY[3]; + // Units: dimensionless; Initial value: 0.325 + + // Mathematics + const double var_membrane__E_R = -75; // millivolt + const double var_leakage_current__E_L = 10.613 + var_membrane__E_R; // millivolt + const double var_leakage_current__i_L = (-var_leakage_current__E_L + var_chaste_interface__membrane__V) * mParameters[2]; // microA_per_cm2 + const double var_membrane__i_Stim = GetIntracellularAreaStimulus(var_chaste_interface__environment__time); // microA_per_cm2 + const double var_potassium_channel__E_K = -12 + var_membrane__E_R; // millivolt + const double var_potassium_channel__i_K = pow(var_chaste_interface__potassium_channel_n_gate__n, 4) * (-var_potassium_channel__E_K + var_chaste_interface__membrane__V) * mParameters[3]; // microA_per_cm2 + const double var_sodium_channel__E_Na = 115 + var_membrane__E_R; // millivolt + const double var_sodium_channel__i_Na = pow(var_chaste_interface__sodium_channel_m_gate__m, 3) * (-var_sodium_channel__E_Na + var_chaste_interface__membrane__V) * mParameters[1] * var_chaste_interface__sodium_channel_h_gate__h; // microA_per_cm2 + + std::vector dqs(5); + dqs[0] = var_sodium_channel__i_Na; + dqs[1] = var_leakage_current__i_L; + dqs[2] = var_potassium_channel__i_K; + dqs[3] = var_membrane__i_Stim; + dqs[4] = var_chaste_interface__environment__time; + return dqs; + } + +template<> +void OdeSystemInformation::Initialise(void) +{ + this->mSystemName = "hodgkin_huxley_squid_axon_model_1952_modified"; + this->mFreeVariableName = "time"; + this->mFreeVariableUnits = "millisecond"; + + // rY[0]: + this->mVariableNames.push_back("membrane_voltage"); + this->mVariableUnits.push_back("millivolt"); + this->mInitialConditions.push_back(-75.0); + + // rY[1]: + this->mVariableNames.push_back("sodium_channel_m_gate__m"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.05); + + // rY[2]: + this->mVariableNames.push_back("sodium_channel_h_gate__h"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.6); + + // rY[3]: + this->mVariableNames.push_back("potassium_channel_n_gate__n"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.325); + + // mParameters[0]: + this->mParameterNames.push_back("membrane_capacitance"); + this->mParameterUnits.push_back("microF_per_cm2"); + + // mParameters[1]: + this->mParameterNames.push_back("membrane_fast_sodium_current_conductance"); + this->mParameterUnits.push_back("milliS_per_cm2"); + + // mParameters[2]: + this->mParameterNames.push_back("membrane_leakage_current_conductance"); + this->mParameterUnits.push_back("milliS_per_cm2"); + + // mParameters[3]: + this->mParameterNames.push_back("membrane_potassium_current_conductance"); + this->mParameterUnits.push_back("milliS_per_cm2"); + + // Derived Quantity index [0]: + this->mDerivedQuantityNames.push_back("membrane_fast_sodium_current"); + this->mDerivedQuantityUnits.push_back("microA_per_cm2"); + + // Derived Quantity index [1]: + this->mDerivedQuantityNames.push_back("membrane_leakage_current"); + this->mDerivedQuantityUnits.push_back("microA_per_cm2"); + + // Derived Quantity index [2]: + this->mDerivedQuantityNames.push_back("membrane_potassium_current"); + this->mDerivedQuantityUnits.push_back("microA_per_cm2"); + + // Derived Quantity index [3]: + this->mDerivedQuantityNames.push_back("membrane_stimulus_current"); + this->mDerivedQuantityUnits.push_back("microA_per_cm2"); + + // Derived Quantity index [4]: + this->mDerivedQuantityNames.push_back("time"); + this->mDerivedQuantityUnits.push_back("millisecond"); + + this->mInitialised = true; +} + +// Serialization for Boost >= 1.36 +#include "SerializationExportWrapperForCpp.hpp" +CHASTE_CLASS_EXPORT(Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLGRL2) + diff --git a/chaste_codegen/tests/numerical/baseline/GRL2/hodgkin_huxley_squid_axon_model_1952_modified.hpp b/chaste_codegen/tests/numerical/baseline/GRL2/hodgkin_huxley_squid_axon_model_1952_modified.hpp new file mode 100644 index 00000000..e9ed236c --- /dev/null +++ b/chaste_codegen/tests/numerical/baseline/GRL2/hodgkin_huxley_squid_axon_model_1952_modified.hpp @@ -0,0 +1,94 @@ +#ifndef CELLHODGKIN_HUXLEY_SQUID_AXON_MODEL_1952_MODIFIEDFROMCELLMLGRL2_HPP_ +#define CELLHODGKIN_HUXLEY_SQUID_AXON_MODEL_1952_MODIFIEDFROMCELLMLGRL2_HPP_ + +//! @file +//! +//! This source file was generated from CellML by chaste_codegen version (version omitted as unimportant) +//! +//! Model: hodgkin_huxley_squid_axon_model_1952_modified +//! +//! Processed by chaste_codegen: https://github.com/ModellingWebLab/chaste-codegen +//! (translator: chaste_codegen, model type: GeneralizedRushLarsenSecondOrder) +//! on (date omitted as unimportant) +//! +//! + +#include "ChasteSerialization.hpp" +#include +#include "AbstractStimulusFunction.hpp" +#include "AbstractGeneralizedRushLarsenCardiacCell.hpp" + +class Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLGRL2 : public AbstractGeneralizedRushLarsenCardiacCell +{ + friend class boost::serialization::access; + template + void serialize(Archive & archive, const unsigned int version) + { + archive & boost::serialization::base_object(*this); + + } + + // + // Settable parameters and readable variables + // + + +private: +const bool is_concentration[4] = {false, false, false, false}; +const bool is_probability[4] = {false, false, false, false}; +public: + + boost::shared_ptr UseCellMLDefaultStimulus(); + Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLGRL2(boost::shared_ptr /* unused; should be empty */, boost::shared_ptr pIntracellularStimulus); + ~Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLGRL2(); + void VerifyStateVariables(); + double GetIIonic(const std::vector* pStateVariables=NULL); + void UpdateTransmembranePotential(double var_chaste_interface__environment__time); + void ComputeOneStepExceptVoltage(double var_chaste_interface__environment__time); + + double EvaluateYDerivative0(double var_chaste_interface__environment__time, std::vector& rY); + double EvaluatePartialDerivative0(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative1(double var_chaste_interface__environment__time, std::vector& rY); + double EvaluatePartialDerivative1(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative2(double var_chaste_interface__environment__time, std::vector& rY); + double EvaluatePartialDerivative2(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative3(double var_chaste_interface__environment__time, std::vector& rY); + double EvaluatePartialDerivative3(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical=false); + + std::vector ComputeDerivedQuantities(double var_chaste_interface__environment__time, const std::vector & rY); +}; + +// Needs to be included last +#include "SerializationExportWrapper.hpp" +CHASTE_CLASS_EXPORT(Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLGRL2) + +namespace boost +{ + namespace serialization + { + template + inline void save_construct_data( + Archive & ar, const Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLGRL2 * t, const unsigned int fileVersion) + { + const boost::shared_ptr p_solver = t->GetSolver(); + const boost::shared_ptr p_stimulus = t->GetStimulusFunction(); + ar << p_solver; + ar << p_stimulus; + } + + template + inline void load_construct_data( + Archive & ar, Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLGRL2 * t, const unsigned int fileVersion) + { + boost::shared_ptr p_solver; + boost::shared_ptr p_stimulus; + ar >> p_solver; + ar >> p_stimulus; + ::new(t)Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLGRL2(p_solver, p_stimulus); + } + + } + +} + +#endif // CELLHODGKIN_HUXLEY_SQUID_AXON_MODEL_1952_MODIFIEDFROMCELLMLGRL2_HPP_ \ No newline at end of file diff --git a/chaste_codegen/tests/numerical/baseline/GRL2Opt/dynamic_viswanathan_model_1999_epi.cpp b/chaste_codegen/tests/numerical/baseline/GRL2Opt/dynamic_viswanathan_model_1999_epi.cpp new file mode 100644 index 00000000..55b7c46e --- /dev/null +++ b/chaste_codegen/tests/numerical/baseline/GRL2Opt/dynamic_viswanathan_model_1999_epi.cpp @@ -0,0 +1,3455 @@ +//! @file +//! +//! This source file was generated from CellML by chaste_codegen version (version omitted as unimportant) +//! +//! Model: viswanathan_model_1999_epi +//! +//! Processed by chaste_codegen: https://github.com/ModellingWebLab/chaste-codegen +//! (translator: chaste_codegen, model type: GeneralizedRushLarsenSecondOrderOpt) +//! on (date omitted as unimportant) +//! +//! + +#include "dynamic_viswanathan_model_1999_epi.hpp" +#include +#include +#include +#include +#include "Exception.hpp" +#include "OdeSystemInformation.hpp" +#include "RegularStimulus.hpp" +#include "HeartConfig.hpp" +#include "IsNan.hpp" +#include "MathsCustomFunctions.hpp" + +#include "ModelFactory.hpp" + +AbstractGeneralizedRushLarsenCardiacCell* Dynamicviswanathan_model_1999_epiFromCellMLGRL2Opt::CreateMethod(boost::shared_ptr p_solver, boost::shared_ptr p_stimulus) { + return new Dynamicviswanathan_model_1999_epiFromCellMLGRL2Opt(p_solver, p_stimulus); +} + +bool Dynamicviswanathan_model_1999_epiFromCellMLGRL2Opt::registered = ModelFactory::Register("dynamic_viswanathan_model_1999_epi", "GeneralizedRushLarsenSecondOrderOpt", (ModelFactory::TCreateMethod)Dynamicviswanathan_model_1999_epiFromCellMLGRL2Opt::CreateMethod); + +class Dynamicviswanathan_model_1999_epiFromCellMLGRL2Opt_LookupTables : public AbstractLookupTableCollection +{ +public: + static Dynamicviswanathan_model_1999_epiFromCellMLGRL2Opt_LookupTables* Instance() + { + if (mpInstance.get() == NULL) + { + mpInstance.reset(new Dynamicviswanathan_model_1999_epiFromCellMLGRL2Opt_LookupTables); + } + return mpInstance.get(); + } + + void FreeMemory() + { + + if (_lookup_table_0) + { + delete[] _lookup_table_0; + _lookup_table_0 = NULL; + } + + mNeedsRegeneration.assign(mNeedsRegeneration.size(), true); + } + + // Row lookup methods + // using linear-interpolation + + double* _lookup_0_row(unsigned i, double _factor_) + { + for (unsigned j=0; j<30; j++) + { + const double y1 = _lookup_table_0[i][j]; + const double y2 = _lookup_table_0[i+1][j]; + _lookup_table_0_row[j] = y1 + (y2-y1)*_factor_; + } + return _lookup_table_0_row; + } + + + const double * IndexTable0(double var_chaste_interface__membrane__V) + { + const double _offset_0 = var_chaste_interface__membrane__V - mTableMins[0]; + const double _offset_0_over_table_step = _offset_0 * mTableStepInverses[0]; + const unsigned _table_index_0 = (unsigned)(_offset_0_over_table_step); + const double _factor_0 = _offset_0_over_table_step - _table_index_0; + const double* const _lt_0_row = Dynamicviswanathan_model_1999_epiFromCellMLGRL2Opt_LookupTables::Instance()->_lookup_0_row(_table_index_0, _factor_0); + return _lt_0_row; + } + + +// LCOV_EXCL_START + bool CheckIndex0(double& var_chaste_interface__membrane__V) + { + bool _oob_0 = false; + if (var_chaste_interface__membrane__V>mTableMaxs[0] || var_chaste_interface__membrane__V= 2){ + EXCEPTION("Lookup table 15 at ["<= 2){ + EXCEPTION("Lookup table 16 at ["<= 2){ + EXCEPTION("Lookup table 17 at ["<= 2){ + EXCEPTION("Lookup table 18 at ["<= 1.0000000000000001e-5) ? (320 * (47.130000000000003 + var_chaste_interface__membrane__V) / (1 - exp(-4.7130000000000001 - 0.10000000000000001 * var_chaste_interface__membrane__V))) : (3200)); + }; + const double var_chaste_interface__membrane__V = mTableMins[0] + i*mTableSteps[0]; + double val = f(var_chaste_interface__membrane__V); + //Expressions which are part of a piecewise could be inf / nan, this is generally accptable, due to the piecewise, however occasionally interpolation of the lookup table from a nan/inf version can give problems. + //To avoid this values stored in the table are intrpolated. Occurances of this to at most 2 per expression. + if (!std::isfinite(val) && _lookup_table_0_num_misshit_piecewise[19] < 2){ + double left = f(var_chaste_interface__membrane__V - mTableSteps[0]); + double right = f(var_chaste_interface__membrane__V + mTableSteps[0]); + val = (left + right) / 2.0; + // count and limit number of misshits + _lookup_table_0_num_misshit_piecewise[19] +=1; + } + else if (!std::isfinite(val) && _lookup_table_0_num_misshit_piecewise[19] >= 2){ + EXCEPTION("Lookup table 19 at ["< mpInstance; + + // Row lookup methods memory + double _lookup_table_0_row[30]; + + // Lookup tables + double (*_lookup_table_0)[30]; + int _lookup_table_0_num_misshit_piecewise[30] = {0}; + +}; + +std::shared_ptr Dynamicviswanathan_model_1999_epiFromCellMLGRL2Opt_LookupTables::mpInstance; + + + boost::shared_ptr Dynamicviswanathan_model_1999_epiFromCellMLGRL2Opt::UseCellMLDefaultStimulus() + { + // Use the default stimulus specified by CellML metadata + const double var_chaste_interface__membrane__stim_amplitude_converted = -25.5 * HeartConfig::Instance()->GetCapacitance(); // uA_per_cm2 + const double var_chaste_interface__membrane__stim_duration_converted = 2; // millisecond + const double var_chaste_interface__membrane__stim_period_converted = 1000; // millisecond + const double var_chaste_interface__membrane__stim_start_converted = 100; // millisecond + boost::shared_ptr p_cellml_stim(new RegularStimulus( + -fabs(var_chaste_interface__membrane__stim_amplitude_converted), + var_chaste_interface__membrane__stim_duration_converted, + var_chaste_interface__membrane__stim_period_converted, + var_chaste_interface__membrane__stim_start_converted + )); + mpIntracellularStimulus = p_cellml_stim; + return p_cellml_stim; + } + double Dynamicviswanathan_model_1999_epiFromCellMLGRL2Opt::GetIntracellularCalciumConcentration() + { + return mStateVariables[1]; + } + Dynamicviswanathan_model_1999_epiFromCellMLGRL2Opt::Dynamicviswanathan_model_1999_epiFromCellMLGRL2Opt(boost::shared_ptr /* unused; should be empty */, boost::shared_ptr pIntracellularStimulus) + : AbstractGeneralizedRushLarsenCardiacCell( + 25, + 0, + pIntracellularStimulus) + { + // Time units: millisecond + // + this->mpSystemInfo = OdeSystemInformation::Instance(); + Init(); + + // We have a default stimulus specified in the CellML file metadata + this->mHasDefaultStimulusFromCellML = true; + + this->mParameters[0] = 1.8; // (var_calcium_dynamics__Cao) [millimolar] + this->mParameters[1] = 4.5; // (var_ionic_concentrations__Ko) [millimolar] + this->mParameters[2] = 132; // (var_ionic_concentrations__Nao) [millimolar] + this->mParameters[3] = 0.001; // (var_membrane__Cm) [microF] + this->mParameters[4] = 16; // (var_fast_sodium_current__g_Na) [milliS_per_microF] + this->mParameters[5] = 0.75; // (var_time_independent_potassium_current__g_K1_max) [milliS_per_cm2] + this->mParameters[6] = 0.02614; // (var_rapid_delayed_rectifier_potassium_current__g_Kr_max) [milliS_per_cm2] + } + + Dynamicviswanathan_model_1999_epiFromCellMLGRL2Opt::~Dynamicviswanathan_model_1999_epiFromCellMLGRL2Opt() + { + } + + AbstractLookupTableCollection* Dynamicviswanathan_model_1999_epiFromCellMLGRL2Opt::GetLookupTableCollection() + { + return Dynamicviswanathan_model_1999_epiFromCellMLGRL2Opt_LookupTables::Instance(); + } + + void Dynamicviswanathan_model_1999_epiFromCellMLGRL2Opt::VerifyStateVariables() + { + std::vector& rY = rGetStateVariables(); + std::string error_message = ""; + + for (unsigned i=0; i < 25; i++) + { + if(std::isnan(rY[i])) + { + error_message += "State variable " + this->rGetStateVariableNames()[i] + " is not a number\n"; + } + if(std::isinf(rY[i])) + { + error_message += "State variable " + this->rGetStateVariableNames()[i] + " has become INFINITE\n"; + } + if(this->is_concentration[i] && rY[i] < 0) + { + error_message += "Concentration " + this->rGetStateVariableNames()[i] + " below 0\n"; + } + if(this->is_probability[i] && rY[i] < 0) + { + error_message += "Probability " + this->rGetStateVariableNames()[i] + " below 0\n"; + } + if(this->is_probability[i] && rY[i] > 1) + { + error_message += "Probability " + this->rGetStateVariableNames()[i] + " above 1\n"; + } + } + if (error_message != ""){ + EXCEPTION(DumpState(error_message)); + } + } + + double Dynamicviswanathan_model_1999_epiFromCellMLGRL2Opt::GetIIonic(const std::vector* pStateVariables) + { + // For state variable interpolation (SVI) we read in interpolated state variables, + // otherwise for ionic current interpolation (ICI) we use the state variables of this model (node). + if (!pStateVariables) pStateVariables = &rGetStateVariables(); + const std::vector& rY = *pStateVariables; + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -88.984 + double var_chaste_interface__calcium_dynamics__Cai = rY[1]; + // Units: millimolar; Initial value: 0.00035237 + double var_chaste_interface__fast_sodium_current_m_gate__m = rY[2]; + // Units: dimensionless; Initial value: 0.00079287 + double var_chaste_interface__fast_sodium_current_h_gate__h = rY[3]; + // Units: dimensionless; Initial value: 0.9938 + double var_chaste_interface__fast_sodium_current_j_gate__j = rY[4]; + // Units: dimensionless; Initial value: 0.99573 + double var_chaste_interface__L_type_Ca_channel_d_gate__d = rY[5]; + // Units: dimensionless; Initial value: 3.18355e-06 + double var_chaste_interface__L_type_Ca_channel_f_gate__f = rY[6]; + // Units: dimensionless; Initial value: 0.9974388 + double var_chaste_interface__T_type_Ca_channel_b_gate__b = rY[7]; + // Units: dimensionless; Initial value: 0.000967785 + double var_chaste_interface__T_type_Ca_channel_g_gate__g = rY[8]; + // Units: dimensionless; Initial value: 0.95331988 + double var_chaste_interface__rapid_delayed_rectifier_potassium_current_xr_gate__xr = rY[9]; + // Units: dimensionless; Initial value: 0.00032151644 + double var_chaste_interface__slow_delayed_rectifier_potassium_current_xs1_gate__xs1 = rY[10]; + // Units: dimensionless; Initial value: 0.0272635 + double var_chaste_interface__slow_delayed_rectifier_potassium_current_xs2_gate__xs2 = rY[11]; + // Units: dimensionless; Initial value: 0.0631269 + double var_chaste_interface__ionic_concentrations__Nai = rY[23]; + // Units: millimolar; Initial value: 15.6748357 + double var_chaste_interface__ionic_concentrations__Ki = rY[24]; + // Units: millimolar; Initial value: 137.6244 + + // Lookup table indexing + const bool _oob_0 = Dynamicviswanathan_model_1999_epiFromCellMLGRL2Opt_LookupTables::Instance()->CheckIndex0(var_chaste_interface__membrane__V); +// LCOV_EXCL_START + if (_oob_0) + EXCEPTION(DumpState("membrane_voltage outside lookup table range", rY)); +// LCOV_EXCL_STOP + const double* const _lt_0_row = Dynamicviswanathan_model_1999_epiFromCellMLGRL2Opt_LookupTables::Instance()->IndexTable0(var_chaste_interface__membrane__V); + + const double var_L_type_Ca_channel_f_Ca_gate__f_Ca = 1 / (1 + 1666.6666666666667 * var_chaste_interface__calcium_dynamics__Cai); // dimensionless + const double var_calcium_background_current__E_Ca = 13.356169352749133 * log(mParameters[0] / var_chaste_interface__calcium_dynamics__Cai); // millivolt + const double var_fast_sodium_current__E_Na = 26.712338705498265 * log(mParameters[2] / var_chaste_interface__ionic_concentrations__Nai); // millivolt + const double var_L_type_Ca_channel__i_Ca_L_converted = (7.8019226357407252 * (-0.34100000000000003 * mParameters[0] + var_chaste_interface__calcium_dynamics__Cai * _lt_0_row[0]) * var_chaste_interface__L_type_Ca_channel_d_gate__d * var_L_type_Ca_channel_f_Ca_gate__f_Ca * var_chaste_interface__L_type_Ca_channel_f_gate__f * var_chaste_interface__membrane__V / (_lt_0_row[1]) + 0.0024381008236689767 * (-0.75 * mParameters[2] + 0.75 * var_chaste_interface__ionic_concentrations__Nai * _lt_0_row[2]) * var_chaste_interface__L_type_Ca_channel_d_gate__d * var_L_type_Ca_channel_f_Ca_gate__f_Ca * var_chaste_interface__L_type_Ca_channel_f_gate__f * var_chaste_interface__membrane__V / (_lt_0_row[3]) + 0.00069711623550831479 * (-0.75 * mParameters[1] + 0.75 * var_chaste_interface__ionic_concentrations__Ki * _lt_0_row[2]) * var_chaste_interface__L_type_Ca_channel_d_gate__d * var_L_type_Ca_channel_f_Ca_gate__f_Ca * var_chaste_interface__L_type_Ca_channel_f_gate__f * var_chaste_interface__membrane__V / (_lt_0_row[3])) * HeartConfig::Instance()->GetCapacitance(); // uA_per_cm2 + const double var_Na_Ca_exchanger__i_NaCa = 0.002 * (pow(var_chaste_interface__ionic_concentrations__Nai, 3) * mParameters[0] * _lt_0_row[4] - pow(mParameters[2], 3) * var_chaste_interface__calcium_dynamics__Cai * _lt_0_row[5]) / ((1 + 144.92753623188406 * var_chaste_interface__calcium_dynamics__Cai) * (1 + 0.001 * pow(var_chaste_interface__ionic_concentrations__Nai, 3) * mParameters[0] + 0.001 * pow(mParameters[2], 3) * var_chaste_interface__calcium_dynamics__Cai)); // microA_per_microF + const double var_T_type_Ca_channel__i_Ca_T = 0.050000000000000003 * pow(var_chaste_interface__T_type_Ca_channel_b_gate__b, 2) * (-var_calcium_background_current__E_Ca + var_chaste_interface__membrane__V) * var_chaste_interface__T_type_Ca_channel_g_gate__g; // microA_per_microF + const double var_calcium_background_current__i_Ca_b = 0.003016 * var_chaste_interface__membrane__V - 0.003016 * var_calcium_background_current__E_Ca; // microA_per_microF + const double var_fast_sodium_current__i_Na_converted = pow(var_chaste_interface__fast_sodium_current_m_gate__m, 3) * (-var_fast_sodium_current__E_Na + var_chaste_interface__membrane__V) * HeartConfig::Instance()->GetCapacitance() * mParameters[4] * var_chaste_interface__fast_sodium_current_h_gate__h * var_chaste_interface__fast_sodium_current_j_gate__j; // uA_per_cm2 + const double var_non_specific_calcium_activated_current__P_ns_Ca = 0; // cm_per_second + const double var_non_specific_calcium_activated_current__i_ns_Ca = 3612.0012202503358 * (-0.75 * mParameters[1] + 0.75 * var_chaste_interface__ionic_concentrations__Ki * _lt_0_row[2]) * var_chaste_interface__membrane__V * var_non_specific_calcium_activated_current__P_ns_Ca / ((1 + 1.7279999999999996e-9 / pow(var_chaste_interface__calcium_dynamics__Cai, 3)) * (_lt_0_row[3])) + 3612.0012202503358 * (-0.75 * mParameters[2] + 0.75 * var_chaste_interface__ionic_concentrations__Nai * _lt_0_row[2]) * var_chaste_interface__membrane__V * var_non_specific_calcium_activated_current__P_ns_Ca / ((1 + 1.7279999999999996e-9 / pow(var_chaste_interface__calcium_dynamics__Cai, 3)) * (_lt_0_row[3])); // microA_per_microF + const double var_sarcolemmal_calcium_pump__i_p_Ca = 1.1499999999999999 * var_chaste_interface__calcium_dynamics__Cai / (0.00050000000000000001 + var_chaste_interface__calcium_dynamics__Cai); // microA_per_microF + const double var_slow_delayed_rectifier_potassium_current__i_Ks = (0.433 + 0.25979999999999998 / (1 + 6.4818210260626455e-7 * pow((1 / var_chaste_interface__calcium_dynamics__Cai), 1.3999999999999999))) * (-26.712338705498265 * log((0.018329999999999999 * mParameters[2] + mParameters[1]) / (0.018329999999999999 * var_chaste_interface__ionic_concentrations__Nai + var_chaste_interface__ionic_concentrations__Ki)) + var_chaste_interface__membrane__V) * var_chaste_interface__slow_delayed_rectifier_potassium_current_xs1_gate__xs1 * var_chaste_interface__slow_delayed_rectifier_potassium_current_xs2_gate__xs2; // microA_per_microF + const double var_sodium_background_current__i_Na_b = 0.0040000000000000001 * var_chaste_interface__membrane__V - 0.0040000000000000001 * var_fast_sodium_current__E_Na; // microA_per_microF + const double var_sodium_potassium_pump__i_NaK = 2 * mParameters[1] / ((1 + 100 / pow(var_chaste_interface__ionic_concentrations__Nai, 2)) * (1.5 + mParameters[1]) * (1 + _lt_0_row[7] + 0.036499999999999998 * (-0.14285714285714285 + 0.14285714285714285 * exp(0.01485884101040119 * mParameters[2])) * _lt_0_row[6])); // microA_per_microF + const double var_time_independent_potassium_current__E_K = 26.712338705498265 * log(mParameters[1] / var_chaste_interface__ionic_concentrations__Ki); // millivolt + const double var_ATP_sensitive_potassium_current__i_K_ATP = 1.921898339896919e-8 * pow(mParameters[1], 0.23999999999999999) * (-var_time_independent_potassium_current__E_K + var_chaste_interface__membrane__V); // microA_per_microF + const double var_plateau_potassium_current__i_Kp = 0.0055199999999999997 * (-var_time_independent_potassium_current__E_K + var_chaste_interface__membrane__V) / (_lt_0_row[8]); // microA_per_microF + const double var_rapid_delayed_rectifier_potassium_current__i_Kr_converted = 0.43033148291193518 * sqrt(mParameters[1]) * (-var_time_independent_potassium_current__E_K + var_chaste_interface__membrane__V) * HeartConfig::Instance()->GetCapacitance() * mParameters[6] * var_chaste_interface__rapid_delayed_rectifier_potassium_current_xr_gate__xr / (_lt_0_row[9]); // uA_per_cm2 + const double var_time_independent_potassium_current__i_K1_converted = 438.93811257017387 * sqrt(mParameters[1]) * (-var_time_independent_potassium_current__E_K + var_chaste_interface__membrane__V) * HeartConfig::Instance()->GetCapacitance() * mParameters[5] / ((1 + exp(-14.1227775 + 0.23849999999999999 * var_chaste_interface__membrane__V - 0.23849999999999999 * var_time_independent_potassium_current__E_K)) * (1020 / (1 + exp(-14.1227775 + 0.23849999999999999 * var_chaste_interface__membrane__V - 0.23849999999999999 * var_time_independent_potassium_current__E_K)) + 1000 * (0.49124000000000001 * exp(0.43983232 + 0.080320000000000003 * var_chaste_interface__membrane__V - 0.080320000000000003 * var_time_independent_potassium_current__E_K) + exp(-36.698642499999998 + 0.061749999999999999 * var_chaste_interface__membrane__V - 0.061749999999999999 * var_time_independent_potassium_current__E_K)) / (1 + exp(-2.4444678999999998 + 0.51429999999999998 * var_time_independent_potassium_current__E_K - 0.51429999999999998 * var_chaste_interface__membrane__V)))); // uA_per_cm2 + const double var_transient_outward_current__i_to = 0; // microA_per_microF + const double var_chaste_interface__i_ionic = -var_L_type_Ca_channel__i_Ca_L_converted - var_fast_sodium_current__i_Na_converted - var_rapid_delayed_rectifier_potassium_current__i_Kr_converted - var_time_independent_potassium_current__i_K1_converted - HeartConfig::Instance()->GetCapacitance() * var_ATP_sensitive_potassium_current__i_K_ATP - HeartConfig::Instance()->GetCapacitance() * var_Na_Ca_exchanger__i_NaCa - HeartConfig::Instance()->GetCapacitance() * var_T_type_Ca_channel__i_Ca_T - HeartConfig::Instance()->GetCapacitance() * var_calcium_background_current__i_Ca_b - HeartConfig::Instance()->GetCapacitance() * var_non_specific_calcium_activated_current__i_ns_Ca - HeartConfig::Instance()->GetCapacitance() * var_plateau_potassium_current__i_Kp - HeartConfig::Instance()->GetCapacitance() * var_sarcolemmal_calcium_pump__i_p_Ca - HeartConfig::Instance()->GetCapacitance() * var_slow_delayed_rectifier_potassium_current__i_Ks - HeartConfig::Instance()->GetCapacitance() * var_sodium_background_current__i_Na_b - HeartConfig::Instance()->GetCapacitance() * var_sodium_potassium_pump__i_NaK - HeartConfig::Instance()->GetCapacitance() * var_transient_outward_current__i_to; // uA_per_cm2 + + const double i_ionic = var_chaste_interface__i_ionic; + EXCEPT_IF_NOT(!std::isnan(i_ionic)); + return i_ionic; + } + + void Dynamicviswanathan_model_1999_epiFromCellMLGRL2Opt::UpdateTransmembranePotential(double var_chaste_interface__environment__time_converted) + { + std::vector& rY = rGetStateVariables(); + const unsigned v_index = GetVoltageIndex(); + const double delta = 1e-8; + const double yinit = rY[v_index]; + + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -88.984 + double var_chaste_interface__calcium_dynamics__Cai = rY[1]; + // Units: millimolar; Initial value: 0.00035237 + double var_chaste_interface__fast_sodium_current_m_gate__m = rY[2]; + // Units: dimensionless; Initial value: 0.00079287 + double var_chaste_interface__fast_sodium_current_h_gate__h = rY[3]; + // Units: dimensionless; Initial value: 0.9938 + double var_chaste_interface__fast_sodium_current_j_gate__j = rY[4]; + // Units: dimensionless; Initial value: 0.99573 + double var_chaste_interface__L_type_Ca_channel_d_gate__d = rY[5]; + // Units: dimensionless; Initial value: 3.18355e-06 + double var_chaste_interface__L_type_Ca_channel_f_gate__f = rY[6]; + // Units: dimensionless; Initial value: 0.9974388 + double var_chaste_interface__T_type_Ca_channel_b_gate__b = rY[7]; + // Units: dimensionless; Initial value: 0.000967785 + double var_chaste_interface__T_type_Ca_channel_g_gate__g = rY[8]; + // Units: dimensionless; Initial value: 0.95331988 + double var_chaste_interface__rapid_delayed_rectifier_potassium_current_xr_gate__xr = rY[9]; + // Units: dimensionless; Initial value: 0.00032151644 + double var_chaste_interface__slow_delayed_rectifier_potassium_current_xs1_gate__xs1 = rY[10]; + // Units: dimensionless; Initial value: 0.0272635 + double var_chaste_interface__slow_delayed_rectifier_potassium_current_xs2_gate__xs2 = rY[11]; + // Units: dimensionless; Initial value: 0.0631269 + double var_chaste_interface__ionic_concentrations__Nai = rY[23]; + // Units: millimolar; Initial value: 15.6748357 + double var_chaste_interface__ionic_concentrations__Ki = rY[24]; + // Units: millimolar; Initial value: 137.6244 + + + // Lookup table indexing + const bool _oob_0 = Dynamicviswanathan_model_1999_epiFromCellMLGRL2Opt_LookupTables::Instance()->CheckIndex0(var_chaste_interface__membrane__V); +// LCOV_EXCL_START + if (_oob_0) + EXCEPTION(DumpState("membrane_voltage outside lookup table range", rY , var_chaste_interface__environment__time_converted)); +// LCOV_EXCL_STOP + const double* const _lt_0_row = Dynamicviswanathan_model_1999_epiFromCellMLGRL2Opt_LookupTables::Instance()->IndexTable0(var_chaste_interface__membrane__V); + + // Mathematics + double d_dt_chaste_interface_var_membrane__V; + const double var_L_type_Ca_channel_f_Ca_gate__f_Ca = 1 / (1 + 1666.6666666666667 * var_chaste_interface__calcium_dynamics__Cai); // dimensionless + const double var_calcium_background_current__E_Ca = 13.356169352749133 * log(mParameters[0] / var_chaste_interface__calcium_dynamics__Cai); // millivolt + const double var_fast_sodium_current__E_Na = 26.712338705498265 * log(mParameters[2] / var_chaste_interface__ionic_concentrations__Nai); // millivolt + const double var_L_type_Ca_channel__i_CaCa = 7.8019226357407252 * (-0.34100000000000003 * mParameters[0] + var_chaste_interface__calcium_dynamics__Cai * _lt_0_row[0]) * var_chaste_interface__L_type_Ca_channel_d_gate__d * var_L_type_Ca_channel_f_Ca_gate__f_Ca * var_chaste_interface__L_type_Ca_channel_f_gate__f * var_chaste_interface__membrane__V / (_lt_0_row[1]); // microA_per_microF + const double var_L_type_Ca_channel__i_CaK = 0.00069711623550831479 * (-0.75 * mParameters[1] + 0.75 * var_chaste_interface__ionic_concentrations__Ki * _lt_0_row[2]) * var_chaste_interface__L_type_Ca_channel_d_gate__d * var_L_type_Ca_channel_f_Ca_gate__f_Ca * var_chaste_interface__L_type_Ca_channel_f_gate__f * var_chaste_interface__membrane__V / (_lt_0_row[3]); // microA_per_microF + const double var_L_type_Ca_channel__i_CaNa = 0.0024381008236689767 * (-0.75 * mParameters[2] + 0.75 * var_chaste_interface__ionic_concentrations__Nai * _lt_0_row[2]) * var_chaste_interface__L_type_Ca_channel_d_gate__d * var_L_type_Ca_channel_f_Ca_gate__f_Ca * var_chaste_interface__L_type_Ca_channel_f_gate__f * var_chaste_interface__membrane__V / (_lt_0_row[3]); // microA_per_microF + const double var_Na_Ca_exchanger__i_NaCa = 0.002 * (pow(var_chaste_interface__ionic_concentrations__Nai, 3) * mParameters[0] * _lt_0_row[4] - pow(mParameters[2], 3) * var_chaste_interface__calcium_dynamics__Cai * _lt_0_row[5]) / ((1 + 144.92753623188406 * var_chaste_interface__calcium_dynamics__Cai) * (1 + 0.001 * pow(var_chaste_interface__ionic_concentrations__Nai, 3) * mParameters[0] + 0.001 * pow(mParameters[2], 3) * var_chaste_interface__calcium_dynamics__Cai)); // microA_per_microF + const double var_T_type_Ca_channel__i_Ca_T = 0.050000000000000003 * pow(var_chaste_interface__T_type_Ca_channel_b_gate__b, 2) * (-var_calcium_background_current__E_Ca + var_chaste_interface__membrane__V) * var_chaste_interface__T_type_Ca_channel_g_gate__g; // microA_per_microF + const double var_calcium_background_current__i_Ca_b = 0.003016 * var_chaste_interface__membrane__V - 0.003016 * var_calcium_background_current__E_Ca; // microA_per_microF + const double var_fast_sodium_current__i_Na = pow(var_chaste_interface__fast_sodium_current_m_gate__m, 3) * (-var_fast_sodium_current__E_Na + var_chaste_interface__membrane__V) * mParameters[4] * var_chaste_interface__fast_sodium_current_h_gate__h * var_chaste_interface__fast_sodium_current_j_gate__j; // microA_per_microF + const double var_non_specific_calcium_activated_current__P_ns_Ca = 0; // cm_per_second + const double var_non_specific_calcium_activated_current__i_ns_K = 3612.0012202503358 * (-0.75 * mParameters[1] + 0.75 * var_chaste_interface__ionic_concentrations__Ki * _lt_0_row[2]) * var_chaste_interface__membrane__V * var_non_specific_calcium_activated_current__P_ns_Ca / ((1 + 1.7279999999999996e-9 / pow(var_chaste_interface__calcium_dynamics__Cai, 3)) * (_lt_0_row[3])); // microA_per_microF + const double var_non_specific_calcium_activated_current__i_ns_Na = 3612.0012202503358 * (-0.75 * mParameters[2] + 0.75 * var_chaste_interface__ionic_concentrations__Nai * _lt_0_row[2]) * var_chaste_interface__membrane__V * var_non_specific_calcium_activated_current__P_ns_Ca / ((1 + 1.7279999999999996e-9 / pow(var_chaste_interface__calcium_dynamics__Cai, 3)) * (_lt_0_row[3])); // microA_per_microF + const double var_sarcolemmal_calcium_pump__i_p_Ca = 1.1499999999999999 * var_chaste_interface__calcium_dynamics__Cai / (0.00050000000000000001 + var_chaste_interface__calcium_dynamics__Cai); // microA_per_microF + const double var_slow_delayed_rectifier_potassium_current__i_Ks = (0.433 + 0.25979999999999998 / (1 + 6.4818210260626455e-7 * pow((1 / var_chaste_interface__calcium_dynamics__Cai), 1.3999999999999999))) * (-26.712338705498265 * log((0.018329999999999999 * mParameters[2] + mParameters[1]) / (0.018329999999999999 * var_chaste_interface__ionic_concentrations__Nai + var_chaste_interface__ionic_concentrations__Ki)) + var_chaste_interface__membrane__V) * var_chaste_interface__slow_delayed_rectifier_potassium_current_xs1_gate__xs1 * var_chaste_interface__slow_delayed_rectifier_potassium_current_xs2_gate__xs2; // microA_per_microF + const double var_sodium_background_current__i_Na_b = 0.0040000000000000001 * var_chaste_interface__membrane__V - 0.0040000000000000001 * var_fast_sodium_current__E_Na; // microA_per_microF + const double var_sodium_potassium_pump__i_NaK = 2 * mParameters[1] / ((1 + 100 / pow(var_chaste_interface__ionic_concentrations__Nai, 2)) * (1.5 + mParameters[1]) * (1 + _lt_0_row[7] + 0.036499999999999998 * (-0.14285714285714285 + 0.14285714285714285 * exp(0.01485884101040119 * mParameters[2])) * _lt_0_row[6])); // microA_per_microF + const double var_time_independent_potassium_current__E_K = 26.712338705498265 * log(mParameters[1] / var_chaste_interface__ionic_concentrations__Ki); // millivolt + const double var_ATP_sensitive_potassium_current__i_K_ATP = 1.921898339896919e-8 * pow(mParameters[1], 0.23999999999999999) * (-var_time_independent_potassium_current__E_K + var_chaste_interface__membrane__V); // microA_per_microF + const double var_plateau_potassium_current__i_Kp = 0.0055199999999999997 * (-var_time_independent_potassium_current__E_K + var_chaste_interface__membrane__V) / (_lt_0_row[8]); // microA_per_microF + const double var_rapid_delayed_rectifier_potassium_current__i_Kr = 0.43033148291193518 * sqrt(mParameters[1]) * (-var_time_independent_potassium_current__E_K + var_chaste_interface__membrane__V) * mParameters[6] * var_chaste_interface__rapid_delayed_rectifier_potassium_current_xr_gate__xr / (_lt_0_row[9]); // microA_per_microF + const double var_time_independent_potassium_current__i_K1 = 438.93811257017387 * sqrt(mParameters[1]) * (-var_time_independent_potassium_current__E_K + var_chaste_interface__membrane__V) * mParameters[5] / ((1 + exp(-14.1227775 + 0.23849999999999999 * var_chaste_interface__membrane__V - 0.23849999999999999 * var_time_independent_potassium_current__E_K)) * (1020 / (1 + exp(-14.1227775 + 0.23849999999999999 * var_chaste_interface__membrane__V - 0.23849999999999999 * var_time_independent_potassium_current__E_K)) + 1000 * (0.49124000000000001 * exp(0.43983232 + 0.080320000000000003 * var_chaste_interface__membrane__V - 0.080320000000000003 * var_time_independent_potassium_current__E_K) + exp(-36.698642499999998 + 0.061749999999999999 * var_chaste_interface__membrane__V - 0.061749999999999999 * var_time_independent_potassium_current__E_K)) / (1 + exp(-2.4444678999999998 + 0.51429999999999998 * var_time_independent_potassium_current__E_K - 0.51429999999999998 * var_chaste_interface__membrane__V)))); // microA_per_microF + const double var_transient_outward_current__i_to = 0; // microA_per_microF + const double var_membrane__dVdt = -(GetIntracellularAreaStimulus(var_chaste_interface__environment__time_converted) / HeartConfig::Instance()->GetCapacitance() + var_ATP_sensitive_potassium_current__i_K_ATP + var_L_type_Ca_channel__i_CaCa + var_L_type_Ca_channel__i_CaK + var_L_type_Ca_channel__i_CaNa + var_Na_Ca_exchanger__i_NaCa + var_T_type_Ca_channel__i_Ca_T + var_calcium_background_current__i_Ca_b + var_fast_sodium_current__i_Na + var_non_specific_calcium_activated_current__i_ns_K + var_non_specific_calcium_activated_current__i_ns_Na + var_plateau_potassium_current__i_Kp + var_rapid_delayed_rectifier_potassium_current__i_Kr + var_sarcolemmal_calcium_pump__i_p_Ca + var_slow_delayed_rectifier_potassium_current__i_Ks + var_sodium_background_current__i_Na_b + var_sodium_potassium_pump__i_NaK + var_time_independent_potassium_current__i_K1 + var_transient_outward_current__i_to) / mParameters[3]; // dimensionless + d_dt_chaste_interface_var_membrane__V = 0.001 * var_membrane__dVdt; // millivolt / millisecond + + double evalF = d_dt_chaste_interface_var_membrane__V; + mEvalF[0] = d_dt_chaste_interface_var_membrane__V; + double partialF = EvaluatePartialDerivative0(var_chaste_interface__environment__time_converted, rY, delta, true); + if (fabs(partialF) < delta) + { + rY[v_index] += 0.5*evalF*mDt; + } + else + { + rY[v_index] += (evalF/partialF)*(exp(partialF*0.5*mDt)-1.0); + } + + rY[v_index] = yinit; + evalF = EvaluateYDerivative0(var_chaste_interface__environment__time_converted, rY); + mEvalF[0] = evalF; + partialF = EvaluatePartialDerivative0(var_chaste_interface__environment__time_converted, rY, delta, true); + if (fabs(partialF) < delta) + { + rY[v_index] = yinit + evalF*mDt; + } + else + { + rY[v_index] = yinit + (evalF/partialF)*(exp(partialF*mDt)-1.0); + } + } + + void Dynamicviswanathan_model_1999_epiFromCellMLGRL2Opt::ComputeOneStepExceptVoltage(double var_chaste_interface__environment__time_converted) + { + std::vector& rY = rGetStateVariables(); + const double delta=1e-8; + const unsigned size = GetNumberOfStateVariables(); + mYInit = rY; + double y_save; + + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -88.984 + double var_chaste_interface__calcium_dynamics__Cai = rY[1]; + // Units: millimolar; Initial value: 0.00035237 + double var_chaste_interface__fast_sodium_current_m_gate__m = rY[2]; + // Units: dimensionless; Initial value: 0.00079287 + double var_chaste_interface__fast_sodium_current_h_gate__h = rY[3]; + // Units: dimensionless; Initial value: 0.9938 + double var_chaste_interface__fast_sodium_current_j_gate__j = rY[4]; + // Units: dimensionless; Initial value: 0.99573 + double var_chaste_interface__L_type_Ca_channel_d_gate__d = rY[5]; + // Units: dimensionless; Initial value: 3.18355e-06 + double var_chaste_interface__L_type_Ca_channel_f_gate__f = rY[6]; + // Units: dimensionless; Initial value: 0.9974388 + double var_chaste_interface__T_type_Ca_channel_b_gate__b = rY[7]; + // Units: dimensionless; Initial value: 0.000967785 + double var_chaste_interface__T_type_Ca_channel_g_gate__g = rY[8]; + // Units: dimensionless; Initial value: 0.95331988 + double var_chaste_interface__rapid_delayed_rectifier_potassium_current_xr_gate__xr = rY[9]; + // Units: dimensionless; Initial value: 0.00032151644 + double var_chaste_interface__slow_delayed_rectifier_potassium_current_xs1_gate__xs1 = rY[10]; + // Units: dimensionless; Initial value: 0.0272635 + double var_chaste_interface__slow_delayed_rectifier_potassium_current_xs2_gate__xs2 = rY[11]; + // Units: dimensionless; Initial value: 0.0631269 + double var_chaste_interface__transient_outward_current_zdv_gate__zdv = rY[12]; + // Units: dimensionless; Initial value: 0.011528 + double var_chaste_interface__transient_outward_current_ydv_gate__ydv = rY[13]; + // Units: dimensionless; Initial value: 0.985232 + double var_chaste_interface__calcium_dynamics__Ca_JSR = rY[14]; + // Units: millimolar; Initial value: 0.817895 + double var_chaste_interface__calcium_dynamics__Ca_NSR = rY[15]; + // Units: millimolar; Initial value: 2.797668 + double var_chaste_interface__calcium_dynamics__APtrack = rY[16]; + // Units: dimensionless; Initial value: 3.814e-87 + double var_chaste_interface__calcium_dynamics__APtrack2 = rY[17]; + // Units: dimensionless; Initial value: 2.1084e-86 + double var_chaste_interface__calcium_dynamics__APtrack3 = rY[18]; + // Units: dimensionless; Initial value: 0.01925 + double var_chaste_interface__calcium_dynamics__Cainfluxtrack = rY[19]; + // Units: dimensionless; Initial value: 1.784e-87 + double var_chaste_interface__calcium_dynamics__OVRLDtrack = rY[20]; + // Units: dimensionless; Initial value: 0.0 + double var_chaste_interface__calcium_dynamics__OVRLDtrack2 = rY[21]; + // Units: dimensionless; Initial value: 0.0 + double var_chaste_interface__calcium_dynamics__OVRLDtrack3 = rY[22]; + // Units: dimensionless; Initial value: 0.0 + double var_chaste_interface__ionic_concentrations__Nai = rY[23]; + // Units: millimolar; Initial value: 15.6748357 + double var_chaste_interface__ionic_concentrations__Ki = rY[24]; + // Units: millimolar; Initial value: 137.6244 + + + // Lookup table indexing + const bool _oob_0 = Dynamicviswanathan_model_1999_epiFromCellMLGRL2Opt_LookupTables::Instance()->CheckIndex0(var_chaste_interface__membrane__V); +// LCOV_EXCL_START + if (_oob_0) + EXCEPTION(DumpState("membrane_voltage outside lookup table range", rY , var_chaste_interface__environment__time_converted)); +// LCOV_EXCL_STOP + const double* const _lt_0_row = Dynamicviswanathan_model_1999_epiFromCellMLGRL2Opt_LookupTables::Instance()->IndexTable0(var_chaste_interface__membrane__V); + + // Mathematics + double d_dt_chaste_interface_var_membrane__V; + const double d_dt_chaste_interface_var_calcium_dynamics__APtrack2 = 0.001 * (((var_chaste_interface__calcium_dynamics__APtrack > 0.17999999999999999) && (var_chaste_interface__calcium_dynamics__APtrack < 0.20000000000000001)) ? (100000 - 100500 * var_chaste_interface__calcium_dynamics__APtrack2) : (-500 * var_chaste_interface__calcium_dynamics__APtrack2)); // 1 / millisecond + const double d_dt_chaste_interface_var_calcium_dynamics__APtrack3 = 0.001 * (((var_chaste_interface__calcium_dynamics__APtrack > 0.17999999999999999) && (var_chaste_interface__calcium_dynamics__APtrack < 0.20000000000000001)) ? (100000 - 100500 * var_chaste_interface__calcium_dynamics__APtrack3) : (-10 * var_chaste_interface__calcium_dynamics__APtrack3)); // 1 / millisecond + const double var_L_type_Ca_channel_f_Ca_gate__f_Ca = 1 / (1 + 1666.6666666666667 * var_chaste_interface__calcium_dynamics__Cai); // dimensionless + const double d_dt_chaste_interface_var_calcium_dynamics__OVRLDtrack2 = 0.001 * (((var_chaste_interface__calcium_dynamics__OVRLDtrack > 0.97999999999999998) && (var_chaste_interface__calcium_dynamics__OVRLDtrack2 < 0.97999999999999998)) ? (50000 - 50000 * var_chaste_interface__calcium_dynamics__OVRLDtrack2) : (-500 * var_chaste_interface__calcium_dynamics__OVRLDtrack2)); // 1 / millisecond + const double d_dt_chaste_interface_var_calcium_dynamics__OVRLDtrack3 = 0.001 * (((var_chaste_interface__calcium_dynamics__OVRLDtrack > 0.97999999999999998) && (var_chaste_interface__calcium_dynamics__OVRLDtrack3 < 0.97999999999999998)) ? (50000 - 50000 * var_chaste_interface__calcium_dynamics__OVRLDtrack3) : (-10 * var_chaste_interface__calcium_dynamics__OVRLDtrack3)); // 1 / millisecond + const double d_dt_chaste_interface_var_calcium_dynamics__OVRLDtrack = 0.001 * (((var_chaste_interface__calcium_dynamics__APtrack3 < 0.37) && (var_chaste_interface__calcium_dynamics__OVRLDtrack3 < 0.37) && (1 / (1 + 0.80000000000000004 / var_chaste_interface__calcium_dynamics__Ca_JSR) > 0.69999999999999996)) ? (50000 - 50000 * var_chaste_interface__calcium_dynamics__OVRLDtrack) : (-500 * var_chaste_interface__calcium_dynamics__OVRLDtrack)); // 1 / millisecond + const double var_calcium_dynamics__i_leak = 0.33333333333333331 * var_chaste_interface__calcium_dynamics__Ca_NSR; // millimolar_per_second + const double var_calcium_dynamics__i_rel = (-var_chaste_interface__calcium_dynamics__Cai + var_chaste_interface__calcium_dynamics__Ca_JSR) * ((var_chaste_interface__calcium_dynamics__Cainfluxtrack > 0.00018000000000000001) ? (60000 * (1 - var_chaste_interface__calcium_dynamics__APtrack2) * (-0.00018000000000000001 + var_chaste_interface__calcium_dynamics__Cainfluxtrack) * var_chaste_interface__calcium_dynamics__APtrack2 / (0.00062 + var_chaste_interface__calcium_dynamics__Cainfluxtrack)) : ((var_chaste_interface__calcium_dynamics__OVRLDtrack2 > 0) ? (4000 * (1 - var_chaste_interface__calcium_dynamics__OVRLDtrack2) * var_chaste_interface__calcium_dynamics__OVRLDtrack2) : (0))); // millimolar_per_second + const double var_calcium_dynamics__i_up = 5 * var_chaste_interface__calcium_dynamics__Cai / (0.00092000000000000003 + var_chaste_interface__calcium_dynamics__Cai); // millimolar_per_second + const double var_calcium_dynamics__i_tr = 5.5555555555555554 * var_chaste_interface__calcium_dynamics__Ca_NSR - 5.5555555555555554 * var_chaste_interface__calcium_dynamics__Ca_JSR; // millimolar_per_second + const double d_dt_chaste_interface_var_calcium_dynamics__Ca_JSR = 0.001 * (-var_calcium_dynamics__i_rel + var_calcium_dynamics__i_tr) / (1 + 8 / pow((0.80000000000000004 + var_chaste_interface__calcium_dynamics__Ca_JSR), 2)); // millimolar / millisecond + const double var_ionic_concentrations__V_myo = 8.2280000000000009e-12 * M_PI; // micro_litre + const double var_calcium_dynamics__V_JSR = 0.0070588235294117632 * var_ionic_concentrations__V_myo; // micro_litre + const double var_calcium_dynamics__V_NSR = 0.081176470588235281 * var_ionic_concentrations__V_myo; // micro_litre + const double d_dt_chaste_interface_var_calcium_dynamics__Ca_NSR = 0.001 * var_calcium_dynamics__i_up - 0.001 * var_calcium_dynamics__i_leak - 0.001 * var_calcium_dynamics__V_JSR * var_calcium_dynamics__i_tr / var_calcium_dynamics__V_NSR; // millimolar / millisecond + const double var_calcium_background_current__E_Ca = 13.356169352749133 * log(mParameters[0] / var_chaste_interface__calcium_dynamics__Cai); // millivolt + const double var_fast_sodium_current__E_Na = 26.712338705498265 * log(mParameters[2] / var_chaste_interface__ionic_concentrations__Nai); // millivolt + const double var_L_type_Ca_channel__i_CaCa = 7.8019226357407252 * (-0.34100000000000003 * mParameters[0] + var_chaste_interface__calcium_dynamics__Cai * _lt_0_row[0]) * var_chaste_interface__L_type_Ca_channel_d_gate__d * var_L_type_Ca_channel_f_Ca_gate__f_Ca * var_chaste_interface__L_type_Ca_channel_f_gate__f * var_chaste_interface__membrane__V / (_lt_0_row[1]); // microA_per_microF + const double var_L_type_Ca_channel__i_CaK = 0.00069711623550831479 * (-0.75 * mParameters[1] + 0.75 * var_chaste_interface__ionic_concentrations__Ki * _lt_0_row[2]) * var_chaste_interface__L_type_Ca_channel_d_gate__d * var_L_type_Ca_channel_f_Ca_gate__f_Ca * var_chaste_interface__L_type_Ca_channel_f_gate__f * var_chaste_interface__membrane__V / (_lt_0_row[3]); // microA_per_microF + const double var_L_type_Ca_channel__i_CaNa = 0.0024381008236689767 * (-0.75 * mParameters[2] + 0.75 * var_chaste_interface__ionic_concentrations__Nai * _lt_0_row[2]) * var_chaste_interface__L_type_Ca_channel_d_gate__d * var_L_type_Ca_channel_f_Ca_gate__f_Ca * var_chaste_interface__L_type_Ca_channel_f_gate__f * var_chaste_interface__membrane__V / (_lt_0_row[3]); // microA_per_microF + const double var_L_type_Ca_channel_d_gate__E0_d = 10 + var_chaste_interface__membrane__V; // millivolt + const double var_L_type_Ca_channel_d_gate__d_infinity = 1 / (1 + exp(-0.16025641025641024 * var_L_type_Ca_channel_d_gate__E0_d)); // dimensionless + const double var_L_type_Ca_channel_d_gate__tau_d = ((fabs(var_L_type_Ca_channel_d_gate__E0_d) < 1.0000000000000001e-5) ? (0.0045787545787545781) : (0.028571428571428571 * (1 - exp(-0.16025641025641024 * var_L_type_Ca_channel_d_gate__E0_d)) * var_L_type_Ca_channel_d_gate__d_infinity / var_L_type_Ca_channel_d_gate__E0_d)); // second + const double d_dt_chaste_interface_var_L_type_Ca_channel_d_gate__d = 0.001 * (1 - var_chaste_interface__L_type_Ca_channel_d_gate__d) * var_L_type_Ca_channel_d_gate__d_infinity / var_L_type_Ca_channel_d_gate__tau_d - 0.001 * (1 - var_L_type_Ca_channel_d_gate__d_infinity) * var_chaste_interface__L_type_Ca_channel_d_gate__d / var_L_type_Ca_channel_d_gate__tau_d; // 1 / millisecond + const double var_L_type_Ca_channel_f_gate__f_infinity = _lt_0_row[10]; // dimensionless + const double var_L_type_Ca_channel_f_gate__tau_f = _lt_0_row[11]; // second + const double d_dt_chaste_interface_var_L_type_Ca_channel_f_gate__f = 0.001 * (1 - var_chaste_interface__L_type_Ca_channel_f_gate__f) * var_L_type_Ca_channel_f_gate__f_infinity / var_L_type_Ca_channel_f_gate__tau_f - 0.001 * (1 - var_L_type_Ca_channel_f_gate__f_infinity) * var_chaste_interface__L_type_Ca_channel_f_gate__f / var_L_type_Ca_channel_f_gate__tau_f; // 1 / millisecond + const double var_Na_Ca_exchanger__i_NaCa = 0.002 * (pow(var_chaste_interface__ionic_concentrations__Nai, 3) * mParameters[0] * _lt_0_row[4] - pow(mParameters[2], 3) * var_chaste_interface__calcium_dynamics__Cai * _lt_0_row[5]) / ((1 + 144.92753623188406 * var_chaste_interface__calcium_dynamics__Cai) * (1 + 0.001 * pow(var_chaste_interface__ionic_concentrations__Nai, 3) * mParameters[0] + 0.001 * pow(mParameters[2], 3) * var_chaste_interface__calcium_dynamics__Cai)); // microA_per_microF + const double var_T_type_Ca_channel__i_Ca_T = 0.050000000000000003 * pow(var_chaste_interface__T_type_Ca_channel_b_gate__b, 2) * (-var_calcium_background_current__E_Ca + var_chaste_interface__membrane__V) * var_chaste_interface__T_type_Ca_channel_g_gate__g; // microA_per_microF + const double d_dt_chaste_interface_var_T_type_Ca_channel_b_gate__b = 0.001 * (-var_chaste_interface__T_type_Ca_channel_b_gate__b + _lt_0_row[12]) / (_lt_0_row[13]); // 1 / millisecond + const double d_dt_chaste_interface_var_T_type_Ca_channel_g_gate__g = 0.001 * (-var_chaste_interface__T_type_Ca_channel_g_gate__g + _lt_0_row[14]) * ((var_chaste_interface__membrane__V <= 0) ? (1 / (0.012 - 0.00087500000000000002 * var_chaste_interface__membrane__V)) : (83.333333333333329)); // 1 / millisecond + const double var_calcium_background_current__i_Ca_b = 0.003016 * var_chaste_interface__membrane__V - 0.003016 * var_calcium_background_current__E_Ca; // microA_per_microF + const double var_fast_sodium_current__i_Na = pow(var_chaste_interface__fast_sodium_current_m_gate__m, 3) * (-var_fast_sodium_current__E_Na + var_chaste_interface__membrane__V) * mParameters[4] * var_chaste_interface__fast_sodium_current_h_gate__h * var_chaste_interface__fast_sodium_current_j_gate__j; // microA_per_microF + const double d_dt_chaste_interface_var_fast_sodium_current_h_gate__h = 0.001 * (1 - var_chaste_interface__fast_sodium_current_h_gate__h) * _lt_0_row[15] - 0.001 * _lt_0_row[16] * var_chaste_interface__fast_sodium_current_h_gate__h; // 1 / millisecond + const double d_dt_chaste_interface_var_fast_sodium_current_j_gate__j = 0.001 * (1 - var_chaste_interface__fast_sodium_current_j_gate__j) * _lt_0_row[17] - 0.001 * _lt_0_row[18] * var_chaste_interface__fast_sodium_current_j_gate__j; // 1 / millisecond + const double d_dt_chaste_interface_var_fast_sodium_current_m_gate__m = 0.001 * (1 - var_chaste_interface__fast_sodium_current_m_gate__m) * _lt_0_row[19] - 0.080000000000000002 * var_chaste_interface__fast_sodium_current_m_gate__m * _lt_0_row[20]; // 1 / millisecond + const double var_non_specific_calcium_activated_current__P_ns_Ca = 0; // cm_per_second + const double var_non_specific_calcium_activated_current__i_ns_K = 3612.0012202503358 * (-0.75 * mParameters[1] + 0.75 * var_chaste_interface__ionic_concentrations__Ki * _lt_0_row[2]) * var_chaste_interface__membrane__V * var_non_specific_calcium_activated_current__P_ns_Ca / ((1 + 1.7279999999999996e-9 / pow(var_chaste_interface__calcium_dynamics__Cai, 3)) * (_lt_0_row[3])); // microA_per_microF + const double var_non_specific_calcium_activated_current__i_ns_Na = 3612.0012202503358 * (-0.75 * mParameters[2] + 0.75 * var_chaste_interface__ionic_concentrations__Nai * _lt_0_row[2]) * var_chaste_interface__membrane__V * var_non_specific_calcium_activated_current__P_ns_Ca / ((1 + 1.7279999999999996e-9 / pow(var_chaste_interface__calcium_dynamics__Cai, 3)) * (_lt_0_row[3])); // microA_per_microF + const double d_dt_chaste_interface_var_rapid_delayed_rectifier_potassium_current_xr_gate__xr = 0.001 * (-var_chaste_interface__rapid_delayed_rectifier_potassium_current_xr_gate__xr + _lt_0_row[21]) * (_lt_0_row[22]); // 1 / millisecond + const double var_sarcolemmal_calcium_pump__i_p_Ca = 1.1499999999999999 * var_chaste_interface__calcium_dynamics__Cai / (0.00050000000000000001 + var_chaste_interface__calcium_dynamics__Cai); // microA_per_microF + const double d_dt_chaste_interface_var_calcium_dynamics__Cai = 0.001 * (-7.4312069233559624e-13 * (-var_Na_Ca_exchanger__i_NaCa + var_L_type_Ca_channel__i_CaCa + var_T_type_Ca_channel__i_Ca_T + var_calcium_background_current__i_Ca_b + var_sarcolemmal_calcium_pump__i_p_Ca) / var_ionic_concentrations__V_myo + (-var_calcium_dynamics__i_up + var_calcium_dynamics__i_leak) * var_calcium_dynamics__V_NSR / var_ionic_concentrations__V_myo + var_calcium_dynamics__V_JSR * var_calcium_dynamics__i_rel / var_ionic_concentrations__V_myo) / (1 + 0.00011900000000000002 / pow((0.0023800000000000002 + var_chaste_interface__calcium_dynamics__Cai), 2) + 3.5000000000000004e-5 / pow((0.00050000000000000001 + var_chaste_interface__calcium_dynamics__Cai), 2)); // millimolar / millisecond + const double d_dt_chaste_interface_var_calcium_dynamics__Cainfluxtrack = 0.001 * ((var_chaste_interface__calcium_dynamics__APtrack > 0.20000000000000001) ? (-7.4312069233559624e-13 * (-var_Na_Ca_exchanger__i_NaCa + var_L_type_Ca_channel__i_CaCa + var_T_type_Ca_channel__i_Ca_T + var_calcium_background_current__i_Ca_b + var_sarcolemmal_calcium_pump__i_p_Ca) / var_ionic_concentrations__V_myo) : ((var_chaste_interface__calcium_dynamics__APtrack2 > 0.01) ? (0) : (-500 * var_chaste_interface__calcium_dynamics__Cainfluxtrack))); // 1 / millisecond + const double d_dt_chaste_interface_var_slow_delayed_rectifier_potassium_current_xs1_gate__xs1 = 0.001 * (-var_chaste_interface__slow_delayed_rectifier_potassium_current_xs1_gate__xs1 + _lt_0_row[23]) * (_lt_0_row[24]); // 1 / millisecond + const double var_slow_delayed_rectifier_potassium_current__i_Ks = (0.433 + 0.25979999999999998 / (1 + 6.4818210260626455e-7 * pow((1 / var_chaste_interface__calcium_dynamics__Cai), 1.3999999999999999))) * (-26.712338705498265 * log((0.018329999999999999 * mParameters[2] + mParameters[1]) / (0.018329999999999999 * var_chaste_interface__ionic_concentrations__Nai + var_chaste_interface__ionic_concentrations__Ki)) + var_chaste_interface__membrane__V) * var_chaste_interface__slow_delayed_rectifier_potassium_current_xs1_gate__xs1 * var_chaste_interface__slow_delayed_rectifier_potassium_current_xs2_gate__xs2; // microA_per_microF + const double d_dt_chaste_interface_var_slow_delayed_rectifier_potassium_current_xs2_gate__xs2 = 0.001 * (-var_chaste_interface__slow_delayed_rectifier_potassium_current_xs2_gate__xs2 + _lt_0_row[23]) * (_lt_0_row[25]); // 1 / millisecond + const double var_sodium_background_current__i_Na_b = 0.0040000000000000001 * var_chaste_interface__membrane__V - 0.0040000000000000001 * var_fast_sodium_current__E_Na; // microA_per_microF + const double var_sodium_potassium_pump__i_NaK = 2 * mParameters[1] / ((1 + 100 / pow(var_chaste_interface__ionic_concentrations__Nai, 2)) * (1.5 + mParameters[1]) * (1 + _lt_0_row[7] + 0.036499999999999998 * (-0.14285714285714285 + 0.14285714285714285 * exp(0.01485884101040119 * mParameters[2])) * _lt_0_row[6])); // microA_per_microF + const double d_dt_chaste_interface_var_ionic_concentrations__Nai = 1.4862413846711923e-15 * (-var_L_type_Ca_channel__i_CaNa - var_fast_sodium_current__i_Na - var_non_specific_calcium_activated_current__i_ns_Na - var_sodium_background_current__i_Na_b - 3 * var_Na_Ca_exchanger__i_NaCa - 3 * var_sodium_potassium_pump__i_NaK) / var_ionic_concentrations__V_myo; // millimolar / millisecond + const double var_time_independent_potassium_current__E_K = 26.712338705498265 * log(mParameters[1] / var_chaste_interface__ionic_concentrations__Ki); // millivolt + const double var_ATP_sensitive_potassium_current__i_K_ATP = 1.921898339896919e-8 * pow(mParameters[1], 0.23999999999999999) * (-var_time_independent_potassium_current__E_K + var_chaste_interface__membrane__V); // microA_per_microF + const double var_plateau_potassium_current__i_Kp = 0.0055199999999999997 * (-var_time_independent_potassium_current__E_K + var_chaste_interface__membrane__V) / (_lt_0_row[8]); // microA_per_microF + const double var_rapid_delayed_rectifier_potassium_current__i_Kr = 0.43033148291193518 * sqrt(mParameters[1]) * (-var_time_independent_potassium_current__E_K + var_chaste_interface__membrane__V) * mParameters[6] * var_chaste_interface__rapid_delayed_rectifier_potassium_current_xr_gate__xr / (_lt_0_row[9]); // microA_per_microF + const double var_time_independent_potassium_current__i_K1 = 438.93811257017387 * sqrt(mParameters[1]) * (-var_time_independent_potassium_current__E_K + var_chaste_interface__membrane__V) * mParameters[5] / ((1 + exp(-14.1227775 + 0.23849999999999999 * var_chaste_interface__membrane__V - 0.23849999999999999 * var_time_independent_potassium_current__E_K)) * (1020 / (1 + exp(-14.1227775 + 0.23849999999999999 * var_chaste_interface__membrane__V - 0.23849999999999999 * var_time_independent_potassium_current__E_K)) + 1000 * (0.49124000000000001 * exp(0.43983232 + 0.080320000000000003 * var_chaste_interface__membrane__V - 0.080320000000000003 * var_time_independent_potassium_current__E_K) + exp(-36.698642499999998 + 0.061749999999999999 * var_chaste_interface__membrane__V - 0.061749999999999999 * var_time_independent_potassium_current__E_K)) / (1 + exp(-2.4444678999999998 + 0.51429999999999998 * var_time_independent_potassium_current__E_K - 0.51429999999999998 * var_chaste_interface__membrane__V)))); // microA_per_microF + const double var_transient_outward_current_ydv_gate__alpha_ydv = _lt_0_row[26]; // per_second + const double var_transient_outward_current_ydv_gate__beta_ydv = _lt_0_row[27]; // per_second + const double d_dt_chaste_interface_var_transient_outward_current_ydv_gate__ydv = 0.001 * (-var_chaste_interface__transient_outward_current_ydv_gate__ydv + var_transient_outward_current_ydv_gate__alpha_ydv / (var_transient_outward_current_ydv_gate__alpha_ydv + var_transient_outward_current_ydv_gate__beta_ydv)) * (var_transient_outward_current_ydv_gate__alpha_ydv + var_transient_outward_current_ydv_gate__beta_ydv); // 1 / millisecond + const double var_transient_outward_current_zdv_gate__alpha_zdv = _lt_0_row[28]; // per_second + const double var_transient_outward_current_zdv_gate__beta_zdv = _lt_0_row[29]; // per_second + const double var_transient_outward_current__i_to = 0; // microA_per_microF + const double d_dt_chaste_interface_var_ionic_concentrations__Ki = 1.4862413846711923e-15 * (-var_ATP_sensitive_potassium_current__i_K_ATP - var_L_type_Ca_channel__i_CaK - var_non_specific_calcium_activated_current__i_ns_K - var_plateau_potassium_current__i_Kp - var_rapid_delayed_rectifier_potassium_current__i_Kr - var_slow_delayed_rectifier_potassium_current__i_Ks - var_time_independent_potassium_current__i_K1 - var_transient_outward_current__i_to + 2 * var_sodium_potassium_pump__i_NaK) / var_ionic_concentrations__V_myo; // millimolar / millisecond + const double var_membrane__dVdt = -(GetIntracellularAreaStimulus(var_chaste_interface__environment__time_converted) / HeartConfig::Instance()->GetCapacitance() + var_ATP_sensitive_potassium_current__i_K_ATP + var_L_type_Ca_channel__i_CaCa + var_L_type_Ca_channel__i_CaK + var_L_type_Ca_channel__i_CaNa + var_Na_Ca_exchanger__i_NaCa + var_T_type_Ca_channel__i_Ca_T + var_calcium_background_current__i_Ca_b + var_fast_sodium_current__i_Na + var_non_specific_calcium_activated_current__i_ns_K + var_non_specific_calcium_activated_current__i_ns_Na + var_plateau_potassium_current__i_Kp + var_rapid_delayed_rectifier_potassium_current__i_Kr + var_sarcolemmal_calcium_pump__i_p_Ca + var_slow_delayed_rectifier_potassium_current__i_Ks + var_sodium_background_current__i_Na_b + var_sodium_potassium_pump__i_NaK + var_time_independent_potassium_current__i_K1 + var_transient_outward_current__i_to) / mParameters[3]; // dimensionless + const double d_dt_chaste_interface_var_calcium_dynamics__APtrack = 0.001 * ((var_membrane__dVdt > 150000) ? (100000 - 100500 * var_chaste_interface__calcium_dynamics__APtrack) : (-500 * var_chaste_interface__calcium_dynamics__APtrack)); // 1 / millisecond + const double d_dt_chaste_interface_var_transient_outward_current_zdv_gate__zdv = 0.001 * (-var_chaste_interface__transient_outward_current_zdv_gate__zdv + var_transient_outward_current_zdv_gate__alpha_zdv / (var_transient_outward_current_zdv_gate__alpha_zdv + var_transient_outward_current_zdv_gate__beta_zdv)) * (var_transient_outward_current_zdv_gate__alpha_zdv + var_transient_outward_current_zdv_gate__beta_zdv); // 1 / millisecond + + if (mSetVoltageDerivativeToZero) + { + d_dt_chaste_interface_var_membrane__V = 0.0; + } + else + { + d_dt_chaste_interface_var_membrane__V = 0.001 * var_membrane__dVdt; // millivolt / millisecond + } + + mEvalF[0] = d_dt_chaste_interface_var_membrane__V; + mEvalF[1] = d_dt_chaste_interface_var_calcium_dynamics__Cai; + mEvalF[2] = d_dt_chaste_interface_var_fast_sodium_current_m_gate__m; + mEvalF[3] = d_dt_chaste_interface_var_fast_sodium_current_h_gate__h; + mEvalF[4] = d_dt_chaste_interface_var_fast_sodium_current_j_gate__j; + mEvalF[5] = d_dt_chaste_interface_var_L_type_Ca_channel_d_gate__d; + mEvalF[6] = d_dt_chaste_interface_var_L_type_Ca_channel_f_gate__f; + mEvalF[7] = d_dt_chaste_interface_var_T_type_Ca_channel_b_gate__b; + mEvalF[8] = d_dt_chaste_interface_var_T_type_Ca_channel_g_gate__g; + mEvalF[9] = d_dt_chaste_interface_var_rapid_delayed_rectifier_potassium_current_xr_gate__xr; + mEvalF[10] = d_dt_chaste_interface_var_slow_delayed_rectifier_potassium_current_xs1_gate__xs1; + mEvalF[11] = d_dt_chaste_interface_var_slow_delayed_rectifier_potassium_current_xs2_gate__xs2; + mEvalF[12] = d_dt_chaste_interface_var_transient_outward_current_zdv_gate__zdv; + mEvalF[13] = d_dt_chaste_interface_var_transient_outward_current_ydv_gate__ydv; + mEvalF[14] = d_dt_chaste_interface_var_calcium_dynamics__Ca_JSR; + mEvalF[15] = d_dt_chaste_interface_var_calcium_dynamics__Ca_NSR; + mEvalF[16] = d_dt_chaste_interface_var_calcium_dynamics__APtrack; + mEvalF[17] = d_dt_chaste_interface_var_calcium_dynamics__APtrack2; + mEvalF[18] = d_dt_chaste_interface_var_calcium_dynamics__APtrack3; + mEvalF[19] = d_dt_chaste_interface_var_calcium_dynamics__Cainfluxtrack; + mEvalF[20] = d_dt_chaste_interface_var_calcium_dynamics__OVRLDtrack; + mEvalF[21] = d_dt_chaste_interface_var_calcium_dynamics__OVRLDtrack2; + mEvalF[22] = d_dt_chaste_interface_var_calcium_dynamics__OVRLDtrack3; + mEvalF[23] = d_dt_chaste_interface_var_ionic_concentrations__Nai; + mEvalF[24] = d_dt_chaste_interface_var_ionic_concentrations__Ki; + + + mPartialF[0] = EvaluatePartialDerivative0(var_chaste_interface__environment__time_converted, rY, delta); + mPartialF[1] = EvaluatePartialDerivative1(var_chaste_interface__environment__time_converted, rY, delta); + mPartialF[2] = EvaluatePartialDerivative2(var_chaste_interface__environment__time_converted, rY, delta); + mPartialF[3] = EvaluatePartialDerivative3(var_chaste_interface__environment__time_converted, rY, delta); + mPartialF[4] = EvaluatePartialDerivative4(var_chaste_interface__environment__time_converted, rY, delta); + mPartialF[5] = EvaluatePartialDerivative5(var_chaste_interface__environment__time_converted, rY, delta); + mPartialF[6] = EvaluatePartialDerivative6(var_chaste_interface__environment__time_converted, rY, delta); + mPartialF[7] = EvaluatePartialDerivative7(var_chaste_interface__environment__time_converted, rY, delta); + mPartialF[8] = EvaluatePartialDerivative8(var_chaste_interface__environment__time_converted, rY, delta); + mPartialF[9] = EvaluatePartialDerivative9(var_chaste_interface__environment__time_converted, rY, delta); + mPartialF[10] = EvaluatePartialDerivative10(var_chaste_interface__environment__time_converted, rY, delta); + mPartialF[11] = EvaluatePartialDerivative11(var_chaste_interface__environment__time_converted, rY, delta); + mPartialF[12] = EvaluatePartialDerivative12(var_chaste_interface__environment__time_converted, rY, delta); + mPartialF[13] = EvaluatePartialDerivative13(var_chaste_interface__environment__time_converted, rY, delta); + mPartialF[14] = EvaluatePartialDerivative14(var_chaste_interface__environment__time_converted, rY, delta); + mPartialF[15] = EvaluatePartialDerivative15(var_chaste_interface__environment__time_converted, rY, delta); + mPartialF[16] = EvaluatePartialDerivative16(var_chaste_interface__environment__time_converted, rY, delta); + mPartialF[17] = EvaluatePartialDerivative17(var_chaste_interface__environment__time_converted, rY, delta); + mPartialF[18] = EvaluatePartialDerivative18(var_chaste_interface__environment__time_converted, rY, delta); + mPartialF[19] = EvaluatePartialDerivative19(var_chaste_interface__environment__time_converted, rY, delta); + mPartialF[20] = EvaluatePartialDerivative20(var_chaste_interface__environment__time_converted, rY, delta); + mPartialF[21] = EvaluatePartialDerivative21(var_chaste_interface__environment__time_converted, rY, delta); + mPartialF[22] = EvaluatePartialDerivative22(var_chaste_interface__environment__time_converted, rY, delta); + mPartialF[23] = EvaluatePartialDerivative23(var_chaste_interface__environment__time_converted, rY, delta); + mPartialF[24] = EvaluatePartialDerivative24(var_chaste_interface__environment__time_converted, rY, delta); + for (unsigned var=0; var& rY) + { + double d_dt_chaste_interface_var_membrane__V; + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -88.984 + double var_chaste_interface__calcium_dynamics__Cai = rY[1]; + // Units: millimolar; Initial value: 0.00035237 + double var_chaste_interface__fast_sodium_current_m_gate__m = rY[2]; + // Units: dimensionless; Initial value: 0.00079287 + double var_chaste_interface__fast_sodium_current_h_gate__h = rY[3]; + // Units: dimensionless; Initial value: 0.9938 + double var_chaste_interface__fast_sodium_current_j_gate__j = rY[4]; + // Units: dimensionless; Initial value: 0.99573 + double var_chaste_interface__L_type_Ca_channel_d_gate__d = rY[5]; + // Units: dimensionless; Initial value: 3.18355e-06 + double var_chaste_interface__L_type_Ca_channel_f_gate__f = rY[6]; + // Units: dimensionless; Initial value: 0.9974388 + double var_chaste_interface__T_type_Ca_channel_b_gate__b = rY[7]; + // Units: dimensionless; Initial value: 0.000967785 + double var_chaste_interface__T_type_Ca_channel_g_gate__g = rY[8]; + // Units: dimensionless; Initial value: 0.95331988 + double var_chaste_interface__rapid_delayed_rectifier_potassium_current_xr_gate__xr = rY[9]; + // Units: dimensionless; Initial value: 0.00032151644 + double var_chaste_interface__slow_delayed_rectifier_potassium_current_xs1_gate__xs1 = rY[10]; + // Units: dimensionless; Initial value: 0.0272635 + double var_chaste_interface__slow_delayed_rectifier_potassium_current_xs2_gate__xs2 = rY[11]; + // Units: dimensionless; Initial value: 0.0631269 + double var_chaste_interface__ionic_concentrations__Nai = rY[23]; + // Units: millimolar; Initial value: 15.6748357 + double var_chaste_interface__ionic_concentrations__Ki = rY[24]; + // Units: millimolar; Initial value: 137.6244 + + + // Lookup table indexing + const bool _oob_0 = Dynamicviswanathan_model_1999_epiFromCellMLGRL2Opt_LookupTables::Instance()->CheckIndex0(var_chaste_interface__membrane__V); +// LCOV_EXCL_START + if (_oob_0) + EXCEPTION(DumpState("membrane_voltage outside lookup table range", rY , var_chaste_interface__environment__time_converted)); +// LCOV_EXCL_STOP + const double* const _lt_0_row = Dynamicviswanathan_model_1999_epiFromCellMLGRL2Opt_LookupTables::Instance()->IndexTable0(var_chaste_interface__membrane__V); + + // Mathematics + const double var_L_type_Ca_channel_f_Ca_gate__f_Ca = 1 / (1 + 1666.6666666666667 * var_chaste_interface__calcium_dynamics__Cai); // dimensionless + const double var_calcium_background_current__E_Ca = 13.356169352749133 * log(mParameters[0] / var_chaste_interface__calcium_dynamics__Cai); // millivolt + const double var_fast_sodium_current__E_Na = 26.712338705498265 * log(mParameters[2] / var_chaste_interface__ionic_concentrations__Nai); // millivolt + const double var_L_type_Ca_channel__i_CaCa = 7.8019226357407252 * (-0.34100000000000003 * mParameters[0] + var_chaste_interface__calcium_dynamics__Cai * _lt_0_row[0]) * var_chaste_interface__L_type_Ca_channel_d_gate__d * var_L_type_Ca_channel_f_Ca_gate__f_Ca * var_chaste_interface__L_type_Ca_channel_f_gate__f * var_chaste_interface__membrane__V / (_lt_0_row[1]); // microA_per_microF + const double var_L_type_Ca_channel__i_CaK = 0.00069711623550831479 * (-0.75 * mParameters[1] + 0.75 * var_chaste_interface__ionic_concentrations__Ki * _lt_0_row[2]) * var_chaste_interface__L_type_Ca_channel_d_gate__d * var_L_type_Ca_channel_f_Ca_gate__f_Ca * var_chaste_interface__L_type_Ca_channel_f_gate__f * var_chaste_interface__membrane__V / (_lt_0_row[3]); // microA_per_microF + const double var_L_type_Ca_channel__i_CaNa = 0.0024381008236689767 * (-0.75 * mParameters[2] + 0.75 * var_chaste_interface__ionic_concentrations__Nai * _lt_0_row[2]) * var_chaste_interface__L_type_Ca_channel_d_gate__d * var_L_type_Ca_channel_f_Ca_gate__f_Ca * var_chaste_interface__L_type_Ca_channel_f_gate__f * var_chaste_interface__membrane__V / (_lt_0_row[3]); // microA_per_microF + const double var_Na_Ca_exchanger__i_NaCa = 0.002 * (pow(var_chaste_interface__ionic_concentrations__Nai, 3) * mParameters[0] * _lt_0_row[4] - pow(mParameters[2], 3) * var_chaste_interface__calcium_dynamics__Cai * _lt_0_row[5]) / ((1 + 144.92753623188406 * var_chaste_interface__calcium_dynamics__Cai) * (1 + 0.001 * pow(var_chaste_interface__ionic_concentrations__Nai, 3) * mParameters[0] + 0.001 * pow(mParameters[2], 3) * var_chaste_interface__calcium_dynamics__Cai)); // microA_per_microF + const double var_T_type_Ca_channel__i_Ca_T = 0.050000000000000003 * pow(var_chaste_interface__T_type_Ca_channel_b_gate__b, 2) * (-var_calcium_background_current__E_Ca + var_chaste_interface__membrane__V) * var_chaste_interface__T_type_Ca_channel_g_gate__g; // microA_per_microF + const double var_calcium_background_current__i_Ca_b = 0.003016 * var_chaste_interface__membrane__V - 0.003016 * var_calcium_background_current__E_Ca; // microA_per_microF + const double var_fast_sodium_current__i_Na = pow(var_chaste_interface__fast_sodium_current_m_gate__m, 3) * (-var_fast_sodium_current__E_Na + var_chaste_interface__membrane__V) * mParameters[4] * var_chaste_interface__fast_sodium_current_h_gate__h * var_chaste_interface__fast_sodium_current_j_gate__j; // microA_per_microF + const double var_non_specific_calcium_activated_current__P_ns_Ca = 0; // cm_per_second + const double var_non_specific_calcium_activated_current__i_ns_K = 3612.0012202503358 * (-0.75 * mParameters[1] + 0.75 * var_chaste_interface__ionic_concentrations__Ki * _lt_0_row[2]) * var_chaste_interface__membrane__V * var_non_specific_calcium_activated_current__P_ns_Ca / ((1 + 1.7279999999999996e-9 / pow(var_chaste_interface__calcium_dynamics__Cai, 3)) * (_lt_0_row[3])); // microA_per_microF + const double var_non_specific_calcium_activated_current__i_ns_Na = 3612.0012202503358 * (-0.75 * mParameters[2] + 0.75 * var_chaste_interface__ionic_concentrations__Nai * _lt_0_row[2]) * var_chaste_interface__membrane__V * var_non_specific_calcium_activated_current__P_ns_Ca / ((1 + 1.7279999999999996e-9 / pow(var_chaste_interface__calcium_dynamics__Cai, 3)) * (_lt_0_row[3])); // microA_per_microF + const double var_sarcolemmal_calcium_pump__i_p_Ca = 1.1499999999999999 * var_chaste_interface__calcium_dynamics__Cai / (0.00050000000000000001 + var_chaste_interface__calcium_dynamics__Cai); // microA_per_microF + const double var_slow_delayed_rectifier_potassium_current__i_Ks = (0.433 + 0.25979999999999998 / (1 + 6.4818210260626455e-7 * pow((1 / var_chaste_interface__calcium_dynamics__Cai), 1.3999999999999999))) * (-26.712338705498265 * log((0.018329999999999999 * mParameters[2] + mParameters[1]) / (0.018329999999999999 * var_chaste_interface__ionic_concentrations__Nai + var_chaste_interface__ionic_concentrations__Ki)) + var_chaste_interface__membrane__V) * var_chaste_interface__slow_delayed_rectifier_potassium_current_xs1_gate__xs1 * var_chaste_interface__slow_delayed_rectifier_potassium_current_xs2_gate__xs2; // microA_per_microF + const double var_sodium_background_current__i_Na_b = 0.0040000000000000001 * var_chaste_interface__membrane__V - 0.0040000000000000001 * var_fast_sodium_current__E_Na; // microA_per_microF + const double var_sodium_potassium_pump__i_NaK = 2 * mParameters[1] / ((1 + 100 / pow(var_chaste_interface__ionic_concentrations__Nai, 2)) * (1.5 + mParameters[1]) * (1 + _lt_0_row[7] + 0.036499999999999998 * (-0.14285714285714285 + 0.14285714285714285 * exp(0.01485884101040119 * mParameters[2])) * _lt_0_row[6])); // microA_per_microF + const double var_time_independent_potassium_current__E_K = 26.712338705498265 * log(mParameters[1] / var_chaste_interface__ionic_concentrations__Ki); // millivolt + const double var_ATP_sensitive_potassium_current__i_K_ATP = 1.921898339896919e-8 * pow(mParameters[1], 0.23999999999999999) * (-var_time_independent_potassium_current__E_K + var_chaste_interface__membrane__V); // microA_per_microF + const double var_plateau_potassium_current__i_Kp = 0.0055199999999999997 * (-var_time_independent_potassium_current__E_K + var_chaste_interface__membrane__V) / (_lt_0_row[8]); // microA_per_microF + const double var_rapid_delayed_rectifier_potassium_current__i_Kr = 0.43033148291193518 * sqrt(mParameters[1]) * (-var_time_independent_potassium_current__E_K + var_chaste_interface__membrane__V) * mParameters[6] * var_chaste_interface__rapid_delayed_rectifier_potassium_current_xr_gate__xr / (_lt_0_row[9]); // microA_per_microF + const double var_time_independent_potassium_current__i_K1 = 438.93811257017387 * sqrt(mParameters[1]) * (-var_time_independent_potassium_current__E_K + var_chaste_interface__membrane__V) * mParameters[5] / ((1 + exp(-14.1227775 + 0.23849999999999999 * var_chaste_interface__membrane__V - 0.23849999999999999 * var_time_independent_potassium_current__E_K)) * (1020 / (1 + exp(-14.1227775 + 0.23849999999999999 * var_chaste_interface__membrane__V - 0.23849999999999999 * var_time_independent_potassium_current__E_K)) + 1000 * (0.49124000000000001 * exp(0.43983232 + 0.080320000000000003 * var_chaste_interface__membrane__V - 0.080320000000000003 * var_time_independent_potassium_current__E_K) + exp(-36.698642499999998 + 0.061749999999999999 * var_chaste_interface__membrane__V - 0.061749999999999999 * var_time_independent_potassium_current__E_K)) / (1 + exp(-2.4444678999999998 + 0.51429999999999998 * var_time_independent_potassium_current__E_K - 0.51429999999999998 * var_chaste_interface__membrane__V)))); // microA_per_microF + const double var_transient_outward_current__i_to = 0; // microA_per_microF + const double var_membrane__dVdt = -(GetIntracellularAreaStimulus(var_chaste_interface__environment__time_converted) / HeartConfig::Instance()->GetCapacitance() + var_ATP_sensitive_potassium_current__i_K_ATP + var_L_type_Ca_channel__i_CaCa + var_L_type_Ca_channel__i_CaK + var_L_type_Ca_channel__i_CaNa + var_Na_Ca_exchanger__i_NaCa + var_T_type_Ca_channel__i_Ca_T + var_calcium_background_current__i_Ca_b + var_fast_sodium_current__i_Na + var_non_specific_calcium_activated_current__i_ns_K + var_non_specific_calcium_activated_current__i_ns_Na + var_plateau_potassium_current__i_Kp + var_rapid_delayed_rectifier_potassium_current__i_Kr + var_sarcolemmal_calcium_pump__i_p_Ca + var_slow_delayed_rectifier_potassium_current__i_Ks + var_sodium_background_current__i_Na_b + var_sodium_potassium_pump__i_NaK + var_time_independent_potassium_current__i_K1 + var_transient_outward_current__i_to) / mParameters[3]; // dimensionless + d_dt_chaste_interface_var_membrane__V = 0.001 * var_membrane__dVdt; // millivolt / millisecond + + return d_dt_chaste_interface_var_membrane__V; + } + + double Dynamicviswanathan_model_1999_epiFromCellMLGRL2Opt::EvaluatePartialDerivative0(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -88.984 + double var_chaste_interface__calcium_dynamics__Cai = rY[1]; + // Units: millimolar; Initial value: 0.00035237 + double var_chaste_interface__fast_sodium_current_m_gate__m = rY[2]; + // Units: dimensionless; Initial value: 0.00079287 + double var_chaste_interface__fast_sodium_current_h_gate__h = rY[3]; + // Units: dimensionless; Initial value: 0.9938 + double var_chaste_interface__fast_sodium_current_j_gate__j = rY[4]; + // Units: dimensionless; Initial value: 0.99573 + double var_chaste_interface__L_type_Ca_channel_d_gate__d = rY[5]; + // Units: dimensionless; Initial value: 3.18355e-06 + double var_chaste_interface__L_type_Ca_channel_f_gate__f = rY[6]; + // Units: dimensionless; Initial value: 0.9974388 + double var_chaste_interface__T_type_Ca_channel_b_gate__b = rY[7]; + // Units: dimensionless; Initial value: 0.000967785 + double var_chaste_interface__T_type_Ca_channel_g_gate__g = rY[8]; + // Units: dimensionless; Initial value: 0.95331988 + double var_chaste_interface__rapid_delayed_rectifier_potassium_current_xr_gate__xr = rY[9]; + // Units: dimensionless; Initial value: 0.00032151644 + double var_chaste_interface__slow_delayed_rectifier_potassium_current_xs1_gate__xs1 = rY[10]; + // Units: dimensionless; Initial value: 0.0272635 + double var_chaste_interface__slow_delayed_rectifier_potassium_current_xs2_gate__xs2 = rY[11]; + // Units: dimensionless; Initial value: 0.0631269 + double var_chaste_interface__ionic_concentrations__Nai = rY[23]; + // Units: millimolar; Initial value: 15.6748357 + double var_chaste_interface__ionic_concentrations__Ki = rY[24]; + // Units: millimolar; Initial value: 137.6244 + + + // Lookup table indexing + const bool _oob_0 = Dynamicviswanathan_model_1999_epiFromCellMLGRL2Opt_LookupTables::Instance()->CheckIndex0(var_chaste_interface__membrane__V); +// LCOV_EXCL_START + if (_oob_0) + EXCEPTION(DumpState("membrane_voltage outside lookup table range", rY , var_chaste_interface__environment__time_converted)); +// LCOV_EXCL_STOP + const double* const _lt_0_row = Dynamicviswanathan_model_1999_epiFromCellMLGRL2Opt_LookupTables::Instance()->IndexTable0(var_chaste_interface__membrane__V); + + const double var_x0 = 1 / var_chaste_interface__calcium_dynamics__Cai; + const double var_x1 = pow(var_x0, 1.3999999999999999); + const double var_x2 = 1 + 6.4818210260626455e-7 * var_x1; + const double var_x3 = 0.433 + 0.25979999999999998 / var_x2; + const double var_x4 = var_chaste_interface__slow_delayed_rectifier_potassium_current_xs1_gate__xs1 * var_chaste_interface__slow_delayed_rectifier_potassium_current_xs2_gate__xs2; + const double var_x5 = var_x3 * var_x4; + const double var_x6 = 0.018717941753901308 * var_chaste_interface__membrane__V; + const double var_x7 = exp(var_x6); + const double var_x8 = pow(var_chaste_interface__ionic_concentrations__Nai, 3) * mParameters[0]; + const double var_x9 = var_x7 * var_x8; + const double var_x10 = exp(-var_x6); + const double var_x11 = pow(mParameters[2], 3); + const double var_x12 = var_x11 * var_chaste_interface__calcium_dynamics__Cai; + const double var_x13 = var_x10 * var_x12; + const double var_x14 = 0.018717941753901308 * var_x13 + 0.018717941753901308 * var_x9; + const double var_x15 = 1 / (1 + 144.92753623188406 * var_chaste_interface__calcium_dynamics__Cai); + const double var_x16 = 1 + 0.001 * var_x12 + 0.001 * var_x8; + const double var_x17 = 1 / var_x16; + const double var_x18 = var_x15 * var_x17; + const double var_x19 = 0.002 * var_x18; + const double var_x20 = var_x14 * var_x19; + const double var_x21 = pow(var_chaste_interface__ionic_concentrations__Nai, (-2)); + const double var_x22 = 1 / (1 + 100 * var_x21); + const double var_x23 = 2 * var_x22; + const double var_x24 = 1 / (1.5 + mParameters[1]); + const double var_x25 = exp(-0.003743588350780262 * var_chaste_interface__membrane__V); + const double var_x26 = exp(0.01485884101040119 * mParameters[2]); + const double var_x27 = 0.037435883507802616 * var_chaste_interface__membrane__V; + const double var_x28 = exp(-var_x27); + const double var_x29 = 1 + 0.1245 * var_x25 + 0.036499999999999998 * var_x28 * (-0.14285714285714285 + 0.14285714285714285 * var_x26); + const double var_x30 = pow(var_x29, (-2)); + const double var_x31 = 0.00046607674967214262 * var_x25 + 0.037435883507802616 * var_x28 * (-0.0052142857142857138 + 0.0052142857142857138 * var_x26); + const double var_x32 = var_x24 * var_x30 * var_x31 * mParameters[1]; + const double var_x33 = pow(var_chaste_interface__T_type_Ca_channel_b_gate__b, 2); + const double var_x34 = var_x33 * var_chaste_interface__T_type_Ca_channel_g_gate__g; + const double var_x35 = 0.050000000000000003 * var_x34; + const double var_x36 = 1 / (1 + 1666.6666666666667 * var_chaste_interface__calcium_dynamics__Cai); + const double var_x37 = var_x36 * var_chaste_interface__L_type_Ca_channel_f_gate__f; + const double var_x38 = var_x37 * var_chaste_interface__L_type_Ca_channel_d_gate__d; + const double var_x39 = _lt_0_row[0]; + const double var_x40 = -1 + var_x39; + const double var_x41 = 1 / var_x40; + const double var_x42 = var_x39 * var_chaste_interface__calcium_dynamics__Cai; + const double var_x43 = var_x42 - 0.34100000000000003 * mParameters[0]; + const double var_x44 = var_x41 * var_x43; + const double var_x45 = 7.8019226357407252 * var_x44; + const double var_x46 = var_x38 * var_x45; + const double var_x47 = var_x38 * var_chaste_interface__membrane__V; + const double var_x48 = var_x41 * var_x47; + const double var_x49 = var_x35 + var_x46 + 0.58414373385695628 * var_x42 * var_x48 - 0.58414373385695628 * var_x39 * var_x43 * var_x47 / pow(var_x40, 2); + const double var_x50 = pow(var_chaste_interface__fast_sodium_current_m_gate__m, 3); + const double var_x51 = var_x50 * mParameters[4] * var_chaste_interface__fast_sodium_current_j_gate__j; + const double var_x52 = var_x51 * var_chaste_interface__fast_sodium_current_h_gate__h; + const double var_x53 = exp(var_x27); + const double var_x54 = -1 + var_x53; + const double var_x55 = 1 / var_x54; + const double var_x56 = var_x38 * var_x55; + const double var_x57 = 0.75 * var_x53; + const double var_x58 = -0.75 * mParameters[2] + var_x57 * var_chaste_interface__ionic_concentrations__Nai; + const double var_x59 = 0.0024381008236689767 * var_x58; + const double var_x60 = var_x56 * var_x59; + const double var_x61 = var_x53 * var_x56 * var_chaste_interface__membrane__V; + const double var_x62 = var_x47 * var_x53 / pow(var_x54, 2); + const double var_x63 = var_x52 + var_x60 + 6.8454343811362063e-5 * var_x61 * var_chaste_interface__ionic_concentrations__Nai - 9.1272458415149417e-5 * var_x58 * var_x62; + const double var_x64 = exp(1.2521739130434781 - 0.16722408026755853 * var_chaste_interface__membrane__V); + const double var_x65 = 1 + var_x64; + const double var_x66 = 1 / var_x65; + const double var_x67 = 0.0055199999999999997 * var_x66; + const double var_x68 = pow(mParameters[1], 0.23999999999999999); + const double var_x69 = 1.921898339896919e-8 * var_x68; + const double var_x70 = 1 / var_chaste_interface__ionic_concentrations__Ki; + const double var_x71 = log(var_x70 * mParameters[1]); + const double var_x72 = -26.712338705498265 * var_x71 + var_chaste_interface__membrane__V; + const double var_x73 = exp(0.4017857142857143 + 0.044642857142857144 * var_chaste_interface__membrane__V); + const double var_x74 = 1 + var_x73; + const double var_x75 = sqrt(mParameters[1]); + const double var_x76 = var_x75 * mParameters[6] / var_x74; + const double var_x77 = var_x76 * var_chaste_interface__rapid_delayed_rectifier_potassium_current_xr_gate__xr; + const double var_x78 = 0.43033148291193518 * var_x77; + const double var_x79 = exp(-14.1227775 + 0.23849999999999999 * var_chaste_interface__membrane__V - 6.3708927812613361 * var_x71); + const double var_x80 = 1 + var_x79; + const double var_x81 = 1 / var_x80; + const double var_x82 = exp(-2.4444678999999998 + 13.738155796237757 * var_x71 - 0.51429999999999998 * var_chaste_interface__membrane__V); + const double var_x83 = 1 + var_x82; + const double var_x84 = 1 / var_x83; + const double var_x85 = exp(0.43983232 + 0.080320000000000003 * var_chaste_interface__membrane__V - 2.1455350448256207 * var_x71); + const double var_x86 = exp(-36.698642499999998 + 0.061749999999999999 * var_chaste_interface__membrane__V - 1.6494869150645177 * var_x71); + const double var_x87 = var_x86 + 0.49124000000000001 * var_x85; + const double var_x88 = var_x84 * var_x87; + const double var_x89 = 1 / (1000 * var_x88 + 1020 * var_x81); + const double var_x90 = var_x75 * var_x81 * mParameters[5]; + const double var_x91 = var_x89 * var_x90; + const double var_x92 = 438.93811257017387 * var_x91; + const double var_x93 = -0.75 * mParameters[1] + var_x57 * var_chaste_interface__ionic_concentrations__Ki; + const double var_x94 = 0.00069711623550831479 * var_x93; + const double var_x95 = var_x56 * var_x94; + const double var_x96 = 1000 * var_x84; + const double var_x97 = pow(var_x80, (-2)); + const double var_x98 = var_x82 * var_x87 / pow(var_x83, 2); + const double var_x99 = 0.0004218936106979757 * var_x72 * var_x90 / pow((var_x81 + 0.98039215686274506 * var_x88), 2); + const double var_x100 = var_x72 * var_x75; + const double var_x101 = var_x79 * var_x97; + const double var_x102 = var_x100 * var_x89 * mParameters[5]; + const double var_x103 = var_x67 + var_x69 + var_x78 + var_x92 + var_x95 + var_x99 * (-514.29999999999995 * var_x98 - var_x96 * (0.061749999999999999 * var_x86 + 0.039456396800000001 * var_x85) + 243.26999999999998 * var_x79 * var_x97) + 1.9572871637915374e-5 * var_x61 * var_chaste_interface__ionic_concentrations__Ki - 2.6097162183887167e-5 * var_x62 * var_x93 - 104.68673984798647 * var_x101 * var_x102 + 0.00092307692307692295 * var_x64 * var_x72 / pow(var_x65, 2) - 0.019211226915711394 * var_x100 * var_x73 * mParameters[6] * var_chaste_interface__rapid_delayed_rectifier_potassium_current_xr_gate__xr / pow(var_x74, 2); + const double var_x104 = 1 / mParameters[3]; + const double var_x105 = 0.001 * var_x104; + + partialF = -var_x105 * (0.0070159999999999997 + var_x103 + var_x20 + var_x49 + var_x5 + var_x63 + var_x23 * var_x32); + } + else + { + const double y_save = rY[0]; + rY[0] += delta; + const double temp = EvaluateYDerivative0(var_chaste_interface__environment__time_converted, rY); + partialF = (temp-mEvalF[0])/delta; + rY[0] = y_save; + } + return partialF; + } + double Dynamicviswanathan_model_1999_epiFromCellMLGRL2Opt::EvaluateYDerivative1(double var_chaste_interface__environment__time_converted, std::vector& rY) + { + + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -88.984 + double var_chaste_interface__calcium_dynamics__Cai = rY[1]; + // Units: millimolar; Initial value: 0.00035237 + double var_chaste_interface__L_type_Ca_channel_d_gate__d = rY[5]; + // Units: dimensionless; Initial value: 3.18355e-06 + double var_chaste_interface__L_type_Ca_channel_f_gate__f = rY[6]; + // Units: dimensionless; Initial value: 0.9974388 + double var_chaste_interface__T_type_Ca_channel_b_gate__b = rY[7]; + // Units: dimensionless; Initial value: 0.000967785 + double var_chaste_interface__T_type_Ca_channel_g_gate__g = rY[8]; + // Units: dimensionless; Initial value: 0.95331988 + double var_chaste_interface__calcium_dynamics__Ca_JSR = rY[14]; + // Units: millimolar; Initial value: 0.817895 + double var_chaste_interface__calcium_dynamics__Ca_NSR = rY[15]; + // Units: millimolar; Initial value: 2.797668 + double var_chaste_interface__calcium_dynamics__APtrack2 = rY[17]; + // Units: dimensionless; Initial value: 2.1084e-86 + double var_chaste_interface__calcium_dynamics__Cainfluxtrack = rY[19]; + // Units: dimensionless; Initial value: 1.784e-87 + double var_chaste_interface__calcium_dynamics__OVRLDtrack2 = rY[21]; + // Units: dimensionless; Initial value: 0.0 + double var_chaste_interface__ionic_concentrations__Nai = rY[23]; + // Units: millimolar; Initial value: 15.6748357 + + + // Lookup table indexing + const bool _oob_0 = Dynamicviswanathan_model_1999_epiFromCellMLGRL2Opt_LookupTables::Instance()->CheckIndex0(var_chaste_interface__membrane__V); +// LCOV_EXCL_START + if (_oob_0) + EXCEPTION(DumpState("membrane_voltage outside lookup table range", rY , var_chaste_interface__environment__time_converted)); +// LCOV_EXCL_STOP + const double* const _lt_0_row = Dynamicviswanathan_model_1999_epiFromCellMLGRL2Opt_LookupTables::Instance()->IndexTable0(var_chaste_interface__membrane__V); + + // Mathematics + const double var_L_type_Ca_channel_f_Ca_gate__f_Ca = 1 / (1 + 1666.6666666666667 * var_chaste_interface__calcium_dynamics__Cai); // dimensionless + const double var_calcium_dynamics__i_leak = 0.33333333333333331 * var_chaste_interface__calcium_dynamics__Ca_NSR; // millimolar_per_second + const double var_calcium_dynamics__i_rel = (-var_chaste_interface__calcium_dynamics__Cai + var_chaste_interface__calcium_dynamics__Ca_JSR) * ((var_chaste_interface__calcium_dynamics__Cainfluxtrack > 0.00018000000000000001) ? (60000 * (1 - var_chaste_interface__calcium_dynamics__APtrack2) * (-0.00018000000000000001 + var_chaste_interface__calcium_dynamics__Cainfluxtrack) * var_chaste_interface__calcium_dynamics__APtrack2 / (0.00062 + var_chaste_interface__calcium_dynamics__Cainfluxtrack)) : ((var_chaste_interface__calcium_dynamics__OVRLDtrack2 > 0) ? (4000 * (1 - var_chaste_interface__calcium_dynamics__OVRLDtrack2) * var_chaste_interface__calcium_dynamics__OVRLDtrack2) : (0))); // millimolar_per_second + const double var_calcium_dynamics__i_up = 5 * var_chaste_interface__calcium_dynamics__Cai / (0.00092000000000000003 + var_chaste_interface__calcium_dynamics__Cai); // millimolar_per_second + const double var_ionic_concentrations__V_myo = 8.2280000000000009e-12 * M_PI; // micro_litre + const double var_calcium_dynamics__V_JSR = 0.0070588235294117632 * var_ionic_concentrations__V_myo; // micro_litre + const double var_calcium_dynamics__V_NSR = 0.081176470588235281 * var_ionic_concentrations__V_myo; // micro_litre + const double var_calcium_background_current__E_Ca = 13.356169352749133 * log(mParameters[0] / var_chaste_interface__calcium_dynamics__Cai); // millivolt + const double var_L_type_Ca_channel__i_CaCa = 7.8019226357407252 * (-0.34100000000000003 * mParameters[0] + var_chaste_interface__calcium_dynamics__Cai * _lt_0_row[0]) * var_chaste_interface__L_type_Ca_channel_d_gate__d * var_L_type_Ca_channel_f_Ca_gate__f_Ca * var_chaste_interface__L_type_Ca_channel_f_gate__f * var_chaste_interface__membrane__V / (_lt_0_row[1]); // microA_per_microF + const double var_Na_Ca_exchanger__i_NaCa = 0.002 * (pow(var_chaste_interface__ionic_concentrations__Nai, 3) * mParameters[0] * _lt_0_row[4] - pow(mParameters[2], 3) * var_chaste_interface__calcium_dynamics__Cai * _lt_0_row[5]) / ((1 + 144.92753623188406 * var_chaste_interface__calcium_dynamics__Cai) * (1 + 0.001 * pow(var_chaste_interface__ionic_concentrations__Nai, 3) * mParameters[0] + 0.001 * pow(mParameters[2], 3) * var_chaste_interface__calcium_dynamics__Cai)); // microA_per_microF + const double var_T_type_Ca_channel__i_Ca_T = 0.050000000000000003 * pow(var_chaste_interface__T_type_Ca_channel_b_gate__b, 2) * (-var_calcium_background_current__E_Ca + var_chaste_interface__membrane__V) * var_chaste_interface__T_type_Ca_channel_g_gate__g; // microA_per_microF + const double var_calcium_background_current__i_Ca_b = 0.003016 * var_chaste_interface__membrane__V - 0.003016 * var_calcium_background_current__E_Ca; // microA_per_microF + const double var_sarcolemmal_calcium_pump__i_p_Ca = 1.1499999999999999 * var_chaste_interface__calcium_dynamics__Cai / (0.00050000000000000001 + var_chaste_interface__calcium_dynamics__Cai); // microA_per_microF + const double d_dt_chaste_interface_var_calcium_dynamics__Cai = 0.001 * (-7.4312069233559624e-13 * (-var_Na_Ca_exchanger__i_NaCa + var_L_type_Ca_channel__i_CaCa + var_T_type_Ca_channel__i_Ca_T + var_calcium_background_current__i_Ca_b + var_sarcolemmal_calcium_pump__i_p_Ca) / var_ionic_concentrations__V_myo + (-var_calcium_dynamics__i_up + var_calcium_dynamics__i_leak) * var_calcium_dynamics__V_NSR / var_ionic_concentrations__V_myo + var_calcium_dynamics__V_JSR * var_calcium_dynamics__i_rel / var_ionic_concentrations__V_myo) / (1 + 0.00011900000000000002 / pow((0.0023800000000000002 + var_chaste_interface__calcium_dynamics__Cai), 2) + 3.5000000000000004e-5 / pow((0.00050000000000000001 + var_chaste_interface__calcium_dynamics__Cai), 2)); // millimolar / millisecond + + return d_dt_chaste_interface_var_calcium_dynamics__Cai; + } + + double Dynamicviswanathan_model_1999_epiFromCellMLGRL2Opt::EvaluatePartialDerivative1(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -88.984 + double var_chaste_interface__calcium_dynamics__Cai = rY[1]; + // Units: millimolar; Initial value: 0.00035237 + double var_chaste_interface__L_type_Ca_channel_d_gate__d = rY[5]; + // Units: dimensionless; Initial value: 3.18355e-06 + double var_chaste_interface__L_type_Ca_channel_f_gate__f = rY[6]; + // Units: dimensionless; Initial value: 0.9974388 + double var_chaste_interface__T_type_Ca_channel_b_gate__b = rY[7]; + // Units: dimensionless; Initial value: 0.000967785 + double var_chaste_interface__T_type_Ca_channel_g_gate__g = rY[8]; + // Units: dimensionless; Initial value: 0.95331988 + double var_chaste_interface__calcium_dynamics__Ca_JSR = rY[14]; + // Units: millimolar; Initial value: 0.817895 + double var_chaste_interface__calcium_dynamics__Ca_NSR = rY[15]; + // Units: millimolar; Initial value: 2.797668 + double var_chaste_interface__calcium_dynamics__APtrack2 = rY[17]; + // Units: dimensionless; Initial value: 2.1084e-86 + double var_chaste_interface__calcium_dynamics__Cainfluxtrack = rY[19]; + // Units: dimensionless; Initial value: 1.784e-87 + double var_chaste_interface__calcium_dynamics__OVRLDtrack2 = rY[21]; + // Units: dimensionless; Initial value: 0.0 + double var_chaste_interface__ionic_concentrations__Nai = rY[23]; + // Units: millimolar; Initial value: 15.6748357 + + + // Lookup table indexing + const bool _oob_0 = Dynamicviswanathan_model_1999_epiFromCellMLGRL2Opt_LookupTables::Instance()->CheckIndex0(var_chaste_interface__membrane__V); +// LCOV_EXCL_START + if (_oob_0) + EXCEPTION(DumpState("membrane_voltage outside lookup table range", rY , var_chaste_interface__environment__time_converted)); +// LCOV_EXCL_STOP + const double* const _lt_0_row = Dynamicviswanathan_model_1999_epiFromCellMLGRL2Opt_LookupTables::Instance()->IndexTable0(var_chaste_interface__membrane__V); + + const double var_x0 = 1 / var_chaste_interface__calcium_dynamics__Cai; + const double var_x6 = 0.018717941753901308 * var_chaste_interface__membrane__V; + const double var_x7 = exp(var_x6); + const double var_x8 = pow(var_chaste_interface__ionic_concentrations__Nai, 3) * mParameters[0]; + const double var_x9 = var_x7 * var_x8; + const double var_x10 = exp(-var_x6); + const double var_x11 = pow(mParameters[2], 3); + const double var_x12 = var_x11 * var_chaste_interface__calcium_dynamics__Cai; + const double var_x13 = var_x10 * var_x12; + const double var_x15 = 1 / (1 + 144.92753623188406 * var_chaste_interface__calcium_dynamics__Cai); + const double var_x16 = 1 + 0.001 * var_x12 + 0.001 * var_x8; + const double var_x17 = 1 / var_x16; + const double var_x18 = var_x15 * var_x17; + const double var_x19 = 0.002 * var_x18; + const double var_x33 = pow(var_chaste_interface__T_type_Ca_channel_b_gate__b, 2); + const double var_x34 = var_x33 * var_chaste_interface__T_type_Ca_channel_g_gate__g; + const double var_x35 = 0.050000000000000003 * var_x34; + const double var_x36 = 1 / (1 + 1666.6666666666667 * var_chaste_interface__calcium_dynamics__Cai); + const double var_x37 = var_x36 * var_chaste_interface__L_type_Ca_channel_f_gate__f; + const double var_x38 = var_x37 * var_chaste_interface__L_type_Ca_channel_d_gate__d; + const double var_x39 = _lt_0_row[0]; + const double var_x40 = -1 + var_x39; + const double var_x41 = 1 / var_x40; + const double var_x42 = var_x39 * var_chaste_interface__calcium_dynamics__Cai; + const double var_x43 = var_x42 - 0.34100000000000003 * mParameters[0]; + const double var_x44 = var_x41 * var_x43; + const double var_x45 = 7.8019226357407252 * var_x44; + const double var_x46 = var_x38 * var_x45; + const double var_x47 = var_x38 * var_chaste_interface__membrane__V; + const double var_x48 = var_x41 * var_x47; + const double var_x106 = var_chaste_interface__L_type_Ca_channel_d_gate__d * var_chaste_interface__membrane__V; + const double var_x107 = var_x106 * var_chaste_interface__L_type_Ca_channel_f_gate__f / pow((0.00059999999999999995 + var_chaste_interface__calcium_dynamics__Cai), 2); + const double var_x110 = 0.00050000000000000001 + var_chaste_interface__calcium_dynamics__Cai; + const double var_x111 = 1 / var_x110; + const double var_x112 = pow(var_x110, (-2)); + const double var_x113 = 1.1499999999999999 * var_x112 * var_chaste_interface__calcium_dynamics__Cai; + const double var_x114 = 0.0046811535814444347 * var_x107 * var_x44; + const double var_x118 = var_x9 - var_x13; + const double var_x119 = var_x118 * var_x17 / pow((0.0068999999999999999 + var_chaste_interface__calcium_dynamics__Cai), 2); + const double var_x120 = var_x10 * var_x11; + const double var_x121 = pow(var_x16, (-2)); + const double var_x122 = var_x118 * var_x121 * var_x15; + const double var_x123 = var_x11 * var_x122; + const double var_x124 = 1.38e-5 * var_x119 + 1.9999999999999999e-6 * var_x123 + var_x120 * var_x19; + const double var_x136 = log(var_x0 * mParameters[0]); + const double var_x137 = -13.356169352749133 * var_x136 + var_chaste_interface__membrane__V; + const double var_x155 = 0.0023800000000000002 + var_chaste_interface__calcium_dynamics__Cai; + const double var_x156 = 1 + 0.00011900000000000002 / pow(var_x155, 2) + 3.5000000000000004e-5 * var_x112; + const double var_x157 = 1 / var_x156; + const double var_x158 = 1 / M_PI; + const double var_x161 = 0.00062 + var_chaste_interface__calcium_dynamics__Cainfluxtrack; + const double var_x162 = 1 / var_x161; + const double var_x163 = 1 - var_chaste_interface__calcium_dynamics__APtrack2; + const double var_x164 = -0.00018000000000000001 + var_chaste_interface__calcium_dynamics__Cainfluxtrack; + const double var_x165 = 60000 * var_x162 * var_x163 * var_x164 * var_chaste_interface__calcium_dynamics__APtrack2; + const double var_x166 = var_chaste_interface__calcium_dynamics__Cainfluxtrack > 0.00018000000000000001; + const double var_x167 = 4000 * var_chaste_interface__calcium_dynamics__OVRLDtrack2; + const double var_x168 = -4000 + var_x167; + const double var_x169 = var_chaste_interface__calcium_dynamics__OVRLDtrack2 > 0; + const double var_x170 = ((var_x166) ? (-var_x165) : ((var_x169) ? (var_x168 * var_chaste_interface__calcium_dynamics__OVRLDtrack2) : (0))); + const double var_x171 = 0.00092000000000000003 + var_chaste_interface__calcium_dynamics__Cai; + const double var_x172 = 1 / var_x171; + const double var_x173 = 0.40588235294117642 * var_x172; + const double var_x174 = var_chaste_interface__calcium_dynamics__Cai / pow(var_x171, 2); + const double var_x175 = 1.1499999999999999 * var_x111; + const double var_x176 = var_x124 + var_x175 - var_x113 - var_x114 + 0.040282206767891383 * var_x0 + 7.8019226357407252 * var_x39 * var_x48 + 0.6678084676374566 * var_x0 * var_x34; + const double var_x177 = 0.090316078310111333 * var_x158; + const double var_x178 = -var_chaste_interface__calcium_dynamics__Cai + var_chaste_interface__calcium_dynamics__Ca_JSR; + const double var_x179 = ((var_x166) ? (var_x165 * var_x178) : ((var_x169) ? (var_x167 * var_x178 * (1 - var_chaste_interface__calcium_dynamics__OVRLDtrack2)) : (0))); + const double var_x180 = var_x118 * var_x19; + const double var_x181 = -0.040282206767891383 * var_x136 + var_x137 * var_x35 + var_x175 * var_chaste_interface__calcium_dynamics__Cai + var_x46 * var_chaste_interface__membrane__V; + + partialF = 0.001 * var_x157 * (-var_x173 + 0.40588235294117642 * var_x174 + 0.0070588235294117632 * var_x170 - var_x176 * var_x177) + 0.001 * (0.00023800000000000004 / pow(var_x155, 3) + 7.0000000000000007e-5 / pow(var_x110, 3)) * (0.027058823529411764 * var_chaste_interface__calcium_dynamics__Ca_NSR + 0.0070588235294117632 * var_x179 - var_x173 * var_chaste_interface__calcium_dynamics__Cai - var_x177 * (var_x181 - var_x180 + 0.003016 * var_chaste_interface__membrane__V)) / pow(var_x156, 2); + } + else + { + const double y_save = rY[1]; + rY[1] += delta; + const double temp = EvaluateYDerivative1(var_chaste_interface__environment__time_converted, rY); + partialF = (temp-mEvalF[1])/delta; + rY[1] = y_save; + } + return partialF; + } + double Dynamicviswanathan_model_1999_epiFromCellMLGRL2Opt::EvaluateYDerivative2(double var_chaste_interface__environment__time_converted, std::vector& rY) + { + + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -88.984 + double var_chaste_interface__fast_sodium_current_m_gate__m = rY[2]; + // Units: dimensionless; Initial value: 0.00079287 + + + // Lookup table indexing + const bool _oob_0 = Dynamicviswanathan_model_1999_epiFromCellMLGRL2Opt_LookupTables::Instance()->CheckIndex0(var_chaste_interface__membrane__V); +// LCOV_EXCL_START + if (_oob_0) + EXCEPTION(DumpState("membrane_voltage outside lookup table range", rY , var_chaste_interface__environment__time_converted)); +// LCOV_EXCL_STOP + const double* const _lt_0_row = Dynamicviswanathan_model_1999_epiFromCellMLGRL2Opt_LookupTables::Instance()->IndexTable0(var_chaste_interface__membrane__V); + + // Mathematics + const double d_dt_chaste_interface_var_fast_sodium_current_m_gate__m = 0.001 * (1 - var_chaste_interface__fast_sodium_current_m_gate__m) * _lt_0_row[19] - 0.080000000000000002 * var_chaste_interface__fast_sodium_current_m_gate__m * _lt_0_row[20]; // 1 / millisecond + + return d_dt_chaste_interface_var_fast_sodium_current_m_gate__m; + } + + double Dynamicviswanathan_model_1999_epiFromCellMLGRL2Opt::EvaluatePartialDerivative2(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -88.984 + + + // Lookup table indexing + const bool _oob_0 = Dynamicviswanathan_model_1999_epiFromCellMLGRL2Opt_LookupTables::Instance()->CheckIndex0(var_chaste_interface__membrane__V); +// LCOV_EXCL_START + if (_oob_0) + EXCEPTION(DumpState("membrane_voltage outside lookup table range", rY , var_chaste_interface__environment__time_converted)); +// LCOV_EXCL_STOP + const double* const _lt_0_row = Dynamicviswanathan_model_1999_epiFromCellMLGRL2Opt_LookupTables::Instance()->IndexTable0(var_chaste_interface__membrane__V); + + const double var_x194 = _lt_0_row[20]; + const double var_x197 = 0.10000000000000001 * var_chaste_interface__membrane__V; + const double var_x198 = exp(-4.7130000000000001 - var_x197); + const double var_x199 = 1 - var_x198; + const double var_x200 = 0.32000000000000001 / var_x199; + const double var_x201 = 47.130000000000003 + var_chaste_interface__membrane__V; + const double var_x202 = fabs(var_x201) >= 1.0000000000000001e-5; + const double var_x203 = 0.080000000000000002 * var_x194; + + partialF = ((var_x202) ? (-var_x203 - var_x200 * var_x201) : (-3.2000000000000002 - var_x203)); + } + else + { + const double y_save = rY[2]; + rY[2] += delta; + const double temp = EvaluateYDerivative2(var_chaste_interface__environment__time_converted, rY); + partialF = (temp-mEvalF[2])/delta; + rY[2] = y_save; + } + return partialF; + } + double Dynamicviswanathan_model_1999_epiFromCellMLGRL2Opt::EvaluateYDerivative3(double var_chaste_interface__environment__time_converted, std::vector& rY) + { + + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -88.984 + double var_chaste_interface__fast_sodium_current_h_gate__h = rY[3]; + // Units: dimensionless; Initial value: 0.9938 + + + // Lookup table indexing + const bool _oob_0 = Dynamicviswanathan_model_1999_epiFromCellMLGRL2Opt_LookupTables::Instance()->CheckIndex0(var_chaste_interface__membrane__V); +// LCOV_EXCL_START + if (_oob_0) + EXCEPTION(DumpState("membrane_voltage outside lookup table range", rY , var_chaste_interface__environment__time_converted)); +// LCOV_EXCL_STOP + const double* const _lt_0_row = Dynamicviswanathan_model_1999_epiFromCellMLGRL2Opt_LookupTables::Instance()->IndexTable0(var_chaste_interface__membrane__V); + + // Mathematics + const double d_dt_chaste_interface_var_fast_sodium_current_h_gate__h = 0.001 * (1 - var_chaste_interface__fast_sodium_current_h_gate__h) * _lt_0_row[15] - 0.001 * _lt_0_row[16] * var_chaste_interface__fast_sodium_current_h_gate__h; // 1 / millisecond + + return d_dt_chaste_interface_var_fast_sodium_current_h_gate__h; + } + + double Dynamicviswanathan_model_1999_epiFromCellMLGRL2Opt::EvaluatePartialDerivative3(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -88.984 + + + + const double var_x204 = exp(0.34999999999999998 * var_chaste_interface__membrane__V); + const double var_x205 = exp(0.079000000000000001 * var_chaste_interface__membrane__V); + const double var_x206 = exp(-11.764705882352942 - 0.14705882352941177 * var_chaste_interface__membrane__V); + const double var_x207 = var_chaste_interface__membrane__V < -40; + const double var_x208 = exp(-0.96036036036036043 - 0.0900900900900901 * var_chaste_interface__membrane__V); + const double var_x209 = 1 + var_x208; + + partialF = ((var_x207) ? (-310000 * var_x204 - 0.13500000000000001 * var_x206 - 3.5600000000000001 * var_x205) : (-7.6923076923076934 / var_x209)); + } + else + { + const double y_save = rY[3]; + rY[3] += delta; + const double temp = EvaluateYDerivative3(var_chaste_interface__environment__time_converted, rY); + partialF = (temp-mEvalF[3])/delta; + rY[3] = y_save; + } + return partialF; + } + double Dynamicviswanathan_model_1999_epiFromCellMLGRL2Opt::EvaluateYDerivative4(double var_chaste_interface__environment__time_converted, std::vector& rY) + { + + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -88.984 + double var_chaste_interface__fast_sodium_current_j_gate__j = rY[4]; + // Units: dimensionless; Initial value: 0.99573 + + + // Lookup table indexing + const bool _oob_0 = Dynamicviswanathan_model_1999_epiFromCellMLGRL2Opt_LookupTables::Instance()->CheckIndex0(var_chaste_interface__membrane__V); +// LCOV_EXCL_START + if (_oob_0) + EXCEPTION(DumpState("membrane_voltage outside lookup table range", rY , var_chaste_interface__environment__time_converted)); +// LCOV_EXCL_STOP + const double* const _lt_0_row = Dynamicviswanathan_model_1999_epiFromCellMLGRL2Opt_LookupTables::Instance()->IndexTable0(var_chaste_interface__membrane__V); + + // Mathematics + const double d_dt_chaste_interface_var_fast_sodium_current_j_gate__j = 0.001 * (1 - var_chaste_interface__fast_sodium_current_j_gate__j) * _lt_0_row[17] - 0.001 * _lt_0_row[18] * var_chaste_interface__fast_sodium_current_j_gate__j; // 1 / millisecond + + return d_dt_chaste_interface_var_fast_sodium_current_j_gate__j; + } + + double Dynamicviswanathan_model_1999_epiFromCellMLGRL2Opt::EvaluatePartialDerivative4(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -88.984 + + + + const double var_x197 = 0.10000000000000001 * var_chaste_interface__membrane__V; + const double var_x207 = var_chaste_interface__membrane__V < -40; + const double var_x211 = exp(0.24440000000000001 * var_chaste_interface__membrane__V); + const double var_x212 = exp(-0.043909999999999998 * var_chaste_interface__membrane__V); + const double var_x213 = -127140 * var_x211 - 3.4740000000000003e-5 * var_x212; + const double var_x215 = exp(24.640530000000002 + 0.311 * var_chaste_interface__membrane__V); + const double var_x216 = 1 + var_x215; + const double var_x217 = 1 / var_x216; + const double var_x218 = exp(-5.5312920000000005 - 0.13780000000000001 * var_chaste_interface__membrane__V); + const double var_x219 = 1 + var_x218; + const double var_x220 = exp(-0.01052 * var_chaste_interface__membrane__V); + const double var_x221 = var_x220 / var_x219; + const double var_x222 = 37.780000000000001 + var_chaste_interface__membrane__V; + const double var_x223 = var_x217 * var_x222; + const double var_x224 = exp(-3.2000000000000002 - var_x197); + const double var_x225 = 1 + var_x224; + const double var_x226 = exp(-2.5349999999999999e-7 * var_chaste_interface__membrane__V); + const double var_x227 = var_x226 / var_x225; + + partialF = ((var_x207) ? (-0.1212 * var_x221 - var_x213 * var_x223) : (-0.29999999999999999 * var_x227)); + } + else + { + const double y_save = rY[4]; + rY[4] += delta; + const double temp = EvaluateYDerivative4(var_chaste_interface__environment__time_converted, rY); + partialF = (temp-mEvalF[4])/delta; + rY[4] = y_save; + } + return partialF; + } + double Dynamicviswanathan_model_1999_epiFromCellMLGRL2Opt::EvaluateYDerivative5(double var_chaste_interface__environment__time_converted, std::vector& rY) + { + + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -88.984 + double var_chaste_interface__L_type_Ca_channel_d_gate__d = rY[5]; + // Units: dimensionless; Initial value: 3.18355e-06 + + + + // Mathematics + const double var_L_type_Ca_channel_d_gate__E0_d = 10 + var_chaste_interface__membrane__V; // millivolt + const double var_L_type_Ca_channel_d_gate__d_infinity = 1 / (1 + exp(-0.16025641025641024 * var_L_type_Ca_channel_d_gate__E0_d)); // dimensionless + const double var_L_type_Ca_channel_d_gate__tau_d = ((fabs(var_L_type_Ca_channel_d_gate__E0_d) < 1.0000000000000001e-5) ? (0.0045787545787545781) : (0.028571428571428571 * (1 - exp(-0.16025641025641024 * var_L_type_Ca_channel_d_gate__E0_d)) * var_L_type_Ca_channel_d_gate__d_infinity / var_L_type_Ca_channel_d_gate__E0_d)); // second + const double d_dt_chaste_interface_var_L_type_Ca_channel_d_gate__d = 0.001 * (1 - var_chaste_interface__L_type_Ca_channel_d_gate__d) * var_L_type_Ca_channel_d_gate__d_infinity / var_L_type_Ca_channel_d_gate__tau_d - 0.001 * (1 - var_L_type_Ca_channel_d_gate__d_infinity) * var_chaste_interface__L_type_Ca_channel_d_gate__d / var_L_type_Ca_channel_d_gate__tau_d; // 1 / millisecond + + return d_dt_chaste_interface_var_L_type_Ca_channel_d_gate__d; + } + + double Dynamicviswanathan_model_1999_epiFromCellMLGRL2Opt::EvaluatePartialDerivative5(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -88.984 + + + + const double var_x228 = exp(-1.6025641025641024 - 0.16025641025641024 * var_chaste_interface__membrane__V); + const double var_x229 = 1 + var_x228; + const double var_x230 = 1 / var_x229; + const double var_x231 = -0.001 + 0.001 * var_x230; + const double var_x232 = 10 + var_chaste_interface__membrane__V; + const double var_x233 = fabs(var_x232) < 1.0000000000000001e-5; + const double var_x234 = 1 - var_x228; + const double var_x235 = 1 / var_x234; + const double var_x239 = 0.001 * var_x230; + const double var_x240 = ((var_x233) ? (218.40000000000003) : (35 * var_x229 * var_x232 * var_x235)); + + partialF = var_x231 * var_x240 - var_x239 * var_x240; + } + else + { + const double y_save = rY[5]; + rY[5] += delta; + const double temp = EvaluateYDerivative5(var_chaste_interface__environment__time_converted, rY); + partialF = (temp-mEvalF[5])/delta; + rY[5] = y_save; + } + return partialF; + } + double Dynamicviswanathan_model_1999_epiFromCellMLGRL2Opt::EvaluateYDerivative6(double var_chaste_interface__environment__time_converted, std::vector& rY) + { + + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -88.984 + double var_chaste_interface__L_type_Ca_channel_f_gate__f = rY[6]; + // Units: dimensionless; Initial value: 0.9974388 + + + // Lookup table indexing + const bool _oob_0 = Dynamicviswanathan_model_1999_epiFromCellMLGRL2Opt_LookupTables::Instance()->CheckIndex0(var_chaste_interface__membrane__V); +// LCOV_EXCL_START + if (_oob_0) + EXCEPTION(DumpState("membrane_voltage outside lookup table range", rY , var_chaste_interface__environment__time_converted)); +// LCOV_EXCL_STOP + const double* const _lt_0_row = Dynamicviswanathan_model_1999_epiFromCellMLGRL2Opt_LookupTables::Instance()->IndexTable0(var_chaste_interface__membrane__V); + + // Mathematics + const double var_L_type_Ca_channel_f_gate__f_infinity = _lt_0_row[10]; // dimensionless + const double var_L_type_Ca_channel_f_gate__tau_f = _lt_0_row[11]; // second + const double d_dt_chaste_interface_var_L_type_Ca_channel_f_gate__f = 0.001 * (1 - var_chaste_interface__L_type_Ca_channel_f_gate__f) * var_L_type_Ca_channel_f_gate__f_infinity / var_L_type_Ca_channel_f_gate__tau_f - 0.001 * (1 - var_L_type_Ca_channel_f_gate__f_infinity) * var_chaste_interface__L_type_Ca_channel_f_gate__f / var_L_type_Ca_channel_f_gate__tau_f; // 1 / millisecond + + return d_dt_chaste_interface_var_L_type_Ca_channel_f_gate__f; + } + + double Dynamicviswanathan_model_1999_epiFromCellMLGRL2Opt::EvaluatePartialDerivative6(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -88.984 + + + + const double var_x242 = exp(-0.113569 * pow((1 + 0.10000000000000001 * var_chaste_interface__membrane__V), 2)); + const double var_x245 = exp(4 + 0.125 * var_chaste_interface__membrane__V); + const double var_x246 = 1 + var_x245; + const double var_x247 = exp(2.5 - 0.050000000000000003 * var_chaste_interface__membrane__V); + const double var_x248 = 1 + var_x247; + const double var_x250 = 0.019699999999999999 * var_x242; + const double var_x251 = -0.02 - var_x250; + const double var_x252 = 1 / var_x246 + 0.59999999999999998 / var_x248; + const double var_x254 = 1 - var_x252; + + partialF = var_x251 * var_x252 + var_x251 * var_x254; + } + else + { + const double y_save = rY[6]; + rY[6] += delta; + const double temp = EvaluateYDerivative6(var_chaste_interface__environment__time_converted, rY); + partialF = (temp-mEvalF[6])/delta; + rY[6] = y_save; + } + return partialF; + } + double Dynamicviswanathan_model_1999_epiFromCellMLGRL2Opt::EvaluateYDerivative7(double var_chaste_interface__environment__time_converted, std::vector& rY) + { + + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -88.984 + double var_chaste_interface__T_type_Ca_channel_b_gate__b = rY[7]; + // Units: dimensionless; Initial value: 0.000967785 + + + // Lookup table indexing + const bool _oob_0 = Dynamicviswanathan_model_1999_epiFromCellMLGRL2Opt_LookupTables::Instance()->CheckIndex0(var_chaste_interface__membrane__V); +// LCOV_EXCL_START + if (_oob_0) + EXCEPTION(DumpState("membrane_voltage outside lookup table range", rY , var_chaste_interface__environment__time_converted)); +// LCOV_EXCL_STOP + const double* const _lt_0_row = Dynamicviswanathan_model_1999_epiFromCellMLGRL2Opt_LookupTables::Instance()->IndexTable0(var_chaste_interface__membrane__V); + + // Mathematics + const double d_dt_chaste_interface_var_T_type_Ca_channel_b_gate__b = 0.001 * (-var_chaste_interface__T_type_Ca_channel_b_gate__b + _lt_0_row[12]) / (_lt_0_row[13]); // 1 / millisecond + + return d_dt_chaste_interface_var_T_type_Ca_channel_b_gate__b; + } + + double Dynamicviswanathan_model_1999_epiFromCellMLGRL2Opt::EvaluatePartialDerivative7(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -88.984 + + + + const double var_x257 = exp(5.5555555555555554 + 0.22222222222222221 * var_chaste_interface__membrane__V); + const double var_x258 = 1 + var_x257; + const double var_x259 = 1 / var_x258; + const double var_x260 = 1 / (0.0037000000000000002 + 0.0061000000000000004 * var_x259); + + partialF = -0.001 * var_x260; + } + else + { + const double y_save = rY[7]; + rY[7] += delta; + const double temp = EvaluateYDerivative7(var_chaste_interface__environment__time_converted, rY); + partialF = (temp-mEvalF[7])/delta; + rY[7] = y_save; + } + return partialF; + } + double Dynamicviswanathan_model_1999_epiFromCellMLGRL2Opt::EvaluateYDerivative8(double var_chaste_interface__environment__time_converted, std::vector& rY) + { + + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -88.984 + double var_chaste_interface__T_type_Ca_channel_g_gate__g = rY[8]; + // Units: dimensionless; Initial value: 0.95331988 + + + // Lookup table indexing + const bool _oob_0 = Dynamicviswanathan_model_1999_epiFromCellMLGRL2Opt_LookupTables::Instance()->CheckIndex0(var_chaste_interface__membrane__V); +// LCOV_EXCL_START + if (_oob_0) + EXCEPTION(DumpState("membrane_voltage outside lookup table range", rY , var_chaste_interface__environment__time_converted)); +// LCOV_EXCL_STOP + const double* const _lt_0_row = Dynamicviswanathan_model_1999_epiFromCellMLGRL2Opt_LookupTables::Instance()->IndexTable0(var_chaste_interface__membrane__V); + + // Mathematics + const double d_dt_chaste_interface_var_T_type_Ca_channel_g_gate__g = 0.001 * (-var_chaste_interface__T_type_Ca_channel_g_gate__g + _lt_0_row[14]) * ((var_chaste_interface__membrane__V <= 0) ? (1 / (0.012 - 0.00087500000000000002 * var_chaste_interface__membrane__V)) : (83.333333333333329)); // 1 / millisecond + + return d_dt_chaste_interface_var_T_type_Ca_channel_g_gate__g; + } + + double Dynamicviswanathan_model_1999_epiFromCellMLGRL2Opt::EvaluatePartialDerivative8(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -88.984 + + + + const double var_x263 = 1 / (0.012 - 0.00087500000000000002 * var_chaste_interface__membrane__V); + const double var_x265 = var_chaste_interface__membrane__V <= 0; + + partialF = ((var_x265) ? (-0.001 * var_x263) : (-0.083333333333333329)); + } + else + { + const double y_save = rY[8]; + rY[8] += delta; + const double temp = EvaluateYDerivative8(var_chaste_interface__environment__time_converted, rY); + partialF = (temp-mEvalF[8])/delta; + rY[8] = y_save; + } + return partialF; + } + double Dynamicviswanathan_model_1999_epiFromCellMLGRL2Opt::EvaluateYDerivative9(double var_chaste_interface__environment__time_converted, std::vector& rY) + { + + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -88.984 + double var_chaste_interface__rapid_delayed_rectifier_potassium_current_xr_gate__xr = rY[9]; + // Units: dimensionless; Initial value: 0.00032151644 + + + // Lookup table indexing + const bool _oob_0 = Dynamicviswanathan_model_1999_epiFromCellMLGRL2Opt_LookupTables::Instance()->CheckIndex0(var_chaste_interface__membrane__V); +// LCOV_EXCL_START + if (_oob_0) + EXCEPTION(DumpState("membrane_voltage outside lookup table range", rY , var_chaste_interface__environment__time_converted)); +// LCOV_EXCL_STOP + const double* const _lt_0_row = Dynamicviswanathan_model_1999_epiFromCellMLGRL2Opt_LookupTables::Instance()->IndexTable0(var_chaste_interface__membrane__V); + + // Mathematics + const double d_dt_chaste_interface_var_rapid_delayed_rectifier_potassium_current_xr_gate__xr = 0.001 * (-var_chaste_interface__rapid_delayed_rectifier_potassium_current_xr_gate__xr + _lt_0_row[21]) * (_lt_0_row[22]); // 1 / millisecond + + return d_dt_chaste_interface_var_rapid_delayed_rectifier_potassium_current_xr_gate__xr; + } + + double Dynamicviswanathan_model_1999_epiFromCellMLGRL2Opt::EvaluatePartialDerivative9(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -88.984 + + + + const double var_x268 = exp(5.6404999999999994 + 0.14499999999999999 * var_chaste_interface__membrane__V); + const double var_x269 = -1 + var_x268; + const double var_x270 = 1 / var_x269; + const double var_x271 = exp(-1.7465999999999999 - 0.123 * var_chaste_interface__membrane__V); + const double var_x272 = 1 - var_x271; + const double var_x273 = 1 / var_x272; + const double var_x274 = 14.199999999999999 + var_chaste_interface__membrane__V; + const double var_x275 = 38.899999999999999 + var_chaste_interface__membrane__V; + + partialF = -0.0013799999999999999 * var_x273 * var_x274 - 0.00060999999999999997 * var_x270 * var_x275; + } + else + { + const double y_save = rY[9]; + rY[9] += delta; + const double temp = EvaluateYDerivative9(var_chaste_interface__environment__time_converted, rY); + partialF = (temp-mEvalF[9])/delta; + rY[9] = y_save; + } + return partialF; + } + double Dynamicviswanathan_model_1999_epiFromCellMLGRL2Opt::EvaluateYDerivative10(double var_chaste_interface__environment__time_converted, std::vector& rY) + { + + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -88.984 + double var_chaste_interface__slow_delayed_rectifier_potassium_current_xs1_gate__xs1 = rY[10]; + // Units: dimensionless; Initial value: 0.0272635 + + + // Lookup table indexing + const bool _oob_0 = Dynamicviswanathan_model_1999_epiFromCellMLGRL2Opt_LookupTables::Instance()->CheckIndex0(var_chaste_interface__membrane__V); +// LCOV_EXCL_START + if (_oob_0) + EXCEPTION(DumpState("membrane_voltage outside lookup table range", rY , var_chaste_interface__environment__time_converted)); +// LCOV_EXCL_STOP + const double* const _lt_0_row = Dynamicviswanathan_model_1999_epiFromCellMLGRL2Opt_LookupTables::Instance()->IndexTable0(var_chaste_interface__membrane__V); + + // Mathematics + const double d_dt_chaste_interface_var_slow_delayed_rectifier_potassium_current_xs1_gate__xs1 = 0.001 * (-var_chaste_interface__slow_delayed_rectifier_potassium_current_xs1_gate__xs1 + _lt_0_row[23]) * (_lt_0_row[24]); // 1 / millisecond + + return d_dt_chaste_interface_var_slow_delayed_rectifier_potassium_current_xs1_gate__xs1; + } + + double Dynamicviswanathan_model_1999_epiFromCellMLGRL2Opt::EvaluatePartialDerivative10(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -88.984 + + + + const double var_x279 = exp(2.0609999999999999 + 0.068699999999999997 * var_chaste_interface__membrane__V); + const double var_x280 = -1 + var_x279; + const double var_x281 = 1 / var_x280; + const double var_x282 = exp(-4.4399999999999995 - 0.14799999999999999 * var_chaste_interface__membrane__V); + const double var_x283 = 1 - var_x282; + const double var_x284 = 1 / var_x283; + const double var_x285 = 30 + var_chaste_interface__membrane__V; + const double var_x289 = var_x281 * var_x285; + const double var_x290 = var_x284 * var_x285; + + partialF = -0.00013100000000000001 * var_x289 - 7.1899999999999999e-5 * var_x290; + } + else + { + const double y_save = rY[10]; + rY[10] += delta; + const double temp = EvaluateYDerivative10(var_chaste_interface__environment__time_converted, rY); + partialF = (temp-mEvalF[10])/delta; + rY[10] = y_save; + } + return partialF; + } + double Dynamicviswanathan_model_1999_epiFromCellMLGRL2Opt::EvaluateYDerivative11(double var_chaste_interface__environment__time_converted, std::vector& rY) + { + + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -88.984 + double var_chaste_interface__slow_delayed_rectifier_potassium_current_xs2_gate__xs2 = rY[11]; + // Units: dimensionless; Initial value: 0.0631269 + + + // Lookup table indexing + const bool _oob_0 = Dynamicviswanathan_model_1999_epiFromCellMLGRL2Opt_LookupTables::Instance()->CheckIndex0(var_chaste_interface__membrane__V); +// LCOV_EXCL_START + if (_oob_0) + EXCEPTION(DumpState("membrane_voltage outside lookup table range", rY , var_chaste_interface__environment__time_converted)); +// LCOV_EXCL_STOP + const double* const _lt_0_row = Dynamicviswanathan_model_1999_epiFromCellMLGRL2Opt_LookupTables::Instance()->IndexTable0(var_chaste_interface__membrane__V); + + // Mathematics + const double d_dt_chaste_interface_var_slow_delayed_rectifier_potassium_current_xs2_gate__xs2 = 0.001 * (-var_chaste_interface__slow_delayed_rectifier_potassium_current_xs2_gate__xs2 + _lt_0_row[23]) * (_lt_0_row[25]); // 1 / millisecond + + return d_dt_chaste_interface_var_slow_delayed_rectifier_potassium_current_xs2_gate__xs2; + } + + double Dynamicviswanathan_model_1999_epiFromCellMLGRL2Opt::EvaluatePartialDerivative11(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -88.984 + + + + const double var_x279 = exp(2.0609999999999999 + 0.068699999999999997 * var_chaste_interface__membrane__V); + const double var_x280 = -1 + var_x279; + const double var_x281 = 1 / var_x280; + const double var_x282 = exp(-4.4399999999999995 - 0.14799999999999999 * var_chaste_interface__membrane__V); + const double var_x283 = 1 - var_x282; + const double var_x284 = 1 / var_x283; + const double var_x285 = 30 + var_chaste_interface__membrane__V; + const double var_x289 = var_x281 * var_x285; + const double var_x290 = var_x284 * var_x285; + + partialF = -3.2750000000000003e-5 * var_x289 - 1.7975e-5 * var_x290; + } + else + { + const double y_save = rY[11]; + rY[11] += delta; + const double temp = EvaluateYDerivative11(var_chaste_interface__environment__time_converted, rY); + partialF = (temp-mEvalF[11])/delta; + rY[11] = y_save; + } + return partialF; + } + double Dynamicviswanathan_model_1999_epiFromCellMLGRL2Opt::EvaluateYDerivative12(double var_chaste_interface__environment__time_converted, std::vector& rY) + { + + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -88.984 + double var_chaste_interface__transient_outward_current_zdv_gate__zdv = rY[12]; + // Units: dimensionless; Initial value: 0.011528 + + + // Lookup table indexing + const bool _oob_0 = Dynamicviswanathan_model_1999_epiFromCellMLGRL2Opt_LookupTables::Instance()->CheckIndex0(var_chaste_interface__membrane__V); +// LCOV_EXCL_START + if (_oob_0) + EXCEPTION(DumpState("membrane_voltage outside lookup table range", rY , var_chaste_interface__environment__time_converted)); +// LCOV_EXCL_STOP + const double* const _lt_0_row = Dynamicviswanathan_model_1999_epiFromCellMLGRL2Opt_LookupTables::Instance()->IndexTable0(var_chaste_interface__membrane__V); + + // Mathematics + const double var_transient_outward_current_zdv_gate__alpha_zdv = _lt_0_row[28]; // per_second + const double var_transient_outward_current_zdv_gate__beta_zdv = _lt_0_row[29]; // per_second + const double d_dt_chaste_interface_var_transient_outward_current_zdv_gate__zdv = 0.001 * (-var_chaste_interface__transient_outward_current_zdv_gate__zdv + var_transient_outward_current_zdv_gate__alpha_zdv / (var_transient_outward_current_zdv_gate__alpha_zdv + var_transient_outward_current_zdv_gate__beta_zdv)) * (var_transient_outward_current_zdv_gate__alpha_zdv + var_transient_outward_current_zdv_gate__beta_zdv); // 1 / millisecond + + return d_dt_chaste_interface_var_transient_outward_current_zdv_gate__zdv; + } + + double Dynamicviswanathan_model_1999_epiFromCellMLGRL2Opt::EvaluatePartialDerivative12(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -88.984 + + + + const double var_x291 = 0.040000000000000001 * var_chaste_interface__membrane__V; + const double var_x292 = exp(-1.6000000000000001 + var_x291); + const double var_x293 = 1 + var_x292; + const double var_x294 = 1 / var_x293; + const double var_x295 = var_x292 * var_x294; + const double var_x296 = exp(-3.6000000000000001 - var_x291); + const double var_x297 = 1 + var_x296; + const double var_x298 = var_x296 / var_x297; + + partialF = -10 * var_x295 - 10 * var_x298; + } + else + { + const double y_save = rY[12]; + rY[12] += delta; + const double temp = EvaluateYDerivative12(var_chaste_interface__environment__time_converted, rY); + partialF = (temp-mEvalF[12])/delta; + rY[12] = y_save; + } + return partialF; + } + double Dynamicviswanathan_model_1999_epiFromCellMLGRL2Opt::EvaluateYDerivative13(double var_chaste_interface__environment__time_converted, std::vector& rY) + { + + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -88.984 + double var_chaste_interface__transient_outward_current_ydv_gate__ydv = rY[13]; + // Units: dimensionless; Initial value: 0.985232 + + + // Lookup table indexing + const bool _oob_0 = Dynamicviswanathan_model_1999_epiFromCellMLGRL2Opt_LookupTables::Instance()->CheckIndex0(var_chaste_interface__membrane__V); +// LCOV_EXCL_START + if (_oob_0) + EXCEPTION(DumpState("membrane_voltage outside lookup table range", rY , var_chaste_interface__environment__time_converted)); +// LCOV_EXCL_STOP + const double* const _lt_0_row = Dynamicviswanathan_model_1999_epiFromCellMLGRL2Opt_LookupTables::Instance()->IndexTable0(var_chaste_interface__membrane__V); + + // Mathematics + const double var_transient_outward_current_ydv_gate__alpha_ydv = _lt_0_row[26]; // per_second + const double var_transient_outward_current_ydv_gate__beta_ydv = _lt_0_row[27]; // per_second + const double d_dt_chaste_interface_var_transient_outward_current_ydv_gate__ydv = 0.001 * (-var_chaste_interface__transient_outward_current_ydv_gate__ydv + var_transient_outward_current_ydv_gate__alpha_ydv / (var_transient_outward_current_ydv_gate__alpha_ydv + var_transient_outward_current_ydv_gate__beta_ydv)) * (var_transient_outward_current_ydv_gate__alpha_ydv + var_transient_outward_current_ydv_gate__beta_ydv); // 1 / millisecond + + return d_dt_chaste_interface_var_transient_outward_current_ydv_gate__ydv; + } + + double Dynamicviswanathan_model_1999_epiFromCellMLGRL2Opt::EvaluatePartialDerivative13(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -88.984 + + + + const double var_x304 = 0.20000000000000001 * var_chaste_interface__membrane__V; + const double var_x305 = exp(12 + var_x304); + const double var_x306 = 1 + var_x305; + const double var_x307 = 1 / var_x306; + const double var_x308 = exp(5 + var_x304); + const double var_x309 = 1 + var_x308; + const double var_x310 = var_x308 / var_x309; + + partialF = -0.014999999999999999 * var_x307 - 0.10000000000000001 * var_x310; + } + else + { + const double y_save = rY[13]; + rY[13] += delta; + const double temp = EvaluateYDerivative13(var_chaste_interface__environment__time_converted, rY); + partialF = (temp-mEvalF[13])/delta; + rY[13] = y_save; + } + return partialF; + } + double Dynamicviswanathan_model_1999_epiFromCellMLGRL2Opt::EvaluateYDerivative14(double var_chaste_interface__environment__time_converted, std::vector& rY) + { + + double var_chaste_interface__calcium_dynamics__Cai = rY[1]; + // Units: millimolar; Initial value: 0.00035237 + double var_chaste_interface__calcium_dynamics__Ca_JSR = rY[14]; + // Units: millimolar; Initial value: 0.817895 + double var_chaste_interface__calcium_dynamics__Ca_NSR = rY[15]; + // Units: millimolar; Initial value: 2.797668 + double var_chaste_interface__calcium_dynamics__APtrack2 = rY[17]; + // Units: dimensionless; Initial value: 2.1084e-86 + double var_chaste_interface__calcium_dynamics__Cainfluxtrack = rY[19]; + // Units: dimensionless; Initial value: 1.784e-87 + double var_chaste_interface__calcium_dynamics__OVRLDtrack2 = rY[21]; + // Units: dimensionless; Initial value: 0.0 + + + + // Mathematics + const double var_calcium_dynamics__i_rel = (-var_chaste_interface__calcium_dynamics__Cai + var_chaste_interface__calcium_dynamics__Ca_JSR) * ((var_chaste_interface__calcium_dynamics__Cainfluxtrack > 0.00018000000000000001) ? (60000 * (1 - var_chaste_interface__calcium_dynamics__APtrack2) * (-0.00018000000000000001 + var_chaste_interface__calcium_dynamics__Cainfluxtrack) * var_chaste_interface__calcium_dynamics__APtrack2 / (0.00062 + var_chaste_interface__calcium_dynamics__Cainfluxtrack)) : ((var_chaste_interface__calcium_dynamics__OVRLDtrack2 > 0) ? (4000 * (1 - var_chaste_interface__calcium_dynamics__OVRLDtrack2) * var_chaste_interface__calcium_dynamics__OVRLDtrack2) : (0))); // millimolar_per_second + const double var_calcium_dynamics__i_tr = 5.5555555555555554 * var_chaste_interface__calcium_dynamics__Ca_NSR - 5.5555555555555554 * var_chaste_interface__calcium_dynamics__Ca_JSR; // millimolar_per_second + const double d_dt_chaste_interface_var_calcium_dynamics__Ca_JSR = 0.001 * (-var_calcium_dynamics__i_rel + var_calcium_dynamics__i_tr) / (1 + 8 / pow((0.80000000000000004 + var_chaste_interface__calcium_dynamics__Ca_JSR), 2)); // millimolar / millisecond + + return d_dt_chaste_interface_var_calcium_dynamics__Ca_JSR; + } + + double Dynamicviswanathan_model_1999_epiFromCellMLGRL2Opt::EvaluatePartialDerivative14(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__calcium_dynamics__Cai = rY[1]; + // Units: millimolar; Initial value: 0.00035237 + double var_chaste_interface__calcium_dynamics__Ca_JSR = rY[14]; + // Units: millimolar; Initial value: 0.817895 + double var_chaste_interface__calcium_dynamics__Ca_NSR = rY[15]; + // Units: millimolar; Initial value: 2.797668 + double var_chaste_interface__calcium_dynamics__APtrack2 = rY[17]; + // Units: dimensionless; Initial value: 2.1084e-86 + double var_chaste_interface__calcium_dynamics__Cainfluxtrack = rY[19]; + // Units: dimensionless; Initial value: 1.784e-87 + double var_chaste_interface__calcium_dynamics__OVRLDtrack2 = rY[21]; + // Units: dimensionless; Initial value: 0.0 + + + + const double var_x161 = 0.00062 + var_chaste_interface__calcium_dynamics__Cainfluxtrack; + const double var_x162 = 1 / var_x161; + const double var_x163 = 1 - var_chaste_interface__calcium_dynamics__APtrack2; + const double var_x164 = -0.00018000000000000001 + var_chaste_interface__calcium_dynamics__Cainfluxtrack; + const double var_x165 = 60000 * var_x162 * var_x163 * var_x164 * var_chaste_interface__calcium_dynamics__APtrack2; + const double var_x166 = var_chaste_interface__calcium_dynamics__Cainfluxtrack > 0.00018000000000000001; + const double var_x167 = 4000 * var_chaste_interface__calcium_dynamics__OVRLDtrack2; + const double var_x168 = -4000 + var_x167; + const double var_x169 = var_chaste_interface__calcium_dynamics__OVRLDtrack2 > 0; + const double var_x178 = -var_chaste_interface__calcium_dynamics__Cai + var_chaste_interface__calcium_dynamics__Ca_JSR; + const double var_x179 = ((var_x166) ? (var_x165 * var_x178) : ((var_x169) ? (var_x167 * var_x178 * (1 - var_chaste_interface__calcium_dynamics__OVRLDtrack2)) : (0))); + const double var_x187 = -var_x168; + const double var_x188 = ((var_x166) ? (var_x165) : ((var_x169) ? (var_x187 * var_chaste_interface__calcium_dynamics__OVRLDtrack2) : (0))); + const double var_x315 = 0.80000000000000004 + var_chaste_interface__calcium_dynamics__Ca_JSR; + const double var_x316 = pow(var_x315, (-2)); + const double var_x317 = 1 / (1 + 8 * var_x316); + const double var_x318 = 0.001 * var_x317; + + partialF = var_x318 * (-5.5555555555555554 - var_x188) + 0.00025000000000000001 * (-var_x179 + 5.5555555555555554 * var_chaste_interface__calcium_dynamics__Ca_NSR - 5.5555555555555554 * var_chaste_interface__calcium_dynamics__Ca_JSR) / (pow(var_x315, 3) * pow((0.125 + var_x316), 2)); + } + else + { + const double y_save = rY[14]; + rY[14] += delta; + const double temp = EvaluateYDerivative14(var_chaste_interface__environment__time_converted, rY); + partialF = (temp-mEvalF[14])/delta; + rY[14] = y_save; + } + return partialF; + } + double Dynamicviswanathan_model_1999_epiFromCellMLGRL2Opt::EvaluateYDerivative15(double var_chaste_interface__environment__time_converted, std::vector& rY) + { + + double var_chaste_interface__calcium_dynamics__Cai = rY[1]; + // Units: millimolar; Initial value: 0.00035237 + double var_chaste_interface__calcium_dynamics__Ca_JSR = rY[14]; + // Units: millimolar; Initial value: 0.817895 + double var_chaste_interface__calcium_dynamics__Ca_NSR = rY[15]; + // Units: millimolar; Initial value: 2.797668 + + + + // Mathematics + const double var_calcium_dynamics__i_leak = 0.33333333333333331 * var_chaste_interface__calcium_dynamics__Ca_NSR; // millimolar_per_second + const double var_calcium_dynamics__i_up = 5 * var_chaste_interface__calcium_dynamics__Cai / (0.00092000000000000003 + var_chaste_interface__calcium_dynamics__Cai); // millimolar_per_second + const double var_calcium_dynamics__i_tr = 5.5555555555555554 * var_chaste_interface__calcium_dynamics__Ca_NSR - 5.5555555555555554 * var_chaste_interface__calcium_dynamics__Ca_JSR; // millimolar_per_second + const double var_ionic_concentrations__V_myo = 8.2280000000000009e-12 * M_PI; // micro_litre + const double var_calcium_dynamics__V_JSR = 0.0070588235294117632 * var_ionic_concentrations__V_myo; // micro_litre + const double var_calcium_dynamics__V_NSR = 0.081176470588235281 * var_ionic_concentrations__V_myo; // micro_litre + const double d_dt_chaste_interface_var_calcium_dynamics__Ca_NSR = 0.001 * var_calcium_dynamics__i_up - 0.001 * var_calcium_dynamics__i_leak - 0.001 * var_calcium_dynamics__V_JSR * var_calcium_dynamics__i_tr / var_calcium_dynamics__V_NSR; // millimolar / millisecond + + return d_dt_chaste_interface_var_calcium_dynamics__Ca_NSR; + } + + double Dynamicviswanathan_model_1999_epiFromCellMLGRL2Opt::EvaluatePartialDerivative15(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + + + + + partialF = -0.00081642512077294684; + } + else + { + const double y_save = rY[15]; + rY[15] += delta; + const double temp = EvaluateYDerivative15(var_chaste_interface__environment__time_converted, rY); + partialF = (temp-mEvalF[15])/delta; + rY[15] = y_save; + } + return partialF; + } + double Dynamicviswanathan_model_1999_epiFromCellMLGRL2Opt::EvaluateYDerivative16(double var_chaste_interface__environment__time_converted, std::vector& rY) + { + + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -88.984 + double var_chaste_interface__calcium_dynamics__Cai = rY[1]; + // Units: millimolar; Initial value: 0.00035237 + double var_chaste_interface__fast_sodium_current_m_gate__m = rY[2]; + // Units: dimensionless; Initial value: 0.00079287 + double var_chaste_interface__fast_sodium_current_h_gate__h = rY[3]; + // Units: dimensionless; Initial value: 0.9938 + double var_chaste_interface__fast_sodium_current_j_gate__j = rY[4]; + // Units: dimensionless; Initial value: 0.99573 + double var_chaste_interface__L_type_Ca_channel_d_gate__d = rY[5]; + // Units: dimensionless; Initial value: 3.18355e-06 + double var_chaste_interface__L_type_Ca_channel_f_gate__f = rY[6]; + // Units: dimensionless; Initial value: 0.9974388 + double var_chaste_interface__T_type_Ca_channel_b_gate__b = rY[7]; + // Units: dimensionless; Initial value: 0.000967785 + double var_chaste_interface__T_type_Ca_channel_g_gate__g = rY[8]; + // Units: dimensionless; Initial value: 0.95331988 + double var_chaste_interface__rapid_delayed_rectifier_potassium_current_xr_gate__xr = rY[9]; + // Units: dimensionless; Initial value: 0.00032151644 + double var_chaste_interface__slow_delayed_rectifier_potassium_current_xs1_gate__xs1 = rY[10]; + // Units: dimensionless; Initial value: 0.0272635 + double var_chaste_interface__slow_delayed_rectifier_potassium_current_xs2_gate__xs2 = rY[11]; + // Units: dimensionless; Initial value: 0.0631269 + double var_chaste_interface__calcium_dynamics__APtrack = rY[16]; + // Units: dimensionless; Initial value: 3.814e-87 + double var_chaste_interface__ionic_concentrations__Nai = rY[23]; + // Units: millimolar; Initial value: 15.6748357 + double var_chaste_interface__ionic_concentrations__Ki = rY[24]; + // Units: millimolar; Initial value: 137.6244 + + + // Lookup table indexing + const bool _oob_0 = Dynamicviswanathan_model_1999_epiFromCellMLGRL2Opt_LookupTables::Instance()->CheckIndex0(var_chaste_interface__membrane__V); +// LCOV_EXCL_START + if (_oob_0) + EXCEPTION(DumpState("membrane_voltage outside lookup table range", rY , var_chaste_interface__environment__time_converted)); +// LCOV_EXCL_STOP + const double* const _lt_0_row = Dynamicviswanathan_model_1999_epiFromCellMLGRL2Opt_LookupTables::Instance()->IndexTable0(var_chaste_interface__membrane__V); + + // Mathematics + const double var_L_type_Ca_channel_f_Ca_gate__f_Ca = 1 / (1 + 1666.6666666666667 * var_chaste_interface__calcium_dynamics__Cai); // dimensionless + const double var_calcium_background_current__E_Ca = 13.356169352749133 * log(mParameters[0] / var_chaste_interface__calcium_dynamics__Cai); // millivolt + const double var_fast_sodium_current__E_Na = 26.712338705498265 * log(mParameters[2] / var_chaste_interface__ionic_concentrations__Nai); // millivolt + const double var_L_type_Ca_channel__i_CaCa = 7.8019226357407252 * (-0.34100000000000003 * mParameters[0] + var_chaste_interface__calcium_dynamics__Cai * _lt_0_row[0]) * var_chaste_interface__L_type_Ca_channel_d_gate__d * var_L_type_Ca_channel_f_Ca_gate__f_Ca * var_chaste_interface__L_type_Ca_channel_f_gate__f * var_chaste_interface__membrane__V / (_lt_0_row[1]); // microA_per_microF + const double var_L_type_Ca_channel__i_CaK = 0.00069711623550831479 * (-0.75 * mParameters[1] + 0.75 * var_chaste_interface__ionic_concentrations__Ki * _lt_0_row[2]) * var_chaste_interface__L_type_Ca_channel_d_gate__d * var_L_type_Ca_channel_f_Ca_gate__f_Ca * var_chaste_interface__L_type_Ca_channel_f_gate__f * var_chaste_interface__membrane__V / (_lt_0_row[3]); // microA_per_microF + const double var_L_type_Ca_channel__i_CaNa = 0.0024381008236689767 * (-0.75 * mParameters[2] + 0.75 * var_chaste_interface__ionic_concentrations__Nai * _lt_0_row[2]) * var_chaste_interface__L_type_Ca_channel_d_gate__d * var_L_type_Ca_channel_f_Ca_gate__f_Ca * var_chaste_interface__L_type_Ca_channel_f_gate__f * var_chaste_interface__membrane__V / (_lt_0_row[3]); // microA_per_microF + const double var_Na_Ca_exchanger__i_NaCa = 0.002 * (pow(var_chaste_interface__ionic_concentrations__Nai, 3) * mParameters[0] * _lt_0_row[4] - pow(mParameters[2], 3) * var_chaste_interface__calcium_dynamics__Cai * _lt_0_row[5]) / ((1 + 144.92753623188406 * var_chaste_interface__calcium_dynamics__Cai) * (1 + 0.001 * pow(var_chaste_interface__ionic_concentrations__Nai, 3) * mParameters[0] + 0.001 * pow(mParameters[2], 3) * var_chaste_interface__calcium_dynamics__Cai)); // microA_per_microF + const double var_T_type_Ca_channel__i_Ca_T = 0.050000000000000003 * pow(var_chaste_interface__T_type_Ca_channel_b_gate__b, 2) * (-var_calcium_background_current__E_Ca + var_chaste_interface__membrane__V) * var_chaste_interface__T_type_Ca_channel_g_gate__g; // microA_per_microF + const double var_calcium_background_current__i_Ca_b = 0.003016 * var_chaste_interface__membrane__V - 0.003016 * var_calcium_background_current__E_Ca; // microA_per_microF + const double var_fast_sodium_current__i_Na = pow(var_chaste_interface__fast_sodium_current_m_gate__m, 3) * (-var_fast_sodium_current__E_Na + var_chaste_interface__membrane__V) * mParameters[4] * var_chaste_interface__fast_sodium_current_h_gate__h * var_chaste_interface__fast_sodium_current_j_gate__j; // microA_per_microF + const double var_non_specific_calcium_activated_current__P_ns_Ca = 0; // cm_per_second + const double var_non_specific_calcium_activated_current__i_ns_K = 3612.0012202503358 * (-0.75 * mParameters[1] + 0.75 * var_chaste_interface__ionic_concentrations__Ki * _lt_0_row[2]) * var_chaste_interface__membrane__V * var_non_specific_calcium_activated_current__P_ns_Ca / ((1 + 1.7279999999999996e-9 / pow(var_chaste_interface__calcium_dynamics__Cai, 3)) * (_lt_0_row[3])); // microA_per_microF + const double var_non_specific_calcium_activated_current__i_ns_Na = 3612.0012202503358 * (-0.75 * mParameters[2] + 0.75 * var_chaste_interface__ionic_concentrations__Nai * _lt_0_row[2]) * var_chaste_interface__membrane__V * var_non_specific_calcium_activated_current__P_ns_Ca / ((1 + 1.7279999999999996e-9 / pow(var_chaste_interface__calcium_dynamics__Cai, 3)) * (_lt_0_row[3])); // microA_per_microF + const double var_sarcolemmal_calcium_pump__i_p_Ca = 1.1499999999999999 * var_chaste_interface__calcium_dynamics__Cai / (0.00050000000000000001 + var_chaste_interface__calcium_dynamics__Cai); // microA_per_microF + const double var_slow_delayed_rectifier_potassium_current__i_Ks = (0.433 + 0.25979999999999998 / (1 + 6.4818210260626455e-7 * pow((1 / var_chaste_interface__calcium_dynamics__Cai), 1.3999999999999999))) * (-26.712338705498265 * log((0.018329999999999999 * mParameters[2] + mParameters[1]) / (0.018329999999999999 * var_chaste_interface__ionic_concentrations__Nai + var_chaste_interface__ionic_concentrations__Ki)) + var_chaste_interface__membrane__V) * var_chaste_interface__slow_delayed_rectifier_potassium_current_xs1_gate__xs1 * var_chaste_interface__slow_delayed_rectifier_potassium_current_xs2_gate__xs2; // microA_per_microF + const double var_sodium_background_current__i_Na_b = 0.0040000000000000001 * var_chaste_interface__membrane__V - 0.0040000000000000001 * var_fast_sodium_current__E_Na; // microA_per_microF + const double var_sodium_potassium_pump__i_NaK = 2 * mParameters[1] / ((1 + 100 / pow(var_chaste_interface__ionic_concentrations__Nai, 2)) * (1.5 + mParameters[1]) * (1 + _lt_0_row[7] + 0.036499999999999998 * (-0.14285714285714285 + 0.14285714285714285 * exp(0.01485884101040119 * mParameters[2])) * _lt_0_row[6])); // microA_per_microF + const double var_time_independent_potassium_current__E_K = 26.712338705498265 * log(mParameters[1] / var_chaste_interface__ionic_concentrations__Ki); // millivolt + const double var_ATP_sensitive_potassium_current__i_K_ATP = 1.921898339896919e-8 * pow(mParameters[1], 0.23999999999999999) * (-var_time_independent_potassium_current__E_K + var_chaste_interface__membrane__V); // microA_per_microF + const double var_plateau_potassium_current__i_Kp = 0.0055199999999999997 * (-var_time_independent_potassium_current__E_K + var_chaste_interface__membrane__V) / (_lt_0_row[8]); // microA_per_microF + const double var_rapid_delayed_rectifier_potassium_current__i_Kr = 0.43033148291193518 * sqrt(mParameters[1]) * (-var_time_independent_potassium_current__E_K + var_chaste_interface__membrane__V) * mParameters[6] * var_chaste_interface__rapid_delayed_rectifier_potassium_current_xr_gate__xr / (_lt_0_row[9]); // microA_per_microF + const double var_time_independent_potassium_current__i_K1 = 438.93811257017387 * sqrt(mParameters[1]) * (-var_time_independent_potassium_current__E_K + var_chaste_interface__membrane__V) * mParameters[5] / ((1 + exp(-14.1227775 + 0.23849999999999999 * var_chaste_interface__membrane__V - 0.23849999999999999 * var_time_independent_potassium_current__E_K)) * (1020 / (1 + exp(-14.1227775 + 0.23849999999999999 * var_chaste_interface__membrane__V - 0.23849999999999999 * var_time_independent_potassium_current__E_K)) + 1000 * (0.49124000000000001 * exp(0.43983232 + 0.080320000000000003 * var_chaste_interface__membrane__V - 0.080320000000000003 * var_time_independent_potassium_current__E_K) + exp(-36.698642499999998 + 0.061749999999999999 * var_chaste_interface__membrane__V - 0.061749999999999999 * var_time_independent_potassium_current__E_K)) / (1 + exp(-2.4444678999999998 + 0.51429999999999998 * var_time_independent_potassium_current__E_K - 0.51429999999999998 * var_chaste_interface__membrane__V)))); // microA_per_microF + const double var_transient_outward_current__i_to = 0; // microA_per_microF + const double var_membrane__dVdt = -(GetIntracellularAreaStimulus(var_chaste_interface__environment__time_converted) / HeartConfig::Instance()->GetCapacitance() + var_ATP_sensitive_potassium_current__i_K_ATP + var_L_type_Ca_channel__i_CaCa + var_L_type_Ca_channel__i_CaK + var_L_type_Ca_channel__i_CaNa + var_Na_Ca_exchanger__i_NaCa + var_T_type_Ca_channel__i_Ca_T + var_calcium_background_current__i_Ca_b + var_fast_sodium_current__i_Na + var_non_specific_calcium_activated_current__i_ns_K + var_non_specific_calcium_activated_current__i_ns_Na + var_plateau_potassium_current__i_Kp + var_rapid_delayed_rectifier_potassium_current__i_Kr + var_sarcolemmal_calcium_pump__i_p_Ca + var_slow_delayed_rectifier_potassium_current__i_Ks + var_sodium_background_current__i_Na_b + var_sodium_potassium_pump__i_NaK + var_time_independent_potassium_current__i_K1 + var_transient_outward_current__i_to) / mParameters[3]; // dimensionless + const double d_dt_chaste_interface_var_calcium_dynamics__APtrack = 0.001 * ((var_membrane__dVdt > 150000) ? (100000 - 100500 * var_chaste_interface__calcium_dynamics__APtrack) : (-500 * var_chaste_interface__calcium_dynamics__APtrack)); // 1 / millisecond + + return d_dt_chaste_interface_var_calcium_dynamics__APtrack; + } + + double Dynamicviswanathan_model_1999_epiFromCellMLGRL2Opt::EvaluatePartialDerivative16(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -88.984 + double var_chaste_interface__calcium_dynamics__Cai = rY[1]; + // Units: millimolar; Initial value: 0.00035237 + double var_chaste_interface__fast_sodium_current_m_gate__m = rY[2]; + // Units: dimensionless; Initial value: 0.00079287 + double var_chaste_interface__fast_sodium_current_h_gate__h = rY[3]; + // Units: dimensionless; Initial value: 0.9938 + double var_chaste_interface__fast_sodium_current_j_gate__j = rY[4]; + // Units: dimensionless; Initial value: 0.99573 + double var_chaste_interface__L_type_Ca_channel_d_gate__d = rY[5]; + // Units: dimensionless; Initial value: 3.18355e-06 + double var_chaste_interface__L_type_Ca_channel_f_gate__f = rY[6]; + // Units: dimensionless; Initial value: 0.9974388 + double var_chaste_interface__T_type_Ca_channel_b_gate__b = rY[7]; + // Units: dimensionless; Initial value: 0.000967785 + double var_chaste_interface__T_type_Ca_channel_g_gate__g = rY[8]; + // Units: dimensionless; Initial value: 0.95331988 + double var_chaste_interface__rapid_delayed_rectifier_potassium_current_xr_gate__xr = rY[9]; + // Units: dimensionless; Initial value: 0.00032151644 + double var_chaste_interface__slow_delayed_rectifier_potassium_current_xs1_gate__xs1 = rY[10]; + // Units: dimensionless; Initial value: 0.0272635 + double var_chaste_interface__slow_delayed_rectifier_potassium_current_xs2_gate__xs2 = rY[11]; + // Units: dimensionless; Initial value: 0.0631269 + double var_chaste_interface__ionic_concentrations__Nai = rY[23]; + // Units: millimolar; Initial value: 15.6748357 + double var_chaste_interface__ionic_concentrations__Ki = rY[24]; + // Units: millimolar; Initial value: 137.6244 + + + // Lookup table indexing + const bool _oob_0 = Dynamicviswanathan_model_1999_epiFromCellMLGRL2Opt_LookupTables::Instance()->CheckIndex0(var_chaste_interface__membrane__V); +// LCOV_EXCL_START + if (_oob_0) + EXCEPTION(DumpState("membrane_voltage outside lookup table range", rY , var_chaste_interface__environment__time_converted)); +// LCOV_EXCL_STOP + const double* const _lt_0_row = Dynamicviswanathan_model_1999_epiFromCellMLGRL2Opt_LookupTables::Instance()->IndexTable0(var_chaste_interface__membrane__V); + + const double var_x0 = 1 / var_chaste_interface__calcium_dynamics__Cai; + const double var_x1 = pow(var_x0, 1.3999999999999999); + const double var_x2 = 1 + 6.4818210260626455e-7 * var_x1; + const double var_x3 = 0.433 + 0.25979999999999998 / var_x2; + const double var_x4 = var_chaste_interface__slow_delayed_rectifier_potassium_current_xs1_gate__xs1 * var_chaste_interface__slow_delayed_rectifier_potassium_current_xs2_gate__xs2; + const double var_x5 = var_x3 * var_x4; + const double var_x6 = 0.018717941753901308 * var_chaste_interface__membrane__V; + const double var_x7 = exp(var_x6); + const double var_x8 = pow(var_chaste_interface__ionic_concentrations__Nai, 3) * mParameters[0]; + const double var_x9 = var_x7 * var_x8; + const double var_x10 = exp(-var_x6); + const double var_x11 = pow(mParameters[2], 3); + const double var_x12 = var_x11 * var_chaste_interface__calcium_dynamics__Cai; + const double var_x13 = var_x10 * var_x12; + const double var_x15 = 1 / (1 + 144.92753623188406 * var_chaste_interface__calcium_dynamics__Cai); + const double var_x16 = 1 + 0.001 * var_x12 + 0.001 * var_x8; + const double var_x17 = 1 / var_x16; + const double var_x18 = var_x15 * var_x17; + const double var_x19 = 0.002 * var_x18; + const double var_x21 = pow(var_chaste_interface__ionic_concentrations__Nai, (-2)); + const double var_x22 = 1 / (1 + 100 * var_x21); + const double var_x23 = 2 * var_x22; + const double var_x24 = 1 / (1.5 + mParameters[1]); + const double var_x25 = exp(-0.003743588350780262 * var_chaste_interface__membrane__V); + const double var_x26 = exp(0.01485884101040119 * mParameters[2]); + const double var_x27 = 0.037435883507802616 * var_chaste_interface__membrane__V; + const double var_x28 = exp(-var_x27); + const double var_x29 = 1 + 0.1245 * var_x25 + 0.036499999999999998 * var_x28 * (-0.14285714285714285 + 0.14285714285714285 * var_x26); + const double var_x33 = pow(var_chaste_interface__T_type_Ca_channel_b_gate__b, 2); + const double var_x34 = var_x33 * var_chaste_interface__T_type_Ca_channel_g_gate__g; + const double var_x35 = 0.050000000000000003 * var_x34; + const double var_x36 = 1 / (1 + 1666.6666666666667 * var_chaste_interface__calcium_dynamics__Cai); + const double var_x37 = var_x36 * var_chaste_interface__L_type_Ca_channel_f_gate__f; + const double var_x38 = var_x37 * var_chaste_interface__L_type_Ca_channel_d_gate__d; + const double var_x39 = _lt_0_row[0]; + const double var_x40 = -1 + var_x39; + const double var_x41 = 1 / var_x40; + const double var_x42 = var_x39 * var_chaste_interface__calcium_dynamics__Cai; + const double var_x43 = var_x42 - 0.34100000000000003 * mParameters[0]; + const double var_x44 = var_x41 * var_x43; + const double var_x45 = 7.8019226357407252 * var_x44; + const double var_x46 = var_x38 * var_x45; + const double var_x50 = pow(var_chaste_interface__fast_sodium_current_m_gate__m, 3); + const double var_x51 = var_x50 * mParameters[4] * var_chaste_interface__fast_sodium_current_j_gate__j; + const double var_x52 = var_x51 * var_chaste_interface__fast_sodium_current_h_gate__h; + const double var_x53 = exp(var_x27); + const double var_x54 = -1 + var_x53; + const double var_x55 = 1 / var_x54; + const double var_x56 = var_x38 * var_x55; + const double var_x57 = 0.75 * var_x53; + const double var_x58 = -0.75 * mParameters[2] + var_x57 * var_chaste_interface__ionic_concentrations__Nai; + const double var_x59 = 0.0024381008236689767 * var_x58; + const double var_x60 = var_x56 * var_x59; + const double var_x64 = exp(1.2521739130434781 - 0.16722408026755853 * var_chaste_interface__membrane__V); + const double var_x65 = 1 + var_x64; + const double var_x66 = 1 / var_x65; + const double var_x67 = 0.0055199999999999997 * var_x66; + const double var_x68 = pow(mParameters[1], 0.23999999999999999); + const double var_x69 = 1.921898339896919e-8 * var_x68; + const double var_x70 = 1 / var_chaste_interface__ionic_concentrations__Ki; + const double var_x71 = log(var_x70 * mParameters[1]); + const double var_x72 = -26.712338705498265 * var_x71 + var_chaste_interface__membrane__V; + const double var_x73 = exp(0.4017857142857143 + 0.044642857142857144 * var_chaste_interface__membrane__V); + const double var_x74 = 1 + var_x73; + const double var_x75 = sqrt(mParameters[1]); + const double var_x76 = var_x75 * mParameters[6] / var_x74; + const double var_x77 = var_x76 * var_chaste_interface__rapid_delayed_rectifier_potassium_current_xr_gate__xr; + const double var_x78 = 0.43033148291193518 * var_x77; + const double var_x79 = exp(-14.1227775 + 0.23849999999999999 * var_chaste_interface__membrane__V - 6.3708927812613361 * var_x71); + const double var_x80 = 1 + var_x79; + const double var_x81 = 1 / var_x80; + const double var_x82 = exp(-2.4444678999999998 + 13.738155796237757 * var_x71 - 0.51429999999999998 * var_chaste_interface__membrane__V); + const double var_x83 = 1 + var_x82; + const double var_x84 = 1 / var_x83; + const double var_x85 = exp(0.43983232 + 0.080320000000000003 * var_chaste_interface__membrane__V - 2.1455350448256207 * var_x71); + const double var_x86 = exp(-36.698642499999998 + 0.061749999999999999 * var_chaste_interface__membrane__V - 1.6494869150645177 * var_x71); + const double var_x87 = var_x86 + 0.49124000000000001 * var_x85; + const double var_x88 = var_x84 * var_x87; + const double var_x89 = 1 / (1000 * var_x88 + 1020 * var_x81); + const double var_x90 = var_x75 * var_x81 * mParameters[5]; + const double var_x91 = var_x89 * var_x90; + const double var_x92 = 438.93811257017387 * var_x91; + const double var_x93 = -0.75 * mParameters[1] + var_x57 * var_chaste_interface__ionic_concentrations__Ki; + const double var_x94 = 0.00069711623550831479 * var_x93; + const double var_x95 = var_x56 * var_x94; + const double var_x104 = 1 / mParameters[3]; + const double var_x110 = 0.00050000000000000001 + var_chaste_interface__calcium_dynamics__Cai; + const double var_x111 = 1 / var_x110; + const double var_x115 = 1 / (0.018329999999999999 * var_chaste_interface__ionic_concentrations__Nai + var_chaste_interface__ionic_concentrations__Ki); + const double var_x116 = -26.712338705498265 * log(var_x115 * (0.018329999999999999 * mParameters[2] + mParameters[1])) + var_chaste_interface__membrane__V; + const double var_x118 = var_x9 - var_x13; + const double var_x125 = 1 / var_chaste_interface__ionic_concentrations__Nai; + const double var_x126 = log(var_x125 * mParameters[2]); + const double var_x127 = -26.712338705498265 * var_x126 + var_chaste_interface__membrane__V; + const double var_x136 = log(var_x0 * mParameters[0]); + const double var_x137 = -13.356169352749133 * var_x136 + var_chaste_interface__membrane__V; + const double var_x150 = var_x24 * mParameters[1] / var_x29; + const double var_x175 = 1.1499999999999999 * var_x111; + const double var_x180 = var_x118 * var_x19; + const double var_x181 = -0.040282206767891383 * var_x136 + var_x137 * var_x35 + var_x175 * var_chaste_interface__calcium_dynamics__Cai + var_x46 * var_chaste_interface__membrane__V; + + partialF = ((var_x104 * (var_x180 + var_x181 + 0.0070159999999999997 * var_chaste_interface__membrane__V - 0.10684935482199306 * var_x126 + var_x116 * var_x5 + var_x127 * var_x52 + var_x150 * var_x23 + var_x60 * var_chaste_interface__membrane__V + var_x67 * var_x72 + var_x69 * var_x72 + var_x72 * var_x78 + var_x72 * var_x92 + var_x95 * var_chaste_interface__membrane__V + GetIntracellularAreaStimulus(var_chaste_interface__environment__time_converted) / HeartConfig::Instance()->GetCapacitance()) < -150000) ? (-100.5) : (-0.5)); + } + else + { + const double y_save = rY[16]; + rY[16] += delta; + const double temp = EvaluateYDerivative16(var_chaste_interface__environment__time_converted, rY); + partialF = (temp-mEvalF[16])/delta; + rY[16] = y_save; + } + return partialF; + } + double Dynamicviswanathan_model_1999_epiFromCellMLGRL2Opt::EvaluateYDerivative17(double var_chaste_interface__environment__time_converted, std::vector& rY) + { + + double var_chaste_interface__calcium_dynamics__APtrack = rY[16]; + // Units: dimensionless; Initial value: 3.814e-87 + double var_chaste_interface__calcium_dynamics__APtrack2 = rY[17]; + // Units: dimensionless; Initial value: 2.1084e-86 + + + + // Mathematics + const double d_dt_chaste_interface_var_calcium_dynamics__APtrack2 = 0.001 * (((var_chaste_interface__calcium_dynamics__APtrack > 0.17999999999999999) && (var_chaste_interface__calcium_dynamics__APtrack < 0.20000000000000001)) ? (100000 - 100500 * var_chaste_interface__calcium_dynamics__APtrack2) : (-500 * var_chaste_interface__calcium_dynamics__APtrack2)); // 1 / millisecond + + return d_dt_chaste_interface_var_calcium_dynamics__APtrack2; + } + + double Dynamicviswanathan_model_1999_epiFromCellMLGRL2Opt::EvaluatePartialDerivative17(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__calcium_dynamics__APtrack = rY[16]; + // Units: dimensionless; Initial value: 3.814e-87 + + + + const double var_x319 = (var_chaste_interface__calcium_dynamics__APtrack > 0.17999999999999999) && (var_chaste_interface__calcium_dynamics__APtrack < 0.20000000000000001); + + partialF = ((var_x319) ? (-100.5) : (-0.5)); + } + else + { + const double y_save = rY[17]; + rY[17] += delta; + const double temp = EvaluateYDerivative17(var_chaste_interface__environment__time_converted, rY); + partialF = (temp-mEvalF[17])/delta; + rY[17] = y_save; + } + return partialF; + } + double Dynamicviswanathan_model_1999_epiFromCellMLGRL2Opt::EvaluateYDerivative18(double var_chaste_interface__environment__time_converted, std::vector& rY) + { + + double var_chaste_interface__calcium_dynamics__APtrack = rY[16]; + // Units: dimensionless; Initial value: 3.814e-87 + double var_chaste_interface__calcium_dynamics__APtrack3 = rY[18]; + // Units: dimensionless; Initial value: 0.01925 + + + + // Mathematics + const double d_dt_chaste_interface_var_calcium_dynamics__APtrack3 = 0.001 * (((var_chaste_interface__calcium_dynamics__APtrack > 0.17999999999999999) && (var_chaste_interface__calcium_dynamics__APtrack < 0.20000000000000001)) ? (100000 - 100500 * var_chaste_interface__calcium_dynamics__APtrack3) : (-10 * var_chaste_interface__calcium_dynamics__APtrack3)); // 1 / millisecond + + return d_dt_chaste_interface_var_calcium_dynamics__APtrack3; + } + + double Dynamicviswanathan_model_1999_epiFromCellMLGRL2Opt::EvaluatePartialDerivative18(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__calcium_dynamics__APtrack = rY[16]; + // Units: dimensionless; Initial value: 3.814e-87 + + + + const double var_x319 = (var_chaste_interface__calcium_dynamics__APtrack > 0.17999999999999999) && (var_chaste_interface__calcium_dynamics__APtrack < 0.20000000000000001); + + partialF = ((var_x319) ? (-100.5) : (-0.01)); + } + else + { + const double y_save = rY[18]; + rY[18] += delta; + const double temp = EvaluateYDerivative18(var_chaste_interface__environment__time_converted, rY); + partialF = (temp-mEvalF[18])/delta; + rY[18] = y_save; + } + return partialF; + } + double Dynamicviswanathan_model_1999_epiFromCellMLGRL2Opt::EvaluateYDerivative19(double var_chaste_interface__environment__time_converted, std::vector& rY) + { + + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -88.984 + double var_chaste_interface__calcium_dynamics__Cai = rY[1]; + // Units: millimolar; Initial value: 0.00035237 + double var_chaste_interface__L_type_Ca_channel_d_gate__d = rY[5]; + // Units: dimensionless; Initial value: 3.18355e-06 + double var_chaste_interface__L_type_Ca_channel_f_gate__f = rY[6]; + // Units: dimensionless; Initial value: 0.9974388 + double var_chaste_interface__T_type_Ca_channel_b_gate__b = rY[7]; + // Units: dimensionless; Initial value: 0.000967785 + double var_chaste_interface__T_type_Ca_channel_g_gate__g = rY[8]; + // Units: dimensionless; Initial value: 0.95331988 + double var_chaste_interface__calcium_dynamics__APtrack = rY[16]; + // Units: dimensionless; Initial value: 3.814e-87 + double var_chaste_interface__calcium_dynamics__APtrack2 = rY[17]; + // Units: dimensionless; Initial value: 2.1084e-86 + double var_chaste_interface__calcium_dynamics__Cainfluxtrack = rY[19]; + // Units: dimensionless; Initial value: 1.784e-87 + double var_chaste_interface__ionic_concentrations__Nai = rY[23]; + // Units: millimolar; Initial value: 15.6748357 + + + // Lookup table indexing + const bool _oob_0 = Dynamicviswanathan_model_1999_epiFromCellMLGRL2Opt_LookupTables::Instance()->CheckIndex0(var_chaste_interface__membrane__V); +// LCOV_EXCL_START + if (_oob_0) + EXCEPTION(DumpState("membrane_voltage outside lookup table range", rY , var_chaste_interface__environment__time_converted)); +// LCOV_EXCL_STOP + const double* const _lt_0_row = Dynamicviswanathan_model_1999_epiFromCellMLGRL2Opt_LookupTables::Instance()->IndexTable0(var_chaste_interface__membrane__V); + + // Mathematics + const double var_L_type_Ca_channel_f_Ca_gate__f_Ca = 1 / (1 + 1666.6666666666667 * var_chaste_interface__calcium_dynamics__Cai); // dimensionless + const double var_ionic_concentrations__V_myo = 8.2280000000000009e-12 * M_PI; // micro_litre + const double var_calcium_background_current__E_Ca = 13.356169352749133 * log(mParameters[0] / var_chaste_interface__calcium_dynamics__Cai); // millivolt + const double var_L_type_Ca_channel__i_CaCa = 7.8019226357407252 * (-0.34100000000000003 * mParameters[0] + var_chaste_interface__calcium_dynamics__Cai * _lt_0_row[0]) * var_chaste_interface__L_type_Ca_channel_d_gate__d * var_L_type_Ca_channel_f_Ca_gate__f_Ca * var_chaste_interface__L_type_Ca_channel_f_gate__f * var_chaste_interface__membrane__V / (_lt_0_row[1]); // microA_per_microF + const double var_Na_Ca_exchanger__i_NaCa = 0.002 * (pow(var_chaste_interface__ionic_concentrations__Nai, 3) * mParameters[0] * _lt_0_row[4] - pow(mParameters[2], 3) * var_chaste_interface__calcium_dynamics__Cai * _lt_0_row[5]) / ((1 + 144.92753623188406 * var_chaste_interface__calcium_dynamics__Cai) * (1 + 0.001 * pow(var_chaste_interface__ionic_concentrations__Nai, 3) * mParameters[0] + 0.001 * pow(mParameters[2], 3) * var_chaste_interface__calcium_dynamics__Cai)); // microA_per_microF + const double var_T_type_Ca_channel__i_Ca_T = 0.050000000000000003 * pow(var_chaste_interface__T_type_Ca_channel_b_gate__b, 2) * (-var_calcium_background_current__E_Ca + var_chaste_interface__membrane__V) * var_chaste_interface__T_type_Ca_channel_g_gate__g; // microA_per_microF + const double var_calcium_background_current__i_Ca_b = 0.003016 * var_chaste_interface__membrane__V - 0.003016 * var_calcium_background_current__E_Ca; // microA_per_microF + const double var_sarcolemmal_calcium_pump__i_p_Ca = 1.1499999999999999 * var_chaste_interface__calcium_dynamics__Cai / (0.00050000000000000001 + var_chaste_interface__calcium_dynamics__Cai); // microA_per_microF + const double d_dt_chaste_interface_var_calcium_dynamics__Cainfluxtrack = 0.001 * ((var_chaste_interface__calcium_dynamics__APtrack > 0.20000000000000001) ? (-7.4312069233559624e-13 * (-var_Na_Ca_exchanger__i_NaCa + var_L_type_Ca_channel__i_CaCa + var_T_type_Ca_channel__i_Ca_T + var_calcium_background_current__i_Ca_b + var_sarcolemmal_calcium_pump__i_p_Ca) / var_ionic_concentrations__V_myo) : ((var_chaste_interface__calcium_dynamics__APtrack2 > 0.01) ? (0) : (-500 * var_chaste_interface__calcium_dynamics__Cainfluxtrack))); // 1 / millisecond + + return d_dt_chaste_interface_var_calcium_dynamics__Cainfluxtrack; + } + + double Dynamicviswanathan_model_1999_epiFromCellMLGRL2Opt::EvaluatePartialDerivative19(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__calcium_dynamics__APtrack = rY[16]; + // Units: dimensionless; Initial value: 3.814e-87 + double var_chaste_interface__calcium_dynamics__APtrack2 = rY[17]; + // Units: dimensionless; Initial value: 2.1084e-86 + + + + const double var_x320 = var_chaste_interface__calcium_dynamics__APtrack > 0.20000000000000001; + + partialF = (((var_x320) || (var_chaste_interface__calcium_dynamics__APtrack2 > 0.01)) ? (0) : (-0.5)); + } + else + { + const double y_save = rY[19]; + rY[19] += delta; + const double temp = EvaluateYDerivative19(var_chaste_interface__environment__time_converted, rY); + partialF = (temp-mEvalF[19])/delta; + rY[19] = y_save; + } + return partialF; + } + double Dynamicviswanathan_model_1999_epiFromCellMLGRL2Opt::EvaluateYDerivative20(double var_chaste_interface__environment__time_converted, std::vector& rY) + { + + double var_chaste_interface__calcium_dynamics__Ca_JSR = rY[14]; + // Units: millimolar; Initial value: 0.817895 + double var_chaste_interface__calcium_dynamics__APtrack3 = rY[18]; + // Units: dimensionless; Initial value: 0.01925 + double var_chaste_interface__calcium_dynamics__OVRLDtrack = rY[20]; + // Units: dimensionless; Initial value: 0.0 + double var_chaste_interface__calcium_dynamics__OVRLDtrack3 = rY[22]; + // Units: dimensionless; Initial value: 0.0 + + + + // Mathematics + const double d_dt_chaste_interface_var_calcium_dynamics__OVRLDtrack = 0.001 * (((var_chaste_interface__calcium_dynamics__APtrack3 < 0.37) && (var_chaste_interface__calcium_dynamics__OVRLDtrack3 < 0.37) && (1 / (1 + 0.80000000000000004 / var_chaste_interface__calcium_dynamics__Ca_JSR) > 0.69999999999999996)) ? (50000 - 50000 * var_chaste_interface__calcium_dynamics__OVRLDtrack) : (-500 * var_chaste_interface__calcium_dynamics__OVRLDtrack)); // 1 / millisecond + + return d_dt_chaste_interface_var_calcium_dynamics__OVRLDtrack; + } + + double Dynamicviswanathan_model_1999_epiFromCellMLGRL2Opt::EvaluatePartialDerivative20(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__calcium_dynamics__Ca_JSR = rY[14]; + // Units: millimolar; Initial value: 0.817895 + double var_chaste_interface__calcium_dynamics__APtrack3 = rY[18]; + // Units: dimensionless; Initial value: 0.01925 + double var_chaste_interface__calcium_dynamics__OVRLDtrack3 = rY[22]; + // Units: dimensionless; Initial value: 0.0 + + + + + partialF = (((var_chaste_interface__calcium_dynamics__APtrack3 < 0.37) && (var_chaste_interface__calcium_dynamics__OVRLDtrack3 < 0.37) && (1 / (1 + 0.80000000000000004 / var_chaste_interface__calcium_dynamics__Ca_JSR) > 0.69999999999999996)) ? (-50) : (-0.5)); + } + else + { + const double y_save = rY[20]; + rY[20] += delta; + const double temp = EvaluateYDerivative20(var_chaste_interface__environment__time_converted, rY); + partialF = (temp-mEvalF[20])/delta; + rY[20] = y_save; + } + return partialF; + } + double Dynamicviswanathan_model_1999_epiFromCellMLGRL2Opt::EvaluateYDerivative21(double var_chaste_interface__environment__time_converted, std::vector& rY) + { + + double var_chaste_interface__calcium_dynamics__OVRLDtrack = rY[20]; + // Units: dimensionless; Initial value: 0.0 + double var_chaste_interface__calcium_dynamics__OVRLDtrack2 = rY[21]; + // Units: dimensionless; Initial value: 0.0 + + + + // Mathematics + const double d_dt_chaste_interface_var_calcium_dynamics__OVRLDtrack2 = 0.001 * (((var_chaste_interface__calcium_dynamics__OVRLDtrack > 0.97999999999999998) && (var_chaste_interface__calcium_dynamics__OVRLDtrack2 < 0.97999999999999998)) ? (50000 - 50000 * var_chaste_interface__calcium_dynamics__OVRLDtrack2) : (-500 * var_chaste_interface__calcium_dynamics__OVRLDtrack2)); // 1 / millisecond + + return d_dt_chaste_interface_var_calcium_dynamics__OVRLDtrack2; + } + + double Dynamicviswanathan_model_1999_epiFromCellMLGRL2Opt::EvaluatePartialDerivative21(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__calcium_dynamics__OVRLDtrack = rY[20]; + // Units: dimensionless; Initial value: 0.0 + double var_chaste_interface__calcium_dynamics__OVRLDtrack2 = rY[21]; + // Units: dimensionless; Initial value: 0.0 + + + + const double var_x321 = var_chaste_interface__calcium_dynamics__OVRLDtrack > 0.97999999999999998; + + partialF = (((var_x321) && (var_chaste_interface__calcium_dynamics__OVRLDtrack2 < 0.97999999999999998)) ? (-50) : (-0.5)); + } + else + { + const double y_save = rY[21]; + rY[21] += delta; + const double temp = EvaluateYDerivative21(var_chaste_interface__environment__time_converted, rY); + partialF = (temp-mEvalF[21])/delta; + rY[21] = y_save; + } + return partialF; + } + double Dynamicviswanathan_model_1999_epiFromCellMLGRL2Opt::EvaluateYDerivative22(double var_chaste_interface__environment__time_converted, std::vector& rY) + { + + double var_chaste_interface__calcium_dynamics__OVRLDtrack = rY[20]; + // Units: dimensionless; Initial value: 0.0 + double var_chaste_interface__calcium_dynamics__OVRLDtrack3 = rY[22]; + // Units: dimensionless; Initial value: 0.0 + + + + // Mathematics + const double d_dt_chaste_interface_var_calcium_dynamics__OVRLDtrack3 = 0.001 * (((var_chaste_interface__calcium_dynamics__OVRLDtrack > 0.97999999999999998) && (var_chaste_interface__calcium_dynamics__OVRLDtrack3 < 0.97999999999999998)) ? (50000 - 50000 * var_chaste_interface__calcium_dynamics__OVRLDtrack3) : (-10 * var_chaste_interface__calcium_dynamics__OVRLDtrack3)); // 1 / millisecond + + return d_dt_chaste_interface_var_calcium_dynamics__OVRLDtrack3; + } + + double Dynamicviswanathan_model_1999_epiFromCellMLGRL2Opt::EvaluatePartialDerivative22(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__calcium_dynamics__OVRLDtrack = rY[20]; + // Units: dimensionless; Initial value: 0.0 + double var_chaste_interface__calcium_dynamics__OVRLDtrack3 = rY[22]; + // Units: dimensionless; Initial value: 0.0 + + + + const double var_x321 = var_chaste_interface__calcium_dynamics__OVRLDtrack > 0.97999999999999998; + + partialF = (((var_x321) && (var_chaste_interface__calcium_dynamics__OVRLDtrack3 < 0.97999999999999998)) ? (-50) : (-0.01)); + } + else + { + const double y_save = rY[22]; + rY[22] += delta; + const double temp = EvaluateYDerivative22(var_chaste_interface__environment__time_converted, rY); + partialF = (temp-mEvalF[22])/delta; + rY[22] = y_save; + } + return partialF; + } + double Dynamicviswanathan_model_1999_epiFromCellMLGRL2Opt::EvaluateYDerivative23(double var_chaste_interface__environment__time_converted, std::vector& rY) + { + + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -88.984 + double var_chaste_interface__calcium_dynamics__Cai = rY[1]; + // Units: millimolar; Initial value: 0.00035237 + double var_chaste_interface__fast_sodium_current_m_gate__m = rY[2]; + // Units: dimensionless; Initial value: 0.00079287 + double var_chaste_interface__fast_sodium_current_h_gate__h = rY[3]; + // Units: dimensionless; Initial value: 0.9938 + double var_chaste_interface__fast_sodium_current_j_gate__j = rY[4]; + // Units: dimensionless; Initial value: 0.99573 + double var_chaste_interface__L_type_Ca_channel_d_gate__d = rY[5]; + // Units: dimensionless; Initial value: 3.18355e-06 + double var_chaste_interface__L_type_Ca_channel_f_gate__f = rY[6]; + // Units: dimensionless; Initial value: 0.9974388 + double var_chaste_interface__ionic_concentrations__Nai = rY[23]; + // Units: millimolar; Initial value: 15.6748357 + + + // Lookup table indexing + const bool _oob_0 = Dynamicviswanathan_model_1999_epiFromCellMLGRL2Opt_LookupTables::Instance()->CheckIndex0(var_chaste_interface__membrane__V); +// LCOV_EXCL_START + if (_oob_0) + EXCEPTION(DumpState("membrane_voltage outside lookup table range", rY , var_chaste_interface__environment__time_converted)); +// LCOV_EXCL_STOP + const double* const _lt_0_row = Dynamicviswanathan_model_1999_epiFromCellMLGRL2Opt_LookupTables::Instance()->IndexTable0(var_chaste_interface__membrane__V); + + // Mathematics + const double var_L_type_Ca_channel_f_Ca_gate__f_Ca = 1 / (1 + 1666.6666666666667 * var_chaste_interface__calcium_dynamics__Cai); // dimensionless + const double var_ionic_concentrations__V_myo = 8.2280000000000009e-12 * M_PI; // micro_litre + const double var_fast_sodium_current__E_Na = 26.712338705498265 * log(mParameters[2] / var_chaste_interface__ionic_concentrations__Nai); // millivolt + const double var_L_type_Ca_channel__i_CaNa = 0.0024381008236689767 * (-0.75 * mParameters[2] + 0.75 * var_chaste_interface__ionic_concentrations__Nai * _lt_0_row[2]) * var_chaste_interface__L_type_Ca_channel_d_gate__d * var_L_type_Ca_channel_f_Ca_gate__f_Ca * var_chaste_interface__L_type_Ca_channel_f_gate__f * var_chaste_interface__membrane__V / (_lt_0_row[3]); // microA_per_microF + const double var_Na_Ca_exchanger__i_NaCa = 0.002 * (pow(var_chaste_interface__ionic_concentrations__Nai, 3) * mParameters[0] * _lt_0_row[4] - pow(mParameters[2], 3) * var_chaste_interface__calcium_dynamics__Cai * _lt_0_row[5]) / ((1 + 144.92753623188406 * var_chaste_interface__calcium_dynamics__Cai) * (1 + 0.001 * pow(var_chaste_interface__ionic_concentrations__Nai, 3) * mParameters[0] + 0.001 * pow(mParameters[2], 3) * var_chaste_interface__calcium_dynamics__Cai)); // microA_per_microF + const double var_fast_sodium_current__i_Na = pow(var_chaste_interface__fast_sodium_current_m_gate__m, 3) * (-var_fast_sodium_current__E_Na + var_chaste_interface__membrane__V) * mParameters[4] * var_chaste_interface__fast_sodium_current_h_gate__h * var_chaste_interface__fast_sodium_current_j_gate__j; // microA_per_microF + const double var_non_specific_calcium_activated_current__P_ns_Ca = 0; // cm_per_second + const double var_non_specific_calcium_activated_current__i_ns_Na = 3612.0012202503358 * (-0.75 * mParameters[2] + 0.75 * var_chaste_interface__ionic_concentrations__Nai * _lt_0_row[2]) * var_chaste_interface__membrane__V * var_non_specific_calcium_activated_current__P_ns_Ca / ((1 + 1.7279999999999996e-9 / pow(var_chaste_interface__calcium_dynamics__Cai, 3)) * (_lt_0_row[3])); // microA_per_microF + const double var_sodium_background_current__i_Na_b = 0.0040000000000000001 * var_chaste_interface__membrane__V - 0.0040000000000000001 * var_fast_sodium_current__E_Na; // microA_per_microF + const double var_sodium_potassium_pump__i_NaK = 2 * mParameters[1] / ((1 + 100 / pow(var_chaste_interface__ionic_concentrations__Nai, 2)) * (1.5 + mParameters[1]) * (1 + _lt_0_row[7] + 0.036499999999999998 * (-0.14285714285714285 + 0.14285714285714285 * exp(0.01485884101040119 * mParameters[2])) * _lt_0_row[6])); // microA_per_microF + const double d_dt_chaste_interface_var_ionic_concentrations__Nai = 1.4862413846711923e-15 * (-var_L_type_Ca_channel__i_CaNa - var_fast_sodium_current__i_Na - var_non_specific_calcium_activated_current__i_ns_Na - var_sodium_background_current__i_Na_b - 3 * var_Na_Ca_exchanger__i_NaCa - 3 * var_sodium_potassium_pump__i_NaK) / var_ionic_concentrations__V_myo; // millimolar / millisecond + + return d_dt_chaste_interface_var_ionic_concentrations__Nai; + } + + double Dynamicviswanathan_model_1999_epiFromCellMLGRL2Opt::EvaluatePartialDerivative23(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -88.984 + double var_chaste_interface__calcium_dynamics__Cai = rY[1]; + // Units: millimolar; Initial value: 0.00035237 + double var_chaste_interface__fast_sodium_current_m_gate__m = rY[2]; + // Units: dimensionless; Initial value: 0.00079287 + double var_chaste_interface__fast_sodium_current_h_gate__h = rY[3]; + // Units: dimensionless; Initial value: 0.9938 + double var_chaste_interface__fast_sodium_current_j_gate__j = rY[4]; + // Units: dimensionless; Initial value: 0.99573 + double var_chaste_interface__L_type_Ca_channel_d_gate__d = rY[5]; + // Units: dimensionless; Initial value: 3.18355e-06 + double var_chaste_interface__L_type_Ca_channel_f_gate__f = rY[6]; + // Units: dimensionless; Initial value: 0.9974388 + double var_chaste_interface__ionic_concentrations__Nai = rY[23]; + // Units: millimolar; Initial value: 15.6748357 + + + + const double var_x6 = 0.018717941753901308 * var_chaste_interface__membrane__V; + const double var_x7 = exp(var_x6); + const double var_x8 = pow(var_chaste_interface__ionic_concentrations__Nai, 3) * mParameters[0]; + const double var_x9 = var_x7 * var_x8; + const double var_x10 = exp(-var_x6); + const double var_x11 = pow(mParameters[2], 3); + const double var_x12 = var_x11 * var_chaste_interface__calcium_dynamics__Cai; + const double var_x13 = var_x10 * var_x12; + const double var_x15 = 1 / (1 + 144.92753623188406 * var_chaste_interface__calcium_dynamics__Cai); + const double var_x16 = 1 + 0.001 * var_x12 + 0.001 * var_x8; + const double var_x17 = 1 / var_x16; + const double var_x18 = var_x15 * var_x17; + const double var_x21 = pow(var_chaste_interface__ionic_concentrations__Nai, (-2)); + const double var_x24 = 1 / (1.5 + mParameters[1]); + const double var_x25 = exp(-0.003743588350780262 * var_chaste_interface__membrane__V); + const double var_x26 = exp(0.01485884101040119 * mParameters[2]); + const double var_x27 = 0.037435883507802616 * var_chaste_interface__membrane__V; + const double var_x28 = exp(-var_x27); + const double var_x29 = 1 + 0.1245 * var_x25 + 0.036499999999999998 * var_x28 * (-0.14285714285714285 + 0.14285714285714285 * var_x26); + const double var_x36 = 1 / (1 + 1666.6666666666667 * var_chaste_interface__calcium_dynamics__Cai); + const double var_x37 = var_x36 * var_chaste_interface__L_type_Ca_channel_f_gate__f; + const double var_x38 = var_x37 * var_chaste_interface__L_type_Ca_channel_d_gate__d; + const double var_x50 = pow(var_chaste_interface__fast_sodium_current_m_gate__m, 3); + const double var_x51 = var_x50 * mParameters[4] * var_chaste_interface__fast_sodium_current_j_gate__j; + const double var_x52 = var_x51 * var_chaste_interface__fast_sodium_current_h_gate__h; + const double var_x53 = exp(var_x27); + const double var_x54 = -1 + var_x53; + const double var_x55 = 1 / var_x54; + const double var_x56 = var_x38 * var_x55; + const double var_x61 = var_x53 * var_x56 * var_chaste_interface__membrane__V; + const double var_x118 = var_x9 - var_x13; + const double var_x121 = pow(var_x16, (-2)); + const double var_x125 = 1 / var_chaste_interface__ionic_concentrations__Nai; + const double var_x146 = pow(var_chaste_interface__ionic_concentrations__Nai, 2); + const double var_x147 = var_x146 * mParameters[0]; + const double var_x148 = var_x147 * var_x7; + const double var_x150 = var_x24 * mParameters[1] / var_x29; + const double var_x151 = var_x150 / (pow((0.01 + var_x21), 2) * pow(var_chaste_interface__ionic_concentrations__Nai, 3)); + const double var_x153 = 0.10684935482199306 * var_x125 + 0.0018285756177517324 * var_x61 + 26.712338705498265 * var_x125 * var_x52; + const double var_x158 = 1 / M_PI; + const double var_x322 = 0.00018063215662022267 * var_x158; + + partialF = var_x322 * (-var_x153 - 0.12 * var_x151 - 0.018000000000000002 * var_x148 * var_x18 + 1.8e-5 * var_x118 * var_x121 * var_x146 * var_x15 * mParameters[0]); + } + else + { + const double y_save = rY[23]; + rY[23] += delta; + const double temp = EvaluateYDerivative23(var_chaste_interface__environment__time_converted, rY); + partialF = (temp-mEvalF[23])/delta; + rY[23] = y_save; + } + return partialF; + } + double Dynamicviswanathan_model_1999_epiFromCellMLGRL2Opt::EvaluateYDerivative24(double var_chaste_interface__environment__time_converted, std::vector& rY) + { + + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -88.984 + double var_chaste_interface__calcium_dynamics__Cai = rY[1]; + // Units: millimolar; Initial value: 0.00035237 + double var_chaste_interface__L_type_Ca_channel_d_gate__d = rY[5]; + // Units: dimensionless; Initial value: 3.18355e-06 + double var_chaste_interface__L_type_Ca_channel_f_gate__f = rY[6]; + // Units: dimensionless; Initial value: 0.9974388 + double var_chaste_interface__rapid_delayed_rectifier_potassium_current_xr_gate__xr = rY[9]; + // Units: dimensionless; Initial value: 0.00032151644 + double var_chaste_interface__slow_delayed_rectifier_potassium_current_xs1_gate__xs1 = rY[10]; + // Units: dimensionless; Initial value: 0.0272635 + double var_chaste_interface__slow_delayed_rectifier_potassium_current_xs2_gate__xs2 = rY[11]; + // Units: dimensionless; Initial value: 0.0631269 + double var_chaste_interface__ionic_concentrations__Nai = rY[23]; + // Units: millimolar; Initial value: 15.6748357 + double var_chaste_interface__ionic_concentrations__Ki = rY[24]; + // Units: millimolar; Initial value: 137.6244 + + + // Lookup table indexing + const bool _oob_0 = Dynamicviswanathan_model_1999_epiFromCellMLGRL2Opt_LookupTables::Instance()->CheckIndex0(var_chaste_interface__membrane__V); +// LCOV_EXCL_START + if (_oob_0) + EXCEPTION(DumpState("membrane_voltage outside lookup table range", rY , var_chaste_interface__environment__time_converted)); +// LCOV_EXCL_STOP + const double* const _lt_0_row = Dynamicviswanathan_model_1999_epiFromCellMLGRL2Opt_LookupTables::Instance()->IndexTable0(var_chaste_interface__membrane__V); + + // Mathematics + const double var_L_type_Ca_channel_f_Ca_gate__f_Ca = 1 / (1 + 1666.6666666666667 * var_chaste_interface__calcium_dynamics__Cai); // dimensionless + const double var_ionic_concentrations__V_myo = 8.2280000000000009e-12 * M_PI; // micro_litre + const double var_L_type_Ca_channel__i_CaK = 0.00069711623550831479 * (-0.75 * mParameters[1] + 0.75 * var_chaste_interface__ionic_concentrations__Ki * _lt_0_row[2]) * var_chaste_interface__L_type_Ca_channel_d_gate__d * var_L_type_Ca_channel_f_Ca_gate__f_Ca * var_chaste_interface__L_type_Ca_channel_f_gate__f * var_chaste_interface__membrane__V / (_lt_0_row[3]); // microA_per_microF + const double var_non_specific_calcium_activated_current__P_ns_Ca = 0; // cm_per_second + const double var_non_specific_calcium_activated_current__i_ns_K = 3612.0012202503358 * (-0.75 * mParameters[1] + 0.75 * var_chaste_interface__ionic_concentrations__Ki * _lt_0_row[2]) * var_chaste_interface__membrane__V * var_non_specific_calcium_activated_current__P_ns_Ca / ((1 + 1.7279999999999996e-9 / pow(var_chaste_interface__calcium_dynamics__Cai, 3)) * (_lt_0_row[3])); // microA_per_microF + const double var_slow_delayed_rectifier_potassium_current__i_Ks = (0.433 + 0.25979999999999998 / (1 + 6.4818210260626455e-7 * pow((1 / var_chaste_interface__calcium_dynamics__Cai), 1.3999999999999999))) * (-26.712338705498265 * log((0.018329999999999999 * mParameters[2] + mParameters[1]) / (0.018329999999999999 * var_chaste_interface__ionic_concentrations__Nai + var_chaste_interface__ionic_concentrations__Ki)) + var_chaste_interface__membrane__V) * var_chaste_interface__slow_delayed_rectifier_potassium_current_xs1_gate__xs1 * var_chaste_interface__slow_delayed_rectifier_potassium_current_xs2_gate__xs2; // microA_per_microF + const double var_sodium_potassium_pump__i_NaK = 2 * mParameters[1] / ((1 + 100 / pow(var_chaste_interface__ionic_concentrations__Nai, 2)) * (1.5 + mParameters[1]) * (1 + _lt_0_row[7] + 0.036499999999999998 * (-0.14285714285714285 + 0.14285714285714285 * exp(0.01485884101040119 * mParameters[2])) * _lt_0_row[6])); // microA_per_microF + const double var_time_independent_potassium_current__E_K = 26.712338705498265 * log(mParameters[1] / var_chaste_interface__ionic_concentrations__Ki); // millivolt + const double var_ATP_sensitive_potassium_current__i_K_ATP = 1.921898339896919e-8 * pow(mParameters[1], 0.23999999999999999) * (-var_time_independent_potassium_current__E_K + var_chaste_interface__membrane__V); // microA_per_microF + const double var_plateau_potassium_current__i_Kp = 0.0055199999999999997 * (-var_time_independent_potassium_current__E_K + var_chaste_interface__membrane__V) / (_lt_0_row[8]); // microA_per_microF + const double var_rapid_delayed_rectifier_potassium_current__i_Kr = 0.43033148291193518 * sqrt(mParameters[1]) * (-var_time_independent_potassium_current__E_K + var_chaste_interface__membrane__V) * mParameters[6] * var_chaste_interface__rapid_delayed_rectifier_potassium_current_xr_gate__xr / (_lt_0_row[9]); // microA_per_microF + const double var_time_independent_potassium_current__i_K1 = 438.93811257017387 * sqrt(mParameters[1]) * (-var_time_independent_potassium_current__E_K + var_chaste_interface__membrane__V) * mParameters[5] / ((1 + exp(-14.1227775 + 0.23849999999999999 * var_chaste_interface__membrane__V - 0.23849999999999999 * var_time_independent_potassium_current__E_K)) * (1020 / (1 + exp(-14.1227775 + 0.23849999999999999 * var_chaste_interface__membrane__V - 0.23849999999999999 * var_time_independent_potassium_current__E_K)) + 1000 * (0.49124000000000001 * exp(0.43983232 + 0.080320000000000003 * var_chaste_interface__membrane__V - 0.080320000000000003 * var_time_independent_potassium_current__E_K) + exp(-36.698642499999998 + 0.061749999999999999 * var_chaste_interface__membrane__V - 0.061749999999999999 * var_time_independent_potassium_current__E_K)) / (1 + exp(-2.4444678999999998 + 0.51429999999999998 * var_time_independent_potassium_current__E_K - 0.51429999999999998 * var_chaste_interface__membrane__V)))); // microA_per_microF + const double var_transient_outward_current__i_to = 0; // microA_per_microF + const double d_dt_chaste_interface_var_ionic_concentrations__Ki = 1.4862413846711923e-15 * (-var_ATP_sensitive_potassium_current__i_K_ATP - var_L_type_Ca_channel__i_CaK - var_non_specific_calcium_activated_current__i_ns_K - var_plateau_potassium_current__i_Kp - var_rapid_delayed_rectifier_potassium_current__i_Kr - var_slow_delayed_rectifier_potassium_current__i_Ks - var_time_independent_potassium_current__i_K1 - var_transient_outward_current__i_to + 2 * var_sodium_potassium_pump__i_NaK) / var_ionic_concentrations__V_myo; // millimolar / millisecond + + return d_dt_chaste_interface_var_ionic_concentrations__Ki; + } + + double Dynamicviswanathan_model_1999_epiFromCellMLGRL2Opt::EvaluatePartialDerivative24(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -88.984 + double var_chaste_interface__calcium_dynamics__Cai = rY[1]; + // Units: millimolar; Initial value: 0.00035237 + double var_chaste_interface__L_type_Ca_channel_d_gate__d = rY[5]; + // Units: dimensionless; Initial value: 3.18355e-06 + double var_chaste_interface__L_type_Ca_channel_f_gate__f = rY[6]; + // Units: dimensionless; Initial value: 0.9974388 + double var_chaste_interface__rapid_delayed_rectifier_potassium_current_xr_gate__xr = rY[9]; + // Units: dimensionless; Initial value: 0.00032151644 + double var_chaste_interface__slow_delayed_rectifier_potassium_current_xs1_gate__xs1 = rY[10]; + // Units: dimensionless; Initial value: 0.0272635 + double var_chaste_interface__slow_delayed_rectifier_potassium_current_xs2_gate__xs2 = rY[11]; + // Units: dimensionless; Initial value: 0.0631269 + double var_chaste_interface__ionic_concentrations__Nai = rY[23]; + // Units: millimolar; Initial value: 15.6748357 + double var_chaste_interface__ionic_concentrations__Ki = rY[24]; + // Units: millimolar; Initial value: 137.6244 + + + + const double var_x0 = 1 / var_chaste_interface__calcium_dynamics__Cai; + const double var_x1 = pow(var_x0, 1.3999999999999999); + const double var_x2 = 1 + 6.4818210260626455e-7 * var_x1; + const double var_x3 = 0.433 + 0.25979999999999998 / var_x2; + const double var_x27 = 0.037435883507802616 * var_chaste_interface__membrane__V; + const double var_x36 = 1 / (1 + 1666.6666666666667 * var_chaste_interface__calcium_dynamics__Cai); + const double var_x37 = var_x36 * var_chaste_interface__L_type_Ca_channel_f_gate__f; + const double var_x38 = var_x37 * var_chaste_interface__L_type_Ca_channel_d_gate__d; + const double var_x53 = exp(var_x27); + const double var_x54 = -1 + var_x53; + const double var_x55 = 1 / var_x54; + const double var_x56 = var_x38 * var_x55; + const double var_x61 = var_x53 * var_x56 * var_chaste_interface__membrane__V; + const double var_x64 = exp(1.2521739130434781 - 0.16722408026755853 * var_chaste_interface__membrane__V); + const double var_x65 = 1 + var_x64; + const double var_x66 = 1 / var_x65; + const double var_x68 = pow(mParameters[1], 0.23999999999999999); + const double var_x70 = 1 / var_chaste_interface__ionic_concentrations__Ki; + const double var_x71 = log(var_x70 * mParameters[1]); + const double var_x72 = -26.712338705498265 * var_x71 + var_chaste_interface__membrane__V; + const double var_x73 = exp(0.4017857142857143 + 0.044642857142857144 * var_chaste_interface__membrane__V); + const double var_x74 = 1 + var_x73; + const double var_x75 = sqrt(mParameters[1]); + const double var_x76 = var_x75 * mParameters[6] / var_x74; + const double var_x77 = var_x76 * var_chaste_interface__rapid_delayed_rectifier_potassium_current_xr_gate__xr; + const double var_x79 = exp(-14.1227775 + 0.23849999999999999 * var_chaste_interface__membrane__V - 6.3708927812613361 * var_x71); + const double var_x80 = 1 + var_x79; + const double var_x81 = 1 / var_x80; + const double var_x82 = exp(-2.4444678999999998 + 13.738155796237757 * var_x71 - 0.51429999999999998 * var_chaste_interface__membrane__V); + const double var_x83 = 1 + var_x82; + const double var_x84 = 1 / var_x83; + const double var_x85 = exp(0.43983232 + 0.080320000000000003 * var_chaste_interface__membrane__V - 2.1455350448256207 * var_x71); + const double var_x86 = exp(-36.698642499999998 + 0.061749999999999999 * var_chaste_interface__membrane__V - 1.6494869150645177 * var_x71); + const double var_x87 = var_x86 + 0.49124000000000001 * var_x85; + const double var_x88 = var_x84 * var_x87; + const double var_x89 = 1 / (1000 * var_x88 + 1020 * var_x81); + const double var_x90 = var_x75 * var_x81 * mParameters[5]; + const double var_x91 = var_x89 * var_x90; + const double var_x96 = 1000 * var_x84; + const double var_x97 = pow(var_x80, (-2)); + const double var_x98 = var_x82 * var_x87 / pow(var_x83, 2); + const double var_x99 = 0.0004218936106979757 * var_x72 * var_x90 / pow((var_x81 + 0.98039215686274506 * var_x88), 2); + const double var_x100 = var_x72 * var_x75; + const double var_x101 = var_x79 * var_x97; + const double var_x102 = var_x100 * var_x89 * mParameters[5]; + const double var_x115 = 1 / (0.018329999999999999 * var_chaste_interface__ionic_concentrations__Nai + var_chaste_interface__ionic_concentrations__Ki); + const double var_x154 = 0.00052283717663123607 * var_x61 + var_x99 * (-var_x96 * (1.053972635420138 * var_x70 * var_x85 + 1.6494869150645177 * var_x70 * var_x86) - 13738.155796237757 * var_x70 * var_x98 + 6498.310636886562 * var_x70 * var_x79 * var_x97) + 11.495160327182951 * var_x70 * var_x77 + 5.1338399412861326e-7 * var_x68 * var_x70 + 0.14745210965435041 * var_x66 * var_x70 + 11725.06353372661 * var_x70 * var_x91 - 2796.4276527937964 * var_x101 * var_x102 * var_x70; + const double var_x158 = 1 / M_PI; + const double var_x322 = 0.00018063215662022267 * var_x158; + const double var_x327 = -var_x3; + + partialF = var_x322 * (-var_x154 + 26.712338705498265 * var_x115 * var_x327 * var_chaste_interface__slow_delayed_rectifier_potassium_current_xs1_gate__xs1 * var_chaste_interface__slow_delayed_rectifier_potassium_current_xs2_gate__xs2); + } + else + { + const double y_save = rY[24]; + rY[24] += delta; + const double temp = EvaluateYDerivative24(var_chaste_interface__environment__time_converted, rY); + partialF = (temp-mEvalF[24])/delta; + rY[24] = y_save; + } + return partialF; + } + + std::vector Dynamicviswanathan_model_1999_epiFromCellMLGRL2Opt::ComputeDerivedQuantities(double var_chaste_interface__environment__time_converted, const std::vector & rY) + { + // Inputs: + // Time units: millisecond + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -88.984 + double var_chaste_interface__calcium_dynamics__Cai = rY[1]; + // Units: millimolar; Initial value: 0.00035237 + double var_chaste_interface__fast_sodium_current_m_gate__m = rY[2]; + // Units: dimensionless; Initial value: 0.00079287 + double var_chaste_interface__fast_sodium_current_h_gate__h = rY[3]; + // Units: dimensionless; Initial value: 0.9938 + double var_chaste_interface__fast_sodium_current_j_gate__j = rY[4]; + // Units: dimensionless; Initial value: 0.99573 + double var_chaste_interface__L_type_Ca_channel_d_gate__d = rY[5]; + // Units: dimensionless; Initial value: 3.18355e-06 + double var_chaste_interface__L_type_Ca_channel_f_gate__f = rY[6]; + // Units: dimensionless; Initial value: 0.9974388 + double var_chaste_interface__rapid_delayed_rectifier_potassium_current_xr_gate__xr = rY[9]; + // Units: dimensionless; Initial value: 0.00032151644 + double var_chaste_interface__ionic_concentrations__Nai = rY[23]; + // Units: millimolar; Initial value: 15.6748357 + double var_chaste_interface__ionic_concentrations__Ki = rY[24]; + // Units: millimolar; Initial value: 137.6244 + + // Lookup table indexing + const bool _oob_0 = Dynamicviswanathan_model_1999_epiFromCellMLGRL2Opt_LookupTables::Instance()->CheckIndex0(var_chaste_interface__membrane__V); +// LCOV_EXCL_START + if (_oob_0) + EXCEPTION(DumpState("membrane_voltage outside lookup table range", rY , var_chaste_interface__environment__time_converted)); +// LCOV_EXCL_STOP + const double* const _lt_0_row = Dynamicviswanathan_model_1999_epiFromCellMLGRL2Opt_LookupTables::Instance()->IndexTable0(var_chaste_interface__membrane__V); + + // Mathematics + const double var_L_type_Ca_channel__P_Ca = 0.00054000000000000001; // cm_per_second + const double var_L_type_Ca_channel__P_K = 1.9299999999999999e-7; // cm_per_second + const double var_L_type_Ca_channel__P_Na = 6.75e-7; // cm_per_second + const double var_L_type_Ca_channel__gamma_Cai = 1; // dimensionless + const double var_L_type_Ca_channel__gamma_Cao = 0.34100000000000003; // dimensionless + const double var_L_type_Ca_channel__gamma_Ki = 0.75; // dimensionless + const double var_L_type_Ca_channel__gamma_Ko = 0.75; // dimensionless + const double var_L_type_Ca_channel__gamma_Nai = 0.75; // dimensionless + const double var_L_type_Ca_channel__gamma_Nao = 0.75; // dimensionless + const double var_L_type_Ca_channel_f_Ca_gate__Km_Ca = 0.00059999999999999995; // millimolar + const double var_L_type_Ca_channel_f_Ca_gate__f_Ca = 1 / (1 + var_chaste_interface__calcium_dynamics__Cai / var_L_type_Ca_channel_f_Ca_gate__Km_Ca); // dimensionless + const double var_membrane__F = 96485; // coulomb_per_mole + const double var_membrane__I_st_converted = GetIntracellularAreaStimulus(var_chaste_interface__environment__time_converted); // uA_per_cm2 + const double var_membrane__R = 8314; // joule_per_kilomole_kelvin + const double var_membrane__T = 310; // kelvin + const double var_fast_sodium_current__E_Na = var_membrane__R * var_membrane__T * log(mParameters[2] / var_chaste_interface__ionic_concentrations__Nai) / var_membrane__F; // millivolt + const double var_L_type_Ca_channel__I_CaCa = 4 * pow(var_membrane__F, 2) * (-var_L_type_Ca_channel__gamma_Cao * mParameters[0] + var_L_type_Ca_channel__gamma_Cai * var_chaste_interface__calcium_dynamics__Cai * exp(2 * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * var_L_type_Ca_channel__P_Ca * var_chaste_interface__membrane__V / ((-1 + exp(2 * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * var_membrane__R * var_membrane__T); // microA_per_microF + const double var_L_type_Ca_channel__I_CaK = pow(var_membrane__F, 2) * (-var_L_type_Ca_channel__gamma_Ko * mParameters[1] + var_L_type_Ca_channel__gamma_Ki * var_chaste_interface__ionic_concentrations__Ki * exp(var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * var_L_type_Ca_channel__P_K * var_chaste_interface__membrane__V / ((-1 + exp(var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * var_membrane__R * var_membrane__T); // microA_per_microF + const double var_L_type_Ca_channel__I_CaNa = pow(var_membrane__F, 2) * (-var_L_type_Ca_channel__gamma_Nao * mParameters[2] + var_L_type_Ca_channel__gamma_Nai * var_chaste_interface__ionic_concentrations__Nai * exp(var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * var_L_type_Ca_channel__P_Na * var_chaste_interface__membrane__V / ((-1 + exp(var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * var_membrane__R * var_membrane__T); // microA_per_microF + const double var_L_type_Ca_channel__i_CaCa = var_L_type_Ca_channel__I_CaCa * var_chaste_interface__L_type_Ca_channel_d_gate__d * var_L_type_Ca_channel_f_Ca_gate__f_Ca * var_chaste_interface__L_type_Ca_channel_f_gate__f; // microA_per_microF + const double var_L_type_Ca_channel__i_CaK = var_L_type_Ca_channel__I_CaK * var_chaste_interface__L_type_Ca_channel_d_gate__d * var_L_type_Ca_channel_f_Ca_gate__f_Ca * var_chaste_interface__L_type_Ca_channel_f_gate__f; // microA_per_microF + const double var_L_type_Ca_channel__i_CaNa = var_L_type_Ca_channel__I_CaNa * var_chaste_interface__L_type_Ca_channel_d_gate__d * var_L_type_Ca_channel_f_Ca_gate__f_Ca * var_chaste_interface__L_type_Ca_channel_f_gate__f; // microA_per_microF + const double var_L_type_Ca_channel__i_Ca_L = var_L_type_Ca_channel__i_CaCa + var_L_type_Ca_channel__i_CaK + var_L_type_Ca_channel__i_CaNa; // microA_per_microF + const double var_L_type_Ca_channel__i_Ca_L_converted = HeartConfig::Instance()->GetCapacitance() * var_L_type_Ca_channel__i_Ca_L; // uA_per_cm2 + const double var_fast_sodium_current__i_Na = pow(var_chaste_interface__fast_sodium_current_m_gate__m, 3) * (-var_fast_sodium_current__E_Na + var_chaste_interface__membrane__V) * mParameters[4] * var_chaste_interface__fast_sodium_current_h_gate__h * var_chaste_interface__fast_sodium_current_j_gate__j; // microA_per_microF + const double var_fast_sodium_current__i_Na_converted = HeartConfig::Instance()->GetCapacitance() * var_fast_sodium_current__i_Na; // uA_per_cm2 + const double var_rapid_delayed_rectifier_potassium_current__Rect = 1 / (_lt_0_row[9]); // dimensionless + const double var_rapid_delayed_rectifier_potassium_current__g_Kr = 0.43033148291193518 * sqrt(mParameters[1]) * mParameters[6]; // milliS_per_microF + const double var_time_independent_potassium_current__E_K = var_membrane__R * var_membrane__T * log(mParameters[1] / var_chaste_interface__ionic_concentrations__Ki) / var_membrane__F; // millivolt + const double var_rapid_delayed_rectifier_potassium_current__i_Kr = (-var_time_independent_potassium_current__E_K + var_chaste_interface__membrane__V) * var_rapid_delayed_rectifier_potassium_current__Rect * var_rapid_delayed_rectifier_potassium_current__g_Kr * var_chaste_interface__rapid_delayed_rectifier_potassium_current_xr_gate__xr; // microA_per_microF + const double var_rapid_delayed_rectifier_potassium_current__i_Kr_converted = HeartConfig::Instance()->GetCapacitance() * var_rapid_delayed_rectifier_potassium_current__i_Kr; // uA_per_cm2 + const double var_time_independent_potassium_current__g_K1 = 0.43033148291193518 * sqrt(mParameters[1]) * mParameters[5]; // milliS_per_cm2 + const double var_time_independent_potassium_current_K1_gate__alpha_K1 = 1020 / (1 + exp(-14.1227775 + 0.23849999999999999 * var_chaste_interface__membrane__V - 0.23849999999999999 * var_time_independent_potassium_current__E_K)); // per_second + const double var_time_independent_potassium_current_K1_gate__beta_K1 = 1000 * (0.49124000000000001 * exp(0.43983232 + 0.080320000000000003 * var_chaste_interface__membrane__V - 0.080320000000000003 * var_time_independent_potassium_current__E_K) + exp(-36.698642499999998 + 0.061749999999999999 * var_chaste_interface__membrane__V - 0.061749999999999999 * var_time_independent_potassium_current__E_K)) / (1 + exp(-2.4444678999999998 + 0.51429999999999998 * var_time_independent_potassium_current__E_K - 0.51429999999999998 * var_chaste_interface__membrane__V)); // per_second + const double var_time_independent_potassium_current_K1_gate__K1_infinity = var_time_independent_potassium_current_K1_gate__alpha_K1 / (var_time_independent_potassium_current_K1_gate__alpha_K1 + var_time_independent_potassium_current_K1_gate__beta_K1); // dimensionless + const double var_time_independent_potassium_current__i_K1 = (-var_time_independent_potassium_current__E_K + var_chaste_interface__membrane__V) * var_time_independent_potassium_current__g_K1 * var_time_independent_potassium_current_K1_gate__K1_infinity; // microA_per_microF + const double var_time_independent_potassium_current__i_K1_converted = HeartConfig::Instance()->GetCapacitance() * var_time_independent_potassium_current__i_K1; // uA_per_cm2 + + std::vector dqs(6); + dqs[0] = var_L_type_Ca_channel__i_Ca_L_converted; + dqs[1] = var_fast_sodium_current__i_Na_converted; + dqs[2] = var_time_independent_potassium_current__i_K1_converted; + dqs[3] = var_rapid_delayed_rectifier_potassium_current__i_Kr_converted; + dqs[4] = var_membrane__I_st_converted; + dqs[5] = var_chaste_interface__environment__time_converted; + return dqs; + } + +template<> +void OdeSystemInformation::Initialise(void) +{ + this->mSystemName = "viswanathan_model_1999_epi"; + this->mFreeVariableName = "time"; + this->mFreeVariableUnits = "millisecond"; + + // rY[0]: + this->mVariableNames.push_back("membrane_voltage"); + this->mVariableUnits.push_back("millivolt"); + this->mInitialConditions.push_back(-88.984); + + // rY[1]: + this->mVariableNames.push_back("cytosolic_calcium_concentration"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(0.00035237); + + // rY[2]: + this->mVariableNames.push_back("fast_sodium_current_m_gate__m"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.00079287); + + // rY[3]: + this->mVariableNames.push_back("fast_sodium_current_h_gate__h"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.9938); + + // rY[4]: + this->mVariableNames.push_back("membrane_fast_sodium_current_j_gate"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.99573); + + // rY[5]: + this->mVariableNames.push_back("L_type_Ca_channel_d_gate__d"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(3.18355e-06); + + // rY[6]: + this->mVariableNames.push_back("L_type_Ca_channel_f_gate__f"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.9974388); + + // rY[7]: + this->mVariableNames.push_back("T_type_Ca_channel_b_gate__b"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.000967785); + + // rY[8]: + this->mVariableNames.push_back("T_type_Ca_channel_g_gate__g"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.95331988); + + // rY[9]: + this->mVariableNames.push_back("rapid_delayed_rectifier_potassium_current_xr_gate__xr"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.00032151644); + + // rY[10]: + this->mVariableNames.push_back("slow_delayed_rectifier_potassium_current_xs1_gate__xs1"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.0272635); + + // rY[11]: + this->mVariableNames.push_back("slow_delayed_rectifier_potassium_current_xs2_gate__xs2"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.0631269); + + // rY[12]: + this->mVariableNames.push_back("transient_outward_current_zdv_gate__zdv"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.011528); + + // rY[13]: + this->mVariableNames.push_back("transient_outward_current_ydv_gate__ydv"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.985232); + + // rY[14]: + this->mVariableNames.push_back("calcium_dynamics__Ca_JSR"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(0.817895); + + // rY[15]: + this->mVariableNames.push_back("calcium_dynamics__Ca_NSR"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(2.797668); + + // rY[16]: + this->mVariableNames.push_back("calcium_dynamics__APtrack"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(3.814e-87); + + // rY[17]: + this->mVariableNames.push_back("calcium_dynamics__APtrack2"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(2.1084e-86); + + // rY[18]: + this->mVariableNames.push_back("calcium_dynamics__APtrack3"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.01925); + + // rY[19]: + this->mVariableNames.push_back("calcium_dynamics__Cainfluxtrack"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(1.784e-87); + + // rY[20]: + this->mVariableNames.push_back("calcium_dynamics__OVRLDtrack"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.0); + + // rY[21]: + this->mVariableNames.push_back("calcium_dynamics__OVRLDtrack2"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.0); + + // rY[22]: + this->mVariableNames.push_back("calcium_dynamics__OVRLDtrack3"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.0); + + // rY[23]: + this->mVariableNames.push_back("cytosolic_sodium_concentration"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(15.6748357); + + // rY[24]: + this->mVariableNames.push_back("cytosolic_potassium_concentration"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(137.6244); + + // mParameters[0]: + this->mParameterNames.push_back("extracellular_calcium_concentration"); + this->mParameterUnits.push_back("millimolar"); + + // mParameters[1]: + this->mParameterNames.push_back("extracellular_potassium_concentration"); + this->mParameterUnits.push_back("millimolar"); + + // mParameters[2]: + this->mParameterNames.push_back("extracellular_sodium_concentration"); + this->mParameterUnits.push_back("millimolar"); + + // mParameters[3]: + this->mParameterNames.push_back("membrane_capacitance"); + this->mParameterUnits.push_back("microF"); + + // mParameters[4]: + this->mParameterNames.push_back("membrane_fast_sodium_current_conductance"); + this->mParameterUnits.push_back("milliS_per_microF"); + + // mParameters[5]: + this->mParameterNames.push_back("membrane_inward_rectifier_potassium_current_conductance"); + this->mParameterUnits.push_back("milliS_per_cm2"); + + // mParameters[6]: + this->mParameterNames.push_back("membrane_rapid_delayed_rectifier_potassium_current_conductance"); + this->mParameterUnits.push_back("milliS_per_cm2"); + + // Derived Quantity index [0]: + this->mDerivedQuantityNames.push_back("membrane_L_type_calcium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [1]: + this->mDerivedQuantityNames.push_back("membrane_fast_sodium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [2]: + this->mDerivedQuantityNames.push_back("membrane_inward_rectifier_potassium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [3]: + this->mDerivedQuantityNames.push_back("membrane_rapid_delayed_rectifier_potassium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [4]: + this->mDerivedQuantityNames.push_back("membrane_stimulus_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [5]: + this->mDerivedQuantityNames.push_back("time"); + this->mDerivedQuantityUnits.push_back("millisecond"); + + this->mInitialised = true; +} + +// Serialization for Boost >= 1.36 +#include "SerializationExportWrapperForCpp.hpp" +CHASTE_CLASS_EXPORT(Dynamicviswanathan_model_1999_epiFromCellMLGRL2Opt) +extern "C" +{ + AbstractCardiacCellInterface* MakeCardiacCell( + boost::shared_ptr pSolver, + boost::shared_ptr pStimulus) + { + return new Dynamicviswanathan_model_1999_epiFromCellMLGRL2Opt(pSolver, pStimulus); + } + +} diff --git a/chaste_codegen/tests/numerical/baseline/GRL2Opt/dynamic_viswanathan_model_1999_epi.hpp b/chaste_codegen/tests/numerical/baseline/GRL2Opt/dynamic_viswanathan_model_1999_epi.hpp new file mode 100644 index 00000000..bd776ac2 --- /dev/null +++ b/chaste_codegen/tests/numerical/baseline/GRL2Opt/dynamic_viswanathan_model_1999_epi.hpp @@ -0,0 +1,141 @@ +#ifndef DYNAMICVISWANATHAN_MODEL_1999_EPIFROMCELLMLGRL2OPT_HPP_ +#define DYNAMICVISWANATHAN_MODEL_1999_EPIFROMCELLMLGRL2OPT_HPP_ + +//! @file +//! +//! This source file was generated from CellML by chaste_codegen version (version omitted as unimportant) +//! +//! Model: viswanathan_model_1999_epi +//! +//! Processed by chaste_codegen: https://github.com/ModellingWebLab/chaste-codegen +//! (translator: chaste_codegen, model type: GeneralizedRushLarsenSecondOrderOpt) +//! on (date omitted as unimportant) +//! +//! + +#include "ChasteSerialization.hpp" +#include +#include "AbstractDynamicallyLoadableEntity.hpp" +#include "AbstractStimulusFunction.hpp" +#include "AbstractGeneralizedRushLarsenCardiacCell.hpp" + +class Dynamicviswanathan_model_1999_epiFromCellMLGRL2Opt : public AbstractGeneralizedRushLarsenCardiacCell, public AbstractDynamicallyLoadableEntity +{ + friend class boost::serialization::access; + template + void serialize(Archive & archive, const unsigned int version) + { + archive & boost::serialization::base_object(*this); + archive & boost::serialization::base_object(*this); + } + + // + // Settable parameters and readable variables + // + +private: + static AbstractGeneralizedRushLarsenCardiacCell* CreateMethod(boost::shared_ptr p_solver, boost::shared_ptr p_stimulus); + static bool registered; +private: +const bool is_concentration[25] = {false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, true}; +const bool is_probability[25] = {false, false, false, false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false}; +public: + + boost::shared_ptr UseCellMLDefaultStimulus(); + double GetIntracellularCalciumConcentration(); + Dynamicviswanathan_model_1999_epiFromCellMLGRL2Opt(boost::shared_ptr /* unused; should be empty */, boost::shared_ptr pIntracellularStimulus); + ~Dynamicviswanathan_model_1999_epiFromCellMLGRL2Opt(); + void VerifyStateVariables(); + AbstractLookupTableCollection* GetLookupTableCollection(); + double GetIIonic(const std::vector* pStateVariables=NULL); + void UpdateTransmembranePotential(double var_chaste_interface__environment__time_converted); + void ComputeOneStepExceptVoltage(double var_chaste_interface__environment__time_converted); + + double EvaluateYDerivative0(double var_chaste_interface__environment__time_converted, std::vector& rY); + double EvaluatePartialDerivative0(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative1(double var_chaste_interface__environment__time_converted, std::vector& rY); + double EvaluatePartialDerivative1(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative2(double var_chaste_interface__environment__time_converted, std::vector& rY); + double EvaluatePartialDerivative2(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative3(double var_chaste_interface__environment__time_converted, std::vector& rY); + double EvaluatePartialDerivative3(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative4(double var_chaste_interface__environment__time_converted, std::vector& rY); + double EvaluatePartialDerivative4(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative5(double var_chaste_interface__environment__time_converted, std::vector& rY); + double EvaluatePartialDerivative5(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative6(double var_chaste_interface__environment__time_converted, std::vector& rY); + double EvaluatePartialDerivative6(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative7(double var_chaste_interface__environment__time_converted, std::vector& rY); + double EvaluatePartialDerivative7(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative8(double var_chaste_interface__environment__time_converted, std::vector& rY); + double EvaluatePartialDerivative8(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative9(double var_chaste_interface__environment__time_converted, std::vector& rY); + double EvaluatePartialDerivative9(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative10(double var_chaste_interface__environment__time_converted, std::vector& rY); + double EvaluatePartialDerivative10(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative11(double var_chaste_interface__environment__time_converted, std::vector& rY); + double EvaluatePartialDerivative11(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative12(double var_chaste_interface__environment__time_converted, std::vector& rY); + double EvaluatePartialDerivative12(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative13(double var_chaste_interface__environment__time_converted, std::vector& rY); + double EvaluatePartialDerivative13(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative14(double var_chaste_interface__environment__time_converted, std::vector& rY); + double EvaluatePartialDerivative14(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative15(double var_chaste_interface__environment__time_converted, std::vector& rY); + double EvaluatePartialDerivative15(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative16(double var_chaste_interface__environment__time_converted, std::vector& rY); + double EvaluatePartialDerivative16(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative17(double var_chaste_interface__environment__time_converted, std::vector& rY); + double EvaluatePartialDerivative17(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative18(double var_chaste_interface__environment__time_converted, std::vector& rY); + double EvaluatePartialDerivative18(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative19(double var_chaste_interface__environment__time_converted, std::vector& rY); + double EvaluatePartialDerivative19(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative20(double var_chaste_interface__environment__time_converted, std::vector& rY); + double EvaluatePartialDerivative20(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative21(double var_chaste_interface__environment__time_converted, std::vector& rY); + double EvaluatePartialDerivative21(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative22(double var_chaste_interface__environment__time_converted, std::vector& rY); + double EvaluatePartialDerivative22(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative23(double var_chaste_interface__environment__time_converted, std::vector& rY); + double EvaluatePartialDerivative23(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative24(double var_chaste_interface__environment__time_converted, std::vector& rY); + double EvaluatePartialDerivative24(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical=false); + + std::vector ComputeDerivedQuantities(double var_chaste_interface__environment__time_converted, const std::vector & rY); +}; + +// Needs to be included last +#include "SerializationExportWrapper.hpp" +CHASTE_CLASS_EXPORT(Dynamicviswanathan_model_1999_epiFromCellMLGRL2Opt) + +namespace boost +{ + namespace serialization + { + template + inline void save_construct_data( + Archive & ar, const Dynamicviswanathan_model_1999_epiFromCellMLGRL2Opt * t, const unsigned int fileVersion) + { + const boost::shared_ptr p_solver = t->GetSolver(); + const boost::shared_ptr p_stimulus = t->GetStimulusFunction(); + ar << p_solver; + ar << p_stimulus; + } + + template + inline void load_construct_data( + Archive & ar, Dynamicviswanathan_model_1999_epiFromCellMLGRL2Opt * t, const unsigned int fileVersion) + { + boost::shared_ptr p_solver; + boost::shared_ptr p_stimulus; + ar >> p_solver; + ar >> p_stimulus; + ::new(t)Dynamicviswanathan_model_1999_epiFromCellMLGRL2Opt(p_solver, p_stimulus); + } + + } + +} + +#endif // DYNAMICVISWANATHAN_MODEL_1999_EPIFROMCELLMLGRL2OPT_HPP_ \ No newline at end of file diff --git a/chaste_codegen/tests/numerical/baseline/GRL2Opt/dynamic_winslow_model_1999.cpp b/chaste_codegen/tests/numerical/baseline/GRL2Opt/dynamic_winslow_model_1999.cpp new file mode 100644 index 00000000..77a50e74 --- /dev/null +++ b/chaste_codegen/tests/numerical/baseline/GRL2Opt/dynamic_winslow_model_1999.cpp @@ -0,0 +1,3004 @@ +//! @file +//! +//! This source file was generated from CellML by chaste_codegen version (version omitted as unimportant) +//! +//! Model: winslow_model_1999 +//! +//! Processed by chaste_codegen: https://github.com/ModellingWebLab/chaste-codegen +//! (translator: chaste_codegen, model type: GeneralizedRushLarsenSecondOrderOpt) +//! on (date omitted as unimportant) +//! +//! + +#include "dynamic_winslow_model_1999.hpp" +#include +#include +#include +#include "Exception.hpp" +#include "OdeSystemInformation.hpp" +#include "RegularStimulus.hpp" +#include "HeartConfig.hpp" +#include "IsNan.hpp" +#include "MathsCustomFunctions.hpp" + + boost::shared_ptr Dynamicwinslow_model_1999FromCellMLGRL2Opt::UseCellMLDefaultStimulus() + { + // Use the default stimulus specified by CellML metadata + const double var_chaste_interface__membrane__stim_amplitude = -21.126799999999999 * HeartConfig::Instance()->GetCapacitance(); // microA_per_microF + const double var_chaste_interface__membrane__stim_duration = 2.0; // millisecond + const double var_chaste_interface__membrane__stim_period = 1000.0; // millisecond + const double var_chaste_interface__membrane__stim_start = 100.0; // millisecond + boost::shared_ptr p_cellml_stim(new RegularStimulus( + -fabs(var_chaste_interface__membrane__stim_amplitude), + var_chaste_interface__membrane__stim_duration, + var_chaste_interface__membrane__stim_period, + var_chaste_interface__membrane__stim_start + )); + mpIntracellularStimulus = p_cellml_stim; + return p_cellml_stim; + } + + Dynamicwinslow_model_1999FromCellMLGRL2Opt::Dynamicwinslow_model_1999FromCellMLGRL2Opt(boost::shared_ptr /* unused; should be empty */, boost::shared_ptr pIntracellularStimulus) + : AbstractGeneralizedRushLarsenCardiacCell( + 33, + 0, + pIntracellularStimulus) + { + // Time units: millisecond + // + this->mpSystemInfo = OdeSystemInformation::Instance(); + Init(); + + // We have a default stimulus specified in the CellML file metadata + this->mHasDefaultStimulusFromCellML = true; + + } + + Dynamicwinslow_model_1999FromCellMLGRL2Opt::~Dynamicwinslow_model_1999FromCellMLGRL2Opt() + { + } + + double Dynamicwinslow_model_1999FromCellMLGRL2Opt::GetIIonic(const std::vector* pStateVariables) + { + // For state variable interpolation (SVI) we read in interpolated state variables, + // otherwise for ionic current interpolation (ICI) we use the state variables of this model (node). + if (!pStateVariables) pStateVariables = &rGetStateVariables(); + const std::vector& rY = *pStateVariables; + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -96.1638 + double var_chaste_interface__fast_sodium_current_m_gate__m = rY[1]; + // Units: dimensionless; Initial value: 0.0328302 + double var_chaste_interface__fast_sodium_current_h_gate__h = rY[2]; + // Units: dimensionless; Initial value: 0.988354 + double var_chaste_interface__fast_sodium_current_j_gate__j = rY[3]; + // Units: dimensionless; Initial value: 0.99254 + double var_chaste_interface__rapid_activating_delayed_rectifiyer_K_current_X_kr_gate__X_kr = rY[4]; + // Units: dimensionless; Initial value: 0.51 + double var_chaste_interface__slow_activating_delayed_rectifiyer_K_current_X_ks_gate__X_ks = rY[5]; + // Units: dimensionless; Initial value: 0.264 + double var_chaste_interface__transient_outward_potassium_current_X_to1_gate__X_to1 = rY[6]; + // Units: dimensionless; Initial value: 2.63 + double var_chaste_interface__transient_outward_potassium_current_Y_to1_gate__Y_to1 = rY[7]; + // Units: dimensionless; Initial value: 0.99 + double var_chaste_interface__L_type_Ca_current__O = rY[8]; + // Units: dimensionless; Initial value: 9.84546e-21 + double var_chaste_interface__L_type_Ca_current__O_Ca = rY[9]; + // Units: dimensionless; Initial value: 0.0 + double var_chaste_interface__L_type_Ca_current_y_gate__y = rY[20]; + // Units: dimensionless; Initial value: 0.798 + double var_chaste_interface__intracellular_ion_concentrations__Nai = rY[27]; + // Units: millimolar; Initial value: 10.0 + double var_chaste_interface__intracellular_ion_concentrations__Cai = rY[28]; + // Units: millimolar; Initial value: 8e-05 + double var_chaste_interface__intracellular_ion_concentrations__Ki = rY[29]; + // Units: millimolar; Initial value: 157.8 + + const double var_L_type_Ca_current__P_Ca = 0.00031250000000000001; // cm_per_second + const double var_L_type_Ca_current__P_K = 5.7899999999999998e-7; // cm_per_second + const double var_L_type_Ca_current__i_Ca_half = -0.26500000000000001; // microA_per_microF + const double var_Na_Ca_exchanger__K_NaCa = 0.29999999999999999; // microA_per_microF + const double var_Na_Ca_exchanger__K_mCa = 1.3799999999999999; // millimolar + const double var_Na_Ca_exchanger__K_mNa = 87.5; // millimolar + const double var_Na_Ca_exchanger__K_sat = 0.20000000000000001; // dimensionless + const double var_Na_Ca_exchanger__eta = 0.34999999999999998; // dimensionless + const double var_calcium_background_current__g_Cab = 0.00038420000000000001; // milliS_per_microF + const double var_fast_sodium_current__g_Na = 12.800000000000001; // milliS_per_microF + const double var_membrane__C_sc = 0.001; // microF_per_cm2 + const double var_membrane__F = 96.485341500000004; // coulomb_per_millimole + const double var_membrane__R = 8.3144720000000003; // joule_per_mole_kelvin + const double var_membrane__T = 310.0; // kelvin + const double var_membrane__i_Stim = 0.0; // microA_per_microF + const double var_plateau_potassium_current__g_Kp = 0.0022160000000000001; // milliS_per_microF + const double var_plateau_potassium_current_Kp_gate__Kp_V = 1.0 / (1.0 + exp(1.2521739130434781 - 0.16722408026755853 * var_chaste_interface__membrane__V)); // dimensionless + const double var_rapid_activating_delayed_rectifiyer_K_current__R_V = 1.0 / (1.0 + 1.4944999999999999 * exp(0.044600000000000001 * var_chaste_interface__membrane__V)); // dimensionless + const double var_rapid_activating_delayed_rectifiyer_K_current__g_Kr = 0.0033999999999999998; // milliS_per_microF + const double var_sarcolemmal_calcium_pump__I_pCa = 0.050000000000000003; // microA_per_microF + const double var_sarcolemmal_calcium_pump__K_mpCa = 5.0000000000000002e-5; // millimolar + const double var_sarcolemmal_calcium_pump__i_p_Ca = var_chaste_interface__intracellular_ion_concentrations__Cai * var_sarcolemmal_calcium_pump__I_pCa / (var_chaste_interface__intracellular_ion_concentrations__Cai + var_sarcolemmal_calcium_pump__K_mpCa); // microA_per_microF + const double var_slow_activating_delayed_rectifiyer_K_current__g_Ks = 0.0027133999999999999; // milliS_per_microF + const double var_sodium_background_current__g_Nab = 0.0030999999999999999; // milliS_per_microF + const double var_sodium_potassium_pump__I_NaK = 0.69299999999999995; // microA_per_microF + const double var_sodium_potassium_pump__K_mKo = 1.5; // millimolar + const double var_sodium_potassium_pump__K_mNai = 10.0; // millimolar + const double var_standard_ionic_concentrations__Cao = 2.0; // millimolar + const double var_L_type_Ca_current__i_Ca_max = 4000.0 * pow(var_membrane__F, 2) * (0.001 * exp(2.0 * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T)) - 0.34100000000000003 * var_standard_ionic_concentrations__Cao) * var_L_type_Ca_current__P_Ca * var_chaste_interface__membrane__V / ((-1.0 + exp(2.0 * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * var_membrane__R * var_membrane__T); // microA_per_microF + const double var_L_type_Ca_current__i_Ca = (var_chaste_interface__L_type_Ca_current__O + var_chaste_interface__L_type_Ca_current__O_Ca) * var_L_type_Ca_current__i_Ca_max * var_chaste_interface__L_type_Ca_current_y_gate__y; // microA_per_microF + const double var_L_type_Ca_current__p_prime_k = var_L_type_Ca_current__P_K / (1.0 + var_L_type_Ca_current__i_Ca_max / var_L_type_Ca_current__i_Ca_half); // cm_per_second + const double var_calcium_background_current__E_Ca = 0.5 * var_membrane__R * var_membrane__T * log(var_standard_ionic_concentrations__Cao / var_chaste_interface__intracellular_ion_concentrations__Cai) / var_membrane__F; // millivolt + const double var_calcium_background_current__i_Ca_b = (-var_calcium_background_current__E_Ca + var_chaste_interface__membrane__V) * var_calcium_background_current__g_Cab; // microA_per_microF + const double var_standard_ionic_concentrations__Ko = 4.0; // millimolar + const double var_L_type_Ca_current__i_Ca_K = 1.0 * pow(var_membrane__F, 2) * (-var_standard_ionic_concentrations__Ko + var_chaste_interface__intracellular_ion_concentrations__Ki * exp(var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * (var_chaste_interface__L_type_Ca_current__O + var_chaste_interface__L_type_Ca_current__O_Ca) * var_L_type_Ca_current__p_prime_k * var_chaste_interface__L_type_Ca_current_y_gate__y * var_chaste_interface__membrane__V / ((-1.0 + exp(var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * var_membrane__R * var_membrane__T); // microA_per_microF + const double var_rapid_activating_delayed_rectifiyer_K_current__E_K = var_membrane__R * var_membrane__T * log(var_standard_ionic_concentrations__Ko / var_chaste_interface__intracellular_ion_concentrations__Ki) / var_membrane__F; // millivolt + const double var_plateau_potassium_current__i_Kp = (-var_rapid_activating_delayed_rectifiyer_K_current__E_K + var_chaste_interface__membrane__V) * var_plateau_potassium_current__g_Kp * var_plateau_potassium_current_Kp_gate__Kp_V; // microA_per_microF + const double var_rapid_activating_delayed_rectifiyer_K_current__f_Ko = 0.5 * sqrt(var_standard_ionic_concentrations__Ko); // dimensionless + const double var_rapid_activating_delayed_rectifiyer_K_current__i_Kr = (-var_rapid_activating_delayed_rectifiyer_K_current__E_K + var_chaste_interface__membrane__V) * var_rapid_activating_delayed_rectifiyer_K_current__R_V * var_rapid_activating_delayed_rectifiyer_K_current__f_Ko * var_rapid_activating_delayed_rectifiyer_K_current__g_Kr * var_chaste_interface__rapid_activating_delayed_rectifiyer_K_current_X_kr_gate__X_kr; // microA_per_microF + const double var_standard_ionic_concentrations__Nao = 138.0; // millimolar + const double var_Na_Ca_exchanger__i_NaCa = 5000.0 * (pow(var_chaste_interface__intracellular_ion_concentrations__Nai, 3) * var_standard_ionic_concentrations__Cao * exp(var_Na_Ca_exchanger__eta * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T)) - pow(var_standard_ionic_concentrations__Nao, 3) * var_chaste_interface__intracellular_ion_concentrations__Cai * exp((-1.0 + var_Na_Ca_exchanger__eta) * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * var_Na_Ca_exchanger__K_NaCa / ((1.0 + var_Na_Ca_exchanger__K_sat * exp((-1.0 + var_Na_Ca_exchanger__eta) * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * (pow(var_Na_Ca_exchanger__K_mNa, 3) + pow(var_standard_ionic_concentrations__Nao, 3)) * (var_Na_Ca_exchanger__K_mCa + var_standard_ionic_concentrations__Cao)); // microA_per_microF + const double var_fast_sodium_current__E_Na = var_membrane__R * var_membrane__T * log(var_standard_ionic_concentrations__Nao / var_chaste_interface__intracellular_ion_concentrations__Nai) / var_membrane__F; // millivolt + const double var_fast_sodium_current__i_Na = pow(var_chaste_interface__fast_sodium_current_m_gate__m, 3) * (-var_fast_sodium_current__E_Na + var_chaste_interface__membrane__V) * var_fast_sodium_current__g_Na * var_chaste_interface__fast_sodium_current_h_gate__h * var_chaste_interface__fast_sodium_current_j_gate__j; // microA_per_microF + const double var_slow_activating_delayed_rectifiyer_K_current__E_Ks = var_membrane__R * var_membrane__T * log((1.0 * var_standard_ionic_concentrations__Ko + 0.018329999999999999 * var_standard_ionic_concentrations__Nao) / (1.0 * var_chaste_interface__intracellular_ion_concentrations__Ki + 0.018329999999999999 * var_chaste_interface__intracellular_ion_concentrations__Nai)) / var_membrane__F; // millivolt + const double var_slow_activating_delayed_rectifiyer_K_current__i_Ks = pow(var_chaste_interface__slow_activating_delayed_rectifiyer_K_current_X_ks_gate__X_ks, 2) * (-var_slow_activating_delayed_rectifiyer_K_current__E_Ks + var_chaste_interface__membrane__V) * var_slow_activating_delayed_rectifiyer_K_current__g_Ks; // microA_per_microF + const double var_sodium_background_current__i_Na_b = (-var_fast_sodium_current__E_Na + var_chaste_interface__membrane__V) * var_sodium_background_current__g_Nab; // microA_per_microF + const double var_sodium_potassium_pump__sigma = -0.14285714285714285 + 0.14285714285714285 * exp(0.01485884101040119 * var_standard_ionic_concentrations__Nao); // dimensionless + const double var_sodium_potassium_pump__f_NaK = 1.0 / (1.0 + 0.1245 * exp(-0.10000000000000001 * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T)) + 0.036499999999999998 * var_sodium_potassium_pump__sigma * exp(-var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))); // dimensionless + const double var_sodium_potassium_pump__i_NaK = var_sodium_potassium_pump__I_NaK * var_sodium_potassium_pump__f_NaK * var_standard_ionic_concentrations__Ko / ((1.0 + pow((var_sodium_potassium_pump__K_mNai / var_chaste_interface__intracellular_ion_concentrations__Nai), 1.5)) * (var_sodium_potassium_pump__K_mKo + var_standard_ionic_concentrations__Ko)); // microA_per_microF + const double var_time_independent_potassium_current__K_mK1 = 13.0; // millimolar + const double var_time_independent_potassium_current__g_K1 = 2.7999999999999998; // milliS_per_microF + const double var_time_independent_potassium_current_K1_gate__K1_infinity_V = 1.0 / (2.0 + exp(1.5 * (-var_rapid_activating_delayed_rectifiyer_K_current__E_K + var_chaste_interface__membrane__V) * var_membrane__F / (var_membrane__R * var_membrane__T))); // dimensionless + const double var_time_independent_potassium_current__i_K1 = (-var_rapid_activating_delayed_rectifiyer_K_current__E_K + var_chaste_interface__membrane__V) * var_standard_ionic_concentrations__Ko * var_time_independent_potassium_current__g_K1 * var_time_independent_potassium_current_K1_gate__K1_infinity_V / (var_standard_ionic_concentrations__Ko + var_time_independent_potassium_current__K_mK1); // microA_per_microF + const double var_transient_outward_potassium_current__g_to1 = 0.23815; // milliS_per_microF + const double var_transient_outward_potassium_current__i_to1 = (-var_rapid_activating_delayed_rectifiyer_K_current__E_K + var_chaste_interface__membrane__V) * var_transient_outward_potassium_current__g_to1 * var_chaste_interface__transient_outward_potassium_current_X_to1_gate__X_to1 * var_chaste_interface__transient_outward_potassium_current_Y_to1_gate__Y_to1; // microA_per_microF + const double var_membrane__V_orig_deriv = -1.0 * (var_L_type_Ca_current__i_Ca + var_L_type_Ca_current__i_Ca_K + var_Na_Ca_exchanger__i_NaCa + var_calcium_background_current__i_Ca_b + var_fast_sodium_current__i_Na + var_membrane__i_Stim + var_plateau_potassium_current__i_Kp + var_rapid_activating_delayed_rectifiyer_K_current__i_Kr + var_sarcolemmal_calcium_pump__i_p_Ca + var_slow_activating_delayed_rectifiyer_K_current__i_Ks + var_sodium_background_current__i_Na_b + var_sodium_potassium_pump__i_NaK + var_time_independent_potassium_current__i_K1 + var_transient_outward_potassium_current__i_to1) / var_membrane__C_sc; // millivolt / second + const double var_chaste_interface__i_ionic = 0.001 * HeartConfig::Instance()->GetCapacitance() * var_membrane__V_orig_deriv; // uA_per_cm2 + + const double i_ionic = var_chaste_interface__i_ionic; + EXCEPT_IF_NOT(!std::isnan(i_ionic)); + return i_ionic; + } + + void Dynamicwinslow_model_1999FromCellMLGRL2Opt::UpdateTransmembranePotential(double var_chaste_interface__environment__time_converted) + { + std::vector& rY = rGetStateVariables(); + const unsigned v_index = GetVoltageIndex(); + const double delta = 1e-8; + const double yinit = rY[v_index]; + + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -96.1638 + double var_chaste_interface__fast_sodium_current_m_gate__m = rY[1]; + // Units: dimensionless; Initial value: 0.0328302 + double var_chaste_interface__fast_sodium_current_h_gate__h = rY[2]; + // Units: dimensionless; Initial value: 0.988354 + double var_chaste_interface__fast_sodium_current_j_gate__j = rY[3]; + // Units: dimensionless; Initial value: 0.99254 + double var_chaste_interface__rapid_activating_delayed_rectifiyer_K_current_X_kr_gate__X_kr = rY[4]; + // Units: dimensionless; Initial value: 0.51 + double var_chaste_interface__slow_activating_delayed_rectifiyer_K_current_X_ks_gate__X_ks = rY[5]; + // Units: dimensionless; Initial value: 0.264 + double var_chaste_interface__transient_outward_potassium_current_X_to1_gate__X_to1 = rY[6]; + // Units: dimensionless; Initial value: 2.63 + double var_chaste_interface__transient_outward_potassium_current_Y_to1_gate__Y_to1 = rY[7]; + // Units: dimensionless; Initial value: 0.99 + double var_chaste_interface__L_type_Ca_current__O = rY[8]; + // Units: dimensionless; Initial value: 9.84546e-21 + double var_chaste_interface__L_type_Ca_current__O_Ca = rY[9]; + // Units: dimensionless; Initial value: 0.0 + double var_chaste_interface__L_type_Ca_current_y_gate__y = rY[20]; + // Units: dimensionless; Initial value: 0.798 + double var_chaste_interface__intracellular_ion_concentrations__Nai = rY[27]; + // Units: millimolar; Initial value: 10.0 + double var_chaste_interface__intracellular_ion_concentrations__Cai = rY[28]; + // Units: millimolar; Initial value: 8e-05 + double var_chaste_interface__intracellular_ion_concentrations__Ki = rY[29]; + // Units: millimolar; Initial value: 157.8 + + + // Mathematics + double d_dt_chaste_interface_var_membrane__V; + const double var_L_type_Ca_current__P_Ca = 0.00031250000000000001; // cm_per_second + const double var_L_type_Ca_current__P_K = 5.7899999999999998e-7; // cm_per_second + const double var_L_type_Ca_current__i_Ca_half = -0.26500000000000001; // microA_per_microF + const double var_Na_Ca_exchanger__K_NaCa = 0.29999999999999999; // microA_per_microF + const double var_Na_Ca_exchanger__K_mCa = 1.3799999999999999; // millimolar + const double var_Na_Ca_exchanger__K_mNa = 87.5; // millimolar + const double var_Na_Ca_exchanger__K_sat = 0.20000000000000001; // dimensionless + const double var_Na_Ca_exchanger__eta = 0.34999999999999998; // dimensionless + const double var_calcium_background_current__g_Cab = 0.00038420000000000001; // milliS_per_microF + const double var_fast_sodium_current__g_Na = 12.800000000000001; // milliS_per_microF + const double var_membrane__C_sc = 0.001; // microF_per_cm2 + const double var_membrane__F = 96.485341500000004; // coulomb_per_millimole + const double var_membrane__R = 8.3144720000000003; // joule_per_mole_kelvin + const double var_membrane__T = 310.0; // kelvin + const double var_membrane__i_Stim_converter = GetIntracellularAreaStimulus(var_chaste_interface__environment__time_converted); // uA_per_cm2 + const double var_membrane__i_Stim = var_membrane__i_Stim_converter / HeartConfig::Instance()->GetCapacitance(); // microA_per_microF + const double var_plateau_potassium_current__g_Kp = 0.0022160000000000001; // milliS_per_microF + const double var_plateau_potassium_current_Kp_gate__Kp_V = 1.0 / (1.0 + exp(1.2521739130434781 - 0.16722408026755853 * var_chaste_interface__membrane__V)); // dimensionless + const double var_rapid_activating_delayed_rectifiyer_K_current__R_V = 1.0 / (1.0 + 1.4944999999999999 * exp(0.044600000000000001 * var_chaste_interface__membrane__V)); // dimensionless + const double var_rapid_activating_delayed_rectifiyer_K_current__g_Kr = 0.0033999999999999998; // milliS_per_microF + const double var_sarcolemmal_calcium_pump__I_pCa = 0.050000000000000003; // microA_per_microF + const double var_sarcolemmal_calcium_pump__K_mpCa = 5.0000000000000002e-5; // millimolar + const double var_sarcolemmal_calcium_pump__i_p_Ca = var_chaste_interface__intracellular_ion_concentrations__Cai * var_sarcolemmal_calcium_pump__I_pCa / (var_chaste_interface__intracellular_ion_concentrations__Cai + var_sarcolemmal_calcium_pump__K_mpCa); // microA_per_microF + const double var_slow_activating_delayed_rectifiyer_K_current__g_Ks = 0.0027133999999999999; // milliS_per_microF + const double var_sodium_background_current__g_Nab = 0.0030999999999999999; // milliS_per_microF + const double var_sodium_potassium_pump__I_NaK = 0.69299999999999995; // microA_per_microF + const double var_sodium_potassium_pump__K_mKo = 1.5; // millimolar + const double var_sodium_potassium_pump__K_mNai = 10.0; // millimolar + const double var_standard_ionic_concentrations__Cao = 2.0; // millimolar + const double var_L_type_Ca_current__i_Ca_max = 4000.0 * pow(var_membrane__F, 2) * (0.001 * exp(2.0 * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T)) - 0.34100000000000003 * var_standard_ionic_concentrations__Cao) * var_L_type_Ca_current__P_Ca * var_chaste_interface__membrane__V / ((-1.0 + exp(2.0 * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * var_membrane__R * var_membrane__T); // microA_per_microF + const double var_L_type_Ca_current__i_Ca = (var_chaste_interface__L_type_Ca_current__O + var_chaste_interface__L_type_Ca_current__O_Ca) * var_L_type_Ca_current__i_Ca_max * var_chaste_interface__L_type_Ca_current_y_gate__y; // microA_per_microF + const double var_L_type_Ca_current__p_prime_k = var_L_type_Ca_current__P_K / (1.0 + var_L_type_Ca_current__i_Ca_max / var_L_type_Ca_current__i_Ca_half); // cm_per_second + const double var_calcium_background_current__E_Ca = 0.5 * var_membrane__R * var_membrane__T * log(var_standard_ionic_concentrations__Cao / var_chaste_interface__intracellular_ion_concentrations__Cai) / var_membrane__F; // millivolt + const double var_calcium_background_current__i_Ca_b = (-var_calcium_background_current__E_Ca + var_chaste_interface__membrane__V) * var_calcium_background_current__g_Cab; // microA_per_microF + const double var_standard_ionic_concentrations__Ko = 4.0; // millimolar + const double var_L_type_Ca_current__i_Ca_K = 1.0 * pow(var_membrane__F, 2) * (-var_standard_ionic_concentrations__Ko + var_chaste_interface__intracellular_ion_concentrations__Ki * exp(var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * (var_chaste_interface__L_type_Ca_current__O + var_chaste_interface__L_type_Ca_current__O_Ca) * var_L_type_Ca_current__p_prime_k * var_chaste_interface__L_type_Ca_current_y_gate__y * var_chaste_interface__membrane__V / ((-1.0 + exp(var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * var_membrane__R * var_membrane__T); // microA_per_microF + const double var_rapid_activating_delayed_rectifiyer_K_current__E_K = var_membrane__R * var_membrane__T * log(var_standard_ionic_concentrations__Ko / var_chaste_interface__intracellular_ion_concentrations__Ki) / var_membrane__F; // millivolt + const double var_plateau_potassium_current__i_Kp = (-var_rapid_activating_delayed_rectifiyer_K_current__E_K + var_chaste_interface__membrane__V) * var_plateau_potassium_current__g_Kp * var_plateau_potassium_current_Kp_gate__Kp_V; // microA_per_microF + const double var_rapid_activating_delayed_rectifiyer_K_current__f_Ko = 0.5 * sqrt(var_standard_ionic_concentrations__Ko); // dimensionless + const double var_rapid_activating_delayed_rectifiyer_K_current__i_Kr = (-var_rapid_activating_delayed_rectifiyer_K_current__E_K + var_chaste_interface__membrane__V) * var_rapid_activating_delayed_rectifiyer_K_current__R_V * var_rapid_activating_delayed_rectifiyer_K_current__f_Ko * var_rapid_activating_delayed_rectifiyer_K_current__g_Kr * var_chaste_interface__rapid_activating_delayed_rectifiyer_K_current_X_kr_gate__X_kr; // microA_per_microF + const double var_standard_ionic_concentrations__Nao = 138.0; // millimolar + const double var_Na_Ca_exchanger__i_NaCa = 5000.0 * (pow(var_chaste_interface__intracellular_ion_concentrations__Nai, 3) * var_standard_ionic_concentrations__Cao * exp(var_Na_Ca_exchanger__eta * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T)) - pow(var_standard_ionic_concentrations__Nao, 3) * var_chaste_interface__intracellular_ion_concentrations__Cai * exp((-1.0 + var_Na_Ca_exchanger__eta) * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * var_Na_Ca_exchanger__K_NaCa / ((1.0 + var_Na_Ca_exchanger__K_sat * exp((-1.0 + var_Na_Ca_exchanger__eta) * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * (pow(var_Na_Ca_exchanger__K_mNa, 3) + pow(var_standard_ionic_concentrations__Nao, 3)) * (var_Na_Ca_exchanger__K_mCa + var_standard_ionic_concentrations__Cao)); // microA_per_microF + const double var_fast_sodium_current__E_Na = var_membrane__R * var_membrane__T * log(var_standard_ionic_concentrations__Nao / var_chaste_interface__intracellular_ion_concentrations__Nai) / var_membrane__F; // millivolt + const double var_fast_sodium_current__i_Na = pow(var_chaste_interface__fast_sodium_current_m_gate__m, 3) * (-var_fast_sodium_current__E_Na + var_chaste_interface__membrane__V) * var_fast_sodium_current__g_Na * var_chaste_interface__fast_sodium_current_h_gate__h * var_chaste_interface__fast_sodium_current_j_gate__j; // microA_per_microF + const double var_slow_activating_delayed_rectifiyer_K_current__E_Ks = var_membrane__R * var_membrane__T * log((1.0 * var_standard_ionic_concentrations__Ko + 0.018329999999999999 * var_standard_ionic_concentrations__Nao) / (1.0 * var_chaste_interface__intracellular_ion_concentrations__Ki + 0.018329999999999999 * var_chaste_interface__intracellular_ion_concentrations__Nai)) / var_membrane__F; // millivolt + const double var_slow_activating_delayed_rectifiyer_K_current__i_Ks = pow(var_chaste_interface__slow_activating_delayed_rectifiyer_K_current_X_ks_gate__X_ks, 2) * (-var_slow_activating_delayed_rectifiyer_K_current__E_Ks + var_chaste_interface__membrane__V) * var_slow_activating_delayed_rectifiyer_K_current__g_Ks; // microA_per_microF + const double var_sodium_background_current__i_Na_b = (-var_fast_sodium_current__E_Na + var_chaste_interface__membrane__V) * var_sodium_background_current__g_Nab; // microA_per_microF + const double var_sodium_potassium_pump__sigma = -0.14285714285714285 + 0.14285714285714285 * exp(0.01485884101040119 * var_standard_ionic_concentrations__Nao); // dimensionless + const double var_sodium_potassium_pump__f_NaK = 1.0 / (1.0 + 0.1245 * exp(-0.10000000000000001 * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T)) + 0.036499999999999998 * var_sodium_potassium_pump__sigma * exp(-var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))); // dimensionless + const double var_sodium_potassium_pump__i_NaK = var_sodium_potassium_pump__I_NaK * var_sodium_potassium_pump__f_NaK * var_standard_ionic_concentrations__Ko / ((1.0 + pow((var_sodium_potassium_pump__K_mNai / var_chaste_interface__intracellular_ion_concentrations__Nai), 1.5)) * (var_sodium_potassium_pump__K_mKo + var_standard_ionic_concentrations__Ko)); // microA_per_microF + const double var_time_independent_potassium_current__K_mK1 = 13.0; // millimolar + const double var_time_independent_potassium_current__g_K1 = 2.7999999999999998; // milliS_per_microF + const double var_time_independent_potassium_current_K1_gate__K1_infinity_V = 1.0 / (2.0 + exp(1.5 * (-var_rapid_activating_delayed_rectifiyer_K_current__E_K + var_chaste_interface__membrane__V) * var_membrane__F / (var_membrane__R * var_membrane__T))); // dimensionless + const double var_time_independent_potassium_current__i_K1 = (-var_rapid_activating_delayed_rectifiyer_K_current__E_K + var_chaste_interface__membrane__V) * var_standard_ionic_concentrations__Ko * var_time_independent_potassium_current__g_K1 * var_time_independent_potassium_current_K1_gate__K1_infinity_V / (var_standard_ionic_concentrations__Ko + var_time_independent_potassium_current__K_mK1); // microA_per_microF + const double var_transient_outward_potassium_current__g_to1 = 0.23815; // milliS_per_microF + const double var_transient_outward_potassium_current__i_to1 = (-var_rapid_activating_delayed_rectifiyer_K_current__E_K + var_chaste_interface__membrane__V) * var_transient_outward_potassium_current__g_to1 * var_chaste_interface__transient_outward_potassium_current_X_to1_gate__X_to1 * var_chaste_interface__transient_outward_potassium_current_Y_to1_gate__Y_to1; // microA_per_microF + const double var_membrane__V_orig_deriv = -1.0 * (var_L_type_Ca_current__i_Ca + var_L_type_Ca_current__i_Ca_K + var_Na_Ca_exchanger__i_NaCa + var_calcium_background_current__i_Ca_b + var_fast_sodium_current__i_Na + var_membrane__i_Stim + var_plateau_potassium_current__i_Kp + var_rapid_activating_delayed_rectifiyer_K_current__i_Kr + var_sarcolemmal_calcium_pump__i_p_Ca + var_slow_activating_delayed_rectifiyer_K_current__i_Ks + var_sodium_background_current__i_Na_b + var_sodium_potassium_pump__i_NaK + var_time_independent_potassium_current__i_K1 + var_transient_outward_potassium_current__i_to1) / var_membrane__C_sc; // millivolt / second + d_dt_chaste_interface_var_membrane__V = 0.001 * var_membrane__V_orig_deriv; // millivolt / millisecond + + double evalF = d_dt_chaste_interface_var_membrane__V; + mEvalF[0] = d_dt_chaste_interface_var_membrane__V; + double partialF = EvaluatePartialDerivative0(var_chaste_interface__environment__time_converted, rY, delta, true); + if (fabs(partialF) < delta) + { + rY[v_index] += 0.5*evalF*mDt; + } + else + { + rY[v_index] += (evalF/partialF)*(exp(partialF*0.5*mDt)-1.0); + } + + rY[v_index] = yinit; + evalF = EvaluateYDerivative0(var_chaste_interface__environment__time_converted, rY); + mEvalF[0] = evalF; + partialF = EvaluatePartialDerivative0(var_chaste_interface__environment__time_converted, rY, delta, true); + if (fabs(partialF) < delta) + { + rY[v_index] = yinit + evalF*mDt; + } + else + { + rY[v_index] = yinit + (evalF/partialF)*(exp(partialF*mDt)-1.0); + } + } + + void Dynamicwinslow_model_1999FromCellMLGRL2Opt::ComputeOneStepExceptVoltage(double var_chaste_interface__environment__time_converted) + { + std::vector& rY = rGetStateVariables(); + const double delta=1e-8; + const unsigned size = GetNumberOfStateVariables(); + mYInit = rY; + double y_save; + + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -96.1638 + double var_chaste_interface__fast_sodium_current_m_gate__m = rY[1]; + // Units: dimensionless; Initial value: 0.0328302 + double var_chaste_interface__fast_sodium_current_h_gate__h = rY[2]; + // Units: dimensionless; Initial value: 0.988354 + double var_chaste_interface__fast_sodium_current_j_gate__j = rY[3]; + // Units: dimensionless; Initial value: 0.99254 + double var_chaste_interface__rapid_activating_delayed_rectifiyer_K_current_X_kr_gate__X_kr = rY[4]; + // Units: dimensionless; Initial value: 0.51 + double var_chaste_interface__slow_activating_delayed_rectifiyer_K_current_X_ks_gate__X_ks = rY[5]; + // Units: dimensionless; Initial value: 0.264 + double var_chaste_interface__transient_outward_potassium_current_X_to1_gate__X_to1 = rY[6]; + // Units: dimensionless; Initial value: 2.63 + double var_chaste_interface__transient_outward_potassium_current_Y_to1_gate__Y_to1 = rY[7]; + // Units: dimensionless; Initial value: 0.99 + double var_chaste_interface__L_type_Ca_current__O = rY[8]; + // Units: dimensionless; Initial value: 9.84546e-21 + double var_chaste_interface__L_type_Ca_current__O_Ca = rY[9]; + // Units: dimensionless; Initial value: 0.0 + double var_chaste_interface__L_type_Ca_current__C0 = rY[10]; + // Units: dimensionless; Initial value: 0.997208 + double var_chaste_interface__L_type_Ca_current__C1 = rY[11]; + // Units: dimensionless; Initial value: 6.38897e-05 + double var_chaste_interface__L_type_Ca_current__C2 = rY[12]; + // Units: dimensionless; Initial value: 1.535e-09 + double var_chaste_interface__L_type_Ca_current__C3 = rY[13]; + // Units: dimensionless; Initial value: 1.63909e-14 + double var_chaste_interface__L_type_Ca_current__C4 = rY[14]; + // Units: dimensionless; Initial value: 6.56337e-20 + double var_chaste_interface__L_type_Ca_current__C_Ca0 = rY[15]; + // Units: dimensionless; Initial value: 0.00272826 + double var_chaste_interface__L_type_Ca_current__C_Ca1 = rY[16]; + // Units: dimensionless; Initial value: 6.99215e-07 + double var_chaste_interface__L_type_Ca_current__C_Ca2 = rY[17]; + // Units: dimensionless; Initial value: 6.71989e-11 + double var_chaste_interface__L_type_Ca_current__C_Ca3 = rY[18]; + // Units: dimensionless; Initial value: 2.87031e-15 + double var_chaste_interface__L_type_Ca_current__C_Ca4 = rY[19]; + // Units: dimensionless; Initial value: 4.59752e-20 + double var_chaste_interface__L_type_Ca_current_y_gate__y = rY[20]; + // Units: dimensionless; Initial value: 0.798 + double var_chaste_interface__RyR_channel__P_O1 = rY[21]; + // Units: dimensionless; Initial value: 0.0 + double var_chaste_interface__RyR_channel__P_O2 = rY[22]; + // Units: dimensionless; Initial value: 0.0 + double var_chaste_interface__RyR_channel__P_C1 = rY[23]; + // Units: dimensionless; Initial value: 0.47 + double var_chaste_interface__RyR_channel__P_C2 = rY[24]; + // Units: dimensionless; Initial value: 0.53 + double var_chaste_interface__intracellular_Ca_fluxes__HTRPNCa = rY[25]; + // Units: millimolar; Initial value: 0.98 + double var_chaste_interface__intracellular_Ca_fluxes__LTRPNCa = rY[26]; + // Units: millimolar; Initial value: 0.078 + double var_chaste_interface__intracellular_ion_concentrations__Nai = rY[27]; + // Units: millimolar; Initial value: 10.0 + double var_chaste_interface__intracellular_ion_concentrations__Cai = rY[28]; + // Units: millimolar; Initial value: 8e-05 + double var_chaste_interface__intracellular_ion_concentrations__Ki = rY[29]; + // Units: millimolar; Initial value: 157.8 + double var_chaste_interface__intracellular_ion_concentrations__Ca_ss = rY[30]; + // Units: millimolar; Initial value: 0.00011 + double var_chaste_interface__intracellular_ion_concentrations__Ca_JSR = rY[31]; + // Units: millimolar; Initial value: 0.257 + double var_chaste_interface__intracellular_ion_concentrations__Ca_NSR = rY[32]; + // Units: millimolar; Initial value: 0.257 + + + // Mathematics + double d_dt_chaste_interface_var_membrane__V; + const double var_L_type_Ca_current__P_Ca = 0.00031250000000000001; // cm_per_second + const double var_L_type_Ca_current__a = 2.0; // dimensionless + const double var_L_type_Ca_current__b = 2.0; // dimensionless + const double var_L_type_Ca_current__f = 300.0; // per_second + const double var_L_type_Ca_current__fprime = 7.0; // per_second + const double var_L_type_Ca_current__g = 2000.0; // per_second + const double var_L_type_Ca_current__O_orig_deriv = var_chaste_interface__L_type_Ca_current__C4 * var_L_type_Ca_current__f - var_chaste_interface__L_type_Ca_current__O * var_L_type_Ca_current__g; // 1 / second + const double d_dt_chaste_interface_var_L_type_Ca_current__O = 0.001 * var_L_type_Ca_current__O_orig_deriv; // 1 / millisecond + const double var_L_type_Ca_current__gprime = 7000.0; // per_second + const double var_L_type_Ca_current__O_Ca_orig_deriv = var_chaste_interface__L_type_Ca_current__C_Ca4 * var_L_type_Ca_current__fprime - var_chaste_interface__L_type_Ca_current__O_Ca * var_L_type_Ca_current__gprime; // 1 / second + const double d_dt_chaste_interface_var_L_type_Ca_current__O_Ca = 0.001 * var_L_type_Ca_current__O_Ca_orig_deriv; // 1 / millisecond + const double var_L_type_Ca_current__omega = 10.0; // per_second + const double var_Na_Ca_exchanger__K_NaCa = 0.29999999999999999; // microA_per_microF + const double var_Na_Ca_exchanger__K_mCa = 1.3799999999999999; // millimolar + const double var_Na_Ca_exchanger__K_mNa = 87.5; // millimolar + const double var_Na_Ca_exchanger__K_sat = 0.20000000000000001; // dimensionless + const double var_Na_Ca_exchanger__eta = 0.34999999999999998; // dimensionless + const double var_RyR_channel__k_a_minus = 576.0; // per_second + const double var_RyR_channel__k_a_plus = 12150000000000.0; // millimolar4_per_second + const double var_RyR_channel__k_b_minus = 1930.0; // per_second + const double var_RyR_channel__k_b_plus = 4050000000.0; // millimolar3_per_second + const double var_RyR_channel__k_c_minus = 0.80000000000000004; // per_second + const double var_RyR_channel__k_c_plus = 100.0; // per_second + const double var_RyR_channel__P_C2_orig_deriv = var_chaste_interface__RyR_channel__P_O1 * var_RyR_channel__k_c_plus - var_chaste_interface__RyR_channel__P_C2 * var_RyR_channel__k_c_minus; // 1 / second + const double d_dt_chaste_interface_var_RyR_channel__P_C2 = 0.001 * var_RyR_channel__P_C2_orig_deriv; // 1 / millisecond + const double var_RyR_channel__m = 3.0; // dimensionless + const double var_RyR_channel__n = 4.0; // dimensionless + const double var_RyR_channel__v1 = 1800.0; // per_second + const double var_SERCA2a_pump__K_SR = 1.0; // dimensionless + const double var_SERCA2a_pump__K_fb = 0.00016799999999999999; // millimolar + const double var_SERCA2a_pump__K_rb = 3.29; // millimolar + const double var_SERCA2a_pump__N_fb = 1.2; // dimensionless + const double var_SERCA2a_pump__N_rb = 1.0; // dimensionless + const double var_SERCA2a_pump__Vmaxf = 0.081299999999999997; // millimolar_per_second + const double var_SERCA2a_pump__Vmaxr = 0.318; // millimolar_per_second + const double var_calcium_background_current__g_Cab = 0.00038420000000000001; // milliS_per_microF + const double var_intracellular_Ca_fluxes__HTRPN_tot = 0.14000000000000001; // dimensionless + const double var_intracellular_Ca_fluxes__LTRPN_tot = 0.070000000000000007; // dimensionless + const double var_intracellular_Ca_fluxes__k_htrpn_minus = 0.066000000000000003; // per_second + const double var_intracellular_Ca_fluxes__k_htrpn_plus = 20000.0; // per_millimolar_second + const double var_intracellular_Ca_fluxes__k_ltrpn_minus = 40.0; // per_second + const double var_intracellular_Ca_fluxes__k_ltrpn_plus = 40000.0; // per_millimolar_second + const double var_intracellular_Ca_fluxes__tau_tr = 0.00057470000000000004; // second + const double var_intracellular_Ca_fluxes__tau_xfer = 0.026700000000000002; // second + const double var_intracellular_ion_concentrations__A_cap = 0.00015339999999999999; // cm2 + const double var_intracellular_ion_concentrations__CMDN_tot = 0.050000000000000003; // millimolar + const double var_intracellular_ion_concentrations__CSQN_tot = 15.0; // millimolar + const double var_SERCA2a_pump__rb = pow((var_chaste_interface__intracellular_ion_concentrations__Ca_NSR / var_SERCA2a_pump__K_rb), var_SERCA2a_pump__N_rb); // dimensionless + const double var_intracellular_Ca_fluxes__J_tr = (-var_chaste_interface__intracellular_ion_concentrations__Ca_JSR + var_chaste_interface__intracellular_ion_concentrations__Ca_NSR) / var_intracellular_Ca_fluxes__tau_tr; // millimolar_per_second + const double var_L_type_Ca_current__gamma = 103.75 * var_chaste_interface__intracellular_ion_concentrations__Ca_ss; // per_second + const double var_RyR_channel__J_rel = (-var_chaste_interface__intracellular_ion_concentrations__Ca_ss + var_chaste_interface__intracellular_ion_concentrations__Ca_JSR) * (var_chaste_interface__RyR_channel__P_O1 + var_chaste_interface__RyR_channel__P_O2) * var_RyR_channel__v1; // millimolar_per_second + const double var_RyR_channel__P_C1_orig_deriv = var_chaste_interface__RyR_channel__P_O1 * var_RyR_channel__k_a_minus - pow(var_chaste_interface__intracellular_ion_concentrations__Ca_ss, var_RyR_channel__n) * var_chaste_interface__RyR_channel__P_C1 * var_RyR_channel__k_a_plus; // 1 / second + const double d_dt_chaste_interface_var_RyR_channel__P_C1 = 0.001 * var_RyR_channel__P_C1_orig_deriv; // 1 / millisecond + const double var_RyR_channel__P_O1_orig_deriv = var_chaste_interface__RyR_channel__P_C2 * var_RyR_channel__k_c_minus + var_chaste_interface__RyR_channel__P_O2 * var_RyR_channel__k_b_minus - var_chaste_interface__RyR_channel__P_O1 * var_RyR_channel__k_a_minus - var_chaste_interface__RyR_channel__P_O1 * var_RyR_channel__k_c_plus + pow(var_chaste_interface__intracellular_ion_concentrations__Ca_ss, var_RyR_channel__n) * var_chaste_interface__RyR_channel__P_C1 * var_RyR_channel__k_a_plus - pow(var_chaste_interface__intracellular_ion_concentrations__Ca_ss, var_RyR_channel__m) * var_chaste_interface__RyR_channel__P_O1 * var_RyR_channel__k_b_plus; // 1 / second + const double d_dt_chaste_interface_var_RyR_channel__P_O1 = 0.001 * var_RyR_channel__P_O1_orig_deriv; // 1 / millisecond + const double var_RyR_channel__P_O2_orig_deriv = -var_chaste_interface__RyR_channel__P_O2 * var_RyR_channel__k_b_minus + pow(var_chaste_interface__intracellular_ion_concentrations__Ca_ss, var_RyR_channel__m) * var_chaste_interface__RyR_channel__P_O1 * var_RyR_channel__k_b_plus; // 1 / second + const double d_dt_chaste_interface_var_RyR_channel__P_O2 = 0.001 * var_RyR_channel__P_O2_orig_deriv; // 1 / millisecond + const double var_SERCA2a_pump__fb = pow((var_chaste_interface__intracellular_ion_concentrations__Cai / var_SERCA2a_pump__K_fb), var_SERCA2a_pump__N_fb); // dimensionless + const double var_SERCA2a_pump__J_up = (var_SERCA2a_pump__Vmaxf * var_SERCA2a_pump__fb - var_SERCA2a_pump__Vmaxr * var_SERCA2a_pump__rb) * var_SERCA2a_pump__K_SR / (1.0 + var_SERCA2a_pump__fb + var_SERCA2a_pump__rb); // millimolar_per_second + const double var_intracellular_Ca_fluxes__HTRPNCa_orig_deriv = -var_chaste_interface__intracellular_Ca_fluxes__HTRPNCa * var_intracellular_Ca_fluxes__k_htrpn_minus + (1.0 - var_chaste_interface__intracellular_Ca_fluxes__HTRPNCa) * var_intracellular_Ca_fluxes__k_htrpn_plus * var_chaste_interface__intracellular_ion_concentrations__Cai; // millimolar / second + const double d_dt_chaste_interface_var_intracellular_Ca_fluxes__HTRPNCa = 0.001 * var_intracellular_Ca_fluxes__HTRPNCa_orig_deriv; // millimolar / millisecond + const double var_intracellular_Ca_fluxes__J_HTRPNCa = var_intracellular_Ca_fluxes__HTRPNCa_orig_deriv; // millimolar_per_second + const double var_intracellular_Ca_fluxes__J_xfer = (-var_chaste_interface__intracellular_ion_concentrations__Cai + var_chaste_interface__intracellular_ion_concentrations__Ca_ss) / var_intracellular_Ca_fluxes__tau_xfer; // millimolar_per_second + const double var_intracellular_Ca_fluxes__LTRPNCa_orig_deriv = -var_chaste_interface__intracellular_Ca_fluxes__LTRPNCa * var_intracellular_Ca_fluxes__k_ltrpn_minus + (1.0 - var_chaste_interface__intracellular_Ca_fluxes__LTRPNCa) * var_intracellular_Ca_fluxes__k_ltrpn_plus * var_chaste_interface__intracellular_ion_concentrations__Cai; // millimolar / second + const double d_dt_chaste_interface_var_intracellular_Ca_fluxes__LTRPNCa = 0.001 * var_intracellular_Ca_fluxes__LTRPNCa_orig_deriv; // millimolar / millisecond + const double var_intracellular_Ca_fluxes__J_LTRPNCa = var_intracellular_Ca_fluxes__LTRPNCa_orig_deriv; // millimolar_per_second + const double var_intracellular_Ca_fluxes__J_trpn = var_intracellular_Ca_fluxes__HTRPN_tot * var_intracellular_Ca_fluxes__J_HTRPNCa + var_intracellular_Ca_fluxes__J_LTRPNCa * var_intracellular_Ca_fluxes__LTRPN_tot; // millimolar_per_second + const double var_intracellular_ion_concentrations__EGTA_tot = 0; // millimolar + const double var_intracellular_ion_concentrations__K_mCMDN = 0.0023800000000000002; // millimolar + const double var_intracellular_ion_concentrations__K_mCSQN = 0.80000000000000004; // millimolar + const double var_intracellular_ion_concentrations__K_mEGTA = 0.00014999999999999999; // millimolar + const double var_intracellular_ion_concentrations__Ki_orig_deriv = 0; // millimolar / second + const double d_dt_chaste_interface_var_intracellular_ion_concentrations__Ki = 0.001 * var_intracellular_ion_concentrations__Ki_orig_deriv; // millimolar / millisecond + const double var_intracellular_ion_concentrations__Nai_orig_deriv = 0; // millimolar / second + const double d_dt_chaste_interface_var_intracellular_ion_concentrations__Nai = 0.001 * var_intracellular_ion_concentrations__Nai_orig_deriv; // millimolar / millisecond + const double var_intracellular_ion_concentrations__V_JSR = 1.6e-7; // micro_litre + const double var_intracellular_ion_concentrations__V_NSR = 2.0999999999999998e-6; // micro_litre + const double var_intracellular_ion_concentrations__V_SS = 1.2e-9; // micro_litre + const double var_intracellular_ion_concentrations__V_myo = 2.584e-5; // micro_litre + const double var_intracellular_ion_concentrations__Ca_NSR_orig_deriv = var_SERCA2a_pump__J_up * var_intracellular_ion_concentrations__V_myo / var_intracellular_ion_concentrations__V_NSR - var_intracellular_Ca_fluxes__J_tr * var_intracellular_ion_concentrations__V_JSR / var_intracellular_ion_concentrations__V_NSR; // millimolar / second + const double d_dt_chaste_interface_var_intracellular_ion_concentrations__Ca_NSR = 0.001 * var_intracellular_ion_concentrations__Ca_NSR_orig_deriv; // millimolar / millisecond + const double var_intracellular_ion_concentrations__beta_JSR = 1.0 / (1.0 + var_intracellular_ion_concentrations__CSQN_tot * var_intracellular_ion_concentrations__K_mCSQN / pow((var_chaste_interface__intracellular_ion_concentrations__Ca_JSR + var_intracellular_ion_concentrations__K_mCSQN), 2)); // dimensionless + const double var_intracellular_ion_concentrations__Ca_JSR_orig_deriv = (-var_RyR_channel__J_rel + var_intracellular_Ca_fluxes__J_tr) * var_intracellular_ion_concentrations__beta_JSR; // millimolar / second + const double d_dt_chaste_interface_var_intracellular_ion_concentrations__Ca_JSR = 0.001 * var_intracellular_ion_concentrations__Ca_JSR_orig_deriv; // millimolar / millisecond + const double var_intracellular_ion_concentrations__beta_SS = 1.0 / (1.0 + var_intracellular_ion_concentrations__CMDN_tot * var_intracellular_ion_concentrations__K_mCMDN / pow((var_chaste_interface__intracellular_ion_concentrations__Ca_ss + var_intracellular_ion_concentrations__K_mCMDN), 2) + var_intracellular_ion_concentrations__EGTA_tot * var_intracellular_ion_concentrations__K_mEGTA / pow((var_chaste_interface__intracellular_ion_concentrations__Ca_ss + var_intracellular_ion_concentrations__K_mEGTA), 2)); // dimensionless + const double var_intracellular_ion_concentrations__beta_i = 1.0 / (1.0 + var_intracellular_ion_concentrations__CMDN_tot * var_intracellular_ion_concentrations__K_mCMDN / pow((var_chaste_interface__intracellular_ion_concentrations__Cai + var_intracellular_ion_concentrations__K_mCMDN), 2) + var_intracellular_ion_concentrations__EGTA_tot * var_intracellular_ion_concentrations__K_mEGTA / pow((var_chaste_interface__intracellular_ion_concentrations__Cai + var_intracellular_ion_concentrations__K_mEGTA), 2)); // dimensionless + const double var_membrane__F = 96.485341500000004; // coulomb_per_millimole + const double var_membrane__R = 8.3144720000000003; // joule_per_mole_kelvin + const double var_membrane__T = 310.0; // kelvin + const double var_L_type_Ca_current__alpha = 400.0 * exp(0.20000000000000001 + 0.10000000000000001 * var_chaste_interface__membrane__V); // per_second + const double var_L_type_Ca_current__alpha_a = var_L_type_Ca_current__a * var_L_type_Ca_current__alpha; // per_second + const double var_L_type_Ca_current__beta = 50.0 * exp(-0.15384615384615385 - 0.076923076923076927 * var_chaste_interface__membrane__V); // per_second + const double var_L_type_Ca_current__C0_orig_deriv = var_chaste_interface__L_type_Ca_current__C1 * var_L_type_Ca_current__beta + var_chaste_interface__L_type_Ca_current__C_Ca0 * var_L_type_Ca_current__omega - (4.0 * var_L_type_Ca_current__alpha + var_L_type_Ca_current__gamma) * var_chaste_interface__L_type_Ca_current__C0; // 1 / second + const double d_dt_chaste_interface_var_L_type_Ca_current__C0 = 0.001 * var_L_type_Ca_current__C0_orig_deriv; // 1 / millisecond + const double var_L_type_Ca_current__C1_orig_deriv = -(3.0 * var_L_type_Ca_current__alpha + var_L_type_Ca_current__a * var_L_type_Ca_current__gamma + var_L_type_Ca_current__beta) * var_chaste_interface__L_type_Ca_current__C1 + 2.0 * var_chaste_interface__L_type_Ca_current__C2 * var_L_type_Ca_current__beta + 4.0 * var_chaste_interface__L_type_Ca_current__C0 * var_L_type_Ca_current__alpha + var_chaste_interface__L_type_Ca_current__C_Ca1 * var_L_type_Ca_current__omega / var_L_type_Ca_current__b; // 1 / second + const double d_dt_chaste_interface_var_L_type_Ca_current__C1 = 0.001 * var_L_type_Ca_current__C1_orig_deriv; // 1 / millisecond + const double var_L_type_Ca_current__C2_orig_deriv = -(2.0 * var_L_type_Ca_current__alpha + 2.0 * var_L_type_Ca_current__beta + pow(var_L_type_Ca_current__a, 2) * var_L_type_Ca_current__gamma) * var_chaste_interface__L_type_Ca_current__C2 + 3.0 * var_chaste_interface__L_type_Ca_current__C1 * var_L_type_Ca_current__alpha + 3.0 * var_chaste_interface__L_type_Ca_current__C3 * var_L_type_Ca_current__beta + var_chaste_interface__L_type_Ca_current__C_Ca2 * var_L_type_Ca_current__omega / pow(var_L_type_Ca_current__b, 2); // 1 / second + const double d_dt_chaste_interface_var_L_type_Ca_current__C2 = 0.001 * var_L_type_Ca_current__C2_orig_deriv; // 1 / millisecond + const double var_L_type_Ca_current__C3_orig_deriv = -(3.0 * var_L_type_Ca_current__beta + pow(var_L_type_Ca_current__a, 3) * var_L_type_Ca_current__gamma + var_L_type_Ca_current__alpha) * var_chaste_interface__L_type_Ca_current__C3 + 2.0 * var_chaste_interface__L_type_Ca_current__C2 * var_L_type_Ca_current__alpha + 4.0 * var_chaste_interface__L_type_Ca_current__C4 * var_L_type_Ca_current__beta + var_chaste_interface__L_type_Ca_current__C_Ca3 * var_L_type_Ca_current__omega / pow(var_L_type_Ca_current__b, 3); // 1 / second + const double d_dt_chaste_interface_var_L_type_Ca_current__C3 = 0.001 * var_L_type_Ca_current__C3_orig_deriv; // 1 / millisecond + const double var_L_type_Ca_current__C4_orig_deriv = var_chaste_interface__L_type_Ca_current__C3 * var_L_type_Ca_current__alpha + var_chaste_interface__L_type_Ca_current__O * var_L_type_Ca_current__g - (4.0 * var_L_type_Ca_current__beta + pow(var_L_type_Ca_current__a, 4) * var_L_type_Ca_current__gamma + var_L_type_Ca_current__f) * var_chaste_interface__L_type_Ca_current__C4 + var_chaste_interface__L_type_Ca_current__C_Ca4 * var_L_type_Ca_current__omega / pow(var_L_type_Ca_current__b, 4); // 1 / second + const double d_dt_chaste_interface_var_L_type_Ca_current__C4 = 0.001 * var_L_type_Ca_current__C4_orig_deriv; // 1 / millisecond + const double var_L_type_Ca_current__beta_b = var_L_type_Ca_current__beta / var_L_type_Ca_current__b; // per_second + const double var_L_type_Ca_current__C_Ca0_orig_deriv = var_chaste_interface__L_type_Ca_current__C0 * var_L_type_Ca_current__gamma + var_chaste_interface__L_type_Ca_current__C_Ca1 * var_L_type_Ca_current__beta_b - (4.0 * var_L_type_Ca_current__alpha_a + var_L_type_Ca_current__omega) * var_chaste_interface__L_type_Ca_current__C_Ca0; // 1 / second + const double d_dt_chaste_interface_var_L_type_Ca_current__C_Ca0 = 0.001 * var_L_type_Ca_current__C_Ca0_orig_deriv; // 1 / millisecond + const double var_L_type_Ca_current__C_Ca1_orig_deriv = -(3.0 * var_L_type_Ca_current__alpha_a + var_L_type_Ca_current__omega / var_L_type_Ca_current__b + var_L_type_Ca_current__beta_b) * var_chaste_interface__L_type_Ca_current__C_Ca1 + 2.0 * var_chaste_interface__L_type_Ca_current__C_Ca2 * var_L_type_Ca_current__beta_b + 4.0 * var_chaste_interface__L_type_Ca_current__C_Ca0 * var_L_type_Ca_current__alpha_a + var_chaste_interface__L_type_Ca_current__C1 * var_L_type_Ca_current__a * var_L_type_Ca_current__gamma; // 1 / second + const double d_dt_chaste_interface_var_L_type_Ca_current__C_Ca1 = 0.001 * var_L_type_Ca_current__C_Ca1_orig_deriv; // 1 / millisecond + const double var_L_type_Ca_current__C_Ca2_orig_deriv = -(2.0 * var_L_type_Ca_current__alpha_a + 2.0 * var_L_type_Ca_current__beta_b + var_L_type_Ca_current__omega / pow(var_L_type_Ca_current__b, 2)) * var_chaste_interface__L_type_Ca_current__C_Ca2 + 3.0 * var_chaste_interface__L_type_Ca_current__C_Ca1 * var_L_type_Ca_current__alpha_a + 3.0 * var_chaste_interface__L_type_Ca_current__C_Ca3 * var_L_type_Ca_current__beta_b + pow(var_L_type_Ca_current__a, 2) * var_chaste_interface__L_type_Ca_current__C2 * var_L_type_Ca_current__gamma; // 1 / second + const double d_dt_chaste_interface_var_L_type_Ca_current__C_Ca2 = 0.001 * var_L_type_Ca_current__C_Ca2_orig_deriv; // 1 / millisecond + const double var_L_type_Ca_current__C_Ca3_orig_deriv = -(3.0 * var_L_type_Ca_current__beta_b + var_L_type_Ca_current__omega / pow(var_L_type_Ca_current__b, 3) + var_L_type_Ca_current__alpha_a) * var_chaste_interface__L_type_Ca_current__C_Ca3 + 2.0 * var_chaste_interface__L_type_Ca_current__C_Ca2 * var_L_type_Ca_current__alpha_a + 4.0 * var_chaste_interface__L_type_Ca_current__C_Ca4 * var_L_type_Ca_current__beta_b + pow(var_L_type_Ca_current__a, 3) * var_chaste_interface__L_type_Ca_current__C3 * var_L_type_Ca_current__gamma; // 1 / second + const double d_dt_chaste_interface_var_L_type_Ca_current__C_Ca3 = 0.001 * var_L_type_Ca_current__C_Ca3_orig_deriv; // 1 / millisecond + const double var_L_type_Ca_current__C_Ca4_orig_deriv = var_chaste_interface__L_type_Ca_current__C_Ca3 * var_L_type_Ca_current__alpha_a + var_chaste_interface__L_type_Ca_current__O_Ca * var_L_type_Ca_current__gprime - (4.0 * var_L_type_Ca_current__beta_b + var_L_type_Ca_current__omega / pow(var_L_type_Ca_current__b, 4) + var_L_type_Ca_current__fprime) * var_chaste_interface__L_type_Ca_current__C_Ca4 + pow(var_L_type_Ca_current__a, 4) * var_chaste_interface__L_type_Ca_current__C4 * var_L_type_Ca_current__gamma; // 1 / second + const double d_dt_chaste_interface_var_L_type_Ca_current__C_Ca4 = 0.001 * var_L_type_Ca_current__C_Ca4_orig_deriv; // 1 / millisecond + const double var_L_type_Ca_current_y_gate__tau_y = 0.02 + 0.59999999999999998 / (1.0 + exp(2.1052631578947367 + 0.10526315789473684 * var_chaste_interface__membrane__V)); // second + const double var_L_type_Ca_current_y_gate__y_infinity = 0.20000000000000001 + 0.80000000000000004 / (1.0 + exp(2.5 + 0.20000000000000001 * var_chaste_interface__membrane__V)); // dimensionless + const double var_L_type_Ca_current_y_gate__y_orig_deriv = (-var_chaste_interface__L_type_Ca_current_y_gate__y + var_L_type_Ca_current_y_gate__y_infinity) / var_L_type_Ca_current_y_gate__tau_y; // 1 / second + const double d_dt_chaste_interface_var_L_type_Ca_current_y_gate__y = 0.001 * var_L_type_Ca_current_y_gate__y_orig_deriv; // 1 / millisecond + const double var_fast_sodium_current_h_gate__alpha_h = ((var_chaste_interface__membrane__V < -40.0) ? (135.0 * exp(-11.764705882352942 - 0.14705882352941177 * var_chaste_interface__membrane__V)) : (0)); // per_second + const double var_fast_sodium_current_h_gate__beta_h = ((var_chaste_interface__membrane__V < -40.0) ? (3560.0 * exp(0.079000000000000001 * var_chaste_interface__membrane__V) + 310000.0 * exp(0.34999999999999998 * var_chaste_interface__membrane__V)) : (7692.3076923076924 / (1.0 + exp(-0.96036036036036043 - 0.0900900900900901 * var_chaste_interface__membrane__V)))); // per_second + const double var_fast_sodium_current_h_gate__h_orig_deriv = (1.0 - var_chaste_interface__fast_sodium_current_h_gate__h) * var_fast_sodium_current_h_gate__alpha_h - var_fast_sodium_current_h_gate__beta_h * var_chaste_interface__fast_sodium_current_h_gate__h; // 1 / second + const double d_dt_chaste_interface_var_fast_sodium_current_h_gate__h = 0.001 * var_fast_sodium_current_h_gate__h_orig_deriv; // 1 / millisecond + const double var_fast_sodium_current_j_gate__alpha_j = ((var_chaste_interface__membrane__V < -40.0) ? (1000.0 * (37.780000000000001 + var_chaste_interface__membrane__V) * (-127140.0 * exp(0.24440000000000001 * var_chaste_interface__membrane__V) - 3.4740000000000003e-5 * exp(-0.043909999999999998 * var_chaste_interface__membrane__V)) / (1.0 + exp(24.640530000000002 + 0.311 * var_chaste_interface__membrane__V))) : (0)); // per_second + const double var_fast_sodium_current_j_gate__beta_j = ((var_chaste_interface__membrane__V < -40.0) ? (121.2 * exp(-0.01052 * var_chaste_interface__membrane__V) / (1.0 + exp(-5.5312920000000005 - 0.13780000000000001 * var_chaste_interface__membrane__V))) : (300.0 * exp(-2.5349999999999999e-7 * var_chaste_interface__membrane__V) / (1.0 + exp(-3.2000000000000002 - 0.10000000000000001 * var_chaste_interface__membrane__V)))); // per_second + const double var_fast_sodium_current_j_gate__j_orig_deriv = (1.0 - var_chaste_interface__fast_sodium_current_j_gate__j) * var_fast_sodium_current_j_gate__alpha_j - var_fast_sodium_current_j_gate__beta_j * var_chaste_interface__fast_sodium_current_j_gate__j; // 1 / second + const double d_dt_chaste_interface_var_fast_sodium_current_j_gate__j = 0.001 * var_fast_sodium_current_j_gate__j_orig_deriv; // 1 / millisecond + const double var_fast_sodium_current_m_gate__E0_m = 47.130000000000003 + var_chaste_interface__membrane__V; // millivolt + const double var_fast_sodium_current_m_gate__alpha_m = ((fabs(var_fast_sodium_current_m_gate__E0_m) < 1.0000000000000001e-5) ? (1000.0 / (0.10000000000000001 - 0.0050000000000000001 * var_fast_sodium_current_m_gate__E0_m)) : (320.0 * var_fast_sodium_current_m_gate__E0_m / (1.0 - exp(-0.10000000000000001 * var_fast_sodium_current_m_gate__E0_m)))); // per_second + const double var_fast_sodium_current_m_gate__beta_m = 80.0 * exp(-0.090909090909090912 * var_chaste_interface__membrane__V); // per_second + const double var_fast_sodium_current_m_gate__m_orig_deriv = ((var_chaste_interface__membrane__V >= -90.0) ? ((1.0 - var_chaste_interface__fast_sodium_current_m_gate__m) * var_fast_sodium_current_m_gate__alpha_m - var_fast_sodium_current_m_gate__beta_m * var_chaste_interface__fast_sodium_current_m_gate__m) : (0)); // 1 / second + const double d_dt_chaste_interface_var_fast_sodium_current_m_gate__m = 0.001 * var_fast_sodium_current_m_gate__m_orig_deriv; // 1 / millisecond + const double var_rapid_activating_delayed_rectifiyer_K_current_X_kr_gate__K12 = exp(-5.4950000000000001 + 0.1691 * var_chaste_interface__membrane__V); // dimensionless + const double var_rapid_activating_delayed_rectifiyer_K_current_X_kr_gate__K21 = exp(-7.6769999999999996 - 0.012800000000000001 * var_chaste_interface__membrane__V); // dimensionless + const double var_rapid_activating_delayed_rectifiyer_K_current_X_kr_gate__X_kr_inf = var_rapid_activating_delayed_rectifiyer_K_current_X_kr_gate__K12 / (var_rapid_activating_delayed_rectifiyer_K_current_X_kr_gate__K12 + var_rapid_activating_delayed_rectifiyer_K_current_X_kr_gate__K21); // dimensionless + const double var_rapid_activating_delayed_rectifiyer_K_current_X_kr_gate__tau_factor = 1.0; // dimensionless + const double var_rapid_activating_delayed_rectifiyer_K_current_X_kr_gate__tau_X_kr = 0.001 / (var_rapid_activating_delayed_rectifiyer_K_current_X_kr_gate__K12 + var_rapid_activating_delayed_rectifiyer_K_current_X_kr_gate__K21) + 0.027 * var_rapid_activating_delayed_rectifiyer_K_current_X_kr_gate__tau_factor; // second + const double var_rapid_activating_delayed_rectifiyer_K_current_X_kr_gate__X_kr_orig_deriv = (-var_chaste_interface__rapid_activating_delayed_rectifiyer_K_current_X_kr_gate__X_kr + var_rapid_activating_delayed_rectifiyer_K_current_X_kr_gate__X_kr_inf) / var_rapid_activating_delayed_rectifiyer_K_current_X_kr_gate__tau_X_kr; // 1 / second + const double d_dt_chaste_interface_var_rapid_activating_delayed_rectifiyer_K_current_X_kr_gate__X_kr = 0.001 * var_rapid_activating_delayed_rectifiyer_K_current_X_kr_gate__X_kr_orig_deriv; // 1 / millisecond + const double var_sarcolemmal_calcium_pump__I_pCa = 0.050000000000000003; // microA_per_microF + const double var_sarcolemmal_calcium_pump__K_mpCa = 5.0000000000000002e-5; // millimolar + const double var_sarcolemmal_calcium_pump__i_p_Ca = var_chaste_interface__intracellular_ion_concentrations__Cai * var_sarcolemmal_calcium_pump__I_pCa / (var_chaste_interface__intracellular_ion_concentrations__Cai + var_sarcolemmal_calcium_pump__K_mpCa); // microA_per_microF + const double var_slow_activating_delayed_rectifiyer_K_current_X_ks_gate__X_ks_infinity = 1.0 / (1.0 + exp(1.8161764705882353 - 0.073529411764705885 * var_chaste_interface__membrane__V)); // dimensionless + const double var_slow_activating_delayed_rectifiyer_K_current_X_ks_gate__tau_X_ks = 0.001 / (0.00013100000000000001 * (-10.0 + var_chaste_interface__membrane__V) / (-1.0 + exp(-0.68699999999999994 + 0.068699999999999997 * var_chaste_interface__membrane__V)) + 7.1899999999999999e-5 * (-10.0 + var_chaste_interface__membrane__V) / (1.0 - exp(1.48 - 0.14799999999999999 * var_chaste_interface__membrane__V))); // second + const double var_slow_activating_delayed_rectifiyer_K_current_X_ks_gate__X_ks_orig_deriv = (-var_chaste_interface__slow_activating_delayed_rectifiyer_K_current_X_ks_gate__X_ks + var_slow_activating_delayed_rectifiyer_K_current_X_ks_gate__X_ks_infinity) / var_slow_activating_delayed_rectifiyer_K_current_X_ks_gate__tau_X_ks; // 1 / second + const double d_dt_chaste_interface_var_slow_activating_delayed_rectifiyer_K_current_X_ks_gate__X_ks = 0.001 * var_slow_activating_delayed_rectifiyer_K_current_X_ks_gate__X_ks_orig_deriv; // 1 / millisecond + const double var_standard_ionic_concentrations__Cao = 2.0; // millimolar + const double var_L_type_Ca_current__i_Ca_max = 4000.0 * pow(var_membrane__F, 2) * (0.001 * exp(2.0 * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T)) - 0.34100000000000003 * var_standard_ionic_concentrations__Cao) * var_L_type_Ca_current__P_Ca * var_chaste_interface__membrane__V / ((-1.0 + exp(2.0 * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * var_membrane__R * var_membrane__T); // microA_per_microF + const double var_L_type_Ca_current__i_Ca = (var_chaste_interface__L_type_Ca_current__O + var_chaste_interface__L_type_Ca_current__O_Ca) * var_L_type_Ca_current__i_Ca_max * var_chaste_interface__L_type_Ca_current_y_gate__y; // microA_per_microF + const double var_calcium_background_current__E_Ca = 0.5 * var_membrane__R * var_membrane__T * log(var_standard_ionic_concentrations__Cao / var_chaste_interface__intracellular_ion_concentrations__Cai) / var_membrane__F; // millivolt + const double var_calcium_background_current__i_Ca_b = (-var_calcium_background_current__E_Ca + var_chaste_interface__membrane__V) * var_calcium_background_current__g_Cab; // microA_per_microF + const double var_intracellular_ion_concentrations__Ca_ss_orig_deriv = (var_RyR_channel__J_rel * var_intracellular_ion_concentrations__V_JSR / var_intracellular_ion_concentrations__V_SS - var_intracellular_Ca_fluxes__J_xfer * var_intracellular_ion_concentrations__V_myo / var_intracellular_ion_concentrations__V_SS - 0.5 * var_L_type_Ca_current__i_Ca * var_intracellular_ion_concentrations__A_cap / (var_intracellular_ion_concentrations__V_SS * var_membrane__F)) * var_intracellular_ion_concentrations__beta_SS; // millimolar / second + const double d_dt_chaste_interface_var_intracellular_ion_concentrations__Ca_ss = 0.001 * var_intracellular_ion_concentrations__Ca_ss_orig_deriv; // millimolar / millisecond + const double var_standard_ionic_concentrations__Nao = 138.0; // millimolar + const double var_Na_Ca_exchanger__i_NaCa = 5000.0 * (pow(var_chaste_interface__intracellular_ion_concentrations__Nai, 3) * var_standard_ionic_concentrations__Cao * exp(var_Na_Ca_exchanger__eta * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T)) - pow(var_standard_ionic_concentrations__Nao, 3) * var_chaste_interface__intracellular_ion_concentrations__Cai * exp((-1.0 + var_Na_Ca_exchanger__eta) * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * var_Na_Ca_exchanger__K_NaCa / ((1.0 + var_Na_Ca_exchanger__K_sat * exp((-1.0 + var_Na_Ca_exchanger__eta) * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * (pow(var_Na_Ca_exchanger__K_mNa, 3) + pow(var_standard_ionic_concentrations__Nao, 3)) * (var_Na_Ca_exchanger__K_mCa + var_standard_ionic_concentrations__Cao)); // microA_per_microF + const double var_intracellular_ion_concentrations__Cai_orig_deriv = (-var_SERCA2a_pump__J_up - var_intracellular_Ca_fluxes__J_trpn + 0.5 * (-var_calcium_background_current__i_Ca_b - var_sarcolemmal_calcium_pump__i_p_Ca + 2.0 * var_Na_Ca_exchanger__i_NaCa) * var_intracellular_ion_concentrations__A_cap / (var_intracellular_ion_concentrations__V_myo * var_membrane__F) + var_intracellular_Ca_fluxes__J_xfer) * var_intracellular_ion_concentrations__beta_i; // millimolar / second + const double d_dt_chaste_interface_var_intracellular_ion_concentrations__Cai = 0.001 * var_intracellular_ion_concentrations__Cai_orig_deriv; // millimolar / millisecond + const double var_transient_outward_potassium_current_X_to1_gate__alpha_X_to1 = 45.159999999999997 * exp(0.035770000000000003 * var_chaste_interface__membrane__V); // per_second + const double var_transient_outward_potassium_current_X_to1_gate__beta_X_to1 = 98.900000000000006 * exp(-0.062370000000000002 * var_chaste_interface__membrane__V); // per_second + const double var_transient_outward_potassium_current_X_to1_gate__X_to1_orig_deriv = (1.0 - var_chaste_interface__transient_outward_potassium_current_X_to1_gate__X_to1) * var_transient_outward_potassium_current_X_to1_gate__alpha_X_to1 - var_chaste_interface__transient_outward_potassium_current_X_to1_gate__X_to1 * var_transient_outward_potassium_current_X_to1_gate__beta_X_to1; // 1 / second + const double d_dt_chaste_interface_var_transient_outward_potassium_current_X_to1_gate__X_to1 = 0.001 * var_transient_outward_potassium_current_X_to1_gate__X_to1_orig_deriv; // 1 / millisecond + const double var_transient_outward_potassium_current_Y_to1_gate__alpha_Y_to1 = 5.415 * exp(-6.7000000000000002 - 0.20000000000000001 * var_chaste_interface__membrane__V) / (1.0 + 0.051334999999999999 * exp(-6.7000000000000002 - 0.20000000000000001 * var_chaste_interface__membrane__V)); // per_second + const double var_transient_outward_potassium_current_Y_to1_gate__beta_Y_to1 = 5.415 * exp(6.7000000000000002 + 0.20000000000000001 * var_chaste_interface__membrane__V) / (1.0 + 0.051334999999999999 * exp(6.7000000000000002 + 0.20000000000000001 * var_chaste_interface__membrane__V)); // per_second + const double var_transient_outward_potassium_current_Y_to1_gate__Y_to1_orig_deriv = (1.0 - var_chaste_interface__transient_outward_potassium_current_Y_to1_gate__Y_to1) * var_transient_outward_potassium_current_Y_to1_gate__alpha_Y_to1 - var_chaste_interface__transient_outward_potassium_current_Y_to1_gate__Y_to1 * var_transient_outward_potassium_current_Y_to1_gate__beta_Y_to1; // 1 / second + const double d_dt_chaste_interface_var_transient_outward_potassium_current_Y_to1_gate__Y_to1 = 0.001 * var_transient_outward_potassium_current_Y_to1_gate__Y_to1_orig_deriv; // 1 / millisecond + + if (mSetVoltageDerivativeToZero) + { + d_dt_chaste_interface_var_membrane__V = 0.0; + } + else + { + const double var_L_type_Ca_current__P_K = 5.7899999999999998e-7; // cm_per_second + const double var_L_type_Ca_current__i_Ca_half = -0.26500000000000001; // microA_per_microF + const double var_fast_sodium_current__g_Na = 12.800000000000001; // milliS_per_microF + const double var_membrane__C_sc = 0.001; // microF_per_cm2 + const double var_membrane__i_Stim_converter = GetIntracellularAreaStimulus(var_chaste_interface__environment__time_converted); // uA_per_cm2 + const double var_membrane__i_Stim = var_membrane__i_Stim_converter / HeartConfig::Instance()->GetCapacitance(); // microA_per_microF + const double var_plateau_potassium_current__g_Kp = 0.0022160000000000001; // milliS_per_microF + const double var_plateau_potassium_current_Kp_gate__Kp_V = 1.0 / (1.0 + exp(1.2521739130434781 - 0.16722408026755853 * var_chaste_interface__membrane__V)); // dimensionless + const double var_rapid_activating_delayed_rectifiyer_K_current__R_V = 1.0 / (1.0 + 1.4944999999999999 * exp(0.044600000000000001 * var_chaste_interface__membrane__V)); // dimensionless + const double var_rapid_activating_delayed_rectifiyer_K_current__g_Kr = 0.0033999999999999998; // milliS_per_microF + const double var_slow_activating_delayed_rectifiyer_K_current__g_Ks = 0.0027133999999999999; // milliS_per_microF + const double var_sodium_background_current__g_Nab = 0.0030999999999999999; // milliS_per_microF + const double var_sodium_potassium_pump__I_NaK = 0.69299999999999995; // microA_per_microF + const double var_sodium_potassium_pump__K_mKo = 1.5; // millimolar + const double var_sodium_potassium_pump__K_mNai = 10.0; // millimolar + const double var_L_type_Ca_current__p_prime_k = var_L_type_Ca_current__P_K / (1.0 + var_L_type_Ca_current__i_Ca_max / var_L_type_Ca_current__i_Ca_half); // cm_per_second + const double var_standard_ionic_concentrations__Ko = 4.0; // millimolar + const double var_L_type_Ca_current__i_Ca_K = 1.0 * pow(var_membrane__F, 2) * (-var_standard_ionic_concentrations__Ko + var_chaste_interface__intracellular_ion_concentrations__Ki * exp(var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * (var_chaste_interface__L_type_Ca_current__O + var_chaste_interface__L_type_Ca_current__O_Ca) * var_L_type_Ca_current__p_prime_k * var_chaste_interface__L_type_Ca_current_y_gate__y * var_chaste_interface__membrane__V / ((-1.0 + exp(var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * var_membrane__R * var_membrane__T); // microA_per_microF + const double var_rapid_activating_delayed_rectifiyer_K_current__E_K = var_membrane__R * var_membrane__T * log(var_standard_ionic_concentrations__Ko / var_chaste_interface__intracellular_ion_concentrations__Ki) / var_membrane__F; // millivolt + const double var_plateau_potassium_current__i_Kp = (-var_rapid_activating_delayed_rectifiyer_K_current__E_K + var_chaste_interface__membrane__V) * var_plateau_potassium_current__g_Kp * var_plateau_potassium_current_Kp_gate__Kp_V; // microA_per_microF + const double var_rapid_activating_delayed_rectifiyer_K_current__f_Ko = 0.5 * sqrt(var_standard_ionic_concentrations__Ko); // dimensionless + const double var_rapid_activating_delayed_rectifiyer_K_current__i_Kr = (-var_rapid_activating_delayed_rectifiyer_K_current__E_K + var_chaste_interface__membrane__V) * var_rapid_activating_delayed_rectifiyer_K_current__R_V * var_rapid_activating_delayed_rectifiyer_K_current__f_Ko * var_rapid_activating_delayed_rectifiyer_K_current__g_Kr * var_chaste_interface__rapid_activating_delayed_rectifiyer_K_current_X_kr_gate__X_kr; // microA_per_microF + const double var_fast_sodium_current__E_Na = var_membrane__R * var_membrane__T * log(var_standard_ionic_concentrations__Nao / var_chaste_interface__intracellular_ion_concentrations__Nai) / var_membrane__F; // millivolt + const double var_fast_sodium_current__i_Na = pow(var_chaste_interface__fast_sodium_current_m_gate__m, 3) * (-var_fast_sodium_current__E_Na + var_chaste_interface__membrane__V) * var_fast_sodium_current__g_Na * var_chaste_interface__fast_sodium_current_h_gate__h * var_chaste_interface__fast_sodium_current_j_gate__j; // microA_per_microF + const double var_slow_activating_delayed_rectifiyer_K_current__E_Ks = var_membrane__R * var_membrane__T * log((1.0 * var_standard_ionic_concentrations__Ko + 0.018329999999999999 * var_standard_ionic_concentrations__Nao) / (1.0 * var_chaste_interface__intracellular_ion_concentrations__Ki + 0.018329999999999999 * var_chaste_interface__intracellular_ion_concentrations__Nai)) / var_membrane__F; // millivolt + const double var_slow_activating_delayed_rectifiyer_K_current__i_Ks = pow(var_chaste_interface__slow_activating_delayed_rectifiyer_K_current_X_ks_gate__X_ks, 2) * (-var_slow_activating_delayed_rectifiyer_K_current__E_Ks + var_chaste_interface__membrane__V) * var_slow_activating_delayed_rectifiyer_K_current__g_Ks; // microA_per_microF + const double var_sodium_background_current__i_Na_b = (-var_fast_sodium_current__E_Na + var_chaste_interface__membrane__V) * var_sodium_background_current__g_Nab; // microA_per_microF + const double var_sodium_potassium_pump__sigma = -0.14285714285714285 + 0.14285714285714285 * exp(0.01485884101040119 * var_standard_ionic_concentrations__Nao); // dimensionless + const double var_sodium_potassium_pump__f_NaK = 1.0 / (1.0 + 0.1245 * exp(-0.10000000000000001 * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T)) + 0.036499999999999998 * var_sodium_potassium_pump__sigma * exp(-var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))); // dimensionless + const double var_sodium_potassium_pump__i_NaK = var_sodium_potassium_pump__I_NaK * var_sodium_potassium_pump__f_NaK * var_standard_ionic_concentrations__Ko / ((1.0 + pow((var_sodium_potassium_pump__K_mNai / var_chaste_interface__intracellular_ion_concentrations__Nai), 1.5)) * (var_sodium_potassium_pump__K_mKo + var_standard_ionic_concentrations__Ko)); // microA_per_microF + const double var_time_independent_potassium_current__K_mK1 = 13.0; // millimolar + const double var_time_independent_potassium_current__g_K1 = 2.7999999999999998; // milliS_per_microF + const double var_time_independent_potassium_current_K1_gate__K1_infinity_V = 1.0 / (2.0 + exp(1.5 * (-var_rapid_activating_delayed_rectifiyer_K_current__E_K + var_chaste_interface__membrane__V) * var_membrane__F / (var_membrane__R * var_membrane__T))); // dimensionless + const double var_time_independent_potassium_current__i_K1 = (-var_rapid_activating_delayed_rectifiyer_K_current__E_K + var_chaste_interface__membrane__V) * var_standard_ionic_concentrations__Ko * var_time_independent_potassium_current__g_K1 * var_time_independent_potassium_current_K1_gate__K1_infinity_V / (var_standard_ionic_concentrations__Ko + var_time_independent_potassium_current__K_mK1); // microA_per_microF + const double var_transient_outward_potassium_current__g_to1 = 0.23815; // milliS_per_microF + const double var_transient_outward_potassium_current__i_to1 = (-var_rapid_activating_delayed_rectifiyer_K_current__E_K + var_chaste_interface__membrane__V) * var_transient_outward_potassium_current__g_to1 * var_chaste_interface__transient_outward_potassium_current_X_to1_gate__X_to1 * var_chaste_interface__transient_outward_potassium_current_Y_to1_gate__Y_to1; // microA_per_microF + const double var_membrane__V_orig_deriv = -1.0 * (var_L_type_Ca_current__i_Ca + var_L_type_Ca_current__i_Ca_K + var_Na_Ca_exchanger__i_NaCa + var_calcium_background_current__i_Ca_b + var_fast_sodium_current__i_Na + var_membrane__i_Stim + var_plateau_potassium_current__i_Kp + var_rapid_activating_delayed_rectifiyer_K_current__i_Kr + var_sarcolemmal_calcium_pump__i_p_Ca + var_slow_activating_delayed_rectifiyer_K_current__i_Ks + var_sodium_background_current__i_Na_b + var_sodium_potassium_pump__i_NaK + var_time_independent_potassium_current__i_K1 + var_transient_outward_potassium_current__i_to1) / var_membrane__C_sc; // millivolt / second + d_dt_chaste_interface_var_membrane__V = 0.001 * var_membrane__V_orig_deriv; // millivolt / millisecond + } + + mEvalF[0] = d_dt_chaste_interface_var_membrane__V; + mEvalF[1] = d_dt_chaste_interface_var_fast_sodium_current_m_gate__m; + mEvalF[2] = d_dt_chaste_interface_var_fast_sodium_current_h_gate__h; + mEvalF[3] = d_dt_chaste_interface_var_fast_sodium_current_j_gate__j; + mEvalF[4] = d_dt_chaste_interface_var_rapid_activating_delayed_rectifiyer_K_current_X_kr_gate__X_kr; + mEvalF[5] = d_dt_chaste_interface_var_slow_activating_delayed_rectifiyer_K_current_X_ks_gate__X_ks; + mEvalF[6] = d_dt_chaste_interface_var_transient_outward_potassium_current_X_to1_gate__X_to1; + mEvalF[7] = d_dt_chaste_interface_var_transient_outward_potassium_current_Y_to1_gate__Y_to1; + mEvalF[8] = d_dt_chaste_interface_var_L_type_Ca_current__O; + mEvalF[9] = d_dt_chaste_interface_var_L_type_Ca_current__O_Ca; + mEvalF[10] = d_dt_chaste_interface_var_L_type_Ca_current__C0; + mEvalF[11] = d_dt_chaste_interface_var_L_type_Ca_current__C1; + mEvalF[12] = d_dt_chaste_interface_var_L_type_Ca_current__C2; + mEvalF[13] = d_dt_chaste_interface_var_L_type_Ca_current__C3; + mEvalF[14] = d_dt_chaste_interface_var_L_type_Ca_current__C4; + mEvalF[15] = d_dt_chaste_interface_var_L_type_Ca_current__C_Ca0; + mEvalF[16] = d_dt_chaste_interface_var_L_type_Ca_current__C_Ca1; + mEvalF[17] = d_dt_chaste_interface_var_L_type_Ca_current__C_Ca2; + mEvalF[18] = d_dt_chaste_interface_var_L_type_Ca_current__C_Ca3; + mEvalF[19] = d_dt_chaste_interface_var_L_type_Ca_current__C_Ca4; + mEvalF[20] = d_dt_chaste_interface_var_L_type_Ca_current_y_gate__y; + mEvalF[21] = d_dt_chaste_interface_var_RyR_channel__P_O1; + mEvalF[22] = d_dt_chaste_interface_var_RyR_channel__P_O2; + mEvalF[23] = d_dt_chaste_interface_var_RyR_channel__P_C1; + mEvalF[24] = d_dt_chaste_interface_var_RyR_channel__P_C2; + mEvalF[25] = d_dt_chaste_interface_var_intracellular_Ca_fluxes__HTRPNCa; + mEvalF[26] = d_dt_chaste_interface_var_intracellular_Ca_fluxes__LTRPNCa; + mEvalF[27] = d_dt_chaste_interface_var_intracellular_ion_concentrations__Nai; + mEvalF[28] = d_dt_chaste_interface_var_intracellular_ion_concentrations__Cai; + mEvalF[29] = d_dt_chaste_interface_var_intracellular_ion_concentrations__Ki; + mEvalF[30] = d_dt_chaste_interface_var_intracellular_ion_concentrations__Ca_ss; + mEvalF[31] = d_dt_chaste_interface_var_intracellular_ion_concentrations__Ca_JSR; + mEvalF[32] = d_dt_chaste_interface_var_intracellular_ion_concentrations__Ca_NSR; + + + mPartialF[0] = EvaluatePartialDerivative0(var_chaste_interface__environment__time_converted, rY, delta); + mPartialF[1] = EvaluatePartialDerivative1(var_chaste_interface__environment__time_converted, rY, delta); + mPartialF[2] = EvaluatePartialDerivative2(var_chaste_interface__environment__time_converted, rY, delta); + mPartialF[3] = EvaluatePartialDerivative3(var_chaste_interface__environment__time_converted, rY, delta); + mPartialF[4] = EvaluatePartialDerivative4(var_chaste_interface__environment__time_converted, rY, delta); + mPartialF[5] = EvaluatePartialDerivative5(var_chaste_interface__environment__time_converted, rY, delta); + mPartialF[6] = EvaluatePartialDerivative6(var_chaste_interface__environment__time_converted, rY, delta); + mPartialF[7] = EvaluatePartialDerivative7(var_chaste_interface__environment__time_converted, rY, delta); + mPartialF[8] = EvaluatePartialDerivative8(var_chaste_interface__environment__time_converted, rY, delta); + mPartialF[9] = EvaluatePartialDerivative9(var_chaste_interface__environment__time_converted, rY, delta); + mPartialF[10] = EvaluatePartialDerivative10(var_chaste_interface__environment__time_converted, rY, delta); + mPartialF[11] = EvaluatePartialDerivative11(var_chaste_interface__environment__time_converted, rY, delta); + mPartialF[12] = EvaluatePartialDerivative12(var_chaste_interface__environment__time_converted, rY, delta); + mPartialF[13] = EvaluatePartialDerivative13(var_chaste_interface__environment__time_converted, rY, delta); + mPartialF[14] = EvaluatePartialDerivative14(var_chaste_interface__environment__time_converted, rY, delta); + mPartialF[15] = EvaluatePartialDerivative15(var_chaste_interface__environment__time_converted, rY, delta); + mPartialF[16] = EvaluatePartialDerivative16(var_chaste_interface__environment__time_converted, rY, delta); + mPartialF[17] = EvaluatePartialDerivative17(var_chaste_interface__environment__time_converted, rY, delta); + mPartialF[18] = EvaluatePartialDerivative18(var_chaste_interface__environment__time_converted, rY, delta); + mPartialF[19] = EvaluatePartialDerivative19(var_chaste_interface__environment__time_converted, rY, delta); + mPartialF[20] = EvaluatePartialDerivative20(var_chaste_interface__environment__time_converted, rY, delta); + mPartialF[21] = EvaluatePartialDerivative21(var_chaste_interface__environment__time_converted, rY, delta); + mPartialF[22] = EvaluatePartialDerivative22(var_chaste_interface__environment__time_converted, rY, delta); + mPartialF[23] = EvaluatePartialDerivative23(var_chaste_interface__environment__time_converted, rY, delta); + mPartialF[24] = EvaluatePartialDerivative24(var_chaste_interface__environment__time_converted, rY, delta); + mPartialF[25] = EvaluatePartialDerivative25(var_chaste_interface__environment__time_converted, rY, delta); + mPartialF[26] = EvaluatePartialDerivative26(var_chaste_interface__environment__time_converted, rY, delta); + mPartialF[27] = EvaluatePartialDerivative27(var_chaste_interface__environment__time_converted, rY, delta); + mPartialF[28] = EvaluatePartialDerivative28(var_chaste_interface__environment__time_converted, rY, delta); + mPartialF[29] = EvaluatePartialDerivative29(var_chaste_interface__environment__time_converted, rY, delta); + mPartialF[30] = EvaluatePartialDerivative30(var_chaste_interface__environment__time_converted, rY, delta); + mPartialF[31] = EvaluatePartialDerivative31(var_chaste_interface__environment__time_converted, rY, delta); + mPartialF[32] = EvaluatePartialDerivative32(var_chaste_interface__environment__time_converted, rY, delta); + for (unsigned var=0; var& rY) + { + double d_dt_chaste_interface_var_membrane__V; + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -96.1638 + double var_chaste_interface__fast_sodium_current_m_gate__m = rY[1]; + // Units: dimensionless; Initial value: 0.0328302 + double var_chaste_interface__fast_sodium_current_h_gate__h = rY[2]; + // Units: dimensionless; Initial value: 0.988354 + double var_chaste_interface__fast_sodium_current_j_gate__j = rY[3]; + // Units: dimensionless; Initial value: 0.99254 + double var_chaste_interface__rapid_activating_delayed_rectifiyer_K_current_X_kr_gate__X_kr = rY[4]; + // Units: dimensionless; Initial value: 0.51 + double var_chaste_interface__slow_activating_delayed_rectifiyer_K_current_X_ks_gate__X_ks = rY[5]; + // Units: dimensionless; Initial value: 0.264 + double var_chaste_interface__transient_outward_potassium_current_X_to1_gate__X_to1 = rY[6]; + // Units: dimensionless; Initial value: 2.63 + double var_chaste_interface__transient_outward_potassium_current_Y_to1_gate__Y_to1 = rY[7]; + // Units: dimensionless; Initial value: 0.99 + double var_chaste_interface__L_type_Ca_current__O = rY[8]; + // Units: dimensionless; Initial value: 9.84546e-21 + double var_chaste_interface__L_type_Ca_current__O_Ca = rY[9]; + // Units: dimensionless; Initial value: 0.0 + double var_chaste_interface__L_type_Ca_current_y_gate__y = rY[20]; + // Units: dimensionless; Initial value: 0.798 + double var_chaste_interface__intracellular_ion_concentrations__Nai = rY[27]; + // Units: millimolar; Initial value: 10.0 + double var_chaste_interface__intracellular_ion_concentrations__Cai = rY[28]; + // Units: millimolar; Initial value: 8e-05 + double var_chaste_interface__intracellular_ion_concentrations__Ki = rY[29]; + // Units: millimolar; Initial value: 157.8 + + + // Mathematics + const double var_L_type_Ca_current__P_Ca = 0.00031250000000000001; // cm_per_second + const double var_L_type_Ca_current__P_K = 5.7899999999999998e-7; // cm_per_second + const double var_L_type_Ca_current__i_Ca_half = -0.26500000000000001; // microA_per_microF + const double var_Na_Ca_exchanger__K_NaCa = 0.29999999999999999; // microA_per_microF + const double var_Na_Ca_exchanger__K_mCa = 1.3799999999999999; // millimolar + const double var_Na_Ca_exchanger__K_mNa = 87.5; // millimolar + const double var_Na_Ca_exchanger__K_sat = 0.20000000000000001; // dimensionless + const double var_Na_Ca_exchanger__eta = 0.34999999999999998; // dimensionless + const double var_calcium_background_current__g_Cab = 0.00038420000000000001; // milliS_per_microF + const double var_fast_sodium_current__g_Na = 12.800000000000001; // milliS_per_microF + const double var_membrane__C_sc = 0.001; // microF_per_cm2 + const double var_membrane__F = 96.485341500000004; // coulomb_per_millimole + const double var_membrane__R = 8.3144720000000003; // joule_per_mole_kelvin + const double var_membrane__T = 310.0; // kelvin + const double var_membrane__i_Stim_converter = GetIntracellularAreaStimulus(var_chaste_interface__environment__time_converted); // uA_per_cm2 + const double var_membrane__i_Stim = var_membrane__i_Stim_converter / HeartConfig::Instance()->GetCapacitance(); // microA_per_microF + const double var_plateau_potassium_current__g_Kp = 0.0022160000000000001; // milliS_per_microF + const double var_plateau_potassium_current_Kp_gate__Kp_V = 1.0 / (1.0 + exp(1.2521739130434781 - 0.16722408026755853 * var_chaste_interface__membrane__V)); // dimensionless + const double var_rapid_activating_delayed_rectifiyer_K_current__R_V = 1.0 / (1.0 + 1.4944999999999999 * exp(0.044600000000000001 * var_chaste_interface__membrane__V)); // dimensionless + const double var_rapid_activating_delayed_rectifiyer_K_current__g_Kr = 0.0033999999999999998; // milliS_per_microF + const double var_sarcolemmal_calcium_pump__I_pCa = 0.050000000000000003; // microA_per_microF + const double var_sarcolemmal_calcium_pump__K_mpCa = 5.0000000000000002e-5; // millimolar + const double var_sarcolemmal_calcium_pump__i_p_Ca = var_chaste_interface__intracellular_ion_concentrations__Cai * var_sarcolemmal_calcium_pump__I_pCa / (var_chaste_interface__intracellular_ion_concentrations__Cai + var_sarcolemmal_calcium_pump__K_mpCa); // microA_per_microF + const double var_slow_activating_delayed_rectifiyer_K_current__g_Ks = 0.0027133999999999999; // milliS_per_microF + const double var_sodium_background_current__g_Nab = 0.0030999999999999999; // milliS_per_microF + const double var_sodium_potassium_pump__I_NaK = 0.69299999999999995; // microA_per_microF + const double var_sodium_potassium_pump__K_mKo = 1.5; // millimolar + const double var_sodium_potassium_pump__K_mNai = 10.0; // millimolar + const double var_standard_ionic_concentrations__Cao = 2.0; // millimolar + const double var_L_type_Ca_current__i_Ca_max = 4000.0 * pow(var_membrane__F, 2) * (0.001 * exp(2.0 * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T)) - 0.34100000000000003 * var_standard_ionic_concentrations__Cao) * var_L_type_Ca_current__P_Ca * var_chaste_interface__membrane__V / ((-1.0 + exp(2.0 * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * var_membrane__R * var_membrane__T); // microA_per_microF + const double var_L_type_Ca_current__i_Ca = (var_chaste_interface__L_type_Ca_current__O + var_chaste_interface__L_type_Ca_current__O_Ca) * var_L_type_Ca_current__i_Ca_max * var_chaste_interface__L_type_Ca_current_y_gate__y; // microA_per_microF + const double var_L_type_Ca_current__p_prime_k = var_L_type_Ca_current__P_K / (1.0 + var_L_type_Ca_current__i_Ca_max / var_L_type_Ca_current__i_Ca_half); // cm_per_second + const double var_calcium_background_current__E_Ca = 0.5 * var_membrane__R * var_membrane__T * log(var_standard_ionic_concentrations__Cao / var_chaste_interface__intracellular_ion_concentrations__Cai) / var_membrane__F; // millivolt + const double var_calcium_background_current__i_Ca_b = (-var_calcium_background_current__E_Ca + var_chaste_interface__membrane__V) * var_calcium_background_current__g_Cab; // microA_per_microF + const double var_standard_ionic_concentrations__Ko = 4.0; // millimolar + const double var_L_type_Ca_current__i_Ca_K = 1.0 * pow(var_membrane__F, 2) * (-var_standard_ionic_concentrations__Ko + var_chaste_interface__intracellular_ion_concentrations__Ki * exp(var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * (var_chaste_interface__L_type_Ca_current__O + var_chaste_interface__L_type_Ca_current__O_Ca) * var_L_type_Ca_current__p_prime_k * var_chaste_interface__L_type_Ca_current_y_gate__y * var_chaste_interface__membrane__V / ((-1.0 + exp(var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * var_membrane__R * var_membrane__T); // microA_per_microF + const double var_rapid_activating_delayed_rectifiyer_K_current__E_K = var_membrane__R * var_membrane__T * log(var_standard_ionic_concentrations__Ko / var_chaste_interface__intracellular_ion_concentrations__Ki) / var_membrane__F; // millivolt + const double var_plateau_potassium_current__i_Kp = (-var_rapid_activating_delayed_rectifiyer_K_current__E_K + var_chaste_interface__membrane__V) * var_plateau_potassium_current__g_Kp * var_plateau_potassium_current_Kp_gate__Kp_V; // microA_per_microF + const double var_rapid_activating_delayed_rectifiyer_K_current__f_Ko = 0.5 * sqrt(var_standard_ionic_concentrations__Ko); // dimensionless + const double var_rapid_activating_delayed_rectifiyer_K_current__i_Kr = (-var_rapid_activating_delayed_rectifiyer_K_current__E_K + var_chaste_interface__membrane__V) * var_rapid_activating_delayed_rectifiyer_K_current__R_V * var_rapid_activating_delayed_rectifiyer_K_current__f_Ko * var_rapid_activating_delayed_rectifiyer_K_current__g_Kr * var_chaste_interface__rapid_activating_delayed_rectifiyer_K_current_X_kr_gate__X_kr; // microA_per_microF + const double var_standard_ionic_concentrations__Nao = 138.0; // millimolar + const double var_Na_Ca_exchanger__i_NaCa = 5000.0 * (pow(var_chaste_interface__intracellular_ion_concentrations__Nai, 3) * var_standard_ionic_concentrations__Cao * exp(var_Na_Ca_exchanger__eta * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T)) - pow(var_standard_ionic_concentrations__Nao, 3) * var_chaste_interface__intracellular_ion_concentrations__Cai * exp((-1.0 + var_Na_Ca_exchanger__eta) * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * var_Na_Ca_exchanger__K_NaCa / ((1.0 + var_Na_Ca_exchanger__K_sat * exp((-1.0 + var_Na_Ca_exchanger__eta) * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * (pow(var_Na_Ca_exchanger__K_mNa, 3) + pow(var_standard_ionic_concentrations__Nao, 3)) * (var_Na_Ca_exchanger__K_mCa + var_standard_ionic_concentrations__Cao)); // microA_per_microF + const double var_fast_sodium_current__E_Na = var_membrane__R * var_membrane__T * log(var_standard_ionic_concentrations__Nao / var_chaste_interface__intracellular_ion_concentrations__Nai) / var_membrane__F; // millivolt + const double var_fast_sodium_current__i_Na = pow(var_chaste_interface__fast_sodium_current_m_gate__m, 3) * (-var_fast_sodium_current__E_Na + var_chaste_interface__membrane__V) * var_fast_sodium_current__g_Na * var_chaste_interface__fast_sodium_current_h_gate__h * var_chaste_interface__fast_sodium_current_j_gate__j; // microA_per_microF + const double var_slow_activating_delayed_rectifiyer_K_current__E_Ks = var_membrane__R * var_membrane__T * log((1.0 * var_standard_ionic_concentrations__Ko + 0.018329999999999999 * var_standard_ionic_concentrations__Nao) / (1.0 * var_chaste_interface__intracellular_ion_concentrations__Ki + 0.018329999999999999 * var_chaste_interface__intracellular_ion_concentrations__Nai)) / var_membrane__F; // millivolt + const double var_slow_activating_delayed_rectifiyer_K_current__i_Ks = pow(var_chaste_interface__slow_activating_delayed_rectifiyer_K_current_X_ks_gate__X_ks, 2) * (-var_slow_activating_delayed_rectifiyer_K_current__E_Ks + var_chaste_interface__membrane__V) * var_slow_activating_delayed_rectifiyer_K_current__g_Ks; // microA_per_microF + const double var_sodium_background_current__i_Na_b = (-var_fast_sodium_current__E_Na + var_chaste_interface__membrane__V) * var_sodium_background_current__g_Nab; // microA_per_microF + const double var_sodium_potassium_pump__sigma = -0.14285714285714285 + 0.14285714285714285 * exp(0.01485884101040119 * var_standard_ionic_concentrations__Nao); // dimensionless + const double var_sodium_potassium_pump__f_NaK = 1.0 / (1.0 + 0.1245 * exp(-0.10000000000000001 * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T)) + 0.036499999999999998 * var_sodium_potassium_pump__sigma * exp(-var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))); // dimensionless + const double var_sodium_potassium_pump__i_NaK = var_sodium_potassium_pump__I_NaK * var_sodium_potassium_pump__f_NaK * var_standard_ionic_concentrations__Ko / ((1.0 + pow((var_sodium_potassium_pump__K_mNai / var_chaste_interface__intracellular_ion_concentrations__Nai), 1.5)) * (var_sodium_potassium_pump__K_mKo + var_standard_ionic_concentrations__Ko)); // microA_per_microF + const double var_time_independent_potassium_current__K_mK1 = 13.0; // millimolar + const double var_time_independent_potassium_current__g_K1 = 2.7999999999999998; // milliS_per_microF + const double var_time_independent_potassium_current_K1_gate__K1_infinity_V = 1.0 / (2.0 + exp(1.5 * (-var_rapid_activating_delayed_rectifiyer_K_current__E_K + var_chaste_interface__membrane__V) * var_membrane__F / (var_membrane__R * var_membrane__T))); // dimensionless + const double var_time_independent_potassium_current__i_K1 = (-var_rapid_activating_delayed_rectifiyer_K_current__E_K + var_chaste_interface__membrane__V) * var_standard_ionic_concentrations__Ko * var_time_independent_potassium_current__g_K1 * var_time_independent_potassium_current_K1_gate__K1_infinity_V / (var_standard_ionic_concentrations__Ko + var_time_independent_potassium_current__K_mK1); // microA_per_microF + const double var_transient_outward_potassium_current__g_to1 = 0.23815; // milliS_per_microF + const double var_transient_outward_potassium_current__i_to1 = (-var_rapid_activating_delayed_rectifiyer_K_current__E_K + var_chaste_interface__membrane__V) * var_transient_outward_potassium_current__g_to1 * var_chaste_interface__transient_outward_potassium_current_X_to1_gate__X_to1 * var_chaste_interface__transient_outward_potassium_current_Y_to1_gate__Y_to1; // microA_per_microF + const double var_membrane__V_orig_deriv = -1.0 * (var_L_type_Ca_current__i_Ca + var_L_type_Ca_current__i_Ca_K + var_Na_Ca_exchanger__i_NaCa + var_calcium_background_current__i_Ca_b + var_fast_sodium_current__i_Na + var_membrane__i_Stim + var_plateau_potassium_current__i_Kp + var_rapid_activating_delayed_rectifiyer_K_current__i_Kr + var_sarcolemmal_calcium_pump__i_p_Ca + var_slow_activating_delayed_rectifiyer_K_current__i_Ks + var_sodium_background_current__i_Na_b + var_sodium_potassium_pump__i_NaK + var_time_independent_potassium_current__i_K1 + var_transient_outward_potassium_current__i_to1) / var_membrane__C_sc; // millivolt / second + d_dt_chaste_interface_var_membrane__V = 0.001 * var_membrane__V_orig_deriv; // millivolt / millisecond + + return d_dt_chaste_interface_var_membrane__V; + } + + double Dynamicwinslow_model_1999FromCellMLGRL2Opt::EvaluatePartialDerivative0(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -96.1638 + double var_chaste_interface__fast_sodium_current_m_gate__m = rY[1]; + // Units: dimensionless; Initial value: 0.0328302 + double var_chaste_interface__fast_sodium_current_h_gate__h = rY[2]; + // Units: dimensionless; Initial value: 0.988354 + double var_chaste_interface__fast_sodium_current_j_gate__j = rY[3]; + // Units: dimensionless; Initial value: 0.99254 + double var_chaste_interface__rapid_activating_delayed_rectifiyer_K_current_X_kr_gate__X_kr = rY[4]; + // Units: dimensionless; Initial value: 0.51 + double var_chaste_interface__slow_activating_delayed_rectifiyer_K_current_X_ks_gate__X_ks = rY[5]; + // Units: dimensionless; Initial value: 0.264 + double var_chaste_interface__transient_outward_potassium_current_X_to1_gate__X_to1 = rY[6]; + // Units: dimensionless; Initial value: 2.63 + double var_chaste_interface__transient_outward_potassium_current_Y_to1_gate__Y_to1 = rY[7]; + // Units: dimensionless; Initial value: 0.99 + double var_chaste_interface__L_type_Ca_current__O = rY[8]; + // Units: dimensionless; Initial value: 9.84546e-21 + double var_chaste_interface__L_type_Ca_current__O_Ca = rY[9]; + // Units: dimensionless; Initial value: 0.0 + double var_chaste_interface__L_type_Ca_current_y_gate__y = rY[20]; + // Units: dimensionless; Initial value: 0.798 + double var_chaste_interface__intracellular_ion_concentrations__Nai = rY[27]; + // Units: millimolar; Initial value: 10.0 + double var_chaste_interface__intracellular_ion_concentrations__Cai = rY[28]; + // Units: millimolar; Initial value: 8e-05 + double var_chaste_interface__intracellular_ion_concentrations__Ki = rY[29]; + // Units: millimolar; Initial value: 157.8 + + const double var_x0 = pow(var_chaste_interface__slow_activating_delayed_rectifiyer_K_current_X_ks_gate__X_ks, 2); + const double var_x1 = exp(1.2521739130434781 - 0.16722408026755853 * var_chaste_interface__membrane__V); + const double var_x2 = 1.0 + var_x1; + const double var_x3 = 1 / var_x2; + const double var_x4 = 1 / var_chaste_interface__intracellular_ion_concentrations__Ki; + const double var_x5 = log(4.0 * var_x4); + const double var_x6 = exp(0.056150836234118207 * var_chaste_interface__membrane__V - 1.5 * var_x5); + const double var_x7 = 1 / (2.0 + var_x6); + const double var_x8 = exp(0.044600000000000001 * var_chaste_interface__membrane__V); + const double var_x9 = 1 / (1.0 + 1.4944999999999999 * var_x8); + const double var_x10 = 0.0033999999999999998 * var_x9; + const double var_x11 = var_chaste_interface__transient_outward_potassium_current_X_to1_gate__X_to1 * var_chaste_interface__transient_outward_potassium_current_Y_to1_gate__Y_to1; + const double var_x12 = exp(-0.024332029034784559 * var_chaste_interface__membrane__V); + const double var_x13 = 1.0 + 0.20000000000000001 * var_x12; + const double var_x14 = 1 / var_x13; + const double var_x15 = var_x12 * var_chaste_interface__intracellular_ion_concentrations__Cai; + const double var_x16 = exp(0.013101861787960915 * var_chaste_interface__membrane__V); + const double var_x17 = var_x16 * pow(var_chaste_interface__intracellular_ion_concentrations__Nai, 3); + const double var_x18 = var_x14 * (63946.324209504324 * var_x15 + 0.026203723575921829 * var_x17); + const double var_x19 = -26.713760659695648 * var_x5 + var_chaste_interface__membrane__V; + const double var_x20 = var_x19 * var_x6 / pow((1 + 0.5 * var_x6), 2); + const double var_x21 = 2.0 * var_x17 - 2628072.0 * var_x15; + const double var_x22 = var_x12 * var_x21 / pow(var_x13, 2); + const double var_x23 = 1 / var_chaste_interface__intracellular_ion_concentrations__Nai; + const double var_x24 = pow(var_x23, 1.5); + const double var_x25 = exp(-0.0037433890822745476 * var_chaste_interface__membrane__V); + const double var_x26 = exp(2.0505200594353643); + const double var_x27 = 0.037433890822745473 * var_chaste_interface__membrane__V; + const double var_x28 = exp(-var_x27); + const double var_x29 = 1.0 + 0.1245 * var_x25 + 0.036499999999999998 * var_x28 * (-0.14285714285714285 + 0.14285714285714285 * var_x26); + const double var_x30 = var_chaste_interface__fast_sodium_current_h_gate__h * var_chaste_interface__fast_sodium_current_j_gate__j; + const double var_x31 = pow(var_chaste_interface__fast_sodium_current_m_gate__m, 3); + const double var_x32 = 12.800000000000001 * var_x31; + const double var_x33 = 4.5147771746328917 * var_chaste_interface__L_type_Ca_current_y_gate__y; + const double var_x34 = var_chaste_interface__L_type_Ca_current__O + var_chaste_interface__L_type_Ca_current__O_Ca; + const double var_x35 = exp(0.074867781645490947 * var_chaste_interface__membrane__V); + const double var_x36 = -1.0 + var_x35; + const double var_x37 = 1 / var_x36; + const double var_x38 = -0.68200000000000005 + 0.001 * var_x35; + const double var_x39 = var_x37 * var_x38; + const double var_x40 = var_x34 * var_x39; + const double var_x41 = var_x39 * var_chaste_interface__membrane__V; + const double var_x42 = 1 / (1.0 - 17.036894998614684 * var_x41); + const double var_x43 = exp(var_x27); + const double var_x44 = var_x43 * var_chaste_interface__intracellular_ion_concentrations__Ki; + const double var_x45 = -4.0 + var_x44; + const double var_x46 = var_x34 * var_chaste_interface__L_type_Ca_current_y_gate__y; + const double var_x47 = var_x42 * var_x45 * var_x46; + const double var_x48 = -1.0 + var_x43; + const double var_x49 = 1 / var_x48; + const double var_x50 = 2.091244787289955e-6 * var_x49; + const double var_x51 = var_x35 * var_chaste_interface__membrane__V; + const double var_x52 = var_x37 * var_x51; + const double var_x53 = var_x46 * var_x52; + const double var_x54 = var_x38 * var_x51 / pow(var_x36, 2); + const double var_x55 = var_x46 * var_x54; + const double var_x56 = var_x42 * var_chaste_interface__membrane__V; + const double var_x57 = var_x46 * var_x49; + + partialF = -0.0034841999999999998 + 0.0092483730267959394 * var_x20 + 0.33801135168846186 * var_x55 - 0.0027133999999999999 * var_x0 - 6.5483673691361389e-7 * var_x22 - 0.23815 * var_x11 - 0.00013456270662374128 * var_x18 - 0.0022160000000000001 * var_x3 - 0.6588235294117647 * var_x7 - 0.00033801135168846187 * var_x53 - var_x10 * var_chaste_interface__rapid_activating_delayed_rectifiyer_K_current_X_kr_gate__X_kr - var_x30 * var_x32 - var_x33 * var_x40 - var_x47 * var_x50 - 0.00037056856187290968 * var_x1 * var_x19 / pow(var_x2, 2) - 0.504 * (0.00046605194074318115 * var_x25 + 0.037433890822745473 * var_x28 * (-0.0052142857142857138 + 0.0052142857142857138 * var_x26)) / (pow(var_x29, 2) * (1.0 + 31.622776601683793 * var_x24)) - 7.8283429051047759e-8 * var_x44 * var_x56 * var_x57 + 7.8283429051047759e-8 * var_x43 * var_x47 * var_chaste_interface__membrane__V / pow(var_x48, 2) + 0.00010146537303445968 * var_x19 * var_x8 * var_chaste_interface__rapid_activating_delayed_rectifiyer_K_current_X_kr_gate__X_kr / pow((0.66912010705921721 + var_x8), 2) - 7.2048339800169557e-9 * var_x45 * var_x57 * (17.036894998614684 * var_x39 + 0.0012755145346734409 * var_x52 - 1.2755145346734409 * var_x54) * var_chaste_interface__membrane__V / pow((0.058696141525865643 - var_x41), 2); + } + else + { + const double y_save = rY[0]; + rY[0] += delta; + const double temp = EvaluateYDerivative0(var_chaste_interface__environment__time_converted, rY); + partialF = (temp-mEvalF[0])/delta; + rY[0] = y_save; + } + return partialF; + } + double Dynamicwinslow_model_1999FromCellMLGRL2Opt::EvaluateYDerivative1(double var_chaste_interface__environment__time_converted, std::vector& rY) + { + + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -96.1638 + double var_chaste_interface__fast_sodium_current_m_gate__m = rY[1]; + // Units: dimensionless; Initial value: 0.0328302 + + + // Mathematics + const double var_fast_sodium_current_m_gate__E0_m = 47.130000000000003 + var_chaste_interface__membrane__V; // millivolt + const double var_fast_sodium_current_m_gate__alpha_m = ((fabs(var_fast_sodium_current_m_gate__E0_m) < 1.0000000000000001e-5) ? (1000.0 / (0.10000000000000001 - 0.0050000000000000001 * var_fast_sodium_current_m_gate__E0_m)) : (320.0 * var_fast_sodium_current_m_gate__E0_m / (1.0 - exp(-0.10000000000000001 * var_fast_sodium_current_m_gate__E0_m)))); // per_second + const double var_fast_sodium_current_m_gate__beta_m = 80.0 * exp(-0.090909090909090912 * var_chaste_interface__membrane__V); // per_second + const double var_fast_sodium_current_m_gate__m_orig_deriv = ((var_chaste_interface__membrane__V >= -90.0) ? ((1.0 - var_chaste_interface__fast_sodium_current_m_gate__m) * var_fast_sodium_current_m_gate__alpha_m - var_fast_sodium_current_m_gate__beta_m * var_chaste_interface__fast_sodium_current_m_gate__m) : (0)); // 1 / second + const double d_dt_chaste_interface_var_fast_sodium_current_m_gate__m = 0.001 * var_fast_sodium_current_m_gate__m_orig_deriv; // 1 / millisecond + + return d_dt_chaste_interface_var_fast_sodium_current_m_gate__m; + } + + double Dynamicwinslow_model_1999FromCellMLGRL2Opt::EvaluatePartialDerivative1(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -96.1638 + + const double var_x74 = exp(-0.090909090909090912 * var_chaste_interface__membrane__V); + const double var_x76 = var_chaste_interface__membrane__V >= -90.0; + const double var_x77 = 47.130000000000003 + var_chaste_interface__membrane__V; + const double var_x78 = (var_x76) && (fabs(var_x77) < 1.0000000000000001e-5); + const double var_x79 = -0.10000000000000001 * var_chaste_interface__membrane__V; + const double var_x80 = exp(-4.7130000000000001 + var_x79); + const double var_x81 = 1.0 - var_x80; + const double var_x82 = 320.0 / var_x81; + const double var_x83 = -80.0 * var_x74; + + partialF = 0.001 * ((var_x78) ? (var_x83 - 1000.0 / (-0.13565000000000002 - 0.0050000000000000001 * var_chaste_interface__membrane__V)) : ((var_x76) ? (var_x83 - var_x77 * var_x82) : (0))); + } + else + { + const double y_save = rY[1]; + rY[1] += delta; + const double temp = EvaluateYDerivative1(var_chaste_interface__environment__time_converted, rY); + partialF = (temp-mEvalF[1])/delta; + rY[1] = y_save; + } + return partialF; + } + double Dynamicwinslow_model_1999FromCellMLGRL2Opt::EvaluateYDerivative2(double var_chaste_interface__environment__time_converted, std::vector& rY) + { + + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -96.1638 + double var_chaste_interface__fast_sodium_current_h_gate__h = rY[2]; + // Units: dimensionless; Initial value: 0.988354 + + + // Mathematics + const double var_fast_sodium_current_h_gate__alpha_h = ((var_chaste_interface__membrane__V < -40.0) ? (135.0 * exp(-11.764705882352942 - 0.14705882352941177 * var_chaste_interface__membrane__V)) : (0)); // per_second + const double var_fast_sodium_current_h_gate__beta_h = ((var_chaste_interface__membrane__V < -40.0) ? (3560.0 * exp(0.079000000000000001 * var_chaste_interface__membrane__V) + 310000.0 * exp(0.34999999999999998 * var_chaste_interface__membrane__V)) : (7692.3076923076924 / (1.0 + exp(-0.96036036036036043 - 0.0900900900900901 * var_chaste_interface__membrane__V)))); // per_second + const double var_fast_sodium_current_h_gate__h_orig_deriv = (1.0 - var_chaste_interface__fast_sodium_current_h_gate__h) * var_fast_sodium_current_h_gate__alpha_h - var_fast_sodium_current_h_gate__beta_h * var_chaste_interface__fast_sodium_current_h_gate__h; // 1 / second + const double d_dt_chaste_interface_var_fast_sodium_current_h_gate__h = 0.001 * var_fast_sodium_current_h_gate__h_orig_deriv; // 1 / millisecond + + return d_dt_chaste_interface_var_fast_sodium_current_h_gate__h; + } + + double Dynamicwinslow_model_1999FromCellMLGRL2Opt::EvaluatePartialDerivative2(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -96.1638 + + const double var_x85 = exp(-11.764705882352942 - 0.14705882352941177 * var_chaste_interface__membrane__V); + const double var_x86 = var_chaste_interface__membrane__V < -40.0; + const double var_x87 = exp(0.079000000000000001 * var_chaste_interface__membrane__V); + const double var_x88 = exp(0.34999999999999998 * var_chaste_interface__membrane__V); + const double var_x89 = exp(-0.96036036036036043 - 0.0900900900900901 * var_chaste_interface__membrane__V); + const double var_x90 = 1.0 + var_x89; + + partialF = -0.001 * ((var_x86) ? (135.0 * var_x85) : (0)) - 0.001 * ((var_x86) ? (3560.0 * var_x87 + 310000.0 * var_x88) : (7692.3076923076924 / var_x90)); + } + else + { + const double y_save = rY[2]; + rY[2] += delta; + const double temp = EvaluateYDerivative2(var_chaste_interface__environment__time_converted, rY); + partialF = (temp-mEvalF[2])/delta; + rY[2] = y_save; + } + return partialF; + } + double Dynamicwinslow_model_1999FromCellMLGRL2Opt::EvaluateYDerivative3(double var_chaste_interface__environment__time_converted, std::vector& rY) + { + + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -96.1638 + double var_chaste_interface__fast_sodium_current_j_gate__j = rY[3]; + // Units: dimensionless; Initial value: 0.99254 + + + // Mathematics + const double var_fast_sodium_current_j_gate__alpha_j = ((var_chaste_interface__membrane__V < -40.0) ? (1000.0 * (37.780000000000001 + var_chaste_interface__membrane__V) * (-127140.0 * exp(0.24440000000000001 * var_chaste_interface__membrane__V) - 3.4740000000000003e-5 * exp(-0.043909999999999998 * var_chaste_interface__membrane__V)) / (1.0 + exp(24.640530000000002 + 0.311 * var_chaste_interface__membrane__V))) : (0)); // per_second + const double var_fast_sodium_current_j_gate__beta_j = ((var_chaste_interface__membrane__V < -40.0) ? (121.2 * exp(-0.01052 * var_chaste_interface__membrane__V) / (1.0 + exp(-5.5312920000000005 - 0.13780000000000001 * var_chaste_interface__membrane__V))) : (300.0 * exp(-2.5349999999999999e-7 * var_chaste_interface__membrane__V) / (1.0 + exp(-3.2000000000000002 - 0.10000000000000001 * var_chaste_interface__membrane__V)))); // per_second + const double var_fast_sodium_current_j_gate__j_orig_deriv = (1.0 - var_chaste_interface__fast_sodium_current_j_gate__j) * var_fast_sodium_current_j_gate__alpha_j - var_fast_sodium_current_j_gate__beta_j * var_chaste_interface__fast_sodium_current_j_gate__j; // 1 / second + const double d_dt_chaste_interface_var_fast_sodium_current_j_gate__j = 0.001 * var_fast_sodium_current_j_gate__j_orig_deriv; // 1 / millisecond + + return d_dt_chaste_interface_var_fast_sodium_current_j_gate__j; + } + + double Dynamicwinslow_model_1999FromCellMLGRL2Opt::EvaluatePartialDerivative3(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -96.1638 + + const double var_x79 = -0.10000000000000001 * var_chaste_interface__membrane__V; + const double var_x86 = var_chaste_interface__membrane__V < -40.0; + const double var_x92 = exp(0.24440000000000001 * var_chaste_interface__membrane__V); + const double var_x93 = exp(-0.043909999999999998 * var_chaste_interface__membrane__V); + const double var_x94 = -127140.0 * var_x92 - 3.4740000000000003e-5 * var_x93; + const double var_x95 = exp(24.640530000000002 + 0.311 * var_chaste_interface__membrane__V); + const double var_x96 = 1.0 + var_x95; + const double var_x97 = 1000.0 / var_x96; + const double var_x98 = var_x94 * var_x97; + const double var_x99 = 37.780000000000001 + var_chaste_interface__membrane__V; + const double var_x100 = exp(-5.5312920000000005 - 0.13780000000000001 * var_chaste_interface__membrane__V); + const double var_x101 = 1.0 + var_x100; + const double var_x102 = exp(-0.01052 * var_chaste_interface__membrane__V); + const double var_x103 = var_x102 / var_x101; + const double var_x104 = exp(-3.2000000000000002 + var_x79); + const double var_x105 = 1.0 + var_x104; + const double var_x106 = exp(-2.5349999999999999e-7 * var_chaste_interface__membrane__V); + const double var_x107 = var_x106 / var_x105; + + partialF = -0.001 * ((var_x86) ? (121.2 * var_x103) : (300.0 * var_x107)) - 0.001 * ((var_x86) ? (var_x98 * var_x99) : (0)); + } + else + { + const double y_save = rY[3]; + rY[3] += delta; + const double temp = EvaluateYDerivative3(var_chaste_interface__environment__time_converted, rY); + partialF = (temp-mEvalF[3])/delta; + rY[3] = y_save; + } + return partialF; + } + double Dynamicwinslow_model_1999FromCellMLGRL2Opt::EvaluateYDerivative4(double var_chaste_interface__environment__time_converted, std::vector& rY) + { + + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -96.1638 + double var_chaste_interface__rapid_activating_delayed_rectifiyer_K_current_X_kr_gate__X_kr = rY[4]; + // Units: dimensionless; Initial value: 0.51 + + + // Mathematics + const double var_rapid_activating_delayed_rectifiyer_K_current_X_kr_gate__K12 = exp(-5.4950000000000001 + 0.1691 * var_chaste_interface__membrane__V); // dimensionless + const double var_rapid_activating_delayed_rectifiyer_K_current_X_kr_gate__K21 = exp(-7.6769999999999996 - 0.012800000000000001 * var_chaste_interface__membrane__V); // dimensionless + const double var_rapid_activating_delayed_rectifiyer_K_current_X_kr_gate__X_kr_inf = var_rapid_activating_delayed_rectifiyer_K_current_X_kr_gate__K12 / (var_rapid_activating_delayed_rectifiyer_K_current_X_kr_gate__K12 + var_rapid_activating_delayed_rectifiyer_K_current_X_kr_gate__K21); // dimensionless + const double var_rapid_activating_delayed_rectifiyer_K_current_X_kr_gate__tau_factor = 1.0; // dimensionless + const double var_rapid_activating_delayed_rectifiyer_K_current_X_kr_gate__tau_X_kr = 0.001 / (var_rapid_activating_delayed_rectifiyer_K_current_X_kr_gate__K12 + var_rapid_activating_delayed_rectifiyer_K_current_X_kr_gate__K21) + 0.027 * var_rapid_activating_delayed_rectifiyer_K_current_X_kr_gate__tau_factor; // second + const double var_rapid_activating_delayed_rectifiyer_K_current_X_kr_gate__X_kr_orig_deriv = (-var_chaste_interface__rapid_activating_delayed_rectifiyer_K_current_X_kr_gate__X_kr + var_rapid_activating_delayed_rectifiyer_K_current_X_kr_gate__X_kr_inf) / var_rapid_activating_delayed_rectifiyer_K_current_X_kr_gate__tau_X_kr; // 1 / second + const double d_dt_chaste_interface_var_rapid_activating_delayed_rectifiyer_K_current_X_kr_gate__X_kr = 0.001 * var_rapid_activating_delayed_rectifiyer_K_current_X_kr_gate__X_kr_orig_deriv; // 1 / millisecond + + return d_dt_chaste_interface_var_rapid_activating_delayed_rectifiyer_K_current_X_kr_gate__X_kr; + } + + double Dynamicwinslow_model_1999FromCellMLGRL2Opt::EvaluatePartialDerivative4(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -96.1638 + + const double var_x108 = exp(-7.6769999999999996 - 0.012800000000000001 * var_chaste_interface__membrane__V); + const double var_x109 = exp(-5.4950000000000001 + 0.1691 * var_chaste_interface__membrane__V); + const double var_x110 = var_x108 + var_x109; + const double var_x111 = 1 / var_x110; + const double var_x114 = 0.001 / (0.027 + 0.001 * var_x111); + + partialF = -var_x114; + } + else + { + const double y_save = rY[4]; + rY[4] += delta; + const double temp = EvaluateYDerivative4(var_chaste_interface__environment__time_converted, rY); + partialF = (temp-mEvalF[4])/delta; + rY[4] = y_save; + } + return partialF; + } + double Dynamicwinslow_model_1999FromCellMLGRL2Opt::EvaluateYDerivative5(double var_chaste_interface__environment__time_converted, std::vector& rY) + { + + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -96.1638 + double var_chaste_interface__slow_activating_delayed_rectifiyer_K_current_X_ks_gate__X_ks = rY[5]; + // Units: dimensionless; Initial value: 0.264 + + + // Mathematics + const double var_slow_activating_delayed_rectifiyer_K_current_X_ks_gate__X_ks_infinity = 1.0 / (1.0 + exp(1.8161764705882353 - 0.073529411764705885 * var_chaste_interface__membrane__V)); // dimensionless + const double var_slow_activating_delayed_rectifiyer_K_current_X_ks_gate__tau_X_ks = 0.001 / (0.00013100000000000001 * (-10.0 + var_chaste_interface__membrane__V) / (-1.0 + exp(-0.68699999999999994 + 0.068699999999999997 * var_chaste_interface__membrane__V)) + 7.1899999999999999e-5 * (-10.0 + var_chaste_interface__membrane__V) / (1.0 - exp(1.48 - 0.14799999999999999 * var_chaste_interface__membrane__V))); // second + const double var_slow_activating_delayed_rectifiyer_K_current_X_ks_gate__X_ks_orig_deriv = (-var_chaste_interface__slow_activating_delayed_rectifiyer_K_current_X_ks_gate__X_ks + var_slow_activating_delayed_rectifiyer_K_current_X_ks_gate__X_ks_infinity) / var_slow_activating_delayed_rectifiyer_K_current_X_ks_gate__tau_X_ks; // 1 / second + const double d_dt_chaste_interface_var_slow_activating_delayed_rectifiyer_K_current_X_ks_gate__X_ks = 0.001 * var_slow_activating_delayed_rectifiyer_K_current_X_ks_gate__X_ks_orig_deriv; // 1 / millisecond + + return d_dt_chaste_interface_var_slow_activating_delayed_rectifiyer_K_current_X_ks_gate__X_ks; + } + + double Dynamicwinslow_model_1999FromCellMLGRL2Opt::EvaluatePartialDerivative5(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -96.1638 + + const double var_x117 = exp(-0.68699999999999994 + 0.068699999999999997 * var_chaste_interface__membrane__V); + const double var_x118 = -1.0 + var_x117; + const double var_x119 = 1 / var_x118; + const double var_x121 = exp(1.48 - 0.14799999999999999 * var_chaste_interface__membrane__V); + const double var_x122 = 1.0 - var_x121; + const double var_x123 = 1 / var_x122; + const double var_x125 = -10.0 + var_chaste_interface__membrane__V; + + partialF = -0.00013100000000000001 * var_x119 * var_x125 - 7.1899999999999999e-5 * var_x123 * var_x125; + } + else + { + const double y_save = rY[5]; + rY[5] += delta; + const double temp = EvaluateYDerivative5(var_chaste_interface__environment__time_converted, rY); + partialF = (temp-mEvalF[5])/delta; + rY[5] = y_save; + } + return partialF; + } + double Dynamicwinslow_model_1999FromCellMLGRL2Opt::EvaluateYDerivative6(double var_chaste_interface__environment__time_converted, std::vector& rY) + { + + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -96.1638 + double var_chaste_interface__transient_outward_potassium_current_X_to1_gate__X_to1 = rY[6]; + // Units: dimensionless; Initial value: 2.63 + + + // Mathematics + const double var_transient_outward_potassium_current_X_to1_gate__alpha_X_to1 = 45.159999999999997 * exp(0.035770000000000003 * var_chaste_interface__membrane__V); // per_second + const double var_transient_outward_potassium_current_X_to1_gate__beta_X_to1 = 98.900000000000006 * exp(-0.062370000000000002 * var_chaste_interface__membrane__V); // per_second + const double var_transient_outward_potassium_current_X_to1_gate__X_to1_orig_deriv = (1.0 - var_chaste_interface__transient_outward_potassium_current_X_to1_gate__X_to1) * var_transient_outward_potassium_current_X_to1_gate__alpha_X_to1 - var_chaste_interface__transient_outward_potassium_current_X_to1_gate__X_to1 * var_transient_outward_potassium_current_X_to1_gate__beta_X_to1; // 1 / second + const double d_dt_chaste_interface_var_transient_outward_potassium_current_X_to1_gate__X_to1 = 0.001 * var_transient_outward_potassium_current_X_to1_gate__X_to1_orig_deriv; // 1 / millisecond + + return d_dt_chaste_interface_var_transient_outward_potassium_current_X_to1_gate__X_to1; + } + + double Dynamicwinslow_model_1999FromCellMLGRL2Opt::EvaluatePartialDerivative6(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -96.1638 + + const double var_x126 = exp(0.035770000000000003 * var_chaste_interface__membrane__V); + const double var_x127 = exp(-0.062370000000000002 * var_chaste_interface__membrane__V); + + partialF = -0.045159999999999999 * var_x126 - 0.098900000000000002 * var_x127; + } + else + { + const double y_save = rY[6]; + rY[6] += delta; + const double temp = EvaluateYDerivative6(var_chaste_interface__environment__time_converted, rY); + partialF = (temp-mEvalF[6])/delta; + rY[6] = y_save; + } + return partialF; + } + double Dynamicwinslow_model_1999FromCellMLGRL2Opt::EvaluateYDerivative7(double var_chaste_interface__environment__time_converted, std::vector& rY) + { + + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -96.1638 + double var_chaste_interface__transient_outward_potassium_current_Y_to1_gate__Y_to1 = rY[7]; + // Units: dimensionless; Initial value: 0.99 + + + // Mathematics + const double var_transient_outward_potassium_current_Y_to1_gate__alpha_Y_to1 = 5.415 * exp(-6.7000000000000002 - 0.20000000000000001 * var_chaste_interface__membrane__V) / (1.0 + 0.051334999999999999 * exp(-6.7000000000000002 - 0.20000000000000001 * var_chaste_interface__membrane__V)); // per_second + const double var_transient_outward_potassium_current_Y_to1_gate__beta_Y_to1 = 5.415 * exp(6.7000000000000002 + 0.20000000000000001 * var_chaste_interface__membrane__V) / (1.0 + 0.051334999999999999 * exp(6.7000000000000002 + 0.20000000000000001 * var_chaste_interface__membrane__V)); // per_second + const double var_transient_outward_potassium_current_Y_to1_gate__Y_to1_orig_deriv = (1.0 - var_chaste_interface__transient_outward_potassium_current_Y_to1_gate__Y_to1) * var_transient_outward_potassium_current_Y_to1_gate__alpha_Y_to1 - var_chaste_interface__transient_outward_potassium_current_Y_to1_gate__Y_to1 * var_transient_outward_potassium_current_Y_to1_gate__beta_Y_to1; // 1 / second + const double d_dt_chaste_interface_var_transient_outward_potassium_current_Y_to1_gate__Y_to1 = 0.001 * var_transient_outward_potassium_current_Y_to1_gate__Y_to1_orig_deriv; // 1 / millisecond + + return d_dt_chaste_interface_var_transient_outward_potassium_current_Y_to1_gate__Y_to1; + } + + double Dynamicwinslow_model_1999FromCellMLGRL2Opt::EvaluatePartialDerivative7(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -96.1638 + + const double var_x128 = 0.20000000000000001 * var_chaste_interface__membrane__V; + const double var_x129 = exp(6.7000000000000002 + var_x128); + const double var_x130 = 1.0 + 0.051334999999999999 * var_x129; + const double var_x131 = exp(-6.7000000000000002 - var_x128); + const double var_x132 = 1.0 + 0.051334999999999999 * var_x131; + const double var_x134 = var_x129 / var_x130; + const double var_x135 = var_x131 / var_x132; + + partialF = -0.0054149999999999997 * var_x134 - 0.0054149999999999997 * var_x135; + } + else + { + const double y_save = rY[7]; + rY[7] += delta; + const double temp = EvaluateYDerivative7(var_chaste_interface__environment__time_converted, rY); + partialF = (temp-mEvalF[7])/delta; + rY[7] = y_save; + } + return partialF; + } + double Dynamicwinslow_model_1999FromCellMLGRL2Opt::EvaluateYDerivative8(double var_chaste_interface__environment__time_converted, std::vector& rY) + { + + double var_chaste_interface__L_type_Ca_current__O = rY[8]; + // Units: dimensionless; Initial value: 9.84546e-21 + double var_chaste_interface__L_type_Ca_current__C4 = rY[14]; + // Units: dimensionless; Initial value: 6.56337e-20 + + + // Mathematics + const double var_L_type_Ca_current__f = 300.0; // per_second + const double var_L_type_Ca_current__g = 2000.0; // per_second + const double var_L_type_Ca_current__O_orig_deriv = var_chaste_interface__L_type_Ca_current__C4 * var_L_type_Ca_current__f - var_chaste_interface__L_type_Ca_current__O * var_L_type_Ca_current__g; // 1 / second + const double d_dt_chaste_interface_var_L_type_Ca_current__O = 0.001 * var_L_type_Ca_current__O_orig_deriv; // 1 / millisecond + + return d_dt_chaste_interface_var_L_type_Ca_current__O; + } + + double Dynamicwinslow_model_1999FromCellMLGRL2Opt::EvaluatePartialDerivative8(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + + + partialF = -2.0; + } + else + { + const double y_save = rY[8]; + rY[8] += delta; + const double temp = EvaluateYDerivative8(var_chaste_interface__environment__time_converted, rY); + partialF = (temp-mEvalF[8])/delta; + rY[8] = y_save; + } + return partialF; + } + double Dynamicwinslow_model_1999FromCellMLGRL2Opt::EvaluateYDerivative9(double var_chaste_interface__environment__time_converted, std::vector& rY) + { + + double var_chaste_interface__L_type_Ca_current__O_Ca = rY[9]; + // Units: dimensionless; Initial value: 0.0 + double var_chaste_interface__L_type_Ca_current__C_Ca4 = rY[19]; + // Units: dimensionless; Initial value: 4.59752e-20 + + + // Mathematics + const double var_L_type_Ca_current__fprime = 7.0; // per_second + const double var_L_type_Ca_current__gprime = 7000.0; // per_second + const double var_L_type_Ca_current__O_Ca_orig_deriv = var_chaste_interface__L_type_Ca_current__C_Ca4 * var_L_type_Ca_current__fprime - var_chaste_interface__L_type_Ca_current__O_Ca * var_L_type_Ca_current__gprime; // 1 / second + const double d_dt_chaste_interface_var_L_type_Ca_current__O_Ca = 0.001 * var_L_type_Ca_current__O_Ca_orig_deriv; // 1 / millisecond + + return d_dt_chaste_interface_var_L_type_Ca_current__O_Ca; + } + + double Dynamicwinslow_model_1999FromCellMLGRL2Opt::EvaluatePartialDerivative9(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + + + partialF = -7.0; + } + else + { + const double y_save = rY[9]; + rY[9] += delta; + const double temp = EvaluateYDerivative9(var_chaste_interface__environment__time_converted, rY); + partialF = (temp-mEvalF[9])/delta; + rY[9] = y_save; + } + return partialF; + } + double Dynamicwinslow_model_1999FromCellMLGRL2Opt::EvaluateYDerivative10(double var_chaste_interface__environment__time_converted, std::vector& rY) + { + + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -96.1638 + double var_chaste_interface__L_type_Ca_current__C0 = rY[10]; + // Units: dimensionless; Initial value: 0.997208 + double var_chaste_interface__L_type_Ca_current__C1 = rY[11]; + // Units: dimensionless; Initial value: 6.38897e-05 + double var_chaste_interface__L_type_Ca_current__C_Ca0 = rY[15]; + // Units: dimensionless; Initial value: 0.00272826 + double var_chaste_interface__intracellular_ion_concentrations__Ca_ss = rY[30]; + // Units: millimolar; Initial value: 0.00011 + + + // Mathematics + const double var_L_type_Ca_current__omega = 10.0; // per_second + const double var_L_type_Ca_current__gamma = 103.75 * var_chaste_interface__intracellular_ion_concentrations__Ca_ss; // per_second + const double var_L_type_Ca_current__alpha = 400.0 * exp(0.20000000000000001 + 0.10000000000000001 * var_chaste_interface__membrane__V); // per_second + const double var_L_type_Ca_current__beta = 50.0 * exp(-0.15384615384615385 - 0.076923076923076927 * var_chaste_interface__membrane__V); // per_second + const double var_L_type_Ca_current__C0_orig_deriv = var_chaste_interface__L_type_Ca_current__C1 * var_L_type_Ca_current__beta + var_chaste_interface__L_type_Ca_current__C_Ca0 * var_L_type_Ca_current__omega - (4.0 * var_L_type_Ca_current__alpha + var_L_type_Ca_current__gamma) * var_chaste_interface__L_type_Ca_current__C0; // 1 / second + const double d_dt_chaste_interface_var_L_type_Ca_current__C0 = 0.001 * var_L_type_Ca_current__C0_orig_deriv; // 1 / millisecond + + return d_dt_chaste_interface_var_L_type_Ca_current__C0; + } + + double Dynamicwinslow_model_1999FromCellMLGRL2Opt::EvaluatePartialDerivative10(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -96.1638 + double var_chaste_interface__intracellular_ion_concentrations__Ca_ss = rY[30]; + // Units: millimolar; Initial value: 0.00011 + + const double var_x138 = exp(0.20000000000000001 + 0.10000000000000001 * var_chaste_interface__membrane__V); + const double var_x141 = 1.6000000000000001 * var_x138; + const double var_x142 = -var_x141; + const double var_x143 = 0.10375 * var_chaste_interface__intracellular_ion_concentrations__Ca_ss; + + partialF = var_x142 - var_x143; + } + else + { + const double y_save = rY[10]; + rY[10] += delta; + const double temp = EvaluateYDerivative10(var_chaste_interface__environment__time_converted, rY); + partialF = (temp-mEvalF[10])/delta; + rY[10] = y_save; + } + return partialF; + } + double Dynamicwinslow_model_1999FromCellMLGRL2Opt::EvaluateYDerivative11(double var_chaste_interface__environment__time_converted, std::vector& rY) + { + + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -96.1638 + double var_chaste_interface__L_type_Ca_current__C0 = rY[10]; + // Units: dimensionless; Initial value: 0.997208 + double var_chaste_interface__L_type_Ca_current__C1 = rY[11]; + // Units: dimensionless; Initial value: 6.38897e-05 + double var_chaste_interface__L_type_Ca_current__C2 = rY[12]; + // Units: dimensionless; Initial value: 1.535e-09 + double var_chaste_interface__L_type_Ca_current__C_Ca1 = rY[16]; + // Units: dimensionless; Initial value: 6.99215e-07 + double var_chaste_interface__intracellular_ion_concentrations__Ca_ss = rY[30]; + // Units: millimolar; Initial value: 0.00011 + + + // Mathematics + const double var_L_type_Ca_current__a = 2.0; // dimensionless + const double var_L_type_Ca_current__b = 2.0; // dimensionless + const double var_L_type_Ca_current__omega = 10.0; // per_second + const double var_L_type_Ca_current__gamma = 103.75 * var_chaste_interface__intracellular_ion_concentrations__Ca_ss; // per_second + const double var_L_type_Ca_current__alpha = 400.0 * exp(0.20000000000000001 + 0.10000000000000001 * var_chaste_interface__membrane__V); // per_second + const double var_L_type_Ca_current__beta = 50.0 * exp(-0.15384615384615385 - 0.076923076923076927 * var_chaste_interface__membrane__V); // per_second + const double var_L_type_Ca_current__C1_orig_deriv = -(3.0 * var_L_type_Ca_current__alpha + var_L_type_Ca_current__a * var_L_type_Ca_current__gamma + var_L_type_Ca_current__beta) * var_chaste_interface__L_type_Ca_current__C1 + 2.0 * var_chaste_interface__L_type_Ca_current__C2 * var_L_type_Ca_current__beta + 4.0 * var_chaste_interface__L_type_Ca_current__C0 * var_L_type_Ca_current__alpha + var_chaste_interface__L_type_Ca_current__C_Ca1 * var_L_type_Ca_current__omega / var_L_type_Ca_current__b; // 1 / second + const double d_dt_chaste_interface_var_L_type_Ca_current__C1 = 0.001 * var_L_type_Ca_current__C1_orig_deriv; // 1 / millisecond + + return d_dt_chaste_interface_var_L_type_Ca_current__C1; + } + + double Dynamicwinslow_model_1999FromCellMLGRL2Opt::EvaluatePartialDerivative11(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -96.1638 + double var_chaste_interface__intracellular_ion_concentrations__Ca_ss = rY[30]; + // Units: millimolar; Initial value: 0.00011 + + const double var_x136 = exp(-0.15384615384615385 - 0.076923076923076927 * var_chaste_interface__membrane__V); + const double var_x138 = exp(0.20000000000000001 + 0.10000000000000001 * var_chaste_interface__membrane__V); + const double var_x144 = 0.050000000000000003 * var_x136; + const double var_x148 = 1.2 * var_x138; + const double var_x149 = -var_x144; + const double var_x150 = 0.20749999999999999 * var_chaste_interface__intracellular_ion_concentrations__Ca_ss; + + partialF = var_x149 - var_x148 - var_x150; + } + else + { + const double y_save = rY[11]; + rY[11] += delta; + const double temp = EvaluateYDerivative11(var_chaste_interface__environment__time_converted, rY); + partialF = (temp-mEvalF[11])/delta; + rY[11] = y_save; + } + return partialF; + } + double Dynamicwinslow_model_1999FromCellMLGRL2Opt::EvaluateYDerivative12(double var_chaste_interface__environment__time_converted, std::vector& rY) + { + + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -96.1638 + double var_chaste_interface__L_type_Ca_current__C1 = rY[11]; + // Units: dimensionless; Initial value: 6.38897e-05 + double var_chaste_interface__L_type_Ca_current__C2 = rY[12]; + // Units: dimensionless; Initial value: 1.535e-09 + double var_chaste_interface__L_type_Ca_current__C3 = rY[13]; + // Units: dimensionless; Initial value: 1.63909e-14 + double var_chaste_interface__L_type_Ca_current__C_Ca2 = rY[17]; + // Units: dimensionless; Initial value: 6.71989e-11 + double var_chaste_interface__intracellular_ion_concentrations__Ca_ss = rY[30]; + // Units: millimolar; Initial value: 0.00011 + + + // Mathematics + const double var_L_type_Ca_current__a = 2.0; // dimensionless + const double var_L_type_Ca_current__b = 2.0; // dimensionless + const double var_L_type_Ca_current__omega = 10.0; // per_second + const double var_L_type_Ca_current__gamma = 103.75 * var_chaste_interface__intracellular_ion_concentrations__Ca_ss; // per_second + const double var_L_type_Ca_current__alpha = 400.0 * exp(0.20000000000000001 + 0.10000000000000001 * var_chaste_interface__membrane__V); // per_second + const double var_L_type_Ca_current__beta = 50.0 * exp(-0.15384615384615385 - 0.076923076923076927 * var_chaste_interface__membrane__V); // per_second + const double var_L_type_Ca_current__C2_orig_deriv = -(2.0 * var_L_type_Ca_current__alpha + 2.0 * var_L_type_Ca_current__beta + pow(var_L_type_Ca_current__a, 2) * var_L_type_Ca_current__gamma) * var_chaste_interface__L_type_Ca_current__C2 + 3.0 * var_chaste_interface__L_type_Ca_current__C1 * var_L_type_Ca_current__alpha + 3.0 * var_chaste_interface__L_type_Ca_current__C3 * var_L_type_Ca_current__beta + var_chaste_interface__L_type_Ca_current__C_Ca2 * var_L_type_Ca_current__omega / pow(var_L_type_Ca_current__b, 2); // 1 / second + const double d_dt_chaste_interface_var_L_type_Ca_current__C2 = 0.001 * var_L_type_Ca_current__C2_orig_deriv; // 1 / millisecond + + return d_dt_chaste_interface_var_L_type_Ca_current__C2; + } + + double Dynamicwinslow_model_1999FromCellMLGRL2Opt::EvaluatePartialDerivative12(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -96.1638 + double var_chaste_interface__intracellular_ion_concentrations__Ca_ss = rY[30]; + // Units: millimolar; Initial value: 0.00011 + + const double var_x136 = exp(-0.15384615384615385 - 0.076923076923076927 * var_chaste_interface__membrane__V); + const double var_x138 = exp(0.20000000000000001 + 0.10000000000000001 * var_chaste_interface__membrane__V); + const double var_x151 = 0.10000000000000001 * var_x136; + const double var_x155 = -var_x151; + const double var_x156 = 0.80000000000000004 * var_x138; + const double var_x157 = -var_x156; + const double var_x158 = 0.41499999999999998 * var_chaste_interface__intracellular_ion_concentrations__Ca_ss; + + partialF = var_x155 + var_x157 - var_x158; + } + else + { + const double y_save = rY[12]; + rY[12] += delta; + const double temp = EvaluateYDerivative12(var_chaste_interface__environment__time_converted, rY); + partialF = (temp-mEvalF[12])/delta; + rY[12] = y_save; + } + return partialF; + } + double Dynamicwinslow_model_1999FromCellMLGRL2Opt::EvaluateYDerivative13(double var_chaste_interface__environment__time_converted, std::vector& rY) + { + + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -96.1638 + double var_chaste_interface__L_type_Ca_current__C2 = rY[12]; + // Units: dimensionless; Initial value: 1.535e-09 + double var_chaste_interface__L_type_Ca_current__C3 = rY[13]; + // Units: dimensionless; Initial value: 1.63909e-14 + double var_chaste_interface__L_type_Ca_current__C4 = rY[14]; + // Units: dimensionless; Initial value: 6.56337e-20 + double var_chaste_interface__L_type_Ca_current__C_Ca3 = rY[18]; + // Units: dimensionless; Initial value: 2.87031e-15 + double var_chaste_interface__intracellular_ion_concentrations__Ca_ss = rY[30]; + // Units: millimolar; Initial value: 0.00011 + + + // Mathematics + const double var_L_type_Ca_current__a = 2.0; // dimensionless + const double var_L_type_Ca_current__b = 2.0; // dimensionless + const double var_L_type_Ca_current__omega = 10.0; // per_second + const double var_L_type_Ca_current__gamma = 103.75 * var_chaste_interface__intracellular_ion_concentrations__Ca_ss; // per_second + const double var_L_type_Ca_current__alpha = 400.0 * exp(0.20000000000000001 + 0.10000000000000001 * var_chaste_interface__membrane__V); // per_second + const double var_L_type_Ca_current__beta = 50.0 * exp(-0.15384615384615385 - 0.076923076923076927 * var_chaste_interface__membrane__V); // per_second + const double var_L_type_Ca_current__C3_orig_deriv = -(3.0 * var_L_type_Ca_current__beta + pow(var_L_type_Ca_current__a, 3) * var_L_type_Ca_current__gamma + var_L_type_Ca_current__alpha) * var_chaste_interface__L_type_Ca_current__C3 + 2.0 * var_chaste_interface__L_type_Ca_current__C2 * var_L_type_Ca_current__alpha + 4.0 * var_chaste_interface__L_type_Ca_current__C4 * var_L_type_Ca_current__beta + var_chaste_interface__L_type_Ca_current__C_Ca3 * var_L_type_Ca_current__omega / pow(var_L_type_Ca_current__b, 3); // 1 / second + const double d_dt_chaste_interface_var_L_type_Ca_current__C3 = 0.001 * var_L_type_Ca_current__C3_orig_deriv; // 1 / millisecond + + return d_dt_chaste_interface_var_L_type_Ca_current__C3; + } + + double Dynamicwinslow_model_1999FromCellMLGRL2Opt::EvaluatePartialDerivative13(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -96.1638 + double var_chaste_interface__intracellular_ion_concentrations__Ca_ss = rY[30]; + // Units: millimolar; Initial value: 0.00011 + + const double var_x136 = exp(-0.15384615384615385 - 0.076923076923076927 * var_chaste_interface__membrane__V); + const double var_x138 = exp(0.20000000000000001 + 0.10000000000000001 * var_chaste_interface__membrane__V); + const double var_x159 = 0.14999999999999999 * var_x136; + const double var_x163 = 0.40000000000000002 * var_x138; + const double var_x164 = 0.82999999999999996 * var_chaste_interface__intracellular_ion_concentrations__Ca_ss; + + partialF = -var_x159 - var_x163 - var_x164; + } + else + { + const double y_save = rY[13]; + rY[13] += delta; + const double temp = EvaluateYDerivative13(var_chaste_interface__environment__time_converted, rY); + partialF = (temp-mEvalF[13])/delta; + rY[13] = y_save; + } + return partialF; + } + double Dynamicwinslow_model_1999FromCellMLGRL2Opt::EvaluateYDerivative14(double var_chaste_interface__environment__time_converted, std::vector& rY) + { + + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -96.1638 + double var_chaste_interface__L_type_Ca_current__O = rY[8]; + // Units: dimensionless; Initial value: 9.84546e-21 + double var_chaste_interface__L_type_Ca_current__C3 = rY[13]; + // Units: dimensionless; Initial value: 1.63909e-14 + double var_chaste_interface__L_type_Ca_current__C4 = rY[14]; + // Units: dimensionless; Initial value: 6.56337e-20 + double var_chaste_interface__L_type_Ca_current__C_Ca4 = rY[19]; + // Units: dimensionless; Initial value: 4.59752e-20 + double var_chaste_interface__intracellular_ion_concentrations__Ca_ss = rY[30]; + // Units: millimolar; Initial value: 0.00011 + + + // Mathematics + const double var_L_type_Ca_current__a = 2.0; // dimensionless + const double var_L_type_Ca_current__b = 2.0; // dimensionless + const double var_L_type_Ca_current__f = 300.0; // per_second + const double var_L_type_Ca_current__g = 2000.0; // per_second + const double var_L_type_Ca_current__omega = 10.0; // per_second + const double var_L_type_Ca_current__gamma = 103.75 * var_chaste_interface__intracellular_ion_concentrations__Ca_ss; // per_second + const double var_L_type_Ca_current__alpha = 400.0 * exp(0.20000000000000001 + 0.10000000000000001 * var_chaste_interface__membrane__V); // per_second + const double var_L_type_Ca_current__beta = 50.0 * exp(-0.15384615384615385 - 0.076923076923076927 * var_chaste_interface__membrane__V); // per_second + const double var_L_type_Ca_current__C4_orig_deriv = var_chaste_interface__L_type_Ca_current__C3 * var_L_type_Ca_current__alpha + var_chaste_interface__L_type_Ca_current__O * var_L_type_Ca_current__g - (4.0 * var_L_type_Ca_current__beta + pow(var_L_type_Ca_current__a, 4) * var_L_type_Ca_current__gamma + var_L_type_Ca_current__f) * var_chaste_interface__L_type_Ca_current__C4 + var_chaste_interface__L_type_Ca_current__C_Ca4 * var_L_type_Ca_current__omega / pow(var_L_type_Ca_current__b, 4); // 1 / second + const double d_dt_chaste_interface_var_L_type_Ca_current__C4 = 0.001 * var_L_type_Ca_current__C4_orig_deriv; // 1 / millisecond + + return d_dt_chaste_interface_var_L_type_Ca_current__C4; + } + + double Dynamicwinslow_model_1999FromCellMLGRL2Opt::EvaluatePartialDerivative14(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -96.1638 + double var_chaste_interface__intracellular_ion_concentrations__Ca_ss = rY[30]; + // Units: millimolar; Initial value: 0.00011 + + const double var_x136 = exp(-0.15384615384615385 - 0.076923076923076927 * var_chaste_interface__membrane__V); + const double var_x165 = 0.20000000000000001 * var_x136; + const double var_x167 = 1.6599999999999999 * var_chaste_interface__intracellular_ion_concentrations__Ca_ss; + + partialF = -0.29999999999999999 - var_x165 - var_x167; + } + else + { + const double y_save = rY[14]; + rY[14] += delta; + const double temp = EvaluateYDerivative14(var_chaste_interface__environment__time_converted, rY); + partialF = (temp-mEvalF[14])/delta; + rY[14] = y_save; + } + return partialF; + } + double Dynamicwinslow_model_1999FromCellMLGRL2Opt::EvaluateYDerivative15(double var_chaste_interface__environment__time_converted, std::vector& rY) + { + + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -96.1638 + double var_chaste_interface__L_type_Ca_current__C0 = rY[10]; + // Units: dimensionless; Initial value: 0.997208 + double var_chaste_interface__L_type_Ca_current__C_Ca0 = rY[15]; + // Units: dimensionless; Initial value: 0.00272826 + double var_chaste_interface__L_type_Ca_current__C_Ca1 = rY[16]; + // Units: dimensionless; Initial value: 6.99215e-07 + double var_chaste_interface__intracellular_ion_concentrations__Ca_ss = rY[30]; + // Units: millimolar; Initial value: 0.00011 + + + // Mathematics + const double var_L_type_Ca_current__a = 2.0; // dimensionless + const double var_L_type_Ca_current__b = 2.0; // dimensionless + const double var_L_type_Ca_current__omega = 10.0; // per_second + const double var_L_type_Ca_current__gamma = 103.75 * var_chaste_interface__intracellular_ion_concentrations__Ca_ss; // per_second + const double var_L_type_Ca_current__alpha = 400.0 * exp(0.20000000000000001 + 0.10000000000000001 * var_chaste_interface__membrane__V); // per_second + const double var_L_type_Ca_current__alpha_a = var_L_type_Ca_current__a * var_L_type_Ca_current__alpha; // per_second + const double var_L_type_Ca_current__beta = 50.0 * exp(-0.15384615384615385 - 0.076923076923076927 * var_chaste_interface__membrane__V); // per_second + const double var_L_type_Ca_current__beta_b = var_L_type_Ca_current__beta / var_L_type_Ca_current__b; // per_second + const double var_L_type_Ca_current__C_Ca0_orig_deriv = var_chaste_interface__L_type_Ca_current__C0 * var_L_type_Ca_current__gamma + var_chaste_interface__L_type_Ca_current__C_Ca1 * var_L_type_Ca_current__beta_b - (4.0 * var_L_type_Ca_current__alpha_a + var_L_type_Ca_current__omega) * var_chaste_interface__L_type_Ca_current__C_Ca0; // 1 / second + const double d_dt_chaste_interface_var_L_type_Ca_current__C_Ca0 = 0.001 * var_L_type_Ca_current__C_Ca0_orig_deriv; // 1 / millisecond + + return d_dt_chaste_interface_var_L_type_Ca_current__C_Ca0; + } + + double Dynamicwinslow_model_1999FromCellMLGRL2Opt::EvaluatePartialDerivative15(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -96.1638 + + const double var_x138 = exp(0.20000000000000001 + 0.10000000000000001 * var_chaste_interface__membrane__V); + const double var_x171 = 3.2000000000000002 * var_x138; + + partialF = -0.01 - var_x171; + } + else + { + const double y_save = rY[15]; + rY[15] += delta; + const double temp = EvaluateYDerivative15(var_chaste_interface__environment__time_converted, rY); + partialF = (temp-mEvalF[15])/delta; + rY[15] = y_save; + } + return partialF; + } + double Dynamicwinslow_model_1999FromCellMLGRL2Opt::EvaluateYDerivative16(double var_chaste_interface__environment__time_converted, std::vector& rY) + { + + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -96.1638 + double var_chaste_interface__L_type_Ca_current__C1 = rY[11]; + // Units: dimensionless; Initial value: 6.38897e-05 + double var_chaste_interface__L_type_Ca_current__C_Ca0 = rY[15]; + // Units: dimensionless; Initial value: 0.00272826 + double var_chaste_interface__L_type_Ca_current__C_Ca1 = rY[16]; + // Units: dimensionless; Initial value: 6.99215e-07 + double var_chaste_interface__L_type_Ca_current__C_Ca2 = rY[17]; + // Units: dimensionless; Initial value: 6.71989e-11 + double var_chaste_interface__intracellular_ion_concentrations__Ca_ss = rY[30]; + // Units: millimolar; Initial value: 0.00011 + + + // Mathematics + const double var_L_type_Ca_current__a = 2.0; // dimensionless + const double var_L_type_Ca_current__b = 2.0; // dimensionless + const double var_L_type_Ca_current__omega = 10.0; // per_second + const double var_L_type_Ca_current__gamma = 103.75 * var_chaste_interface__intracellular_ion_concentrations__Ca_ss; // per_second + const double var_L_type_Ca_current__alpha = 400.0 * exp(0.20000000000000001 + 0.10000000000000001 * var_chaste_interface__membrane__V); // per_second + const double var_L_type_Ca_current__alpha_a = var_L_type_Ca_current__a * var_L_type_Ca_current__alpha; // per_second + const double var_L_type_Ca_current__beta = 50.0 * exp(-0.15384615384615385 - 0.076923076923076927 * var_chaste_interface__membrane__V); // per_second + const double var_L_type_Ca_current__beta_b = var_L_type_Ca_current__beta / var_L_type_Ca_current__b; // per_second + const double var_L_type_Ca_current__C_Ca1_orig_deriv = -(3.0 * var_L_type_Ca_current__alpha_a + var_L_type_Ca_current__omega / var_L_type_Ca_current__b + var_L_type_Ca_current__beta_b) * var_chaste_interface__L_type_Ca_current__C_Ca1 + 2.0 * var_chaste_interface__L_type_Ca_current__C_Ca2 * var_L_type_Ca_current__beta_b + 4.0 * var_chaste_interface__L_type_Ca_current__C_Ca0 * var_L_type_Ca_current__alpha_a + var_chaste_interface__L_type_Ca_current__C1 * var_L_type_Ca_current__a * var_L_type_Ca_current__gamma; // 1 / second + const double d_dt_chaste_interface_var_L_type_Ca_current__C_Ca1 = 0.001 * var_L_type_Ca_current__C_Ca1_orig_deriv; // 1 / millisecond + + return d_dt_chaste_interface_var_L_type_Ca_current__C_Ca1; + } + + double Dynamicwinslow_model_1999FromCellMLGRL2Opt::EvaluatePartialDerivative16(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -96.1638 + + const double var_x136 = exp(-0.15384615384615385 - 0.076923076923076927 * var_chaste_interface__membrane__V); + const double var_x138 = exp(0.20000000000000001 + 0.10000000000000001 * var_chaste_interface__membrane__V); + const double var_x172 = 0.025000000000000001 * var_x136; + const double var_x174 = 2.3999999999999999 * var_x138; + + partialF = -0.0050000000000000001 - var_x172 - var_x174; + } + else + { + const double y_save = rY[16]; + rY[16] += delta; + const double temp = EvaluateYDerivative16(var_chaste_interface__environment__time_converted, rY); + partialF = (temp-mEvalF[16])/delta; + rY[16] = y_save; + } + return partialF; + } + double Dynamicwinslow_model_1999FromCellMLGRL2Opt::EvaluateYDerivative17(double var_chaste_interface__environment__time_converted, std::vector& rY) + { + + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -96.1638 + double var_chaste_interface__L_type_Ca_current__C2 = rY[12]; + // Units: dimensionless; Initial value: 1.535e-09 + double var_chaste_interface__L_type_Ca_current__C_Ca1 = rY[16]; + // Units: dimensionless; Initial value: 6.99215e-07 + double var_chaste_interface__L_type_Ca_current__C_Ca2 = rY[17]; + // Units: dimensionless; Initial value: 6.71989e-11 + double var_chaste_interface__L_type_Ca_current__C_Ca3 = rY[18]; + // Units: dimensionless; Initial value: 2.87031e-15 + double var_chaste_interface__intracellular_ion_concentrations__Ca_ss = rY[30]; + // Units: millimolar; Initial value: 0.00011 + + + // Mathematics + const double var_L_type_Ca_current__a = 2.0; // dimensionless + const double var_L_type_Ca_current__b = 2.0; // dimensionless + const double var_L_type_Ca_current__omega = 10.0; // per_second + const double var_L_type_Ca_current__gamma = 103.75 * var_chaste_interface__intracellular_ion_concentrations__Ca_ss; // per_second + const double var_L_type_Ca_current__alpha = 400.0 * exp(0.20000000000000001 + 0.10000000000000001 * var_chaste_interface__membrane__V); // per_second + const double var_L_type_Ca_current__alpha_a = var_L_type_Ca_current__a * var_L_type_Ca_current__alpha; // per_second + const double var_L_type_Ca_current__beta = 50.0 * exp(-0.15384615384615385 - 0.076923076923076927 * var_chaste_interface__membrane__V); // per_second + const double var_L_type_Ca_current__beta_b = var_L_type_Ca_current__beta / var_L_type_Ca_current__b; // per_second + const double var_L_type_Ca_current__C_Ca2_orig_deriv = -(2.0 * var_L_type_Ca_current__alpha_a + 2.0 * var_L_type_Ca_current__beta_b + var_L_type_Ca_current__omega / pow(var_L_type_Ca_current__b, 2)) * var_chaste_interface__L_type_Ca_current__C_Ca2 + 3.0 * var_chaste_interface__L_type_Ca_current__C_Ca1 * var_L_type_Ca_current__alpha_a + 3.0 * var_chaste_interface__L_type_Ca_current__C_Ca3 * var_L_type_Ca_current__beta_b + pow(var_L_type_Ca_current__a, 2) * var_chaste_interface__L_type_Ca_current__C2 * var_L_type_Ca_current__gamma; // 1 / second + const double d_dt_chaste_interface_var_L_type_Ca_current__C_Ca2 = 0.001 * var_L_type_Ca_current__C_Ca2_orig_deriv; // 1 / millisecond + + return d_dt_chaste_interface_var_L_type_Ca_current__C_Ca2; + } + + double Dynamicwinslow_model_1999FromCellMLGRL2Opt::EvaluatePartialDerivative17(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -96.1638 + + const double var_x136 = exp(-0.15384615384615385 - 0.076923076923076927 * var_chaste_interface__membrane__V); + const double var_x138 = exp(0.20000000000000001 + 0.10000000000000001 * var_chaste_interface__membrane__V); + const double var_x141 = 1.6000000000000001 * var_x138; + const double var_x142 = -var_x141; + const double var_x144 = 0.050000000000000003 * var_x136; + const double var_x149 = -var_x144; + + partialF = -0.0025000000000000001 + var_x142 + var_x149; + } + else + { + const double y_save = rY[17]; + rY[17] += delta; + const double temp = EvaluateYDerivative17(var_chaste_interface__environment__time_converted, rY); + partialF = (temp-mEvalF[17])/delta; + rY[17] = y_save; + } + return partialF; + } + double Dynamicwinslow_model_1999FromCellMLGRL2Opt::EvaluateYDerivative18(double var_chaste_interface__environment__time_converted, std::vector& rY) + { + + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -96.1638 + double var_chaste_interface__L_type_Ca_current__C3 = rY[13]; + // Units: dimensionless; Initial value: 1.63909e-14 + double var_chaste_interface__L_type_Ca_current__C_Ca2 = rY[17]; + // Units: dimensionless; Initial value: 6.71989e-11 + double var_chaste_interface__L_type_Ca_current__C_Ca3 = rY[18]; + // Units: dimensionless; Initial value: 2.87031e-15 + double var_chaste_interface__L_type_Ca_current__C_Ca4 = rY[19]; + // Units: dimensionless; Initial value: 4.59752e-20 + double var_chaste_interface__intracellular_ion_concentrations__Ca_ss = rY[30]; + // Units: millimolar; Initial value: 0.00011 + + + // Mathematics + const double var_L_type_Ca_current__a = 2.0; // dimensionless + const double var_L_type_Ca_current__b = 2.0; // dimensionless + const double var_L_type_Ca_current__omega = 10.0; // per_second + const double var_L_type_Ca_current__gamma = 103.75 * var_chaste_interface__intracellular_ion_concentrations__Ca_ss; // per_second + const double var_L_type_Ca_current__alpha = 400.0 * exp(0.20000000000000001 + 0.10000000000000001 * var_chaste_interface__membrane__V); // per_second + const double var_L_type_Ca_current__alpha_a = var_L_type_Ca_current__a * var_L_type_Ca_current__alpha; // per_second + const double var_L_type_Ca_current__beta = 50.0 * exp(-0.15384615384615385 - 0.076923076923076927 * var_chaste_interface__membrane__V); // per_second + const double var_L_type_Ca_current__beta_b = var_L_type_Ca_current__beta / var_L_type_Ca_current__b; // per_second + const double var_L_type_Ca_current__C_Ca3_orig_deriv = -(3.0 * var_L_type_Ca_current__beta_b + var_L_type_Ca_current__omega / pow(var_L_type_Ca_current__b, 3) + var_L_type_Ca_current__alpha_a) * var_chaste_interface__L_type_Ca_current__C_Ca3 + 2.0 * var_chaste_interface__L_type_Ca_current__C_Ca2 * var_L_type_Ca_current__alpha_a + 4.0 * var_chaste_interface__L_type_Ca_current__C_Ca4 * var_L_type_Ca_current__beta_b + pow(var_L_type_Ca_current__a, 3) * var_chaste_interface__L_type_Ca_current__C3 * var_L_type_Ca_current__gamma; // 1 / second + const double d_dt_chaste_interface_var_L_type_Ca_current__C_Ca3 = 0.001 * var_L_type_Ca_current__C_Ca3_orig_deriv; // 1 / millisecond + + return d_dt_chaste_interface_var_L_type_Ca_current__C_Ca3; + } + + double Dynamicwinslow_model_1999FromCellMLGRL2Opt::EvaluatePartialDerivative18(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -96.1638 + + const double var_x136 = exp(-0.15384615384615385 - 0.076923076923076927 * var_chaste_interface__membrane__V); + const double var_x138 = exp(0.20000000000000001 + 0.10000000000000001 * var_chaste_interface__membrane__V); + const double var_x156 = 0.80000000000000004 * var_x138; + const double var_x157 = -var_x156; + const double var_x175 = 0.074999999999999997 * var_x136; + + partialF = -0.00125 + var_x157 - var_x175; + } + else + { + const double y_save = rY[18]; + rY[18] += delta; + const double temp = EvaluateYDerivative18(var_chaste_interface__environment__time_converted, rY); + partialF = (temp-mEvalF[18])/delta; + rY[18] = y_save; + } + return partialF; + } + double Dynamicwinslow_model_1999FromCellMLGRL2Opt::EvaluateYDerivative19(double var_chaste_interface__environment__time_converted, std::vector& rY) + { + + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -96.1638 + double var_chaste_interface__L_type_Ca_current__O_Ca = rY[9]; + // Units: dimensionless; Initial value: 0.0 + double var_chaste_interface__L_type_Ca_current__C4 = rY[14]; + // Units: dimensionless; Initial value: 6.56337e-20 + double var_chaste_interface__L_type_Ca_current__C_Ca3 = rY[18]; + // Units: dimensionless; Initial value: 2.87031e-15 + double var_chaste_interface__L_type_Ca_current__C_Ca4 = rY[19]; + // Units: dimensionless; Initial value: 4.59752e-20 + double var_chaste_interface__intracellular_ion_concentrations__Ca_ss = rY[30]; + // Units: millimolar; Initial value: 0.00011 + + + // Mathematics + const double var_L_type_Ca_current__a = 2.0; // dimensionless + const double var_L_type_Ca_current__b = 2.0; // dimensionless + const double var_L_type_Ca_current__fprime = 7.0; // per_second + const double var_L_type_Ca_current__gprime = 7000.0; // per_second + const double var_L_type_Ca_current__omega = 10.0; // per_second + const double var_L_type_Ca_current__gamma = 103.75 * var_chaste_interface__intracellular_ion_concentrations__Ca_ss; // per_second + const double var_L_type_Ca_current__alpha = 400.0 * exp(0.20000000000000001 + 0.10000000000000001 * var_chaste_interface__membrane__V); // per_second + const double var_L_type_Ca_current__alpha_a = var_L_type_Ca_current__a * var_L_type_Ca_current__alpha; // per_second + const double var_L_type_Ca_current__beta = 50.0 * exp(-0.15384615384615385 - 0.076923076923076927 * var_chaste_interface__membrane__V); // per_second + const double var_L_type_Ca_current__beta_b = var_L_type_Ca_current__beta / var_L_type_Ca_current__b; // per_second + const double var_L_type_Ca_current__C_Ca4_orig_deriv = var_chaste_interface__L_type_Ca_current__C_Ca3 * var_L_type_Ca_current__alpha_a + var_chaste_interface__L_type_Ca_current__O_Ca * var_L_type_Ca_current__gprime - (4.0 * var_L_type_Ca_current__beta_b + var_L_type_Ca_current__omega / pow(var_L_type_Ca_current__b, 4) + var_L_type_Ca_current__fprime) * var_chaste_interface__L_type_Ca_current__C_Ca4 + pow(var_L_type_Ca_current__a, 4) * var_chaste_interface__L_type_Ca_current__C4 * var_L_type_Ca_current__gamma; // 1 / second + const double d_dt_chaste_interface_var_L_type_Ca_current__C_Ca4 = 0.001 * var_L_type_Ca_current__C_Ca4_orig_deriv; // 1 / millisecond + + return d_dt_chaste_interface_var_L_type_Ca_current__C_Ca4; + } + + double Dynamicwinslow_model_1999FromCellMLGRL2Opt::EvaluatePartialDerivative19(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -96.1638 + + const double var_x136 = exp(-0.15384615384615385 - 0.076923076923076927 * var_chaste_interface__membrane__V); + const double var_x151 = 0.10000000000000001 * var_x136; + const double var_x155 = -var_x151; + + partialF = -0.0076249999999999998 + var_x155; + } + else + { + const double y_save = rY[19]; + rY[19] += delta; + const double temp = EvaluateYDerivative19(var_chaste_interface__environment__time_converted, rY); + partialF = (temp-mEvalF[19])/delta; + rY[19] = y_save; + } + return partialF; + } + double Dynamicwinslow_model_1999FromCellMLGRL2Opt::EvaluateYDerivative20(double var_chaste_interface__environment__time_converted, std::vector& rY) + { + + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -96.1638 + double var_chaste_interface__L_type_Ca_current_y_gate__y = rY[20]; + // Units: dimensionless; Initial value: 0.798 + + + // Mathematics + const double var_L_type_Ca_current_y_gate__tau_y = 0.02 + 0.59999999999999998 / (1.0 + exp(2.1052631578947367 + 0.10526315789473684 * var_chaste_interface__membrane__V)); // second + const double var_L_type_Ca_current_y_gate__y_infinity = 0.20000000000000001 + 0.80000000000000004 / (1.0 + exp(2.5 + 0.20000000000000001 * var_chaste_interface__membrane__V)); // dimensionless + const double var_L_type_Ca_current_y_gate__y_orig_deriv = (-var_chaste_interface__L_type_Ca_current_y_gate__y + var_L_type_Ca_current_y_gate__y_infinity) / var_L_type_Ca_current_y_gate__tau_y; // 1 / second + const double d_dt_chaste_interface_var_L_type_Ca_current_y_gate__y = 0.001 * var_L_type_Ca_current_y_gate__y_orig_deriv; // 1 / millisecond + + return d_dt_chaste_interface_var_L_type_Ca_current_y_gate__y; + } + + double Dynamicwinslow_model_1999FromCellMLGRL2Opt::EvaluatePartialDerivative20(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -96.1638 + + const double var_x179 = exp(2.1052631578947367 + 0.10526315789473684 * var_chaste_interface__membrane__V); + const double var_x180 = 1.0 + var_x179; + const double var_x181 = 1 / var_x180; + const double var_x182 = 1 / (0.02 + 0.59999999999999998 * var_x181); + + partialF = -0.001 * var_x182; + } + else + { + const double y_save = rY[20]; + rY[20] += delta; + const double temp = EvaluateYDerivative20(var_chaste_interface__environment__time_converted, rY); + partialF = (temp-mEvalF[20])/delta; + rY[20] = y_save; + } + return partialF; + } + double Dynamicwinslow_model_1999FromCellMLGRL2Opt::EvaluateYDerivative21(double var_chaste_interface__environment__time_converted, std::vector& rY) + { + + double var_chaste_interface__RyR_channel__P_O1 = rY[21]; + // Units: dimensionless; Initial value: 0.0 + double var_chaste_interface__RyR_channel__P_O2 = rY[22]; + // Units: dimensionless; Initial value: 0.0 + double var_chaste_interface__RyR_channel__P_C1 = rY[23]; + // Units: dimensionless; Initial value: 0.47 + double var_chaste_interface__RyR_channel__P_C2 = rY[24]; + // Units: dimensionless; Initial value: 0.53 + double var_chaste_interface__intracellular_ion_concentrations__Ca_ss = rY[30]; + // Units: millimolar; Initial value: 0.00011 + + + // Mathematics + const double var_RyR_channel__k_a_minus = 576.0; // per_second + const double var_RyR_channel__k_a_plus = 12150000000000.0; // millimolar4_per_second + const double var_RyR_channel__k_b_minus = 1930.0; // per_second + const double var_RyR_channel__k_b_plus = 4050000000.0; // millimolar3_per_second + const double var_RyR_channel__k_c_minus = 0.80000000000000004; // per_second + const double var_RyR_channel__k_c_plus = 100.0; // per_second + const double var_RyR_channel__m = 3.0; // dimensionless + const double var_RyR_channel__n = 4.0; // dimensionless + const double var_RyR_channel__P_O1_orig_deriv = var_chaste_interface__RyR_channel__P_C2 * var_RyR_channel__k_c_minus + var_chaste_interface__RyR_channel__P_O2 * var_RyR_channel__k_b_minus - var_chaste_interface__RyR_channel__P_O1 * var_RyR_channel__k_a_minus - var_chaste_interface__RyR_channel__P_O1 * var_RyR_channel__k_c_plus + pow(var_chaste_interface__intracellular_ion_concentrations__Ca_ss, var_RyR_channel__n) * var_chaste_interface__RyR_channel__P_C1 * var_RyR_channel__k_a_plus - pow(var_chaste_interface__intracellular_ion_concentrations__Ca_ss, var_RyR_channel__m) * var_chaste_interface__RyR_channel__P_O1 * var_RyR_channel__k_b_plus; // 1 / second + const double d_dt_chaste_interface_var_RyR_channel__P_O1 = 0.001 * var_RyR_channel__P_O1_orig_deriv; // 1 / millisecond + + return d_dt_chaste_interface_var_RyR_channel__P_O1; + } + + double Dynamicwinslow_model_1999FromCellMLGRL2Opt::EvaluatePartialDerivative21(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__intracellular_ion_concentrations__Ca_ss = rY[30]; + // Units: millimolar; Initial value: 0.00011 + + const double var_x183 = pow(var_chaste_interface__intracellular_ion_concentrations__Ca_ss, 3.0); + const double var_x184 = 4050000.0 * var_x183; + + partialF = -0.67600000000000005 - var_x184; + } + else + { + const double y_save = rY[21]; + rY[21] += delta; + const double temp = EvaluateYDerivative21(var_chaste_interface__environment__time_converted, rY); + partialF = (temp-mEvalF[21])/delta; + rY[21] = y_save; + } + return partialF; + } + double Dynamicwinslow_model_1999FromCellMLGRL2Opt::EvaluateYDerivative22(double var_chaste_interface__environment__time_converted, std::vector& rY) + { + + double var_chaste_interface__RyR_channel__P_O1 = rY[21]; + // Units: dimensionless; Initial value: 0.0 + double var_chaste_interface__RyR_channel__P_O2 = rY[22]; + // Units: dimensionless; Initial value: 0.0 + double var_chaste_interface__intracellular_ion_concentrations__Ca_ss = rY[30]; + // Units: millimolar; Initial value: 0.00011 + + + // Mathematics + const double var_RyR_channel__k_b_minus = 1930.0; // per_second + const double var_RyR_channel__k_b_plus = 4050000000.0; // millimolar3_per_second + const double var_RyR_channel__m = 3.0; // dimensionless + const double var_RyR_channel__P_O2_orig_deriv = -var_chaste_interface__RyR_channel__P_O2 * var_RyR_channel__k_b_minus + pow(var_chaste_interface__intracellular_ion_concentrations__Ca_ss, var_RyR_channel__m) * var_chaste_interface__RyR_channel__P_O1 * var_RyR_channel__k_b_plus; // 1 / second + const double d_dt_chaste_interface_var_RyR_channel__P_O2 = 0.001 * var_RyR_channel__P_O2_orig_deriv; // 1 / millisecond + + return d_dt_chaste_interface_var_RyR_channel__P_O2; + } + + double Dynamicwinslow_model_1999FromCellMLGRL2Opt::EvaluatePartialDerivative22(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + + + partialF = -1.9299999999999999; + } + else + { + const double y_save = rY[22]; + rY[22] += delta; + const double temp = EvaluateYDerivative22(var_chaste_interface__environment__time_converted, rY); + partialF = (temp-mEvalF[22])/delta; + rY[22] = y_save; + } + return partialF; + } + double Dynamicwinslow_model_1999FromCellMLGRL2Opt::EvaluateYDerivative23(double var_chaste_interface__environment__time_converted, std::vector& rY) + { + + double var_chaste_interface__RyR_channel__P_O1 = rY[21]; + // Units: dimensionless; Initial value: 0.0 + double var_chaste_interface__RyR_channel__P_C1 = rY[23]; + // Units: dimensionless; Initial value: 0.47 + double var_chaste_interface__intracellular_ion_concentrations__Ca_ss = rY[30]; + // Units: millimolar; Initial value: 0.00011 + + + // Mathematics + const double var_RyR_channel__k_a_minus = 576.0; // per_second + const double var_RyR_channel__k_a_plus = 12150000000000.0; // millimolar4_per_second + const double var_RyR_channel__n = 4.0; // dimensionless + const double var_RyR_channel__P_C1_orig_deriv = var_chaste_interface__RyR_channel__P_O1 * var_RyR_channel__k_a_minus - pow(var_chaste_interface__intracellular_ion_concentrations__Ca_ss, var_RyR_channel__n) * var_chaste_interface__RyR_channel__P_C1 * var_RyR_channel__k_a_plus; // 1 / second + const double d_dt_chaste_interface_var_RyR_channel__P_C1 = 0.001 * var_RyR_channel__P_C1_orig_deriv; // 1 / millisecond + + return d_dt_chaste_interface_var_RyR_channel__P_C1; + } + + double Dynamicwinslow_model_1999FromCellMLGRL2Opt::EvaluatePartialDerivative23(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__intracellular_ion_concentrations__Ca_ss = rY[30]; + // Units: millimolar; Initial value: 0.00011 + + const double var_x185 = 12150000000.0 * pow(var_chaste_interface__intracellular_ion_concentrations__Ca_ss, 4.0); + + partialF = -var_x185; + } + else + { + const double y_save = rY[23]; + rY[23] += delta; + const double temp = EvaluateYDerivative23(var_chaste_interface__environment__time_converted, rY); + partialF = (temp-mEvalF[23])/delta; + rY[23] = y_save; + } + return partialF; + } + double Dynamicwinslow_model_1999FromCellMLGRL2Opt::EvaluateYDerivative24(double var_chaste_interface__environment__time_converted, std::vector& rY) + { + + double var_chaste_interface__RyR_channel__P_O1 = rY[21]; + // Units: dimensionless; Initial value: 0.0 + double var_chaste_interface__RyR_channel__P_C2 = rY[24]; + // Units: dimensionless; Initial value: 0.53 + + + // Mathematics + const double var_RyR_channel__k_c_minus = 0.80000000000000004; // per_second + const double var_RyR_channel__k_c_plus = 100.0; // per_second + const double var_RyR_channel__P_C2_orig_deriv = var_chaste_interface__RyR_channel__P_O1 * var_RyR_channel__k_c_plus - var_chaste_interface__RyR_channel__P_C2 * var_RyR_channel__k_c_minus; // 1 / second + const double d_dt_chaste_interface_var_RyR_channel__P_C2 = 0.001 * var_RyR_channel__P_C2_orig_deriv; // 1 / millisecond + + return d_dt_chaste_interface_var_RyR_channel__P_C2; + } + + double Dynamicwinslow_model_1999FromCellMLGRL2Opt::EvaluatePartialDerivative24(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + + + partialF = -0.00080000000000000004; + } + else + { + const double y_save = rY[24]; + rY[24] += delta; + const double temp = EvaluateYDerivative24(var_chaste_interface__environment__time_converted, rY); + partialF = (temp-mEvalF[24])/delta; + rY[24] = y_save; + } + return partialF; + } + double Dynamicwinslow_model_1999FromCellMLGRL2Opt::EvaluateYDerivative25(double var_chaste_interface__environment__time_converted, std::vector& rY) + { + + double var_chaste_interface__intracellular_Ca_fluxes__HTRPNCa = rY[25]; + // Units: millimolar; Initial value: 0.98 + double var_chaste_interface__intracellular_ion_concentrations__Cai = rY[28]; + // Units: millimolar; Initial value: 8e-05 + + + // Mathematics + const double var_intracellular_Ca_fluxes__k_htrpn_minus = 0.066000000000000003; // per_second + const double var_intracellular_Ca_fluxes__k_htrpn_plus = 20000.0; // per_millimolar_second + const double var_intracellular_Ca_fluxes__HTRPNCa_orig_deriv = -var_chaste_interface__intracellular_Ca_fluxes__HTRPNCa * var_intracellular_Ca_fluxes__k_htrpn_minus + (1.0 - var_chaste_interface__intracellular_Ca_fluxes__HTRPNCa) * var_intracellular_Ca_fluxes__k_htrpn_plus * var_chaste_interface__intracellular_ion_concentrations__Cai; // millimolar / second + const double d_dt_chaste_interface_var_intracellular_Ca_fluxes__HTRPNCa = 0.001 * var_intracellular_Ca_fluxes__HTRPNCa_orig_deriv; // millimolar / millisecond + + return d_dt_chaste_interface_var_intracellular_Ca_fluxes__HTRPNCa; + } + + double Dynamicwinslow_model_1999FromCellMLGRL2Opt::EvaluatePartialDerivative25(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__intracellular_ion_concentrations__Cai = rY[28]; + // Units: millimolar; Initial value: 8e-05 + + + partialF = -6.6000000000000005e-5 - 20.0 * var_chaste_interface__intracellular_ion_concentrations__Cai; + } + else + { + const double y_save = rY[25]; + rY[25] += delta; + const double temp = EvaluateYDerivative25(var_chaste_interface__environment__time_converted, rY); + partialF = (temp-mEvalF[25])/delta; + rY[25] = y_save; + } + return partialF; + } + double Dynamicwinslow_model_1999FromCellMLGRL2Opt::EvaluateYDerivative26(double var_chaste_interface__environment__time_converted, std::vector& rY) + { + + double var_chaste_interface__intracellular_Ca_fluxes__LTRPNCa = rY[26]; + // Units: millimolar; Initial value: 0.078 + double var_chaste_interface__intracellular_ion_concentrations__Cai = rY[28]; + // Units: millimolar; Initial value: 8e-05 + + + // Mathematics + const double var_intracellular_Ca_fluxes__k_ltrpn_minus = 40.0; // per_second + const double var_intracellular_Ca_fluxes__k_ltrpn_plus = 40000.0; // per_millimolar_second + const double var_intracellular_Ca_fluxes__LTRPNCa_orig_deriv = -var_chaste_interface__intracellular_Ca_fluxes__LTRPNCa * var_intracellular_Ca_fluxes__k_ltrpn_minus + (1.0 - var_chaste_interface__intracellular_Ca_fluxes__LTRPNCa) * var_intracellular_Ca_fluxes__k_ltrpn_plus * var_chaste_interface__intracellular_ion_concentrations__Cai; // millimolar / second + const double d_dt_chaste_interface_var_intracellular_Ca_fluxes__LTRPNCa = 0.001 * var_intracellular_Ca_fluxes__LTRPNCa_orig_deriv; // millimolar / millisecond + + return d_dt_chaste_interface_var_intracellular_Ca_fluxes__LTRPNCa; + } + + double Dynamicwinslow_model_1999FromCellMLGRL2Opt::EvaluatePartialDerivative26(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__intracellular_ion_concentrations__Cai = rY[28]; + // Units: millimolar; Initial value: 8e-05 + + + partialF = -0.040000000000000001 - 40.0 * var_chaste_interface__intracellular_ion_concentrations__Cai; + } + else + { + const double y_save = rY[26]; + rY[26] += delta; + const double temp = EvaluateYDerivative26(var_chaste_interface__environment__time_converted, rY); + partialF = (temp-mEvalF[26])/delta; + rY[26] = y_save; + } + return partialF; + } + double Dynamicwinslow_model_1999FromCellMLGRL2Opt::EvaluateYDerivative27(double var_chaste_interface__environment__time_converted, std::vector& rY) + { + + + + // Mathematics + const double var_intracellular_ion_concentrations__Nai_orig_deriv = 0; // millimolar / second + const double d_dt_chaste_interface_var_intracellular_ion_concentrations__Nai = 0.001 * var_intracellular_ion_concentrations__Nai_orig_deriv; // millimolar / millisecond + + return d_dt_chaste_interface_var_intracellular_ion_concentrations__Nai; + } + + double Dynamicwinslow_model_1999FromCellMLGRL2Opt::EvaluatePartialDerivative27(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + + + partialF = 0; + } + else + { + const double y_save = rY[27]; + rY[27] += delta; + const double temp = EvaluateYDerivative27(var_chaste_interface__environment__time_converted, rY); + partialF = (temp-mEvalF[27])/delta; + rY[27] = y_save; + } + return partialF; + } + double Dynamicwinslow_model_1999FromCellMLGRL2Opt::EvaluateYDerivative28(double var_chaste_interface__environment__time_converted, std::vector& rY) + { + + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -96.1638 + double var_chaste_interface__intracellular_Ca_fluxes__HTRPNCa = rY[25]; + // Units: millimolar; Initial value: 0.98 + double var_chaste_interface__intracellular_Ca_fluxes__LTRPNCa = rY[26]; + // Units: millimolar; Initial value: 0.078 + double var_chaste_interface__intracellular_ion_concentrations__Nai = rY[27]; + // Units: millimolar; Initial value: 10.0 + double var_chaste_interface__intracellular_ion_concentrations__Cai = rY[28]; + // Units: millimolar; Initial value: 8e-05 + double var_chaste_interface__intracellular_ion_concentrations__Ca_ss = rY[30]; + // Units: millimolar; Initial value: 0.00011 + double var_chaste_interface__intracellular_ion_concentrations__Ca_NSR = rY[32]; + // Units: millimolar; Initial value: 0.257 + + + // Mathematics + const double var_Na_Ca_exchanger__K_NaCa = 0.29999999999999999; // microA_per_microF + const double var_Na_Ca_exchanger__K_mCa = 1.3799999999999999; // millimolar + const double var_Na_Ca_exchanger__K_mNa = 87.5; // millimolar + const double var_Na_Ca_exchanger__K_sat = 0.20000000000000001; // dimensionless + const double var_Na_Ca_exchanger__eta = 0.34999999999999998; // dimensionless + const double var_SERCA2a_pump__K_SR = 1.0; // dimensionless + const double var_SERCA2a_pump__K_fb = 0.00016799999999999999; // millimolar + const double var_SERCA2a_pump__K_rb = 3.29; // millimolar + const double var_SERCA2a_pump__N_fb = 1.2; // dimensionless + const double var_SERCA2a_pump__N_rb = 1.0; // dimensionless + const double var_SERCA2a_pump__Vmaxf = 0.081299999999999997; // millimolar_per_second + const double var_SERCA2a_pump__Vmaxr = 0.318; // millimolar_per_second + const double var_calcium_background_current__g_Cab = 0.00038420000000000001; // milliS_per_microF + const double var_intracellular_Ca_fluxes__HTRPN_tot = 0.14000000000000001; // dimensionless + const double var_intracellular_Ca_fluxes__LTRPN_tot = 0.070000000000000007; // dimensionless + const double var_intracellular_Ca_fluxes__k_htrpn_minus = 0.066000000000000003; // per_second + const double var_intracellular_Ca_fluxes__k_htrpn_plus = 20000.0; // per_millimolar_second + const double var_intracellular_Ca_fluxes__k_ltrpn_minus = 40.0; // per_second + const double var_intracellular_Ca_fluxes__k_ltrpn_plus = 40000.0; // per_millimolar_second + const double var_intracellular_Ca_fluxes__tau_xfer = 0.026700000000000002; // second + const double var_intracellular_ion_concentrations__A_cap = 0.00015339999999999999; // cm2 + const double var_intracellular_ion_concentrations__CMDN_tot = 0.050000000000000003; // millimolar + const double var_SERCA2a_pump__rb = pow((var_chaste_interface__intracellular_ion_concentrations__Ca_NSR / var_SERCA2a_pump__K_rb), var_SERCA2a_pump__N_rb); // dimensionless + const double var_SERCA2a_pump__fb = pow((var_chaste_interface__intracellular_ion_concentrations__Cai / var_SERCA2a_pump__K_fb), var_SERCA2a_pump__N_fb); // dimensionless + const double var_SERCA2a_pump__J_up = (var_SERCA2a_pump__Vmaxf * var_SERCA2a_pump__fb - var_SERCA2a_pump__Vmaxr * var_SERCA2a_pump__rb) * var_SERCA2a_pump__K_SR / (1.0 + var_SERCA2a_pump__fb + var_SERCA2a_pump__rb); // millimolar_per_second + const double var_intracellular_Ca_fluxes__HTRPNCa_orig_deriv = -var_chaste_interface__intracellular_Ca_fluxes__HTRPNCa * var_intracellular_Ca_fluxes__k_htrpn_minus + (1.0 - var_chaste_interface__intracellular_Ca_fluxes__HTRPNCa) * var_intracellular_Ca_fluxes__k_htrpn_plus * var_chaste_interface__intracellular_ion_concentrations__Cai; // millimolar / second + const double var_intracellular_Ca_fluxes__J_HTRPNCa = var_intracellular_Ca_fluxes__HTRPNCa_orig_deriv; // millimolar_per_second + const double var_intracellular_Ca_fluxes__J_xfer = (-var_chaste_interface__intracellular_ion_concentrations__Cai + var_chaste_interface__intracellular_ion_concentrations__Ca_ss) / var_intracellular_Ca_fluxes__tau_xfer; // millimolar_per_second + const double var_intracellular_Ca_fluxes__LTRPNCa_orig_deriv = -var_chaste_interface__intracellular_Ca_fluxes__LTRPNCa * var_intracellular_Ca_fluxes__k_ltrpn_minus + (1.0 - var_chaste_interface__intracellular_Ca_fluxes__LTRPNCa) * var_intracellular_Ca_fluxes__k_ltrpn_plus * var_chaste_interface__intracellular_ion_concentrations__Cai; // millimolar / second + const double var_intracellular_Ca_fluxes__J_LTRPNCa = var_intracellular_Ca_fluxes__LTRPNCa_orig_deriv; // millimolar_per_second + const double var_intracellular_Ca_fluxes__J_trpn = var_intracellular_Ca_fluxes__HTRPN_tot * var_intracellular_Ca_fluxes__J_HTRPNCa + var_intracellular_Ca_fluxes__J_LTRPNCa * var_intracellular_Ca_fluxes__LTRPN_tot; // millimolar_per_second + const double var_intracellular_ion_concentrations__EGTA_tot = 0; // millimolar + const double var_intracellular_ion_concentrations__K_mCMDN = 0.0023800000000000002; // millimolar + const double var_intracellular_ion_concentrations__K_mEGTA = 0.00014999999999999999; // millimolar + const double var_intracellular_ion_concentrations__V_myo = 2.584e-5; // micro_litre + const double var_intracellular_ion_concentrations__beta_i = 1.0 / (1.0 + var_intracellular_ion_concentrations__CMDN_tot * var_intracellular_ion_concentrations__K_mCMDN / pow((var_chaste_interface__intracellular_ion_concentrations__Cai + var_intracellular_ion_concentrations__K_mCMDN), 2) + var_intracellular_ion_concentrations__EGTA_tot * var_intracellular_ion_concentrations__K_mEGTA / pow((var_chaste_interface__intracellular_ion_concentrations__Cai + var_intracellular_ion_concentrations__K_mEGTA), 2)); // dimensionless + const double var_membrane__F = 96.485341500000004; // coulomb_per_millimole + const double var_membrane__R = 8.3144720000000003; // joule_per_mole_kelvin + const double var_membrane__T = 310.0; // kelvin + const double var_sarcolemmal_calcium_pump__I_pCa = 0.050000000000000003; // microA_per_microF + const double var_sarcolemmal_calcium_pump__K_mpCa = 5.0000000000000002e-5; // millimolar + const double var_sarcolemmal_calcium_pump__i_p_Ca = var_chaste_interface__intracellular_ion_concentrations__Cai * var_sarcolemmal_calcium_pump__I_pCa / (var_chaste_interface__intracellular_ion_concentrations__Cai + var_sarcolemmal_calcium_pump__K_mpCa); // microA_per_microF + const double var_standard_ionic_concentrations__Cao = 2.0; // millimolar + const double var_calcium_background_current__E_Ca = 0.5 * var_membrane__R * var_membrane__T * log(var_standard_ionic_concentrations__Cao / var_chaste_interface__intracellular_ion_concentrations__Cai) / var_membrane__F; // millivolt + const double var_calcium_background_current__i_Ca_b = (-var_calcium_background_current__E_Ca + var_chaste_interface__membrane__V) * var_calcium_background_current__g_Cab; // microA_per_microF + const double var_standard_ionic_concentrations__Nao = 138.0; // millimolar + const double var_Na_Ca_exchanger__i_NaCa = 5000.0 * (pow(var_chaste_interface__intracellular_ion_concentrations__Nai, 3) * var_standard_ionic_concentrations__Cao * exp(var_Na_Ca_exchanger__eta * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T)) - pow(var_standard_ionic_concentrations__Nao, 3) * var_chaste_interface__intracellular_ion_concentrations__Cai * exp((-1.0 + var_Na_Ca_exchanger__eta) * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * var_Na_Ca_exchanger__K_NaCa / ((1.0 + var_Na_Ca_exchanger__K_sat * exp((-1.0 + var_Na_Ca_exchanger__eta) * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * (pow(var_Na_Ca_exchanger__K_mNa, 3) + pow(var_standard_ionic_concentrations__Nao, 3)) * (var_Na_Ca_exchanger__K_mCa + var_standard_ionic_concentrations__Cao)); // microA_per_microF + const double var_intracellular_ion_concentrations__Cai_orig_deriv = (-var_SERCA2a_pump__J_up - var_intracellular_Ca_fluxes__J_trpn + 0.5 * (-var_calcium_background_current__i_Ca_b - var_sarcolemmal_calcium_pump__i_p_Ca + 2.0 * var_Na_Ca_exchanger__i_NaCa) * var_intracellular_ion_concentrations__A_cap / (var_intracellular_ion_concentrations__V_myo * var_membrane__F) + var_intracellular_Ca_fluxes__J_xfer) * var_intracellular_ion_concentrations__beta_i; // millimolar / second + const double d_dt_chaste_interface_var_intracellular_ion_concentrations__Cai = 0.001 * var_intracellular_ion_concentrations__Cai_orig_deriv; // millimolar / millisecond + + return d_dt_chaste_interface_var_intracellular_ion_concentrations__Cai; + } + + double Dynamicwinslow_model_1999FromCellMLGRL2Opt::EvaluatePartialDerivative28(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -96.1638 + double var_chaste_interface__intracellular_Ca_fluxes__HTRPNCa = rY[25]; + // Units: millimolar; Initial value: 0.98 + double var_chaste_interface__intracellular_Ca_fluxes__LTRPNCa = rY[26]; + // Units: millimolar; Initial value: 0.078 + double var_chaste_interface__intracellular_ion_concentrations__Nai = rY[27]; + // Units: millimolar; Initial value: 10.0 + double var_chaste_interface__intracellular_ion_concentrations__Cai = rY[28]; + // Units: millimolar; Initial value: 8e-05 + double var_chaste_interface__intracellular_ion_concentrations__Ca_ss = rY[30]; + // Units: millimolar; Initial value: 0.00011 + double var_chaste_interface__intracellular_ion_concentrations__Ca_NSR = rY[32]; + // Units: millimolar; Initial value: 0.257 + + const double var_x12 = exp(-0.024332029034784559 * var_chaste_interface__membrane__V); + const double var_x13 = 1.0 + 0.20000000000000001 * var_x12; + const double var_x14 = 1 / var_x13; + const double var_x15 = var_x12 * var_chaste_interface__intracellular_ion_concentrations__Cai; + const double var_x16 = exp(0.013101861787960915 * var_chaste_interface__membrane__V); + const double var_x17 = var_x16 * pow(var_chaste_interface__intracellular_ion_concentrations__Nai, 3); + const double var_x21 = 2.0 * var_x17 - 2628072.0 * var_x15; + const double var_x68 = 5.0000000000000002e-5 + var_chaste_interface__intracellular_ion_concentrations__Cai; + const double var_x69 = 1 / var_x68; + const double var_x70 = 1 / var_chaste_interface__intracellular_ion_concentrations__Cai; + const double var_x71 = var_x12 * var_x14; + const double var_x72 = var_chaste_interface__intracellular_ion_concentrations__Cai / pow(var_x68, 2); + const double var_x188 = 0.0023800000000000002 + var_chaste_interface__intracellular_ion_concentrations__Cai; + const double var_x189 = 1.0 + 0.00011900000000000002 / pow(var_x188, 2); + const double var_x190 = 1 / var_x189; + const double var_x191 = 0.001 * var_x190; + const double var_x192 = 2800.0000000000005 * var_chaste_interface__intracellular_ion_concentrations__Cai; + const double var_x193 = 0.0015381954438488301 * var_x69; + const double var_x194 = pow(var_chaste_interface__intracellular_ion_concentrations__Cai, 1.2); + const double var_x195 = pow(var_chaste_interface__intracellular_ion_concentrations__Ca_NSR, 1.0); + const double var_x196 = 1 / (1.0 + 33855.471141425078 * var_x194 + 0.303951367781155 * var_x195); + const double var_x197 = pow(var_chaste_interface__intracellular_ion_concentrations__Cai, 0.19999999999999996); + const double var_x198 = var_x196 * var_x197; + const double var_x199 = 2752.4498037978587 * var_x194 - 0.096656534954407292 * var_x195; + const double var_x200 = var_x199 / pow((2.9537323401073989e-5 + var_x194 + 8.9779098483507565e-6 * var_x195), 2); + const double var_x201 = var_x197 * var_x200; + + partialF = var_x191 * (-5637.4531835205999 - var_x193 + 3.5444788081288787e-5 * var_x201 + 0.0015381954438488301 * var_x72 + 2800.0000000000005 * var_chaste_interface__intracellular_Ca_fluxes__HTRPNCa + 2800.0000000000005 * var_chaste_interface__intracellular_Ca_fluxes__LTRPNCa - 0.00015787156411954756 * var_x70 - 21.758727097510118 * var_x71 - 3302.9397645574304 * var_x198) + 2.3800000000000004e-7 * (2.8000000000000003 * var_chaste_interface__intracellular_Ca_fluxes__LTRPNCa + 37.453183520599246 * var_chaste_interface__intracellular_ion_concentrations__Ca_ss + 0.0092400000000000017 * var_chaste_interface__intracellular_Ca_fluxes__HTRPNCa + 0.00015787156411954756 * log(2.0 * var_x70) - 37.453183520599246 * var_chaste_interface__intracellular_ion_concentrations__Cai - 1.181949379053441e-5 * var_chaste_interface__membrane__V - var_x192 * (1.0 - var_chaste_interface__intracellular_Ca_fluxes__HTRPNCa) - var_x192 * (1.0 - var_chaste_interface__intracellular_Ca_fluxes__LTRPNCa) - var_x193 * var_chaste_interface__intracellular_ion_concentrations__Cai + 8.279349689624225e-6 * var_x14 * var_x21 - 1.0 * var_x196 * var_x199) / (pow(var_x188, 3) * pow(var_x189, 2)); + } + else + { + const double y_save = rY[28]; + rY[28] += delta; + const double temp = EvaluateYDerivative28(var_chaste_interface__environment__time_converted, rY); + partialF = (temp-mEvalF[28])/delta; + rY[28] = y_save; + } + return partialF; + } + double Dynamicwinslow_model_1999FromCellMLGRL2Opt::EvaluateYDerivative29(double var_chaste_interface__environment__time_converted, std::vector& rY) + { + + + + // Mathematics + const double var_intracellular_ion_concentrations__Ki_orig_deriv = 0; // millimolar / second + const double d_dt_chaste_interface_var_intracellular_ion_concentrations__Ki = 0.001 * var_intracellular_ion_concentrations__Ki_orig_deriv; // millimolar / millisecond + + return d_dt_chaste_interface_var_intracellular_ion_concentrations__Ki; + } + + double Dynamicwinslow_model_1999FromCellMLGRL2Opt::EvaluatePartialDerivative29(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + + + partialF = 0; + } + else + { + const double y_save = rY[29]; + rY[29] += delta; + const double temp = EvaluateYDerivative29(var_chaste_interface__environment__time_converted, rY); + partialF = (temp-mEvalF[29])/delta; + rY[29] = y_save; + } + return partialF; + } + double Dynamicwinslow_model_1999FromCellMLGRL2Opt::EvaluateYDerivative30(double var_chaste_interface__environment__time_converted, std::vector& rY) + { + + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -96.1638 + double var_chaste_interface__L_type_Ca_current__O = rY[8]; + // Units: dimensionless; Initial value: 9.84546e-21 + double var_chaste_interface__L_type_Ca_current__O_Ca = rY[9]; + // Units: dimensionless; Initial value: 0.0 + double var_chaste_interface__L_type_Ca_current_y_gate__y = rY[20]; + // Units: dimensionless; Initial value: 0.798 + double var_chaste_interface__RyR_channel__P_O1 = rY[21]; + // Units: dimensionless; Initial value: 0.0 + double var_chaste_interface__RyR_channel__P_O2 = rY[22]; + // Units: dimensionless; Initial value: 0.0 + double var_chaste_interface__intracellular_ion_concentrations__Cai = rY[28]; + // Units: millimolar; Initial value: 8e-05 + double var_chaste_interface__intracellular_ion_concentrations__Ca_ss = rY[30]; + // Units: millimolar; Initial value: 0.00011 + double var_chaste_interface__intracellular_ion_concentrations__Ca_JSR = rY[31]; + // Units: millimolar; Initial value: 0.257 + + + // Mathematics + const double var_L_type_Ca_current__P_Ca = 0.00031250000000000001; // cm_per_second + const double var_RyR_channel__v1 = 1800.0; // per_second + const double var_intracellular_Ca_fluxes__tau_xfer = 0.026700000000000002; // second + const double var_intracellular_ion_concentrations__A_cap = 0.00015339999999999999; // cm2 + const double var_intracellular_ion_concentrations__CMDN_tot = 0.050000000000000003; // millimolar + const double var_RyR_channel__J_rel = (-var_chaste_interface__intracellular_ion_concentrations__Ca_ss + var_chaste_interface__intracellular_ion_concentrations__Ca_JSR) * (var_chaste_interface__RyR_channel__P_O1 + var_chaste_interface__RyR_channel__P_O2) * var_RyR_channel__v1; // millimolar_per_second + const double var_intracellular_Ca_fluxes__J_xfer = (-var_chaste_interface__intracellular_ion_concentrations__Cai + var_chaste_interface__intracellular_ion_concentrations__Ca_ss) / var_intracellular_Ca_fluxes__tau_xfer; // millimolar_per_second + const double var_intracellular_ion_concentrations__EGTA_tot = 0; // millimolar + const double var_intracellular_ion_concentrations__K_mCMDN = 0.0023800000000000002; // millimolar + const double var_intracellular_ion_concentrations__K_mEGTA = 0.00014999999999999999; // millimolar + const double var_intracellular_ion_concentrations__V_JSR = 1.6e-7; // micro_litre + const double var_intracellular_ion_concentrations__V_SS = 1.2e-9; // micro_litre + const double var_intracellular_ion_concentrations__V_myo = 2.584e-5; // micro_litre + const double var_intracellular_ion_concentrations__beta_SS = 1.0 / (1.0 + var_intracellular_ion_concentrations__CMDN_tot * var_intracellular_ion_concentrations__K_mCMDN / pow((var_chaste_interface__intracellular_ion_concentrations__Ca_ss + var_intracellular_ion_concentrations__K_mCMDN), 2) + var_intracellular_ion_concentrations__EGTA_tot * var_intracellular_ion_concentrations__K_mEGTA / pow((var_chaste_interface__intracellular_ion_concentrations__Ca_ss + var_intracellular_ion_concentrations__K_mEGTA), 2)); // dimensionless + const double var_membrane__F = 96.485341500000004; // coulomb_per_millimole + const double var_membrane__R = 8.3144720000000003; // joule_per_mole_kelvin + const double var_membrane__T = 310.0; // kelvin + const double var_standard_ionic_concentrations__Cao = 2.0; // millimolar + const double var_L_type_Ca_current__i_Ca_max = 4000.0 * pow(var_membrane__F, 2) * (0.001 * exp(2.0 * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T)) - 0.34100000000000003 * var_standard_ionic_concentrations__Cao) * var_L_type_Ca_current__P_Ca * var_chaste_interface__membrane__V / ((-1.0 + exp(2.0 * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * var_membrane__R * var_membrane__T); // microA_per_microF + const double var_L_type_Ca_current__i_Ca = (var_chaste_interface__L_type_Ca_current__O + var_chaste_interface__L_type_Ca_current__O_Ca) * var_L_type_Ca_current__i_Ca_max * var_chaste_interface__L_type_Ca_current_y_gate__y; // microA_per_microF + const double var_intracellular_ion_concentrations__Ca_ss_orig_deriv = (var_RyR_channel__J_rel * var_intracellular_ion_concentrations__V_JSR / var_intracellular_ion_concentrations__V_SS - var_intracellular_Ca_fluxes__J_xfer * var_intracellular_ion_concentrations__V_myo / var_intracellular_ion_concentrations__V_SS - 0.5 * var_L_type_Ca_current__i_Ca * var_intracellular_ion_concentrations__A_cap / (var_intracellular_ion_concentrations__V_SS * var_membrane__F)) * var_intracellular_ion_concentrations__beta_SS; // millimolar / second + const double d_dt_chaste_interface_var_intracellular_ion_concentrations__Ca_ss = 0.001 * var_intracellular_ion_concentrations__Ca_ss_orig_deriv; // millimolar / millisecond + + return d_dt_chaste_interface_var_intracellular_ion_concentrations__Ca_ss; + } + + double Dynamicwinslow_model_1999FromCellMLGRL2Opt::EvaluatePartialDerivative30(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -96.1638 + double var_chaste_interface__L_type_Ca_current__O = rY[8]; + // Units: dimensionless; Initial value: 9.84546e-21 + double var_chaste_interface__L_type_Ca_current__O_Ca = rY[9]; + // Units: dimensionless; Initial value: 0.0 + double var_chaste_interface__L_type_Ca_current_y_gate__y = rY[20]; + // Units: dimensionless; Initial value: 0.798 + double var_chaste_interface__RyR_channel__P_O1 = rY[21]; + // Units: dimensionless; Initial value: 0.0 + double var_chaste_interface__RyR_channel__P_O2 = rY[22]; + // Units: dimensionless; Initial value: 0.0 + double var_chaste_interface__intracellular_ion_concentrations__Cai = rY[28]; + // Units: millimolar; Initial value: 8e-05 + double var_chaste_interface__intracellular_ion_concentrations__Ca_ss = rY[30]; + // Units: millimolar; Initial value: 0.00011 + double var_chaste_interface__intracellular_ion_concentrations__Ca_JSR = rY[31]; + // Units: millimolar; Initial value: 0.257 + + const double var_x34 = var_chaste_interface__L_type_Ca_current__O + var_chaste_interface__L_type_Ca_current__O_Ca; + const double var_x35 = exp(0.074867781645490947 * var_chaste_interface__membrane__V); + const double var_x36 = -1.0 + var_x35; + const double var_x37 = 1 / var_x36; + const double var_x38 = -0.68200000000000005 + 0.001 * var_x35; + const double var_x39 = var_x37 * var_x38; + const double var_x41 = var_x39 * var_chaste_interface__membrane__V; + const double var_x65 = var_x34 * var_x41; + const double var_x202 = 2990.8119021922685 * var_chaste_interface__L_type_Ca_current_y_gate__y; + const double var_x203 = 0.0023800000000000002 + var_chaste_interface__intracellular_ion_concentrations__Ca_ss; + const double var_x204 = 1.0 + 0.00011900000000000002 / pow(var_x203, 2); + const double var_x205 = 1 / var_x204; + const double var_x206 = 0.001 * var_x205; + const double var_x210 = 240000.0 * var_chaste_interface__RyR_channel__P_O1; + const double var_x211 = 240000.0 * var_chaste_interface__RyR_channel__P_O2; + const double var_x212 = (-var_chaste_interface__intracellular_ion_concentrations__Ca_ss + var_chaste_interface__intracellular_ion_concentrations__Ca_JSR) * (var_chaste_interface__RyR_channel__P_O1 + var_chaste_interface__RyR_channel__P_O2); + + partialF = var_x206 * (-806491.88514357049 - var_x210 - var_x211) + 2.3800000000000004e-7 * (806491.88514357049 * var_chaste_interface__intracellular_ion_concentrations__Cai + 240000.0 * var_x212 - 806491.88514357049 * var_chaste_interface__intracellular_ion_concentrations__Ca_ss - var_x202 * var_x65) / (pow(var_x203, 3) * pow(var_x204, 2)); + } + else + { + const double y_save = rY[30]; + rY[30] += delta; + const double temp = EvaluateYDerivative30(var_chaste_interface__environment__time_converted, rY); + partialF = (temp-mEvalF[30])/delta; + rY[30] = y_save; + } + return partialF; + } + double Dynamicwinslow_model_1999FromCellMLGRL2Opt::EvaluateYDerivative31(double var_chaste_interface__environment__time_converted, std::vector& rY) + { + + double var_chaste_interface__RyR_channel__P_O1 = rY[21]; + // Units: dimensionless; Initial value: 0.0 + double var_chaste_interface__RyR_channel__P_O2 = rY[22]; + // Units: dimensionless; Initial value: 0.0 + double var_chaste_interface__intracellular_ion_concentrations__Ca_ss = rY[30]; + // Units: millimolar; Initial value: 0.00011 + double var_chaste_interface__intracellular_ion_concentrations__Ca_JSR = rY[31]; + // Units: millimolar; Initial value: 0.257 + double var_chaste_interface__intracellular_ion_concentrations__Ca_NSR = rY[32]; + // Units: millimolar; Initial value: 0.257 + + + // Mathematics + const double var_RyR_channel__v1 = 1800.0; // per_second + const double var_intracellular_Ca_fluxes__tau_tr = 0.00057470000000000004; // second + const double var_intracellular_ion_concentrations__CSQN_tot = 15.0; // millimolar + const double var_intracellular_Ca_fluxes__J_tr = (-var_chaste_interface__intracellular_ion_concentrations__Ca_JSR + var_chaste_interface__intracellular_ion_concentrations__Ca_NSR) / var_intracellular_Ca_fluxes__tau_tr; // millimolar_per_second + const double var_RyR_channel__J_rel = (-var_chaste_interface__intracellular_ion_concentrations__Ca_ss + var_chaste_interface__intracellular_ion_concentrations__Ca_JSR) * (var_chaste_interface__RyR_channel__P_O1 + var_chaste_interface__RyR_channel__P_O2) * var_RyR_channel__v1; // millimolar_per_second + const double var_intracellular_ion_concentrations__K_mCSQN = 0.80000000000000004; // millimolar + const double var_intracellular_ion_concentrations__beta_JSR = 1.0 / (1.0 + var_intracellular_ion_concentrations__CSQN_tot * var_intracellular_ion_concentrations__K_mCSQN / pow((var_chaste_interface__intracellular_ion_concentrations__Ca_JSR + var_intracellular_ion_concentrations__K_mCSQN), 2)); // dimensionless + const double var_intracellular_ion_concentrations__Ca_JSR_orig_deriv = (-var_RyR_channel__J_rel + var_intracellular_Ca_fluxes__J_tr) * var_intracellular_ion_concentrations__beta_JSR; // millimolar / second + const double d_dt_chaste_interface_var_intracellular_ion_concentrations__Ca_JSR = 0.001 * var_intracellular_ion_concentrations__Ca_JSR_orig_deriv; // millimolar / millisecond + + return d_dt_chaste_interface_var_intracellular_ion_concentrations__Ca_JSR; + } + + double Dynamicwinslow_model_1999FromCellMLGRL2Opt::EvaluatePartialDerivative31(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__RyR_channel__P_O1 = rY[21]; + // Units: dimensionless; Initial value: 0.0 + double var_chaste_interface__RyR_channel__P_O2 = rY[22]; + // Units: dimensionless; Initial value: 0.0 + double var_chaste_interface__intracellular_ion_concentrations__Ca_ss = rY[30]; + // Units: millimolar; Initial value: 0.00011 + double var_chaste_interface__intracellular_ion_concentrations__Ca_JSR = rY[31]; + // Units: millimolar; Initial value: 0.257 + double var_chaste_interface__intracellular_ion_concentrations__Ca_NSR = rY[32]; + // Units: millimolar; Initial value: 0.257 + + const double var_x212 = (-var_chaste_interface__intracellular_ion_concentrations__Ca_ss + var_chaste_interface__intracellular_ion_concentrations__Ca_JSR) * (var_chaste_interface__RyR_channel__P_O1 + var_chaste_interface__RyR_channel__P_O2); + const double var_x213 = 0.80000000000000004 + var_chaste_interface__intracellular_ion_concentrations__Ca_JSR; + const double var_x214 = pow(var_x213, (-2)); + const double var_x215 = 1 / (1.0 + 12.0 * var_x214); + const double var_x216 = 0.001 * var_x215; + const double var_x218 = 1800.0 * var_chaste_interface__RyR_channel__P_O1; + const double var_x219 = 1800.0 * var_chaste_interface__RyR_channel__P_O2; + + partialF = var_x216 * (-1740.0382808421784 - var_x218 - var_x219) + 0.00016666666666666666 * (1740.0382808421784 * var_chaste_interface__intracellular_ion_concentrations__Ca_NSR - 1800.0 * var_x212 - 1740.0382808421784 * var_chaste_interface__intracellular_ion_concentrations__Ca_JSR) / (pow(var_x213, 3) * pow((0.083333333333333329 + var_x214), 2)); + } + else + { + const double y_save = rY[31]; + rY[31] += delta; + const double temp = EvaluateYDerivative31(var_chaste_interface__environment__time_converted, rY); + partialF = (temp-mEvalF[31])/delta; + rY[31] = y_save; + } + return partialF; + } + double Dynamicwinslow_model_1999FromCellMLGRL2Opt::EvaluateYDerivative32(double var_chaste_interface__environment__time_converted, std::vector& rY) + { + + double var_chaste_interface__intracellular_ion_concentrations__Cai = rY[28]; + // Units: millimolar; Initial value: 8e-05 + double var_chaste_interface__intracellular_ion_concentrations__Ca_JSR = rY[31]; + // Units: millimolar; Initial value: 0.257 + double var_chaste_interface__intracellular_ion_concentrations__Ca_NSR = rY[32]; + // Units: millimolar; Initial value: 0.257 + + + // Mathematics + const double var_SERCA2a_pump__K_SR = 1.0; // dimensionless + const double var_SERCA2a_pump__K_fb = 0.00016799999999999999; // millimolar + const double var_SERCA2a_pump__K_rb = 3.29; // millimolar + const double var_SERCA2a_pump__N_fb = 1.2; // dimensionless + const double var_SERCA2a_pump__N_rb = 1.0; // dimensionless + const double var_SERCA2a_pump__Vmaxf = 0.081299999999999997; // millimolar_per_second + const double var_SERCA2a_pump__Vmaxr = 0.318; // millimolar_per_second + const double var_intracellular_Ca_fluxes__tau_tr = 0.00057470000000000004; // second + const double var_SERCA2a_pump__rb = pow((var_chaste_interface__intracellular_ion_concentrations__Ca_NSR / var_SERCA2a_pump__K_rb), var_SERCA2a_pump__N_rb); // dimensionless + const double var_intracellular_Ca_fluxes__J_tr = (-var_chaste_interface__intracellular_ion_concentrations__Ca_JSR + var_chaste_interface__intracellular_ion_concentrations__Ca_NSR) / var_intracellular_Ca_fluxes__tau_tr; // millimolar_per_second + const double var_SERCA2a_pump__fb = pow((var_chaste_interface__intracellular_ion_concentrations__Cai / var_SERCA2a_pump__K_fb), var_SERCA2a_pump__N_fb); // dimensionless + const double var_SERCA2a_pump__J_up = (var_SERCA2a_pump__Vmaxf * var_SERCA2a_pump__fb - var_SERCA2a_pump__Vmaxr * var_SERCA2a_pump__rb) * var_SERCA2a_pump__K_SR / (1.0 + var_SERCA2a_pump__fb + var_SERCA2a_pump__rb); // millimolar_per_second + const double var_intracellular_ion_concentrations__V_JSR = 1.6e-7; // micro_litre + const double var_intracellular_ion_concentrations__V_NSR = 2.0999999999999998e-6; // micro_litre + const double var_intracellular_ion_concentrations__V_myo = 2.584e-5; // micro_litre + const double var_intracellular_ion_concentrations__Ca_NSR_orig_deriv = var_SERCA2a_pump__J_up * var_intracellular_ion_concentrations__V_myo / var_intracellular_ion_concentrations__V_NSR - var_intracellular_Ca_fluxes__J_tr * var_intracellular_ion_concentrations__V_JSR / var_intracellular_ion_concentrations__V_NSR; // millimolar / second + const double d_dt_chaste_interface_var_intracellular_ion_concentrations__Ca_NSR = 0.001 * var_intracellular_ion_concentrations__Ca_NSR_orig_deriv; // millimolar / millisecond + + return d_dt_chaste_interface_var_intracellular_ion_concentrations__Ca_NSR; + } + + double Dynamicwinslow_model_1999FromCellMLGRL2Opt::EvaluatePartialDerivative32(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__intracellular_ion_concentrations__Cai = rY[28]; + // Units: millimolar; Initial value: 8e-05 + double var_chaste_interface__intracellular_ion_concentrations__Ca_NSR = rY[32]; + // Units: millimolar; Initial value: 0.257 + + const double var_x194 = pow(var_chaste_interface__intracellular_ion_concentrations__Cai, 1.2); + const double var_x195 = pow(var_chaste_interface__intracellular_ion_concentrations__Ca_NSR, 1.0); + const double var_x196 = 1 / (1.0 + 33855.471141425078 * var_x194 + 0.303951367781155 * var_x195); + const double var_x199 = 2752.4498037978587 * var_x194 - 0.096656534954407292 * var_x195; + const double var_x200 = var_x199 / pow((2.9537323401073989e-5 + var_x194 + 8.9779098483507565e-6 * var_x195), 2); + + partialF = -0.13257434520702313 - 0.0011893356491532784 * var_x196 - 3.2630189260961817e-12 * var_x200; + } + else + { + const double y_save = rY[32]; + rY[32] += delta; + const double temp = EvaluateYDerivative32(var_chaste_interface__environment__time_converted, rY); + partialF = (temp-mEvalF[32])/delta; + rY[32] = y_save; + } + return partialF; + } + + std::vector Dynamicwinslow_model_1999FromCellMLGRL2Opt::ComputeDerivedQuantities(double var_chaste_interface__environment__time_converted, const std::vector & rY) + { + // Inputs: + // Time units: millisecond + + + // Mathematics + const double var_membrane__i_Stim_converter = GetIntracellularAreaStimulus(var_chaste_interface__environment__time_converted); // uA_per_cm2 + + std::vector dqs(2); + dqs[0] = var_chaste_interface__environment__time_converted; + dqs[1] = var_membrane__i_Stim_converter; + return dqs; + } + +template<> +void OdeSystemInformation::Initialise(void) +{ + this->mSystemName = "winslow_model_1999"; + this->mFreeVariableName = "environment__time"; + this->mFreeVariableUnits = "millisecond"; + + // rY[0]: + this->mVariableNames.push_back("membrane_voltage"); + this->mVariableUnits.push_back("millivolt"); + this->mInitialConditions.push_back(-96.1638); + + // rY[1]: + this->mVariableNames.push_back("fast_sodium_current_m_gate__m"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.0328302); + + // rY[2]: + this->mVariableNames.push_back("fast_sodium_current_h_gate__h"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.988354); + + // rY[3]: + this->mVariableNames.push_back("fast_sodium_current_j_gate__j"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.99254); + + // rY[4]: + this->mVariableNames.push_back("rapid_activating_delayed_rectifiyer_K_current_X_kr_gate__X_kr"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.51); + + // rY[5]: + this->mVariableNames.push_back("slow_activating_delayed_rectifiyer_K_current_X_ks_gate__X_ks"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.264); + + // rY[6]: + this->mVariableNames.push_back("transient_outward_potassium_current_X_to1_gate__X_to1"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(2.63); + + // rY[7]: + this->mVariableNames.push_back("transient_outward_potassium_current_Y_to1_gate__Y_to1"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.99); + + // rY[8]: + this->mVariableNames.push_back("L_type_Ca_current__O"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(9.84546e-21); + + // rY[9]: + this->mVariableNames.push_back("L_type_Ca_current__O_Ca"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.0); + + // rY[10]: + this->mVariableNames.push_back("L_type_Ca_current__C0"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.997208); + + // rY[11]: + this->mVariableNames.push_back("L_type_Ca_current__C1"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(6.38897e-05); + + // rY[12]: + this->mVariableNames.push_back("L_type_Ca_current__C2"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(1.535e-09); + + // rY[13]: + this->mVariableNames.push_back("L_type_Ca_current__C3"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(1.63909e-14); + + // rY[14]: + this->mVariableNames.push_back("L_type_Ca_current__C4"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(6.56337e-20); + + // rY[15]: + this->mVariableNames.push_back("L_type_Ca_current__C_Ca0"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.00272826); + + // rY[16]: + this->mVariableNames.push_back("L_type_Ca_current__C_Ca1"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(6.99215e-07); + + // rY[17]: + this->mVariableNames.push_back("L_type_Ca_current__C_Ca2"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(6.71989e-11); + + // rY[18]: + this->mVariableNames.push_back("L_type_Ca_current__C_Ca3"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(2.87031e-15); + + // rY[19]: + this->mVariableNames.push_back("L_type_Ca_current__C_Ca4"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(4.59752e-20); + + // rY[20]: + this->mVariableNames.push_back("L_type_Ca_current_y_gate__y"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.798); + + // rY[21]: + this->mVariableNames.push_back("RyR_channel__P_O1"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.0); + + // rY[22]: + this->mVariableNames.push_back("RyR_channel__P_O2"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.0); + + // rY[23]: + this->mVariableNames.push_back("RyR_channel__P_C1"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.47); + + // rY[24]: + this->mVariableNames.push_back("RyR_channel__P_C2"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.53); + + // rY[25]: + this->mVariableNames.push_back("intracellular_Ca_fluxes__HTRPNCa"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(0.98); + + // rY[26]: + this->mVariableNames.push_back("intracellular_Ca_fluxes__LTRPNCa"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(0.078); + + // rY[27]: + this->mVariableNames.push_back("intracellular_ion_concentrations__Nai"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(10.0); + + // rY[28]: + this->mVariableNames.push_back("intracellular_ion_concentrations__Cai"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(8e-05); + + // rY[29]: + this->mVariableNames.push_back("intracellular_ion_concentrations__Ki"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(157.8); + + // rY[30]: + this->mVariableNames.push_back("intracellular_ion_concentrations__Ca_ss"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(0.00011); + + // rY[31]: + this->mVariableNames.push_back("intracellular_ion_concentrations__Ca_JSR"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(0.257); + + // rY[32]: + this->mVariableNames.push_back("intracellular_ion_concentrations__Ca_NSR"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(0.257); + + // Derived Quantity index [0]: + this->mDerivedQuantityNames.push_back("environment__time"); + this->mDerivedQuantityUnits.push_back("millisecond"); + + // Derived Quantity index [1]: + this->mDerivedQuantityNames.push_back("membrane_stimulus_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + + this->mAttributes["SuggestedForwardEulerTimestep"] = 0.0001; + this->mInitialised = true; +} + +// Serialization for Boost >= 1.36 +#include "SerializationExportWrapperForCpp.hpp" +CHASTE_CLASS_EXPORT(Dynamicwinslow_model_1999FromCellMLGRL2Opt) +extern "C" +{ + AbstractCardiacCellInterface* MakeCardiacCell( + boost::shared_ptr pSolver, + boost::shared_ptr pStimulus) + { + return new Dynamicwinslow_model_1999FromCellMLGRL2Opt(pSolver, pStimulus); + } + +} \ No newline at end of file diff --git a/chaste_codegen/tests/numerical/baseline/GRL2Opt/dynamic_winslow_model_1999.hpp b/chaste_codegen/tests/numerical/baseline/GRL2Opt/dynamic_winslow_model_1999.hpp new file mode 100644 index 00000000..224f28d1 --- /dev/null +++ b/chaste_codegen/tests/numerical/baseline/GRL2Opt/dynamic_winslow_model_1999.hpp @@ -0,0 +1,148 @@ +#ifndef DYNAMICWINSLOW_MODEL_1999FROMCELLMLGRL2OPT_HPP_ +#define DYNAMICWINSLOW_MODEL_1999FROMCELLMLGRL2OPT_HPP_ + +//! @file +//! +//! This source file was generated from CellML by chaste_codegen version (version omitted as unimportant) +//! +//! Model: winslow_model_1999 +//! +//! Processed by chaste_codegen: https://github.com/ModellingWebLab/chaste-codegen +//! (translator: chaste_codegen, model type: GeneralizedRushLarsenSecondOrderOpt) +//! on (date omitted as unimportant) +//! +//! + +#include "ChasteSerialization.hpp" +#include +#include "AbstractDynamicallyLoadableEntity.hpp" +#include "AbstractStimulusFunction.hpp" +#include "AbstractGeneralizedRushLarsenCardiacCell.hpp" + +class Dynamicwinslow_model_1999FromCellMLGRL2Opt : public AbstractGeneralizedRushLarsenCardiacCell, public AbstractDynamicallyLoadableEntity +{ + friend class boost::serialization::access; + template + void serialize(Archive & archive, const unsigned int version) + { + archive & boost::serialization::base_object(*this); + archive & boost::serialization::base_object(*this); + } + + // + // Settable parameters and readable variables + // + +public: + + boost::shared_ptr UseCellMLDefaultStimulus(); + Dynamicwinslow_model_1999FromCellMLGRL2Opt(boost::shared_ptr /* unused; should be empty */, boost::shared_ptr pIntracellularStimulus); + ~Dynamicwinslow_model_1999FromCellMLGRL2Opt(); + double GetIIonic(const std::vector* pStateVariables=NULL); + void UpdateTransmembranePotential(double var_chaste_interface__environment__time_converted); + void ComputeOneStepExceptVoltage(double var_chaste_interface__environment__time_converted); + + double EvaluateYDerivative0(double var_chaste_interface__environment__time_converted, std::vector& rY); + double EvaluatePartialDerivative0(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative1(double var_chaste_interface__environment__time_converted, std::vector& rY); + double EvaluatePartialDerivative1(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative2(double var_chaste_interface__environment__time_converted, std::vector& rY); + double EvaluatePartialDerivative2(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative3(double var_chaste_interface__environment__time_converted, std::vector& rY); + double EvaluatePartialDerivative3(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative4(double var_chaste_interface__environment__time_converted, std::vector& rY); + double EvaluatePartialDerivative4(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative5(double var_chaste_interface__environment__time_converted, std::vector& rY); + double EvaluatePartialDerivative5(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative6(double var_chaste_interface__environment__time_converted, std::vector& rY); + double EvaluatePartialDerivative6(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative7(double var_chaste_interface__environment__time_converted, std::vector& rY); + double EvaluatePartialDerivative7(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative8(double var_chaste_interface__environment__time_converted, std::vector& rY); + double EvaluatePartialDerivative8(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative9(double var_chaste_interface__environment__time_converted, std::vector& rY); + double EvaluatePartialDerivative9(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative10(double var_chaste_interface__environment__time_converted, std::vector& rY); + double EvaluatePartialDerivative10(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative11(double var_chaste_interface__environment__time_converted, std::vector& rY); + double EvaluatePartialDerivative11(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative12(double var_chaste_interface__environment__time_converted, std::vector& rY); + double EvaluatePartialDerivative12(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative13(double var_chaste_interface__environment__time_converted, std::vector& rY); + double EvaluatePartialDerivative13(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative14(double var_chaste_interface__environment__time_converted, std::vector& rY); + double EvaluatePartialDerivative14(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative15(double var_chaste_interface__environment__time_converted, std::vector& rY); + double EvaluatePartialDerivative15(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative16(double var_chaste_interface__environment__time_converted, std::vector& rY); + double EvaluatePartialDerivative16(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative17(double var_chaste_interface__environment__time_converted, std::vector& rY); + double EvaluatePartialDerivative17(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative18(double var_chaste_interface__environment__time_converted, std::vector& rY); + double EvaluatePartialDerivative18(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative19(double var_chaste_interface__environment__time_converted, std::vector& rY); + double EvaluatePartialDerivative19(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative20(double var_chaste_interface__environment__time_converted, std::vector& rY); + double EvaluatePartialDerivative20(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative21(double var_chaste_interface__environment__time_converted, std::vector& rY); + double EvaluatePartialDerivative21(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative22(double var_chaste_interface__environment__time_converted, std::vector& rY); + double EvaluatePartialDerivative22(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative23(double var_chaste_interface__environment__time_converted, std::vector& rY); + double EvaluatePartialDerivative23(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative24(double var_chaste_interface__environment__time_converted, std::vector& rY); + double EvaluatePartialDerivative24(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative25(double var_chaste_interface__environment__time_converted, std::vector& rY); + double EvaluatePartialDerivative25(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative26(double var_chaste_interface__environment__time_converted, std::vector& rY); + double EvaluatePartialDerivative26(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative27(double var_chaste_interface__environment__time_converted, std::vector& rY); + double EvaluatePartialDerivative27(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative28(double var_chaste_interface__environment__time_converted, std::vector& rY); + double EvaluatePartialDerivative28(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative29(double var_chaste_interface__environment__time_converted, std::vector& rY); + double EvaluatePartialDerivative29(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative30(double var_chaste_interface__environment__time_converted, std::vector& rY); + double EvaluatePartialDerivative30(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative31(double var_chaste_interface__environment__time_converted, std::vector& rY); + double EvaluatePartialDerivative31(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative32(double var_chaste_interface__environment__time_converted, std::vector& rY); + double EvaluatePartialDerivative32(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical=false); + + std::vector ComputeDerivedQuantities(double var_chaste_interface__environment__time_converted, const std::vector & rY); +}; + +// Needs to be included last +#include "SerializationExportWrapper.hpp" +CHASTE_CLASS_EXPORT(Dynamicwinslow_model_1999FromCellMLGRL2Opt) + +namespace boost +{ + namespace serialization + { + template + inline void save_construct_data( + Archive & ar, const Dynamicwinslow_model_1999FromCellMLGRL2Opt * t, const unsigned int fileVersion) + { + const boost::shared_ptr p_solver = t->GetSolver(); + const boost::shared_ptr p_stimulus = t->GetStimulusFunction(); + ar << p_solver; + ar << p_stimulus; + } + + template + inline void load_construct_data( + Archive & ar, Dynamicwinslow_model_1999FromCellMLGRL2Opt * t, const unsigned int fileVersion) + { + boost::shared_ptr p_solver; + boost::shared_ptr p_stimulus; + ar >> p_solver; + ar >> p_stimulus; + ::new(t)Dynamicwinslow_model_1999FromCellMLGRL2Opt(p_solver, p_stimulus); + } + + } + +} + +#endif // DYNAMICWINSLOW_MODEL_1999FROMCELLMLGRL2OPT_HPP_ \ No newline at end of file diff --git a/chaste_codegen/tests/numerical/baseline/GRL2Opt/hodgkin_huxley_squid_axon_model_1952_modified.cpp b/chaste_codegen/tests/numerical/baseline/GRL2Opt/hodgkin_huxley_squid_axon_model_1952_modified.cpp new file mode 100644 index 00000000..b5ce4347 --- /dev/null +++ b/chaste_codegen/tests/numerical/baseline/GRL2Opt/hodgkin_huxley_squid_axon_model_1952_modified.cpp @@ -0,0 +1,840 @@ +//! @file +//! +//! This source file was generated from CellML by chaste_codegen version (version omitted as unimportant) +//! +//! Model: hodgkin_huxley_squid_axon_model_1952_modified +//! +//! Processed by chaste_codegen: https://github.com/ModellingWebLab/chaste-codegen +//! (translator: chaste_codegen, model type: GeneralizedRushLarsenSecondOrderOpt) +//! on (date omitted as unimportant) +//! +//! + +#include "hodgkin_huxley_squid_axon_model_1952_modified.hpp" +#include +#include +#include +#include +#include "Exception.hpp" +#include "OdeSystemInformation.hpp" +#include "RegularStimulus.hpp" +#include "HeartConfig.hpp" +#include "IsNan.hpp" +#include "MathsCustomFunctions.hpp" + + + +class Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLGRL2Opt_LookupTables : public AbstractLookupTableCollection +{ +public: + static Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLGRL2Opt_LookupTables* Instance() + { + if (mpInstance.get() == NULL) + { + mpInstance.reset(new Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLGRL2Opt_LookupTables); + } + return mpInstance.get(); + } + + void FreeMemory() + { + + if (_lookup_table_0) + { + delete[] _lookup_table_0; + _lookup_table_0 = NULL; + } + + mNeedsRegeneration.assign(mNeedsRegeneration.size(), true); + } + + // Row lookup methods + // using linear-interpolation + + double* _lookup_0_row(unsigned i, double _factor_) + { + for (unsigned j=0; j<6; j++) + { + const double y1 = _lookup_table_0[i][j]; + const double y2 = _lookup_table_0[i+1][j]; + _lookup_table_0_row[j] = y1 + (y2-y1)*_factor_; + } + return _lookup_table_0_row; + } + + + const double * IndexTable0(double var_chaste_interface__membrane__V) + { + const double _offset_0 = var_chaste_interface__membrane__V - mTableMins[0]; + const double _offset_0_over_table_step = _offset_0 * mTableStepInverses[0]; + const unsigned _table_index_0 = (unsigned)(_offset_0_over_table_step); + const double _factor_0 = _offset_0_over_table_step - _table_index_0; + const double* const _lt_0_row = Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLGRL2Opt_LookupTables::Instance()->_lookup_0_row(_table_index_0, _factor_0); + return _lt_0_row; + } + + +// LCOV_EXCL_START + bool CheckIndex0(double& var_chaste_interface__membrane__V) + { + bool _oob_0 = false; + if (var_chaste_interface__membrane__V>mTableMaxs[0] || var_chaste_interface__membrane__V= -9.9999999999999995e-8) && (6.5 + 0.10000000000000001 * var_chaste_interface__membrane__V <= 9.9999999999999995e-8)) ? (0.42499999999999999 + 0.0050000000000000001 * var_chaste_interface__membrane__V) : (-0.099999999999999992 * (6.5 + 0.10000000000000001 * var_chaste_interface__membrane__V) / (-1 + exp(-6.5 - 0.10000000000000001 * var_chaste_interface__membrane__V)))); + }; + const double var_chaste_interface__membrane__V = mTableMins[0] + i*mTableSteps[0]; + double val = f(var_chaste_interface__membrane__V); + //Expressions which are part of a piecewise could be inf / nan, this is generally accptable, due to the piecewise, however occasionally interpolation of the lookup table from a nan/inf version can give problems. + //To avoid this values stored in the table are intrpolated. Occurances of this to at most 2 per expression. + if (!std::isfinite(val) && _lookup_table_0_num_misshit_piecewise[0] < 2){ + double left = f(var_chaste_interface__membrane__V - mTableSteps[0]); + double right = f(var_chaste_interface__membrane__V + mTableSteps[0]); + val = (left + right) / 2.0; + // count and limit number of misshits + _lookup_table_0_num_misshit_piecewise[0] +=1; + } + else if (!std::isfinite(val) && _lookup_table_0_num_misshit_piecewise[0] >= 2){ + EXCEPTION("Lookup table 0 at ["<= -9.9999999999999995e-8) && (5 + 0.10000000000000001 * var_chaste_interface__membrane__V <= 9.9999999999999995e-8)) ? (3.5 + 0.050000000000000003 * var_chaste_interface__membrane__V) : (-(5 + 0.10000000000000001 * var_chaste_interface__membrane__V) / (-1 + exp(-5 - 0.10000000000000001 * var_chaste_interface__membrane__V)))); + }; + const double var_chaste_interface__membrane__V = mTableMins[0] + i*mTableSteps[0]; + double val = f(var_chaste_interface__membrane__V); + //Expressions which are part of a piecewise could be inf / nan, this is generally accptable, due to the piecewise, however occasionally interpolation of the lookup table from a nan/inf version can give problems. + //To avoid this values stored in the table are intrpolated. Occurances of this to at most 2 per expression. + if (!std::isfinite(val) && _lookup_table_0_num_misshit_piecewise[4] < 2){ + double left = f(var_chaste_interface__membrane__V - mTableSteps[0]); + double right = f(var_chaste_interface__membrane__V + mTableSteps[0]); + val = (left + right) / 2.0; + // count and limit number of misshits + _lookup_table_0_num_misshit_piecewise[4] +=1; + } + else if (!std::isfinite(val) && _lookup_table_0_num_misshit_piecewise[4] >= 2){ + EXCEPTION("Lookup table 4 at ["< mpInstance; + + // Row lookup methods memory + double _lookup_table_0_row[6]; + + // Lookup tables + double (*_lookup_table_0)[6]; + int _lookup_table_0_num_misshit_piecewise[6] = {0}; + +}; + +std::shared_ptr Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLGRL2Opt_LookupTables::mpInstance; + + + boost::shared_ptr Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLGRL2Opt::UseCellMLDefaultStimulus() + { + // Use the default stimulus specified by CellML metadata + const double var_chaste_interface__membrane__stim_amplitude = -20; // microA_per_cm2 + const double var_chaste_interface__membrane__stim_duration = 0.5; // millisecond + const double var_chaste_interface__membrane__stim_period = 1000; // millisecond + const double var_chaste_interface__membrane__stim_start = 10; // millisecond + boost::shared_ptr p_cellml_stim(new RegularStimulus( + -fabs(var_chaste_interface__membrane__stim_amplitude), + var_chaste_interface__membrane__stim_duration, + var_chaste_interface__membrane__stim_period, + var_chaste_interface__membrane__stim_start + )); + mpIntracellularStimulus = p_cellml_stim; + return p_cellml_stim; + } + + Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLGRL2Opt::Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLGRL2Opt(boost::shared_ptr /* unused; should be empty */, boost::shared_ptr pIntracellularStimulus) + : AbstractGeneralizedRushLarsenCardiacCell( + 4, + 0, + pIntracellularStimulus) + { + // Time units: millisecond + // + this->mpSystemInfo = OdeSystemInformation::Instance(); + Init(); + + // We have a default stimulus specified in the CellML file metadata + this->mHasDefaultStimulusFromCellML = true; + + this->mParameters[0] = 1; // (var_membrane__Cm) [microF_per_cm2] + this->mParameters[1] = 120; // (var_sodium_channel__g_Na) [milliS_per_cm2] + this->mParameters[2] = 0.29999999999999999; // (var_leakage_current__g_L) [milliS_per_cm2] + this->mParameters[3] = 36; // (var_potassium_channel__g_K) [milliS_per_cm2] + } + + Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLGRL2Opt::~Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLGRL2Opt() + { + } + + AbstractLookupTableCollection* Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLGRL2Opt::GetLookupTableCollection() + { + return Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLGRL2Opt_LookupTables::Instance(); + } + + void Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLGRL2Opt::VerifyStateVariables() + { + std::vector& rY = rGetStateVariables(); + std::string error_message = ""; + + for (unsigned i=0; i < 4; i++) + { + if(std::isnan(rY[i])) + { + error_message += "State variable " + this->rGetStateVariableNames()[i] + " is not a number\n"; + } + if(std::isinf(rY[i])) + { + error_message += "State variable " + this->rGetStateVariableNames()[i] + " has become INFINITE\n"; + } + if(this->is_concentration[i] && rY[i] < 0) + { + error_message += "Concentration " + this->rGetStateVariableNames()[i] + " below 0\n"; + } + if(this->is_probability[i] && rY[i] < 0) + { + error_message += "Probability " + this->rGetStateVariableNames()[i] + " below 0\n"; + } + if(this->is_probability[i] && rY[i] > 1) + { + error_message += "Probability " + this->rGetStateVariableNames()[i] + " above 1\n"; + } + } + if (error_message != ""){ + EXCEPTION(DumpState(error_message)); + } + } + + double Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLGRL2Opt::GetIIonic(const std::vector* pStateVariables) + { + // For state variable interpolation (SVI) we read in interpolated state variables, + // otherwise for ionic current interpolation (ICI) we use the state variables of this model (node). + if (!pStateVariables) pStateVariables = &rGetStateVariables(); + const std::vector& rY = *pStateVariables; + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -75.0 + double var_chaste_interface__sodium_channel_m_gate__m = rY[1]; + // Units: dimensionless; Initial value: 0.05 + double var_chaste_interface__sodium_channel_h_gate__h = rY[2]; + // Units: dimensionless; Initial value: 0.6 + double var_chaste_interface__potassium_channel_n_gate__n = rY[3]; + // Units: dimensionless; Initial value: 0.325 + + + const double var_leakage_current__i_L = (64.387 + var_chaste_interface__membrane__V) * mParameters[2]; // microA_per_cm2 + const double var_potassium_channel__i_K = pow(var_chaste_interface__potassium_channel_n_gate__n, 4) * (87 + var_chaste_interface__membrane__V) * mParameters[3]; // microA_per_cm2 + const double var_sodium_channel__i_Na = pow(var_chaste_interface__sodium_channel_m_gate__m, 3) * (-40 + var_chaste_interface__membrane__V) * mParameters[1] * var_chaste_interface__sodium_channel_h_gate__h; // microA_per_cm2 + const double var_chaste_interface__i_ionic = var_leakage_current__i_L + var_potassium_channel__i_K + var_sodium_channel__i_Na; // uA_per_cm2 + + const double i_ionic = var_chaste_interface__i_ionic; + EXCEPT_IF_NOT(!std::isnan(i_ionic)); + return i_ionic; + } + + void Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLGRL2Opt::UpdateTransmembranePotential(double var_chaste_interface__environment__time) + { + std::vector& rY = rGetStateVariables(); + const unsigned v_index = GetVoltageIndex(); + const double delta = 1e-8; + const double yinit = rY[v_index]; + + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -75.0 + double var_chaste_interface__sodium_channel_m_gate__m = rY[1]; + // Units: dimensionless; Initial value: 0.05 + double var_chaste_interface__sodium_channel_h_gate__h = rY[2]; + // Units: dimensionless; Initial value: 0.6 + double var_chaste_interface__potassium_channel_n_gate__n = rY[3]; + // Units: dimensionless; Initial value: 0.325 + + + + // Mathematics + double d_dt_chaste_interface_var_membrane__V; + d_dt_chaste_interface_var_membrane__V = (-GetIntracellularAreaStimulus(var_chaste_interface__environment__time) - (64.387 + var_chaste_interface__membrane__V) * mParameters[2] - pow(var_chaste_interface__potassium_channel_n_gate__n, 4) * (87 + var_chaste_interface__membrane__V) * mParameters[3] - pow(var_chaste_interface__sodium_channel_m_gate__m, 3) * (-40 + var_chaste_interface__membrane__V) * mParameters[1] * var_chaste_interface__sodium_channel_h_gate__h) / mParameters[0]; // millivolt / millisecond + + double evalF = d_dt_chaste_interface_var_membrane__V; + mEvalF[0] = d_dt_chaste_interface_var_membrane__V; + double partialF = EvaluatePartialDerivative0(var_chaste_interface__environment__time, rY, delta, true); + if (fabs(partialF) < delta) + { + rY[v_index] += 0.5*evalF*mDt; + } + else + { + rY[v_index] += (evalF/partialF)*(exp(partialF*0.5*mDt)-1.0); + } + + rY[v_index] = yinit; + evalF = EvaluateYDerivative0(var_chaste_interface__environment__time, rY); + mEvalF[0] = evalF; + partialF = EvaluatePartialDerivative0(var_chaste_interface__environment__time, rY, delta, true); + if (fabs(partialF) < delta) + { + rY[v_index] = yinit + evalF*mDt; + } + else + { + rY[v_index] = yinit + (evalF/partialF)*(exp(partialF*mDt)-1.0); + } + } + + void Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLGRL2Opt::ComputeOneStepExceptVoltage(double var_chaste_interface__environment__time) + { + std::vector& rY = rGetStateVariables(); + const double delta=1e-8; + const unsigned size = GetNumberOfStateVariables(); + mYInit = rY; + double y_save; + + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -75.0 + double var_chaste_interface__sodium_channel_m_gate__m = rY[1]; + // Units: dimensionless; Initial value: 0.05 + double var_chaste_interface__sodium_channel_h_gate__h = rY[2]; + // Units: dimensionless; Initial value: 0.6 + double var_chaste_interface__potassium_channel_n_gate__n = rY[3]; + // Units: dimensionless; Initial value: 0.325 + + + // Lookup table indexing + const bool _oob_0 = Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLGRL2Opt_LookupTables::Instance()->CheckIndex0(var_chaste_interface__membrane__V); +// LCOV_EXCL_START + if (_oob_0) + EXCEPTION(DumpState("membrane_voltage outside lookup table range", rY , var_chaste_interface__environment__time)); +// LCOV_EXCL_STOP + const double* const _lt_0_row = Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLGRL2Opt_LookupTables::Instance()->IndexTable0(var_chaste_interface__membrane__V); + + // Mathematics + double d_dt_chaste_interface_var_membrane__V; + const double d_dt_chaste_interface_var_potassium_channel_n_gate__n = (1 - var_chaste_interface__potassium_channel_n_gate__n) * _lt_0_row[0] - 0.125 * var_chaste_interface__potassium_channel_n_gate__n * _lt_0_row[1]; // 1 / millisecond + const double d_dt_chaste_interface_var_sodium_channel_h_gate__h = 0.070000000000000007 * (1 - var_chaste_interface__sodium_channel_h_gate__h) * _lt_0_row[2] - var_chaste_interface__sodium_channel_h_gate__h / (_lt_0_row[3]); // 1 / millisecond + const double d_dt_chaste_interface_var_sodium_channel_m_gate__m = (1 - var_chaste_interface__sodium_channel_m_gate__m) * _lt_0_row[4] - 4 * var_chaste_interface__sodium_channel_m_gate__m * _lt_0_row[5]; // 1 / millisecond + + if (mSetVoltageDerivativeToZero) + { + d_dt_chaste_interface_var_membrane__V = 0.0; + } + else + { + d_dt_chaste_interface_var_membrane__V = (-GetIntracellularAreaStimulus(var_chaste_interface__environment__time) - (64.387 + var_chaste_interface__membrane__V) * mParameters[2] - pow(var_chaste_interface__potassium_channel_n_gate__n, 4) * (87 + var_chaste_interface__membrane__V) * mParameters[3] - pow(var_chaste_interface__sodium_channel_m_gate__m, 3) * (-40 + var_chaste_interface__membrane__V) * mParameters[1] * var_chaste_interface__sodium_channel_h_gate__h) / mParameters[0]; // millivolt / millisecond + } + + mEvalF[0] = d_dt_chaste_interface_var_membrane__V; + mEvalF[1] = d_dt_chaste_interface_var_sodium_channel_m_gate__m; + mEvalF[2] = d_dt_chaste_interface_var_sodium_channel_h_gate__h; + mEvalF[3] = d_dt_chaste_interface_var_potassium_channel_n_gate__n; + + + mPartialF[0] = EvaluatePartialDerivative0(var_chaste_interface__environment__time, rY, delta); + mPartialF[1] = EvaluatePartialDerivative1(var_chaste_interface__environment__time, rY, delta); + mPartialF[2] = EvaluatePartialDerivative2(var_chaste_interface__environment__time, rY, delta); + mPartialF[3] = EvaluatePartialDerivative3(var_chaste_interface__environment__time, rY, delta); + for (unsigned var=0; var& rY) + { + double d_dt_chaste_interface_var_membrane__V; + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -75.0 + double var_chaste_interface__sodium_channel_m_gate__m = rY[1]; + // Units: dimensionless; Initial value: 0.05 + double var_chaste_interface__sodium_channel_h_gate__h = rY[2]; + // Units: dimensionless; Initial value: 0.6 + double var_chaste_interface__potassium_channel_n_gate__n = rY[3]; + // Units: dimensionless; Initial value: 0.325 + + + + // Mathematics + d_dt_chaste_interface_var_membrane__V = (-GetIntracellularAreaStimulus(var_chaste_interface__environment__time) - (64.387 + var_chaste_interface__membrane__V) * mParameters[2] - pow(var_chaste_interface__potassium_channel_n_gate__n, 4) * (87 + var_chaste_interface__membrane__V) * mParameters[3] - pow(var_chaste_interface__sodium_channel_m_gate__m, 3) * (-40 + var_chaste_interface__membrane__V) * mParameters[1] * var_chaste_interface__sodium_channel_h_gate__h) / mParameters[0]; // millivolt / millisecond + + return d_dt_chaste_interface_var_membrane__V; + } + + double Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLGRL2Opt::EvaluatePartialDerivative0(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__sodium_channel_m_gate__m = rY[1]; + // Units: dimensionless; Initial value: 0.05 + double var_chaste_interface__sodium_channel_h_gate__h = rY[2]; + // Units: dimensionless; Initial value: 0.6 + double var_chaste_interface__potassium_channel_n_gate__n = rY[3]; + // Units: dimensionless; Initial value: 0.325 + + + + const double var_x0 = 1 / mParameters[0]; + const double var_x1 = pow(var_chaste_interface__sodium_channel_m_gate__m, 3) * mParameters[1]; + + partialF = var_x0 * (-mParameters[2] - var_x1 * var_chaste_interface__sodium_channel_h_gate__h - pow(var_chaste_interface__potassium_channel_n_gate__n, 4) * mParameters[3]); + } + else + { + const double y_save = rY[0]; + rY[0] += delta; + const double temp = EvaluateYDerivative0(var_chaste_interface__environment__time, rY); + partialF = (temp-mEvalF[0])/delta; + rY[0] = y_save; + } + return partialF; + } + double Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLGRL2Opt::EvaluateYDerivative1(double var_chaste_interface__environment__time, std::vector& rY) + { + + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -75.0 + double var_chaste_interface__sodium_channel_m_gate__m = rY[1]; + // Units: dimensionless; Initial value: 0.05 + + + // Lookup table indexing + const bool _oob_0 = Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLGRL2Opt_LookupTables::Instance()->CheckIndex0(var_chaste_interface__membrane__V); +// LCOV_EXCL_START + if (_oob_0) + EXCEPTION(DumpState("membrane_voltage outside lookup table range", rY , var_chaste_interface__environment__time)); +// LCOV_EXCL_STOP + const double* const _lt_0_row = Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLGRL2Opt_LookupTables::Instance()->IndexTable0(var_chaste_interface__membrane__V); + + // Mathematics + const double d_dt_chaste_interface_var_sodium_channel_m_gate__m = (1 - var_chaste_interface__sodium_channel_m_gate__m) * _lt_0_row[4] - 4 * var_chaste_interface__sodium_channel_m_gate__m * _lt_0_row[5]; // 1 / millisecond + + return d_dt_chaste_interface_var_sodium_channel_m_gate__m; + } + + double Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLGRL2Opt::EvaluatePartialDerivative1(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -75.0 + + + // Lookup table indexing + const bool _oob_0 = Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLGRL2Opt_LookupTables::Instance()->CheckIndex0(var_chaste_interface__membrane__V); +// LCOV_EXCL_START + if (_oob_0) + EXCEPTION(DumpState("membrane_voltage outside lookup table range", rY , var_chaste_interface__environment__time)); +// LCOV_EXCL_STOP + const double* const _lt_0_row = Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLGRL2Opt_LookupTables::Instance()->IndexTable0(var_chaste_interface__membrane__V); + + const double var_x3 = _lt_0_row[5]; + const double var_x4 = 0.10000000000000001 * var_chaste_interface__membrane__V; + const double var_x5 = 5 + var_x4; + const double var_x6 = (var_x5 >= -9.9999999999999995e-8) && (var_x5 <= 9.9999999999999995e-8); + const double var_x7 = exp(-var_x5); + const double var_x8 = -1 + var_x7; + const double var_x9 = 1 / var_x8; + const double var_x11 = 4 * var_x3; + + partialF = ((var_x6) ? (-3.5 - var_x11 - 0.050000000000000003 * var_chaste_interface__membrane__V) : (-var_x11 + var_x5 * var_x9)); + } + else + { + const double y_save = rY[1]; + rY[1] += delta; + const double temp = EvaluateYDerivative1(var_chaste_interface__environment__time, rY); + partialF = (temp-mEvalF[1])/delta; + rY[1] = y_save; + } + return partialF; + } + double Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLGRL2Opt::EvaluateYDerivative2(double var_chaste_interface__environment__time, std::vector& rY) + { + + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -75.0 + double var_chaste_interface__sodium_channel_h_gate__h = rY[2]; + // Units: dimensionless; Initial value: 0.6 + + + // Lookup table indexing + const bool _oob_0 = Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLGRL2Opt_LookupTables::Instance()->CheckIndex0(var_chaste_interface__membrane__V); +// LCOV_EXCL_START + if (_oob_0) + EXCEPTION(DumpState("membrane_voltage outside lookup table range", rY , var_chaste_interface__environment__time)); +// LCOV_EXCL_STOP + const double* const _lt_0_row = Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLGRL2Opt_LookupTables::Instance()->IndexTable0(var_chaste_interface__membrane__V); + + // Mathematics + const double d_dt_chaste_interface_var_sodium_channel_h_gate__h = 0.070000000000000007 * (1 - var_chaste_interface__sodium_channel_h_gate__h) * _lt_0_row[2] - var_chaste_interface__sodium_channel_h_gate__h / (_lt_0_row[3]); // 1 / millisecond + + return d_dt_chaste_interface_var_sodium_channel_h_gate__h; + } + + double Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLGRL2Opt::EvaluatePartialDerivative2(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -75.0 + + + // Lookup table indexing + const bool _oob_0 = Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLGRL2Opt_LookupTables::Instance()->CheckIndex0(var_chaste_interface__membrane__V); +// LCOV_EXCL_START + if (_oob_0) + EXCEPTION(DumpState("membrane_voltage outside lookup table range", rY , var_chaste_interface__environment__time)); +// LCOV_EXCL_STOP + const double* const _lt_0_row = Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLGRL2Opt_LookupTables::Instance()->IndexTable0(var_chaste_interface__membrane__V); + + const double var_x12 = _lt_0_row[2]; + const double var_x13 = exp(-4.5 - 0.10000000000000001 * var_chaste_interface__membrane__V); + const double var_x14 = 1 + var_x13; + + partialF = -1 / var_x14 - 0.070000000000000007 * var_x12; + } + else + { + const double y_save = rY[2]; + rY[2] += delta; + const double temp = EvaluateYDerivative2(var_chaste_interface__environment__time, rY); + partialF = (temp-mEvalF[2])/delta; + rY[2] = y_save; + } + return partialF; + } + double Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLGRL2Opt::EvaluateYDerivative3(double var_chaste_interface__environment__time, std::vector& rY) + { + + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -75.0 + double var_chaste_interface__potassium_channel_n_gate__n = rY[3]; + // Units: dimensionless; Initial value: 0.325 + + + // Lookup table indexing + const bool _oob_0 = Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLGRL2Opt_LookupTables::Instance()->CheckIndex0(var_chaste_interface__membrane__V); +// LCOV_EXCL_START + if (_oob_0) + EXCEPTION(DumpState("membrane_voltage outside lookup table range", rY , var_chaste_interface__environment__time)); +// LCOV_EXCL_STOP + const double* const _lt_0_row = Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLGRL2Opt_LookupTables::Instance()->IndexTable0(var_chaste_interface__membrane__V); + + // Mathematics + const double d_dt_chaste_interface_var_potassium_channel_n_gate__n = (1 - var_chaste_interface__potassium_channel_n_gate__n) * _lt_0_row[0] - 0.125 * var_chaste_interface__potassium_channel_n_gate__n * _lt_0_row[1]; // 1 / millisecond + + return d_dt_chaste_interface_var_potassium_channel_n_gate__n; + } + + double Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLGRL2Opt::EvaluatePartialDerivative3(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical) + { + double partialF; + if (!forceNumerical && this->mUseAnalyticJacobian) + { + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -75.0 + + + // Lookup table indexing + const bool _oob_0 = Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLGRL2Opt_LookupTables::Instance()->CheckIndex0(var_chaste_interface__membrane__V); +// LCOV_EXCL_START + if (_oob_0) + EXCEPTION(DumpState("membrane_voltage outside lookup table range", rY , var_chaste_interface__environment__time)); +// LCOV_EXCL_STOP + const double* const _lt_0_row = Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLGRL2Opt_LookupTables::Instance()->IndexTable0(var_chaste_interface__membrane__V); + + const double var_x4 = 0.10000000000000001 * var_chaste_interface__membrane__V; + const double var_x15 = _lt_0_row[1]; + const double var_x17 = 6.5 + var_x4; + const double var_x18 = (var_x17 >= -9.9999999999999995e-8) && (var_x17 <= 9.9999999999999995e-8); + const double var_x19 = exp(-var_x17); + const double var_x20 = -1 + var_x19; + const double var_x21 = 1 / var_x20; + const double var_x23 = 0.125 * var_x15; + + partialF = ((var_x18) ? (-0.42499999999999999 - var_x23 - 0.0050000000000000001 * var_chaste_interface__membrane__V) : (-var_x23 + 0.099999999999999992 * var_x17 * var_x21)); + } + else + { + const double y_save = rY[3]; + rY[3] += delta; + const double temp = EvaluateYDerivative3(var_chaste_interface__environment__time, rY); + partialF = (temp-mEvalF[3])/delta; + rY[3] = y_save; + } + return partialF; + } + + std::vector Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLGRL2Opt::ComputeDerivedQuantities(double var_chaste_interface__environment__time, const std::vector & rY) + { + // Inputs: + // Time units: millisecond + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -75.0 + double var_chaste_interface__sodium_channel_m_gate__m = rY[1]; + // Units: dimensionless; Initial value: 0.05 + double var_chaste_interface__sodium_channel_h_gate__h = rY[2]; + // Units: dimensionless; Initial value: 0.6 + double var_chaste_interface__potassium_channel_n_gate__n = rY[3]; + // Units: dimensionless; Initial value: 0.325 + + + // Mathematics + const double var_membrane__E_R = -75; // millivolt + const double var_leakage_current__E_L = 10.613 + var_membrane__E_R; // millivolt + const double var_leakage_current__i_L = (-var_leakage_current__E_L + var_chaste_interface__membrane__V) * mParameters[2]; // microA_per_cm2 + const double var_membrane__i_Stim = GetIntracellularAreaStimulus(var_chaste_interface__environment__time); // microA_per_cm2 + const double var_potassium_channel__E_K = -12 + var_membrane__E_R; // millivolt + const double var_potassium_channel__i_K = pow(var_chaste_interface__potassium_channel_n_gate__n, 4) * (-var_potassium_channel__E_K + var_chaste_interface__membrane__V) * mParameters[3]; // microA_per_cm2 + const double var_sodium_channel__E_Na = 115 + var_membrane__E_R; // millivolt + const double var_sodium_channel__i_Na = pow(var_chaste_interface__sodium_channel_m_gate__m, 3) * (-var_sodium_channel__E_Na + var_chaste_interface__membrane__V) * mParameters[1] * var_chaste_interface__sodium_channel_h_gate__h; // microA_per_cm2 + + std::vector dqs(5); + dqs[0] = var_sodium_channel__i_Na; + dqs[1] = var_leakage_current__i_L; + dqs[2] = var_potassium_channel__i_K; + dqs[3] = var_membrane__i_Stim; + dqs[4] = var_chaste_interface__environment__time; + return dqs; + } + +template<> +void OdeSystemInformation::Initialise(void) +{ + this->mSystemName = "hodgkin_huxley_squid_axon_model_1952_modified"; + this->mFreeVariableName = "time"; + this->mFreeVariableUnits = "millisecond"; + + // rY[0]: + this->mVariableNames.push_back("membrane_voltage"); + this->mVariableUnits.push_back("millivolt"); + this->mInitialConditions.push_back(-75.0); + + // rY[1]: + this->mVariableNames.push_back("sodium_channel_m_gate__m"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.05); + + // rY[2]: + this->mVariableNames.push_back("sodium_channel_h_gate__h"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.6); + + // rY[3]: + this->mVariableNames.push_back("potassium_channel_n_gate__n"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.325); + + // mParameters[0]: + this->mParameterNames.push_back("membrane_capacitance"); + this->mParameterUnits.push_back("microF_per_cm2"); + + // mParameters[1]: + this->mParameterNames.push_back("membrane_fast_sodium_current_conductance"); + this->mParameterUnits.push_back("milliS_per_cm2"); + + // mParameters[2]: + this->mParameterNames.push_back("membrane_leakage_current_conductance"); + this->mParameterUnits.push_back("milliS_per_cm2"); + + // mParameters[3]: + this->mParameterNames.push_back("membrane_potassium_current_conductance"); + this->mParameterUnits.push_back("milliS_per_cm2"); + + // Derived Quantity index [0]: + this->mDerivedQuantityNames.push_back("membrane_fast_sodium_current"); + this->mDerivedQuantityUnits.push_back("microA_per_cm2"); + + // Derived Quantity index [1]: + this->mDerivedQuantityNames.push_back("membrane_leakage_current"); + this->mDerivedQuantityUnits.push_back("microA_per_cm2"); + + // Derived Quantity index [2]: + this->mDerivedQuantityNames.push_back("membrane_potassium_current"); + this->mDerivedQuantityUnits.push_back("microA_per_cm2"); + + // Derived Quantity index [3]: + this->mDerivedQuantityNames.push_back("membrane_stimulus_current"); + this->mDerivedQuantityUnits.push_back("microA_per_cm2"); + + // Derived Quantity index [4]: + this->mDerivedQuantityNames.push_back("time"); + this->mDerivedQuantityUnits.push_back("millisecond"); + + this->mInitialised = true; +} + +// Serialization for Boost >= 1.36 +#include "SerializationExportWrapperForCpp.hpp" +CHASTE_CLASS_EXPORT(Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLGRL2Opt) + diff --git a/chaste_codegen/tests/numerical/baseline/GRL2Opt/hodgkin_huxley_squid_axon_model_1952_modified.hpp b/chaste_codegen/tests/numerical/baseline/GRL2Opt/hodgkin_huxley_squid_axon_model_1952_modified.hpp new file mode 100644 index 00000000..119bf02a --- /dev/null +++ b/chaste_codegen/tests/numerical/baseline/GRL2Opt/hodgkin_huxley_squid_axon_model_1952_modified.hpp @@ -0,0 +1,95 @@ +#ifndef CELLHODGKIN_HUXLEY_SQUID_AXON_MODEL_1952_MODIFIEDFROMCELLMLGRL2OPT_HPP_ +#define CELLHODGKIN_HUXLEY_SQUID_AXON_MODEL_1952_MODIFIEDFROMCELLMLGRL2OPT_HPP_ + +//! @file +//! +//! This source file was generated from CellML by chaste_codegen version (version omitted as unimportant) +//! +//! Model: hodgkin_huxley_squid_axon_model_1952_modified +//! +//! Processed by chaste_codegen: https://github.com/ModellingWebLab/chaste-codegen +//! (translator: chaste_codegen, model type: GeneralizedRushLarsenSecondOrderOpt) +//! on (date omitted as unimportant) +//! +//! + +#include "ChasteSerialization.hpp" +#include +#include "AbstractStimulusFunction.hpp" +#include "AbstractGeneralizedRushLarsenCardiacCell.hpp" + +class Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLGRL2Opt : public AbstractGeneralizedRushLarsenCardiacCell +{ + friend class boost::serialization::access; + template + void serialize(Archive & archive, const unsigned int version) + { + archive & boost::serialization::base_object(*this); + + } + + // + // Settable parameters and readable variables + // + + +private: +const bool is_concentration[4] = {false, false, false, false}; +const bool is_probability[4] = {false, false, false, false}; +public: + + boost::shared_ptr UseCellMLDefaultStimulus(); + Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLGRL2Opt(boost::shared_ptr /* unused; should be empty */, boost::shared_ptr pIntracellularStimulus); + ~Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLGRL2Opt(); + void VerifyStateVariables(); + AbstractLookupTableCollection* GetLookupTableCollection(); + double GetIIonic(const std::vector* pStateVariables=NULL); + void UpdateTransmembranePotential(double var_chaste_interface__environment__time); + void ComputeOneStepExceptVoltage(double var_chaste_interface__environment__time); + + double EvaluateYDerivative0(double var_chaste_interface__environment__time, std::vector& rY); + double EvaluatePartialDerivative0(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative1(double var_chaste_interface__environment__time, std::vector& rY); + double EvaluatePartialDerivative1(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative2(double var_chaste_interface__environment__time, std::vector& rY); + double EvaluatePartialDerivative2(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical=false); + double EvaluateYDerivative3(double var_chaste_interface__environment__time, std::vector& rY); + double EvaluatePartialDerivative3(double var_chaste_interface__environment__time, std::vector& rY, double delta, bool forceNumerical=false); + + std::vector ComputeDerivedQuantities(double var_chaste_interface__environment__time, const std::vector & rY); +}; + +// Needs to be included last +#include "SerializationExportWrapper.hpp" +CHASTE_CLASS_EXPORT(Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLGRL2Opt) + +namespace boost +{ + namespace serialization + { + template + inline void save_construct_data( + Archive & ar, const Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLGRL2Opt * t, const unsigned int fileVersion) + { + const boost::shared_ptr p_solver = t->GetSolver(); + const boost::shared_ptr p_stimulus = t->GetStimulusFunction(); + ar << p_solver; + ar << p_stimulus; + } + + template + inline void load_construct_data( + Archive & ar, Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLGRL2Opt * t, const unsigned int fileVersion) + { + boost::shared_ptr p_solver; + boost::shared_ptr p_stimulus; + ar >> p_solver; + ar >> p_stimulus; + ::new(t)Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLGRL2Opt(p_solver, p_stimulus); + } + + } + +} + +#endif // CELLHODGKIN_HUXLEY_SQUID_AXON_MODEL_1952_MODIFIEDFROMCELLMLGRL2OPT_HPP_ \ No newline at end of file diff --git a/chaste_codegen/tests/numerical/baseline/Normal/dynamic_beeler_reuter_model_1977.cpp b/chaste_codegen/tests/numerical/baseline/Normal/dynamic_beeler_reuter_model_1977.cpp new file mode 100644 index 00000000..1434905b --- /dev/null +++ b/chaste_codegen/tests/numerical/baseline/Normal/dynamic_beeler_reuter_model_1977.cpp @@ -0,0 +1,248 @@ +//! @file +//! +//! This source file was generated from CellML by chaste_codegen version (version omitted as unimportant) +//! +//! Model: beeler_reuter_model_1977 +//! +//! Processed by chaste_codegen: https://github.com/ModellingWebLab/chaste-codegen +//! (translator: chaste_codegen, model type: Normal) +//! on (date omitted as unimportant) +//! +//! + +#include "beeler_reuter_model_1977.hpp" +#include +#include +#include +#include "Exception.hpp" +#include "OdeSystemInformation.hpp" +#include "RegularStimulus.hpp" +#include "HeartConfig.hpp" +#include "IsNan.hpp" +#include "MathsCustomFunctions.hpp" + + boost::shared_ptr Cellbeeler_reuter_model_1977FromCellML::UseCellMLDefaultStimulus() + { + // Use the default stimulus specified by CellML metadata + const double var_chaste_interface__stimulus_protocol__IstimAmplitude = 5000000000000007; // uA_per_cm2 + const double var_chaste_interface__stimulus_protocol__IstimPeriod = 1000; // millisecond + const double var_chaste_interface__stimulus_protocol__IstimPulseDuration = 1.0; // millisecond + const double var_chaste_interface__stimulus_protocol__IstimStart = 10; // millisecond + boost::shared_ptr p_cellml_stim(new RegularStimulus( + -fabs(var_chaste_interface__stimulus_protocol__IstimAmplitude), + var_chaste_interface__stimulus_protocol__IstimPulseDuration, + var_chaste_interface__stimulus_protocol__IstimPeriod, + var_chaste_interface__stimulus_protocol__IstimStart + )); + mpIntracellularStimulus = p_cellml_stim; + return p_cellml_stim; + } + double Cellbeeler_reuter_model_1977FromCellML::GetIntracellularCalciumConcentration() + { + return mStateVariables[1]; + } + Cellbeeler_reuter_model_1977FromCellML::Cellbeeler_reuter_model_1977FromCellML(boost::shared_ptr pSolver, boost::shared_ptr pIntracellularStimulus) + : AbstractCardiacCell( + pSolver, + 8, + 0, + pIntracellularStimulus) + { + // Time units: millisecond + // + this->mpSystemInfo = OdeSystemInformation::Instance(); + Init(); + + // We have a default stimulus specified in the CellML file metadata + this->mHasDefaultStimulusFromCellML = true; + + } + + Cellbeeler_reuter_model_1977FromCellML::~Cellbeeler_reuter_model_1977FromCellML() + { + } + + double Cellbeeler_reuter_model_1977FromCellML::GetIIonic(const std::vector* pStateVariables) + { + // For state variable interpolation (SVI) we read in interpolated state variables, + // otherwise for ionic current interpolation (ICI) we use the state variables of this model (node). + if (!pStateVariables) pStateVariables = &rGetStateVariables(); + const std::vector& rY = *pStateVariables; + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: mV; Initial value: -84.624 + double var_chaste_interface__slow_inward_current__Cai = rY[1]; + // Units: concentration_units; Initial value: 0001 + double var_chaste_interface__sodium_current_m_gate__m = rY[2]; + // Units: dimensionless; Initial value: 011 + double var_chaste_interface__sodium_current_h_gate__h = rY[3]; + // Units: dimensionless; Initial value: 0.988 + double var_chaste_interface__sodium_current_j_gate__j = rY[4]; + // Units: dimensionless; Initial value: 0.975 + double var_chaste_interface__slow_inward_current_d_gate__d = rY[5]; + // Units: dimensionless; Initial value: 003 + double var_chaste_interface__slow_inward_current_f_gate__f = rY[6]; + // Units: dimensionless; Initial value: 0.994 + double var_chaste_interface__time_dependent_outward_current_x1_gate__x1 = rY[7]; + // Units: dimensionless; Initial value: 0001 + + const double var_slow_inward_current__E_s = 7.6990712032745758 - 13.028700000000001 * log(var_chaste_interface__slow_inward_current__Cai); // mV + const double var_slow_inward_current__g_s = 00089999999999999998; // mS_per_mm2 + const double var_slow_inward_current__i_s = (-var_slow_inward_current__E_s + var_chaste_interface__membrane__V) * var_slow_inward_current__g_s * var_chaste_interface__slow_inward_current_d_gate__d * var_chaste_interface__slow_inward_current_f_gate__f; // uA_per_mm2 + const double var_sodium_current__E_Na = 50; // mV + const double var_sodium_current__g_Na = 040000000000000001; // mS_per_mm2 + const double var_sodium_current__g_Nac = 3.0000000000000001e-5; // mS_per_mm2 + const double var_sodium_current__i_Na = (-var_sodium_current__E_Na + var_chaste_interface__membrane__V) * (pow(var_chaste_interface__sodium_current_m_gate__m, 3) * var_sodium_current__g_Na * var_chaste_interface__sodium_current_h_gate__h * var_chaste_interface__sodium_current_j_gate__j + var_sodium_current__g_Nac); // uA_per_mm2 + const double var_time_dependent_outward_current__i_x1 = 0080000000000000002 * (-1.0 + exp(3.0800000000000001 + 040000000000000001 * var_chaste_interface__membrane__V)) * var_chaste_interface__time_dependent_outward_current_x1_gate__x1 / exp(1.4000000000000001 + 040000000000000001 * var_chaste_interface__membrane__V); // uA_per_mm2 + const double var_time_independent_outward_current__i_K1 = 014 * (-1.0 + exp(3.3999999999999999 + 040000000000000001 * var_chaste_interface__membrane__V)) / (exp(2.1200000000000001 + 040000000000000001 * var_chaste_interface__membrane__V) + exp(4.2400000000000002 + 080000000000000002 * var_chaste_interface__membrane__V)) + 0007000000000000001 * (23.0 + var_chaste_interface__membrane__V) / (1.0 - exp(-0.92000000000000004 - 040000000000000001 * var_chaste_interface__membrane__V)); // uA_per_mm2 + const double var_chaste_interface__i_ionic = 1000000000000001 * var_slow_inward_current__i_s + 1000000000000001 * var_sodium_current__i_Na + 1000000000000001 * var_time_dependent_outward_current__i_x1 + 1000000000000001 * var_time_independent_outward_current__i_K1; // uA_per_cm2 + + const double i_ionic = var_chaste_interface__i_ionic; + EXCEPT_IF_NOT(!std::isnan(i_ionic)); + return i_ionic; + } + + void Cellbeeler_reuter_model_1977FromCellML::EvaluateYDerivatives(double var_chaste_interface__environment__time, const std::vector& rY, std::vector& rDY) + { + // Inputs: + // Time units: millisecond + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: mV; Initial value: -84.624 + double var_chaste_interface__slow_inward_current__Cai = rY[1]; + // Units: concentration_units; Initial value: 0001 + double var_chaste_interface__sodium_current_m_gate__m = rY[2]; + // Units: dimensionless; Initial value: 011 + double var_chaste_interface__sodium_current_h_gate__h = rY[3]; + // Units: dimensionless; Initial value: 0.988 + double var_chaste_interface__sodium_current_j_gate__j = rY[4]; + // Units: dimensionless; Initial value: 0.975 + double var_chaste_interface__slow_inward_current_d_gate__d = rY[5]; + // Units: dimensionless; Initial value: 003 + double var_chaste_interface__slow_inward_current_f_gate__f = rY[6]; + // Units: dimensionless; Initial value: 0.994 + double var_chaste_interface__time_dependent_outward_current_x1_gate__x1 = rY[7]; + // Units: dimensionless; Initial value: 0001 + + // Mathematics + double d_dt_chaste_interface_var_membrane__V; + const double var_slow_inward_current__E_s = 7.6990712032745758 - 13.028700000000001 * log(var_chaste_interface__slow_inward_current__Cai); // mV + const double var_slow_inward_current__g_s = 00089999999999999998; // mS_per_mm2 + const double var_slow_inward_current_d_gate__alpha_d = 095000000000000001 * exp(050000000000000003 - 01 * var_chaste_interface__membrane__V) / (1.0 + exp(0.35997120230381568 - 071994240460763137 * var_chaste_interface__membrane__V)); // per_ms + const double var_slow_inward_current_d_gate__beta_d = 070000000000000007 * exp(-0.74576271186440679 - 016949152542372881 * var_chaste_interface__membrane__V) / (1.0 + exp(2.2000000000000002 + 050000000000000003 * var_chaste_interface__membrane__V)); // per_ms + const double d_dt_chaste_interface_var_slow_inward_current_d_gate__d = (1.0 - var_chaste_interface__slow_inward_current_d_gate__d) * var_slow_inward_current_d_gate__alpha_d - var_slow_inward_current_d_gate__beta_d * var_chaste_interface__slow_inward_current_d_gate__d; // 1 / ms + const double var_slow_inward_current_f_gate__alpha_f = 012 * exp(-0.224 - 0080000000000000002 * var_chaste_interface__membrane__V) / (1.0 + exp(4.197901049475262 + 0.14992503748125938 * var_chaste_interface__membrane__V)); // per_ms + const double var_slow_inward_current_f_gate__beta_f = 0064999999999999997 * exp(-0.59999999999999998 - 02 * var_chaste_interface__membrane__V) / (1.0 + exp(-6.0 - 0.20000000000000001 * var_chaste_interface__membrane__V)); // per_ms + const double d_dt_chaste_interface_var_slow_inward_current_f_gate__f = (1.0 - var_chaste_interface__slow_inward_current_f_gate__f) * var_slow_inward_current_f_gate__alpha_f - var_slow_inward_current_f_gate__beta_f * var_chaste_interface__slow_inward_current_f_gate__f; // 1 / ms + const double var_slow_inward_current__i_s = (-var_slow_inward_current__E_s + var_chaste_interface__membrane__V) * var_slow_inward_current__g_s * var_chaste_interface__slow_inward_current_d_gate__d * var_chaste_interface__slow_inward_current_f_gate__f; // uA_per_mm2 + const double d_dt_chaste_interface_var_slow_inward_current__Cai = 7.0000000000000007e-6 - 070000000000000007 * var_chaste_interface__slow_inward_current__Cai - 01 * var_slow_inward_current__i_s; // concentration_units / ms + const double var_sodium_current_h_gate__alpha_h = 0.126 * exp(-19.25 - 0.25 * var_chaste_interface__membrane__V); // per_ms + const double var_sodium_current_h_gate__beta_h = 1.7 / (1.0 + exp(-1.845 - 082000000000000003 * var_chaste_interface__membrane__V)); // per_ms + const double d_dt_chaste_interface_var_sodium_current_h_gate__h = (1.0 - var_chaste_interface__sodium_current_h_gate__h) * var_sodium_current_h_gate__alpha_h - var_sodium_current_h_gate__beta_h * var_chaste_interface__sodium_current_h_gate__h; // 1 / ms + const double var_sodium_current_j_gate__alpha_j = 055 * exp(-19.5 - 0.25 * var_chaste_interface__membrane__V) / (1.0 + exp(-15.600000000000001 - 0.20000000000000001 * var_chaste_interface__membrane__V)); // per_ms + const double var_sodium_current_j_gate__beta_j = 0.29999999999999999 / (1.0 + exp(-3.2000000000000002 - 0.10000000000000001 * var_chaste_interface__membrane__V)); // per_ms + const double d_dt_chaste_interface_var_sodium_current_j_gate__j = (1.0 - var_chaste_interface__sodium_current_j_gate__j) * var_sodium_current_j_gate__alpha_j - var_sodium_current_j_gate__beta_j * var_chaste_interface__sodium_current_j_gate__j; // 1 / ms + const double var_sodium_current_m_gate__alpha_m = -1.0 * (47.0 + var_chaste_interface__membrane__V) / (-1.0 + exp(-4.7000000000000002 - 0.10000000000000001 * var_chaste_interface__membrane__V)); // per_ms + const double var_sodium_current_m_gate__beta_m = 40 * exp(-4.032 - 056000000000000001 * var_chaste_interface__membrane__V); // per_ms + const double d_dt_chaste_interface_var_sodium_current_m_gate__m = (1.0 - var_chaste_interface__sodium_current_m_gate__m) * var_sodium_current_m_gate__alpha_m - var_sodium_current_m_gate__beta_m * var_chaste_interface__sodium_current_m_gate__m; // 1 / ms + const double var_time_dependent_outward_current_x1_gate__alpha_x1 = 00050000000000000001 * exp(4.1322314049586781 + 082644628099173556 * var_chaste_interface__membrane__V) / (1.0 + exp(2.8571428571428572 + 057142857142857141 * var_chaste_interface__membrane__V)); // per_ms + const double var_time_dependent_outward_current_x1_gate__beta_x1 = 0012999999999999999 * exp(-1.1997600479904018 - 059988002399520089 * var_chaste_interface__membrane__V) / (1.0 + exp(-0.80000000000000004 - 040000000000000001 * var_chaste_interface__membrane__V)); // per_ms + const double d_dt_chaste_interface_var_time_dependent_outward_current_x1_gate__x1 = (1.0 - var_chaste_interface__time_dependent_outward_current_x1_gate__x1) * var_time_dependent_outward_current_x1_gate__alpha_x1 - var_time_dependent_outward_current_x1_gate__beta_x1 * var_chaste_interface__time_dependent_outward_current_x1_gate__x1; // 1 / ms + + if (mSetVoltageDerivativeToZero) + { + d_dt_chaste_interface_var_membrane__V = 0; + } + else + { + const double var_membrane__C = 01; // uF_per_mm2 + const double var_sodium_current__E_Na = 50; // mV + const double var_sodium_current__g_Na = 040000000000000001; // mS_per_mm2 + const double var_sodium_current__g_Nac = 3.0000000000000001e-5; // mS_per_mm2 + const double var_sodium_current__i_Na = (-var_sodium_current__E_Na + var_chaste_interface__membrane__V) * (pow(var_chaste_interface__sodium_current_m_gate__m, 3) * var_sodium_current__g_Na * var_chaste_interface__sodium_current_h_gate__h * var_chaste_interface__sodium_current_j_gate__j + var_sodium_current__g_Nac); // uA_per_mm2 + const double var_stimulus_protocol__Istim_converter = -GetIntracellularAreaStimulus(var_chaste_interface__environment__time); // uA_per_cm2 + const double var_stimulus_protocol__Istim = 0099999999999999985 * var_stimulus_protocol__Istim_converter; // uA_per_mm2 + const double var_time_dependent_outward_current__i_x1 = 0080000000000000002 * (-1.0 + exp(3.0800000000000001 + 040000000000000001 * var_chaste_interface__membrane__V)) * var_chaste_interface__time_dependent_outward_current_x1_gate__x1 / exp(1.4000000000000001 + 040000000000000001 * var_chaste_interface__membrane__V); // uA_per_mm2 + const double var_time_independent_outward_current__i_K1 = 014 * (-1.0 + exp(3.3999999999999999 + 040000000000000001 * var_chaste_interface__membrane__V)) / (exp(2.1200000000000001 + 040000000000000001 * var_chaste_interface__membrane__V) + exp(4.2400000000000002 + 080000000000000002 * var_chaste_interface__membrane__V)) + 0007000000000000001 * (23.0 + var_chaste_interface__membrane__V) / (1.0 - exp(-0.92000000000000004 - 040000000000000001 * var_chaste_interface__membrane__V)); // uA_per_mm2 + d_dt_chaste_interface_var_membrane__V = (-var_slow_inward_current__i_s - var_sodium_current__i_Na - var_time_dependent_outward_current__i_x1 - var_time_independent_outward_current__i_K1 + var_stimulus_protocol__Istim) / var_membrane__C; // mV / ms + } + + rDY[0] = d_dt_chaste_interface_var_membrane__V; + rDY[1] = d_dt_chaste_interface_var_slow_inward_current__Cai; + rDY[2] = d_dt_chaste_interface_var_sodium_current_m_gate__m; + rDY[3] = d_dt_chaste_interface_var_sodium_current_h_gate__h; + rDY[4] = d_dt_chaste_interface_var_sodium_current_j_gate__j; + rDY[5] = d_dt_chaste_interface_var_slow_inward_current_d_gate__d; + rDY[6] = d_dt_chaste_interface_var_slow_inward_current_f_gate__f; + rDY[7] = d_dt_chaste_interface_var_time_dependent_outward_current_x1_gate__x1; + } + + std::vector Cellbeeler_reuter_model_1977FromCellML::ComputeDerivedQuantities(double var_chaste_interface__environment__time, const std::vector & rY) + { + // Inputs: + // Time units: millisecond + + + // Mathematics + const double var_stimulus_protocol__Istim_converter = -GetIntracellularAreaStimulus(var_chaste_interface__environment__time); // uA_per_cm2 + + std::vector dqs(1); + dqs[0] = var_stimulus_protocol__Istim_converter; + return dqs; + } + +template<> +void OdeSystemInformation::Initialise(void) +{ + this->mSystemName = "beeler_reuter_model_1977"; + this->mFreeVariableName = "environment__time"; + this->mFreeVariableUnits = "ms"; + + // rY[0]: + this->mVariableNames.push_back("membrane_voltage"); + this->mVariableUnits.push_back("mV"); + this->mInitialConditions.push_back(-84.624); + + // rY[1]: + this->mVariableNames.push_back("cytosolic_calcium_concentration"); + this->mVariableUnits.push_back("concentration_units"); + this->mInitialConditions.push_back(0001); + + // rY[2]: + this->mVariableNames.push_back("sodium_current_m_gate__m"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(011); + + // rY[3]: + this->mVariableNames.push_back("sodium_current_h_gate__h"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.988); + + // rY[4]: + this->mVariableNames.push_back("sodium_current_j_gate__j"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.975); + + // rY[5]: + this->mVariableNames.push_back("slow_inward_current_d_gate__d"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(003); + + // rY[6]: + this->mVariableNames.push_back("slow_inward_current_f_gate__f"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.994); + + // rY[7]: + this->mVariableNames.push_back("time_dependent_outward_current_x1_gate__x1"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0001); + + // Derived Quantity index [0]: + this->mDerivedQuantityNames.push_back("membrane_stimulus_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + this->mInitialised = true; +} + +// Serialization for Boost >= 1.36 +#include "SerializationExportWrapperForCpp.hpp" +CHASTE_CLASS_EXPORT(Cellbeeler_reuter_model_1977FromCellML) diff --git a/chaste_codegen/tests/numerical/baseline/Normal/dynamic_beeler_reuter_model_1977.hpp b/chaste_codegen/tests/numerical/baseline/Normal/dynamic_beeler_reuter_model_1977.hpp new file mode 100644 index 00000000..9162074c --- /dev/null +++ b/chaste_codegen/tests/numerical/baseline/Normal/dynamic_beeler_reuter_model_1977.hpp @@ -0,0 +1,80 @@ +#ifndef CELLBEELER_REUTER_MODEL_1977FROMCELLML_HPP_ +#define CELLBEELER_REUTER_MODEL_1977FROMCELLML_HPP_ + +//! @file +//! +//! This source file was generated from CellML by chaste_codegen version (version omitted as unimportant) +//! +//! Model: beeler_reuter_model_1977 +//! +//! Processed by chaste_codegen: https://github.com/ModellingWebLab/chaste-codegen +//! (translator: chaste_codegen, model type: Normal) +//! on (date omitted as unimportant) +//! +//! + +#include "ChasteSerialization.hpp" +#include +#include "AbstractStimulusFunction.hpp" +#include "AbstractCardiacCell.hpp" + +class Cellbeeler_reuter_model_1977FromCellML : public AbstractCardiacCell +{ + friend class boost::serialization::access; + template + void serialize(Archive & archive, const unsigned int version) + { + archive & boost::serialization::base_object(*this); + + } + + // + // Settable parameters and readable variables + // + +public: + + boost::shared_ptr UseCellMLDefaultStimulus(); + double GetIntracellularCalciumConcentration(); + Cellbeeler_reuter_model_1977FromCellML(boost::shared_ptr pSolver, boost::shared_ptr pIntracellularStimulus); + ~Cellbeeler_reuter_model_1977FromCellML(); + double GetIIonic(const std::vector* pStateVariables=NULL); + void EvaluateYDerivatives(double var_chaste_interface__environment__time, const std::vector& rY, std::vector& rDY); + + std::vector ComputeDerivedQuantities(double var_chaste_interface__environment__time, const std::vector & rY); +}; + +// Needs to be included last +#include "SerializationExportWrapper.hpp" +CHASTE_CLASS_EXPORT(Cellbeeler_reuter_model_1977FromCellML) + +namespace boost +{ + namespace serialization + { + template + inline void save_construct_data( + Archive & ar, const Cellbeeler_reuter_model_1977FromCellML * t, const unsigned int fileVersion) + { + const boost::shared_ptr p_solver = t->GetSolver(); + const boost::shared_ptr p_stimulus = t->GetStimulusFunction(); + ar << p_solver; + ar << p_stimulus; + } + + template + inline void load_construct_data( + Archive & ar, Cellbeeler_reuter_model_1977FromCellML * t, const unsigned int fileVersion) + { + boost::shared_ptr p_solver; + boost::shared_ptr p_stimulus; + ar >> p_solver; + ar >> p_stimulus; + ::new(t)Cellbeeler_reuter_model_1977FromCellML(p_solver, p_stimulus); + } + + } + +} + +#endif // CELLBEELER_REUTER_MODEL_1977FROMCELLML_HPP_ diff --git a/chaste_codegen/tests/numerical/baseline/Normal/fox_mcharg_gilmour_2002_console_script.cpp b/chaste_codegen/tests/numerical/baseline/Normal/fox_mcharg_gilmour_2002_console_script.cpp new file mode 100644 index 00000000..0bfa6461 --- /dev/null +++ b/chaste_codegen/tests/numerical/baseline/Normal/fox_mcharg_gilmour_2002_console_script.cpp @@ -0,0 +1,663 @@ +//! @file +//! +//! This source file was generated from CellML by chaste_codegen version (version omitted as unimportant) +//! +//! Model: fox_model_2001 +//! +//! Processed by chaste_codegen: https://github.com/ModellingWebLab/chaste-codegen +//! (translator: chaste_codegen, model type: Normal) +//! on (date omitted as unimportant) +//! +//! + +#include "fox_mcharg_gilmour_2002.hpp" +#include +#include +#include +#include +#include "Exception.hpp" +#include "OdeSystemInformation.hpp" +#include "RegularStimulus.hpp" +#include "HeartConfig.hpp" +#include "IsNan.hpp" +#include "MathsCustomFunctions.hpp" + + + + + + boost::shared_ptr Cellfox_mcharg_gilmour_2002FromCellML::UseCellMLDefaultStimulus() + { + // Use the default stimulus specified by CellML metadata + const double var_chaste_interface__membrane__stim_amplitude_converted = -80 * HeartConfig::Instance()->GetCapacitance(); // uA_per_cm2 + const double var_chaste_interface__membrane__stim_duration = 1; // millisecond + const double var_chaste_interface__membrane__stim_period = 1000; // millisecond + const double var_chaste_interface__membrane__stim_start = 100; // millisecond + boost::shared_ptr p_cellml_stim(new RegularStimulus( + -fabs(var_chaste_interface__membrane__stim_amplitude_converted), + var_chaste_interface__membrane__stim_duration, + var_chaste_interface__membrane__stim_period, + var_chaste_interface__membrane__stim_start + )); + mpIntracellularStimulus = p_cellml_stim; + return p_cellml_stim; + } + double Cellfox_mcharg_gilmour_2002FromCellML::GetIntracellularCalciumConcentration() + { + return mStateVariables[1]; + } + Cellfox_mcharg_gilmour_2002FromCellML::Cellfox_mcharg_gilmour_2002FromCellML(boost::shared_ptr pSolver, boost::shared_ptr pIntracellularStimulus) + : AbstractCardiacCell( + pSolver, + 13, + 0, + pIntracellularStimulus) + { + // Time units: millisecond + // + this->mpSystemInfo = OdeSystemInformation::Instance(); + Init(); + + // We have a default stimulus specified in the CellML file metadata + this->mHasDefaultStimulusFromCellML = true; + + this->mParameters[0] = 9.9999999999999995e-7; // (var_calcium_dynamics__P_leak) [per_millisecond] + this->mParameters[1] = 6; // (var_calcium_dynamics__P_rel) [per_millisecond] + this->mParameters[2] = 0.10000000000000001; // (var_calcium_dynamics__V_up) [micromolar_per_millisecond] + this->mParameters[3] = 149.40000000000001; // (var_standard_ionic_concentrations__K_i) [millimolar] + this->mParameters[4] = 10; // (var_standard_ionic_concentrations__Na_i) [millimolar] + this->mParameters[5] = 2000; // (var_standard_ionic_concentrations__Ca_o) [micromolar] + this->mParameters[6] = 4; // (var_standard_ionic_concentrations__K_o) [millimolar] + this->mParameters[7] = 138; // (var_standard_ionic_concentrations__Na_o) [millimolar] + this->mParameters[8] = 2.26e-5; // (var_L_type_Ca_current__P_Ca) [cm_per_millisecond] + this->mParameters[9] = 30; // (var_L_type_Ca_current_f_Ca_gate__tau_f_Ca) [millisecond] + this->mParameters[10] = 12.800000000000001; // (var_fast_sodium_current__g_Na) [milliS_per_microF] + this->mParameters[11] = 0; // (var_fast_sodium_current__perc_reduced_inact_for_IpNa) [dimensionless] + this->mParameters[12] = 0; // (var_fast_sodium_current__shift_INa_inact) [millivolt] + this->mParameters[13] = 2.7999999999999998; // (var_time_independent_potassium_current__g_K1) [milliS_per_microF] + this->mParameters[14] = 0.013599999999999999; // (var_rapid_activating_delayed_rectifiyer_K_current__g_Kr) [milliS_per_microF] + this->mParameters[15] = 0.024500000000000001; // (var_slow_activating_delayed_rectifiyer_K_current__g_Ks) [milliS_per_microF] + this->mParameters[16] = 1500; // (var_Na_Ca_exchanger__K_NaCa) [microA_per_microF] + this->mParameters[17] = 0.23815; // (var_transient_outward_potassium_current__g_to) [milliS_per_microF] + } + + Cellfox_mcharg_gilmour_2002FromCellML::~Cellfox_mcharg_gilmour_2002FromCellML() + { + } + + + void Cellfox_mcharg_gilmour_2002FromCellML::VerifyStateVariables() + { + std::vector& rY = rGetStateVariables(); + std::string error_message = ""; + + for (unsigned i=0; i < 13; i++) + { + if(std::isnan(rY[i])) + { + error_message += "State variable " + this->rGetStateVariableNames()[i] + " is not a number\n"; + } + if(std::isinf(rY[i])) + { + error_message += "State variable " + this->rGetStateVariableNames()[i] + " has become INFINITE\n"; + } + if(this->is_concentration[i] && rY[i] < 0) + { + error_message += "Concentration " + this->rGetStateVariableNames()[i] + " below 0\n"; + } + if(this->is_probability[i] && rY[i] < 0) + { + error_message += "Probability " + this->rGetStateVariableNames()[i] + " below 0\n"; + } + if(this->is_probability[i] && rY[i] > 1) + { + error_message += "Probability " + this->rGetStateVariableNames()[i] + " above 1\n"; + } + } + if (error_message != ""){ + EXCEPTION(DumpState(error_message)); + } + } + + double Cellfox_mcharg_gilmour_2002FromCellML::GetIIonic(const std::vector* pStateVariables) + { + // For state variable interpolation (SVI) we read in interpolated state variables, + // otherwise for ionic current interpolation (ICI) we use the state variables of this model (node). + if (!pStateVariables) pStateVariables = &rGetStateVariables(); + const std::vector& rY = *pStateVariables; + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -94.7 + double var_chaste_interface__calcium_dynamics__Ca_i_converted = rY[1]; + // Units: millimolar; Initial value: 4.72e-05 + double var_chaste_interface__fast_sodium_current_m_gate__m = rY[2]; + // Units: dimensionless; Initial value: 0.00024676 + double var_chaste_interface__fast_sodium_current_h_gate__h = rY[3]; + // Units: dimensionless; Initial value: 0.99869 + double var_chaste_interface__fast_sodium_current_j_gate__j = rY[4]; + // Units: dimensionless; Initial value: 0.99887 + double var_chaste_interface__rapid_activating_delayed_rectifiyer_K_current_X_kr_gate__X_kr = rY[5]; + // Units: dimensionless; Initial value: 0.229 + double var_chaste_interface__slow_activating_delayed_rectifiyer_K_current_X_ks_gate__X_ks = rY[6]; + // Units: dimensionless; Initial value: 0.0001 + double var_chaste_interface__transient_outward_potassium_current_X_to_gate__X_to = rY[7]; + // Units: dimensionless; Initial value: 3.742e-05 + double var_chaste_interface__transient_outward_potassium_current_Y_to_gate__Y_to = rY[8]; + // Units: dimensionless; Initial value: 1.0 + double var_chaste_interface__L_type_Ca_current_f_gate__f = rY[9]; + // Units: dimensionless; Initial value: 0.983 + double var_chaste_interface__L_type_Ca_current_d_gate__d = rY[10]; + // Units: dimensionless; Initial value: 0.0001 + double var_chaste_interface__L_type_Ca_current_f_Ca_gate__f_Ca = rY[11]; + // Units: dimensionless; Initial value: 0.942 + + const double var_L_type_Ca_current__C_sc = 1; // microF_per_cm2 + const double var_L_type_Ca_current__P_CaK = 5.7899999999999998e-7; // cm_per_millisecond + const double var_L_type_Ca_current__i_Ca_half = -0.26500000000000001; // microA_per_microF + const double var_Na_Ca_exchanger__K_mCa = 1380; // micromolar + const double var_Na_Ca_exchanger__K_mNa = 87.5; // millimolar + const double var_Na_Ca_exchanger__K_sat = 0.20000000000000001; // dimensionless + const double var_Na_Ca_exchanger__eta = 0.34999999999999998; // dimensionless + const double var_calcium_background_current__g_Cab = 0.00038420000000000001; // milliS_per_microF + const double var_calcium_dynamics__Ca_i = 1000 * var_chaste_interface__calcium_dynamics__Ca_i_converted; // micromolar + const double var_membrane__F = 96.5; // coulomb_per_millimole + const double var_membrane__R = 8.3140000000000001; // joule_per_mole_kelvin + const double var_membrane__T = 310; // kelvin + const double var_plateau_potassium_current__g_Kp = 0.0022160000000000001; // milliS_per_microF + const double var_plateau_potassium_current_Kp_gate__Kp_V = 1 / (1 + exp(1.2521739130434781 - 0.16722408026755853 * var_chaste_interface__membrane__V)); // dimensionless + const double var_rapid_activating_delayed_rectifiyer_K_current__R_V = 1 / (1 + 2.5 * exp(2.8000000000000003 + 0.10000000000000001 * var_chaste_interface__membrane__V)); // dimensionless + const double var_sarcolemmal_calcium_pump__K_mpCa = 0.050000000000000003; // micromolar + const double var_sarcolemmal_calcium_pump__i_pCa_max = 0.050000000000000003; // microA_per_microF + const double var_sarcolemmal_calcium_pump__i_p_Ca = var_calcium_dynamics__Ca_i * var_sarcolemmal_calcium_pump__i_pCa_max / (var_calcium_dynamics__Ca_i + var_sarcolemmal_calcium_pump__K_mpCa); // microA_per_microF + const double var_sodium_background_current__g_Nab = 0.0030999999999999999; // milliS_per_microF + const double var_sodium_potassium_pump__K_mKo = 1.5; // millimolar + const double var_sodium_potassium_pump__K_mNai = 10; // millimolar + const double var_sodium_potassium_pump__i_NaK_max = 0.69299999999999995; // microA_per_microF + const double var_L_type_Ca_current__i_Ca_max = 4 * pow(var_membrane__F, 2) * (-0.34100000000000003 * mParameters[5] + var_calcium_dynamics__Ca_i * exp(2 * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * mParameters[8] * var_chaste_interface__membrane__V / ((-1 + exp(2 * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * var_L_type_Ca_current__C_sc * var_membrane__R * var_membrane__T); // microA_per_microF + const double var_L_type_Ca_current__i_Ca = var_L_type_Ca_current__i_Ca_max * var_chaste_interface__L_type_Ca_current_d_gate__d * var_chaste_interface__L_type_Ca_current_f_Ca_gate__f_Ca * var_chaste_interface__L_type_Ca_current_f_gate__f; // microA_per_microF + const double var_L_type_Ca_current__i_Ca_converted = HeartConfig::Instance()->GetCapacitance() * var_L_type_Ca_current__i_Ca; // uA_per_cm2 + const double var_calcium_background_current__E_Ca = 0.5 * var_membrane__R * var_membrane__T * log(mParameters[5] / var_calcium_dynamics__Ca_i) / var_membrane__F; // millivolt + const double var_calcium_background_current__i_Ca_b = (-var_calcium_background_current__E_Ca + var_chaste_interface__membrane__V) * var_calcium_background_current__g_Cab; // microA_per_microF + const double var_L_type_Ca_current__i_CaK = 1000 * pow(var_membrane__F, 2) * (-mParameters[6] + mParameters[3] * exp(var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * var_L_type_Ca_current__P_CaK * var_chaste_interface__L_type_Ca_current_d_gate__d * var_chaste_interface__L_type_Ca_current_f_Ca_gate__f_Ca * var_chaste_interface__L_type_Ca_current_f_gate__f * var_chaste_interface__membrane__V / ((1 + var_L_type_Ca_current__i_Ca_max / var_L_type_Ca_current__i_Ca_half) * (-1 + exp(var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * var_L_type_Ca_current__C_sc * var_membrane__R * var_membrane__T); // microA_per_microF + const double var_rapid_activating_delayed_rectifiyer_K_current__E_K = var_membrane__R * var_membrane__T * log(mParameters[6] / mParameters[3]) / var_membrane__F; // millivolt + const double var_plateau_potassium_current__i_Kp = (-var_rapid_activating_delayed_rectifiyer_K_current__E_K + var_chaste_interface__membrane__V) * var_plateau_potassium_current__g_Kp * var_plateau_potassium_current_Kp_gate__Kp_V; // microA_per_microF + const double var_rapid_activating_delayed_rectifiyer_K_current__i_Kr = 0.5 * sqrt(mParameters[6]) * (-var_rapid_activating_delayed_rectifiyer_K_current__E_K + var_chaste_interface__membrane__V) * var_rapid_activating_delayed_rectifiyer_K_current__R_V * mParameters[14] * var_chaste_interface__rapid_activating_delayed_rectifiyer_K_current_X_kr_gate__X_kr; // microA_per_microF + const double var_rapid_activating_delayed_rectifiyer_K_current__i_Kr_converted = HeartConfig::Instance()->GetCapacitance() * var_rapid_activating_delayed_rectifiyer_K_current__i_Kr; // uA_per_cm2 + const double var_Na_Ca_exchanger__i_NaCa = (pow(mParameters[4], 3) * mParameters[5] * exp(var_Na_Ca_exchanger__eta * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T)) - pow(mParameters[7], 3) * var_calcium_dynamics__Ca_i * exp((-1 + var_Na_Ca_exchanger__eta) * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * mParameters[16] / ((1 + var_Na_Ca_exchanger__K_sat * exp((-1 + var_Na_Ca_exchanger__eta) * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * (pow(var_Na_Ca_exchanger__K_mNa, 3) + pow(mParameters[7], 3)) * (var_Na_Ca_exchanger__K_mCa + mParameters[5])); // microA_per_microF + const double var_Na_Ca_exchanger__i_NaCa_converted = HeartConfig::Instance()->GetCapacitance() * var_Na_Ca_exchanger__i_NaCa; // uA_per_cm2 + const double var_fast_sodium_current__E_Na = var_membrane__R * var_membrane__T * log(mParameters[7] / mParameters[4]) / var_membrane__F; // millivolt + const double var_fast_sodium_current__i_Na = pow(var_chaste_interface__fast_sodium_current_m_gate__m, 3) * (-var_fast_sodium_current__E_Na + var_chaste_interface__membrane__V) * mParameters[10] * var_chaste_interface__fast_sodium_current_h_gate__h * var_chaste_interface__fast_sodium_current_j_gate__j; // microA_per_microF + const double var_fast_sodium_current__i_Na_converted = HeartConfig::Instance()->GetCapacitance() * var_fast_sodium_current__i_Na; // uA_per_cm2 + const double var_slow_activating_delayed_rectifiyer_K_current__E_Ks = var_membrane__R * var_membrane__T * log((mParameters[6] + 0.018329999999999999 * mParameters[7]) / (mParameters[3] + 0.018329999999999999 * mParameters[4])) / var_membrane__F; // millivolt + const double var_slow_activating_delayed_rectifiyer_K_current__i_Ks = pow(var_chaste_interface__slow_activating_delayed_rectifiyer_K_current_X_ks_gate__X_ks, 2) * (-var_slow_activating_delayed_rectifiyer_K_current__E_Ks + var_chaste_interface__membrane__V) * mParameters[15]; // microA_per_microF + const double var_slow_activating_delayed_rectifiyer_K_current__i_Ks_converted = HeartConfig::Instance()->GetCapacitance() * var_slow_activating_delayed_rectifiyer_K_current__i_Ks; // uA_per_cm2 + const double var_sodium_background_current__i_Na_b = (-var_fast_sodium_current__E_Na + var_chaste_interface__membrane__V) * var_sodium_background_current__g_Nab; // microA_per_microF + const double var_sodium_potassium_pump__sigma = -0.14285714285714285 + 0.14285714285714285 * exp(0.01485884101040119 * mParameters[7]); // dimensionless + const double var_sodium_potassium_pump__f_NaK = 1 / (1 + 0.1245 * exp(-0.10000000000000001 * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T)) + 0.036499999999999998 * var_sodium_potassium_pump__sigma * exp(-var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))); // dimensionless + const double var_sodium_potassium_pump__i_NaK = var_sodium_potassium_pump__f_NaK * var_sodium_potassium_pump__i_NaK_max * mParameters[6] / ((1 + pow((var_sodium_potassium_pump__K_mNai / mParameters[4]), 1.5)) * (var_sodium_potassium_pump__K_mKo + mParameters[6])); // microA_per_microF + const double var_time_independent_potassium_current__K_mK1 = 13; // millimolar + const double var_time_independent_potassium_current_K1_gate__K1_infinity = 1 / (2 + exp(1.6200000000000001 * (-var_rapid_activating_delayed_rectifiyer_K_current__E_K + var_chaste_interface__membrane__V) * var_membrane__F / (var_membrane__R * var_membrane__T))); // dimensionless + const double var_time_independent_potassium_current__i_K1 = (-var_rapid_activating_delayed_rectifiyer_K_current__E_K + var_chaste_interface__membrane__V) * mParameters[6] * mParameters[13] * var_time_independent_potassium_current_K1_gate__K1_infinity / (mParameters[6] + var_time_independent_potassium_current__K_mK1); // microA_per_microF + const double var_time_independent_potassium_current__i_K1_converted = HeartConfig::Instance()->GetCapacitance() * var_time_independent_potassium_current__i_K1; // uA_per_cm2 + const double var_transient_outward_potassium_current__i_to = (-var_rapid_activating_delayed_rectifiyer_K_current__E_K + var_chaste_interface__membrane__V) * mParameters[17] * var_chaste_interface__transient_outward_potassium_current_X_to_gate__X_to * var_chaste_interface__transient_outward_potassium_current_Y_to_gate__Y_to; // microA_per_microF + const double var_transient_outward_potassium_current__i_to_converted = HeartConfig::Instance()->GetCapacitance() * var_transient_outward_potassium_current__i_to; // uA_per_cm2 + const double var_chaste_interface__i_ionic = HeartConfig::Instance()->GetCapacitance() * var_L_type_Ca_current__i_CaK + HeartConfig::Instance()->GetCapacitance() * var_calcium_background_current__i_Ca_b + HeartConfig::Instance()->GetCapacitance() * var_plateau_potassium_current__i_Kp + HeartConfig::Instance()->GetCapacitance() * var_sarcolemmal_calcium_pump__i_p_Ca + HeartConfig::Instance()->GetCapacitance() * var_sodium_background_current__i_Na_b + HeartConfig::Instance()->GetCapacitance() * var_sodium_potassium_pump__i_NaK + var_L_type_Ca_current__i_Ca_converted + var_Na_Ca_exchanger__i_NaCa_converted + var_fast_sodium_current__i_Na_converted + var_rapid_activating_delayed_rectifiyer_K_current__i_Kr_converted + var_slow_activating_delayed_rectifiyer_K_current__i_Ks_converted + var_time_independent_potassium_current__i_K1_converted + var_transient_outward_potassium_current__i_to_converted; // uA_per_cm2 + + const double i_ionic = var_chaste_interface__i_ionic; + EXCEPT_IF_NOT(!std::isnan(i_ionic)); + return i_ionic; + } + + void Cellfox_mcharg_gilmour_2002FromCellML::EvaluateYDerivatives(double var_chaste_interface__environment__time, const std::vector& rY, std::vector& rDY) + { + // Inputs: + // Time units: millisecond + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -94.7 + double var_chaste_interface__calcium_dynamics__Ca_i_converted = rY[1]; + // Units: millimolar; Initial value: 4.72e-05 + double var_chaste_interface__fast_sodium_current_m_gate__m = rY[2]; + // Units: dimensionless; Initial value: 0.00024676 + double var_chaste_interface__fast_sodium_current_h_gate__h = rY[3]; + // Units: dimensionless; Initial value: 0.99869 + double var_chaste_interface__fast_sodium_current_j_gate__j = rY[4]; + // Units: dimensionless; Initial value: 0.99887 + double var_chaste_interface__rapid_activating_delayed_rectifiyer_K_current_X_kr_gate__X_kr = rY[5]; + // Units: dimensionless; Initial value: 0.229 + double var_chaste_interface__slow_activating_delayed_rectifiyer_K_current_X_ks_gate__X_ks = rY[6]; + // Units: dimensionless; Initial value: 0.0001 + double var_chaste_interface__transient_outward_potassium_current_X_to_gate__X_to = rY[7]; + // Units: dimensionless; Initial value: 3.742e-05 + double var_chaste_interface__transient_outward_potassium_current_Y_to_gate__Y_to = rY[8]; + // Units: dimensionless; Initial value: 1.0 + double var_chaste_interface__L_type_Ca_current_f_gate__f = rY[9]; + // Units: dimensionless; Initial value: 0.983 + double var_chaste_interface__L_type_Ca_current_d_gate__d = rY[10]; + // Units: dimensionless; Initial value: 0.0001 + double var_chaste_interface__L_type_Ca_current_f_Ca_gate__f_Ca = rY[11]; + // Units: dimensionless; Initial value: 0.942 + double var_chaste_interface__calcium_dynamics__Ca_SR = rY[12]; + // Units: micromolar; Initial value: 320.0 + + // Mathematics + double d_dt_chaste_interface_var_membrane__V; + const double var_L_type_Ca_current__C_sc = 1; // microF_per_cm2 + const double var_L_type_Ca_current_f_Ca_gate__K_mfCa = 0.17999999999999999; // micromolar + const double var_Na_Ca_exchanger__K_mCa = 1380; // micromolar + const double var_Na_Ca_exchanger__K_mNa = 87.5; // millimolar + const double var_Na_Ca_exchanger__K_sat = 0.20000000000000001; // dimensionless + const double var_Na_Ca_exchanger__eta = 0.34999999999999998; // dimensionless + const double var_calcium_background_current__g_Cab = 0.00038420000000000001; // milliS_per_microF + const double var_calcium_dynamics__A_Cap = 0.00015339999999999999; // cm2 + const double var_calcium_dynamics__CMDN_tot = 10; // micromolar + const double var_calcium_dynamics__CSQN_tot = 10000; // micromolar + const double var_calcium_dynamics__Ca_i = 1000 * var_chaste_interface__calcium_dynamics__Ca_i_converted; // micromolar + const double var_L_type_Ca_current_f_Ca_gate__f_Ca_infinity = 1 / (1 + pow(var_calcium_dynamics__Ca_i, 3) / pow(var_L_type_Ca_current_f_Ca_gate__K_mfCa, 3)); // dimensionless + const double d_dt_chaste_interface_var_L_type_Ca_current_f_Ca_gate__f_Ca = (-var_chaste_interface__L_type_Ca_current_f_Ca_gate__f_Ca + var_L_type_Ca_current_f_Ca_gate__f_Ca_infinity) / mParameters[9]; // 1 / millisecond + const double var_calcium_dynamics__K_mCMDN = 2; // micromolar + const double var_calcium_dynamics__K_mCSQN = 600; // micromolar + const double var_calcium_dynamics__K_mup = 0.32000000000000001; // micromolar + const double var_calcium_dynamics__J_leak = (-var_calcium_dynamics__Ca_i + var_chaste_interface__calcium_dynamics__Ca_SR) * mParameters[0]; // micromolar_per_millisecond + const double var_calcium_dynamics__V_SR = 1.9999999999999999e-6; // microlitre + const double var_calcium_dynamics__V_myo = 2.584e-5; // microlitre + const double var_calcium_dynamics__J_up = mParameters[2] / (1 + pow(var_calcium_dynamics__K_mup, 2) / pow(var_calcium_dynamics__Ca_i, 2)); // micromolar_per_millisecond + const double var_calcium_dynamics__beta_SR = 1 / (1 + var_calcium_dynamics__CSQN_tot * var_calcium_dynamics__K_mCSQN / pow((var_chaste_interface__calcium_dynamics__Ca_SR + var_calcium_dynamics__K_mCSQN), 2)); // dimensionless + const double var_calcium_dynamics__beta_i = 1 / (1 + var_calcium_dynamics__CMDN_tot * var_calcium_dynamics__K_mCMDN / pow((var_calcium_dynamics__Ca_i + var_calcium_dynamics__K_mCMDN), 2)); // dimensionless + const double var_calcium_dynamics__gamma = 1 / (1 + 8000000000.0 / pow(var_chaste_interface__calcium_dynamics__Ca_SR, 3)); // dimensionless + const double var_membrane__F = 96.5; // coulomb_per_millimole + const double var_membrane__R = 8.3140000000000001; // joule_per_mole_kelvin + const double var_membrane__T = 310; // kelvin + const double var_L_type_Ca_current_d_gate__E0_m = 40 + var_chaste_interface__membrane__V; // millivolt + const double var_L_type_Ca_current_d_gate__d_infinity = 1 / (1 + exp(-1.6025641025641024 - 0.16025641025641024 * var_chaste_interface__membrane__V)); // dimensionless + const double var_L_type_Ca_current_d_gate__tau_d = 1 / (0.25 * exp(-0.01 * var_chaste_interface__membrane__V) / (1 + exp(-0.070000000000000007 * var_chaste_interface__membrane__V)) + 0.070000000000000007 * exp(-0.050000000000000003 * var_L_type_Ca_current_d_gate__E0_m) / (1 + exp(0.050000000000000003 * var_L_type_Ca_current_d_gate__E0_m))); // millisecond + const double d_dt_chaste_interface_var_L_type_Ca_current_d_gate__d = (-var_chaste_interface__L_type_Ca_current_d_gate__d + var_L_type_Ca_current_d_gate__d_infinity) / var_L_type_Ca_current_d_gate__tau_d; // 1 / millisecond + const double var_L_type_Ca_current_f_gate__f_infinity = 1 / (1 + exp(2.5 + 0.20000000000000001 * var_chaste_interface__membrane__V)); // dimensionless + const double var_L_type_Ca_current_f_gate__tau_f = 30 + 200 / (1 + exp(2.1052631578947367 + 0.10526315789473684 * var_chaste_interface__membrane__V)); // millisecond + const double d_dt_chaste_interface_var_L_type_Ca_current_f_gate__f = (-var_chaste_interface__L_type_Ca_current_f_gate__f + var_L_type_Ca_current_f_gate__f_infinity) / var_L_type_Ca_current_f_gate__tau_f; // 1 / millisecond + const double var_calcium_dynamics__J_rel = (-var_calcium_dynamics__Ca_i + var_chaste_interface__calcium_dynamics__Ca_SR * var_calcium_dynamics__gamma) * var_chaste_interface__L_type_Ca_current_d_gate__d * var_chaste_interface__L_type_Ca_current_f_Ca_gate__f_Ca * var_chaste_interface__L_type_Ca_current_f_gate__f * mParameters[1] / (1 + 1.6499999999999999 * exp(0.050000000000000003 * var_chaste_interface__membrane__V)); // micromolar_per_millisecond + const double d_dt_chaste_interface_var_calcium_dynamics__Ca_SR = (-var_calcium_dynamics__J_leak - var_calcium_dynamics__J_rel + var_calcium_dynamics__J_up) * var_calcium_dynamics__V_myo * var_calcium_dynamics__beta_SR / var_calcium_dynamics__V_SR; // micromolar / millisecond + const double var_fast_sodium_current_h_gate__alpha_h = 0.13500000000000001 * exp(-11.764705882352942 + 0.14705882352941177 * mParameters[12] - 0.14705882352941177 * var_chaste_interface__membrane__V); // per_millisecond + const double var_fast_sodium_current_h_gate__beta_h = 7.5 / (1 + exp(-1.1000000000000001 + 0.10000000000000001 * mParameters[12] - 0.10000000000000001 * var_chaste_interface__membrane__V)); // per_millisecond + const double var_fast_sodium_current_h_gate__h_inf = 0.01 * mParameters[11] + (1 - 0.01 * mParameters[11]) * var_fast_sodium_current_h_gate__alpha_h / (var_fast_sodium_current_h_gate__alpha_h + var_fast_sodium_current_h_gate__beta_h); // dimensionless + const double var_fast_sodium_current_h_gate__tau_h = 1 / (var_fast_sodium_current_h_gate__alpha_h + var_fast_sodium_current_h_gate__beta_h); // millisecond + const double d_dt_chaste_interface_var_fast_sodium_current_h_gate__h = (-var_chaste_interface__fast_sodium_current_h_gate__h + var_fast_sodium_current_h_gate__h_inf) / var_fast_sodium_current_h_gate__tau_h; // 1 / millisecond + const double var_fast_sodium_current_j_gate__alpha_j = 0.17499999999999999 * exp(-4.3478260869565215 + 0.043478260869565216 * mParameters[12] - 0.043478260869565216 * var_chaste_interface__membrane__V) / (1 + exp(11.85 + 0.14999999999999999 * var_chaste_interface__membrane__V - 0.14999999999999999 * mParameters[12])); // per_millisecond + const double var_fast_sodium_current_j_gate__beta_j = 0.29999999999999999 / (1 + exp(-3.2000000000000002 + 0.10000000000000001 * mParameters[12] - 0.10000000000000001 * var_chaste_interface__membrane__V)); // per_millisecond + const double var_fast_sodium_current_j_gate__j_inf = 0.01 * mParameters[11] + (1 - 0.01 * mParameters[11]) * var_fast_sodium_current_j_gate__alpha_j / (var_fast_sodium_current_j_gate__alpha_j + var_fast_sodium_current_j_gate__beta_j); // dimensionless + const double var_fast_sodium_current_j_gate__tau_j = 1 / (var_fast_sodium_current_j_gate__alpha_j + var_fast_sodium_current_j_gate__beta_j); // millisecond + const double d_dt_chaste_interface_var_fast_sodium_current_j_gate__j = (-var_chaste_interface__fast_sodium_current_j_gate__j + var_fast_sodium_current_j_gate__j_inf) / var_fast_sodium_current_j_gate__tau_j; // 1 / millisecond + const double var_fast_sodium_current_m_gate__E0_m = 47.130000000000003 + var_chaste_interface__membrane__V; // millivolt + const double var_fast_sodium_current_m_gate__alpha_m = 0.32000000000000001 * var_fast_sodium_current_m_gate__E0_m / (1 - exp(-0.10000000000000001 * var_fast_sodium_current_m_gate__E0_m)); // per_millisecond + const double var_fast_sodium_current_m_gate__beta_m = 0.080000000000000002 * exp(-0.090909090909090912 * var_chaste_interface__membrane__V); // per_millisecond + const double d_dt_chaste_interface_var_fast_sodium_current_m_gate__m = (1 - var_chaste_interface__fast_sodium_current_m_gate__m) * var_fast_sodium_current_m_gate__alpha_m - var_fast_sodium_current_m_gate__beta_m * var_chaste_interface__fast_sodium_current_m_gate__m; // 1 / millisecond + const double var_rapid_activating_delayed_rectifiyer_K_current_X_kr_gate__X_kr_inf = 1 / (1 + exp(-2.1819999999999999 - 0.18190000000000001 * var_chaste_interface__membrane__V)); // dimensionless + const double var_rapid_activating_delayed_rectifiyer_K_current_X_kr_gate__tau_X_kr = 43 + 1 / (exp(-7.6769999999999996 - 0.012800000000000001 * var_chaste_interface__membrane__V) + exp(-5.4950000000000001 + 0.1691 * var_chaste_interface__membrane__V)); // millisecond + const double d_dt_chaste_interface_var_rapid_activating_delayed_rectifiyer_K_current_X_kr_gate__X_kr = (-var_chaste_interface__rapid_activating_delayed_rectifiyer_K_current_X_kr_gate__X_kr + var_rapid_activating_delayed_rectifiyer_K_current_X_kr_gate__X_kr_inf) / var_rapid_activating_delayed_rectifiyer_K_current_X_kr_gate__tau_X_kr; // 1 / millisecond + const double var_sarcolemmal_calcium_pump__K_mpCa = 0.050000000000000003; // micromolar + const double var_sarcolemmal_calcium_pump__i_pCa_max = 0.050000000000000003; // microA_per_microF + const double var_sarcolemmal_calcium_pump__i_p_Ca = var_calcium_dynamics__Ca_i * var_sarcolemmal_calcium_pump__i_pCa_max / (var_calcium_dynamics__Ca_i + var_sarcolemmal_calcium_pump__K_mpCa); // microA_per_microF + const double var_slow_activating_delayed_rectifiyer_K_current_X_ks_gate__X_ks_infinity = 1 / (1 + exp(1.1764705882352942 - 0.073529411764705885 * var_chaste_interface__membrane__V)); // dimensionless + const double var_slow_activating_delayed_rectifiyer_K_current_X_ks_gate__tau_X_ks = 1 / (0.00013100000000000001 * (-10 + var_chaste_interface__membrane__V) / (-1 + exp(-0.68699999999999994 + 0.068699999999999997 * var_chaste_interface__membrane__V)) + 7.1899999999999999e-5 * (-10 + var_chaste_interface__membrane__V) / (1 - exp(1.48 - 0.14799999999999999 * var_chaste_interface__membrane__V))); // millisecond + const double d_dt_chaste_interface_var_slow_activating_delayed_rectifiyer_K_current_X_ks_gate__X_ks = (-var_chaste_interface__slow_activating_delayed_rectifiyer_K_current_X_ks_gate__X_ks + var_slow_activating_delayed_rectifiyer_K_current_X_ks_gate__X_ks_infinity) / var_slow_activating_delayed_rectifiyer_K_current_X_ks_gate__tau_X_ks; // 1 / millisecond + const double var_L_type_Ca_current__i_Ca_max = 4 * pow(var_membrane__F, 2) * (-0.34100000000000003 * mParameters[5] + var_calcium_dynamics__Ca_i * exp(2 * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * mParameters[8] * var_chaste_interface__membrane__V / ((-1 + exp(2 * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * var_L_type_Ca_current__C_sc * var_membrane__R * var_membrane__T); // microA_per_microF + const double var_L_type_Ca_current__i_Ca = var_L_type_Ca_current__i_Ca_max * var_chaste_interface__L_type_Ca_current_d_gate__d * var_chaste_interface__L_type_Ca_current_f_Ca_gate__f_Ca * var_chaste_interface__L_type_Ca_current_f_gate__f; // microA_per_microF + const double var_calcium_background_current__E_Ca = 0.5 * var_membrane__R * var_membrane__T * log(mParameters[5] / var_calcium_dynamics__Ca_i) / var_membrane__F; // millivolt + const double var_calcium_background_current__i_Ca_b = (-var_calcium_background_current__E_Ca + var_chaste_interface__membrane__V) * var_calcium_background_current__g_Cab; // microA_per_microF + const double var_Na_Ca_exchanger__i_NaCa = (pow(mParameters[4], 3) * mParameters[5] * exp(var_Na_Ca_exchanger__eta * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T)) - pow(mParameters[7], 3) * var_calcium_dynamics__Ca_i * exp((-1 + var_Na_Ca_exchanger__eta) * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * mParameters[16] / ((1 + var_Na_Ca_exchanger__K_sat * exp((-1 + var_Na_Ca_exchanger__eta) * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * (pow(var_Na_Ca_exchanger__K_mNa, 3) + pow(mParameters[7], 3)) * (var_Na_Ca_exchanger__K_mCa + mParameters[5])); // microA_per_microF + const double var_calcium_dynamics__Ca_i_orig_deriv = (-var_calcium_dynamics__J_up - 0.5 * (-2 * var_Na_Ca_exchanger__i_NaCa + var_L_type_Ca_current__i_Ca + var_calcium_background_current__i_Ca_b + var_sarcolemmal_calcium_pump__i_p_Ca) * var_L_type_Ca_current__C_sc * var_calcium_dynamics__A_Cap / (var_calcium_dynamics__V_myo * var_membrane__F) + var_calcium_dynamics__J_leak + var_calcium_dynamics__J_rel) * var_calcium_dynamics__beta_i; // micromolar / millisecond + const double d_dt_chaste_interface_var_calcium_dynamics__Ca_i_converted = 0.001 * var_calcium_dynamics__Ca_i_orig_deriv; // millimolar / millisecond + const double var_transient_outward_potassium_current_X_to_gate__alpha_X_to = 0.045159999999999999 * exp(0.035770000000000003 * var_chaste_interface__membrane__V); // per_millisecond + const double var_transient_outward_potassium_current_X_to_gate__beta_X_to = 0.098900000000000002 * exp(-0.062370000000000002 * var_chaste_interface__membrane__V); // per_millisecond + const double d_dt_chaste_interface_var_transient_outward_potassium_current_X_to_gate__X_to = (1 - var_chaste_interface__transient_outward_potassium_current_X_to_gate__X_to) * var_transient_outward_potassium_current_X_to_gate__alpha_X_to - var_chaste_interface__transient_outward_potassium_current_X_to_gate__X_to * var_transient_outward_potassium_current_X_to_gate__beta_X_to; // 1 / millisecond + const double var_transient_outward_potassium_current_Y_to_gate__alpha_Y_to = 0.0054149999999999997 * exp(-6.7000000000000002 - 0.20000000000000001 * var_chaste_interface__membrane__V) / (1 + 0.051334999999999999 * exp(-6.7000000000000002 - 0.20000000000000001 * var_chaste_interface__membrane__V)); // per_millisecond + const double var_transient_outward_potassium_current_Y_to_gate__beta_Y_to = 0.0054149999999999997 * exp(6.7000000000000002 + 0.20000000000000001 * var_chaste_interface__membrane__V) / (1 + 0.051334999999999999 * exp(6.7000000000000002 + 0.20000000000000001 * var_chaste_interface__membrane__V)); // per_millisecond + const double d_dt_chaste_interface_var_transient_outward_potassium_current_Y_to_gate__Y_to = (1 - var_chaste_interface__transient_outward_potassium_current_Y_to_gate__Y_to) * var_transient_outward_potassium_current_Y_to_gate__alpha_Y_to - var_chaste_interface__transient_outward_potassium_current_Y_to_gate__Y_to * var_transient_outward_potassium_current_Y_to_gate__beta_Y_to; // 1 / millisecond + + if (mSetVoltageDerivativeToZero) + { + d_dt_chaste_interface_var_membrane__V = 0.0; + } + else + { + const double var_L_type_Ca_current__P_CaK = 5.7899999999999998e-7; // cm_per_millisecond + const double var_L_type_Ca_current__i_Ca_half = -0.26500000000000001; // microA_per_microF + const double var_membrane__i_Stim_converted = GetIntracellularAreaStimulus(var_chaste_interface__environment__time); // uA_per_cm2 + const double var_membrane__i_Stim = var_membrane__i_Stim_converted / HeartConfig::Instance()->GetCapacitance(); // microA_per_microF + const double var_plateau_potassium_current__g_Kp = 0.0022160000000000001; // milliS_per_microF + const double var_plateau_potassium_current_Kp_gate__Kp_V = 1 / (1 + exp(1.2521739130434781 - 0.16722408026755853 * var_chaste_interface__membrane__V)); // dimensionless + const double var_rapid_activating_delayed_rectifiyer_K_current__R_V = 1 / (1 + 2.5 * exp(2.8000000000000003 + 0.10000000000000001 * var_chaste_interface__membrane__V)); // dimensionless + const double var_sodium_background_current__g_Nab = 0.0030999999999999999; // milliS_per_microF + const double var_sodium_potassium_pump__K_mKo = 1.5; // millimolar + const double var_sodium_potassium_pump__K_mNai = 10; // millimolar + const double var_sodium_potassium_pump__i_NaK_max = 0.69299999999999995; // microA_per_microF + const double var_L_type_Ca_current__i_CaK = 1000 * pow(var_membrane__F, 2) * (-mParameters[6] + mParameters[3] * exp(var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * var_L_type_Ca_current__P_CaK * var_chaste_interface__L_type_Ca_current_d_gate__d * var_chaste_interface__L_type_Ca_current_f_Ca_gate__f_Ca * var_chaste_interface__L_type_Ca_current_f_gate__f * var_chaste_interface__membrane__V / ((1 + var_L_type_Ca_current__i_Ca_max / var_L_type_Ca_current__i_Ca_half) * (-1 + exp(var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * var_L_type_Ca_current__C_sc * var_membrane__R * var_membrane__T); // microA_per_microF + const double var_rapid_activating_delayed_rectifiyer_K_current__E_K = var_membrane__R * var_membrane__T * log(mParameters[6] / mParameters[3]) / var_membrane__F; // millivolt + const double var_plateau_potassium_current__i_Kp = (-var_rapid_activating_delayed_rectifiyer_K_current__E_K + var_chaste_interface__membrane__V) * var_plateau_potassium_current__g_Kp * var_plateau_potassium_current_Kp_gate__Kp_V; // microA_per_microF + const double var_rapid_activating_delayed_rectifiyer_K_current__i_Kr = 0.5 * sqrt(mParameters[6]) * (-var_rapid_activating_delayed_rectifiyer_K_current__E_K + var_chaste_interface__membrane__V) * var_rapid_activating_delayed_rectifiyer_K_current__R_V * mParameters[14] * var_chaste_interface__rapid_activating_delayed_rectifiyer_K_current_X_kr_gate__X_kr; // microA_per_microF + const double var_fast_sodium_current__E_Na = var_membrane__R * var_membrane__T * log(mParameters[7] / mParameters[4]) / var_membrane__F; // millivolt + const double var_fast_sodium_current__i_Na = pow(var_chaste_interface__fast_sodium_current_m_gate__m, 3) * (-var_fast_sodium_current__E_Na + var_chaste_interface__membrane__V) * mParameters[10] * var_chaste_interface__fast_sodium_current_h_gate__h * var_chaste_interface__fast_sodium_current_j_gate__j; // microA_per_microF + const double var_slow_activating_delayed_rectifiyer_K_current__E_Ks = var_membrane__R * var_membrane__T * log((mParameters[6] + 0.018329999999999999 * mParameters[7]) / (mParameters[3] + 0.018329999999999999 * mParameters[4])) / var_membrane__F; // millivolt + const double var_slow_activating_delayed_rectifiyer_K_current__i_Ks = pow(var_chaste_interface__slow_activating_delayed_rectifiyer_K_current_X_ks_gate__X_ks, 2) * (-var_slow_activating_delayed_rectifiyer_K_current__E_Ks + var_chaste_interface__membrane__V) * mParameters[15]; // microA_per_microF + const double var_sodium_background_current__i_Na_b = (-var_fast_sodium_current__E_Na + var_chaste_interface__membrane__V) * var_sodium_background_current__g_Nab; // microA_per_microF + const double var_sodium_potassium_pump__sigma = -0.14285714285714285 + 0.14285714285714285 * exp(0.01485884101040119 * mParameters[7]); // dimensionless + const double var_sodium_potassium_pump__f_NaK = 1 / (1 + 0.1245 * exp(-0.10000000000000001 * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T)) + 0.036499999999999998 * var_sodium_potassium_pump__sigma * exp(-var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))); // dimensionless + const double var_sodium_potassium_pump__i_NaK = var_sodium_potassium_pump__f_NaK * var_sodium_potassium_pump__i_NaK_max * mParameters[6] / ((1 + pow((var_sodium_potassium_pump__K_mNai / mParameters[4]), 1.5)) * (var_sodium_potassium_pump__K_mKo + mParameters[6])); // microA_per_microF + const double var_time_independent_potassium_current__K_mK1 = 13; // millimolar + const double var_time_independent_potassium_current_K1_gate__K1_infinity = 1 / (2 + exp(1.6200000000000001 * (-var_rapid_activating_delayed_rectifiyer_K_current__E_K + var_chaste_interface__membrane__V) * var_membrane__F / (var_membrane__R * var_membrane__T))); // dimensionless + const double var_time_independent_potassium_current__i_K1 = (-var_rapid_activating_delayed_rectifiyer_K_current__E_K + var_chaste_interface__membrane__V) * mParameters[6] * mParameters[13] * var_time_independent_potassium_current_K1_gate__K1_infinity / (mParameters[6] + var_time_independent_potassium_current__K_mK1); // microA_per_microF + const double var_transient_outward_potassium_current__i_to = (-var_rapid_activating_delayed_rectifiyer_K_current__E_K + var_chaste_interface__membrane__V) * mParameters[17] * var_chaste_interface__transient_outward_potassium_current_X_to_gate__X_to * var_chaste_interface__transient_outward_potassium_current_Y_to_gate__Y_to; // microA_per_microF + d_dt_chaste_interface_var_membrane__V = -var_L_type_Ca_current__i_Ca - var_L_type_Ca_current__i_CaK - var_Na_Ca_exchanger__i_NaCa - var_calcium_background_current__i_Ca_b - var_fast_sodium_current__i_Na - var_membrane__i_Stim - var_plateau_potassium_current__i_Kp - var_rapid_activating_delayed_rectifiyer_K_current__i_Kr - var_sarcolemmal_calcium_pump__i_p_Ca - var_slow_activating_delayed_rectifiyer_K_current__i_Ks - var_sodium_background_current__i_Na_b - var_sodium_potassium_pump__i_NaK - var_time_independent_potassium_current__i_K1 - var_transient_outward_potassium_current__i_to; // millivolt / millisecond + } + + rDY[0] = d_dt_chaste_interface_var_membrane__V; + rDY[1] = d_dt_chaste_interface_var_calcium_dynamics__Ca_i_converted; + rDY[2] = d_dt_chaste_interface_var_fast_sodium_current_m_gate__m; + rDY[3] = d_dt_chaste_interface_var_fast_sodium_current_h_gate__h; + rDY[4] = d_dt_chaste_interface_var_fast_sodium_current_j_gate__j; + rDY[5] = d_dt_chaste_interface_var_rapid_activating_delayed_rectifiyer_K_current_X_kr_gate__X_kr; + rDY[6] = d_dt_chaste_interface_var_slow_activating_delayed_rectifiyer_K_current_X_ks_gate__X_ks; + rDY[7] = d_dt_chaste_interface_var_transient_outward_potassium_current_X_to_gate__X_to; + rDY[8] = d_dt_chaste_interface_var_transient_outward_potassium_current_Y_to_gate__Y_to; + rDY[9] = d_dt_chaste_interface_var_L_type_Ca_current_f_gate__f; + rDY[10] = d_dt_chaste_interface_var_L_type_Ca_current_d_gate__d; + rDY[11] = d_dt_chaste_interface_var_L_type_Ca_current_f_Ca_gate__f_Ca; + rDY[12] = d_dt_chaste_interface_var_calcium_dynamics__Ca_SR; + } + + std::vector Cellfox_mcharg_gilmour_2002FromCellML::ComputeDerivedQuantities(double var_chaste_interface__environment__time, const std::vector & rY) + { + // Inputs: + // Time units: millisecond + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -94.7 + double var_chaste_interface__calcium_dynamics__Ca_i_converted = rY[1]; + // Units: millimolar; Initial value: 4.72e-05 + double var_chaste_interface__fast_sodium_current_m_gate__m = rY[2]; + // Units: dimensionless; Initial value: 0.00024676 + double var_chaste_interface__fast_sodium_current_h_gate__h = rY[3]; + // Units: dimensionless; Initial value: 0.99869 + double var_chaste_interface__fast_sodium_current_j_gate__j = rY[4]; + // Units: dimensionless; Initial value: 0.99887 + double var_chaste_interface__rapid_activating_delayed_rectifiyer_K_current_X_kr_gate__X_kr = rY[5]; + // Units: dimensionless; Initial value: 0.229 + double var_chaste_interface__slow_activating_delayed_rectifiyer_K_current_X_ks_gate__X_ks = rY[6]; + // Units: dimensionless; Initial value: 0.0001 + double var_chaste_interface__transient_outward_potassium_current_X_to_gate__X_to = rY[7]; + // Units: dimensionless; Initial value: 3.742e-05 + double var_chaste_interface__transient_outward_potassium_current_Y_to_gate__Y_to = rY[8]; + // Units: dimensionless; Initial value: 1.0 + double var_chaste_interface__L_type_Ca_current_f_gate__f = rY[9]; + // Units: dimensionless; Initial value: 0.983 + double var_chaste_interface__L_type_Ca_current_d_gate__d = rY[10]; + // Units: dimensionless; Initial value: 0.0001 + double var_chaste_interface__L_type_Ca_current_f_Ca_gate__f_Ca = rY[11]; + // Units: dimensionless; Initial value: 0.942 + double var_chaste_interface__calcium_dynamics__Ca_SR = rY[12]; + // Units: micromolar; Initial value: 320.0 + + // Mathematics + const double var_L_type_Ca_current__C_sc = 1; // microF_per_cm2 + const double var_Na_Ca_exchanger__K_mCa = 1380; // micromolar + const double var_Na_Ca_exchanger__K_mNa = 87.5; // millimolar + const double var_Na_Ca_exchanger__K_sat = 0.20000000000000001; // dimensionless + const double var_Na_Ca_exchanger__eta = 0.34999999999999998; // dimensionless + const double var_calcium_dynamics__Ca_i = 1000 * var_chaste_interface__calcium_dynamics__Ca_i_converted; // micromolar + const double var_calcium_dynamics__gamma = 1 / (1 + 8000000000.0 / pow(var_chaste_interface__calcium_dynamics__Ca_SR, 3)); // dimensionless + const double var_membrane__F = 96.5; // coulomb_per_millimole + const double var_membrane__R = 8.3140000000000001; // joule_per_mole_kelvin + const double var_membrane__T = 310; // kelvin + const double var_L_type_Ca_current_f_gate__tau_f = 30 + 200 / (1 + exp(2.1052631578947367 + 0.10526315789473684 * var_chaste_interface__membrane__V)); // millisecond + const double var_calcium_dynamics__J_rel = (-var_calcium_dynamics__Ca_i + var_chaste_interface__calcium_dynamics__Ca_SR * var_calcium_dynamics__gamma) * var_chaste_interface__L_type_Ca_current_d_gate__d * var_chaste_interface__L_type_Ca_current_f_Ca_gate__f_Ca * var_chaste_interface__L_type_Ca_current_f_gate__f * mParameters[1] / (1 + 1.6499999999999999 * exp(0.050000000000000003 * var_chaste_interface__membrane__V)); // micromolar_per_millisecond + const double var_fast_sodium_current_h_gate__alpha_h = 0.13500000000000001 * exp(-11.764705882352942 + 0.14705882352941177 * mParameters[12] - 0.14705882352941177 * var_chaste_interface__membrane__V); // per_millisecond + const double var_fast_sodium_current_h_gate__beta_h = 7.5 / (1 + exp(-1.1000000000000001 + 0.10000000000000001 * mParameters[12] - 0.10000000000000001 * var_chaste_interface__membrane__V)); // per_millisecond + const double var_fast_sodium_current_h_gate__tau_h = 1 / (var_fast_sodium_current_h_gate__alpha_h + var_fast_sodium_current_h_gate__beta_h); // millisecond + const double var_fast_sodium_current_j_gate__alpha_j = 0.17499999999999999 * exp(-4.3478260869565215 + 0.043478260869565216 * mParameters[12] - 0.043478260869565216 * var_chaste_interface__membrane__V) / (1 + exp(11.85 + 0.14999999999999999 * var_chaste_interface__membrane__V - 0.14999999999999999 * mParameters[12])); // per_millisecond + const double var_fast_sodium_current_j_gate__beta_j = 0.29999999999999999 / (1 + exp(-3.2000000000000002 + 0.10000000000000001 * mParameters[12] - 0.10000000000000001 * var_chaste_interface__membrane__V)); // per_millisecond + const double var_fast_sodium_current_j_gate__tau_j = 1 / (var_fast_sodium_current_j_gate__alpha_j + var_fast_sodium_current_j_gate__beta_j); // millisecond + const double var_membrane__i_Stim_converted = GetIntracellularAreaStimulus(var_chaste_interface__environment__time); // uA_per_cm2 + const double var_rapid_activating_delayed_rectifiyer_K_current__R_V = 1 / (1 + 2.5 * exp(2.8000000000000003 + 0.10000000000000001 * var_chaste_interface__membrane__V)); // dimensionless + const double var_L_type_Ca_current__i_Ca_max = 4 * pow(var_membrane__F, 2) * (-0.34100000000000003 * mParameters[5] + var_calcium_dynamics__Ca_i * exp(2 * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * mParameters[8] * var_chaste_interface__membrane__V / ((-1 + exp(2 * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * var_L_type_Ca_current__C_sc * var_membrane__R * var_membrane__T); // microA_per_microF + const double var_L_type_Ca_current__i_Ca = var_L_type_Ca_current__i_Ca_max * var_chaste_interface__L_type_Ca_current_d_gate__d * var_chaste_interface__L_type_Ca_current_f_Ca_gate__f_Ca * var_chaste_interface__L_type_Ca_current_f_gate__f; // microA_per_microF + const double var_L_type_Ca_current__i_Ca_converted = HeartConfig::Instance()->GetCapacitance() * var_L_type_Ca_current__i_Ca; // uA_per_cm2 + const double var_rapid_activating_delayed_rectifiyer_K_current__E_K = var_membrane__R * var_membrane__T * log(mParameters[6] / mParameters[3]) / var_membrane__F; // millivolt + const double var_rapid_activating_delayed_rectifiyer_K_current__i_Kr = 0.5 * sqrt(mParameters[6]) * (-var_rapid_activating_delayed_rectifiyer_K_current__E_K + var_chaste_interface__membrane__V) * var_rapid_activating_delayed_rectifiyer_K_current__R_V * mParameters[14] * var_chaste_interface__rapid_activating_delayed_rectifiyer_K_current_X_kr_gate__X_kr; // microA_per_microF + const double var_rapid_activating_delayed_rectifiyer_K_current__i_Kr_converted = HeartConfig::Instance()->GetCapacitance() * var_rapid_activating_delayed_rectifiyer_K_current__i_Kr; // uA_per_cm2 + const double var_Na_Ca_exchanger__i_NaCa = (pow(mParameters[4], 3) * mParameters[5] * exp(var_Na_Ca_exchanger__eta * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T)) - pow(mParameters[7], 3) * var_calcium_dynamics__Ca_i * exp((-1 + var_Na_Ca_exchanger__eta) * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * mParameters[16] / ((1 + var_Na_Ca_exchanger__K_sat * exp((-1 + var_Na_Ca_exchanger__eta) * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * (pow(var_Na_Ca_exchanger__K_mNa, 3) + pow(mParameters[7], 3)) * (var_Na_Ca_exchanger__K_mCa + mParameters[5])); // microA_per_microF + const double var_Na_Ca_exchanger__i_NaCa_converted = HeartConfig::Instance()->GetCapacitance() * var_Na_Ca_exchanger__i_NaCa; // uA_per_cm2 + const double var_fast_sodium_current__E_Na = var_membrane__R * var_membrane__T * log(mParameters[7] / mParameters[4]) / var_membrane__F; // millivolt + const double var_fast_sodium_current__i_Na = pow(var_chaste_interface__fast_sodium_current_m_gate__m, 3) * (-var_fast_sodium_current__E_Na + var_chaste_interface__membrane__V) * mParameters[10] * var_chaste_interface__fast_sodium_current_h_gate__h * var_chaste_interface__fast_sodium_current_j_gate__j; // microA_per_microF + const double var_fast_sodium_current__i_Na_converted = HeartConfig::Instance()->GetCapacitance() * var_fast_sodium_current__i_Na; // uA_per_cm2 + const double var_slow_activating_delayed_rectifiyer_K_current__E_Ks = var_membrane__R * var_membrane__T * log((mParameters[6] + 0.018329999999999999 * mParameters[7]) / (mParameters[3] + 0.018329999999999999 * mParameters[4])) / var_membrane__F; // millivolt + const double var_slow_activating_delayed_rectifiyer_K_current__i_Ks = pow(var_chaste_interface__slow_activating_delayed_rectifiyer_K_current_X_ks_gate__X_ks, 2) * (-var_slow_activating_delayed_rectifiyer_K_current__E_Ks + var_chaste_interface__membrane__V) * mParameters[15]; // microA_per_microF + const double var_slow_activating_delayed_rectifiyer_K_current__i_Ks_converted = HeartConfig::Instance()->GetCapacitance() * var_slow_activating_delayed_rectifiyer_K_current__i_Ks; // uA_per_cm2 + const double var_time_independent_potassium_current__K_mK1 = 13; // millimolar + const double var_time_independent_potassium_current_K1_gate__K1_infinity = 1 / (2 + exp(1.6200000000000001 * (-var_rapid_activating_delayed_rectifiyer_K_current__E_K + var_chaste_interface__membrane__V) * var_membrane__F / (var_membrane__R * var_membrane__T))); // dimensionless + const double var_time_independent_potassium_current__i_K1 = (-var_rapid_activating_delayed_rectifiyer_K_current__E_K + var_chaste_interface__membrane__V) * mParameters[6] * mParameters[13] * var_time_independent_potassium_current_K1_gate__K1_infinity / (mParameters[6] + var_time_independent_potassium_current__K_mK1); // microA_per_microF + const double var_time_independent_potassium_current__i_K1_converted = HeartConfig::Instance()->GetCapacitance() * var_time_independent_potassium_current__i_K1; // uA_per_cm2 + const double var_transient_outward_potassium_current__i_to = (-var_rapid_activating_delayed_rectifiyer_K_current__E_K + var_chaste_interface__membrane__V) * mParameters[17] * var_chaste_interface__transient_outward_potassium_current_X_to_gate__X_to * var_chaste_interface__transient_outward_potassium_current_Y_to_gate__Y_to; // microA_per_microF + const double var_transient_outward_potassium_current__i_to_converted = HeartConfig::Instance()->GetCapacitance() * var_transient_outward_potassium_current__i_to; // uA_per_cm2 + + std::vector dqs(14); + dqs[0] = var_calcium_dynamics__J_rel; + dqs[1] = var_chaste_interface__calcium_dynamics__Ca_i_converted; + dqs[2] = var_L_type_Ca_current__i_Ca_converted; + dqs[3] = var_L_type_Ca_current_f_gate__tau_f; + dqs[4] = var_fast_sodium_current__i_Na_converted; + dqs[5] = var_fast_sodium_current_h_gate__tau_h; + dqs[6] = var_fast_sodium_current_j_gate__tau_j; + dqs[7] = var_time_independent_potassium_current__i_K1_converted; + dqs[8] = var_rapid_activating_delayed_rectifiyer_K_current__i_Kr_converted; + dqs[9] = var_slow_activating_delayed_rectifiyer_K_current__i_Ks_converted; + dqs[10] = var_Na_Ca_exchanger__i_NaCa_converted; + dqs[11] = var_membrane__i_Stim_converted; + dqs[12] = var_transient_outward_potassium_current__i_to_converted; + dqs[13] = var_chaste_interface__environment__time; + return dqs; + } + +template<> +void OdeSystemInformation::Initialise(void) +{ + this->mSystemName = "fox_model_2001"; + this->mFreeVariableName = "time"; + this->mFreeVariableUnits = "millisecond"; + + // rY[0]: + this->mVariableNames.push_back("membrane_voltage"); + this->mVariableUnits.push_back("millivolt"); + this->mInitialConditions.push_back(-94.7); + + // rY[1]: + this->mVariableNames.push_back("cytosolic_calcium_concentration"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(4.72e-05); + + // rY[2]: + this->mVariableNames.push_back("membrane_fast_sodium_current_m_gate"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.00024676); + + // rY[3]: + this->mVariableNames.push_back("membrane_fast_sodium_current_h_gate"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.99869); + + // rY[4]: + this->mVariableNames.push_back("membrane_fast_sodium_current_j_gate"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.99887); + + // rY[5]: + this->mVariableNames.push_back("rapid_activating_delayed_rectifiyer_K_current_X_kr_gate__X_kr"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.229); + + // rY[6]: + this->mVariableNames.push_back("slow_activating_delayed_rectifiyer_K_current_X_ks_gate__X_ks"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.0001); + + // rY[7]: + this->mVariableNames.push_back("transient_outward_potassium_current_X_to_gate__X_to"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(3.742e-05); + + // rY[8]: + this->mVariableNames.push_back("transient_outward_potassium_current_Y_to_gate__Y_to"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(1.0); + + // rY[9]: + this->mVariableNames.push_back("membrane_L_type_calcium_current_f_gate"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.983); + + // rY[10]: + this->mVariableNames.push_back("membrane_L_type_calcium_current_d_gate"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.0001); + + // rY[11]: + this->mVariableNames.push_back("membrane_L_type_calcium_current_fCa_gate"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.942); + + // rY[12]: + this->mVariableNames.push_back("JSR_calcium_concentration"); + this->mVariableUnits.push_back("micromolar"); + this->mInitialConditions.push_back(320.0); + + // mParameters[0]: + this->mParameterNames.push_back("SR_leak_current_max"); + this->mParameterUnits.push_back("per_millisecond"); + + // mParameters[1]: + this->mParameterNames.push_back("SR_release_current_max"); + this->mParameterUnits.push_back("per_millisecond"); + + // mParameters[2]: + this->mParameterNames.push_back("SR_uptake_current_max"); + this->mParameterUnits.push_back("micromolar_per_millisecond"); + + // mParameters[3]: + this->mParameterNames.push_back("cytosolic_potassium_concentration"); + this->mParameterUnits.push_back("millimolar"); + + // mParameters[4]: + this->mParameterNames.push_back("cytosolic_sodium_concentration"); + this->mParameterUnits.push_back("millimolar"); + + // mParameters[5]: + this->mParameterNames.push_back("extracellular_calcium_concentration"); + this->mParameterUnits.push_back("micromolar"); + + // mParameters[6]: + this->mParameterNames.push_back("extracellular_potassium_concentration"); + this->mParameterUnits.push_back("millimolar"); + + // mParameters[7]: + this->mParameterNames.push_back("extracellular_sodium_concentration"); + this->mParameterUnits.push_back("millimolar"); + + // mParameters[8]: + this->mParameterNames.push_back("membrane_L_type_calcium_current_conductance"); + this->mParameterUnits.push_back("cm_per_millisecond"); + + // mParameters[9]: + this->mParameterNames.push_back("membrane_L_type_calcium_current_fCa_gate_tau"); + this->mParameterUnits.push_back("millisecond"); + + // mParameters[10]: + this->mParameterNames.push_back("membrane_fast_sodium_current_conductance"); + this->mParameterUnits.push_back("milliS_per_microF"); + + // mParameters[11]: + this->mParameterNames.push_back("membrane_fast_sodium_current_reduced_inactivation"); + this->mParameterUnits.push_back("dimensionless"); + + // mParameters[12]: + this->mParameterNames.push_back("membrane_fast_sodium_current_shift_inactivation"); + this->mParameterUnits.push_back("millivolt"); + + // mParameters[13]: + this->mParameterNames.push_back("membrane_inward_rectifier_potassium_current_conductance"); + this->mParameterUnits.push_back("milliS_per_microF"); + + // mParameters[14]: + this->mParameterNames.push_back("membrane_rapid_delayed_rectifier_potassium_current_conductance"); + this->mParameterUnits.push_back("milliS_per_microF"); + + // mParameters[15]: + this->mParameterNames.push_back("membrane_slow_delayed_rectifier_potassium_current_conductance"); + this->mParameterUnits.push_back("milliS_per_microF"); + + // mParameters[16]: + this->mParameterNames.push_back("membrane_sodium_calcium_exchanger_current_conductance"); + this->mParameterUnits.push_back("microA_per_microF"); + + // mParameters[17]: + this->mParameterNames.push_back("membrane_transient_outward_current_conductance"); + this->mParameterUnits.push_back("milliS_per_microF"); + + // Derived Quantity index [0]: + this->mDerivedQuantityNames.push_back("SR_release_current"); + this->mDerivedQuantityUnits.push_back("micromolar_per_millisecond"); + + // Derived Quantity index [1]: + this->mDerivedQuantityNames.push_back("cytosolic_calcium_concentration"); + this->mDerivedQuantityUnits.push_back("millimolar"); + + // Derived Quantity index [2]: + this->mDerivedQuantityNames.push_back("membrane_L_type_calcium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [3]: + this->mDerivedQuantityNames.push_back("membrane_L_type_calcium_current_f_gate_tau"); + this->mDerivedQuantityUnits.push_back("millisecond"); + + // Derived Quantity index [4]: + this->mDerivedQuantityNames.push_back("membrane_fast_sodium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [5]: + this->mDerivedQuantityNames.push_back("membrane_fast_sodium_current_h_gate_tau"); + this->mDerivedQuantityUnits.push_back("millisecond"); + + // Derived Quantity index [6]: + this->mDerivedQuantityNames.push_back("membrane_fast_sodium_current_j_gate_tau"); + this->mDerivedQuantityUnits.push_back("millisecond"); + + // Derived Quantity index [7]: + this->mDerivedQuantityNames.push_back("membrane_inward_rectifier_potassium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [8]: + this->mDerivedQuantityNames.push_back("membrane_rapid_delayed_rectifier_potassium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [9]: + this->mDerivedQuantityNames.push_back("membrane_slow_delayed_rectifier_potassium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [10]: + this->mDerivedQuantityNames.push_back("membrane_sodium_calcium_exchanger_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [11]: + this->mDerivedQuantityNames.push_back("membrane_stimulus_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [12]: + this->mDerivedQuantityNames.push_back("membrane_transient_outward_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [13]: + this->mDerivedQuantityNames.push_back("time"); + this->mDerivedQuantityUnits.push_back("millisecond"); + + this->mInitialised = true; +} + +// Serialization for Boost >= 1.36 +#include "SerializationExportWrapperForCpp.hpp" +CHASTE_CLASS_EXPORT(Cellfox_mcharg_gilmour_2002FromCellML) + diff --git a/chaste_codegen/tests/numerical/baseline/Normal/fox_mcharg_gilmour_2002_console_script.hpp b/chaste_codegen/tests/numerical/baseline/Normal/fox_mcharg_gilmour_2002_console_script.hpp new file mode 100644 index 00000000..2bacd16d --- /dev/null +++ b/chaste_codegen/tests/numerical/baseline/Normal/fox_mcharg_gilmour_2002_console_script.hpp @@ -0,0 +1,85 @@ +#ifndef CELLFOX_MCHARG_GILMOUR_2002FROMCELLML_HPP_ +#define CELLFOX_MCHARG_GILMOUR_2002FROMCELLML_HPP_ + +//! @file +//! +//! This source file was generated from CellML by chaste_codegen version (version omitted as unimportant) +//! +//! Model: fox_model_2001 +//! +//! Processed by chaste_codegen: https://github.com/ModellingWebLab/chaste-codegen +//! (translator: chaste_codegen, model type: Normal) +//! on (date omitted as unimportant) +//! +//! + +#include "ChasteSerialization.hpp" +#include +#include "AbstractStimulusFunction.hpp" +#include "AbstractCardiacCell.hpp" + +class Cellfox_mcharg_gilmour_2002FromCellML : public AbstractCardiacCell +{ + friend class boost::serialization::access; + template + void serialize(Archive & archive, const unsigned int version) + { + archive & boost::serialization::base_object(*this); + + } + + // + // Settable parameters and readable variables + // + + +private: +const bool is_concentration[13] = {false, true, false, false, false, false, false, false, false, false, false, false, true}; +const bool is_probability[13] = {false, false, true, true, true, false, false, false, false, true, true, true, false}; +public: + + boost::shared_ptr UseCellMLDefaultStimulus(); + double GetIntracellularCalciumConcentration(); + Cellfox_mcharg_gilmour_2002FromCellML(boost::shared_ptr pSolver, boost::shared_ptr pIntracellularStimulus); + ~Cellfox_mcharg_gilmour_2002FromCellML(); + void VerifyStateVariables(); + double GetIIonic(const std::vector* pStateVariables=NULL); + void EvaluateYDerivatives(double var_chaste_interface__environment__time, const std::vector& rY, std::vector& rDY); + + std::vector ComputeDerivedQuantities(double var_chaste_interface__environment__time, const std::vector & rY); +}; + +// Needs to be included last +#include "SerializationExportWrapper.hpp" +CHASTE_CLASS_EXPORT(Cellfox_mcharg_gilmour_2002FromCellML) + +namespace boost +{ + namespace serialization + { + template + inline void save_construct_data( + Archive & ar, const Cellfox_mcharg_gilmour_2002FromCellML * t, const unsigned int fileVersion) + { + const boost::shared_ptr p_solver = t->GetSolver(); + const boost::shared_ptr p_stimulus = t->GetStimulusFunction(); + ar << p_solver; + ar << p_stimulus; + } + + template + inline void load_construct_data( + Archive & ar, Cellfox_mcharg_gilmour_2002FromCellML * t, const unsigned int fileVersion) + { + boost::shared_ptr p_solver; + boost::shared_ptr p_stimulus; + ar >> p_solver; + ar >> p_stimulus; + ::new(t)Cellfox_mcharg_gilmour_2002FromCellML(p_solver, p_stimulus); + } + + } + +} + +#endif // CELLFOX_MCHARG_GILMOUR_2002FROMCELLML_HPP_ \ No newline at end of file diff --git a/chaste_codegen/tests/numerical/baseline/Normal/luo_rudy_1994.cpp b/chaste_codegen/tests/numerical/baseline/Normal/luo_rudy_1994.cpp new file mode 100644 index 00000000..447bcdcb --- /dev/null +++ b/chaste_codegen/tests/numerical/baseline/Normal/luo_rudy_1994.cpp @@ -0,0 +1,520 @@ +//! @file +//! +//! This source file was generated from CellML by chaste_codegen version (version omitted as unimportant) +//! +//! Model: luo_rudy_1994 +//! +//! Processed by chaste_codegen: https://github.com/ModellingWebLab/chaste-codegen +//! (translator: chaste_codegen, model type: Normal) +//! on (date omitted as unimportant) +//! +//! + +#include "luo_rudy_1994.hpp" +#include +#include +#include +#include +#include "Exception.hpp" +#include "OdeSystemInformation.hpp" +#include "RegularStimulus.hpp" +#include "HeartConfig.hpp" +#include "IsNan.hpp" +#include "MathsCustomFunctions.hpp" + + + + + + boost::shared_ptr Cellluo_rudy_1994FromCellML::UseCellMLDefaultStimulus() + { + // Use the default stimulus specified by CellML metadata + const double var_chaste_interface__membrane__stimCurrent_converted = 50.000000000000007; // uA_per_cm2 + const double var_chaste_interface__membrane__stimDuration = 0.5; // ms + const double var_chaste_interface__membrane__stimPeriod = 1000; // ms + boost::shared_ptr p_cellml_stim(new RegularStimulus( + -fabs(var_chaste_interface__membrane__stimCurrent_converted), + var_chaste_interface__membrane__stimDuration, + var_chaste_interface__membrane__stimPeriod, + 0.0 + )); + mpIntracellularStimulus = p_cellml_stim; + return p_cellml_stim; + } + double Cellluo_rudy_1994FromCellML::GetIntracellularCalciumConcentration() + { + return mStateVariables[1]; + } + Cellluo_rudy_1994FromCellML::Cellluo_rudy_1994FromCellML(boost::shared_ptr pSolver, boost::shared_ptr pIntracellularStimulus) + : AbstractCardiacCell( + pSolver, + 12, + 0, + pIntracellularStimulus) + { + // Time units: millisecond + // + this->mpSystemInfo = OdeSystemInformation::Instance(); + Init(); + + // We have a default stimulus specified in the CellML file metadata + this->mHasDefaultStimulusFromCellML = true; + + this->mParameters[0] = 1.8; // (var_ionic_concentrations__Cao) [mM] + this->mParameters[1] = 5.4000000000000004; // (var_ionic_concentrations__Ko) [mM] + this->mParameters[2] = 140; // (var_ionic_concentrations__Nao) [mM] + this->mParameters[3] = 0.01; // (var_membrane__Cm) [uF_per_mm2] + this->mParameters[4] = 0.16; // (var_fast_sodium_current__g_Na) [mS_per_mm2] + this->mParameters[5] = 0.0074999999999999997; // (var_time_independent_potassium_current__g_K1_max) [mS_per_mm2] + } + + Cellluo_rudy_1994FromCellML::~Cellluo_rudy_1994FromCellML() + { + } + + + void Cellluo_rudy_1994FromCellML::VerifyStateVariables() + { + std::vector& rY = rGetStateVariables(); + std::string error_message = ""; + + for (unsigned i=0; i < 12; i++) + { + if(std::isnan(rY[i])) + { + error_message += "State variable " + this->rGetStateVariableNames()[i] + " is not a number\n"; + } + if(std::isinf(rY[i])) + { + error_message += "State variable " + this->rGetStateVariableNames()[i] + " has become INFINITE\n"; + } + if(this->is_concentration[i] && rY[i] < 0) + { + error_message += "Concentration " + this->rGetStateVariableNames()[i] + " below 0\n"; + } + if(this->is_probability[i] && rY[i] < 0) + { + error_message += "Probability " + this->rGetStateVariableNames()[i] + " below 0\n"; + } + if(this->is_probability[i] && rY[i] > 1) + { + error_message += "Probability " + this->rGetStateVariableNames()[i] + " above 1\n"; + } + } + if (error_message != ""){ + EXCEPTION(DumpState(error_message)); + } + } + + double Cellluo_rudy_1994FromCellML::GetIIonic(const std::vector* pStateVariables) + { + // For state variable interpolation (SVI) we read in interpolated state variables, + // otherwise for ionic current interpolation (ICI) we use the state variables of this model (node). + if (!pStateVariables) pStateVariables = &rGetStateVariables(); + const std::vector& rY = *pStateVariables; + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: mV; Initial value: -84.624 + double var_chaste_interface__ionic_concentrations__Cai = rY[1]; + // Units: mM; Initial value: 0.00012 + double var_chaste_interface__fast_sodium_current_m_gate__m = rY[2]; + // Units: dimensionless; Initial value: 0.0 + double var_chaste_interface__fast_sodium_current_h_gate__h = rY[3]; + // Units: dimensionless; Initial value: 1.0 + double var_chaste_interface__fast_sodium_current_j_gate__j = rY[4]; + // Units: dimensionless; Initial value: 1.0 + double var_chaste_interface__L_type_Ca_channel_d_gate__d = rY[5]; + // Units: dimensionless; Initial value: 0.0 + double var_chaste_interface__L_type_Ca_channel_f_gate__f = rY[6]; + // Units: dimensionless; Initial value: 1.0 + double var_chaste_interface__time_dependent_potassium_current_X_gate__X = rY[7]; + // Units: dimensionless; Initial value: 0.0 + double var_chaste_interface__ionic_concentrations__Nai = rY[8]; + // Units: mM; Initial value: 10.0 + double var_chaste_interface__ionic_concentrations__Ki = rY[9]; + // Units: mM; Initial value: 145.0 + + const double var_L_type_Ca_channel_f_Ca_gate__Km_Ca = 0.00059999999999999995; // mM + const double var_Na_Ca_exchanger__K_NaCa = 20; // uA_per_mm2 + const double var_Na_Ca_exchanger__K_mCa = 1.3799999999999999; // mM + const double var_Na_Ca_exchanger__K_mNa = 87.5; // mM + const double var_Na_Ca_exchanger__K_sat = 0.10000000000000001; // dimensionless + const double var_Na_Ca_exchanger__eta = 0.34999999999999998; // dimensionless + const double var_calcium_background_current__g_Cab = 3.0159999999999999e-5; // mS_per_mm2 + const double var_L_type_Ca_channel_f_Ca_gate__f_Ca = 1 / (1 + pow(var_chaste_interface__ionic_concentrations__Cai, 2) / pow(var_L_type_Ca_channel_f_Ca_gate__Km_Ca, 2)); // dimensionless + const double var_membrane__F = 96845; // faradays_constant_units + const double var_membrane__R = 8314.5; // gas_constant_units + const double var_membrane__T = 310; // kelvin + const double var_calcium_background_current__E_CaN = 0.5 * var_membrane__R * var_membrane__T * log(mParameters[0] / var_chaste_interface__ionic_concentrations__Cai) / var_membrane__F; // mV + const double var_fast_sodium_current__E_Na = var_membrane__R * var_membrane__T * log(mParameters[2] / var_chaste_interface__ionic_concentrations__Nai) / var_membrane__F; // mV + const double var_L_type_Ca_channel__I_CaCa = (((var_chaste_interface__membrane__V >= -1.3307320976818627e-6) && (var_chaste_interface__membrane__V <= 1.3307320976818627e-6)) ? (375733.02761014085 * (1.3307320976818627e-6 + var_chaste_interface__membrane__V) * (1.0459259999999999e-7 * (-0.34000000000000002 * mParameters[0] + var_chaste_interface__ionic_concentrations__Cai * exp(9.9999999999999995e-8)) / (-1 + exp(9.9999999999999995e-8)) + 1.0459259999999999e-7 * (-0.34000000000000002 * mParameters[0] + var_chaste_interface__ionic_concentrations__Cai * exp(-9.9999999999999995e-8)) / (-1 + exp(-9.9999999999999995e-8))) - 1.0459259999999999e-7 * (-0.34000000000000002 * mParameters[0] + var_chaste_interface__ionic_concentrations__Cai * exp(-9.9999999999999995e-8)) / (-1 + exp(-9.9999999999999995e-8))) : (0.078597788527232842 * (-0.34000000000000002 * mParameters[0] + var_chaste_interface__ionic_concentrations__Cai * exp(0.075146605522028176 * var_chaste_interface__membrane__V)) * var_chaste_interface__membrane__V / (-1 + exp(0.075146605522028176 * var_chaste_interface__membrane__V)))); // uA_per_mm2 + const double var_L_type_Ca_channel__I_CaK = (((var_chaste_interface__membrane__V >= -2.6614641953637254e-6) && (var_chaste_interface__membrane__V <= 2.6614641953637254e-6)) ? (187866.51380507043 * (2.6614641953637254e-6 + var_chaste_interface__membrane__V) * (1.8691085000000002e-11 * (-0.75 * mParameters[1] + 0.75 * var_chaste_interface__ionic_concentrations__Ki * exp(9.9999999999999995e-8)) / (-1 + exp(9.9999999999999995e-8)) + 1.8691085000000002e-11 * (-0.75 * mParameters[1] + 0.75 * var_chaste_interface__ionic_concentrations__Ki * exp(-9.9999999999999995e-8)) / (-1 + exp(-9.9999999999999995e-8))) - 1.8691085000000002e-11 * (-0.75 * mParameters[1] + 0.75 * var_chaste_interface__ionic_concentrations__Ki * exp(-9.9999999999999995e-8)) / (-1 + exp(-9.9999999999999995e-8))) : (7.0228579563684903e-6 * (-0.75 * mParameters[1] + 0.75 * var_chaste_interface__ionic_concentrations__Ki * exp(0.037573302761014088 * var_chaste_interface__membrane__V)) * var_chaste_interface__membrane__V / (-1 + exp(0.037573302761014088 * var_chaste_interface__membrane__V)))); // uA_per_mm2 + const double var_L_type_Ca_channel__I_CaNa = (((var_chaste_interface__membrane__V >= -2.6614641953637254e-6) && (var_chaste_interface__membrane__V <= 2.6614641953637254e-6)) ? (187866.51380507043 * (2.6614641953637254e-6 + var_chaste_interface__membrane__V) * (6.5370374999999993e-11 * (-0.75 * mParameters[2] + 0.75 * var_chaste_interface__ionic_concentrations__Nai * exp(9.9999999999999995e-8)) / (-1 + exp(9.9999999999999995e-8)) + 6.5370374999999993e-11 * (-0.75 * mParameters[2] + 0.75 * var_chaste_interface__ionic_concentrations__Nai * exp(-9.9999999999999995e-8)) / (-1 + exp(-9.9999999999999995e-8))) - 6.5370374999999993e-11 * (-0.75 * mParameters[2] + 0.75 * var_chaste_interface__ionic_concentrations__Nai * exp(-9.9999999999999995e-8)) / (-1 + exp(-9.9999999999999995e-8))) : (2.4561808914760263e-5 * (-0.75 * mParameters[2] + 0.75 * var_chaste_interface__ionic_concentrations__Nai * exp(0.037573302761014088 * var_chaste_interface__membrane__V)) * var_chaste_interface__membrane__V / (-1 + exp(0.037573302761014088 * var_chaste_interface__membrane__V)))); // uA_per_mm2 + const double var_L_type_Ca_channel__i_CaCa = var_L_type_Ca_channel__I_CaCa * var_chaste_interface__L_type_Ca_channel_d_gate__d * var_L_type_Ca_channel_f_Ca_gate__f_Ca * var_chaste_interface__L_type_Ca_channel_f_gate__f; // uA_per_mm2 + const double var_L_type_Ca_channel__i_CaK = var_L_type_Ca_channel__I_CaK * var_chaste_interface__L_type_Ca_channel_d_gate__d * var_L_type_Ca_channel_f_Ca_gate__f_Ca * var_chaste_interface__L_type_Ca_channel_f_gate__f; // uA_per_mm2 + const double var_L_type_Ca_channel__i_CaNa = var_L_type_Ca_channel__I_CaNa * var_chaste_interface__L_type_Ca_channel_d_gate__d * var_L_type_Ca_channel_f_Ca_gate__f_Ca * var_chaste_interface__L_type_Ca_channel_f_gate__f; // uA_per_mm2 + const double var_L_type_Ca_channel__i_Ca_L = var_L_type_Ca_channel__i_CaCa + var_L_type_Ca_channel__i_CaK + var_L_type_Ca_channel__i_CaNa; // uA_per_mm2 + const double var_Na_Ca_exchanger__i_NaCa = (pow(var_chaste_interface__ionic_concentrations__Nai, 3) * mParameters[0] * exp(var_Na_Ca_exchanger__eta * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T)) - pow(mParameters[2], 3) * var_chaste_interface__ionic_concentrations__Cai * exp((-1 + var_Na_Ca_exchanger__eta) * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * var_Na_Ca_exchanger__K_NaCa / ((1 + var_Na_Ca_exchanger__K_sat * exp((-1 + var_Na_Ca_exchanger__eta) * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * (pow(var_Na_Ca_exchanger__K_mNa, 3) + pow(mParameters[2], 3)) * (var_Na_Ca_exchanger__K_mCa + mParameters[0])); // uA_per_mm2 + const double var_calcium_background_current__i_Ca_b = (-var_calcium_background_current__E_CaN + var_chaste_interface__membrane__V) * var_calcium_background_current__g_Cab; // uA_per_mm2 + const double var_fast_sodium_current__i_Na = pow(var_chaste_interface__fast_sodium_current_m_gate__m, 3) * (-var_fast_sodium_current__E_Na + var_chaste_interface__membrane__V) * mParameters[4] * var_chaste_interface__fast_sodium_current_h_gate__h * var_chaste_interface__fast_sodium_current_j_gate__j; // uA_per_mm2 + const double var_fast_sodium_current__i_Na_converted = 100.00000000000001 * var_fast_sodium_current__i_Na; // uA_per_cm2 + const double var_non_specific_calcium_activated_current__I_ns_K = ((((var_chaste_interface__membrane__V >= -2.6614641953637254e-6 + 26.614641953637257 * log((mParameters[1] + mParameters[2]) / (var_chaste_interface__ionic_concentrations__Ki + var_chaste_interface__ionic_concentrations__Nai))) && (var_chaste_interface__membrane__V <= 2.6614641953637254e-6 + 26.614641953637257 * log((mParameters[1] + mParameters[2]) / (var_chaste_interface__ionic_concentrations__Ki + var_chaste_interface__ionic_concentrations__Nai)))) || ((var_chaste_interface__membrane__V >= 2.6614641953637254e-6 + 26.614641953637257 * log((mParameters[1] + mParameters[2]) / (var_chaste_interface__ionic_concentrations__Ki + var_chaste_interface__ionic_concentrations__Nai))) && (var_chaste_interface__membrane__V <= -2.6614641953637254e-6 + 26.614641953637257 * log((mParameters[1] + mParameters[2]) / (var_chaste_interface__ionic_concentrations__Ki + var_chaste_interface__ionic_concentrations__Nai))))) ? (1.6947874999999998e-11 * (-0.75 * mParameters[1] + 0.75 * var_chaste_interface__ionic_concentrations__Ki * exp(9.9999999999999995e-8)) / (-1 + exp(9.9999999999999995e-8)) - 187866.51380507043 * (-1.6947874999999998e-11 * (-0.75 * mParameters[1] + 0.75 * var_chaste_interface__ionic_concentrations__Ki * exp(9.9999999999999995e-8)) / (-1 + exp(9.9999999999999995e-8)) - 1.6947874999999998e-11 * (-0.75 * mParameters[1] + 0.75 * var_chaste_interface__ionic_concentrations__Ki * exp(-9.9999999999999995e-8)) / (-1 + exp(-9.9999999999999995e-8))) * (-2.6614641953637254e-6 - 26.614641953637257 * log((mParameters[1] + mParameters[2]) / (var_chaste_interface__ionic_concentrations__Ki + var_chaste_interface__ionic_concentrations__Nai)) + var_chaste_interface__membrane__V)) : (6.3678763853082156e-6 * (-0.75 * mParameters[1] + 0.75 * var_chaste_interface__ionic_concentrations__Ki * exp(0.037573302761014088 * var_chaste_interface__membrane__V - log((mParameters[1] + mParameters[2]) / (var_chaste_interface__ionic_concentrations__Ki + var_chaste_interface__ionic_concentrations__Nai)))) * (-26.614641953637257 * log((mParameters[1] + mParameters[2]) / (var_chaste_interface__ionic_concentrations__Ki + var_chaste_interface__ionic_concentrations__Nai)) + var_chaste_interface__membrane__V) / (-1 + exp(0.037573302761014088 * var_chaste_interface__membrane__V - log((mParameters[1] + mParameters[2]) / (var_chaste_interface__ionic_concentrations__Ki + var_chaste_interface__ionic_concentrations__Nai)))))); // uA_per_mm2 + const double var_non_specific_calcium_activated_current__I_ns_Na = ((((var_chaste_interface__membrane__V >= -2.6614641953637254e-6 + 26.614641953637257 * log((mParameters[1] + mParameters[2]) / (var_chaste_interface__ionic_concentrations__Ki + var_chaste_interface__ionic_concentrations__Nai))) && (var_chaste_interface__membrane__V <= 2.6614641953637254e-6 + 26.614641953637257 * log((mParameters[1] + mParameters[2]) / (var_chaste_interface__ionic_concentrations__Ki + var_chaste_interface__ionic_concentrations__Nai)))) || ((var_chaste_interface__membrane__V >= 2.6614641953637254e-6 + 26.614641953637257 * log((mParameters[1] + mParameters[2]) / (var_chaste_interface__ionic_concentrations__Ki + var_chaste_interface__ionic_concentrations__Nai))) && (var_chaste_interface__membrane__V <= -2.6614641953637254e-6 + 26.614641953637257 * log((mParameters[1] + mParameters[2]) / (var_chaste_interface__ionic_concentrations__Ki + var_chaste_interface__ionic_concentrations__Nai))))) ? (1.6947874999999998e-11 * (-0.75 * mParameters[2] + 0.75 * var_chaste_interface__ionic_concentrations__Nai * exp(9.9999999999999995e-8)) / (-1 + exp(9.9999999999999995e-8)) - 187866.51380507043 * (-1.6947874999999998e-11 * (-0.75 * mParameters[2] + 0.75 * var_chaste_interface__ionic_concentrations__Nai * exp(9.9999999999999995e-8)) / (-1 + exp(9.9999999999999995e-8)) - 1.6947874999999998e-11 * (-0.75 * mParameters[2] + 0.75 * var_chaste_interface__ionic_concentrations__Nai * exp(-9.9999999999999995e-8)) / (-1 + exp(-9.9999999999999995e-8))) * (-2.6614641953637254e-6 - 26.614641953637257 * log((mParameters[1] + mParameters[2]) / (var_chaste_interface__ionic_concentrations__Ki + var_chaste_interface__ionic_concentrations__Nai)) + var_chaste_interface__membrane__V)) : (6.3678763853082156e-6 * (-0.75 * mParameters[2] + 0.75 * var_chaste_interface__ionic_concentrations__Nai * exp(0.037573302761014088 * var_chaste_interface__membrane__V - log((mParameters[1] + mParameters[2]) / (var_chaste_interface__ionic_concentrations__Ki + var_chaste_interface__ionic_concentrations__Nai)))) * (-26.614641953637257 * log((mParameters[1] + mParameters[2]) / (var_chaste_interface__ionic_concentrations__Ki + var_chaste_interface__ionic_concentrations__Nai)) + var_chaste_interface__membrane__V) / (-1 + exp(0.037573302761014088 * var_chaste_interface__membrane__V - log((mParameters[1] + mParameters[2]) / (var_chaste_interface__ionic_concentrations__Ki + var_chaste_interface__ionic_concentrations__Nai)))))); // uA_per_mm2 + const double var_non_specific_calcium_activated_current__K_m_ns_Ca = 0.0011999999999999999; // mM + const double var_non_specific_calcium_activated_current__i_ns_K = var_non_specific_calcium_activated_current__I_ns_K / (1 + pow(var_non_specific_calcium_activated_current__K_m_ns_Ca, 3) / pow(var_chaste_interface__ionic_concentrations__Cai, 3)); // uA_per_mm2 + const double var_non_specific_calcium_activated_current__i_ns_Na = var_non_specific_calcium_activated_current__I_ns_Na / (1 + pow(var_non_specific_calcium_activated_current__K_m_ns_Ca, 3) / pow(var_chaste_interface__ionic_concentrations__Cai, 3)); // uA_per_mm2 + const double var_non_specific_calcium_activated_current__i_ns_Ca = var_non_specific_calcium_activated_current__i_ns_K + var_non_specific_calcium_activated_current__i_ns_Na; // uA_per_mm2 + const double var_plateau_potassium_current__Kp = 1 / (1 + exp(1.2521739130434781 - 0.16722408026755853 * var_chaste_interface__membrane__V)); // dimensionless + const double var_plateau_potassium_current__g_Kp = 0.000183; // mS_per_mm2 + const double var_sarcolemmal_calcium_pump__I_pCa = 0.0115; // uA_per_mm2 + const double var_sarcolemmal_calcium_pump__K_mpCa = 0.00050000000000000001; // mM + const double var_sarcolemmal_calcium_pump__i_p_Ca = var_chaste_interface__ionic_concentrations__Cai * var_sarcolemmal_calcium_pump__I_pCa / (var_chaste_interface__ionic_concentrations__Cai + var_sarcolemmal_calcium_pump__K_mpCa); // uA_per_mm2 + const double var_sodium_background_current__E_NaN = var_fast_sodium_current__E_Na; // mV + const double var_sodium_background_current__g_Nab = 1.4100000000000001e-5; // mS_per_mm2 + const double var_sodium_background_current__i_Na_b = (-var_sodium_background_current__E_NaN + var_chaste_interface__membrane__V) * var_sodium_background_current__g_Nab; // uA_per_mm2 + const double var_sodium_potassium_pump__I_NaK = 0.014999999999999999; // uA_per_mm2 + const double var_sodium_potassium_pump__K_mKo = 1.5; // mM + const double var_sodium_potassium_pump__K_mNai = 10; // mM + const double var_sodium_potassium_pump__sigma = -0.14285714285714285 + 0.14285714285714285 * exp(0.01485884101040119 * mParameters[2]); // dimensionless + const double var_sodium_potassium_pump__f_NaK = 1 / (1 + 0.1245 * exp(-0.10000000000000001 * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T)) + 0.036499999999999998 * var_sodium_potassium_pump__sigma * exp(-var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))); // dimensionless + const double var_sodium_potassium_pump__i_NaK = mParameters[1] * var_sodium_potassium_pump__I_NaK * var_sodium_potassium_pump__f_NaK / ((1 + pow((var_sodium_potassium_pump__K_mNai / var_chaste_interface__ionic_concentrations__Nai), 1.5)) * (mParameters[1] + var_sodium_potassium_pump__K_mKo)); // uA_per_mm2 + const double var_time_dependent_potassium_current__PR_NaK = 0.018329999999999999; // dimensionless + const double var_time_dependent_potassium_current__E_K = var_membrane__R * var_membrane__T * log((mParameters[2] * var_time_dependent_potassium_current__PR_NaK + mParameters[1]) / (var_chaste_interface__ionic_concentrations__Nai * var_time_dependent_potassium_current__PR_NaK + var_chaste_interface__ionic_concentrations__Ki)) / var_membrane__F; // mV + const double var_time_dependent_potassium_current__g_K_max = 0.00282; // mS_per_mm2 + const double var_time_dependent_potassium_current__g_K = 0.43033148291193518 * sqrt(mParameters[1]) * var_time_dependent_potassium_current__g_K_max; // mS_per_mm2 + const double var_time_dependent_potassium_current_Xi_gate__Xi = 1 / (1 + exp(-1.7526479750778814 + 0.031152647975077882 * var_chaste_interface__membrane__V)); // dimensionless + const double var_time_dependent_potassium_current__i_K = pow(var_chaste_interface__time_dependent_potassium_current_X_gate__X, 2) * (-var_time_dependent_potassium_current__E_K + var_chaste_interface__membrane__V) * var_time_dependent_potassium_current__g_K * var_time_dependent_potassium_current_Xi_gate__Xi; // uA_per_mm2 + const double var_time_independent_potassium_current__E_K1 = var_membrane__R * var_membrane__T * log(mParameters[1] / var_chaste_interface__ionic_concentrations__Ki) / var_membrane__F; // mV + const double var_plateau_potassium_current__E_Kp = var_time_independent_potassium_current__E_K1; // mV + const double var_plateau_potassium_current__i_Kp = (-var_plateau_potassium_current__E_Kp + var_chaste_interface__membrane__V) * var_plateau_potassium_current__Kp * var_plateau_potassium_current__g_Kp; // uA_per_mm2 + const double var_time_independent_potassium_current__g_K1 = 0.43033148291193518 * sqrt(mParameters[1]) * mParameters[5]; // mS_per_mm2 + const double var_time_independent_potassium_current_K1_gate__alpha_K1 = 1.02 / (1 + exp(-14.1227775 + 0.23849999999999999 * var_chaste_interface__membrane__V - 0.23849999999999999 * var_time_independent_potassium_current__E_K1)); // per_ms + const double var_time_independent_potassium_current_K1_gate__beta_K1 = (0.49124000000000001 * exp(0.43983232 + 0.080320000000000003 * var_chaste_interface__membrane__V - 0.080320000000000003 * var_time_independent_potassium_current__E_K1) + exp(-36.698642499999998 + 0.061749999999999999 * var_chaste_interface__membrane__V - 0.061749999999999999 * var_time_independent_potassium_current__E_K1)) / (1 + exp(-2.4444678999999998 + 0.51429999999999998 * var_time_independent_potassium_current__E_K1 - 0.51429999999999998 * var_chaste_interface__membrane__V)); // per_ms + const double var_time_independent_potassium_current_K1_gate__K1_infinity = var_time_independent_potassium_current_K1_gate__alpha_K1 / (var_time_independent_potassium_current_K1_gate__alpha_K1 + var_time_independent_potassium_current_K1_gate__beta_K1); // dimensionless + const double var_time_independent_potassium_current__i_K1 = (-var_time_independent_potassium_current__E_K1 + var_chaste_interface__membrane__V) * var_time_independent_potassium_current__g_K1 * var_time_independent_potassium_current_K1_gate__K1_infinity; // uA_per_mm2 + const double var_time_independent_potassium_current__i_K1_converted = 100.00000000000001 * var_time_independent_potassium_current__i_K1; // uA_per_cm2 + const double var_chaste_interface__i_ionic = -var_fast_sodium_current__i_Na_converted - var_time_independent_potassium_current__i_K1_converted - 100.00000000000001 * var_L_type_Ca_channel__i_Ca_L - 100.00000000000001 * var_Na_Ca_exchanger__i_NaCa - 100.00000000000001 * var_calcium_background_current__i_Ca_b - 100.00000000000001 * var_non_specific_calcium_activated_current__i_ns_Ca - 100.00000000000001 * var_plateau_potassium_current__i_Kp - 100.00000000000001 * var_sarcolemmal_calcium_pump__i_p_Ca - 100.00000000000001 * var_sodium_background_current__i_Na_b - 100.00000000000001 * var_sodium_potassium_pump__i_NaK - 100.00000000000001 * var_time_dependent_potassium_current__i_K; // uA_per_cm2 + + const double i_ionic = var_chaste_interface__i_ionic; + EXCEPT_IF_NOT(!std::isnan(i_ionic)); + return i_ionic; + } + + void Cellluo_rudy_1994FromCellML::EvaluateYDerivatives(double var_chaste_interface__environment__time, const std::vector& rY, std::vector& rDY) + { + // Inputs: + // Time units: millisecond + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: mV; Initial value: -84.624 + double var_chaste_interface__ionic_concentrations__Cai = rY[1]; + // Units: mM; Initial value: 0.00012 + double var_chaste_interface__fast_sodium_current_m_gate__m = rY[2]; + // Units: dimensionless; Initial value: 0.0 + double var_chaste_interface__fast_sodium_current_h_gate__h = rY[3]; + // Units: dimensionless; Initial value: 1.0 + double var_chaste_interface__fast_sodium_current_j_gate__j = rY[4]; + // Units: dimensionless; Initial value: 1.0 + double var_chaste_interface__L_type_Ca_channel_d_gate__d = rY[5]; + // Units: dimensionless; Initial value: 0.0 + double var_chaste_interface__L_type_Ca_channel_f_gate__f = rY[6]; + // Units: dimensionless; Initial value: 1.0 + double var_chaste_interface__time_dependent_potassium_current_X_gate__X = rY[7]; + // Units: dimensionless; Initial value: 0.0 + double var_chaste_interface__ionic_concentrations__Nai = rY[8]; + // Units: mM; Initial value: 10.0 + double var_chaste_interface__ionic_concentrations__Ki = rY[9]; + // Units: mM; Initial value: 145.0 + double var_chaste_interface__ionic_concentrations__Ca_JSR = rY[10]; + // Units: mM; Initial value: 1.8 + double var_chaste_interface__ionic_concentrations__Ca_NSR = rY[11]; + // Units: mM; Initial value: 1.8 + + // Mathematics + double d_dt_chaste_interface_var_membrane__V; + const double var_L_type_Ca_channel_f_Ca_gate__Km_Ca = 0.00059999999999999995; // mM + const double var_Na_Ca_exchanger__K_NaCa = 20; // uA_per_mm2 + const double var_Na_Ca_exchanger__K_mCa = 1.3799999999999999; // mM + const double var_Na_Ca_exchanger__K_mNa = 87.5; // mM + const double var_Na_Ca_exchanger__K_sat = 0.10000000000000001; // dimensionless + const double var_Na_Ca_exchanger__eta = 0.34999999999999998; // dimensionless + const double var_calcium_background_current__g_Cab = 3.0159999999999999e-5; // mS_per_mm2 + const double var_calcium_fluxes_in_the_SR__Ca_NSR_max = 15; // mM + const double var_calcium_fluxes_in_the_SR__G_rel_max = 60; // per_ms + const double var_calcium_fluxes_in_the_SR__I_up = 0.0050000000000000001; // mM_per_ms + const double var_calcium_fluxes_in_the_SR__K_leak = var_calcium_fluxes_in_the_SR__I_up / var_calcium_fluxes_in_the_SR__Ca_NSR_max; // per_ms + const double var_calcium_fluxes_in_the_SR__K_mrel = 0.00080000000000000004; // mM + const double var_calcium_fluxes_in_the_SR__K_mup = 0.00092000000000000003; // mM + const double var_calcium_fluxes_in_the_SR__delta_Ca_i2 = 0; // mM + const double var_calcium_fluxes_in_the_SR__delta_Ca_ith = 0.00018000000000000001; // mM + const double var_calcium_fluxes_in_the_SR__G_rel_peak = ((var_calcium_fluxes_in_the_SR__delta_Ca_i2 < var_calcium_fluxes_in_the_SR__delta_Ca_ith) ? (0) : (var_calcium_fluxes_in_the_SR__G_rel_max)); // per_ms + const double var_calcium_fluxes_in_the_SR__t_CICR = 0; // ms + const double var_calcium_fluxes_in_the_SR__tau_off = 2; // ms + const double var_calcium_fluxes_in_the_SR__tau_on = 2; // ms + const double var_calcium_fluxes_in_the_SR__G_rel = (1 - exp(-var_calcium_fluxes_in_the_SR__t_CICR / var_calcium_fluxes_in_the_SR__tau_on)) * (-var_calcium_fluxes_in_the_SR__delta_Ca_ith + var_calcium_fluxes_in_the_SR__delta_Ca_i2) * var_calcium_fluxes_in_the_SR__G_rel_peak * exp(-var_calcium_fluxes_in_the_SR__t_CICR / var_calcium_fluxes_in_the_SR__tau_off) / (-var_calcium_fluxes_in_the_SR__delta_Ca_ith + var_calcium_fluxes_in_the_SR__K_mrel + var_calcium_fluxes_in_the_SR__delta_Ca_i2); // per_ms + const double var_calcium_fluxes_in_the_SR__tau_tr = 180; // ms + const double var_ionic_concentrations__Am = 200; // per_mm + const double var_calcium_fluxes_in_the_SR__i_leak = var_calcium_fluxes_in_the_SR__K_leak * var_chaste_interface__ionic_concentrations__Ca_NSR; // mM_per_ms + const double var_calcium_fluxes_in_the_SR__i_tr = (-var_chaste_interface__ionic_concentrations__Ca_JSR + var_chaste_interface__ionic_concentrations__Ca_NSR) / var_calcium_fluxes_in_the_SR__tau_tr; // mM_per_ms + const double var_L_type_Ca_channel_f_Ca_gate__f_Ca = 1 / (1 + pow(var_chaste_interface__ionic_concentrations__Cai, 2) / pow(var_L_type_Ca_channel_f_Ca_gate__Km_Ca, 2)); // dimensionless + const double var_calcium_fluxes_in_the_SR__i_rel = (-var_chaste_interface__ionic_concentrations__Cai + var_chaste_interface__ionic_concentrations__Ca_JSR) * var_calcium_fluxes_in_the_SR__G_rel; // mM_per_ms + const double var_calcium_fluxes_in_the_SR__i_up = var_calcium_fluxes_in_the_SR__I_up * var_chaste_interface__ionic_concentrations__Cai / (var_calcium_fluxes_in_the_SR__K_mup + var_chaste_interface__ionic_concentrations__Cai); // mM_per_ms + const double d_dt_chaste_interface_var_ionic_concentrations__Ca_NSR = -var_calcium_fluxes_in_the_SR__i_leak - var_calcium_fluxes_in_the_SR__i_tr + var_calcium_fluxes_in_the_SR__i_up; // mM / ms + const double var_ionic_concentrations__V_JSR = 0.0047999999999999996; // dimensionless + const double var_ionic_concentrations__V_NSR = 0.055199999999999999; // dimensionless + const double d_dt_chaste_interface_var_ionic_concentrations__Ca_JSR = -var_calcium_fluxes_in_the_SR__i_rel + var_calcium_fluxes_in_the_SR__i_tr * var_ionic_concentrations__V_NSR / var_ionic_concentrations__V_JSR; // mM / ms + const double var_ionic_concentrations__V_myo = 0.68000000000000005; // dimensionless + const double var_membrane__F = 96845; // faradays_constant_units + const double var_membrane__R = 8314.5; // gas_constant_units + const double var_membrane__T = 310; // kelvin + const double var_calcium_background_current__E_CaN = 0.5 * var_membrane__R * var_membrane__T * log(mParameters[0] / var_chaste_interface__ionic_concentrations__Cai) / var_membrane__F; // mV + const double var_fast_sodium_current__E_Na = var_membrane__R * var_membrane__T * log(mParameters[2] / var_chaste_interface__ionic_concentrations__Nai) / var_membrane__F; // mV + const double var_L_type_Ca_channel__I_CaCa = (((var_chaste_interface__membrane__V >= -1.3307320976818627e-6) && (var_chaste_interface__membrane__V <= 1.3307320976818627e-6)) ? (375733.02761014085 * (1.3307320976818627e-6 + var_chaste_interface__membrane__V) * (1.0459259999999999e-7 * (-0.34000000000000002 * mParameters[0] + var_chaste_interface__ionic_concentrations__Cai * exp(9.9999999999999995e-8)) / (-1 + exp(9.9999999999999995e-8)) + 1.0459259999999999e-7 * (-0.34000000000000002 * mParameters[0] + var_chaste_interface__ionic_concentrations__Cai * exp(-9.9999999999999995e-8)) / (-1 + exp(-9.9999999999999995e-8))) - 1.0459259999999999e-7 * (-0.34000000000000002 * mParameters[0] + var_chaste_interface__ionic_concentrations__Cai * exp(-9.9999999999999995e-8)) / (-1 + exp(-9.9999999999999995e-8))) : (0.078597788527232842 * (-0.34000000000000002 * mParameters[0] + var_chaste_interface__ionic_concentrations__Cai * exp(0.075146605522028176 * var_chaste_interface__membrane__V)) * var_chaste_interface__membrane__V / (-1 + exp(0.075146605522028176 * var_chaste_interface__membrane__V)))); // uA_per_mm2 + const double var_L_type_Ca_channel__I_CaK = (((var_chaste_interface__membrane__V >= -2.6614641953637254e-6) && (var_chaste_interface__membrane__V <= 2.6614641953637254e-6)) ? (187866.51380507043 * (2.6614641953637254e-6 + var_chaste_interface__membrane__V) * (1.8691085000000002e-11 * (-0.75 * mParameters[1] + 0.75 * var_chaste_interface__ionic_concentrations__Ki * exp(9.9999999999999995e-8)) / (-1 + exp(9.9999999999999995e-8)) + 1.8691085000000002e-11 * (-0.75 * mParameters[1] + 0.75 * var_chaste_interface__ionic_concentrations__Ki * exp(-9.9999999999999995e-8)) / (-1 + exp(-9.9999999999999995e-8))) - 1.8691085000000002e-11 * (-0.75 * mParameters[1] + 0.75 * var_chaste_interface__ionic_concentrations__Ki * exp(-9.9999999999999995e-8)) / (-1 + exp(-9.9999999999999995e-8))) : (7.0228579563684903e-6 * (-0.75 * mParameters[1] + 0.75 * var_chaste_interface__ionic_concentrations__Ki * exp(0.037573302761014088 * var_chaste_interface__membrane__V)) * var_chaste_interface__membrane__V / (-1 + exp(0.037573302761014088 * var_chaste_interface__membrane__V)))); // uA_per_mm2 + const double var_L_type_Ca_channel__I_CaNa = (((var_chaste_interface__membrane__V >= -2.6614641953637254e-6) && (var_chaste_interface__membrane__V <= 2.6614641953637254e-6)) ? (187866.51380507043 * (2.6614641953637254e-6 + var_chaste_interface__membrane__V) * (6.5370374999999993e-11 * (-0.75 * mParameters[2] + 0.75 * var_chaste_interface__ionic_concentrations__Nai * exp(9.9999999999999995e-8)) / (-1 + exp(9.9999999999999995e-8)) + 6.5370374999999993e-11 * (-0.75 * mParameters[2] + 0.75 * var_chaste_interface__ionic_concentrations__Nai * exp(-9.9999999999999995e-8)) / (-1 + exp(-9.9999999999999995e-8))) - 6.5370374999999993e-11 * (-0.75 * mParameters[2] + 0.75 * var_chaste_interface__ionic_concentrations__Nai * exp(-9.9999999999999995e-8)) / (-1 + exp(-9.9999999999999995e-8))) : (2.4561808914760263e-5 * (-0.75 * mParameters[2] + 0.75 * var_chaste_interface__ionic_concentrations__Nai * exp(0.037573302761014088 * var_chaste_interface__membrane__V)) * var_chaste_interface__membrane__V / (-1 + exp(0.037573302761014088 * var_chaste_interface__membrane__V)))); // uA_per_mm2 + const double var_L_type_Ca_channel__i_CaCa = var_L_type_Ca_channel__I_CaCa * var_chaste_interface__L_type_Ca_channel_d_gate__d * var_L_type_Ca_channel_f_Ca_gate__f_Ca * var_chaste_interface__L_type_Ca_channel_f_gate__f; // uA_per_mm2 + const double var_L_type_Ca_channel__i_CaK = var_L_type_Ca_channel__I_CaK * var_chaste_interface__L_type_Ca_channel_d_gate__d * var_L_type_Ca_channel_f_Ca_gate__f_Ca * var_chaste_interface__L_type_Ca_channel_f_gate__f; // uA_per_mm2 + const double var_L_type_Ca_channel__i_CaNa = var_L_type_Ca_channel__I_CaNa * var_chaste_interface__L_type_Ca_channel_d_gate__d * var_L_type_Ca_channel_f_Ca_gate__f_Ca * var_chaste_interface__L_type_Ca_channel_f_gate__f; // uA_per_mm2 + const double var_L_type_Ca_channel_d_gate__d_infinity = 1 / (1 + exp(-1.6025641025641024 - 0.16025641025641024 * var_chaste_interface__membrane__V)); // dimensionless + const double var_L_type_Ca_channel_d_gate__tau_d = (((var_chaste_interface__membrane__V >= -10.000000624) && (var_chaste_interface__membrane__V <= -9.9999993759999999)) ? (801282.05129393819 * (10.000000624 + var_chaste_interface__membrane__V) * (45787545.788225032 * (1 - exp(9.999999999851651e-8)) / (1 + exp(9.999999999851651e-8)) + 45787545.788225032 * (1 - exp(-9.999999999851651e-8)) / (1 + exp(-9.999999999851651e-8))) - 45787545.788225032 * (1 - exp(9.999999999851651e-8)) / (1 + exp(9.999999999851651e-8))) : (28.571428571428569 * (1 - exp(-1.6025641025641024 - 0.16025641025641024 * var_chaste_interface__membrane__V)) / ((1 + exp(-1.6025641025641024 - 0.16025641025641024 * var_chaste_interface__membrane__V)) * (10 + var_chaste_interface__membrane__V)))); // ms + const double var_L_type_Ca_channel_d_gate__alpha_d = var_L_type_Ca_channel_d_gate__d_infinity / var_L_type_Ca_channel_d_gate__tau_d; // per_ms + const double var_L_type_Ca_channel_d_gate__beta_d = (1 - var_L_type_Ca_channel_d_gate__d_infinity) / var_L_type_Ca_channel_d_gate__tau_d; // per_ms + const double d_dt_chaste_interface_var_L_type_Ca_channel_d_gate__d = (1 - var_chaste_interface__L_type_Ca_channel_d_gate__d) * var_L_type_Ca_channel_d_gate__alpha_d - var_L_type_Ca_channel_d_gate__beta_d * var_chaste_interface__L_type_Ca_channel_d_gate__d; // 1 / ms + const double var_L_type_Ca_channel_f_gate__f_infinity = 1 / (1 + exp(4.0767441860465121 + 0.11627906976744186 * var_chaste_interface__membrane__V)) + 0.59999999999999998 / (1 + exp(2.5 - 0.050000000000000003 * var_chaste_interface__membrane__V)); // dimensionless + const double var_L_type_Ca_channel_f_gate__tau_f = 1 / (0.02 + 0.019699999999999999 * exp(-0.113569 * pow((1 + 0.10000000000000001 * var_chaste_interface__membrane__V), 2))); // ms + const double var_L_type_Ca_channel_f_gate__alpha_f = var_L_type_Ca_channel_f_gate__f_infinity / var_L_type_Ca_channel_f_gate__tau_f; // per_ms + const double var_L_type_Ca_channel_f_gate__beta_f = (1 - var_L_type_Ca_channel_f_gate__f_infinity) / var_L_type_Ca_channel_f_gate__tau_f; // per_ms + const double d_dt_chaste_interface_var_L_type_Ca_channel_f_gate__f = (1 - var_chaste_interface__L_type_Ca_channel_f_gate__f) * var_L_type_Ca_channel_f_gate__alpha_f - var_L_type_Ca_channel_f_gate__beta_f * var_chaste_interface__L_type_Ca_channel_f_gate__f; // 1 / ms + const double var_Na_Ca_exchanger__i_NaCa = (pow(var_chaste_interface__ionic_concentrations__Nai, 3) * mParameters[0] * exp(var_Na_Ca_exchanger__eta * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T)) - pow(mParameters[2], 3) * var_chaste_interface__ionic_concentrations__Cai * exp((-1 + var_Na_Ca_exchanger__eta) * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * var_Na_Ca_exchanger__K_NaCa / ((1 + var_Na_Ca_exchanger__K_sat * exp((-1 + var_Na_Ca_exchanger__eta) * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * (pow(var_Na_Ca_exchanger__K_mNa, 3) + pow(mParameters[2], 3)) * (var_Na_Ca_exchanger__K_mCa + mParameters[0])); // uA_per_mm2 + const double var_calcium_background_current__i_Ca_b = (-var_calcium_background_current__E_CaN + var_chaste_interface__membrane__V) * var_calcium_background_current__g_Cab; // uA_per_mm2 + const double var_fast_sodium_current__i_Na = pow(var_chaste_interface__fast_sodium_current_m_gate__m, 3) * (-var_fast_sodium_current__E_Na + var_chaste_interface__membrane__V) * mParameters[4] * var_chaste_interface__fast_sodium_current_h_gate__h * var_chaste_interface__fast_sodium_current_j_gate__j; // uA_per_mm2 + const double var_fast_sodium_current_h_gate__alpha_h = ((var_chaste_interface__membrane__V < -40) ? (0.13500000000000001 * exp(-11.764705882352942 - 0.14705882352941177 * var_chaste_interface__membrane__V)) : (0)); // per_ms + const double var_fast_sodium_current_h_gate__beta_h = ((var_chaste_interface__membrane__V < -40) ? (310000 * exp(0.34999999999999998 * var_chaste_interface__membrane__V) + 3.5600000000000001 * exp(0.079000000000000001 * var_chaste_interface__membrane__V)) : (7.6923076923076916 / (1 + exp(-0.96036036036036043 - 0.0900900900900901 * var_chaste_interface__membrane__V)))); // per_ms + const double d_dt_chaste_interface_var_fast_sodium_current_h_gate__h = (1 - var_chaste_interface__fast_sodium_current_h_gate__h) * var_fast_sodium_current_h_gate__alpha_h - var_fast_sodium_current_h_gate__beta_h * var_chaste_interface__fast_sodium_current_h_gate__h; // 1 / ms + const double var_fast_sodium_current_j_gate__alpha_j = ((var_chaste_interface__membrane__V < -40) ? ((37.780000000000001 + var_chaste_interface__membrane__V) * (-127140 * exp(0.24440000000000001 * var_chaste_interface__membrane__V) - 3.4740000000000003e-5 * exp(-0.043909999999999998 * var_chaste_interface__membrane__V)) / (1 + exp(24.640530000000002 + 0.311 * var_chaste_interface__membrane__V))) : (0)); // per_ms + const double var_fast_sodium_current_j_gate__beta_j = ((var_chaste_interface__membrane__V < -40) ? (0.1212 * exp(-0.01052 * var_chaste_interface__membrane__V) / (1 + exp(-5.5312920000000005 - 0.13780000000000001 * var_chaste_interface__membrane__V))) : (0.29999999999999999 * exp(-2.5349999999999999e-7 * var_chaste_interface__membrane__V) / (1 + exp(-3.2000000000000002 - 0.10000000000000001 * var_chaste_interface__membrane__V)))); // per_ms + const double d_dt_chaste_interface_var_fast_sodium_current_j_gate__j = (1 - var_chaste_interface__fast_sodium_current_j_gate__j) * var_fast_sodium_current_j_gate__alpha_j - var_fast_sodium_current_j_gate__beta_j * var_chaste_interface__fast_sodium_current_j_gate__j; // 1 / ms + const double var_fast_sodium_current_m_gate__alpha_m = (((var_chaste_interface__membrane__V >= -47.130001) && (var_chaste_interface__membrane__V <= -47.129999000000005)) ? (-3.200000000092018e-7 / (1 - exp(1.0000000000287557e-7)) + 499999.99998562218 * (47.130001 + var_chaste_interface__membrane__V) * (3.200000000092018e-7 / (1 - exp(1.0000000000287557e-7)) + 3.200000000092018e-7 / (1 - exp(-1.0000000000287557e-7)))) : (0.32000000000000001 * (47.130000000000003 + var_chaste_interface__membrane__V) / (1 - exp(-4.7130000000000001 - 0.10000000000000001 * var_chaste_interface__membrane__V)))); // per_ms + const double var_fast_sodium_current_m_gate__beta_m = 0.080000000000000002 * exp(-0.090909090909090912 * var_chaste_interface__membrane__V); // per_ms + const double d_dt_chaste_interface_var_fast_sodium_current_m_gate__m = (1 - var_chaste_interface__fast_sodium_current_m_gate__m) * var_fast_sodium_current_m_gate__alpha_m - var_fast_sodium_current_m_gate__beta_m * var_chaste_interface__fast_sodium_current_m_gate__m; // 1 / ms + const double var_non_specific_calcium_activated_current__I_ns_K = ((((var_chaste_interface__membrane__V >= -2.6614641953637254e-6 + 26.614641953637257 * log((mParameters[1] + mParameters[2]) / (var_chaste_interface__ionic_concentrations__Ki + var_chaste_interface__ionic_concentrations__Nai))) && (var_chaste_interface__membrane__V <= 2.6614641953637254e-6 + 26.614641953637257 * log((mParameters[1] + mParameters[2]) / (var_chaste_interface__ionic_concentrations__Ki + var_chaste_interface__ionic_concentrations__Nai)))) || ((var_chaste_interface__membrane__V >= 2.6614641953637254e-6 + 26.614641953637257 * log((mParameters[1] + mParameters[2]) / (var_chaste_interface__ionic_concentrations__Ki + var_chaste_interface__ionic_concentrations__Nai))) && (var_chaste_interface__membrane__V <= -2.6614641953637254e-6 + 26.614641953637257 * log((mParameters[1] + mParameters[2]) / (var_chaste_interface__ionic_concentrations__Ki + var_chaste_interface__ionic_concentrations__Nai))))) ? (1.6947874999999998e-11 * (-0.75 * mParameters[1] + 0.75 * var_chaste_interface__ionic_concentrations__Ki * exp(9.9999999999999995e-8)) / (-1 + exp(9.9999999999999995e-8)) - 187866.51380507043 * (-1.6947874999999998e-11 * (-0.75 * mParameters[1] + 0.75 * var_chaste_interface__ionic_concentrations__Ki * exp(9.9999999999999995e-8)) / (-1 + exp(9.9999999999999995e-8)) - 1.6947874999999998e-11 * (-0.75 * mParameters[1] + 0.75 * var_chaste_interface__ionic_concentrations__Ki * exp(-9.9999999999999995e-8)) / (-1 + exp(-9.9999999999999995e-8))) * (-2.6614641953637254e-6 - 26.614641953637257 * log((mParameters[1] + mParameters[2]) / (var_chaste_interface__ionic_concentrations__Ki + var_chaste_interface__ionic_concentrations__Nai)) + var_chaste_interface__membrane__V)) : (6.3678763853082156e-6 * (-0.75 * mParameters[1] + 0.75 * var_chaste_interface__ionic_concentrations__Ki * exp(0.037573302761014088 * var_chaste_interface__membrane__V - log((mParameters[1] + mParameters[2]) / (var_chaste_interface__ionic_concentrations__Ki + var_chaste_interface__ionic_concentrations__Nai)))) * (-26.614641953637257 * log((mParameters[1] + mParameters[2]) / (var_chaste_interface__ionic_concentrations__Ki + var_chaste_interface__ionic_concentrations__Nai)) + var_chaste_interface__membrane__V) / (-1 + exp(0.037573302761014088 * var_chaste_interface__membrane__V - log((mParameters[1] + mParameters[2]) / (var_chaste_interface__ionic_concentrations__Ki + var_chaste_interface__ionic_concentrations__Nai)))))); // uA_per_mm2 + const double var_non_specific_calcium_activated_current__I_ns_Na = ((((var_chaste_interface__membrane__V >= -2.6614641953637254e-6 + 26.614641953637257 * log((mParameters[1] + mParameters[2]) / (var_chaste_interface__ionic_concentrations__Ki + var_chaste_interface__ionic_concentrations__Nai))) && (var_chaste_interface__membrane__V <= 2.6614641953637254e-6 + 26.614641953637257 * log((mParameters[1] + mParameters[2]) / (var_chaste_interface__ionic_concentrations__Ki + var_chaste_interface__ionic_concentrations__Nai)))) || ((var_chaste_interface__membrane__V >= 2.6614641953637254e-6 + 26.614641953637257 * log((mParameters[1] + mParameters[2]) / (var_chaste_interface__ionic_concentrations__Ki + var_chaste_interface__ionic_concentrations__Nai))) && (var_chaste_interface__membrane__V <= -2.6614641953637254e-6 + 26.614641953637257 * log((mParameters[1] + mParameters[2]) / (var_chaste_interface__ionic_concentrations__Ki + var_chaste_interface__ionic_concentrations__Nai))))) ? (1.6947874999999998e-11 * (-0.75 * mParameters[2] + 0.75 * var_chaste_interface__ionic_concentrations__Nai * exp(9.9999999999999995e-8)) / (-1 + exp(9.9999999999999995e-8)) - 187866.51380507043 * (-1.6947874999999998e-11 * (-0.75 * mParameters[2] + 0.75 * var_chaste_interface__ionic_concentrations__Nai * exp(9.9999999999999995e-8)) / (-1 + exp(9.9999999999999995e-8)) - 1.6947874999999998e-11 * (-0.75 * mParameters[2] + 0.75 * var_chaste_interface__ionic_concentrations__Nai * exp(-9.9999999999999995e-8)) / (-1 + exp(-9.9999999999999995e-8))) * (-2.6614641953637254e-6 - 26.614641953637257 * log((mParameters[1] + mParameters[2]) / (var_chaste_interface__ionic_concentrations__Ki + var_chaste_interface__ionic_concentrations__Nai)) + var_chaste_interface__membrane__V)) : (6.3678763853082156e-6 * (-0.75 * mParameters[2] + 0.75 * var_chaste_interface__ionic_concentrations__Nai * exp(0.037573302761014088 * var_chaste_interface__membrane__V - log((mParameters[1] + mParameters[2]) / (var_chaste_interface__ionic_concentrations__Ki + var_chaste_interface__ionic_concentrations__Nai)))) * (-26.614641953637257 * log((mParameters[1] + mParameters[2]) / (var_chaste_interface__ionic_concentrations__Ki + var_chaste_interface__ionic_concentrations__Nai)) + var_chaste_interface__membrane__V) / (-1 + exp(0.037573302761014088 * var_chaste_interface__membrane__V - log((mParameters[1] + mParameters[2]) / (var_chaste_interface__ionic_concentrations__Ki + var_chaste_interface__ionic_concentrations__Nai)))))); // uA_per_mm2 + const double var_non_specific_calcium_activated_current__K_m_ns_Ca = 0.0011999999999999999; // mM + const double var_non_specific_calcium_activated_current__i_ns_K = var_non_specific_calcium_activated_current__I_ns_K / (1 + pow(var_non_specific_calcium_activated_current__K_m_ns_Ca, 3) / pow(var_chaste_interface__ionic_concentrations__Cai, 3)); // uA_per_mm2 + const double var_non_specific_calcium_activated_current__i_ns_Na = var_non_specific_calcium_activated_current__I_ns_Na / (1 + pow(var_non_specific_calcium_activated_current__K_m_ns_Ca, 3) / pow(var_chaste_interface__ionic_concentrations__Cai, 3)); // uA_per_mm2 + const double var_plateau_potassium_current__Kp = 1 / (1 + exp(1.2521739130434781 - 0.16722408026755853 * var_chaste_interface__membrane__V)); // dimensionless + const double var_plateau_potassium_current__g_Kp = 0.000183; // mS_per_mm2 + const double var_sarcolemmal_calcium_pump__I_pCa = 0.0115; // uA_per_mm2 + const double var_sarcolemmal_calcium_pump__K_mpCa = 0.00050000000000000001; // mM + const double var_sarcolemmal_calcium_pump__i_p_Ca = var_chaste_interface__ionic_concentrations__Cai * var_sarcolemmal_calcium_pump__I_pCa / (var_chaste_interface__ionic_concentrations__Cai + var_sarcolemmal_calcium_pump__K_mpCa); // uA_per_mm2 + const double d_dt_chaste_interface_var_ionic_concentrations__Cai = (-var_calcium_fluxes_in_the_SR__i_up + var_calcium_fluxes_in_the_SR__i_leak) * var_ionic_concentrations__V_NSR / var_ionic_concentrations__V_myo + var_calcium_fluxes_in_the_SR__i_rel * var_ionic_concentrations__V_JSR / var_ionic_concentrations__V_myo + 0.5 * (-var_L_type_Ca_channel__i_CaCa - var_calcium_background_current__i_Ca_b - var_sarcolemmal_calcium_pump__i_p_Ca + var_Na_Ca_exchanger__i_NaCa) * var_ionic_concentrations__Am / (var_ionic_concentrations__V_myo * var_membrane__F); // mM / ms + const double var_sodium_background_current__E_NaN = var_fast_sodium_current__E_Na; // mV + const double var_sodium_background_current__g_Nab = 1.4100000000000001e-5; // mS_per_mm2 + const double var_sodium_background_current__i_Na_b = (-var_sodium_background_current__E_NaN + var_chaste_interface__membrane__V) * var_sodium_background_current__g_Nab; // uA_per_mm2 + const double var_sodium_potassium_pump__I_NaK = 0.014999999999999999; // uA_per_mm2 + const double var_sodium_potassium_pump__K_mKo = 1.5; // mM + const double var_sodium_potassium_pump__K_mNai = 10; // mM + const double var_sodium_potassium_pump__sigma = -0.14285714285714285 + 0.14285714285714285 * exp(0.01485884101040119 * mParameters[2]); // dimensionless + const double var_sodium_potassium_pump__f_NaK = 1 / (1 + 0.1245 * exp(-0.10000000000000001 * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T)) + 0.036499999999999998 * var_sodium_potassium_pump__sigma * exp(-var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))); // dimensionless + const double var_sodium_potassium_pump__i_NaK = mParameters[1] * var_sodium_potassium_pump__I_NaK * var_sodium_potassium_pump__f_NaK / ((1 + pow((var_sodium_potassium_pump__K_mNai / var_chaste_interface__ionic_concentrations__Nai), 1.5)) * (mParameters[1] + var_sodium_potassium_pump__K_mKo)); // uA_per_mm2 + const double d_dt_chaste_interface_var_ionic_concentrations__Nai = (-var_L_type_Ca_channel__i_CaNa - var_fast_sodium_current__i_Na - var_non_specific_calcium_activated_current__i_ns_Na - var_sodium_background_current__i_Na_b - 3 * var_Na_Ca_exchanger__i_NaCa - 3 * var_sodium_potassium_pump__i_NaK) * var_ionic_concentrations__Am / (var_ionic_concentrations__V_myo * var_membrane__F); // mM / ms + const double var_time_dependent_potassium_current__PR_NaK = 0.018329999999999999; // dimensionless + const double var_time_dependent_potassium_current__E_K = var_membrane__R * var_membrane__T * log((mParameters[2] * var_time_dependent_potassium_current__PR_NaK + mParameters[1]) / (var_chaste_interface__ionic_concentrations__Nai * var_time_dependent_potassium_current__PR_NaK + var_chaste_interface__ionic_concentrations__Ki)) / var_membrane__F; // mV + const double var_time_dependent_potassium_current__g_K_max = 0.00282; // mS_per_mm2 + const double var_time_dependent_potassium_current__g_K = 0.43033148291193518 * sqrt(mParameters[1]) * var_time_dependent_potassium_current__g_K_max; // mS_per_mm2 + const double var_time_dependent_potassium_current_X_gate__alpha_X = (((var_chaste_interface__membrane__V >= -30.000000675675675) && (var_chaste_interface__membrane__V <= -29.999999324324325)) ? (-4.8581081081938701e-11 / (1 - exp(1.0000000000176534e-7)) + 739999.99998693645 * (30.000000675675675 + var_chaste_interface__membrane__V) * (4.8581081081938701e-11 / (1 - exp(1.0000000000176534e-7)) + 4.8581081081938701e-11 / (1 - exp(-1.0000000000176534e-7)))) : (7.1899999999999999e-5 * (30 + var_chaste_interface__membrane__V) / (1 - exp(-4.4399999999999995 - 0.14799999999999999 * var_chaste_interface__membrane__V)))); // per_ms + const double var_time_dependent_potassium_current_X_gate__beta_X = (((var_chaste_interface__membrane__V >= -30.000001455604075) && (var_chaste_interface__membrane__V <= -29.999998544395925)) ? (-1.9068413391534758e-10 / (-1 + exp(-9.9999999999880736e-8)) + 343500.00000040967 * (30.000001455604075 + var_chaste_interface__membrane__V) * (1.9068413391534758e-10 / (-1 + exp(9.9999999999880736e-8)) + 1.9068413391534758e-10 / (-1 + exp(-9.9999999999880736e-8)))) : (0.00013100000000000001 * (30 + var_chaste_interface__membrane__V) / (-1 + exp(2.0609999999999999 + 0.068699999999999997 * var_chaste_interface__membrane__V)))); // per_ms + const double d_dt_chaste_interface_var_time_dependent_potassium_current_X_gate__X = (1 - var_chaste_interface__time_dependent_potassium_current_X_gate__X) * var_time_dependent_potassium_current_X_gate__alpha_X - var_chaste_interface__time_dependent_potassium_current_X_gate__X * var_time_dependent_potassium_current_X_gate__beta_X; // 1 / ms + const double var_time_dependent_potassium_current_Xi_gate__Xi = 1 / (1 + exp(-1.7526479750778814 + 0.031152647975077882 * var_chaste_interface__membrane__V)); // dimensionless + const double var_time_dependent_potassium_current__i_K = pow(var_chaste_interface__time_dependent_potassium_current_X_gate__X, 2) * (-var_time_dependent_potassium_current__E_K + var_chaste_interface__membrane__V) * var_time_dependent_potassium_current__g_K * var_time_dependent_potassium_current_Xi_gate__Xi; // uA_per_mm2 + const double var_time_independent_potassium_current__E_K1 = var_membrane__R * var_membrane__T * log(mParameters[1] / var_chaste_interface__ionic_concentrations__Ki) / var_membrane__F; // mV + const double var_plateau_potassium_current__E_Kp = var_time_independent_potassium_current__E_K1; // mV + const double var_plateau_potassium_current__i_Kp = (-var_plateau_potassium_current__E_Kp + var_chaste_interface__membrane__V) * var_plateau_potassium_current__Kp * var_plateau_potassium_current__g_Kp; // uA_per_mm2 + const double var_time_independent_potassium_current__g_K1 = 0.43033148291193518 * sqrt(mParameters[1]) * mParameters[5]; // mS_per_mm2 + const double var_time_independent_potassium_current_K1_gate__alpha_K1 = 1.02 / (1 + exp(-14.1227775 + 0.23849999999999999 * var_chaste_interface__membrane__V - 0.23849999999999999 * var_time_independent_potassium_current__E_K1)); // per_ms + const double var_time_independent_potassium_current_K1_gate__beta_K1 = (0.49124000000000001 * exp(0.43983232 + 0.080320000000000003 * var_chaste_interface__membrane__V - 0.080320000000000003 * var_time_independent_potassium_current__E_K1) + exp(-36.698642499999998 + 0.061749999999999999 * var_chaste_interface__membrane__V - 0.061749999999999999 * var_time_independent_potassium_current__E_K1)) / (1 + exp(-2.4444678999999998 + 0.51429999999999998 * var_time_independent_potassium_current__E_K1 - 0.51429999999999998 * var_chaste_interface__membrane__V)); // per_ms + const double var_time_independent_potassium_current_K1_gate__K1_infinity = var_time_independent_potassium_current_K1_gate__alpha_K1 / (var_time_independent_potassium_current_K1_gate__alpha_K1 + var_time_independent_potassium_current_K1_gate__beta_K1); // dimensionless + const double var_time_independent_potassium_current__i_K1 = (-var_time_independent_potassium_current__E_K1 + var_chaste_interface__membrane__V) * var_time_independent_potassium_current__g_K1 * var_time_independent_potassium_current_K1_gate__K1_infinity; // uA_per_mm2 + const double d_dt_chaste_interface_var_ionic_concentrations__Ki = (-var_L_type_Ca_channel__i_CaK - var_non_specific_calcium_activated_current__i_ns_K - var_plateau_potassium_current__i_Kp - var_time_dependent_potassium_current__i_K - var_time_independent_potassium_current__i_K1 + 2 * var_sodium_potassium_pump__i_NaK) * var_ionic_concentrations__Am / (var_ionic_concentrations__V_myo * var_membrane__F); // mM / ms + + if (mSetVoltageDerivativeToZero) + { + d_dt_chaste_interface_var_membrane__V = 0.0; + } + else + { + const double var_membrane__I_st_converted = -GetIntracellularAreaStimulus(var_chaste_interface__environment__time); // uA_per_cm2 + const double var_membrane__I_st = 0.0099999999999999985 * var_membrane__I_st_converted; // uA_per_mm2 + const double var_L_type_Ca_channel__i_Ca_L = var_L_type_Ca_channel__i_CaCa + var_L_type_Ca_channel__i_CaK + var_L_type_Ca_channel__i_CaNa; // uA_per_mm2 + const double var_non_specific_calcium_activated_current__i_ns_Ca = var_non_specific_calcium_activated_current__i_ns_K + var_non_specific_calcium_activated_current__i_ns_Na; // uA_per_mm2 + const double var_membrane__dV_dt = (-var_L_type_Ca_channel__i_Ca_L - var_Na_Ca_exchanger__i_NaCa - var_calcium_background_current__i_Ca_b - var_fast_sodium_current__i_Na - var_non_specific_calcium_activated_current__i_ns_Ca - var_plateau_potassium_current__i_Kp - var_sarcolemmal_calcium_pump__i_p_Ca - var_sodium_background_current__i_Na_b - var_sodium_potassium_pump__i_NaK - var_time_dependent_potassium_current__i_K - var_time_independent_potassium_current__i_K1 + var_membrane__I_st) / mParameters[3]; // mV_per_ms + d_dt_chaste_interface_var_membrane__V = var_membrane__dV_dt; // mV / ms + } + + rDY[0] = d_dt_chaste_interface_var_membrane__V; + rDY[1] = d_dt_chaste_interface_var_ionic_concentrations__Cai; + rDY[2] = d_dt_chaste_interface_var_fast_sodium_current_m_gate__m; + rDY[3] = d_dt_chaste_interface_var_fast_sodium_current_h_gate__h; + rDY[4] = d_dt_chaste_interface_var_fast_sodium_current_j_gate__j; + rDY[5] = d_dt_chaste_interface_var_L_type_Ca_channel_d_gate__d; + rDY[6] = d_dt_chaste_interface_var_L_type_Ca_channel_f_gate__f; + rDY[7] = d_dt_chaste_interface_var_time_dependent_potassium_current_X_gate__X; + rDY[8] = d_dt_chaste_interface_var_ionic_concentrations__Nai; + rDY[9] = d_dt_chaste_interface_var_ionic_concentrations__Ki; + rDY[10] = d_dt_chaste_interface_var_ionic_concentrations__Ca_JSR; + rDY[11] = d_dt_chaste_interface_var_ionic_concentrations__Ca_NSR; + } + + std::vector Cellluo_rudy_1994FromCellML::ComputeDerivedQuantities(double var_chaste_interface__environment__time, const std::vector & rY) + { + // Inputs: + // Time units: millisecond + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: mV; Initial value: -84.624 + double var_chaste_interface__fast_sodium_current_m_gate__m = rY[2]; + // Units: dimensionless; Initial value: 0.0 + double var_chaste_interface__fast_sodium_current_h_gate__h = rY[3]; + // Units: dimensionless; Initial value: 1.0 + double var_chaste_interface__fast_sodium_current_j_gate__j = rY[4]; + // Units: dimensionless; Initial value: 1.0 + double var_chaste_interface__ionic_concentrations__Nai = rY[8]; + // Units: mM; Initial value: 10.0 + double var_chaste_interface__ionic_concentrations__Ki = rY[9]; + // Units: mM; Initial value: 145.0 + + // Mathematics + const double var_membrane__F = 96845; // faradays_constant_units + const double var_membrane__I_st_converted = -GetIntracellularAreaStimulus(var_chaste_interface__environment__time); // uA_per_cm2 + const double var_membrane__R = 8314.5; // gas_constant_units + const double var_membrane__T = 310; // kelvin + const double var_fast_sodium_current__E_Na = var_membrane__R * var_membrane__T * log(mParameters[2] / var_chaste_interface__ionic_concentrations__Nai) / var_membrane__F; // mV + const double var_fast_sodium_current__i_Na = pow(var_chaste_interface__fast_sodium_current_m_gate__m, 3) * (-var_fast_sodium_current__E_Na + var_chaste_interface__membrane__V) * mParameters[4] * var_chaste_interface__fast_sodium_current_h_gate__h * var_chaste_interface__fast_sodium_current_j_gate__j; // uA_per_mm2 + const double var_fast_sodium_current__i_Na_converted = 100.00000000000001 * var_fast_sodium_current__i_Na; // uA_per_cm2 + const double var_time_independent_potassium_current__E_K1 = var_membrane__R * var_membrane__T * log(mParameters[1] / var_chaste_interface__ionic_concentrations__Ki) / var_membrane__F; // mV + const double var_time_independent_potassium_current__g_K1 = 0.43033148291193518 * sqrt(mParameters[1]) * mParameters[5]; // mS_per_mm2 + const double var_time_independent_potassium_current_K1_gate__alpha_K1 = 1.02 / (1 + exp(-14.1227775 + 0.23849999999999999 * var_chaste_interface__membrane__V - 0.23849999999999999 * var_time_independent_potassium_current__E_K1)); // per_ms + const double var_time_independent_potassium_current_K1_gate__beta_K1 = (0.49124000000000001 * exp(0.43983232 + 0.080320000000000003 * var_chaste_interface__membrane__V - 0.080320000000000003 * var_time_independent_potassium_current__E_K1) + exp(-36.698642499999998 + 0.061749999999999999 * var_chaste_interface__membrane__V - 0.061749999999999999 * var_time_independent_potassium_current__E_K1)) / (1 + exp(-2.4444678999999998 + 0.51429999999999998 * var_time_independent_potassium_current__E_K1 - 0.51429999999999998 * var_chaste_interface__membrane__V)); // per_ms + const double var_time_independent_potassium_current_K1_gate__K1_infinity = var_time_independent_potassium_current_K1_gate__alpha_K1 / (var_time_independent_potassium_current_K1_gate__alpha_K1 + var_time_independent_potassium_current_K1_gate__beta_K1); // dimensionless + const double var_time_independent_potassium_current__i_K1 = (-var_time_independent_potassium_current__E_K1 + var_chaste_interface__membrane__V) * var_time_independent_potassium_current__g_K1 * var_time_independent_potassium_current_K1_gate__K1_infinity; // uA_per_mm2 + const double var_time_independent_potassium_current__i_K1_converted = 100.00000000000001 * var_time_independent_potassium_current__i_K1; // uA_per_cm2 + + std::vector dqs(4); + dqs[0] = var_fast_sodium_current__i_Na_converted; + dqs[1] = var_time_independent_potassium_current__i_K1_converted; + dqs[2] = var_membrane__I_st_converted; + dqs[3] = var_chaste_interface__environment__time; + return dqs; + } + +template<> +void OdeSystemInformation::Initialise(void) +{ + this->mSystemName = "luo_rudy_1994"; + this->mFreeVariableName = "time"; + this->mFreeVariableUnits = "ms"; + + // rY[0]: + this->mVariableNames.push_back("membrane_voltage"); + this->mVariableUnits.push_back("mV"); + this->mInitialConditions.push_back(-84.624); + + // rY[1]: + this->mVariableNames.push_back("cytosolic_calcium_concentration"); + this->mVariableUnits.push_back("mM"); + this->mInitialConditions.push_back(0.00012); + + // rY[2]: + this->mVariableNames.push_back("fast_sodium_current_m_gate__m"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.0); + + // rY[3]: + this->mVariableNames.push_back("fast_sodium_current_h_gate__h"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(1.0); + + // rY[4]: + this->mVariableNames.push_back("membrane_fast_sodium_current_j_gate"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(1.0); + + // rY[5]: + this->mVariableNames.push_back("L_type_Ca_channel_d_gate__d"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.0); + + // rY[6]: + this->mVariableNames.push_back("L_type_Ca_channel_f_gate__f"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(1.0); + + // rY[7]: + this->mVariableNames.push_back("time_dependent_potassium_current_X_gate__X"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.0); + + // rY[8]: + this->mVariableNames.push_back("cytosolic_sodium_concentration"); + this->mVariableUnits.push_back("mM"); + this->mInitialConditions.push_back(10.0); + + // rY[9]: + this->mVariableNames.push_back("cytosolic_potassium_concentration"); + this->mVariableUnits.push_back("mM"); + this->mInitialConditions.push_back(145.0); + + // rY[10]: + this->mVariableNames.push_back("JSR_calcium_concentration"); + this->mVariableUnits.push_back("mM"); + this->mInitialConditions.push_back(1.8); + + // rY[11]: + this->mVariableNames.push_back("NSR_calcium_concentration"); + this->mVariableUnits.push_back("mM"); + this->mInitialConditions.push_back(1.8); + + // mParameters[0]: + this->mParameterNames.push_back("extracellular_calcium_concentration"); + this->mParameterUnits.push_back("mM"); + + // mParameters[1]: + this->mParameterNames.push_back("extracellular_potassium_concentration"); + this->mParameterUnits.push_back("mM"); + + // mParameters[2]: + this->mParameterNames.push_back("extracellular_sodium_concentration"); + this->mParameterUnits.push_back("mM"); + + // mParameters[3]: + this->mParameterNames.push_back("membrane_capacitance"); + this->mParameterUnits.push_back("uF_per_mm2"); + + // mParameters[4]: + this->mParameterNames.push_back("membrane_fast_sodium_current_conductance"); + this->mParameterUnits.push_back("mS_per_mm2"); + + // mParameters[5]: + this->mParameterNames.push_back("membrane_inward_rectifier_potassium_current_conductance"); + this->mParameterUnits.push_back("mS_per_mm2"); + + // Derived Quantity index [0]: + this->mDerivedQuantityNames.push_back("membrane_fast_sodium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [1]: + this->mDerivedQuantityNames.push_back("membrane_inward_rectifier_potassium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [2]: + this->mDerivedQuantityNames.push_back("membrane_stimulus_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [3]: + this->mDerivedQuantityNames.push_back("time"); + this->mDerivedQuantityUnits.push_back("ms"); + + this->mInitialised = true; +} + +// Serialization for Boost >= 1.36 +#include "SerializationExportWrapperForCpp.hpp" +CHASTE_CLASS_EXPORT(Cellluo_rudy_1994FromCellML) + diff --git a/chaste_codegen/tests/numerical/baseline/Normal/luo_rudy_1994.hpp b/chaste_codegen/tests/numerical/baseline/Normal/luo_rudy_1994.hpp new file mode 100644 index 00000000..c32f251f --- /dev/null +++ b/chaste_codegen/tests/numerical/baseline/Normal/luo_rudy_1994.hpp @@ -0,0 +1,85 @@ +#ifndef CELLLUO_RUDY_1994FROMCELLML_HPP_ +#define CELLLUO_RUDY_1994FROMCELLML_HPP_ + +//! @file +//! +//! This source file was generated from CellML by chaste_codegen version (version omitted as unimportant) +//! +//! Model: luo_rudy_1994 +//! +//! Processed by chaste_codegen: https://github.com/ModellingWebLab/chaste-codegen +//! (translator: chaste_codegen, model type: Normal) +//! on (date omitted as unimportant) +//! +//! + +#include "ChasteSerialization.hpp" +#include +#include "AbstractStimulusFunction.hpp" +#include "AbstractCardiacCell.hpp" + +class Cellluo_rudy_1994FromCellML : public AbstractCardiacCell +{ + friend class boost::serialization::access; + template + void serialize(Archive & archive, const unsigned int version) + { + archive & boost::serialization::base_object(*this); + + } + + // + // Settable parameters and readable variables + // + + +private: +const bool is_concentration[12] = {false, true, false, false, false, false, false, false, true, true, true, true}; +const bool is_probability[12] = {false, false, false, false, true, false, false, false, false, false, false, false}; +public: + + boost::shared_ptr UseCellMLDefaultStimulus(); + double GetIntracellularCalciumConcentration(); + Cellluo_rudy_1994FromCellML(boost::shared_ptr pSolver, boost::shared_ptr pIntracellularStimulus); + ~Cellluo_rudy_1994FromCellML(); + void VerifyStateVariables(); + double GetIIonic(const std::vector* pStateVariables=NULL); + void EvaluateYDerivatives(double var_chaste_interface__environment__time, const std::vector& rY, std::vector& rDY); + + std::vector ComputeDerivedQuantities(double var_chaste_interface__environment__time, const std::vector & rY); +}; + +// Needs to be included last +#include "SerializationExportWrapper.hpp" +CHASTE_CLASS_EXPORT(Cellluo_rudy_1994FromCellML) + +namespace boost +{ + namespace serialization + { + template + inline void save_construct_data( + Archive & ar, const Cellluo_rudy_1994FromCellML * t, const unsigned int fileVersion) + { + const boost::shared_ptr p_solver = t->GetSolver(); + const boost::shared_ptr p_stimulus = t->GetStimulusFunction(); + ar << p_solver; + ar << p_stimulus; + } + + template + inline void load_construct_data( + Archive & ar, Cellluo_rudy_1994FromCellML * t, const unsigned int fileVersion) + { + boost::shared_ptr p_solver; + boost::shared_ptr p_stimulus; + ar >> p_solver; + ar >> p_stimulus; + ::new(t)Cellluo_rudy_1994FromCellML(p_solver, p_stimulus); + } + + } + +} + +#endif // CELLLUO_RUDY_1994FROMCELLML_HPP_ \ No newline at end of file diff --git a/chaste_codegen/tests/numerical/baseline/Normal/non_dynamic_aslanidi_Purkinje_model_2009.cpp b/chaste_codegen/tests/numerical/baseline/Normal/non_dynamic_aslanidi_Purkinje_model_2009.cpp new file mode 100644 index 00000000..82dadca5 --- /dev/null +++ b/chaste_codegen/tests/numerical/baseline/Normal/non_dynamic_aslanidi_Purkinje_model_2009.cpp @@ -0,0 +1,1089 @@ +//! @file +//! +//! This source file was generated from CellML by chaste_codegen version (version omitted as unimportant) +//! +//! Model: aslanidi_2009 +//! +//! Processed by chaste_codegen: https://github.com/ModellingWebLab/chaste-codegen +//! (translator: chaste_codegen, model type: Normal) +//! on (date omitted as unimportant) +//! +//! + +#include "aslanidi_Purkinje_model_2009.hpp" +#include +#include +#include +#include +#include "Exception.hpp" +#include "OdeSystemInformation.hpp" +#include "RegularStimulus.hpp" +#include "HeartConfig.hpp" +#include "IsNan.hpp" +#include "MathsCustomFunctions.hpp" + + + + + + boost::shared_ptr Cellaslanidi_Purkinje_model_2009FromCellML::UseCellMLDefaultStimulus() + { + // Use the default stimulus specified by CellML metadata + const double var_chaste_interface__membrane__stim_amplitude_converted = -80 * HeartConfig::Instance()->GetCapacitance(); // uA_per_cm2 + const double var_chaste_interface__membrane__stim_duration = 1; // millisecond + const double var_chaste_interface__membrane__stim_period = 800; // millisecond + const double var_chaste_interface__membrane__stim_start = 100; // millisecond + boost::shared_ptr p_cellml_stim(new RegularStimulus( + -fabs(var_chaste_interface__membrane__stim_amplitude_converted), + var_chaste_interface__membrane__stim_duration, + var_chaste_interface__membrane__stim_period, + var_chaste_interface__membrane__stim_start + )); + mpIntracellularStimulus = p_cellml_stim; + return p_cellml_stim; + } + double Cellaslanidi_Purkinje_model_2009FromCellML::GetIntracellularCalciumConcentration() + { + return mStateVariables[1]; + } + Cellaslanidi_Purkinje_model_2009FromCellML::Cellaslanidi_Purkinje_model_2009FromCellML(boost::shared_ptr pSolver, boost::shared_ptr pIntracellularStimulus) + : AbstractCardiacCellWithModifiers( + pSolver, + 30, + 0, + pIntracellularStimulus) + { + // Time units: millisecond + // + this->mpSystemInfo = OdeSystemInformation::Instance(); + Init(); + + // We have a default stimulus specified in the CellML file metadata + this->mHasDefaultStimulusFromCellML = true; + + // These will get initialised to DummyModifiers in the base class method. + this->AddModifier("JSR_calcium_concentration", + mp_JSR_calcium_concentration_modifier); + this->AddModifier("SR_leak_current_max", + mp_SR_leak_current_max_modifier); + this->AddModifier("SR_release_current", + mp_SR_release_current_modifier); + this->AddModifier("SR_release_current_max", + mp_SR_release_current_max_modifier); + this->AddModifier("SR_uptake_current_max", + mp_SR_uptake_current_max_modifier); + this->AddModifier("concentration_clamp_onoff", + mp_concentration_clamp_onoff_modifier); + this->AddModifier("cytosolic_calcium_concentration", + mp_cytosolic_calcium_concentration_modifier); + this->AddModifier("cytosolic_potassium_concentration", + mp_cytosolic_potassium_concentration_modifier); + this->AddModifier("cytosolic_sodium_concentration", + mp_cytosolic_sodium_concentration_modifier); + this->AddModifier("dyadic_space_calcium_concentration", + mp_dyadic_space_calcium_concentration_modifier); + this->AddModifier("extracellular_calcium_concentration", + mp_extracellular_calcium_concentration_modifier); + this->AddModifier("extracellular_potassium_concentration", + mp_extracellular_potassium_concentration_modifier); + this->AddModifier("extracellular_sodium_concentration", + mp_extracellular_sodium_concentration_modifier); + this->AddModifier("membrane_L_type_calcium_current", + mp_i_Ca_L__i_Ca_L_modifier); + this->AddModifier("membrane_L_type_calcium_current_conductance", + mp_membrane_L_type_calcium_current_conductance_modifier); + this->AddModifier("membrane_L_type_calcium_current_d_gate", + mp_membrane_L_type_calcium_current_d_gate_modifier); + this->AddModifier("membrane_L_type_calcium_current_f2_gate", + mp_membrane_L_type_calcium_current_f2_gate_modifier); + this->AddModifier("membrane_L_type_calcium_current_f2_gate_tau", + mp_membrane_L_type_calcium_current_f2_gate_tau_modifier); + this->AddModifier("membrane_L_type_calcium_current_fCa2_gate", + mp_membrane_L_type_calcium_current_fCa2_gate_modifier); + this->AddModifier("membrane_L_type_calcium_current_fCa2_gate_tau", + mp_membrane_L_type_calcium_current_fCa2_gate_tau_modifier); + this->AddModifier("membrane_L_type_calcium_current_fCa_gate", + mp_membrane_L_type_calcium_current_fCa_gate_modifier); + this->AddModifier("membrane_L_type_calcium_current_fCa_gate_tau", + mp_membrane_L_type_calcium_current_fCa_gate_tau_modifier); + this->AddModifier("membrane_L_type_calcium_current_f_gate", + mp_membrane_L_type_calcium_current_f_gate_modifier); + this->AddModifier("membrane_L_type_calcium_current_f_gate_tau", + mp_membrane_L_type_calcium_current_f_gate_tau_modifier); + this->AddModifier("membrane_fast_sodium_current", + mp_i_Na__i_Na_modifier); + this->AddModifier("membrane_fast_sodium_current_conductance", + mp_membrane_fast_sodium_current_conductance_modifier); + this->AddModifier("membrane_fast_sodium_current_h_gate", + mp_membrane_fast_sodium_current_h_gate_modifier); + this->AddModifier("membrane_fast_sodium_current_h_gate_tau", + mp_membrane_fast_sodium_current_h_gate_tau_modifier); + this->AddModifier("membrane_fast_sodium_current_j_gate", + mp_membrane_fast_sodium_current_j_gate_modifier); + this->AddModifier("membrane_fast_sodium_current_j_gate_tau", + mp_membrane_fast_sodium_current_j_gate_tau_modifier); + this->AddModifier("membrane_fast_sodium_current_m_gate", + mp_membrane_fast_sodium_current_m_gate_modifier); + this->AddModifier("membrane_fast_sodium_current_reduced_inactivation", + mp_membrane_fast_sodium_current_reduced_inactivation_modifier); + this->AddModifier("membrane_fast_sodium_current_shift_inactivation", + mp_membrane_fast_sodium_current_shift_inactivation_modifier); + this->AddModifier("membrane_inward_rectifier_potassium_current", + mp_i_K1__i_K1_modifier); + this->AddModifier("membrane_inward_rectifier_potassium_current_conductance", + mp_membrane_inward_rectifier_potassium_current_conductance_modifier); + this->AddModifier("membrane_rapid_delayed_rectifier_potassium_current", + mp_i_Kr__i_Kr_modifier); + this->AddModifier("membrane_rapid_delayed_rectifier_potassium_current_conductance", + mp_membrane_rapid_delayed_rectifier_potassium_current_conductance_modifier); + this->AddModifier("membrane_slow_delayed_rectifier_potassium_current", + mp_i_Ks__i_Ks_modifier); + this->AddModifier("membrane_slow_delayed_rectifier_potassium_current_conductance", + mp_membrane_slow_delayed_rectifier_potassium_current_conductance_modifier); + this->AddModifier("membrane_sodium_calcium_exchanger_current", + mp_i_NaCa__i_NaCa_modifier); + this->AddModifier("membrane_sodium_calcium_exchanger_current_conductance", + mp_membrane_sodium_calcium_exchanger_current_conductance_modifier); + this->AddModifier("membrane_transient_outward_current", + mp_i_to_1__i_to_1_modifier); + this->AddModifier("membrane_transient_outward_current_conductance", + mp_membrane_transient_outward_current_conductance_modifier); + this->AddModifier("membrane_voltage", + mp_membrane_voltage_modifier); + this->mParameters[0] = 0.0043750000000000004; // (var_q_leak__q_leak_max) [millimolar_per_millisecond] + this->mParameters[1] = 3000; // (var_q_rel__g_rel_max) [per_millisecond] + this->mParameters[2] = 0.0043750000000000004; // (var_q_up__q_up_max) [millimolar_per_millisecond] + this->mParameters[3] = 1; // (var_intracellular_ion_concentrations__conc_clamp) [dimensionless] + this->mParameters[4] = 1.8; // (var_model_parameters__Ca_o) [millimolar] + this->mParameters[5] = 5.4000000000000004; // (var_model_parameters__K_o) [millimolar] + this->mParameters[6] = 140; // (var_model_parameters__Na_o) [millimolar] + this->mParameters[7] = 0.3392328; // (var_i_Ca_L__g_Ca_L) [dimensionless] + this->mParameters[8] = 8; // (var_i_Na__g_Na) [milliS_per_microF] + this->mParameters[9] = 0; // (var_i_Na__perc_reduced_inact_for_IpNa) [dimensionless] + this->mParameters[10] = 0; // (var_i_Na__shift_INa_inact) [millivolt] + this->mParameters[11] = 0.25; // (var_i_K1__g_K1_max) [milliS_per_microF] + this->mParameters[12] = 0.040008488000000002; // (var_i_Kr__g_Kr_max) [milliS_per_microF] + this->mParameters[13] = 0.052581329000000003; // (var_i_Ks__g_Ks_max) [milliS_per_microF] + this->mParameters[14] = 4.5; // (var_i_NaCa__i_NaCa_max) [microA_per_microF] + this->mParameters[15] = 0.14135944; // (var_i_to_1__g_to_1) [milliS_per_microF] + } + + Cellaslanidi_Purkinje_model_2009FromCellML::~Cellaslanidi_Purkinje_model_2009FromCellML() + { + } + + + void Cellaslanidi_Purkinje_model_2009FromCellML::VerifyStateVariables() + { + std::vector& rY = rGetStateVariables(); + std::string error_message = ""; + + for (unsigned i=0; i < 30; i++) + { + if(std::isnan(rY[i])) + { + error_message += "State variable " + this->rGetStateVariableNames()[i] + " is not a number\n"; + } + if(std::isinf(rY[i])) + { + error_message += "State variable " + this->rGetStateVariableNames()[i] + " has become INFINITE\n"; + } + if(this->is_concentration[i] && rY[i] < 0) + { + error_message += "Concentration " + this->rGetStateVariableNames()[i] + " below 0\n"; + } + if(this->is_probability[i] && rY[i] < 0) + { + error_message += "Probability " + this->rGetStateVariableNames()[i] + " below 0\n"; + } + if(this->is_probability[i] && rY[i] > 1) + { + error_message += "Probability " + this->rGetStateVariableNames()[i] + " above 1\n"; + } + } + if (error_message != ""){ + EXCEPTION(DumpState(error_message)); + } + } + + double Cellaslanidi_Purkinje_model_2009FromCellML::GetIIonic(const std::vector* pStateVariables) + { + // For state variable interpolation (SVI) we read in interpolated state variables, + // otherwise for ionic current interpolation (ICI) we use the state variables of this model (node). + if (!pStateVariables) pStateVariables = &rGetStateVariables(); + const std::vector& rY = *pStateVariables; + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -83.43812846286808 + double var_chaste_interface__Ca_i__Ca_i = rY[1]; + // Units: millimolar; Initial value: 0.00022355433459434943 + double var_chaste_interface__i_Na_m_gate__m = rY[2]; + // Units: dimensionless; Initial value: 0.002003390432234504 + double var_chaste_interface__i_Na_h_gate__h = rY[3]; + // Units: dimensionless; Initial value: 0.9786390933308567 + double var_chaste_interface__i_Na_j_gate__j = rY[4]; + // Units: dimensionless; Initial value: 0.09866447258167589 + double var_chaste_interface__i_Na_L_m_L_gate__m_L = rY[5]; + // Units: dimensionless; Initial value: 0.002003390432234504 + double var_chaste_interface__i_Na_L_h_L_gate__h_L = rY[6]; + // Units: dimensionless; Initial value: 0.8946968372659203 + double var_chaste_interface__i_Ca_L_d_gate__d = rY[7]; + // Units: dimensionless; Initial value: 2.322223865147363e-06 + double var_chaste_interface__i_Ca_L_f_gate__f = rY[8]; + // Units: dimensionless; Initial value: 0.9985607329462358 + double var_chaste_interface__i_Ca_L_f2_gate__f2 = rY[9]; + // Units: dimensionless; Initial value: 0.8173435436674658 + double var_chaste_interface__i_Ca_L_f_Ca_gate__f_Ca = rY[10]; + // Units: dimensionless; Initial value: 0.9610551285529658 + double var_chaste_interface__i_Ca_L_f_Ca2_gate__f_Ca2 = rY[11]; + // Units: dimensionless; Initial value: 0.868690796671854 + double var_chaste_interface__i_Ca_T_b_gate__b = rY[12]; + // Units: dimensionless; Initial value: 0.0002563937630984438 + double var_chaste_interface__i_Ca_T_g_gate__g = rY[13]; + // Units: dimensionless; Initial value: 0.9720432601848331 + double var_chaste_interface__i_to_1_a_gate__a = rY[14]; + // Units: dimensionless; Initial value: 0.0004238729429342389 + double var_chaste_interface__i_to_1_i_gate__i = rY[15]; + // Units: dimensionless; Initial value: 0.9990935802459496 + double var_chaste_interface__i_to_1_i2_gate__i2 = rY[16]; + // Units: dimensionless; Initial value: 0.9777368439681764 + double var_chaste_interface__i_Kr_xr_gate__xr = rY[17]; + // Units: dimensionless; Initial value: 0.07084939408222911 + double var_chaste_interface__i_Ks_xs1_gate__xs1 = rY[18]; + // Units: dimensionless; Initial value: 0.0011737654433043125 + double var_chaste_interface__i_Ks_xs2_gate__xs2 = rY[19]; + // Units: dimensionless; Initial value: 0.001179442867470093 + double var_chaste_interface__i_to_2_a_gate__a = rY[20]; + // Units: dimensionless; Initial value: 0.0014909437525000811 + double var_chaste_interface__intracellular_ion_concentrations__Na_i = rY[21]; + // Units: millimolar; Initial value: 9.927155552932733 + double var_chaste_interface__intracellular_ion_concentrations__Cl_i = rY[22]; + // Units: millimolar; Initial value: 18.904682470140408 + double var_chaste_interface__intracellular_ion_concentrations__K_i = rY[23]; + // Units: millimolar; Initial value: 141.9670801746057 + double var_chaste_interface__Ca_r__Ca_r = rY[27]; + // Units: millimolar; Initial value: 0.00022418117117903934 + + const double var_background_currents__g_Cl_b = 0.00022499999999999999; // milliS_per_microF + const double var_background_currents__g_K_b = 0.0050000000000000001; // milliS_per_microF + const double var_background_currents__g_Na_b = 0.0025000000000000001; // milliS_per_microF + const double var_background_currents__p_Ca_b = 1.9950840000000001e-7; // cm_per_second + const double var_equilibrium_potentials__r_NaK = 0.018329999999999999; // dimensionless + const double var_i_Ca_L__p_Ca = 0.000243; // cm_per_second + const double var_i_Ca_T__g_Ca_T = 0.13; // milliS_per_microF + const double var_i_Ca_p__i_Ca_p_max = 0.057500000000000002; // microA_per_microF + const double var_i_Ca_p__km_Ca_p = 0.00050000000000000001; // millimolar + const double var_i_Ca_p__i_Ca_p = var_chaste_interface__Ca_i__Ca_i * var_i_Ca_p__i_Ca_p_max / (var_chaste_interface__Ca_i__Ca_i + var_i_Ca_p__km_Ca_p); // microA_per_microF + const double var_i_K_p__g_K_p = 0.0027599999999999999; // milliS_per_microF + const double var_i_Ks__g_Ks = (1 + 0.59999999999999998 / (1 + 6.4818210260626455e-7 * pow((1 / var_chaste_interface__Ca_i__Ca_i), 1.3999999999999999))) * mParameters[13]; // milliS_per_microF + const double var_i_NaCa__X_NaCa = 0.40000000000000002; // dimensionless + const double var_i_NaCa__k_sat = 0.27000000000000002; // dimensionless + const double var_i_NaCa__km_Ca_act = 0.000125; // millimolar + const double var_i_NaCa__km_Ca_i = 0.0035999999999999999; // millimolar + const double var_i_NaCa__km_Ca_o = 1.3; // millimolar + const double var_i_NaCa__km_Na_i_1 = 12.300000000000001; // millimolar + const double var_i_NaCa__km_Na_o = 87.5; // millimolar + const double var_i_NaK__g_NaK = 0.61875000000000002; // microA_per_microF + const double var_i_NaK__km_K_o = 1.5; // millimolar + const double var_i_NaK__km_Na_i_2 = 10; // millimolar + const double var_i_Na_L__g_Na_L = 0.037374999999999999; // milliS_per_microF + const double var_i_to_2__p_Cl = 3.9999999999999998e-7; // cm_per_second + const double var_i_to_2__z_Cl = -1; // dimensionless + const double var_i_Ca_T__i_Ca_T = (-50 + var_chaste_interface__membrane__V) * var_i_Ca_T__g_Ca_T * var_chaste_interface__i_Ca_T_b_gate__b * var_chaste_interface__i_Ca_T_g_gate__g; // microA_per_microF + const double var_i_K_p__kp = 1 / (1 + exp(1.2521739130434781 - 0.16722408026755853 * var_chaste_interface__membrane__V)); // dimensionless + const double var_i_Kr__rr_infinity = 1 / (1 + exp(-0.26470588235294124 + 0.049019607843137261 * var_chaste_interface__membrane__V)); // dimensionless + const double var_i_NaCa__dNaCa_1 = pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, 3) * var_i_NaCa__km_Ca_o + 1.5 * pow(var_i_NaCa__km_Na_o, 3) * var_chaste_interface__Ca_i__Ca_i + pow(var_i_NaCa__km_Na_i_1, 3) * (1 + 1.5 * var_chaste_interface__Ca_i__Ca_i / var_i_NaCa__km_Ca_i) * mParameters[4]; // millimolar4 + const double var_model_parameters__Cl_o = 100; // millimolar + const double var_model_parameters__Cm = 1; // microF_per_cm2 + const double var_model_parameters__F = 96485; // coulomb_per_mole + const double var_i_K1__g_K1 = 0.43033148291193518 * sqrt(mParameters[5]) * mParameters[11]; // milliS_per_microF + const double var_i_Kr__g_Kr = 0.43033148291193518 * sqrt(mParameters[5]) * mParameters[12]; // milliS_per_microF + const double var_i_NaCa__dNaCa_2 = pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, 3) * mParameters[4] + 1.5 * pow(mParameters[6], 3) * var_chaste_interface__Ca_i__Ca_i + pow(mParameters[6], 3) * (1 + var_chaste_interface__intracellular_ion_concentrations__Na_i / var_i_NaCa__km_Na_i_1) * var_i_NaCa__km_Ca_i; // millimolar4 + const double var_i_NaK__sigma = -0.14285714285714285 + 0.14285714285714285 * exp(0.01485884101040119 * mParameters[6]); // dimensionless + const double var_model_parameters__R = 8314; // joule_per_kilomole_kelvin + const double var_model_parameters__T = 310; // kelvin + const double var_equilibrium_potentials__E_Cl = -var_model_parameters__R * var_model_parameters__T * log(var_model_parameters__Cl_o / var_chaste_interface__intracellular_ion_concentrations__Cl_i) / var_model_parameters__F; // millivolt + const double var_background_currents__i_Cl_b = (-var_equilibrium_potentials__E_Cl + var_chaste_interface__membrane__V) * var_background_currents__g_Cl_b; // microA_per_microF + const double var_equilibrium_potentials__E_K = var_model_parameters__R * var_model_parameters__T * log(mParameters[5] / var_chaste_interface__intracellular_ion_concentrations__K_i) / var_model_parameters__F; // millivolt + const double var_background_currents__i_K_b = (-var_equilibrium_potentials__E_K + var_chaste_interface__membrane__V) * var_background_currents__g_K_b; // microA_per_microF + const double var_equilibrium_potentials__E_Ks = var_model_parameters__R * var_model_parameters__T * log((var_equilibrium_potentials__r_NaK * mParameters[6] + mParameters[5]) / (var_equilibrium_potentials__r_NaK * var_chaste_interface__intracellular_ion_concentrations__Na_i + var_chaste_interface__intracellular_ion_concentrations__K_i)) / var_model_parameters__F; // millivolt + const double var_equilibrium_potentials__E_Na = var_model_parameters__R * var_model_parameters__T * log(mParameters[6] / var_chaste_interface__intracellular_ion_concentrations__Na_i) / var_model_parameters__F; // millivolt + const double var_background_currents__i_Na_b = (-var_equilibrium_potentials__E_Na + var_chaste_interface__membrane__V) * var_background_currents__g_Na_b; // microA_per_microF + const double var_i_K1_xK1_gate__alpha_xK1 = 1.02 / (1 + exp(-14.1227775 + 0.23849999999999999 * var_chaste_interface__membrane__V - 0.23849999999999999 * var_equilibrium_potentials__E_K)); // dimensionless + const double var_i_K1_xK1_gate__beta_xK1 = (0.49124000000000001 * exp(0.43983232 + 0.080320000000000003 * var_chaste_interface__membrane__V - 0.080320000000000003 * var_equilibrium_potentials__E_K) + exp(-36.698642499999998 + 0.061749999999999999 * var_chaste_interface__membrane__V - 0.061749999999999999 * var_equilibrium_potentials__E_K)) / (1 + exp(-2.4444678999999998 + 0.51429999999999998 * var_equilibrium_potentials__E_K - 0.51429999999999998 * var_chaste_interface__membrane__V)); // dimensionless + const double var_i_K1_xK1_gate__xK1 = var_i_K1_xK1_gate__alpha_xK1 / (var_i_K1_xK1_gate__alpha_xK1 + var_i_K1_xK1_gate__beta_xK1); // dimensionless + const double var_i_K1__i_K1 = (0.0040000000000000001 + var_i_K1__g_K1 * var_i_K1_xK1_gate__xK1) * (-var_equilibrium_potentials__E_K + var_chaste_interface__membrane__V); // microA_per_microF + const double var_i_K_p__i_K_p = (-var_equilibrium_potentials__E_K + var_chaste_interface__membrane__V) * var_i_K_p__g_K_p * var_i_K_p__kp; // microA_per_microF + const double var_i_Kr__i_Kr = (-var_equilibrium_potentials__E_K + var_chaste_interface__membrane__V) * var_i_Kr__g_Kr * var_i_Kr__rr_infinity * var_chaste_interface__i_Kr_xr_gate__xr; // microA_per_microF + const double var_i_Ks__i_Ks = (-var_equilibrium_potentials__E_Ks + var_chaste_interface__membrane__V) * var_i_Ks__g_Ks * var_chaste_interface__i_Ks_xs1_gate__xs1 * var_chaste_interface__i_Ks_xs2_gate__xs2; // microA_per_microF + const double var_i_Na__i_Na = pow(var_chaste_interface__i_Na_m_gate__m, 3) * (-var_equilibrium_potentials__E_Na + var_chaste_interface__membrane__V) * (0.20000000000000001 * var_chaste_interface__i_Na_j_gate__j + 0.80000000000000004 * var_chaste_interface__i_Na_h_gate__h) * mParameters[8]; // microA_per_microF + const double var_i_NaCa__i_NaCa = (-1.5 * pow(mParameters[6], 3) * var_chaste_interface__Ca_i__Ca_i * exp(-0.65000000000000002 * var_chaste_interface__membrane__V * var_model_parameters__F / (var_model_parameters__R * var_model_parameters__T)) + pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, 3) * var_i_NaCa__X_NaCa * mParameters[14] * mParameters[4] * exp(0.34999999999999998 * var_chaste_interface__membrane__V * var_model_parameters__F / (var_model_parameters__R * var_model_parameters__T))) / ((1 + var_i_NaCa__k_sat * exp(-0.65000000000000002 * var_chaste_interface__membrane__V * var_model_parameters__F / (var_model_parameters__R * var_model_parameters__T))) * (1 + 0.44444444444444442 * pow(var_i_NaCa__km_Ca_act, 2) / pow(var_chaste_interface__Ca_i__Ca_i, 2)) * (var_i_NaCa__dNaCa_1 + var_i_NaCa__dNaCa_2)); // microA_per_microF + const double var_i_NaK__f_NaK = 1 / (1 + 0.1245 * exp(-0.10000000000000001 * var_chaste_interface__membrane__V * var_model_parameters__F / (var_model_parameters__R * var_model_parameters__T)) + 0.036499999999999998 * var_i_NaK__sigma * exp(-var_chaste_interface__membrane__V * var_model_parameters__F / (var_model_parameters__R * var_model_parameters__T))); // dimensionless + const double var_i_NaK__i_NaK = var_i_NaK__f_NaK * var_i_NaK__g_NaK * mParameters[5] / ((1 + pow(var_i_NaK__km_Na_i_2, 2) / pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, 2)) * (var_i_NaK__km_K_o + mParameters[5])); // microA_per_microF + const double var_i_Na_L__i_Na_L = pow(var_chaste_interface__i_Na_L_m_L_gate__m_L, 3) * (-var_equilibrium_potentials__E_Na + var_chaste_interface__membrane__V) * var_i_Na_L__g_Na_L * var_chaste_interface__i_Na_L_h_L_gate__h_L; // microA_per_microF + const double var_i_to_1__i_to_1 = (-var_equilibrium_potentials__E_K + var_chaste_interface__membrane__V) * (0.20000000000000001 * var_chaste_interface__i_to_1_i2_gate__i2 + 0.80000000000000004 * var_chaste_interface__i_to_1_i_gate__i) * mParameters[15] * var_chaste_interface__i_to_1_a_gate__a; // microA_per_microF + const double var_i_to_2__i_to_2_max = pow(var_i_to_2__z_Cl, 2) * pow(var_model_parameters__F, 2) * (-var_model_parameters__Cl_o * exp(-var_i_to_2__z_Cl * var_chaste_interface__membrane__V * var_model_parameters__F / (var_model_parameters__R * var_model_parameters__T)) + var_chaste_interface__intracellular_ion_concentrations__Cl_i) * var_i_to_2__p_Cl * var_chaste_interface__membrane__V / ((1 - exp(-var_i_to_2__z_Cl * var_chaste_interface__membrane__V * var_model_parameters__F / (var_model_parameters__R * var_model_parameters__T))) * var_model_parameters__Cm * var_model_parameters__R * var_model_parameters__T); // microA_per_microF + const double var_i_to_2__i_to_2 = 20 * var_i_to_2__i_to_2_max * var_chaste_interface__i_to_2_a_gate__a; // microA_per_microF + const double var_model_parameters__gamma_Cai = 1; // dimensionless + const double var_model_parameters__gamma_Cao = 0.34100000000000003; // dimensionless + const double var_model_parameters__z_Ca = 2; // dimensionless + const double var_background_currents__i_Ca_b = pow(var_model_parameters__F, 2) * pow(var_model_parameters__z_Ca, 2) * (-mParameters[4] * var_model_parameters__gamma_Cao + var_chaste_interface__Ca_i__Ca_i * var_model_parameters__gamma_Cai * exp(var_chaste_interface__membrane__V * var_model_parameters__F * var_model_parameters__z_Ca / (var_model_parameters__R * var_model_parameters__T))) * var_background_currents__p_Ca_b * var_chaste_interface__membrane__V / ((-1 + exp(var_chaste_interface__membrane__V * var_model_parameters__F * var_model_parameters__z_Ca / (var_model_parameters__R * var_model_parameters__T))) * var_model_parameters__Cm * var_model_parameters__R * var_model_parameters__T); // microA_per_microF + const double var_i_Ca_L__i_Ca_L_max = pow(var_model_parameters__F, 2) * pow(var_model_parameters__z_Ca, 2) * (-15 + var_chaste_interface__membrane__V) * (-mParameters[4] * var_model_parameters__gamma_Cao + var_chaste_interface__Ca_r__Ca_r * var_model_parameters__gamma_Cai * exp((-15 + var_chaste_interface__membrane__V) * var_model_parameters__F * var_model_parameters__z_Ca / (var_model_parameters__R * var_model_parameters__T))) * var_i_Ca_L__p_Ca / ((-1 + exp((-15 + var_chaste_interface__membrane__V) * var_model_parameters__F * var_model_parameters__z_Ca / (var_model_parameters__R * var_model_parameters__T))) * var_model_parameters__Cm * var_model_parameters__R * var_model_parameters__T); // microA_per_microF + const double var_i_Ca_L__i_Ca_L = mParameters[7] * var_i_Ca_L__i_Ca_L_max * var_chaste_interface__i_Ca_L_d_gate__d * var_chaste_interface__i_Ca_L_f2_gate__f2 * var_chaste_interface__i_Ca_L_f_Ca2_gate__f_Ca2 * var_chaste_interface__i_Ca_L_f_Ca_gate__f_Ca * var_chaste_interface__i_Ca_L_f_gate__f; // microA_per_microF + const double var_membrane__i_tot = var_background_currents__i_Ca_b + var_background_currents__i_Cl_b + var_background_currents__i_K_b + var_background_currents__i_Na_b + var_i_Ca_L__i_Ca_L + var_i_Ca_T__i_Ca_T + var_i_Ca_p__i_Ca_p + var_i_K1__i_K1 + var_i_K_p__i_K_p + var_i_Kr__i_Kr + var_i_Ks__i_Ks + var_i_Na__i_Na + var_i_NaCa__i_NaCa + var_i_NaK__i_NaK + var_i_Na_L__i_Na_L + var_i_to_1__i_to_1 + var_i_to_2__i_to_2; // microA_per_microF + const double var_chaste_interface__i_ionic = HeartConfig::Instance()->GetCapacitance() * var_membrane__i_tot; // uA_per_cm2 + + const double i_ionic = var_chaste_interface__i_ionic; + EXCEPT_IF_NOT(!std::isnan(i_ionic)); + return i_ionic; + } + + void Cellaslanidi_Purkinje_model_2009FromCellML::EvaluateYDerivatives(double var_chaste_interface__environment__time, const std::vector& rY, std::vector& rDY) + { + // Inputs: + // Time units: millisecond + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : mp_membrane_voltage_modifier->Calc(rY[0], var_chaste_interface__environment__time)); + // Units: millivolt; Initial value: -83.43812846286808 + double var_chaste_interface__Ca_i__Ca_i = mp_cytosolic_calcium_concentration_modifier->Calc(rY[1], var_chaste_interface__environment__time); + // Units: millimolar; Initial value: 0.00022355433459434943 + double var_chaste_interface__i_Na_m_gate__m = mp_membrane_fast_sodium_current_m_gate_modifier->Calc(rY[2], var_chaste_interface__environment__time); + // Units: dimensionless; Initial value: 0.002003390432234504 + double var_chaste_interface__i_Na_h_gate__h = mp_membrane_fast_sodium_current_h_gate_modifier->Calc(rY[3], var_chaste_interface__environment__time); + // Units: dimensionless; Initial value: 0.9786390933308567 + double var_chaste_interface__i_Na_j_gate__j = mp_membrane_fast_sodium_current_j_gate_modifier->Calc(rY[4], var_chaste_interface__environment__time); + // Units: dimensionless; Initial value: 0.09866447258167589 + double var_chaste_interface__i_Na_L_m_L_gate__m_L = rY[5]; + // Units: dimensionless; Initial value: 0.002003390432234504 + double var_chaste_interface__i_Na_L_h_L_gate__h_L = rY[6]; + // Units: dimensionless; Initial value: 0.8946968372659203 + double var_chaste_interface__i_Ca_L_d_gate__d = mp_membrane_L_type_calcium_current_d_gate_modifier->Calc(rY[7], var_chaste_interface__environment__time); + // Units: dimensionless; Initial value: 2.322223865147363e-06 + double var_chaste_interface__i_Ca_L_f_gate__f = mp_membrane_L_type_calcium_current_f_gate_modifier->Calc(rY[8], var_chaste_interface__environment__time); + // Units: dimensionless; Initial value: 0.9985607329462358 + double var_chaste_interface__i_Ca_L_f2_gate__f2 = mp_membrane_L_type_calcium_current_f2_gate_modifier->Calc(rY[9], var_chaste_interface__environment__time); + // Units: dimensionless; Initial value: 0.8173435436674658 + double var_chaste_interface__i_Ca_L_f_Ca_gate__f_Ca = mp_membrane_L_type_calcium_current_fCa_gate_modifier->Calc(rY[10], var_chaste_interface__environment__time); + // Units: dimensionless; Initial value: 0.9610551285529658 + double var_chaste_interface__i_Ca_L_f_Ca2_gate__f_Ca2 = mp_membrane_L_type_calcium_current_fCa2_gate_modifier->Calc(rY[11], var_chaste_interface__environment__time); + // Units: dimensionless; Initial value: 0.868690796671854 + double var_chaste_interface__i_Ca_T_b_gate__b = rY[12]; + // Units: dimensionless; Initial value: 0.0002563937630984438 + double var_chaste_interface__i_Ca_T_g_gate__g = rY[13]; + // Units: dimensionless; Initial value: 0.9720432601848331 + double var_chaste_interface__i_to_1_a_gate__a = rY[14]; + // Units: dimensionless; Initial value: 0.0004238729429342389 + double var_chaste_interface__i_to_1_i_gate__i = rY[15]; + // Units: dimensionless; Initial value: 0.9990935802459496 + double var_chaste_interface__i_to_1_i2_gate__i2 = rY[16]; + // Units: dimensionless; Initial value: 0.9777368439681764 + double var_chaste_interface__i_Kr_xr_gate__xr = rY[17]; + // Units: dimensionless; Initial value: 0.07084939408222911 + double var_chaste_interface__i_Ks_xs1_gate__xs1 = rY[18]; + // Units: dimensionless; Initial value: 0.0011737654433043125 + double var_chaste_interface__i_Ks_xs2_gate__xs2 = rY[19]; + // Units: dimensionless; Initial value: 0.001179442867470093 + double var_chaste_interface__i_to_2_a_gate__a = rY[20]; + // Units: dimensionless; Initial value: 0.0014909437525000811 + double var_chaste_interface__intracellular_ion_concentrations__Na_i = mp_cytosolic_sodium_concentration_modifier->Calc(rY[21], var_chaste_interface__environment__time); + // Units: millimolar; Initial value: 9.927155552932733 + double var_chaste_interface__intracellular_ion_concentrations__Cl_i = rY[22]; + // Units: millimolar; Initial value: 18.904682470140408 + double var_chaste_interface__intracellular_ion_concentrations__K_i = mp_cytosolic_potassium_concentration_modifier->Calc(rY[23], var_chaste_interface__environment__time); + // Units: millimolar; Initial value: 141.9670801746057 + double var_chaste_interface__Ca_MK_act__Ca_MK_trap = rY[24]; + // Units: dimensionless; Initial value: 8.789168284782809e-06 + double var_chaste_interface__Ca_NSR__Ca_NSR = rY[25]; + // Units: millimolar; Initial value: 1.2132524695849454 + double var_chaste_interface__Ca_JSR__Ca_JSR = mp_JSR_calcium_concentration_modifier->Calc(rY[26], var_chaste_interface__environment__time); + // Units: millimolar; Initial value: 1.1433050636518596 + double var_chaste_interface__Ca_r__Ca_r = mp_dyadic_space_calcium_concentration_modifier->Calc(rY[27], var_chaste_interface__environment__time); + // Units: millimolar; Initial value: 0.00022418117117903934 + double var_chaste_interface__q_rel_ri_gate__ri = rY[28]; + // Units: dimensionless; Initial value: 0.7802870066567904 + double var_chaste_interface__q_rel_ro_gate__ro = rY[29]; + // Units: dimensionless; Initial value: 1.2785734760674763e-09 + + // Mathematics + double d_dt_chaste_interface_var_membrane__V; + const double var_CT_K_Cl__CT_K_Cl_max = 7.0755999999999996e-6; // millimolar_per_millisecond + const double var_CT_Na_Cl__CT_Na_Cl_max = 9.8442999999999999e-6; // millimolar_per_millisecond + const double var_Ca_JSR__CSQN_max = 10; // millimolar + const double var_Ca_JSR__km_CSQN = 0.80000000000000004; // millimolar + const double var_Ca_MK_act__Ca_MK_0 = 0.050000000000000003; // dimensionless + const double var_Ca_MK_act__alpha_Ca_MK = 0.050000000000000003; // per_millisecond + const double var_Ca_MK_act__beta_Ca_MK = 0.00068000000000000005; // per_millisecond + const double var_Ca_MK_act__km_Ca_MK = 0.14999999999999999; // millimolar + const double var_Ca_i__CMDN_max = 0.050000000000000003; // millimolar + const double var_Ca_i__TRPN_max = 0.070000000000000007; // millimolar + const double var_Ca_i__km_CMDN = 0.0023800000000000002; // millimolar + const double var_Ca_i__CMDN = 2 * var_Ca_i__CMDN_max * var_chaste_interface__Ca_i__Ca_i / pow((var_chaste_interface__Ca_i__Ca_i + var_Ca_i__km_CMDN), 2); // dimensionless + const double var_Ca_i__km_TRPN = 0.00050000000000000001; // millimolar + const double var_Ca_i__TRPN = 2 * var_chaste_interface__Ca_i__Ca_i * var_Ca_i__TRPN_max / pow((var_chaste_interface__Ca_i__Ca_i + var_Ca_i__km_TRPN), 2); // dimensionless + const double var_Ca_i__b_myo = 1 / (1 + var_Ca_i__CMDN + var_Ca_i__TRPN); // dimensionless + const double var_Ca_MK_act__Ca_MK_bound = (1 - var_chaste_interface__Ca_MK_act__Ca_MK_trap) * var_Ca_MK_act__Ca_MK_0 / (1 + var_Ca_MK_act__km_Ca_MK / var_chaste_interface__Ca_r__Ca_r); // dimensionless + const double var_Ca_MK_act__Ca_MK_act = var_Ca_MK_act__Ca_MK_bound + var_chaste_interface__Ca_MK_act__Ca_MK_trap; // dimensionless + const double var_Ca_r__b_SL_max = 1.1240000000000001; // millimolar + const double var_Ca_r__b_SR_max = 0.047; // millimolar + const double var_Ca_r__km_b_SL = 0.0086999999999999994; // millimolar + const double var_Ca_r__b_SL = 2 * var_chaste_interface__Ca_r__Ca_r * var_Ca_r__b_SL_max / pow((var_chaste_interface__Ca_r__Ca_r + var_Ca_r__km_b_SL), 2); // dimensionless + const double var_Ca_r__km_b_SR = 0.00087000000000000001; // millimolar + const double var_Ca_r__b_SR = 2 * var_chaste_interface__Ca_r__Ca_r * var_Ca_r__b_SR_max / pow((var_chaste_interface__Ca_r__Ca_r + var_Ca_r__km_b_SR), 2); // dimensionless + const double var_Ca_r__Ca_r_tot = 1 / (1 + var_Ca_r__b_SL + var_Ca_r__b_SR); // dimensionless + const double var_Ca_r__tau_ss = 0.20000000000000001; // millisecond + const double var_Ca_r__q_diff = (-var_chaste_interface__Ca_i__Ca_i + var_chaste_interface__Ca_r__Ca_r) / var_Ca_r__tau_ss; // millimolar_per_millisecond + const double d_dt_chaste_interface_var_Ca_MK_act__Ca_MK_trap = -var_chaste_interface__Ca_MK_act__Ca_MK_trap * var_Ca_MK_act__beta_Ca_MK + (var_Ca_MK_act__Ca_MK_bound + var_chaste_interface__Ca_MK_act__Ca_MK_trap) * var_Ca_MK_act__Ca_MK_bound * var_Ca_MK_act__alpha_Ca_MK; // 1 / millisecond + const double var_background_currents__g_Cl_b = 0.00022499999999999999; // milliS_per_microF + const double var_background_currents__g_K_b = 0.0050000000000000001; // milliS_per_microF + const double var_background_currents__g_Na_b = 0.0025000000000000001; // milliS_per_microF + const double var_background_currents__p_Ca_b = 1.9950840000000001e-7; // cm_per_second + const double var_equilibrium_potentials__r_NaK = 0.018329999999999999; // dimensionless + const double var_i_Ca_L__p_Ca = 0.000243; // cm_per_second + const double var_i_Ca_L_f_Ca_gate__tau_f_Ca = mp_membrane_L_type_calcium_current_fCa_gate_tau_modifier->Calc(0.5 + 1 / (1 + 333.33333333333331 * var_chaste_interface__Ca_r__Ca_r) + 10 * var_Ca_MK_act__Ca_MK_act / (var_Ca_MK_act__Ca_MK_act + var_Ca_MK_act__km_Ca_MK), var_chaste_interface__environment__time); // millisecond + const double var_i_Ca_p__i_Ca_p_max = 0.057500000000000002; // microA_per_microF + const double var_i_Ca_p__km_Ca_p = 0.00050000000000000001; // millimolar + const double var_i_Ca_p__i_Ca_p = var_chaste_interface__Ca_i__Ca_i * var_i_Ca_p__i_Ca_p_max / (var_chaste_interface__Ca_i__Ca_i + var_i_Ca_p__km_Ca_p); // microA_per_microF + const double var_i_K_p__g_K_p = 0.0027599999999999999; // milliS_per_microF + const double var_i_Ks__g_Ks = (1 + 0.59999999999999998 / (1 + 6.4818210260626455e-7 * pow((1 / var_chaste_interface__Ca_i__Ca_i), 1.3999999999999999))) * mp_membrane_slow_delayed_rectifier_potassium_current_conductance_modifier->Calc(mParameters[13], var_chaste_interface__environment__time); // milliS_per_microF + const double var_i_NaCa__X_NaCa = 0.40000000000000002; // dimensionless + const double var_i_NaCa__k_sat = 0.27000000000000002; // dimensionless + const double var_i_NaCa__km_Ca_act = 0.000125; // millimolar + const double var_i_NaCa__km_Ca_i = 0.0035999999999999999; // millimolar + const double var_i_NaCa__km_Ca_o = 1.3; // millimolar + const double var_i_NaCa__km_Na_i_1 = 12.300000000000001; // millimolar + const double var_i_NaCa__km_Na_o = 87.5; // millimolar + const double var_i_NaK__g_NaK = 0.61875000000000002; // microA_per_microF + const double var_i_NaK__km_K_o = 1.5; // millimolar + const double var_i_NaK__km_Na_i_2 = 10; // millimolar + const double var_i_Na_L__g_Na_L = 0.037374999999999999; // milliS_per_microF + const double var_i_to_2__p_Cl = 3.9999999999999998e-7; // cm_per_second + const double var_i_to_2__z_Cl = -1; // dimensionless + const double var_i_to_2_a_gate__km_to_2 = 0.1502; // millimolar + const double var_i_to_2_a_gate__a_infinity = 1 / (1 + var_i_to_2_a_gate__km_to_2 / var_chaste_interface__Ca_r__Ca_r); // dimensionless + const double var_i_to_2_a_gate__tau_a = 1; // millisecond + const double d_dt_chaste_interface_var_i_to_2_a_gate__a = (-var_chaste_interface__i_to_2_a_gate__a + var_i_to_2_a_gate__a_infinity) / var_i_to_2_a_gate__tau_a; // 1 / millisecond + const double var_i_Ca_L_d_gate__d_infinity = 1 / (1 + exp(0.59347181008902072 - 0.14836795252225518 * var_chaste_interface__membrane__V)); // dimensionless + const double var_i_Ca_L_d_gate__tau_d = 0.58999999999999997 + 0.80000000000000004 * exp(0.67599999999999993 + 0.051999999999999998 * var_chaste_interface__membrane__V) / (1 + exp(1.7160000000000002 + 0.13200000000000001 * var_chaste_interface__membrane__V)); // millisecond + const double d_dt_chaste_interface_var_i_Ca_L_d_gate__d = (-var_chaste_interface__i_Ca_L_d_gate__d + var_i_Ca_L_d_gate__d_infinity) / var_i_Ca_L_d_gate__tau_d; // 1 / millisecond + const double var_i_Ca_L_f2_gate__f2_infinity = 1 / (1 + exp(1.8 + 0.10000000000000001 * var_chaste_interface__membrane__V)); // dimensionless + const double var_i_Ca_L_f2_gate__tau_f2 = mp_membrane_L_type_calcium_current_f2_gate_tau_modifier->Calc(38 + 24.217200000000005 * pow((-1 + 0.053763440860215048 * var_chaste_interface__membrane__V), 2), var_chaste_interface__environment__time); // millisecond + const double d_dt_chaste_interface_var_i_Ca_L_f2_gate__f2 = (-var_chaste_interface__i_Ca_L_f2_gate__f2 + var_i_Ca_L_f2_gate__f2_infinity) / var_i_Ca_L_f2_gate__tau_f2; // 1 / millisecond + const double var_i_Ca_L_f_gate__f_infinity = 1 / (1 + exp(1.8 + 0.10000000000000001 * var_chaste_interface__membrane__V)); // dimensionless + const double var_i_Ca_L_f_gate__tau_f = mp_membrane_L_type_calcium_current_f_gate_tau_modifier->Calc(4 + 0.03125 * pow((-1 + 0.40000000000000002 * var_chaste_interface__membrane__V), 2), var_chaste_interface__environment__time); // millisecond + const double d_dt_chaste_interface_var_i_Ca_L_f_gate__f = (-var_chaste_interface__i_Ca_L_f_gate__f + var_i_Ca_L_f_gate__f_infinity) / var_i_Ca_L_f_gate__tau_f; // 1 / millisecond + const double var_i_Ca_T_b_gate__alpha_b = 1.0680000000000001 * exp(0.54333333333333333 + 0.033333333333333333 * var_chaste_interface__membrane__V); // per_millisecond + const double var_i_Ca_T_b_gate__b_infinity = 1 / (1 + exp(-5.4098360655737707 - 0.16393442622950821 * var_chaste_interface__membrane__V)); // dimensionless + const double var_i_Ca_T_b_gate__beta_b = 1.0680000000000001 * exp(-0.54333333333333333 - 0.033333333333333333 * var_chaste_interface__membrane__V); // per_millisecond + const double var_i_Ca_T_b_gate__tau_b = 1 / (var_i_Ca_T_b_gate__alpha_b + var_i_Ca_T_b_gate__beta_b); // millisecond + const double d_dt_chaste_interface_var_i_Ca_T_b_gate__b = (-var_chaste_interface__i_Ca_T_b_gate__b + var_i_Ca_T_b_gate__b_infinity) / var_i_Ca_T_b_gate__tau_b; // 1 / millisecond + const double var_i_Ca_T_g_gate__alpha_g = 0.014999999999999999 * exp(-0.86074429771908767 - 0.012004801920768308 * var_chaste_interface__membrane__V); // per_millisecond + const double var_i_Ca_T_g_gate__beta_g = 0.014999999999999999 * exp(4.6558441558441563 + 0.064935064935064929 * var_chaste_interface__membrane__V); // per_millisecond + const double var_i_Ca_T_g_gate__g_infinity = 1 / (1 + exp(9.0909090909090917 + 0.15151515151515152 * var_chaste_interface__membrane__V)); // dimensionless + const double var_i_Ca_T_g_gate__tau_g = 1 / (var_i_Ca_T_g_gate__alpha_g + var_i_Ca_T_g_gate__beta_g); // millisecond + const double d_dt_chaste_interface_var_i_Ca_T_g_gate__g = (-var_chaste_interface__i_Ca_T_g_gate__g + var_i_Ca_T_g_gate__g_infinity) / var_i_Ca_T_g_gate__tau_g; // 1 / millisecond + const double var_i_K_p__kp = 1 / (1 + exp(1.2521739130434781 - 0.16722408026755853 * var_chaste_interface__membrane__V)); // dimensionless + const double var_i_Kr__rr_infinity = 1 / (1 + exp(-0.26470588235294124 + 0.049019607843137261 * var_chaste_interface__membrane__V)); // dimensionless + const double var_i_Kr_xr_gate__tau_xr = 100 + 900 / (1 + exp(0.20000000000000001 * var_chaste_interface__membrane__V)); // millisecond + const double var_i_Kr_xr_gate__xr_infinity = 1 / (1 + exp(-0.0069387755102040824 - 0.081632653061224483 * var_chaste_interface__membrane__V)); // dimensionless + const double d_dt_chaste_interface_var_i_Kr_xr_gate__xr = (-var_chaste_interface__i_Kr_xr_gate__xr + var_i_Kr_xr_gate__xr_infinity) / var_i_Kr_xr_gate__tau_xr; // 1 / millisecond + const double var_i_Ks_xs1_gate__tau_xs1 = 1 / (7.6100000000000007e-5 * (44.600000000000001 + var_chaste_interface__membrane__V) / (1 - exp(-444.66200000000003 - 9.9700000000000006 * var_chaste_interface__membrane__V)) + 0.00036000000000000002 * (-0.55000000000000004 + var_chaste_interface__membrane__V) / (-1 + exp(-0.070400000000000004 + 0.128 * var_chaste_interface__membrane__V))); // millisecond + const double var_i_Ks_xs1_gate__xs1_infinity = 1 / (1 + exp(0.65693430656934315 - 0.072992700729927015 * var_chaste_interface__membrane__V)); // dimensionless + const double d_dt_chaste_interface_var_i_Ks_xs1_gate__xs1 = (-var_chaste_interface__i_Ks_xs1_gate__xs1 + var_i_Ks_xs1_gate__xs1_infinity) / var_i_Ks_xs1_gate__tau_xs1; // 1 / millisecond + const double var_i_Ks_xs2_gate__tau_xs2 = 2 / (7.6100000000000007e-5 * (44.600000000000001 + var_chaste_interface__membrane__V) / (1 - exp(-444.66200000000003 - 9.9700000000000006 * var_chaste_interface__membrane__V)) + 0.00036000000000000002 * (-0.55000000000000004 + var_chaste_interface__membrane__V) / (-1 + exp(-0.070400000000000004 + 0.128 * var_chaste_interface__membrane__V))); // millisecond + const double var_i_Ks_xs2_gate__xs2_infinity = 1 / (1 + exp(0.65693430656934315 - 0.072992700729927015 * var_chaste_interface__membrane__V)); // dimensionless + const double d_dt_chaste_interface_var_i_Ks_xs2_gate__xs2 = (-var_chaste_interface__i_Ks_xs2_gate__xs2 + var_i_Ks_xs2_gate__xs2_infinity) / var_i_Ks_xs2_gate__tau_xs2; // 1 / millisecond + const double var_i_Na_L_h_L_gate__h_L_infinity = 1 / (1 + exp(11.311475409836067 + 0.16393442622950821 * var_chaste_interface__membrane__V)); // dimensionless + const double var_i_Na_L_h_L_gate__tau_h_L = 175 + 125 / (1 + exp(-4.166666666666667 - 0.16666666666666666 * var_chaste_interface__membrane__V)); // millisecond + const double d_dt_chaste_interface_var_i_Na_L_h_L_gate__h_L = (-var_chaste_interface__i_Na_L_h_L_gate__h_L + var_i_Na_L_h_L_gate__h_L_infinity) / var_i_Na_L_h_L_gate__tau_h_L; // 1 / millisecond + const double var_i_Na_L_m_L_gate__alpha_m_L = 0.32000000000000001 * (47.130000000000003 + var_chaste_interface__membrane__V) / (1 - exp(-4.7130000000000001 - 0.10000000000000001 * var_chaste_interface__membrane__V)); // per_millisecond + const double var_i_Na_L_m_L_gate__beta_m_L = 0.080000000000000002 * exp(-0.090909090909090912 * var_chaste_interface__membrane__V); // per_millisecond + const double var_i_Na_L_m_L_gate__m_L_infinity = var_i_Na_L_m_L_gate__alpha_m_L / (var_i_Na_L_m_L_gate__alpha_m_L + var_i_Na_L_m_L_gate__beta_m_L); // dimensionless + const double var_i_Na_L_m_L_gate__tau_m_L = 1 / (var_i_Na_L_m_L_gate__alpha_m_L + var_i_Na_L_m_L_gate__beta_m_L); // millisecond + const double d_dt_chaste_interface_var_i_Na_L_m_L_gate__m_L = (-var_chaste_interface__i_Na_L_m_L_gate__m_L + var_i_Na_L_m_L_gate__m_L_infinity) / var_i_Na_L_m_L_gate__tau_m_L; // 1 / millisecond + const double var_i_Na_h_gate__alpha_h = ((var_chaste_interface__membrane__V < -40) ? (0.13500000000000001 * exp(-11.764705882352942 + 0.14705882352941177 * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(mParameters[10], var_chaste_interface__environment__time) - 0.14705882352941177 * var_chaste_interface__membrane__V)) : (0)); // per_millisecond + const double var_i_Na_h_gate__beta_h = ((var_chaste_interface__membrane__V < -40) ? (310000 * exp(0.34999999999999998 * var_chaste_interface__membrane__V - 0.34999999999999998 * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(mParameters[10], var_chaste_interface__environment__time)) + 3.5600000000000001 * exp(0.079000000000000001 * var_chaste_interface__membrane__V - 0.079000000000000001 * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(mParameters[10], var_chaste_interface__environment__time))) : (7.6923076923076916 / (1 + exp(-0.96036036036036043 + 0.0900900900900901 * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(mParameters[10], var_chaste_interface__environment__time) - 0.0900900900900901 * var_chaste_interface__membrane__V)))); // per_millisecond + const double var_i_Na_h_gate__h_infinity = 0.01 * mp_membrane_fast_sodium_current_reduced_inactivation_modifier->Calc(mParameters[9], var_chaste_interface__environment__time) + (1 - 0.01 * mp_membrane_fast_sodium_current_reduced_inactivation_modifier->Calc(mParameters[9], var_chaste_interface__environment__time)) * var_i_Na_h_gate__alpha_h / (var_i_Na_h_gate__alpha_h + var_i_Na_h_gate__beta_h); // dimensionless + const double var_i_Na_h_gate__tau_h = mp_membrane_fast_sodium_current_h_gate_tau_modifier->Calc(1 / (var_i_Na_h_gate__alpha_h + var_i_Na_h_gate__beta_h), var_chaste_interface__environment__time); // millisecond + const double d_dt_chaste_interface_var_i_Na_h_gate__h = (-var_chaste_interface__i_Na_h_gate__h + var_i_Na_h_gate__h_infinity) / var_i_Na_h_gate__tau_h; // 1 / millisecond + const double var_i_Na_j_gate__alpha_j = ((var_chaste_interface__membrane__V < -40) ? ((37.780000000000001 + var_chaste_interface__membrane__V) * (-127140 * exp(0.24440000000000001 * var_chaste_interface__membrane__V - 0.24440000000000001 * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(mParameters[10], var_chaste_interface__environment__time)) - 3.4740000000000003e-5 * exp(0.043909999999999998 * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(mParameters[10], var_chaste_interface__environment__time) - 0.043909999999999998 * var_chaste_interface__membrane__V)) / (1 + exp(24.640530000000002 + 0.311 * var_chaste_interface__membrane__V - 0.311 * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(mParameters[10], var_chaste_interface__environment__time)))) : (0)); // per_millisecond + const double var_i_Na_j_gate__beta_j = ((var_chaste_interface__membrane__V < -40) ? (0.1212 * exp(0.01052 * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(mParameters[10], var_chaste_interface__environment__time) - 0.01052 * var_chaste_interface__membrane__V) / (1 + exp(-5.5312920000000005 + 0.13780000000000001 * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(mParameters[10], var_chaste_interface__environment__time) - 0.13780000000000001 * var_chaste_interface__membrane__V))) : (0.29999999999999999 * exp(2.5349999999999999e-7 * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(mParameters[10], var_chaste_interface__environment__time) - 2.5349999999999999e-7 * var_chaste_interface__membrane__V) / (1 + exp(-3.2000000000000002 + 0.10000000000000001 * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(mParameters[10], var_chaste_interface__environment__time) - 0.10000000000000001 * var_chaste_interface__membrane__V)))); // per_millisecond + const double var_i_Na_j_gate__j_infinity = 0.01 * mp_membrane_fast_sodium_current_reduced_inactivation_modifier->Calc(mParameters[9], var_chaste_interface__environment__time) + (1 - 0.01 * mp_membrane_fast_sodium_current_reduced_inactivation_modifier->Calc(mParameters[9], var_chaste_interface__environment__time)) * var_i_Na_j_gate__alpha_j / (var_i_Na_j_gate__alpha_j + var_i_Na_j_gate__beta_j); // dimensionless + const double var_i_Na_j_gate__tau_j = mp_membrane_fast_sodium_current_j_gate_tau_modifier->Calc(1 / (var_i_Na_j_gate__alpha_j + var_i_Na_j_gate__beta_j), var_chaste_interface__environment__time); // millisecond + const double d_dt_chaste_interface_var_i_Na_j_gate__j = (-var_chaste_interface__i_Na_j_gate__j + var_i_Na_j_gate__j_infinity) / var_i_Na_j_gate__tau_j; // 1 / millisecond + const double var_i_Na_m_gate__alpha_m = 0.32000000000000001 * (47.130000000000003 + var_chaste_interface__membrane__V) / (1 - exp(-4.7130000000000001 - 0.10000000000000001 * var_chaste_interface__membrane__V)); // per_millisecond + const double var_i_Na_m_gate__beta_m = 0.080000000000000002 * exp(-0.090909090909090912 * var_chaste_interface__membrane__V); // per_millisecond + const double var_i_Na_m_gate__m_infinity = var_i_Na_m_gate__alpha_m / (var_i_Na_m_gate__alpha_m + var_i_Na_m_gate__beta_m); // dimensionless + const double var_i_Na_m_gate__tau_m = 1 / (var_i_Na_m_gate__alpha_m + var_i_Na_m_gate__beta_m); // millisecond + const double d_dt_chaste_interface_var_i_Na_m_gate__m = (-var_chaste_interface__i_Na_m_gate__m + var_i_Na_m_gate__m_infinity) / var_i_Na_m_gate__tau_m; // 1 / millisecond + const double var_i_to_1_a_gate__alpha_a = 25 * exp(-3.7999999999999998 + 0.050000000000000003 * var_chaste_interface__membrane__V) / (1 + exp(-3.7999999999999998 + 0.050000000000000003 * var_chaste_interface__membrane__V)); // per_millisecond + const double var_i_to_1_a_gate__beta_a = 25 * exp(-2.7000000000000002 - 0.050000000000000003 * var_chaste_interface__membrane__V) / (1 + exp(-2.7000000000000002 - 0.050000000000000003 * var_chaste_interface__membrane__V)); // per_millisecond + const double var_i_to_1_a_gate__a_infinity = var_i_to_1_a_gate__alpha_a / (var_i_to_1_a_gate__alpha_a + var_i_to_1_a_gate__beta_a); // dimensionless + const double var_i_to_1_a_gate__tau_a = 1 / (var_i_to_1_a_gate__alpha_a + var_i_to_1_a_gate__beta_a); // millisecond + const double d_dt_chaste_interface_var_i_to_1_a_gate__a = (-var_chaste_interface__i_to_1_a_gate__a + var_i_to_1_a_gate__a_infinity) / var_i_to_1_a_gate__tau_a; // 1 / millisecond + const double var_i_to_1_i2_gate__alpha_i2 = 0.0044200000000000003 / (1 + exp(1.7333333333333334 + 0.066666666666666666 * var_chaste_interface__membrane__V)); // per_millisecond + const double var_i_to_1_i2_gate__beta_i2 = 0.050000000000000003 * exp(-0.66666666666666663 + 0.066666666666666666 * var_chaste_interface__membrane__V) / (1 + exp(-0.66666666666666663 + 0.066666666666666666 * var_chaste_interface__membrane__V)); // per_millisecond + const double var_i_to_1_i2_gate__i2_infinity = var_i_to_1_i2_gate__alpha_i2 / (var_i_to_1_i2_gate__alpha_i2 + var_i_to_1_i2_gate__beta_i2); // dimensionless + const double var_i_to_1_i2_gate__tau_i2 = 21.5 + 30 / (1 + exp(-2.5 + 0.10000000000000001 * var_chaste_interface__membrane__V)); // millisecond + const double d_dt_chaste_interface_var_i_to_1_i2_gate__i2 = (-var_chaste_interface__i_to_1_i2_gate__i2 + var_i_to_1_i2_gate__i2_infinity) / var_i_to_1_i2_gate__tau_i2; // 1 / millisecond + const double var_i_to_1_i_gate__alpha_i = 0.029999999999999999 / (1 + exp(1.6666666666666667 + 0.066666666666666666 * var_chaste_interface__membrane__V)); // per_millisecond + const double var_i_to_1_i_gate__beta_i = 0.10000000000000001 * exp(-2.6666666666666665 + 0.066666666666666666 * var_chaste_interface__membrane__V) / (1 + exp(-2.6666666666666665 + 0.066666666666666666 * var_chaste_interface__membrane__V)); // per_millisecond + const double var_i_to_1_i_gate__i_infinity = var_i_to_1_i_gate__alpha_i / (var_i_to_1_i_gate__alpha_i + var_i_to_1_i_gate__beta_i); // dimensionless + const double var_i_to_1_i_gate__tau_i = 6 + 5 / (1 + exp(-1.6499999999999999 + 0.10000000000000001 * var_chaste_interface__membrane__V)); // millisecond + const double d_dt_chaste_interface_var_i_to_1_i_gate__i = (-var_chaste_interface__i_to_1_i_gate__i + var_i_to_1_i_gate__i_infinity) / var_i_to_1_i_gate__tau_i; // 1 / millisecond + const double var_i_NaCa__dNaCa_1 = pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, 3) * var_i_NaCa__km_Ca_o + 1.5 * pow(var_i_NaCa__km_Na_o, 3) * var_chaste_interface__Ca_i__Ca_i + pow(var_i_NaCa__km_Na_i_1, 3) * (1 + 1.5 * var_chaste_interface__Ca_i__Ca_i / var_i_NaCa__km_Ca_i) * mp_extracellular_calcium_concentration_modifier->Calc(mParameters[4], var_chaste_interface__environment__time); // millimolar4 + const double var_model_parameters__Cl_o = 100; // millimolar + const double var_model_parameters__Cm = 1; // microF_per_cm2 + const double var_model_parameters__F = 96485; // coulomb_per_mole + const double var_i_K1__g_K1 = 0.43033148291193518 * sqrt(mp_extracellular_potassium_concentration_modifier->Calc(mParameters[5], var_chaste_interface__environment__time)) * mp_membrane_inward_rectifier_potassium_current_conductance_modifier->Calc(mParameters[11], var_chaste_interface__environment__time); // milliS_per_microF + const double var_i_Kr__g_Kr = 0.43033148291193518 * sqrt(mp_extracellular_potassium_concentration_modifier->Calc(mParameters[5], var_chaste_interface__environment__time)) * mp_membrane_rapid_delayed_rectifier_potassium_current_conductance_modifier->Calc(mParameters[12], var_chaste_interface__environment__time); // milliS_per_microF + const double var_i_NaCa__dNaCa_2 = pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, 3) * mp_extracellular_calcium_concentration_modifier->Calc(mParameters[4], var_chaste_interface__environment__time) + 1.5 * pow(mp_extracellular_sodium_concentration_modifier->Calc(mParameters[6], var_chaste_interface__environment__time), 3) * var_chaste_interface__Ca_i__Ca_i + pow(mp_extracellular_sodium_concentration_modifier->Calc(mParameters[6], var_chaste_interface__environment__time), 3) * (1 + var_chaste_interface__intracellular_ion_concentrations__Na_i / var_i_NaCa__km_Na_i_1) * var_i_NaCa__km_Ca_i; // millimolar4 + const double var_i_NaK__sigma = -0.14285714285714285 + 0.14285714285714285 * exp(0.01485884101040119 * mp_extracellular_sodium_concentration_modifier->Calc(mParameters[6], var_chaste_interface__environment__time)); // dimensionless + const double var_model_parameters__R = 8314; // joule_per_kilomole_kelvin + const double var_model_parameters__T = 310; // kelvin + const double var_equilibrium_potentials__E_Cl = -var_model_parameters__R * var_model_parameters__T * log(var_model_parameters__Cl_o / var_chaste_interface__intracellular_ion_concentrations__Cl_i) / var_model_parameters__F; // millivolt + const double var_background_currents__i_Cl_b = (-var_equilibrium_potentials__E_Cl + var_chaste_interface__membrane__V) * var_background_currents__g_Cl_b; // microA_per_microF + const double var_equilibrium_potentials__E_K = var_model_parameters__R * var_model_parameters__T * log(mp_extracellular_potassium_concentration_modifier->Calc(mParameters[5], var_chaste_interface__environment__time) / var_chaste_interface__intracellular_ion_concentrations__K_i) / var_model_parameters__F; // millivolt + const double var_CT_K_Cl__CT_K_Cl = (-var_equilibrium_potentials__E_Cl + var_equilibrium_potentials__E_K) * var_CT_K_Cl__CT_K_Cl_max / (87.825100000000006 - var_equilibrium_potentials__E_Cl + var_equilibrium_potentials__E_K); // millimolar_per_millisecond + const double var_background_currents__i_K_b = (-var_equilibrium_potentials__E_K + var_chaste_interface__membrane__V) * var_background_currents__g_K_b; // microA_per_microF + const double var_equilibrium_potentials__E_Ks = var_model_parameters__R * var_model_parameters__T * log((var_equilibrium_potentials__r_NaK * mp_extracellular_sodium_concentration_modifier->Calc(mParameters[6], var_chaste_interface__environment__time) + mp_extracellular_potassium_concentration_modifier->Calc(mParameters[5], var_chaste_interface__environment__time)) / (var_equilibrium_potentials__r_NaK * var_chaste_interface__intracellular_ion_concentrations__Na_i + var_chaste_interface__intracellular_ion_concentrations__K_i)) / var_model_parameters__F; // millivolt + const double var_equilibrium_potentials__E_Na = var_model_parameters__R * var_model_parameters__T * log(mp_extracellular_sodium_concentration_modifier->Calc(mParameters[6], var_chaste_interface__environment__time) / var_chaste_interface__intracellular_ion_concentrations__Na_i) / var_model_parameters__F; // millivolt + const double var_CT_Na_Cl__CT_Na_Cl = pow((-var_equilibrium_potentials__E_Cl + var_equilibrium_potentials__E_Na), 4) * var_CT_Na_Cl__CT_Na_Cl_max / (59494197.640692554 + pow((-var_equilibrium_potentials__E_Cl + var_equilibrium_potentials__E_Na), 4)); // millimolar_per_millisecond + const double var_background_currents__i_Na_b = (-var_equilibrium_potentials__E_Na + var_chaste_interface__membrane__V) * var_background_currents__g_Na_b; // microA_per_microF + const double var_i_K1_xK1_gate__alpha_xK1 = 1.02 / (1 + exp(-14.1227775 + 0.23849999999999999 * var_chaste_interface__membrane__V - 0.23849999999999999 * var_equilibrium_potentials__E_K)); // dimensionless + const double var_i_K1_xK1_gate__beta_xK1 = (0.49124000000000001 * exp(0.43983232 + 0.080320000000000003 * var_chaste_interface__membrane__V - 0.080320000000000003 * var_equilibrium_potentials__E_K) + exp(-36.698642499999998 + 0.061749999999999999 * var_chaste_interface__membrane__V - 0.061749999999999999 * var_equilibrium_potentials__E_K)) / (1 + exp(-2.4444678999999998 + 0.51429999999999998 * var_equilibrium_potentials__E_K - 0.51429999999999998 * var_chaste_interface__membrane__V)); // dimensionless + const double var_i_K1_xK1_gate__xK1 = var_i_K1_xK1_gate__alpha_xK1 / (var_i_K1_xK1_gate__alpha_xK1 + var_i_K1_xK1_gate__beta_xK1); // dimensionless + const double var_i_K1__i_K1 = mp_i_K1__i_K1_modifier->Calc((0.0040000000000000001 + var_i_K1__g_K1 * var_i_K1_xK1_gate__xK1) * (-var_equilibrium_potentials__E_K + var_chaste_interface__membrane__V), var_chaste_interface__environment__time); // microA_per_microF + const double var_i_K_p__i_K_p = (-var_equilibrium_potentials__E_K + var_chaste_interface__membrane__V) * var_i_K_p__g_K_p * var_i_K_p__kp; // microA_per_microF + const double var_i_Kr__i_Kr = mp_i_Kr__i_Kr_modifier->Calc((-var_equilibrium_potentials__E_K + var_chaste_interface__membrane__V) * var_i_Kr__g_Kr * var_i_Kr__rr_infinity * var_chaste_interface__i_Kr_xr_gate__xr, var_chaste_interface__environment__time); // microA_per_microF + const double var_i_Ks__i_Ks = mp_i_Ks__i_Ks_modifier->Calc((-var_equilibrium_potentials__E_Ks + var_chaste_interface__membrane__V) * var_i_Ks__g_Ks * var_chaste_interface__i_Ks_xs1_gate__xs1 * var_chaste_interface__i_Ks_xs2_gate__xs2, var_chaste_interface__environment__time); // microA_per_microF + const double var_i_Na__i_Na = mp_i_Na__i_Na_modifier->Calc(pow(var_chaste_interface__i_Na_m_gate__m, 3) * (-var_equilibrium_potentials__E_Na + var_chaste_interface__membrane__V) * (0.20000000000000001 * var_chaste_interface__i_Na_j_gate__j + 0.80000000000000004 * var_chaste_interface__i_Na_h_gate__h) * mp_membrane_fast_sodium_current_conductance_modifier->Calc(mParameters[8], var_chaste_interface__environment__time), var_chaste_interface__environment__time); // microA_per_microF + const double var_i_NaCa__i_NaCa = mp_i_NaCa__i_NaCa_modifier->Calc((-1.5 * pow(mp_extracellular_sodium_concentration_modifier->Calc(mParameters[6], var_chaste_interface__environment__time), 3) * var_chaste_interface__Ca_i__Ca_i * exp(-0.65000000000000002 * var_chaste_interface__membrane__V * var_model_parameters__F / (var_model_parameters__R * var_model_parameters__T)) + pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, 3) * var_i_NaCa__X_NaCa * mp_membrane_sodium_calcium_exchanger_current_conductance_modifier->Calc(mParameters[14], var_chaste_interface__environment__time) * mp_extracellular_calcium_concentration_modifier->Calc(mParameters[4], var_chaste_interface__environment__time) * exp(0.34999999999999998 * var_chaste_interface__membrane__V * var_model_parameters__F / (var_model_parameters__R * var_model_parameters__T))) / ((1 + var_i_NaCa__k_sat * exp(-0.65000000000000002 * var_chaste_interface__membrane__V * var_model_parameters__F / (var_model_parameters__R * var_model_parameters__T))) * (1 + 0.44444444444444442 * pow(var_i_NaCa__km_Ca_act, 2) / pow(var_chaste_interface__Ca_i__Ca_i, 2)) * (var_i_NaCa__dNaCa_1 + var_i_NaCa__dNaCa_2)), var_chaste_interface__environment__time); // microA_per_microF + const double var_i_NaK__f_NaK = 1 / (1 + 0.1245 * exp(-0.10000000000000001 * var_chaste_interface__membrane__V * var_model_parameters__F / (var_model_parameters__R * var_model_parameters__T)) + 0.036499999999999998 * var_i_NaK__sigma * exp(-var_chaste_interface__membrane__V * var_model_parameters__F / (var_model_parameters__R * var_model_parameters__T))); // dimensionless + const double var_i_NaK__i_NaK = var_i_NaK__f_NaK * var_i_NaK__g_NaK * mp_extracellular_potassium_concentration_modifier->Calc(mParameters[5], var_chaste_interface__environment__time) / ((1 + pow(var_i_NaK__km_Na_i_2, 2) / pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, 2)) * (var_i_NaK__km_K_o + mp_extracellular_potassium_concentration_modifier->Calc(mParameters[5], var_chaste_interface__environment__time))); // microA_per_microF + const double var_i_Na_L__i_Na_L = pow(var_chaste_interface__i_Na_L_m_L_gate__m_L, 3) * (-var_equilibrium_potentials__E_Na + var_chaste_interface__membrane__V) * var_i_Na_L__g_Na_L * var_chaste_interface__i_Na_L_h_L_gate__h_L; // microA_per_microF + const double var_i_to_1__i_to_1 = mp_i_to_1__i_to_1_modifier->Calc((-var_equilibrium_potentials__E_K + var_chaste_interface__membrane__V) * (0.20000000000000001 * var_chaste_interface__i_to_1_i2_gate__i2 + 0.80000000000000004 * var_chaste_interface__i_to_1_i_gate__i) * mp_membrane_transient_outward_current_conductance_modifier->Calc(mParameters[15], var_chaste_interface__environment__time) * var_chaste_interface__i_to_1_a_gate__a, var_chaste_interface__environment__time); // microA_per_microF + const double var_i_to_2__i_to_2_max = pow(var_i_to_2__z_Cl, 2) * pow(var_model_parameters__F, 2) * (-var_model_parameters__Cl_o * exp(-var_i_to_2__z_Cl * var_chaste_interface__membrane__V * var_model_parameters__F / (var_model_parameters__R * var_model_parameters__T)) + var_chaste_interface__intracellular_ion_concentrations__Cl_i) * var_i_to_2__p_Cl * var_chaste_interface__membrane__V / ((1 - exp(-var_i_to_2__z_Cl * var_chaste_interface__membrane__V * var_model_parameters__F / (var_model_parameters__R * var_model_parameters__T))) * var_model_parameters__Cm * var_model_parameters__R * var_model_parameters__T); // microA_per_microF + const double var_i_to_2__i_to_2 = 20 * var_i_to_2__i_to_2_max * var_chaste_interface__i_to_2_a_gate__a; // microA_per_microF + const double var_model_parameters__Vol_cell = 0.34539999999999998; // microlitre + const double var_model_parameters__Vol_jsr = 0.0047999999999999996 * var_model_parameters__Vol_cell; // microlitre + const double var_model_parameters__Vol_myo = 0.68000000000000005 * var_model_parameters__Vol_cell; // microlitre + const double var_model_parameters__Vol_nsr = 0.055199999999999999 * var_model_parameters__Vol_cell; // microlitre + const double var_model_parameters__Vol_ss = 0.02 * var_model_parameters__Vol_cell; // microlitre + const double var_model_parameters__gamma_Cai = 1; // dimensionless + const double var_model_parameters__gamma_Cao = 0.34100000000000003; // dimensionless + const double var_model_parameters__length = 0.01; // cm + const double var_model_parameters__radius = 0.0011000000000000001; // cm + const double var_model_parameters__a_geo = 6.2800000000000002 * pow(var_model_parameters__radius, 2) + 6.2800000000000002 * var_model_parameters__length * var_model_parameters__radius; // cm2 + const double var_model_parameters__rcg = 2; // dimensionless + const double var_model_parameters__a_cap = var_model_parameters__a_geo * var_model_parameters__rcg; // cm2 + const double d_dt_chaste_interface_var_intracellular_ion_concentrations__Cl_i = (-(var_background_currents__i_Cl_b + var_i_to_2__i_to_2) * var_model_parameters__Cm * var_model_parameters__a_cap / (var_model_parameters__F * var_model_parameters__Vol_myo) + var_CT_K_Cl__CT_K_Cl + var_CT_Na_Cl__CT_Na_Cl) * mp_concentration_clamp_onoff_modifier->Calc(mParameters[3], var_chaste_interface__environment__time); // millimolar / millisecond + const double d_dt_chaste_interface_var_intracellular_ion_concentrations__K_i = (-(-2 * var_i_NaK__i_NaK + var_background_currents__i_K_b + var_i_K1__i_K1 + var_i_K_p__i_K_p + var_i_Kr__i_Kr + var_i_Ks__i_Ks + var_i_to_1__i_to_1) * var_model_parameters__Cm * var_model_parameters__a_cap / (var_model_parameters__F * var_model_parameters__Vol_myo) + var_CT_K_Cl__CT_K_Cl) * mp_concentration_clamp_onoff_modifier->Calc(mParameters[3], var_chaste_interface__environment__time); // millimolar / millisecond + const double d_dt_chaste_interface_var_intracellular_ion_concentrations__Na_i = (-(3 * var_i_NaCa__i_NaCa + 3 * var_i_NaK__i_NaK + var_background_currents__i_Na_b + var_i_Na__i_Na + var_i_Na_L__i_Na_L) * var_model_parameters__Cm * var_model_parameters__a_cap / (var_model_parameters__F * var_model_parameters__Vol_myo) + var_CT_Na_Cl__CT_Na_Cl) * mp_concentration_clamp_onoff_modifier->Calc(mParameters[3], var_chaste_interface__environment__time); // millimolar / millisecond + const double var_model_parameters__z_Ca = 2; // dimensionless + const double var_background_currents__i_Ca_b = pow(var_model_parameters__F, 2) * pow(var_model_parameters__z_Ca, 2) * (-mp_extracellular_calcium_concentration_modifier->Calc(mParameters[4], var_chaste_interface__environment__time) * var_model_parameters__gamma_Cao + var_chaste_interface__Ca_i__Ca_i * var_model_parameters__gamma_Cai * exp(var_chaste_interface__membrane__V * var_model_parameters__F * var_model_parameters__z_Ca / (var_model_parameters__R * var_model_parameters__T))) * var_background_currents__p_Ca_b * var_chaste_interface__membrane__V / ((-1 + exp(var_chaste_interface__membrane__V * var_model_parameters__F * var_model_parameters__z_Ca / (var_model_parameters__R * var_model_parameters__T))) * var_model_parameters__Cm * var_model_parameters__R * var_model_parameters__T); // microA_per_microF + const double var_i_Ca_L__i_Ca_L_max = pow(var_model_parameters__F, 2) * pow(var_model_parameters__z_Ca, 2) * (-15 + var_chaste_interface__membrane__V) * (-mp_extracellular_calcium_concentration_modifier->Calc(mParameters[4], var_chaste_interface__environment__time) * var_model_parameters__gamma_Cao + var_chaste_interface__Ca_r__Ca_r * var_model_parameters__gamma_Cai * exp((-15 + var_chaste_interface__membrane__V) * var_model_parameters__F * var_model_parameters__z_Ca / (var_model_parameters__R * var_model_parameters__T))) * var_i_Ca_L__p_Ca / ((-1 + exp((-15 + var_chaste_interface__membrane__V) * var_model_parameters__F * var_model_parameters__z_Ca / (var_model_parameters__R * var_model_parameters__T))) * var_model_parameters__Cm * var_model_parameters__R * var_model_parameters__T); // microA_per_microF + const double var_i_Ca_L__i_Ca_L = mp_i_Ca_L__i_Ca_L_modifier->Calc(mp_membrane_L_type_calcium_current_conductance_modifier->Calc(mParameters[7], var_chaste_interface__environment__time) * var_i_Ca_L__i_Ca_L_max * var_chaste_interface__i_Ca_L_d_gate__d * var_chaste_interface__i_Ca_L_f2_gate__f2 * var_chaste_interface__i_Ca_L_f_Ca2_gate__f_Ca2 * var_chaste_interface__i_Ca_L_f_Ca_gate__f_Ca * var_chaste_interface__i_Ca_L_f_gate__f, var_chaste_interface__environment__time); // microA_per_microF + const double var_i_Ca_L_f_Ca2_gate__f_Ca2_infinity = 1 / (1 - 100 * var_i_Ca_L__i_Ca_L); // dimensionless + const double var_i_Ca_L_f_Ca2_gate__tau_f_Ca2 = mp_membrane_L_type_calcium_current_fCa2_gate_tau_modifier->Calc(125 + 300 / (1 + exp(-4.375 - 25 * var_i_Ca_L__i_Ca_L)), var_chaste_interface__environment__time); // millisecond + const double d_dt_chaste_interface_var_i_Ca_L_f_Ca2_gate__f_Ca2 = (-var_chaste_interface__i_Ca_L_f_Ca2_gate__f_Ca2 + var_i_Ca_L_f_Ca2_gate__f_Ca2_infinity) / var_i_Ca_L_f_Ca2_gate__tau_f_Ca2; // 1 / millisecond + const double var_i_Ca_L_f_Ca_gate__f_Ca_infinity = 0.14999999999999999 + 0.55000000000000004 / (1 + 333.33333333333331 * var_chaste_interface__Ca_r__Ca_r) + 0.29999999999999999 / (1 - 20 * var_i_Ca_L__i_Ca_L); // dimensionless + const double d_dt_chaste_interface_var_i_Ca_L_f_Ca_gate__f_Ca = (-var_chaste_interface__i_Ca_L_f_Ca_gate__f_Ca + var_i_Ca_L_f_Ca_gate__f_Ca_infinity) / var_i_Ca_L_f_Ca_gate__tau_f_Ca; // 1 / millisecond + const double var_q_leak__NSR_max = 15; // millimolar + const double var_q_leak__q_leak = var_chaste_interface__Ca_NSR__Ca_NSR * mp_SR_leak_current_max_modifier->Calc(mParameters[0], var_chaste_interface__environment__time) / var_q_leak__NSR_max; // millimolar_per_millisecond + const double var_q_rel__vg = 1 / (1 + exp(2.6000000000000001 + 0.20000000000000001 * mp_membrane_L_type_calcium_current_conductance_modifier->Calc(mParameters[7], var_chaste_interface__environment__time) * var_i_Ca_L__i_Ca_L_max)); // dimensionless + const double var_q_rel__g_rel = mp_SR_release_current_max_modifier->Calc(mParameters[1], var_chaste_interface__environment__time) * var_q_rel__vg; // per_millisecond + const double var_q_rel_ri_gate__Ca_fac = 1 / (1 + exp(3.3333333333333335 + 66.666666666666671 * var_i_Ca_L__i_Ca_L)); // millimolar + const double var_q_rel_ri_gate__ri_infinity = 1 / (1 + exp(-16 + 80 * var_q_rel_ri_gate__Ca_fac + 40000 * var_chaste_interface__Ca_r__Ca_r)); // dimensionless + const double var_q_rel_ri_gate__tau_Ca_MK_max = 10; // millisecond + const double var_q_rel_ri_gate__tau_Ca_MK = var_Ca_MK_act__Ca_MK_act * var_q_rel_ri_gate__tau_Ca_MK_max / (var_Ca_MK_act__Ca_MK_act + var_Ca_MK_act__km_Ca_MK); // millisecond + const double var_q_rel_ri_gate__tau_ri = 3 + (350 - var_q_rel_ri_gate__tau_Ca_MK) / (1 + exp(-15 + 5000 * var_chaste_interface__Ca_r__Ca_r + 15 * var_q_rel_ri_gate__Ca_fac)) + var_q_rel_ri_gate__tau_Ca_MK; // millisecond + const double d_dt_chaste_interface_var_q_rel_ri_gate__ri = (-var_chaste_interface__q_rel_ri_gate__ri + var_q_rel_ri_gate__ri_infinity) / var_q_rel_ri_gate__tau_ri; // 1 / millisecond + const double var_q_rel__q_rel = mp_SR_release_current_modifier->Calc((-var_chaste_interface__Ca_r__Ca_r + var_chaste_interface__Ca_JSR__Ca_JSR) * var_q_rel__g_rel * var_chaste_interface__q_rel_ri_gate__ri * var_chaste_interface__q_rel_ro_gate__ro, var_chaste_interface__environment__time); // millimolar_per_millisecond + const double d_dt_chaste_interface_var_Ca_r__Ca_r = (-var_Ca_r__q_diff + var_model_parameters__Vol_jsr * var_q_rel__q_rel / var_model_parameters__Vol_ss - var_i_Ca_L__i_Ca_L * var_model_parameters__Cm * var_model_parameters__a_cap / (var_model_parameters__F * var_model_parameters__Vol_ss * var_model_parameters__z_Ca)) * var_Ca_r__Ca_r_tot; // millimolar / millisecond + const double var_q_rel_ro_gate__ro_infinity_JSR = pow(var_chaste_interface__Ca_JSR__Ca_JSR, 1.8999999999999999) / (pow(var_chaste_interface__Ca_JSR__Ca_JSR, 1.8999999999999999) + 1644.6531773416521 * pow((var_chaste_interface__Ca_r__Ca_r / (0.0028 + var_chaste_interface__Ca_r__Ca_r)), 1.8999999999999999)); // dimensionless + const double var_q_rel_ro_gate__ro_infinity = pow(var_i_Ca_L__i_Ca_L, 2) * var_q_rel_ro_gate__ro_infinity_JSR / (1 + pow(var_i_Ca_L__i_Ca_L, 2)); // dimensionless + const double var_q_rel_ro_gate__tau_ro = 3; // millisecond + const double d_dt_chaste_interface_var_q_rel_ro_gate__ro = (-var_chaste_interface__q_rel_ro_gate__ro + var_q_rel_ro_gate__ro_infinity) / var_q_rel_ro_gate__tau_ro; // 1 / millisecond + const double var_q_tr__tau_tr = 120; // millisecond + const double var_q_tr__q_tr = (-var_chaste_interface__Ca_JSR__Ca_JSR + var_chaste_interface__Ca_NSR__Ca_NSR) / var_q_tr__tau_tr; // millimolar_per_millisecond + const double d_dt_chaste_interface_var_Ca_JSR__Ca_JSR = (-var_q_rel__q_rel + var_q_tr__q_tr) / (1 + var_Ca_JSR__CSQN_max * var_Ca_JSR__km_CSQN / pow((var_chaste_interface__Ca_JSR__Ca_JSR + var_Ca_JSR__km_CSQN), 2)); // millimolar / millisecond + const double var_q_up__X_q_up = 0.5; // dimensionless + const double var_q_up__dkm_plb_max = 0.00017000000000000001; // millimolar + const double var_q_up__dkm_plb = var_Ca_MK_act__Ca_MK_act * var_q_up__dkm_plb_max / (var_Ca_MK_act__Ca_MK_act + var_Ca_MK_act__km_Ca_MK); // millimolar + const double var_q_up__dq_up_Ca_MK_max = 0.75; // dimensionless + const double var_q_up__dq_up_Ca_MK = var_Ca_MK_act__Ca_MK_act * var_q_up__dq_up_Ca_MK_max / (var_Ca_MK_act__Ca_MK_act + var_Ca_MK_act__km_Ca_MK); // dimensionless + const double var_q_up__km_up = 0.00092000000000000003; // millimolar + const double var_q_up__q_up = (1 + var_q_up__dq_up_Ca_MK) * var_chaste_interface__Ca_i__Ca_i * var_q_up__X_q_up * mp_SR_uptake_current_max_modifier->Calc(mParameters[2], var_chaste_interface__environment__time) / (-var_q_up__dkm_plb + var_chaste_interface__Ca_i__Ca_i + var_q_up__km_up); // millimolar_per_millisecond + const double d_dt_chaste_interface_var_Ca_NSR__Ca_NSR = -var_q_leak__q_leak - var_model_parameters__Vol_jsr * var_q_tr__q_tr / var_model_parameters__Vol_nsr + var_q_up__q_up; // millimolar / millisecond + const double d_dt_chaste_interface_var_Ca_i__Ca_i = -((-var_q_leak__q_leak + var_q_up__q_up) * var_model_parameters__Vol_nsr / var_model_parameters__Vol_myo - var_Ca_r__q_diff * var_model_parameters__Vol_ss / var_model_parameters__Vol_myo + 0.5 * (-2 * var_i_NaCa__i_NaCa + var_background_currents__i_Ca_b + var_i_Ca_p__i_Ca_p) * var_model_parameters__Cm * var_model_parameters__a_cap / (var_model_parameters__F * var_model_parameters__Vol_myo)) * var_Ca_i__b_myo; // millimolar / millisecond + + if (mSetVoltageDerivativeToZero) + { + d_dt_chaste_interface_var_membrane__V = 0.0; + } + else + { + const double var_i_Ca_T__g_Ca_T = 0.13; // milliS_per_microF + const double var_i_Ca_T__i_Ca_T = (-50 + var_chaste_interface__membrane__V) * var_i_Ca_T__g_Ca_T * var_chaste_interface__i_Ca_T_b_gate__b * var_chaste_interface__i_Ca_T_g_gate__g; // microA_per_microF + const double var_membrane__i_stim_converted = GetIntracellularAreaStimulus(var_chaste_interface__environment__time); // uA_per_cm2 + const double var_membrane__i_stim = var_membrane__i_stim_converted / HeartConfig::Instance()->GetCapacitance(); // microA_per_microF + const double var_membrane__i_tot = var_background_currents__i_Ca_b + var_background_currents__i_Cl_b + var_background_currents__i_K_b + var_background_currents__i_Na_b + var_i_Ca_L__i_Ca_L + var_i_Ca_T__i_Ca_T + var_i_Ca_p__i_Ca_p + var_i_K1__i_K1 + var_i_K_p__i_K_p + var_i_Kr__i_Kr + var_i_Ks__i_Ks + var_i_Na__i_Na + var_i_NaCa__i_NaCa + var_i_NaK__i_NaK + var_i_Na_L__i_Na_L + var_i_to_1__i_to_1 + var_i_to_2__i_to_2; // microA_per_microF + d_dt_chaste_interface_var_membrane__V = -var_membrane__i_stim - var_membrane__i_tot; // millivolt / millisecond + } + + rDY[0] = d_dt_chaste_interface_var_membrane__V; + rDY[1] = d_dt_chaste_interface_var_Ca_i__Ca_i; + rDY[2] = d_dt_chaste_interface_var_i_Na_m_gate__m; + rDY[3] = d_dt_chaste_interface_var_i_Na_h_gate__h; + rDY[4] = d_dt_chaste_interface_var_i_Na_j_gate__j; + rDY[5] = d_dt_chaste_interface_var_i_Na_L_m_L_gate__m_L; + rDY[6] = d_dt_chaste_interface_var_i_Na_L_h_L_gate__h_L; + rDY[7] = d_dt_chaste_interface_var_i_Ca_L_d_gate__d; + rDY[8] = d_dt_chaste_interface_var_i_Ca_L_f_gate__f; + rDY[9] = d_dt_chaste_interface_var_i_Ca_L_f2_gate__f2; + rDY[10] = d_dt_chaste_interface_var_i_Ca_L_f_Ca_gate__f_Ca; + rDY[11] = d_dt_chaste_interface_var_i_Ca_L_f_Ca2_gate__f_Ca2; + rDY[12] = d_dt_chaste_interface_var_i_Ca_T_b_gate__b; + rDY[13] = d_dt_chaste_interface_var_i_Ca_T_g_gate__g; + rDY[14] = d_dt_chaste_interface_var_i_to_1_a_gate__a; + rDY[15] = d_dt_chaste_interface_var_i_to_1_i_gate__i; + rDY[16] = d_dt_chaste_interface_var_i_to_1_i2_gate__i2; + rDY[17] = d_dt_chaste_interface_var_i_Kr_xr_gate__xr; + rDY[18] = d_dt_chaste_interface_var_i_Ks_xs1_gate__xs1; + rDY[19] = d_dt_chaste_interface_var_i_Ks_xs2_gate__xs2; + rDY[20] = d_dt_chaste_interface_var_i_to_2_a_gate__a; + rDY[21] = d_dt_chaste_interface_var_intracellular_ion_concentrations__Na_i; + rDY[22] = d_dt_chaste_interface_var_intracellular_ion_concentrations__Cl_i; + rDY[23] = d_dt_chaste_interface_var_intracellular_ion_concentrations__K_i; + rDY[24] = d_dt_chaste_interface_var_Ca_MK_act__Ca_MK_trap; + rDY[25] = d_dt_chaste_interface_var_Ca_NSR__Ca_NSR; + rDY[26] = d_dt_chaste_interface_var_Ca_JSR__Ca_JSR; + rDY[27] = d_dt_chaste_interface_var_Ca_r__Ca_r; + rDY[28] = d_dt_chaste_interface_var_q_rel_ri_gate__ri; + rDY[29] = d_dt_chaste_interface_var_q_rel_ro_gate__ro; + } + + std::vector Cellaslanidi_Purkinje_model_2009FromCellML::ComputeDerivedQuantities(double var_chaste_interface__environment__time, const std::vector & rY) + { + // Inputs: + // Time units: millisecond + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : mp_membrane_voltage_modifier->Calc(rY[0], var_chaste_interface__environment__time)); + // Units: millivolt; Initial value: -83.43812846286808 + double var_chaste_interface__Ca_i__Ca_i = mp_cytosolic_calcium_concentration_modifier->Calc(rY[1], var_chaste_interface__environment__time); + // Units: millimolar; Initial value: 0.00022355433459434943 + double var_chaste_interface__i_Na_m_gate__m = mp_membrane_fast_sodium_current_m_gate_modifier->Calc(rY[2], var_chaste_interface__environment__time); + // Units: dimensionless; Initial value: 0.002003390432234504 + double var_chaste_interface__i_Na_h_gate__h = mp_membrane_fast_sodium_current_h_gate_modifier->Calc(rY[3], var_chaste_interface__environment__time); + // Units: dimensionless; Initial value: 0.9786390933308567 + double var_chaste_interface__i_Na_j_gate__j = mp_membrane_fast_sodium_current_j_gate_modifier->Calc(rY[4], var_chaste_interface__environment__time); + // Units: dimensionless; Initial value: 0.09866447258167589 + double var_chaste_interface__i_Ca_L_d_gate__d = mp_membrane_L_type_calcium_current_d_gate_modifier->Calc(rY[7], var_chaste_interface__environment__time); + // Units: dimensionless; Initial value: 2.322223865147363e-06 + double var_chaste_interface__i_Ca_L_f_gate__f = mp_membrane_L_type_calcium_current_f_gate_modifier->Calc(rY[8], var_chaste_interface__environment__time); + // Units: dimensionless; Initial value: 0.9985607329462358 + double var_chaste_interface__i_Ca_L_f2_gate__f2 = mp_membrane_L_type_calcium_current_f2_gate_modifier->Calc(rY[9], var_chaste_interface__environment__time); + // Units: dimensionless; Initial value: 0.8173435436674658 + double var_chaste_interface__i_Ca_L_f_Ca_gate__f_Ca = mp_membrane_L_type_calcium_current_fCa_gate_modifier->Calc(rY[10], var_chaste_interface__environment__time); + // Units: dimensionless; Initial value: 0.9610551285529658 + double var_chaste_interface__i_Ca_L_f_Ca2_gate__f_Ca2 = mp_membrane_L_type_calcium_current_fCa2_gate_modifier->Calc(rY[11], var_chaste_interface__environment__time); + // Units: dimensionless; Initial value: 0.868690796671854 + double var_chaste_interface__i_to_1_a_gate__a = rY[14]; + // Units: dimensionless; Initial value: 0.0004238729429342389 + double var_chaste_interface__i_to_1_i_gate__i = rY[15]; + // Units: dimensionless; Initial value: 0.9990935802459496 + double var_chaste_interface__i_to_1_i2_gate__i2 = rY[16]; + // Units: dimensionless; Initial value: 0.9777368439681764 + double var_chaste_interface__i_Kr_xr_gate__xr = rY[17]; + // Units: dimensionless; Initial value: 0.07084939408222911 + double var_chaste_interface__i_Ks_xs1_gate__xs1 = rY[18]; + // Units: dimensionless; Initial value: 0.0011737654433043125 + double var_chaste_interface__i_Ks_xs2_gate__xs2 = rY[19]; + // Units: dimensionless; Initial value: 0.001179442867470093 + double var_chaste_interface__intracellular_ion_concentrations__Na_i = mp_cytosolic_sodium_concentration_modifier->Calc(rY[21], var_chaste_interface__environment__time); + // Units: millimolar; Initial value: 9.927155552932733 + double var_chaste_interface__intracellular_ion_concentrations__K_i = mp_cytosolic_potassium_concentration_modifier->Calc(rY[23], var_chaste_interface__environment__time); + // Units: millimolar; Initial value: 141.9670801746057 + double var_chaste_interface__Ca_MK_act__Ca_MK_trap = rY[24]; + // Units: dimensionless; Initial value: 8.789168284782809e-06 + double var_chaste_interface__Ca_JSR__Ca_JSR = mp_JSR_calcium_concentration_modifier->Calc(rY[26], var_chaste_interface__environment__time); + // Units: millimolar; Initial value: 1.1433050636518596 + double var_chaste_interface__Ca_r__Ca_r = mp_dyadic_space_calcium_concentration_modifier->Calc(rY[27], var_chaste_interface__environment__time); + // Units: millimolar; Initial value: 0.00022418117117903934 + double var_chaste_interface__q_rel_ri_gate__ri = rY[28]; + // Units: dimensionless; Initial value: 0.7802870066567904 + double var_chaste_interface__q_rel_ro_gate__ro = rY[29]; + // Units: dimensionless; Initial value: 1.2785734760674763e-09 + + // Mathematics + const double var_Ca_MK_act__Ca_MK_0 = 0.050000000000000003; // dimensionless + const double var_Ca_MK_act__km_Ca_MK = 0.14999999999999999; // millimolar + const double var_Ca_MK_act__Ca_MK_bound = (1 - var_chaste_interface__Ca_MK_act__Ca_MK_trap) * var_Ca_MK_act__Ca_MK_0 / (1 + var_Ca_MK_act__km_Ca_MK / var_chaste_interface__Ca_r__Ca_r); // dimensionless + const double var_Ca_MK_act__Ca_MK_act = var_Ca_MK_act__Ca_MK_bound + var_chaste_interface__Ca_MK_act__Ca_MK_trap; // dimensionless + const double var_equilibrium_potentials__r_NaK = 0.018329999999999999; // dimensionless + const double var_i_Ca_L__p_Ca = 0.000243; // cm_per_second + const double var_i_Ca_L_f_Ca_gate__tau_f_Ca = mp_membrane_L_type_calcium_current_fCa_gate_tau_modifier->Calc(0.5 + 1 / (1 + 333.33333333333331 * var_chaste_interface__Ca_r__Ca_r) + 10 * var_Ca_MK_act__Ca_MK_act / (var_Ca_MK_act__Ca_MK_act + var_Ca_MK_act__km_Ca_MK), var_chaste_interface__environment__time); // millisecond + const double var_i_Ks__g_Ks = (1 + 0.59999999999999998 / (1 + 6.4818210260626455e-7 * pow((1 / var_chaste_interface__Ca_i__Ca_i), 1.3999999999999999))) * mp_membrane_slow_delayed_rectifier_potassium_current_conductance_modifier->Calc(mParameters[13], var_chaste_interface__environment__time); // milliS_per_microF + const double var_i_NaCa__X_NaCa = 0.40000000000000002; // dimensionless + const double var_i_NaCa__k_sat = 0.27000000000000002; // dimensionless + const double var_i_NaCa__km_Ca_act = 0.000125; // millimolar + const double var_i_NaCa__km_Ca_i = 0.0035999999999999999; // millimolar + const double var_i_NaCa__km_Ca_o = 1.3; // millimolar + const double var_i_NaCa__km_Na_i_1 = 12.300000000000001; // millimolar + const double var_i_NaCa__km_Na_o = 87.5; // millimolar + const double var_i_Ca_L_f2_gate__tau_f2 = mp_membrane_L_type_calcium_current_f2_gate_tau_modifier->Calc(38 + 24.217200000000005 * pow((-1 + 0.053763440860215048 * var_chaste_interface__membrane__V), 2), var_chaste_interface__environment__time); // millisecond + const double var_i_Ca_L_f_gate__tau_f = mp_membrane_L_type_calcium_current_f_gate_tau_modifier->Calc(4 + 0.03125 * pow((-1 + 0.40000000000000002 * var_chaste_interface__membrane__V), 2), var_chaste_interface__environment__time); // millisecond + const double var_i_Kr__rr_infinity = 1 / (1 + exp(-0.26470588235294124 + 0.049019607843137261 * var_chaste_interface__membrane__V)); // dimensionless + const double var_i_Na_h_gate__alpha_h = ((var_chaste_interface__membrane__V < -40) ? (0.13500000000000001 * exp(-11.764705882352942 + 0.14705882352941177 * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(mParameters[10], var_chaste_interface__environment__time) - 0.14705882352941177 * var_chaste_interface__membrane__V)) : (0)); // per_millisecond + const double var_i_Na_h_gate__beta_h = ((var_chaste_interface__membrane__V < -40) ? (310000 * exp(0.34999999999999998 * var_chaste_interface__membrane__V - 0.34999999999999998 * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(mParameters[10], var_chaste_interface__environment__time)) + 3.5600000000000001 * exp(0.079000000000000001 * var_chaste_interface__membrane__V - 0.079000000000000001 * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(mParameters[10], var_chaste_interface__environment__time))) : (7.6923076923076916 / (1 + exp(-0.96036036036036043 + 0.0900900900900901 * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(mParameters[10], var_chaste_interface__environment__time) - 0.0900900900900901 * var_chaste_interface__membrane__V)))); // per_millisecond + const double var_i_Na_h_gate__tau_h = mp_membrane_fast_sodium_current_h_gate_tau_modifier->Calc(1 / (var_i_Na_h_gate__alpha_h + var_i_Na_h_gate__beta_h), var_chaste_interface__environment__time); // millisecond + const double var_i_Na_j_gate__alpha_j = ((var_chaste_interface__membrane__V < -40) ? ((37.780000000000001 + var_chaste_interface__membrane__V) * (-127140 * exp(0.24440000000000001 * var_chaste_interface__membrane__V - 0.24440000000000001 * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(mParameters[10], var_chaste_interface__environment__time)) - 3.4740000000000003e-5 * exp(0.043909999999999998 * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(mParameters[10], var_chaste_interface__environment__time) - 0.043909999999999998 * var_chaste_interface__membrane__V)) / (1 + exp(24.640530000000002 + 0.311 * var_chaste_interface__membrane__V - 0.311 * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(mParameters[10], var_chaste_interface__environment__time)))) : (0)); // per_millisecond + const double var_i_Na_j_gate__beta_j = ((var_chaste_interface__membrane__V < -40) ? (0.1212 * exp(0.01052 * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(mParameters[10], var_chaste_interface__environment__time) - 0.01052 * var_chaste_interface__membrane__V) / (1 + exp(-5.5312920000000005 + 0.13780000000000001 * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(mParameters[10], var_chaste_interface__environment__time) - 0.13780000000000001 * var_chaste_interface__membrane__V))) : (0.29999999999999999 * exp(2.5349999999999999e-7 * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(mParameters[10], var_chaste_interface__environment__time) - 2.5349999999999999e-7 * var_chaste_interface__membrane__V) / (1 + exp(-3.2000000000000002 + 0.10000000000000001 * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(mParameters[10], var_chaste_interface__environment__time) - 0.10000000000000001 * var_chaste_interface__membrane__V)))); // per_millisecond + const double var_i_Na_j_gate__tau_j = mp_membrane_fast_sodium_current_j_gate_tau_modifier->Calc(1 / (var_i_Na_j_gate__alpha_j + var_i_Na_j_gate__beta_j), var_chaste_interface__environment__time); // millisecond + const double var_membrane__i_stim_converted = GetIntracellularAreaStimulus(var_chaste_interface__environment__time); // uA_per_cm2 + const double var_i_NaCa__dNaCa_1 = pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, 3) * var_i_NaCa__km_Ca_o + 1.5 * pow(var_i_NaCa__km_Na_o, 3) * var_chaste_interface__Ca_i__Ca_i + pow(var_i_NaCa__km_Na_i_1, 3) * (1 + 1.5 * var_chaste_interface__Ca_i__Ca_i / var_i_NaCa__km_Ca_i) * mp_extracellular_calcium_concentration_modifier->Calc(mParameters[4], var_chaste_interface__environment__time); // millimolar4 + const double var_model_parameters__Cm = 1; // microF_per_cm2 + const double var_model_parameters__F = 96485; // coulomb_per_mole + const double var_i_K1__g_K1 = 0.43033148291193518 * sqrt(mp_extracellular_potassium_concentration_modifier->Calc(mParameters[5], var_chaste_interface__environment__time)) * mp_membrane_inward_rectifier_potassium_current_conductance_modifier->Calc(mParameters[11], var_chaste_interface__environment__time); // milliS_per_microF + const double var_i_Kr__g_Kr = 0.43033148291193518 * sqrt(mp_extracellular_potassium_concentration_modifier->Calc(mParameters[5], var_chaste_interface__environment__time)) * mp_membrane_rapid_delayed_rectifier_potassium_current_conductance_modifier->Calc(mParameters[12], var_chaste_interface__environment__time); // milliS_per_microF + const double var_i_NaCa__dNaCa_2 = pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, 3) * mp_extracellular_calcium_concentration_modifier->Calc(mParameters[4], var_chaste_interface__environment__time) + 1.5 * pow(mp_extracellular_sodium_concentration_modifier->Calc(mParameters[6], var_chaste_interface__environment__time), 3) * var_chaste_interface__Ca_i__Ca_i + pow(mp_extracellular_sodium_concentration_modifier->Calc(mParameters[6], var_chaste_interface__environment__time), 3) * (1 + var_chaste_interface__intracellular_ion_concentrations__Na_i / var_i_NaCa__km_Na_i_1) * var_i_NaCa__km_Ca_i; // millimolar4 + const double var_model_parameters__R = 8314; // joule_per_kilomole_kelvin + const double var_model_parameters__T = 310; // kelvin + const double var_equilibrium_potentials__E_K = var_model_parameters__R * var_model_parameters__T * log(mp_extracellular_potassium_concentration_modifier->Calc(mParameters[5], var_chaste_interface__environment__time) / var_chaste_interface__intracellular_ion_concentrations__K_i) / var_model_parameters__F; // millivolt + const double var_equilibrium_potentials__E_Ks = var_model_parameters__R * var_model_parameters__T * log((var_equilibrium_potentials__r_NaK * mp_extracellular_sodium_concentration_modifier->Calc(mParameters[6], var_chaste_interface__environment__time) + mp_extracellular_potassium_concentration_modifier->Calc(mParameters[5], var_chaste_interface__environment__time)) / (var_equilibrium_potentials__r_NaK * var_chaste_interface__intracellular_ion_concentrations__Na_i + var_chaste_interface__intracellular_ion_concentrations__K_i)) / var_model_parameters__F; // millivolt + const double var_equilibrium_potentials__E_Na = var_model_parameters__R * var_model_parameters__T * log(mp_extracellular_sodium_concentration_modifier->Calc(mParameters[6], var_chaste_interface__environment__time) / var_chaste_interface__intracellular_ion_concentrations__Na_i) / var_model_parameters__F; // millivolt + const double var_i_K1_xK1_gate__alpha_xK1 = 1.02 / (1 + exp(-14.1227775 + 0.23849999999999999 * var_chaste_interface__membrane__V - 0.23849999999999999 * var_equilibrium_potentials__E_K)); // dimensionless + const double var_i_K1_xK1_gate__beta_xK1 = (0.49124000000000001 * exp(0.43983232 + 0.080320000000000003 * var_chaste_interface__membrane__V - 0.080320000000000003 * var_equilibrium_potentials__E_K) + exp(-36.698642499999998 + 0.061749999999999999 * var_chaste_interface__membrane__V - 0.061749999999999999 * var_equilibrium_potentials__E_K)) / (1 + exp(-2.4444678999999998 + 0.51429999999999998 * var_equilibrium_potentials__E_K - 0.51429999999999998 * var_chaste_interface__membrane__V)); // dimensionless + const double var_i_K1_xK1_gate__xK1 = var_i_K1_xK1_gate__alpha_xK1 / (var_i_K1_xK1_gate__alpha_xK1 + var_i_K1_xK1_gate__beta_xK1); // dimensionless + const double var_i_K1__i_K1 = mp_i_K1__i_K1_modifier->Calc((0.0040000000000000001 + var_i_K1__g_K1 * var_i_K1_xK1_gate__xK1) * (-var_equilibrium_potentials__E_K + var_chaste_interface__membrane__V), var_chaste_interface__environment__time); // microA_per_microF + const double var_i_K1__i_K1_converted = HeartConfig::Instance()->GetCapacitance() * var_i_K1__i_K1; // uA_per_cm2 + const double var_i_Kr__i_Kr = mp_i_Kr__i_Kr_modifier->Calc((-var_equilibrium_potentials__E_K + var_chaste_interface__membrane__V) * var_i_Kr__g_Kr * var_i_Kr__rr_infinity * var_chaste_interface__i_Kr_xr_gate__xr, var_chaste_interface__environment__time); // microA_per_microF + const double var_i_Kr__i_Kr_converted = HeartConfig::Instance()->GetCapacitance() * var_i_Kr__i_Kr; // uA_per_cm2 + const double var_i_Ks__i_Ks = mp_i_Ks__i_Ks_modifier->Calc((-var_equilibrium_potentials__E_Ks + var_chaste_interface__membrane__V) * var_i_Ks__g_Ks * var_chaste_interface__i_Ks_xs1_gate__xs1 * var_chaste_interface__i_Ks_xs2_gate__xs2, var_chaste_interface__environment__time); // microA_per_microF + const double var_i_Ks__i_Ks_converted = HeartConfig::Instance()->GetCapacitance() * var_i_Ks__i_Ks; // uA_per_cm2 + const double var_i_Na__i_Na = mp_i_Na__i_Na_modifier->Calc(pow(var_chaste_interface__i_Na_m_gate__m, 3) * (-var_equilibrium_potentials__E_Na + var_chaste_interface__membrane__V) * (0.20000000000000001 * var_chaste_interface__i_Na_j_gate__j + 0.80000000000000004 * var_chaste_interface__i_Na_h_gate__h) * mp_membrane_fast_sodium_current_conductance_modifier->Calc(mParameters[8], var_chaste_interface__environment__time), var_chaste_interface__environment__time); // microA_per_microF + const double var_i_Na__i_Na_converted = HeartConfig::Instance()->GetCapacitance() * var_i_Na__i_Na; // uA_per_cm2 + const double var_i_NaCa__i_NaCa = mp_i_NaCa__i_NaCa_modifier->Calc((-1.5 * pow(mp_extracellular_sodium_concentration_modifier->Calc(mParameters[6], var_chaste_interface__environment__time), 3) * var_chaste_interface__Ca_i__Ca_i * exp(-0.65000000000000002 * var_chaste_interface__membrane__V * var_model_parameters__F / (var_model_parameters__R * var_model_parameters__T)) + pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, 3) * var_i_NaCa__X_NaCa * mp_membrane_sodium_calcium_exchanger_current_conductance_modifier->Calc(mParameters[14], var_chaste_interface__environment__time) * mp_extracellular_calcium_concentration_modifier->Calc(mParameters[4], var_chaste_interface__environment__time) * exp(0.34999999999999998 * var_chaste_interface__membrane__V * var_model_parameters__F / (var_model_parameters__R * var_model_parameters__T))) / ((1 + var_i_NaCa__k_sat * exp(-0.65000000000000002 * var_chaste_interface__membrane__V * var_model_parameters__F / (var_model_parameters__R * var_model_parameters__T))) * (1 + 0.44444444444444442 * pow(var_i_NaCa__km_Ca_act, 2) / pow(var_chaste_interface__Ca_i__Ca_i, 2)) * (var_i_NaCa__dNaCa_1 + var_i_NaCa__dNaCa_2)), var_chaste_interface__environment__time); // microA_per_microF + const double var_i_NaCa__i_NaCa_converted = HeartConfig::Instance()->GetCapacitance() * var_i_NaCa__i_NaCa; // uA_per_cm2 + const double var_i_to_1__i_to_1 = mp_i_to_1__i_to_1_modifier->Calc((-var_equilibrium_potentials__E_K + var_chaste_interface__membrane__V) * (0.20000000000000001 * var_chaste_interface__i_to_1_i2_gate__i2 + 0.80000000000000004 * var_chaste_interface__i_to_1_i_gate__i) * mp_membrane_transient_outward_current_conductance_modifier->Calc(mParameters[15], var_chaste_interface__environment__time) * var_chaste_interface__i_to_1_a_gate__a, var_chaste_interface__environment__time); // microA_per_microF + const double var_i_to_1__i_to_1_converted = HeartConfig::Instance()->GetCapacitance() * var_i_to_1__i_to_1; // uA_per_cm2 + const double var_model_parameters__gamma_Cai = 1; // dimensionless + const double var_model_parameters__gamma_Cao = 0.34100000000000003; // dimensionless + const double var_model_parameters__z_Ca = 2; // dimensionless + const double var_i_Ca_L__i_Ca_L_max = pow(var_model_parameters__F, 2) * pow(var_model_parameters__z_Ca, 2) * (-15 + var_chaste_interface__membrane__V) * (-mp_extracellular_calcium_concentration_modifier->Calc(mParameters[4], var_chaste_interface__environment__time) * var_model_parameters__gamma_Cao + var_chaste_interface__Ca_r__Ca_r * var_model_parameters__gamma_Cai * exp((-15 + var_chaste_interface__membrane__V) * var_model_parameters__F * var_model_parameters__z_Ca / (var_model_parameters__R * var_model_parameters__T))) * var_i_Ca_L__p_Ca / ((-1 + exp((-15 + var_chaste_interface__membrane__V) * var_model_parameters__F * var_model_parameters__z_Ca / (var_model_parameters__R * var_model_parameters__T))) * var_model_parameters__Cm * var_model_parameters__R * var_model_parameters__T); // microA_per_microF + const double var_i_Ca_L__i_Ca_L = mp_i_Ca_L__i_Ca_L_modifier->Calc(mp_membrane_L_type_calcium_current_conductance_modifier->Calc(mParameters[7], var_chaste_interface__environment__time) * var_i_Ca_L__i_Ca_L_max * var_chaste_interface__i_Ca_L_d_gate__d * var_chaste_interface__i_Ca_L_f2_gate__f2 * var_chaste_interface__i_Ca_L_f_Ca2_gate__f_Ca2 * var_chaste_interface__i_Ca_L_f_Ca_gate__f_Ca * var_chaste_interface__i_Ca_L_f_gate__f, var_chaste_interface__environment__time); // microA_per_microF + const double var_i_Ca_L__i_Ca_L_converted = HeartConfig::Instance()->GetCapacitance() * var_i_Ca_L__i_Ca_L; // uA_per_cm2 + const double var_i_Ca_L_f_Ca2_gate__tau_f_Ca2 = mp_membrane_L_type_calcium_current_fCa2_gate_tau_modifier->Calc(125 + 300 / (1 + exp(-4.375 - 25 * var_i_Ca_L__i_Ca_L)), var_chaste_interface__environment__time); // millisecond + const double var_q_rel__vg = 1 / (1 + exp(2.6000000000000001 + 0.20000000000000001 * mp_membrane_L_type_calcium_current_conductance_modifier->Calc(mParameters[7], var_chaste_interface__environment__time) * var_i_Ca_L__i_Ca_L_max)); // dimensionless + const double var_q_rel__g_rel = mp_SR_release_current_max_modifier->Calc(mParameters[1], var_chaste_interface__environment__time) * var_q_rel__vg; // per_millisecond + const double var_q_rel__q_rel = mp_SR_release_current_modifier->Calc((-var_chaste_interface__Ca_r__Ca_r + var_chaste_interface__Ca_JSR__Ca_JSR) * var_q_rel__g_rel * var_chaste_interface__q_rel_ri_gate__ri * var_chaste_interface__q_rel_ro_gate__ro, var_chaste_interface__environment__time); // millimolar_per_millisecond + + std::vector dqs(16); + dqs[0] = var_q_rel__q_rel; + dqs[1] = var_i_Ca_L__i_Ca_L_converted; + dqs[2] = var_i_Ca_L_f2_gate__tau_f2; + dqs[3] = var_i_Ca_L_f_Ca2_gate__tau_f_Ca2; + dqs[4] = var_i_Ca_L_f_Ca_gate__tau_f_Ca; + dqs[5] = var_i_Ca_L_f_gate__tau_f; + dqs[6] = var_i_Na__i_Na_converted; + dqs[7] = var_i_Na_h_gate__tau_h; + dqs[8] = var_i_Na_j_gate__tau_j; + dqs[9] = var_i_K1__i_K1_converted; + dqs[10] = var_i_Kr__i_Kr_converted; + dqs[11] = var_i_Ks__i_Ks_converted; + dqs[12] = var_i_NaCa__i_NaCa_converted; + dqs[13] = var_membrane__i_stim_converted; + dqs[14] = var_i_to_1__i_to_1_converted; + dqs[15] = var_chaste_interface__environment__time; + return dqs; + } + +template<> +void OdeSystemInformation::Initialise(void) +{ + this->mSystemName = "aslanidi_2009"; + this->mFreeVariableName = "time"; + this->mFreeVariableUnits = "millisecond"; + + // rY[0]: + this->mVariableNames.push_back("membrane_voltage"); + this->mVariableUnits.push_back("millivolt"); + this->mInitialConditions.push_back(-83.43812846286808); + + // rY[1]: + this->mVariableNames.push_back("cytosolic_calcium_concentration"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(0.00022355433459434943); + + // rY[2]: + this->mVariableNames.push_back("membrane_fast_sodium_current_m_gate"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.002003390432234504); + + // rY[3]: + this->mVariableNames.push_back("membrane_fast_sodium_current_h_gate"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.9786390933308567); + + // rY[4]: + this->mVariableNames.push_back("membrane_fast_sodium_current_j_gate"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.09866447258167589); + + // rY[5]: + this->mVariableNames.push_back("i_Na_L_m_L_gate__m_L"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.002003390432234504); + + // rY[6]: + this->mVariableNames.push_back("i_Na_L_h_L_gate__h_L"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.8946968372659203); + + // rY[7]: + this->mVariableNames.push_back("membrane_L_type_calcium_current_d_gate"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(2.322223865147363e-06); + + // rY[8]: + this->mVariableNames.push_back("membrane_L_type_calcium_current_f_gate"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.9985607329462358); + + // rY[9]: + this->mVariableNames.push_back("membrane_L_type_calcium_current_f2_gate"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.8173435436674658); + + // rY[10]: + this->mVariableNames.push_back("membrane_L_type_calcium_current_fCa_gate"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.9610551285529658); + + // rY[11]: + this->mVariableNames.push_back("membrane_L_type_calcium_current_fCa2_gate"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.868690796671854); + + // rY[12]: + this->mVariableNames.push_back("i_Ca_T_b_gate__b"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.0002563937630984438); + + // rY[13]: + this->mVariableNames.push_back("i_Ca_T_g_gate__g"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.9720432601848331); + + // rY[14]: + this->mVariableNames.push_back("i_to_1_a_gate__a"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.0004238729429342389); + + // rY[15]: + this->mVariableNames.push_back("i_to_1_i_gate__i"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.9990935802459496); + + // rY[16]: + this->mVariableNames.push_back("i_to_1_i2_gate__i2"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.9777368439681764); + + // rY[17]: + this->mVariableNames.push_back("i_Kr_xr_gate__xr"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.07084939408222911); + + // rY[18]: + this->mVariableNames.push_back("i_Ks_xs1_gate__xs1"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.0011737654433043125); + + // rY[19]: + this->mVariableNames.push_back("i_Ks_xs2_gate__xs2"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.001179442867470093); + + // rY[20]: + this->mVariableNames.push_back("i_to_2_a_gate__a"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.0014909437525000811); + + // rY[21]: + this->mVariableNames.push_back("cytosolic_sodium_concentration"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(9.927155552932733); + + // rY[22]: + this->mVariableNames.push_back("intracellular_ion_concentrations__Cl_i"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(18.904682470140408); + + // rY[23]: + this->mVariableNames.push_back("cytosolic_potassium_concentration"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(141.9670801746057); + + // rY[24]: + this->mVariableNames.push_back("Ca_MK_act__Ca_MK_trap"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(8.789168284782809e-06); + + // rY[25]: + this->mVariableNames.push_back("Ca_NSR__Ca_NSR"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(1.2132524695849454); + + // rY[26]: + this->mVariableNames.push_back("JSR_calcium_concentration"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(1.1433050636518596); + + // rY[27]: + this->mVariableNames.push_back("dyadic_space_calcium_concentration"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(0.00022418117117903934); + + // rY[28]: + this->mVariableNames.push_back("q_rel_ri_gate__ri"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.7802870066567904); + + // rY[29]: + this->mVariableNames.push_back("q_rel_ro_gate__ro"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(1.2785734760674763e-09); + + // mParameters[0]: + this->mParameterNames.push_back("SR_leak_current_max"); + this->mParameterUnits.push_back("millimolar_per_millisecond"); + + // mParameters[1]: + this->mParameterNames.push_back("SR_release_current_max"); + this->mParameterUnits.push_back("per_millisecond"); + + // mParameters[2]: + this->mParameterNames.push_back("SR_uptake_current_max"); + this->mParameterUnits.push_back("millimolar_per_millisecond"); + + // mParameters[3]: + this->mParameterNames.push_back("concentration_clamp_onoff"); + this->mParameterUnits.push_back("dimensionless"); + + // mParameters[4]: + this->mParameterNames.push_back("extracellular_calcium_concentration"); + this->mParameterUnits.push_back("millimolar"); + + // mParameters[5]: + this->mParameterNames.push_back("extracellular_potassium_concentration"); + this->mParameterUnits.push_back("millimolar"); + + // mParameters[6]: + this->mParameterNames.push_back("extracellular_sodium_concentration"); + this->mParameterUnits.push_back("millimolar"); + + // mParameters[7]: + this->mParameterNames.push_back("membrane_L_type_calcium_current_conductance"); + this->mParameterUnits.push_back("dimensionless"); + + // mParameters[8]: + this->mParameterNames.push_back("membrane_fast_sodium_current_conductance"); + this->mParameterUnits.push_back("milliS_per_microF"); + + // mParameters[9]: + this->mParameterNames.push_back("membrane_fast_sodium_current_reduced_inactivation"); + this->mParameterUnits.push_back("dimensionless"); + + // mParameters[10]: + this->mParameterNames.push_back("membrane_fast_sodium_current_shift_inactivation"); + this->mParameterUnits.push_back("millivolt"); + + // mParameters[11]: + this->mParameterNames.push_back("membrane_inward_rectifier_potassium_current_conductance"); + this->mParameterUnits.push_back("milliS_per_microF"); + + // mParameters[12]: + this->mParameterNames.push_back("membrane_rapid_delayed_rectifier_potassium_current_conductance"); + this->mParameterUnits.push_back("milliS_per_microF"); + + // mParameters[13]: + this->mParameterNames.push_back("membrane_slow_delayed_rectifier_potassium_current_conductance"); + this->mParameterUnits.push_back("milliS_per_microF"); + + // mParameters[14]: + this->mParameterNames.push_back("membrane_sodium_calcium_exchanger_current_conductance"); + this->mParameterUnits.push_back("microA_per_microF"); + + // mParameters[15]: + this->mParameterNames.push_back("membrane_transient_outward_current_conductance"); + this->mParameterUnits.push_back("milliS_per_microF"); + + // Derived Quantity index [0]: + this->mDerivedQuantityNames.push_back("SR_release_current"); + this->mDerivedQuantityUnits.push_back("millimolar_per_millisecond"); + + // Derived Quantity index [1]: + this->mDerivedQuantityNames.push_back("membrane_L_type_calcium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [2]: + this->mDerivedQuantityNames.push_back("membrane_L_type_calcium_current_f2_gate_tau"); + this->mDerivedQuantityUnits.push_back("millisecond"); + + // Derived Quantity index [3]: + this->mDerivedQuantityNames.push_back("membrane_L_type_calcium_current_fCa2_gate_tau"); + this->mDerivedQuantityUnits.push_back("millisecond"); + + // Derived Quantity index [4]: + this->mDerivedQuantityNames.push_back("membrane_L_type_calcium_current_fCa_gate_tau"); + this->mDerivedQuantityUnits.push_back("millisecond"); + + // Derived Quantity index [5]: + this->mDerivedQuantityNames.push_back("membrane_L_type_calcium_current_f_gate_tau"); + this->mDerivedQuantityUnits.push_back("millisecond"); + + // Derived Quantity index [6]: + this->mDerivedQuantityNames.push_back("membrane_fast_sodium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [7]: + this->mDerivedQuantityNames.push_back("membrane_fast_sodium_current_h_gate_tau"); + this->mDerivedQuantityUnits.push_back("millisecond"); + + // Derived Quantity index [8]: + this->mDerivedQuantityNames.push_back("membrane_fast_sodium_current_j_gate_tau"); + this->mDerivedQuantityUnits.push_back("millisecond"); + + // Derived Quantity index [9]: + this->mDerivedQuantityNames.push_back("membrane_inward_rectifier_potassium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [10]: + this->mDerivedQuantityNames.push_back("membrane_rapid_delayed_rectifier_potassium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [11]: + this->mDerivedQuantityNames.push_back("membrane_slow_delayed_rectifier_potassium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [12]: + this->mDerivedQuantityNames.push_back("membrane_sodium_calcium_exchanger_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [13]: + this->mDerivedQuantityNames.push_back("membrane_stimulus_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [14]: + this->mDerivedQuantityNames.push_back("membrane_transient_outward_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [15]: + this->mDerivedQuantityNames.push_back("time"); + this->mDerivedQuantityUnits.push_back("millisecond"); + + this->mInitialised = true; +} + +// Serialization for Boost >= 1.36 +#include "SerializationExportWrapperForCpp.hpp" +CHASTE_CLASS_EXPORT(Cellaslanidi_Purkinje_model_2009FromCellML) + diff --git a/chaste_codegen/tests/numerical/baseline/Normal/non_dynamic_aslanidi_Purkinje_model_2009.hpp b/chaste_codegen/tests/numerical/baseline/Normal/non_dynamic_aslanidi_Purkinje_model_2009.hpp new file mode 100644 index 00000000..e1ee4ad7 --- /dev/null +++ b/chaste_codegen/tests/numerical/baseline/Normal/non_dynamic_aslanidi_Purkinje_model_2009.hpp @@ -0,0 +1,133 @@ +#ifndef CELLASLANIDI_PURKINJE_MODEL_2009FROMCELLML_HPP_ +#define CELLASLANIDI_PURKINJE_MODEL_2009FROMCELLML_HPP_ + +//! @file +//! +//! This source file was generated from CellML by chaste_codegen version (version omitted as unimportant) +//! +//! Model: aslanidi_2009 +//! +//! Processed by chaste_codegen: https://github.com/ModellingWebLab/chaste-codegen +//! (translator: chaste_codegen, model type: Normal) +//! on (date omitted as unimportant) +//! +//! + +#include "ChasteSerialization.hpp" +#include +#include "AbstractCardiacCellWithModifiers.hpp" +#include "AbstractModifier.hpp" +#include "AbstractStimulusFunction.hpp" +#include "AbstractCardiacCell.hpp" + +class Cellaslanidi_Purkinje_model_2009FromCellML : public AbstractCardiacCellWithModifiers +{ + friend class boost::serialization::access; + template + void serialize(Archive & archive, const unsigned int version) + { + archive & boost::serialization::base_object >(*this); + + // Despite this class having modifier member variables, they are all added to the + // abstract class by the constructor, and archived via that, instead of here. + } + + // + // Settable parameters and readable variables + // + boost::shared_ptr mp_JSR_calcium_concentration_modifier; + boost::shared_ptr mp_SR_leak_current_max_modifier; + boost::shared_ptr mp_SR_release_current_modifier; + boost::shared_ptr mp_SR_release_current_max_modifier; + boost::shared_ptr mp_SR_uptake_current_max_modifier; + boost::shared_ptr mp_concentration_clamp_onoff_modifier; + boost::shared_ptr mp_cytosolic_calcium_concentration_modifier; + boost::shared_ptr mp_cytosolic_potassium_concentration_modifier; + boost::shared_ptr mp_cytosolic_sodium_concentration_modifier; + boost::shared_ptr mp_dyadic_space_calcium_concentration_modifier; + boost::shared_ptr mp_extracellular_calcium_concentration_modifier; + boost::shared_ptr mp_extracellular_potassium_concentration_modifier; + boost::shared_ptr mp_extracellular_sodium_concentration_modifier; + boost::shared_ptr mp_i_Ca_L__i_Ca_L_modifier; + boost::shared_ptr mp_membrane_L_type_calcium_current_conductance_modifier; + boost::shared_ptr mp_membrane_L_type_calcium_current_d_gate_modifier; + boost::shared_ptr mp_membrane_L_type_calcium_current_f2_gate_modifier; + boost::shared_ptr mp_membrane_L_type_calcium_current_f2_gate_tau_modifier; + boost::shared_ptr mp_membrane_L_type_calcium_current_fCa2_gate_modifier; + boost::shared_ptr mp_membrane_L_type_calcium_current_fCa2_gate_tau_modifier; + boost::shared_ptr mp_membrane_L_type_calcium_current_fCa_gate_modifier; + boost::shared_ptr mp_membrane_L_type_calcium_current_fCa_gate_tau_modifier; + boost::shared_ptr mp_membrane_L_type_calcium_current_f_gate_modifier; + boost::shared_ptr mp_membrane_L_type_calcium_current_f_gate_tau_modifier; + boost::shared_ptr mp_i_Na__i_Na_modifier; + boost::shared_ptr mp_membrane_fast_sodium_current_conductance_modifier; + boost::shared_ptr mp_membrane_fast_sodium_current_h_gate_modifier; + boost::shared_ptr mp_membrane_fast_sodium_current_h_gate_tau_modifier; + boost::shared_ptr mp_membrane_fast_sodium_current_j_gate_modifier; + boost::shared_ptr mp_membrane_fast_sodium_current_j_gate_tau_modifier; + boost::shared_ptr mp_membrane_fast_sodium_current_m_gate_modifier; + boost::shared_ptr mp_membrane_fast_sodium_current_reduced_inactivation_modifier; + boost::shared_ptr mp_membrane_fast_sodium_current_shift_inactivation_modifier; + boost::shared_ptr mp_i_K1__i_K1_modifier; + boost::shared_ptr mp_membrane_inward_rectifier_potassium_current_conductance_modifier; + boost::shared_ptr mp_i_Kr__i_Kr_modifier; + boost::shared_ptr mp_membrane_rapid_delayed_rectifier_potassium_current_conductance_modifier; + boost::shared_ptr mp_i_Ks__i_Ks_modifier; + boost::shared_ptr mp_membrane_slow_delayed_rectifier_potassium_current_conductance_modifier; + boost::shared_ptr mp_i_NaCa__i_NaCa_modifier; + boost::shared_ptr mp_membrane_sodium_calcium_exchanger_current_conductance_modifier; + boost::shared_ptr mp_i_to_1__i_to_1_modifier; + boost::shared_ptr mp_membrane_transient_outward_current_conductance_modifier; + boost::shared_ptr mp_membrane_voltage_modifier; + + +private: +const bool is_concentration[30] = {false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, false, true, false, false, true, true, false, false}; +const bool is_probability[30] = {false, false, true, true, true, false, false, true, true, true, true, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false}; +public: + + boost::shared_ptr UseCellMLDefaultStimulus(); + double GetIntracellularCalciumConcentration(); + Cellaslanidi_Purkinje_model_2009FromCellML(boost::shared_ptr pSolver, boost::shared_ptr pIntracellularStimulus); + ~Cellaslanidi_Purkinje_model_2009FromCellML(); + void VerifyStateVariables(); + double GetIIonic(const std::vector* pStateVariables=NULL); + void EvaluateYDerivatives(double var_chaste_interface__environment__time, const std::vector& rY, std::vector& rDY); + + std::vector ComputeDerivedQuantities(double var_chaste_interface__environment__time, const std::vector & rY); +}; + +// Needs to be included last +#include "SerializationExportWrapper.hpp" +CHASTE_CLASS_EXPORT(Cellaslanidi_Purkinje_model_2009FromCellML) + +namespace boost +{ + namespace serialization + { + template + inline void save_construct_data( + Archive & ar, const Cellaslanidi_Purkinje_model_2009FromCellML * t, const unsigned int fileVersion) + { + const boost::shared_ptr p_solver = t->GetSolver(); + const boost::shared_ptr p_stimulus = t->GetStimulusFunction(); + ar << p_solver; + ar << p_stimulus; + } + + template + inline void load_construct_data( + Archive & ar, Cellaslanidi_Purkinje_model_2009FromCellML * t, const unsigned int fileVersion) + { + boost::shared_ptr p_solver; + boost::shared_ptr p_stimulus; + ar >> p_solver; + ar >> p_stimulus; + ::new(t)Cellaslanidi_Purkinje_model_2009FromCellML(p_solver, p_stimulus); + } + + } + +} + +#endif // CELLASLANIDI_PURKINJE_MODEL_2009FROMCELLML_HPP_ \ No newline at end of file diff --git a/chaste_codegen/tests/numerical/baseline/Normal/output_class.c b/chaste_codegen/tests/numerical/baseline/Normal/output_class.c new file mode 100644 index 00000000..18c29316 --- /dev/null +++ b/chaste_codegen/tests/numerical/baseline/Normal/output_class.c @@ -0,0 +1,828 @@ +//! @file +//! +//! This source file was generated from CellML by chaste_codegen version (version omitted as unimportant) +//! +//! Model: noble_model_1998 +//! +//! Processed by chaste_codegen: https://github.com/ModellingWebLab/chaste-codegen +//! (translator: chaste_codegen, model type: Normal) +//! on (date omitted as unimportant) +//! +//! + +#include "output_class.h" +#include +#include +#include +#include +#include "Exception.hpp" +#include "OdeSystemInformation.hpp" +#include "RegularStimulus.hpp" +#include "HeartConfig.hpp" +#include "IsNan.hpp" +#include "MathsCustomFunctions.hpp" + +#include "ModelFactory.hpp" + +AbstractCardiacCell* Chaste_CG::CreateMethod(boost::shared_ptr p_solver, boost::shared_ptr p_stimulus) { + return new Chaste_CG(p_solver, p_stimulus); +} + +bool Chaste_CG::registered = ModelFactory::Register("output_class", "Normal", (ModelFactory::TCreateMethod)Chaste_CG::CreateMethod); + + + + boost::shared_ptr Chaste_CG::UseCellMLDefaultStimulus() + { + // Use the default stimulus specified by CellML metadata + const double var_chaste_interface__membrane__stim_amplitude_converted = -0.0030000000000000001 * HeartConfig::Instance()->GetCapacitance() / mParameters[10]; // uA_per_cm2 + const double var_chaste_interface__membrane__stim_duration_converted = 3; // millisecond + const double var_chaste_interface__membrane__stim_period_converted = 1000; // millisecond + const double var_chaste_interface__membrane__stim_start_converted = 100; // millisecond + boost::shared_ptr p_cellml_stim(new RegularStimulus( + -fabs(var_chaste_interface__membrane__stim_amplitude_converted), + var_chaste_interface__membrane__stim_duration_converted, + var_chaste_interface__membrane__stim_period_converted, + var_chaste_interface__membrane__stim_start_converted + )); + mpIntracellularStimulus = p_cellml_stim; + return p_cellml_stim; + } + double Chaste_CG::GetIntracellularCalciumConcentration() + { + return mStateVariables[1]; + } + Chaste_CG::Chaste_CG(boost::shared_ptr pSolver, boost::shared_ptr pIntracellularStimulus) + : AbstractCardiacCell( + pSolver, + 22, + 0, + pIntracellularStimulus) + { + // Time units: millisecond + // + this->mpSystemInfo = OdeSystemInformation::Instance(); + Init(); + + // We have a default stimulus specified in the CellML file metadata + this->mHasDefaultStimulusFromCellML = true; + + this->mParameters[0] = 0.050000000000000003; // (var_calcium_release__K_leak_rate) [per_second] + this->mParameters[1] = 250; // (var_calcium_release__K_m_rel) [per_second] + this->mParameters[2] = 0.00050000000000000001; // (var_calcium_release__K_m_Ca_cyt) [millimolar] + this->mParameters[3] = 0.01; // (var_calcium_release__K_m_Ca_ds) [millimolar] + this->mParameters[4] = 1; // (var_sarcoplasmic_reticulum_calcium_pump__uptake_factor) [dimensionless] + this->mParameters[5] = 1; // (var_intracellular_sodium_concentration__conc_clamp) [dimensionless] + this->mParameters[6] = 2; // (var_extracellular_calcium_concentration__Ca_o) [millimolar] + this->mParameters[7] = 4; // (var_extracellular_potassium_concentration__K_o) [millimolar] + this->mParameters[8] = 140; // (var_extracellular_sodium_concentration__Na_o) [millimolar] + this->mParameters[9] = 0.10000000000000001; // (var_L_type_Ca_channel__P_Ca_L) [nanoA_per_millimolar] + this->mParameters[10] = 9.5000000000000005e-5; // (var_membrane__Cm) [microF] + this->mParameters[11] = 2.5; // (var_fast_sodium_current__g_Na) [microS] + this->mParameters[12] = 0; // (var_fast_sodium_current__perc_reduced_inact_for_IpNa) [dimensionless] + this->mParameters[13] = 0; // (var_fast_sodium_current__shift_INa_inact) [millivolt] + this->mParameters[14] = 0.5; // (var_time_independent_potassium_current__g_K1) [microS] + this->mParameters[15] = 0.0020999999999999999; // (var_rapid_delayed_rectifier_potassium_current__g_Kr1) [microS] + this->mParameters[16] = 0.0012999999999999999; // (var_rapid_delayed_rectifier_potassium_current__g_Kr2) [microS] + this->mParameters[17] = 0.0025999999999999999; // (var_slow_delayed_rectifier_potassium_current__g_Ks) [microS] + this->mParameters[18] = 0.00050000000000000001; // (var_sodium_calcium_exchanger__k_NaCa) [nanoA] + this->mParameters[19] = 0.0050000000000000001; // (var_transient_outward_current__g_to) [microS] + } + + Chaste_CG::~Chaste_CG() + { + } + + + void Chaste_CG::VerifyStateVariables() + { + std::vector& rY = rGetStateVariables();double var_chaste_interface__intracellular_calcium_concentration__Ca_ds = rY[17]; + // Units: millimolar; Initial value: 1.88e-05 + + if (var_chaste_interface__intracellular_calcium_concentration__Ca_ds < 0.0) + { + EXCEPTION(DumpState("State variable dyadic_space_calcium_concentration has gone out of range. Check numerical parameters, for example time and space stepsizes, and/or solver tolerances")); + } + + std::string error_message = ""; + + for (unsigned i=0; i < 22; i++) + { + if(std::isnan(rY[i])) + { + error_message += "State variable " + this->rGetStateVariableNames()[i] + " is not a number\n"; + } + if(std::isinf(rY[i])) + { + error_message += "State variable " + this->rGetStateVariableNames()[i] + " has become INFINITE\n"; + } + if(this->is_concentration[i] && rY[i] < 0) + { + error_message += "Concentration " + this->rGetStateVariableNames()[i] + " below 0\n"; + } + if(this->is_probability[i] && rY[i] < 0) + { + error_message += "Probability " + this->rGetStateVariableNames()[i] + " below 0\n"; + } + if(this->is_probability[i] && rY[i] > 1) + { + error_message += "Probability " + this->rGetStateVariableNames()[i] + " above 1\n"; + } + } + if (error_message != ""){ + EXCEPTION(DumpState(error_message)); + } + } + + double Chaste_CG::GetIIonic(const std::vector* pStateVariables) + { + // For state variable interpolation (SVI) we read in interpolated state variables, + // otherwise for ionic current interpolation (ICI) we use the state variables of this model (node). + if (!pStateVariables) pStateVariables = &rGetStateVariables(); + const std::vector& rY = *pStateVariables; + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -92.849333 + double var_chaste_interface__intracellular_calcium_concentration__Ca_i = rY[1]; + // Units: millimolar; Initial value: 1.4e-05 + double var_chaste_interface__rapid_delayed_rectifier_potassium_current_xr1_gate__xr1 = rY[2]; + // Units: dimensionless; Initial value: 1.03e-05 + double var_chaste_interface__rapid_delayed_rectifier_potassium_current_xr2_gate__xr2 = rY[3]; + // Units: dimensionless; Initial value: 2e-07 + double var_chaste_interface__slow_delayed_rectifier_potassium_current_xs_gate__xs = rY[4]; + // Units: dimensionless; Initial value: 0.001302 + double var_chaste_interface__fast_sodium_current_m_gate__m = rY[5]; + // Units: dimensionless; Initial value: 0.0016203 + double var_chaste_interface__fast_sodium_current_h_gate__h = rY[6]; + // Units: dimensionless; Initial value: 0.9944036 + double var_chaste_interface__L_type_Ca_channel_d_gate__d = rY[7]; + // Units: dimensionless; Initial value: 0.0 + double var_chaste_interface__L_type_Ca_channel_f_gate__f = rY[8]; + // Units: dimensionless; Initial value: 1.0 + double var_chaste_interface__L_type_Ca_channel_f2_gate__f2 = rY[9]; + // Units: dimensionless; Initial value: 0.9349197 + double var_chaste_interface__L_type_Ca_channel_f2ds_gate__f2ds = rY[10]; + // Units: dimensionless; Initial value: 0.9651958 + double var_chaste_interface__transient_outward_current_s_gate__s = rY[11]; + // Units: dimensionless; Initial value: 0.9948645 + double var_chaste_interface__transient_outward_current_r_gate__r = rY[12]; + // Units: dimensionless; Initial value: 0.0 + double var_chaste_interface__intracellular_sodium_concentration__Na_i = rY[15]; + // Units: millimolar; Initial value: 7.3321223 + double var_chaste_interface__intracellular_potassium_concentration__K_i = rY[16]; + // Units: millimolar; Initial value: 136.5644281 + double var_chaste_interface__intracellular_calcium_concentration__Ca_ds = rY[17]; + // Units: millimolar; Initial value: 1.88e-05 + + const double var_L_type_Ca_channel__FrICa = 1; // dimensionless + const double var_L_type_Ca_channel__P_CaK = 0.002; // dimensionless + const double var_L_type_Ca_channel__P_CaNa = 0.01; // dimensionless + const double var_calcium_background_current__g_bca = 0.00025000000000000001; // microS + const double var_membrane__F = 96485.341499999995; // coulomb_per_mole + const double var_membrane__R = 8314.4719999999998; // joule_per_kilomole_kelvin + const double var_membrane__T = 310; // kelvin + const double var_L_type_Ca_channel__i_Ca_L_Ca_cyt = 4 * (1 - var_L_type_Ca_channel__FrICa) * (-50 + var_chaste_interface__membrane__V) * (var_chaste_interface__intracellular_calcium_concentration__Ca_i * exp(100 * var_membrane__F / (var_membrane__R * var_membrane__T)) - mParameters[6] * exp(2 * (50 - var_chaste_interface__membrane__V) * var_membrane__F / (var_membrane__R * var_membrane__T))) * mParameters[9] * var_chaste_interface__L_type_Ca_channel_d_gate__d * var_chaste_interface__L_type_Ca_channel_f2_gate__f2 * var_chaste_interface__L_type_Ca_channel_f_gate__f * var_membrane__F / ((1 - exp(2 * (50 - var_chaste_interface__membrane__V) * var_membrane__F / (var_membrane__R * var_membrane__T))) * var_membrane__R * var_membrane__T); // nanoA + const double var_L_type_Ca_channel__i_Ca_L_Ca_ds = 4 * (-50 + var_chaste_interface__membrane__V) * (var_chaste_interface__intracellular_calcium_concentration__Ca_i * exp(100 * var_membrane__F / (var_membrane__R * var_membrane__T)) - mParameters[6] * exp(2 * (50 - var_chaste_interface__membrane__V) * var_membrane__F / (var_membrane__R * var_membrane__T))) * var_L_type_Ca_channel__FrICa * mParameters[9] * var_chaste_interface__L_type_Ca_channel_d_gate__d * var_chaste_interface__L_type_Ca_channel_f2ds_gate__f2ds * var_chaste_interface__L_type_Ca_channel_f_gate__f * var_membrane__F / ((1 - exp(2 * (50 - var_chaste_interface__membrane__V) * var_membrane__F / (var_membrane__R * var_membrane__T))) * var_membrane__R * var_membrane__T); // nanoA + const double var_L_type_Ca_channel__i_Ca_L_K_cyt = (1 - var_L_type_Ca_channel__FrICa) * (-50 + var_chaste_interface__membrane__V) * (var_chaste_interface__intracellular_potassium_concentration__K_i * exp(50 * var_membrane__F / (var_membrane__R * var_membrane__T)) - mParameters[7] * exp((50 - var_chaste_interface__membrane__V) * var_membrane__F / (var_membrane__R * var_membrane__T))) * var_L_type_Ca_channel__P_CaK * mParameters[9] * var_chaste_interface__L_type_Ca_channel_d_gate__d * var_chaste_interface__L_type_Ca_channel_f2_gate__f2 * var_chaste_interface__L_type_Ca_channel_f_gate__f * var_membrane__F / ((1 - exp((50 - var_chaste_interface__membrane__V) * var_membrane__F / (var_membrane__R * var_membrane__T))) * var_membrane__R * var_membrane__T); // nanoA + const double var_L_type_Ca_channel__i_Ca_L_K_ds = (-50 + var_chaste_interface__membrane__V) * (var_chaste_interface__intracellular_potassium_concentration__K_i * exp(50 * var_membrane__F / (var_membrane__R * var_membrane__T)) - mParameters[7] * exp((50 - var_chaste_interface__membrane__V) * var_membrane__F / (var_membrane__R * var_membrane__T))) * var_L_type_Ca_channel__FrICa * var_L_type_Ca_channel__P_CaK * mParameters[9] * var_chaste_interface__L_type_Ca_channel_d_gate__d * var_chaste_interface__L_type_Ca_channel_f2ds_gate__f2ds * var_chaste_interface__L_type_Ca_channel_f_gate__f * var_membrane__F / ((1 - exp((50 - var_chaste_interface__membrane__V) * var_membrane__F / (var_membrane__R * var_membrane__T))) * var_membrane__R * var_membrane__T); // nanoA + const double var_L_type_Ca_channel__i_Ca_L_Na_cyt = (1 - var_L_type_Ca_channel__FrICa) * (-50 + var_chaste_interface__membrane__V) * (var_chaste_interface__intracellular_sodium_concentration__Na_i * exp(50 * var_membrane__F / (var_membrane__R * var_membrane__T)) - mParameters[8] * exp((50 - var_chaste_interface__membrane__V) * var_membrane__F / (var_membrane__R * var_membrane__T))) * var_L_type_Ca_channel__P_CaNa * mParameters[9] * var_chaste_interface__L_type_Ca_channel_d_gate__d * var_chaste_interface__L_type_Ca_channel_f2_gate__f2 * var_chaste_interface__L_type_Ca_channel_f_gate__f * var_membrane__F / ((1 - exp((50 - var_chaste_interface__membrane__V) * var_membrane__F / (var_membrane__R * var_membrane__T))) * var_membrane__R * var_membrane__T); // nanoA + const double var_L_type_Ca_channel__i_Ca_L_Na_ds = (-50 + var_chaste_interface__membrane__V) * (var_chaste_interface__intracellular_sodium_concentration__Na_i * exp(50 * var_membrane__F / (var_membrane__R * var_membrane__T)) - mParameters[8] * exp((50 - var_chaste_interface__membrane__V) * var_membrane__F / (var_membrane__R * var_membrane__T))) * var_L_type_Ca_channel__FrICa * var_L_type_Ca_channel__P_CaNa * mParameters[9] * var_chaste_interface__L_type_Ca_channel_d_gate__d * var_chaste_interface__L_type_Ca_channel_f2ds_gate__f2ds * var_chaste_interface__L_type_Ca_channel_f_gate__f * var_membrane__F / ((1 - exp((50 - var_chaste_interface__membrane__V) * var_membrane__F / (var_membrane__R * var_membrane__T))) * var_membrane__R * var_membrane__T); // nanoA + const double var_persistent_sodium_current__g_pna = 0.0040000000000000001; // microS + const double var_reversal_potentials__E_Ca = 0.5 * var_membrane__R * var_membrane__T * log(mParameters[6] / var_chaste_interface__intracellular_calcium_concentration__Ca_i) / var_membrane__F; // millivolt + const double var_calcium_background_current__i_b_Ca = (-var_reversal_potentials__E_Ca + var_chaste_interface__membrane__V) * var_calcium_background_current__g_bca; // nanoA + const double var_reversal_potentials__E_K = var_membrane__R * var_membrane__T * log(mParameters[7] / var_chaste_interface__intracellular_potassium_concentration__K_i) / var_membrane__F; // millivolt + const double var_rapid_delayed_rectifier_potassium_current__i_Kr = (-var_reversal_potentials__E_K + var_chaste_interface__membrane__V) * (mParameters[15] * var_chaste_interface__rapid_delayed_rectifier_potassium_current_xr1_gate__xr1 + mParameters[16] * var_chaste_interface__rapid_delayed_rectifier_potassium_current_xr2_gate__xr2) / (1 + exp(0.4017857142857143 + 0.044642857142857144 * var_chaste_interface__membrane__V)); // nanoA + const double var_rapid_delayed_rectifier_potassium_current__i_Kr_converted = 0.001 * HeartConfig::Instance()->GetCapacitance() * var_rapid_delayed_rectifier_potassium_current__i_Kr / mParameters[10]; // uA_per_cm2 + const double var_reversal_potentials__E_Na = var_membrane__R * var_membrane__T * log(mParameters[8] / var_chaste_interface__intracellular_sodium_concentration__Na_i) / var_membrane__F; // millivolt + const double var_persistent_sodium_current__i_p_Na = (-var_reversal_potentials__E_Na + var_chaste_interface__membrane__V) * var_persistent_sodium_current__g_pna / (1 + exp(-6.5 - 0.125 * var_chaste_interface__membrane__V)); // nanoA + const double var_reversal_potentials__E_mh = var_membrane__R * var_membrane__T * log((mParameters[8] + 0.12 * mParameters[7]) / (var_chaste_interface__intracellular_sodium_concentration__Na_i + 0.12 * var_chaste_interface__intracellular_potassium_concentration__K_i)) / var_membrane__F; // millivolt + const double var_fast_sodium_current__i_Na = pow(var_chaste_interface__fast_sodium_current_m_gate__m, 3) * (-var_reversal_potentials__E_mh + var_chaste_interface__membrane__V) * mParameters[11] * var_chaste_interface__fast_sodium_current_h_gate__h; // nanoA + const double var_fast_sodium_current__i_Na_converted = 0.001 * HeartConfig::Instance()->GetCapacitance() * var_fast_sodium_current__i_Na / mParameters[10]; // uA_per_cm2 + const double var_reversal_potentials__P_kna = 0.029999999999999999; // dimensionless + const double var_reversal_potentials__E_Ks = var_membrane__R * var_membrane__T * log((mParameters[8] * var_reversal_potentials__P_kna + mParameters[7]) / (var_chaste_interface__intracellular_sodium_concentration__Na_i * var_reversal_potentials__P_kna + var_chaste_interface__intracellular_potassium_concentration__K_i)) / var_membrane__F; // millivolt + const double var_slow_delayed_rectifier_potassium_current__i_Ks = pow(var_chaste_interface__slow_delayed_rectifier_potassium_current_xs_gate__xs, 2) * (-var_reversal_potentials__E_Ks + var_chaste_interface__membrane__V) * mParameters[17]; // nanoA + const double var_slow_delayed_rectifier_potassium_current__i_Ks_converted = 0.001 * HeartConfig::Instance()->GetCapacitance() * var_slow_delayed_rectifier_potassium_current__i_Ks / mParameters[10]; // uA_per_cm2 + const double var_sodium_background_current__g_bna = 0.00059999999999999995; // microS + const double var_sodium_background_current__i_b_Na = (-var_reversal_potentials__E_Na + var_chaste_interface__membrane__V) * var_sodium_background_current__g_bna; // nanoA + const double var_sodium_calcium_exchanger__FRiNaCa = 0.001; // dimensionless + const double var_sodium_calcium_exchanger__d_NaCa = 0; // dimensionless + const double var_sodium_calcium_exchanger__gamma = 0.5; // dimensionless + const double var_sodium_calcium_exchanger__n_NaCa = 3; // dimensionless + const double var_sodium_calcium_exchanger__i_NaCa_cyt = (1 - var_sodium_calcium_exchanger__FRiNaCa) * (pow(var_chaste_interface__intracellular_sodium_concentration__Na_i, var_sodium_calcium_exchanger__n_NaCa) * mParameters[6] * exp((-2 + var_sodium_calcium_exchanger__n_NaCa) * var_membrane__F * var_chaste_interface__membrane__V * var_sodium_calcium_exchanger__gamma / (var_membrane__R * var_membrane__T)) - pow(mParameters[8], var_sodium_calcium_exchanger__n_NaCa) * var_chaste_interface__intracellular_calcium_concentration__Ca_i * exp((-1 + var_sodium_calcium_exchanger__gamma) * (-2 + var_sodium_calcium_exchanger__n_NaCa) * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * mParameters[18] / ((1 + 144.92753623188406 * var_chaste_interface__intracellular_calcium_concentration__Ca_i) * (1 + (pow(mParameters[8], var_sodium_calcium_exchanger__n_NaCa) * var_chaste_interface__intracellular_calcium_concentration__Ca_i + pow(var_chaste_interface__intracellular_sodium_concentration__Na_i, var_sodium_calcium_exchanger__n_NaCa) * mParameters[6]) * var_sodium_calcium_exchanger__d_NaCa)); // nanoA + const double var_sodium_calcium_exchanger__i_NaCa_ds = (pow(var_chaste_interface__intracellular_sodium_concentration__Na_i, var_sodium_calcium_exchanger__n_NaCa) * mParameters[6] * exp((-2 + var_sodium_calcium_exchanger__n_NaCa) * var_membrane__F * var_chaste_interface__membrane__V * var_sodium_calcium_exchanger__gamma / (var_membrane__R * var_membrane__T)) - pow(mParameters[8], var_sodium_calcium_exchanger__n_NaCa) * var_chaste_interface__intracellular_calcium_concentration__Ca_ds * exp((-1 + var_sodium_calcium_exchanger__gamma) * (-2 + var_sodium_calcium_exchanger__n_NaCa) * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * var_sodium_calcium_exchanger__FRiNaCa * mParameters[18] / ((1 + 144.92753623188406 * var_chaste_interface__intracellular_calcium_concentration__Ca_ds) * (1 + (pow(mParameters[8], var_sodium_calcium_exchanger__n_NaCa) * var_chaste_interface__intracellular_calcium_concentration__Ca_ds + pow(var_chaste_interface__intracellular_sodium_concentration__Na_i, var_sodium_calcium_exchanger__n_NaCa) * mParameters[6]) * var_sodium_calcium_exchanger__d_NaCa)); // nanoA + const double var_sodium_potassium_pump__K_mK = 1; // millimolar + const double var_sodium_potassium_pump__K_mNa = 40; // millimolar + const double var_sodium_potassium_pump__i_NaK_max = 0.69999999999999996; // nanoA + const double var_sodium_potassium_pump__i_NaK = mParameters[7] * var_chaste_interface__intracellular_sodium_concentration__Na_i * var_sodium_potassium_pump__i_NaK_max / ((mParameters[7] + var_sodium_potassium_pump__K_mK) * (var_chaste_interface__intracellular_sodium_concentration__Na_i + var_sodium_potassium_pump__K_mNa)); // nanoA + const double var_time_independent_potassium_current__K_mk1 = 10; // millimolar + const double var_time_independent_potassium_current__i_K1 = (-var_reversal_potentials__E_K + var_chaste_interface__membrane__V) * mParameters[7] * mParameters[14] / ((1 + exp(1.25 * (-10 - var_reversal_potentials__E_K + var_chaste_interface__membrane__V) * var_membrane__F / (var_membrane__R * var_membrane__T))) * (mParameters[7] + var_time_independent_potassium_current__K_mk1)); // nanoA + const double var_time_independent_potassium_current__i_K1_converted = 0.001 * HeartConfig::Instance()->GetCapacitance() * var_time_independent_potassium_current__i_K1 / mParameters[10]; // uA_per_cm2 + const double var_transient_outward_current__g_tos = 0; // dimensionless + const double var_transient_outward_current__i_to = (-var_reversal_potentials__E_K + var_chaste_interface__membrane__V) * ((1 - var_transient_outward_current__g_tos) * var_chaste_interface__transient_outward_current_s_gate__s + var_transient_outward_current__g_tos) * mParameters[19] * var_chaste_interface__transient_outward_current_r_gate__r; // nanoA + const double var_transient_outward_current__i_to_converted = 0.001 * HeartConfig::Instance()->GetCapacitance() * var_transient_outward_current__i_to / mParameters[10]; // uA_per_cm2 + const double var_chaste_interface__i_ionic = ((var_fast_sodium_current__i_Na_converted + var_rapid_delayed_rectifier_potassium_current__i_Kr_converted + var_slow_delayed_rectifier_potassium_current__i_Ks_converted + var_time_independent_potassium_current__i_K1_converted + var_transient_outward_current__i_to_converted) * mParameters[10] + 0.001 * HeartConfig::Instance()->GetCapacitance() * var_L_type_Ca_channel__i_Ca_L_Ca_cyt + 0.001 * HeartConfig::Instance()->GetCapacitance() * var_L_type_Ca_channel__i_Ca_L_Ca_ds + 0.001 * HeartConfig::Instance()->GetCapacitance() * var_L_type_Ca_channel__i_Ca_L_K_cyt + 0.001 * HeartConfig::Instance()->GetCapacitance() * var_L_type_Ca_channel__i_Ca_L_K_ds + 0.001 * HeartConfig::Instance()->GetCapacitance() * var_L_type_Ca_channel__i_Ca_L_Na_cyt + 0.001 * HeartConfig::Instance()->GetCapacitance() * var_L_type_Ca_channel__i_Ca_L_Na_ds + 0.001 * HeartConfig::Instance()->GetCapacitance() * var_calcium_background_current__i_b_Ca + 0.001 * HeartConfig::Instance()->GetCapacitance() * var_persistent_sodium_current__i_p_Na + 0.001 * HeartConfig::Instance()->GetCapacitance() * var_sodium_background_current__i_b_Na + 0.001 * HeartConfig::Instance()->GetCapacitance() * var_sodium_calcium_exchanger__i_NaCa_cyt + 0.001 * HeartConfig::Instance()->GetCapacitance() * var_sodium_calcium_exchanger__i_NaCa_ds + 0.001 * HeartConfig::Instance()->GetCapacitance() * var_sodium_potassium_pump__i_NaK) / mParameters[10]; // uA_per_cm2 + + const double i_ionic = var_chaste_interface__i_ionic; + EXCEPT_IF_NOT(!std::isnan(i_ionic)); + return i_ionic; + } + + void Chaste_CG::EvaluateYDerivatives(double var_chaste_interface__environment__time_converted, const std::vector& rY, std::vector& rDY) + { + // Inputs: + // Time units: millisecond + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -92.849333 + double var_chaste_interface__intracellular_calcium_concentration__Ca_i = rY[1]; + // Units: millimolar; Initial value: 1.4e-05 + double var_chaste_interface__rapid_delayed_rectifier_potassium_current_xr1_gate__xr1 = rY[2]; + // Units: dimensionless; Initial value: 1.03e-05 + double var_chaste_interface__rapid_delayed_rectifier_potassium_current_xr2_gate__xr2 = rY[3]; + // Units: dimensionless; Initial value: 2e-07 + double var_chaste_interface__slow_delayed_rectifier_potassium_current_xs_gate__xs = rY[4]; + // Units: dimensionless; Initial value: 0.001302 + double var_chaste_interface__fast_sodium_current_m_gate__m = rY[5]; + // Units: dimensionless; Initial value: 0.0016203 + double var_chaste_interface__fast_sodium_current_h_gate__h = rY[6]; + // Units: dimensionless; Initial value: 0.9944036 + double var_chaste_interface__L_type_Ca_channel_d_gate__d = rY[7]; + // Units: dimensionless; Initial value: 0.0 + double var_chaste_interface__L_type_Ca_channel_f_gate__f = rY[8]; + // Units: dimensionless; Initial value: 1.0 + double var_chaste_interface__L_type_Ca_channel_f2_gate__f2 = rY[9]; + // Units: dimensionless; Initial value: 0.9349197 + double var_chaste_interface__L_type_Ca_channel_f2ds_gate__f2ds = rY[10]; + // Units: dimensionless; Initial value: 0.9651958 + double var_chaste_interface__transient_outward_current_s_gate__s = rY[11]; + // Units: dimensionless; Initial value: 0.9948645 + double var_chaste_interface__transient_outward_current_r_gate__r = rY[12]; + // Units: dimensionless; Initial value: 0.0 + double var_chaste_interface__calcium_release__ActFrac = rY[13]; + // Units: dimensionless; Initial value: 0.0042614 + double var_chaste_interface__calcium_release__ProdFrac = rY[14]; + // Units: dimensionless; Initial value: 0.4068154 + double var_chaste_interface__intracellular_sodium_concentration__Na_i = rY[15]; + // Units: millimolar; Initial value: 7.3321223 + double var_chaste_interface__intracellular_potassium_concentration__K_i = rY[16]; + // Units: millimolar; Initial value: 136.5644281 + double var_chaste_interface__intracellular_calcium_concentration__Ca_ds = rY[17]; + // Units: millimolar; Initial value: 1.88e-05 + double var_chaste_interface__intracellular_calcium_concentration__Ca_up = rY[18]; + // Units: millimolar; Initial value: 0.4531889 + double var_chaste_interface__intracellular_calcium_concentration__Ca_rel = rY[19]; + // Units: millimolar; Initial value: 0.4481927 + double var_chaste_interface__intracellular_calcium_concentration__Ca_Calmod = rY[20]; + // Units: millimolar; Initial value: 0.0005555 + double var_chaste_interface__intracellular_calcium_concentration__Ca_Trop = rY[21]; + // Units: millimolar; Initial value: 0.0003542 + + // Mathematics + double d_dt_chaste_interface_var_membrane__V; + const double var_L_type_Ca_channel__FrICa = 1; // dimensionless + const double var_L_type_Ca_channel__Km_f2 = 100000; // millimolar + const double var_L_type_Ca_channel__Km_f2ds = 0.001; // millimolar + const double var_L_type_Ca_channel__P_CaK = 0.002; // dimensionless + const double var_L_type_Ca_channel__P_CaNa = 0.01; // dimensionless + const double var_L_type_Ca_channel__R_decay = 20; // per_second + const double var_L_type_Ca_channel_d_gate__speed_d = 3; // dimensionless + const double var_L_type_Ca_channel_f_gate__delta_f = 0.0001; // millivolt + const double var_L_type_Ca_channel_f_gate__speed_f = 0.29999999999999999; // dimensionless + const double var_calcium_background_current__g_bca = 0.00025000000000000001; // microS + const double var_calcium_release__PrecFrac = 1 - var_chaste_interface__calcium_release__ActFrac - var_chaste_interface__calcium_release__ProdFrac; // dimensionless + const double var_fast_sodium_current_m_gate__delta_m = 1.0000000000000001e-5; // millivolt + const double var_L_type_Ca_channel_f2ds_gate__f2ds_orig_deriv = (1 - var_chaste_interface__L_type_Ca_channel_f2ds_gate__f2ds - var_chaste_interface__intracellular_calcium_concentration__Ca_ds / (var_L_type_Ca_channel__Km_f2ds + var_chaste_interface__intracellular_calcium_concentration__Ca_ds)) * var_L_type_Ca_channel__R_decay; // 1 / second + const double d_dt_chaste_interface_var_L_type_Ca_channel_f2ds_gate__f2ds = 0.001 * var_L_type_Ca_channel_f2ds_gate__f2ds_orig_deriv; // 1 / millisecond + const double var_calcium_release__CadsReg = var_chaste_interface__intracellular_calcium_concentration__Ca_ds / (mParameters[3] + var_chaste_interface__intracellular_calcium_concentration__Ca_ds); // dimensionless + const double var_L_type_Ca_channel_f2_gate__f2_orig_deriv = 1 - var_chaste_interface__L_type_Ca_channel_f2_gate__f2 - var_chaste_interface__intracellular_calcium_concentration__Ca_i / (var_L_type_Ca_channel__Km_f2 + var_chaste_interface__intracellular_calcium_concentration__Ca_i); // 1 / second + const double d_dt_chaste_interface_var_L_type_Ca_channel_f2_gate__f2 = 0.001 * var_L_type_Ca_channel_f2_gate__f2_orig_deriv; // 1 / millisecond + const double var_calcium_release__CaiReg = var_chaste_interface__intracellular_calcium_concentration__Ca_i / (mParameters[2] + var_chaste_interface__intracellular_calcium_concentration__Ca_i); // dimensionless + const double var_calcium_release__RegBindSite = (1 - var_calcium_release__CaiReg) * var_calcium_release__CadsReg + var_calcium_release__CaiReg; // dimensionless + const double var_calcium_release__ActRate = 500 * pow(var_calcium_release__RegBindSite, 2); // per_second + const double var_calcium_release__InactRate = 60 + 500 * pow(var_calcium_release__RegBindSite, 2); // per_second + const double var_calcium_release__i_rel = (pow(var_chaste_interface__calcium_release__ActFrac, 2) * mParameters[1] / pow((0.25 + var_chaste_interface__calcium_release__ActFrac), 2) + mParameters[0]) * var_chaste_interface__intracellular_calcium_concentration__Ca_rel; // millimolar_per_second + const double var_calcium_translocation__i_trans = 50 * var_chaste_interface__intracellular_calcium_concentration__Ca_up - 50 * var_chaste_interface__intracellular_calcium_concentration__Ca_rel; // millimolar_per_second + const double var_intracellular_calcium_concentration__Calmod = 0.02; // millimolar + const double var_intracellular_calcium_concentration__Kdecay = 10; // per_second + const double var_intracellular_calcium_concentration__Trop = 0.050000000000000003; // millimolar + const double var_intracellular_calcium_concentration__V_ds_ratio = 0.10000000000000001; // dimensionless + const double var_intracellular_calcium_concentration__V_e_ratio = 0.40000000000000002; // dimensionless + const double var_intracellular_calcium_concentration__V_rel_ratio = 0.10000000000000001; // dimensionless + const double var_intracellular_calcium_concentration__V_up_ratio = 0.01; // dimensionless + const double var_intracellular_calcium_concentration__Ca_rel_orig_deriv = -var_calcium_release__i_rel + var_calcium_translocation__i_trans * var_intracellular_calcium_concentration__V_up_ratio / var_intracellular_calcium_concentration__V_rel_ratio; // millimolar / second + const double d_dt_chaste_interface_var_intracellular_calcium_concentration__Ca_rel = 0.001 * var_intracellular_calcium_concentration__Ca_rel_orig_deriv; // millimolar / millisecond + const double var_intracellular_calcium_concentration__V_i_ratio = 1 - var_intracellular_calcium_concentration__V_e_ratio - var_intracellular_calcium_concentration__V_rel_ratio - var_intracellular_calcium_concentration__V_up_ratio; // dimensionless + const double var_intracellular_calcium_concentration__alpha_Calmod = 100000; // per_millimolar_second + const double var_intracellular_calcium_concentration__alpha_Trop = 100000; // per_millimolar_second + const double var_intracellular_calcium_concentration__beta_Calmod = 50; // per_second + const double var_intracellular_calcium_concentration__Ca_Calmod_orig_deriv = -var_chaste_interface__intracellular_calcium_concentration__Ca_Calmod * var_intracellular_calcium_concentration__beta_Calmod + (-var_chaste_interface__intracellular_calcium_concentration__Ca_Calmod + var_intracellular_calcium_concentration__Calmod) * var_chaste_interface__intracellular_calcium_concentration__Ca_i * var_intracellular_calcium_concentration__alpha_Calmod; // millimolar / second + const double d_dt_chaste_interface_var_intracellular_calcium_concentration__Ca_Calmod = 0.001 * var_intracellular_calcium_concentration__Ca_Calmod_orig_deriv; // millimolar / millisecond + const double var_intracellular_calcium_concentration__beta_Trop = 200; // per_second + const double var_intracellular_calcium_concentration__Ca_Trop_orig_deriv = -var_chaste_interface__intracellular_calcium_concentration__Ca_Trop * var_intracellular_calcium_concentration__beta_Trop + (-var_chaste_interface__intracellular_calcium_concentration__Ca_Trop + var_intracellular_calcium_concentration__Trop) * var_chaste_interface__intracellular_calcium_concentration__Ca_i * var_intracellular_calcium_concentration__alpha_Trop; // millimolar / second + const double d_dt_chaste_interface_var_intracellular_calcium_concentration__Ca_Trop = 0.001 * var_intracellular_calcium_concentration__Ca_Trop_orig_deriv; // millimolar / millisecond + const double var_intracellular_calcium_concentration__length = 0.073999999999999996; // micrometre + const double var_intracellular_calcium_concentration__radius = 0.012; // micrometre + const double var_intracellular_calcium_concentration__V_Cell = 3.1415926540000001 * pow(var_intracellular_calcium_concentration__radius, 2) * var_intracellular_calcium_concentration__length; // micrometre3 + const double var_intracellular_calcium_concentration__V_i = var_intracellular_calcium_concentration__V_Cell * var_intracellular_calcium_concentration__V_i_ratio; // micrometre3 + const double var_membrane__F = 96485.341499999995; // coulomb_per_mole + const double var_membrane__R = 8314.4719999999998; // joule_per_kilomole_kelvin + const double var_membrane__T = 310; // kelvin + const double var_L_type_Ca_channel__i_Ca_L_Ca_cyt = 4 * (1 - var_L_type_Ca_channel__FrICa) * (-50 + var_chaste_interface__membrane__V) * (var_chaste_interface__intracellular_calcium_concentration__Ca_i * exp(100 * var_membrane__F / (var_membrane__R * var_membrane__T)) - mParameters[6] * exp(2 * (50 - var_chaste_interface__membrane__V) * var_membrane__F / (var_membrane__R * var_membrane__T))) * mParameters[9] * var_chaste_interface__L_type_Ca_channel_d_gate__d * var_chaste_interface__L_type_Ca_channel_f2_gate__f2 * var_chaste_interface__L_type_Ca_channel_f_gate__f * var_membrane__F / ((1 - exp(2 * (50 - var_chaste_interface__membrane__V) * var_membrane__F / (var_membrane__R * var_membrane__T))) * var_membrane__R * var_membrane__T); // nanoA + const double var_L_type_Ca_channel__i_Ca_L_Ca_ds = 4 * (-50 + var_chaste_interface__membrane__V) * (var_chaste_interface__intracellular_calcium_concentration__Ca_i * exp(100 * var_membrane__F / (var_membrane__R * var_membrane__T)) - mParameters[6] * exp(2 * (50 - var_chaste_interface__membrane__V) * var_membrane__F / (var_membrane__R * var_membrane__T))) * var_L_type_Ca_channel__FrICa * mParameters[9] * var_chaste_interface__L_type_Ca_channel_d_gate__d * var_chaste_interface__L_type_Ca_channel_f2ds_gate__f2ds * var_chaste_interface__L_type_Ca_channel_f_gate__f * var_membrane__F / ((1 - exp(2 * (50 - var_chaste_interface__membrane__V) * var_membrane__F / (var_membrane__R * var_membrane__T))) * var_membrane__R * var_membrane__T); // nanoA + const double var_L_type_Ca_channel__i_Ca_L_K_cyt = (1 - var_L_type_Ca_channel__FrICa) * (-50 + var_chaste_interface__membrane__V) * (var_chaste_interface__intracellular_potassium_concentration__K_i * exp(50 * var_membrane__F / (var_membrane__R * var_membrane__T)) - mParameters[7] * exp((50 - var_chaste_interface__membrane__V) * var_membrane__F / (var_membrane__R * var_membrane__T))) * var_L_type_Ca_channel__P_CaK * mParameters[9] * var_chaste_interface__L_type_Ca_channel_d_gate__d * var_chaste_interface__L_type_Ca_channel_f2_gate__f2 * var_chaste_interface__L_type_Ca_channel_f_gate__f * var_membrane__F / ((1 - exp((50 - var_chaste_interface__membrane__V) * var_membrane__F / (var_membrane__R * var_membrane__T))) * var_membrane__R * var_membrane__T); // nanoA + const double var_L_type_Ca_channel__i_Ca_L_K_ds = (-50 + var_chaste_interface__membrane__V) * (var_chaste_interface__intracellular_potassium_concentration__K_i * exp(50 * var_membrane__F / (var_membrane__R * var_membrane__T)) - mParameters[7] * exp((50 - var_chaste_interface__membrane__V) * var_membrane__F / (var_membrane__R * var_membrane__T))) * var_L_type_Ca_channel__FrICa * var_L_type_Ca_channel__P_CaK * mParameters[9] * var_chaste_interface__L_type_Ca_channel_d_gate__d * var_chaste_interface__L_type_Ca_channel_f2ds_gate__f2ds * var_chaste_interface__L_type_Ca_channel_f_gate__f * var_membrane__F / ((1 - exp((50 - var_chaste_interface__membrane__V) * var_membrane__F / (var_membrane__R * var_membrane__T))) * var_membrane__R * var_membrane__T); // nanoA + const double var_L_type_Ca_channel__i_Ca_L_Na_cyt = (1 - var_L_type_Ca_channel__FrICa) * (-50 + var_chaste_interface__membrane__V) * (var_chaste_interface__intracellular_sodium_concentration__Na_i * exp(50 * var_membrane__F / (var_membrane__R * var_membrane__T)) - mParameters[8] * exp((50 - var_chaste_interface__membrane__V) * var_membrane__F / (var_membrane__R * var_membrane__T))) * var_L_type_Ca_channel__P_CaNa * mParameters[9] * var_chaste_interface__L_type_Ca_channel_d_gate__d * var_chaste_interface__L_type_Ca_channel_f2_gate__f2 * var_chaste_interface__L_type_Ca_channel_f_gate__f * var_membrane__F / ((1 - exp((50 - var_chaste_interface__membrane__V) * var_membrane__F / (var_membrane__R * var_membrane__T))) * var_membrane__R * var_membrane__T); // nanoA + const double var_L_type_Ca_channel__i_Ca_L_Na_ds = (-50 + var_chaste_interface__membrane__V) * (var_chaste_interface__intracellular_sodium_concentration__Na_i * exp(50 * var_membrane__F / (var_membrane__R * var_membrane__T)) - mParameters[8] * exp((50 - var_chaste_interface__membrane__V) * var_membrane__F / (var_membrane__R * var_membrane__T))) * var_L_type_Ca_channel__FrICa * var_L_type_Ca_channel__P_CaNa * mParameters[9] * var_chaste_interface__L_type_Ca_channel_d_gate__d * var_chaste_interface__L_type_Ca_channel_f2ds_gate__f2ds * var_chaste_interface__L_type_Ca_channel_f_gate__f * var_membrane__F / ((1 - exp((50 - var_chaste_interface__membrane__V) * var_membrane__F / (var_membrane__R * var_membrane__T))) * var_membrane__R * var_membrane__T); // nanoA + const double var_L_type_Ca_channel_d_gate__E0_d = 19 + var_chaste_interface__membrane__V; // millivolt + const double var_L_type_Ca_channel_d_gate__alpha_d = ((fabs(var_L_type_Ca_channel_d_gate__E0_d) < 0.0001) ? (120) : (30 * var_L_type_Ca_channel_d_gate__E0_d / (1 - exp(-0.25 * var_L_type_Ca_channel_d_gate__E0_d)))); // per_second + const double var_L_type_Ca_channel_d_gate__beta_d = ((fabs(var_L_type_Ca_channel_d_gate__E0_d) < 0.0001) ? (120) : (12 * var_L_type_Ca_channel_d_gate__E0_d / (-1 + exp(0.10000000000000001 * var_L_type_Ca_channel_d_gate__E0_d)))); // per_second + const double var_L_type_Ca_channel_d_gate__d_orig_deriv = ((1 - var_chaste_interface__L_type_Ca_channel_d_gate__d) * var_L_type_Ca_channel_d_gate__alpha_d - var_L_type_Ca_channel_d_gate__beta_d * var_chaste_interface__L_type_Ca_channel_d_gate__d) * var_L_type_Ca_channel_d_gate__speed_d; // 1 / second + const double d_dt_chaste_interface_var_L_type_Ca_channel_d_gate__d = 0.001 * var_L_type_Ca_channel_d_gate__d_orig_deriv; // 1 / millisecond + const double var_L_type_Ca_channel_f_gate__E0_f = 34 + var_chaste_interface__membrane__V; // millivolt + const double var_L_type_Ca_channel_f_gate__alpha_f = ((var_L_type_Ca_channel_f_gate__delta_f > fabs(var_L_type_Ca_channel_f_gate__E0_f)) ? (25) : (6.25 * var_L_type_Ca_channel_f_gate__E0_f / (-1 + exp(0.25 * var_L_type_Ca_channel_f_gate__E0_f)))); // per_second + const double var_L_type_Ca_channel_f_gate__beta_f = 12 / (1 + exp(-8.5 - 0.25 * var_chaste_interface__membrane__V)); // per_second + const double var_L_type_Ca_channel_f_gate__f_orig_deriv = ((1 - var_chaste_interface__L_type_Ca_channel_f_gate__f) * var_L_type_Ca_channel_f_gate__alpha_f - var_L_type_Ca_channel_f_gate__beta_f * var_chaste_interface__L_type_Ca_channel_f_gate__f) * var_L_type_Ca_channel_f_gate__speed_f; // 1 / second + const double d_dt_chaste_interface_var_L_type_Ca_channel_f_gate__f = 0.001 * var_L_type_Ca_channel_f_gate__f_orig_deriv; // 1 / millisecond + const double var_calcium_release__SpeedRel = ((var_chaste_interface__membrane__V < -50) ? (5) : (1)); // dimensionless + const double var_calcium_release__ActFrac_orig_deriv = var_calcium_release__ActRate * var_calcium_release__PrecFrac * var_calcium_release__SpeedRel - var_chaste_interface__calcium_release__ActFrac * var_calcium_release__InactRate * var_calcium_release__SpeedRel; // 1 / second + const double d_dt_chaste_interface_var_calcium_release__ActFrac = 0.001 * var_calcium_release__ActFrac_orig_deriv; // 1 / millisecond + const double var_calcium_release__ProdFrac_orig_deriv = -var_chaste_interface__calcium_release__ProdFrac * var_calcium_release__SpeedRel + var_chaste_interface__calcium_release__ActFrac * var_calcium_release__InactRate * var_calcium_release__SpeedRel; // 1 / second + const double d_dt_chaste_interface_var_calcium_release__ProdFrac = 0.001 * var_calcium_release__ProdFrac_orig_deriv; // 1 / millisecond + const double var_fast_sodium_current_h_gate__alpha_h = 20 * exp(-9.375 + 0.125 * mParameters[13] - 0.125 * var_chaste_interface__membrane__V); // per_second + const double var_fast_sodium_current_h_gate__beta_h = 2000 / (1 + 320 * exp(-7.5 + 0.10000000000000001 * mParameters[13] - 0.10000000000000001 * var_chaste_interface__membrane__V)); // per_second + const double var_fast_sodium_current_h_gate__h_inf = 0.01 * mParameters[12] + (1 - 0.01 * mParameters[12]) * var_fast_sodium_current_h_gate__alpha_h / (var_fast_sodium_current_h_gate__alpha_h + var_fast_sodium_current_h_gate__beta_h); // dimensionless + const double var_fast_sodium_current_h_gate__tau_h = 1 / (var_fast_sodium_current_h_gate__alpha_h + var_fast_sodium_current_h_gate__beta_h); // second + const double var_fast_sodium_current_h_gate__h_orig_deriv = (-var_chaste_interface__fast_sodium_current_h_gate__h + var_fast_sodium_current_h_gate__h_inf) / var_fast_sodium_current_h_gate__tau_h; // 1 / second + const double d_dt_chaste_interface_var_fast_sodium_current_h_gate__h = 0.001 * var_fast_sodium_current_h_gate__h_orig_deriv; // 1 / millisecond + const double var_fast_sodium_current_m_gate__E0_m = 41 + var_chaste_interface__membrane__V; // millivolt + const double var_fast_sodium_current_m_gate__alpha_m = ((var_fast_sodium_current_m_gate__delta_m > fabs(var_fast_sodium_current_m_gate__E0_m)) ? (2000) : (200 * var_fast_sodium_current_m_gate__E0_m / (1 - exp(-0.10000000000000001 * var_fast_sodium_current_m_gate__E0_m)))); // per_second + const double var_fast_sodium_current_m_gate__beta_m = 8000 * exp(-3.6960000000000002 - 0.056000000000000001 * var_chaste_interface__membrane__V); // per_second + const double var_fast_sodium_current_m_gate__m_orig_deriv = (1 - var_chaste_interface__fast_sodium_current_m_gate__m) * var_fast_sodium_current_m_gate__alpha_m - var_fast_sodium_current_m_gate__beta_m * var_chaste_interface__fast_sodium_current_m_gate__m; // 1 / second + const double d_dt_chaste_interface_var_fast_sodium_current_m_gate__m = 0.001 * var_fast_sodium_current_m_gate__m_orig_deriv; // 1 / millisecond + const double var_intracellular_calcium_concentration__Ca_ds_orig_deriv = -var_chaste_interface__intracellular_calcium_concentration__Ca_ds * var_intracellular_calcium_concentration__Kdecay - 0.5 * var_L_type_Ca_channel__i_Ca_L_Ca_ds / (var_intracellular_calcium_concentration__V_ds_ratio * var_intracellular_calcium_concentration__V_i * var_membrane__F); // millimolar / second + const double d_dt_chaste_interface_var_intracellular_calcium_concentration__Ca_ds = 0.001 * var_intracellular_calcium_concentration__Ca_ds_orig_deriv; // millimolar / millisecond + const double var_persistent_sodium_current__g_pna = 0.0040000000000000001; // microS + const double var_rapid_delayed_rectifier_potassium_current_xr1_gate__alpha_xr1 = 50 / (1 + exp(0.55555555555555558 - 0.1111111111111111 * var_chaste_interface__membrane__V)); // per_second + const double var_rapid_delayed_rectifier_potassium_current_xr1_gate__beta_xr1 = 0.050000000000000003 * exp(1.3333333333333333 - 0.066666666666666666 * var_chaste_interface__membrane__V); // per_second + const double var_rapid_delayed_rectifier_potassium_current_xr1_gate__xr1_orig_deriv = (1 - var_chaste_interface__rapid_delayed_rectifier_potassium_current_xr1_gate__xr1) * var_rapid_delayed_rectifier_potassium_current_xr1_gate__alpha_xr1 - var_rapid_delayed_rectifier_potassium_current_xr1_gate__beta_xr1 * var_chaste_interface__rapid_delayed_rectifier_potassium_current_xr1_gate__xr1; // 1 / second + const double d_dt_chaste_interface_var_rapid_delayed_rectifier_potassium_current_xr1_gate__xr1 = 0.001 * var_rapid_delayed_rectifier_potassium_current_xr1_gate__xr1_orig_deriv; // 1 / millisecond + const double var_rapid_delayed_rectifier_potassium_current_xr2_gate__alpha_xr2 = 50 / (1 + exp(0.55555555555555558 - 0.1111111111111111 * var_chaste_interface__membrane__V)); // per_second + const double var_rapid_delayed_rectifier_potassium_current_xr2_gate__beta_xr2 = 0.40000000000000002 * exp(-pow((1 + 0.033333333333333333 * var_chaste_interface__membrane__V), 3)); // per_second + const double var_rapid_delayed_rectifier_potassium_current_xr2_gate__xr2_orig_deriv = (1 - var_chaste_interface__rapid_delayed_rectifier_potassium_current_xr2_gate__xr2) * var_rapid_delayed_rectifier_potassium_current_xr2_gate__alpha_xr2 - var_rapid_delayed_rectifier_potassium_current_xr2_gate__beta_xr2 * var_chaste_interface__rapid_delayed_rectifier_potassium_current_xr2_gate__xr2; // 1 / second + const double d_dt_chaste_interface_var_rapid_delayed_rectifier_potassium_current_xr2_gate__xr2 = 0.001 * var_rapid_delayed_rectifier_potassium_current_xr2_gate__xr2_orig_deriv; // 1 / millisecond + const double var_reversal_potentials__E_Ca = 0.5 * var_membrane__R * var_membrane__T * log(mParameters[6] / var_chaste_interface__intracellular_calcium_concentration__Ca_i) / var_membrane__F; // millivolt + const double var_calcium_background_current__i_b_Ca = (-var_reversal_potentials__E_Ca + var_chaste_interface__membrane__V) * var_calcium_background_current__g_bca; // nanoA + const double var_reversal_potentials__E_K = var_membrane__R * var_membrane__T * log(mParameters[7] / var_chaste_interface__intracellular_potassium_concentration__K_i) / var_membrane__F; // millivolt + const double var_rapid_delayed_rectifier_potassium_current__i_Kr = (-var_reversal_potentials__E_K + var_chaste_interface__membrane__V) * (mParameters[15] * var_chaste_interface__rapid_delayed_rectifier_potassium_current_xr1_gate__xr1 + mParameters[16] * var_chaste_interface__rapid_delayed_rectifier_potassium_current_xr2_gate__xr2) / (1 + exp(0.4017857142857143 + 0.044642857142857144 * var_chaste_interface__membrane__V)); // nanoA + const double var_reversal_potentials__E_Na = var_membrane__R * var_membrane__T * log(mParameters[8] / var_chaste_interface__intracellular_sodium_concentration__Na_i) / var_membrane__F; // millivolt + const double var_persistent_sodium_current__i_p_Na = (-var_reversal_potentials__E_Na + var_chaste_interface__membrane__V) * var_persistent_sodium_current__g_pna / (1 + exp(-6.5 - 0.125 * var_chaste_interface__membrane__V)); // nanoA + const double var_reversal_potentials__E_mh = var_membrane__R * var_membrane__T * log((mParameters[8] + 0.12 * mParameters[7]) / (var_chaste_interface__intracellular_sodium_concentration__Na_i + 0.12 * var_chaste_interface__intracellular_potassium_concentration__K_i)) / var_membrane__F; // millivolt + const double var_fast_sodium_current__i_Na = pow(var_chaste_interface__fast_sodium_current_m_gate__m, 3) * (-var_reversal_potentials__E_mh + var_chaste_interface__membrane__V) * mParameters[11] * var_chaste_interface__fast_sodium_current_h_gate__h; // nanoA + const double var_reversal_potentials__P_kna = 0.029999999999999999; // dimensionless + const double var_reversal_potentials__E_Ks = var_membrane__R * var_membrane__T * log((mParameters[8] * var_reversal_potentials__P_kna + mParameters[7]) / (var_chaste_interface__intracellular_sodium_concentration__Na_i * var_reversal_potentials__P_kna + var_chaste_interface__intracellular_potassium_concentration__K_i)) / var_membrane__F; // millivolt + const double var_sarcoplasmic_reticulum_calcium_pump__K_cyca = 0.00029999999999999997; // millimolar + const double var_sarcoplasmic_reticulum_calcium_pump__K_srca = 0.5; // millimolar + const double var_sarcoplasmic_reticulum_calcium_pump__K_xcs = 0.40000000000000002; // dimensionless + const double var_sarcoplasmic_reticulum_calcium_pump__K_1 = var_sarcoplasmic_reticulum_calcium_pump__K_cyca * var_sarcoplasmic_reticulum_calcium_pump__K_xcs / var_sarcoplasmic_reticulum_calcium_pump__K_srca; // dimensionless + const double var_sarcoplasmic_reticulum_calcium_pump__K_2 = var_chaste_interface__intracellular_calcium_concentration__Ca_up * var_sarcoplasmic_reticulum_calcium_pump__K_1 + var_sarcoplasmic_reticulum_calcium_pump__K_cyca * var_sarcoplasmic_reticulum_calcium_pump__K_xcs + var_chaste_interface__intracellular_calcium_concentration__Ca_i + var_sarcoplasmic_reticulum_calcium_pump__K_cyca; // millimolar + const double var_sarcoplasmic_reticulum_calcium_pump__alpha_up = 0.40000000000000002; // millimolar_per_second + const double var_sarcoplasmic_reticulum_calcium_pump__beta_up = 0.029999999999999999; // millimolar_per_second + const double var_sarcoplasmic_reticulum_calcium_pump__i_up = (var_chaste_interface__intracellular_calcium_concentration__Ca_i * var_sarcoplasmic_reticulum_calcium_pump__alpha_up / var_sarcoplasmic_reticulum_calcium_pump__K_2 - var_chaste_interface__intracellular_calcium_concentration__Ca_up * var_sarcoplasmic_reticulum_calcium_pump__K_1 * var_sarcoplasmic_reticulum_calcium_pump__beta_up / var_sarcoplasmic_reticulum_calcium_pump__K_2) * mParameters[4]; // millimolar_per_second + const double var_intracellular_calcium_concentration__Ca_up_orig_deriv = -var_calcium_translocation__i_trans + var_intracellular_calcium_concentration__V_i_ratio * var_sarcoplasmic_reticulum_calcium_pump__i_up / var_intracellular_calcium_concentration__V_up_ratio; // millimolar / second + const double d_dt_chaste_interface_var_intracellular_calcium_concentration__Ca_up = 0.001 * var_intracellular_calcium_concentration__Ca_up_orig_deriv; // millimolar / millisecond + const double var_slow_delayed_rectifier_potassium_current_xs_gate__alpha_xs = 14 / (1 + exp(4.4444444444444446 - 0.1111111111111111 * var_chaste_interface__membrane__V)); // per_second + const double var_slow_delayed_rectifier_potassium_current_xs_gate__beta_xs = exp(-0.022222222222222223 * var_chaste_interface__membrane__V); // per_second + const double var_slow_delayed_rectifier_potassium_current__i_Ks = pow(var_chaste_interface__slow_delayed_rectifier_potassium_current_xs_gate__xs, 2) * (-var_reversal_potentials__E_Ks + var_chaste_interface__membrane__V) * mParameters[17]; // nanoA + const double var_slow_delayed_rectifier_potassium_current_xs_gate__xs_orig_deriv = (1 - var_chaste_interface__slow_delayed_rectifier_potassium_current_xs_gate__xs) * var_slow_delayed_rectifier_potassium_current_xs_gate__alpha_xs - var_slow_delayed_rectifier_potassium_current_xs_gate__beta_xs * var_chaste_interface__slow_delayed_rectifier_potassium_current_xs_gate__xs; // 1 / second + const double d_dt_chaste_interface_var_slow_delayed_rectifier_potassium_current_xs_gate__xs = 0.001 * var_slow_delayed_rectifier_potassium_current_xs_gate__xs_orig_deriv; // 1 / millisecond + const double var_sodium_background_current__g_bna = 0.00059999999999999995; // microS + const double var_sodium_background_current__i_b_Na = (-var_reversal_potentials__E_Na + var_chaste_interface__membrane__V) * var_sodium_background_current__g_bna; // nanoA + const double var_sodium_calcium_exchanger__FRiNaCa = 0.001; // dimensionless + const double var_sodium_calcium_exchanger__d_NaCa = 0; // dimensionless + const double var_sodium_calcium_exchanger__gamma = 0.5; // dimensionless + const double var_sodium_calcium_exchanger__n_NaCa = 3; // dimensionless + const double var_sodium_calcium_exchanger__i_NaCa_cyt = (1 - var_sodium_calcium_exchanger__FRiNaCa) * (pow(var_chaste_interface__intracellular_sodium_concentration__Na_i, var_sodium_calcium_exchanger__n_NaCa) * mParameters[6] * exp((-2 + var_sodium_calcium_exchanger__n_NaCa) * var_membrane__F * var_chaste_interface__membrane__V * var_sodium_calcium_exchanger__gamma / (var_membrane__R * var_membrane__T)) - pow(mParameters[8], var_sodium_calcium_exchanger__n_NaCa) * var_chaste_interface__intracellular_calcium_concentration__Ca_i * exp((-1 + var_sodium_calcium_exchanger__gamma) * (-2 + var_sodium_calcium_exchanger__n_NaCa) * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * mParameters[18] / ((1 + 144.92753623188406 * var_chaste_interface__intracellular_calcium_concentration__Ca_i) * (1 + (pow(mParameters[8], var_sodium_calcium_exchanger__n_NaCa) * var_chaste_interface__intracellular_calcium_concentration__Ca_i + pow(var_chaste_interface__intracellular_sodium_concentration__Na_i, var_sodium_calcium_exchanger__n_NaCa) * mParameters[6]) * var_sodium_calcium_exchanger__d_NaCa)); // nanoA + const double var_sodium_calcium_exchanger__i_NaCa_ds = (pow(var_chaste_interface__intracellular_sodium_concentration__Na_i, var_sodium_calcium_exchanger__n_NaCa) * mParameters[6] * exp((-2 + var_sodium_calcium_exchanger__n_NaCa) * var_membrane__F * var_chaste_interface__membrane__V * var_sodium_calcium_exchanger__gamma / (var_membrane__R * var_membrane__T)) - pow(mParameters[8], var_sodium_calcium_exchanger__n_NaCa) * var_chaste_interface__intracellular_calcium_concentration__Ca_ds * exp((-1 + var_sodium_calcium_exchanger__gamma) * (-2 + var_sodium_calcium_exchanger__n_NaCa) * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * var_sodium_calcium_exchanger__FRiNaCa * mParameters[18] / ((1 + 144.92753623188406 * var_chaste_interface__intracellular_calcium_concentration__Ca_ds) * (1 + (pow(mParameters[8], var_sodium_calcium_exchanger__n_NaCa) * var_chaste_interface__intracellular_calcium_concentration__Ca_ds + pow(var_chaste_interface__intracellular_sodium_concentration__Na_i, var_sodium_calcium_exchanger__n_NaCa) * mParameters[6]) * var_sodium_calcium_exchanger__d_NaCa)); // nanoA + const double var_intracellular_calcium_concentration__Ca_i_orig_deriv = -var_intracellular_calcium_concentration__Ca_Calmod_orig_deriv - var_intracellular_calcium_concentration__Ca_Trop_orig_deriv - var_sarcoplasmic_reticulum_calcium_pump__i_up + var_calcium_release__i_rel * var_intracellular_calcium_concentration__V_rel_ratio / var_intracellular_calcium_concentration__V_i_ratio + var_chaste_interface__intracellular_calcium_concentration__Ca_ds * var_intracellular_calcium_concentration__Kdecay * var_intracellular_calcium_concentration__V_ds_ratio - 0.5 * (-2 * var_sodium_calcium_exchanger__i_NaCa_cyt - 2 * var_sodium_calcium_exchanger__i_NaCa_ds + var_L_type_Ca_channel__i_Ca_L_Ca_cyt + var_calcium_background_current__i_b_Ca) / (var_intracellular_calcium_concentration__V_i * var_membrane__F); // millimolar / second + const double d_dt_chaste_interface_var_intracellular_calcium_concentration__Ca_i = 0.001 * var_intracellular_calcium_concentration__Ca_i_orig_deriv; // millimolar / millisecond + const double var_sodium_potassium_pump__K_mK = 1; // millimolar + const double var_sodium_potassium_pump__K_mNa = 40; // millimolar + const double var_sodium_potassium_pump__i_NaK_max = 0.69999999999999996; // nanoA + const double var_sodium_potassium_pump__i_NaK = mParameters[7] * var_chaste_interface__intracellular_sodium_concentration__Na_i * var_sodium_potassium_pump__i_NaK_max / ((mParameters[7] + var_sodium_potassium_pump__K_mK) * (var_chaste_interface__intracellular_sodium_concentration__Na_i + var_sodium_potassium_pump__K_mNa)); // nanoA + const double var_intracellular_sodium_concentration__Na_i_orig_deriv = -(3 * var_sodium_calcium_exchanger__i_NaCa_cyt + 3 * var_sodium_potassium_pump__i_NaK + var_L_type_Ca_channel__i_Ca_L_Na_cyt + var_L_type_Ca_channel__i_Ca_L_Na_ds + var_fast_sodium_current__i_Na + var_persistent_sodium_current__i_p_Na + var_sodium_background_current__i_b_Na) * mParameters[5] / (var_intracellular_calcium_concentration__V_i * var_membrane__F); // millimolar / second + const double d_dt_chaste_interface_var_intracellular_sodium_concentration__Na_i = 0.001 * var_intracellular_sodium_concentration__Na_i_orig_deriv; // millimolar / millisecond + const double var_time_independent_potassium_current__K_mk1 = 10; // millimolar + const double var_time_independent_potassium_current__i_K1 = (-var_reversal_potentials__E_K + var_chaste_interface__membrane__V) * mParameters[7] * mParameters[14] / ((1 + exp(1.25 * (-10 - var_reversal_potentials__E_K + var_chaste_interface__membrane__V) * var_membrane__F / (var_membrane__R * var_membrane__T))) * (mParameters[7] + var_time_independent_potassium_current__K_mk1)); // nanoA + const double var_transient_outward_current__g_tos = 0; // dimensionless + const double var_transient_outward_current_r_gate__r_orig_deriv = 333 / (1 + exp(-0.80000000000000004 - 0.20000000000000001 * var_chaste_interface__membrane__V)) - 333 * var_chaste_interface__transient_outward_current_r_gate__r; // 1 / second + const double d_dt_chaste_interface_var_transient_outward_current_r_gate__r = 0.001 * var_transient_outward_current_r_gate__r_orig_deriv; // 1 / millisecond + const double var_transient_outward_current_s_gate__alpha_s = 0.033000000000000002 * exp(-0.058823529411764705 * var_chaste_interface__membrane__V); // per_second + const double var_transient_outward_current_s_gate__beta_s = 33 / (1 + exp(-1.25 - 0.125 * var_chaste_interface__membrane__V)); // per_second + const double var_transient_outward_current__i_to = (-var_reversal_potentials__E_K + var_chaste_interface__membrane__V) * ((1 - var_transient_outward_current__g_tos) * var_chaste_interface__transient_outward_current_s_gate__s + var_transient_outward_current__g_tos) * mParameters[19] * var_chaste_interface__transient_outward_current_r_gate__r; // nanoA + const double var_intracellular_potassium_concentration__K_i_orig_deriv = -(-2 * var_sodium_potassium_pump__i_NaK + var_L_type_Ca_channel__i_Ca_L_K_cyt + var_L_type_Ca_channel__i_Ca_L_K_ds + var_rapid_delayed_rectifier_potassium_current__i_Kr + var_slow_delayed_rectifier_potassium_current__i_Ks + var_time_independent_potassium_current__i_K1 + var_transient_outward_current__i_to) * mParameters[5] / (var_intracellular_calcium_concentration__V_i * var_membrane__F); // millimolar / second + const double d_dt_chaste_interface_var_intracellular_potassium_concentration__K_i = 0.001 * var_intracellular_potassium_concentration__K_i_orig_deriv; // millimolar / millisecond + const double var_transient_outward_current_s_gate__s_orig_deriv = (1 - var_chaste_interface__transient_outward_current_s_gate__s) * var_transient_outward_current_s_gate__alpha_s - var_transient_outward_current_s_gate__beta_s * var_chaste_interface__transient_outward_current_s_gate__s; // 1 / second + const double d_dt_chaste_interface_var_transient_outward_current_s_gate__s = 0.001 * var_transient_outward_current_s_gate__s_orig_deriv; // 1 / millisecond + + if (mSetVoltageDerivativeToZero) + { + d_dt_chaste_interface_var_membrane__V = 0.0; + } + else + { + const double var_membrane__i_Stim_converted = GetIntracellularAreaStimulus(var_chaste_interface__environment__time_converted); // uA_per_cm2 + const double var_membrane__i_Stim = 1000 * mParameters[10] * var_membrane__i_Stim_converted / HeartConfig::Instance()->GetCapacitance(); // nanoA + const double var_membrane__V_orig_deriv = -(var_L_type_Ca_channel__i_Ca_L_Ca_cyt + var_L_type_Ca_channel__i_Ca_L_Ca_ds + var_L_type_Ca_channel__i_Ca_L_K_cyt + var_L_type_Ca_channel__i_Ca_L_K_ds + var_L_type_Ca_channel__i_Ca_L_Na_cyt + var_L_type_Ca_channel__i_Ca_L_Na_ds + var_calcium_background_current__i_b_Ca + var_fast_sodium_current__i_Na + var_membrane__i_Stim + var_persistent_sodium_current__i_p_Na + var_rapid_delayed_rectifier_potassium_current__i_Kr + var_slow_delayed_rectifier_potassium_current__i_Ks + var_sodium_background_current__i_b_Na + var_sodium_calcium_exchanger__i_NaCa_cyt + var_sodium_calcium_exchanger__i_NaCa_ds + var_sodium_potassium_pump__i_NaK + var_time_independent_potassium_current__i_K1 + var_transient_outward_current__i_to) / mParameters[10]; // millivolt / second + d_dt_chaste_interface_var_membrane__V = 0.001 * var_membrane__V_orig_deriv; // millivolt / millisecond + } + + rDY[0] = d_dt_chaste_interface_var_membrane__V; + rDY[1] = d_dt_chaste_interface_var_intracellular_calcium_concentration__Ca_i; + rDY[2] = d_dt_chaste_interface_var_rapid_delayed_rectifier_potassium_current_xr1_gate__xr1; + rDY[3] = d_dt_chaste_interface_var_rapid_delayed_rectifier_potassium_current_xr2_gate__xr2; + rDY[4] = d_dt_chaste_interface_var_slow_delayed_rectifier_potassium_current_xs_gate__xs; + rDY[5] = d_dt_chaste_interface_var_fast_sodium_current_m_gate__m; + rDY[6] = d_dt_chaste_interface_var_fast_sodium_current_h_gate__h; + rDY[7] = d_dt_chaste_interface_var_L_type_Ca_channel_d_gate__d; + rDY[8] = d_dt_chaste_interface_var_L_type_Ca_channel_f_gate__f; + rDY[9] = d_dt_chaste_interface_var_L_type_Ca_channel_f2_gate__f2; + rDY[10] = d_dt_chaste_interface_var_L_type_Ca_channel_f2ds_gate__f2ds; + rDY[11] = d_dt_chaste_interface_var_transient_outward_current_s_gate__s; + rDY[12] = d_dt_chaste_interface_var_transient_outward_current_r_gate__r; + rDY[13] = d_dt_chaste_interface_var_calcium_release__ActFrac; + rDY[14] = d_dt_chaste_interface_var_calcium_release__ProdFrac; + rDY[15] = d_dt_chaste_interface_var_intracellular_sodium_concentration__Na_i; + rDY[16] = d_dt_chaste_interface_var_intracellular_potassium_concentration__K_i; + rDY[17] = d_dt_chaste_interface_var_intracellular_calcium_concentration__Ca_ds; + rDY[18] = d_dt_chaste_interface_var_intracellular_calcium_concentration__Ca_up; + rDY[19] = d_dt_chaste_interface_var_intracellular_calcium_concentration__Ca_rel; + rDY[20] = d_dt_chaste_interface_var_intracellular_calcium_concentration__Ca_Calmod; + rDY[21] = d_dt_chaste_interface_var_intracellular_calcium_concentration__Ca_Trop; + } + + std::vector Chaste_CG::ComputeDerivedQuantities(double var_chaste_interface__environment__time_converted, const std::vector & rY) + { + // Inputs: + // Time units: millisecond + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -92.849333 + double var_chaste_interface__intracellular_calcium_concentration__Ca_i = rY[1]; + // Units: millimolar; Initial value: 1.4e-05 + double var_chaste_interface__rapid_delayed_rectifier_potassium_current_xr1_gate__xr1 = rY[2]; + // Units: dimensionless; Initial value: 1.03e-05 + double var_chaste_interface__rapid_delayed_rectifier_potassium_current_xr2_gate__xr2 = rY[3]; + // Units: dimensionless; Initial value: 2e-07 + double var_chaste_interface__slow_delayed_rectifier_potassium_current_xs_gate__xs = rY[4]; + // Units: dimensionless; Initial value: 0.001302 + double var_chaste_interface__fast_sodium_current_m_gate__m = rY[5]; + // Units: dimensionless; Initial value: 0.0016203 + double var_chaste_interface__fast_sodium_current_h_gate__h = rY[6]; + // Units: dimensionless; Initial value: 0.9944036 + double var_chaste_interface__L_type_Ca_channel_d_gate__d = rY[7]; + // Units: dimensionless; Initial value: 0.0 + double var_chaste_interface__L_type_Ca_channel_f_gate__f = rY[8]; + // Units: dimensionless; Initial value: 1.0 + double var_chaste_interface__L_type_Ca_channel_f2_gate__f2 = rY[9]; + // Units: dimensionless; Initial value: 0.9349197 + double var_chaste_interface__L_type_Ca_channel_f2ds_gate__f2ds = rY[10]; + // Units: dimensionless; Initial value: 0.9651958 + double var_chaste_interface__transient_outward_current_s_gate__s = rY[11]; + // Units: dimensionless; Initial value: 0.9948645 + double var_chaste_interface__transient_outward_current_r_gate__r = rY[12]; + // Units: dimensionless; Initial value: 0.0 + double var_chaste_interface__calcium_release__ActFrac = rY[13]; + // Units: dimensionless; Initial value: 0.0042614 + double var_chaste_interface__intracellular_sodium_concentration__Na_i = rY[15]; + // Units: millimolar; Initial value: 7.3321223 + double var_chaste_interface__intracellular_potassium_concentration__K_i = rY[16]; + // Units: millimolar; Initial value: 136.5644281 + double var_chaste_interface__intracellular_calcium_concentration__Ca_ds = rY[17]; + // Units: millimolar; Initial value: 1.88e-05 + double var_chaste_interface__intracellular_calcium_concentration__Ca_rel = rY[19]; + // Units: millimolar; Initial value: 0.4481927 + + // Mathematics + const double var_L_type_Ca_channel__FrICa = 1; // dimensionless + const double var_L_type_Ca_channel__P_CaK = 0.002; // dimensionless + const double var_L_type_Ca_channel__P_CaNa = 0.01; // dimensionless + const double var_L_type_Ca_channel_f_gate__delta_f = 0.0001; // millivolt + const double var_calcium_release__i_rel = (pow(var_chaste_interface__calcium_release__ActFrac, 2) * mParameters[1] / pow((0.25 + var_chaste_interface__calcium_release__ActFrac), 2) + mParameters[0]) * var_chaste_interface__intracellular_calcium_concentration__Ca_rel; // millimolar_per_second + const double var_membrane__F = 96485.341499999995; // coulomb_per_mole + const double var_membrane__R = 8314.4719999999998; // joule_per_kilomole_kelvin + const double var_membrane__T = 310; // kelvin + const double var_L_type_Ca_channel__i_Ca_L_Ca_cyt = 4 * (1 - var_L_type_Ca_channel__FrICa) * (-50 + var_chaste_interface__membrane__V) * (var_chaste_interface__intracellular_calcium_concentration__Ca_i * exp(100 * var_membrane__F / (var_membrane__R * var_membrane__T)) - mParameters[6] * exp(2 * (50 - var_chaste_interface__membrane__V) * var_membrane__F / (var_membrane__R * var_membrane__T))) * mParameters[9] * var_chaste_interface__L_type_Ca_channel_d_gate__d * var_chaste_interface__L_type_Ca_channel_f2_gate__f2 * var_chaste_interface__L_type_Ca_channel_f_gate__f * var_membrane__F / ((1 - exp(2 * (50 - var_chaste_interface__membrane__V) * var_membrane__F / (var_membrane__R * var_membrane__T))) * var_membrane__R * var_membrane__T); // nanoA + const double var_L_type_Ca_channel__i_Ca_L_Ca_ds = 4 * (-50 + var_chaste_interface__membrane__V) * (var_chaste_interface__intracellular_calcium_concentration__Ca_i * exp(100 * var_membrane__F / (var_membrane__R * var_membrane__T)) - mParameters[6] * exp(2 * (50 - var_chaste_interface__membrane__V) * var_membrane__F / (var_membrane__R * var_membrane__T))) * var_L_type_Ca_channel__FrICa * mParameters[9] * var_chaste_interface__L_type_Ca_channel_d_gate__d * var_chaste_interface__L_type_Ca_channel_f2ds_gate__f2ds * var_chaste_interface__L_type_Ca_channel_f_gate__f * var_membrane__F / ((1 - exp(2 * (50 - var_chaste_interface__membrane__V) * var_membrane__F / (var_membrane__R * var_membrane__T))) * var_membrane__R * var_membrane__T); // nanoA + const double var_L_type_Ca_channel__i_Ca_L_K_cyt = (1 - var_L_type_Ca_channel__FrICa) * (-50 + var_chaste_interface__membrane__V) * (var_chaste_interface__intracellular_potassium_concentration__K_i * exp(50 * var_membrane__F / (var_membrane__R * var_membrane__T)) - mParameters[7] * exp((50 - var_chaste_interface__membrane__V) * var_membrane__F / (var_membrane__R * var_membrane__T))) * var_L_type_Ca_channel__P_CaK * mParameters[9] * var_chaste_interface__L_type_Ca_channel_d_gate__d * var_chaste_interface__L_type_Ca_channel_f2_gate__f2 * var_chaste_interface__L_type_Ca_channel_f_gate__f * var_membrane__F / ((1 - exp((50 - var_chaste_interface__membrane__V) * var_membrane__F / (var_membrane__R * var_membrane__T))) * var_membrane__R * var_membrane__T); // nanoA + const double var_L_type_Ca_channel__i_Ca_L_K_ds = (-50 + var_chaste_interface__membrane__V) * (var_chaste_interface__intracellular_potassium_concentration__K_i * exp(50 * var_membrane__F / (var_membrane__R * var_membrane__T)) - mParameters[7] * exp((50 - var_chaste_interface__membrane__V) * var_membrane__F / (var_membrane__R * var_membrane__T))) * var_L_type_Ca_channel__FrICa * var_L_type_Ca_channel__P_CaK * mParameters[9] * var_chaste_interface__L_type_Ca_channel_d_gate__d * var_chaste_interface__L_type_Ca_channel_f2ds_gate__f2ds * var_chaste_interface__L_type_Ca_channel_f_gate__f * var_membrane__F / ((1 - exp((50 - var_chaste_interface__membrane__V) * var_membrane__F / (var_membrane__R * var_membrane__T))) * var_membrane__R * var_membrane__T); // nanoA + const double var_L_type_Ca_channel__i_Ca_L_Na_cyt = (1 - var_L_type_Ca_channel__FrICa) * (-50 + var_chaste_interface__membrane__V) * (var_chaste_interface__intracellular_sodium_concentration__Na_i * exp(50 * var_membrane__F / (var_membrane__R * var_membrane__T)) - mParameters[8] * exp((50 - var_chaste_interface__membrane__V) * var_membrane__F / (var_membrane__R * var_membrane__T))) * var_L_type_Ca_channel__P_CaNa * mParameters[9] * var_chaste_interface__L_type_Ca_channel_d_gate__d * var_chaste_interface__L_type_Ca_channel_f2_gate__f2 * var_chaste_interface__L_type_Ca_channel_f_gate__f * var_membrane__F / ((1 - exp((50 - var_chaste_interface__membrane__V) * var_membrane__F / (var_membrane__R * var_membrane__T))) * var_membrane__R * var_membrane__T); // nanoA + const double var_L_type_Ca_channel__i_Ca_L_Na_ds = (-50 + var_chaste_interface__membrane__V) * (var_chaste_interface__intracellular_sodium_concentration__Na_i * exp(50 * var_membrane__F / (var_membrane__R * var_membrane__T)) - mParameters[8] * exp((50 - var_chaste_interface__membrane__V) * var_membrane__F / (var_membrane__R * var_membrane__T))) * var_L_type_Ca_channel__FrICa * var_L_type_Ca_channel__P_CaNa * mParameters[9] * var_chaste_interface__L_type_Ca_channel_d_gate__d * var_chaste_interface__L_type_Ca_channel_f2ds_gate__f2ds * var_chaste_interface__L_type_Ca_channel_f_gate__f * var_membrane__F / ((1 - exp((50 - var_chaste_interface__membrane__V) * var_membrane__F / (var_membrane__R * var_membrane__T))) * var_membrane__R * var_membrane__T); // nanoA + const double var_L_type_Ca_channel__i_Ca_L = var_L_type_Ca_channel__i_Ca_L_Ca_cyt + var_L_type_Ca_channel__i_Ca_L_Ca_ds + var_L_type_Ca_channel__i_Ca_L_K_cyt + var_L_type_Ca_channel__i_Ca_L_K_ds + var_L_type_Ca_channel__i_Ca_L_Na_cyt + var_L_type_Ca_channel__i_Ca_L_Na_ds; // nanoA + const double var_L_type_Ca_channel__i_Ca_L_converted = 0.001 * HeartConfig::Instance()->GetCapacitance() * var_L_type_Ca_channel__i_Ca_L / mParameters[10]; // uA_per_cm2 + const double var_L_type_Ca_channel_f_gate__E0_f = 34 + var_chaste_interface__membrane__V; // millivolt + const double var_L_type_Ca_channel_f_gate__alpha_f = ((var_L_type_Ca_channel_f_gate__delta_f > fabs(var_L_type_Ca_channel_f_gate__E0_f)) ? (25) : (6.25 * var_L_type_Ca_channel_f_gate__E0_f / (-1 + exp(0.25 * var_L_type_Ca_channel_f_gate__E0_f)))); // per_second + const double var_L_type_Ca_channel_f_gate__beta_f = 12 / (1 + exp(-8.5 - 0.25 * var_chaste_interface__membrane__V)); // per_second + const double var_L_type_Ca_channel_f_gate__tau_f = 1 / (var_L_type_Ca_channel_f_gate__alpha_f + var_L_type_Ca_channel_f_gate__beta_f); // second + const double var_fast_sodium_current_h_gate__alpha_h = 20 * exp(-9.375 + 0.125 * mParameters[13] - 0.125 * var_chaste_interface__membrane__V); // per_second + const double var_fast_sodium_current_h_gate__beta_h = 2000 / (1 + 320 * exp(-7.5 + 0.10000000000000001 * mParameters[13] - 0.10000000000000001 * var_chaste_interface__membrane__V)); // per_second + const double var_fast_sodium_current_h_gate__tau_h = 1 / (var_fast_sodium_current_h_gate__alpha_h + var_fast_sodium_current_h_gate__beta_h); // second + const double var_membrane__i_Stim_converted = GetIntracellularAreaStimulus(var_chaste_interface__environment__time_converted); // uA_per_cm2 + const double var_reversal_potentials__E_K = var_membrane__R * var_membrane__T * log(mParameters[7] / var_chaste_interface__intracellular_potassium_concentration__K_i) / var_membrane__F; // millivolt + const double var_rapid_delayed_rectifier_potassium_current__i_Kr = (-var_reversal_potentials__E_K + var_chaste_interface__membrane__V) * (mParameters[15] * var_chaste_interface__rapid_delayed_rectifier_potassium_current_xr1_gate__xr1 + mParameters[16] * var_chaste_interface__rapid_delayed_rectifier_potassium_current_xr2_gate__xr2) / (1 + exp(0.4017857142857143 + 0.044642857142857144 * var_chaste_interface__membrane__V)); // nanoA + const double var_rapid_delayed_rectifier_potassium_current__i_Kr_converted = 0.001 * HeartConfig::Instance()->GetCapacitance() * var_rapid_delayed_rectifier_potassium_current__i_Kr / mParameters[10]; // uA_per_cm2 + const double var_reversal_potentials__E_mh = var_membrane__R * var_membrane__T * log((mParameters[8] + 0.12 * mParameters[7]) / (var_chaste_interface__intracellular_sodium_concentration__Na_i + 0.12 * var_chaste_interface__intracellular_potassium_concentration__K_i)) / var_membrane__F; // millivolt + const double var_fast_sodium_current__i_Na = pow(var_chaste_interface__fast_sodium_current_m_gate__m, 3) * (-var_reversal_potentials__E_mh + var_chaste_interface__membrane__V) * mParameters[11] * var_chaste_interface__fast_sodium_current_h_gate__h; // nanoA + const double var_fast_sodium_current__i_Na_converted = 0.001 * HeartConfig::Instance()->GetCapacitance() * var_fast_sodium_current__i_Na / mParameters[10]; // uA_per_cm2 + const double var_reversal_potentials__P_kna = 0.029999999999999999; // dimensionless + const double var_reversal_potentials__E_Ks = var_membrane__R * var_membrane__T * log((mParameters[8] * var_reversal_potentials__P_kna + mParameters[7]) / (var_chaste_interface__intracellular_sodium_concentration__Na_i * var_reversal_potentials__P_kna + var_chaste_interface__intracellular_potassium_concentration__K_i)) / var_membrane__F; // millivolt + const double var_slow_delayed_rectifier_potassium_current__i_Ks = pow(var_chaste_interface__slow_delayed_rectifier_potassium_current_xs_gate__xs, 2) * (-var_reversal_potentials__E_Ks + var_chaste_interface__membrane__V) * mParameters[17]; // nanoA + const double var_slow_delayed_rectifier_potassium_current__i_Ks_converted = 0.001 * HeartConfig::Instance()->GetCapacitance() * var_slow_delayed_rectifier_potassium_current__i_Ks / mParameters[10]; // uA_per_cm2 + const double var_sodium_calcium_exchanger__FRiNaCa = 0.001; // dimensionless + const double var_sodium_calcium_exchanger__d_NaCa = 0; // dimensionless + const double var_sodium_calcium_exchanger__gamma = 0.5; // dimensionless + const double var_sodium_calcium_exchanger__n_NaCa = 3; // dimensionless + const double var_sodium_calcium_exchanger__i_NaCa_cyt = (1 - var_sodium_calcium_exchanger__FRiNaCa) * (pow(var_chaste_interface__intracellular_sodium_concentration__Na_i, var_sodium_calcium_exchanger__n_NaCa) * mParameters[6] * exp((-2 + var_sodium_calcium_exchanger__n_NaCa) * var_membrane__F * var_chaste_interface__membrane__V * var_sodium_calcium_exchanger__gamma / (var_membrane__R * var_membrane__T)) - pow(mParameters[8], var_sodium_calcium_exchanger__n_NaCa) * var_chaste_interface__intracellular_calcium_concentration__Ca_i * exp((-1 + var_sodium_calcium_exchanger__gamma) * (-2 + var_sodium_calcium_exchanger__n_NaCa) * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * mParameters[18] / ((1 + 144.92753623188406 * var_chaste_interface__intracellular_calcium_concentration__Ca_i) * (1 + (pow(mParameters[8], var_sodium_calcium_exchanger__n_NaCa) * var_chaste_interface__intracellular_calcium_concentration__Ca_i + pow(var_chaste_interface__intracellular_sodium_concentration__Na_i, var_sodium_calcium_exchanger__n_NaCa) * mParameters[6]) * var_sodium_calcium_exchanger__d_NaCa)); // nanoA + const double var_sodium_calcium_exchanger__i_NaCa_ds = (pow(var_chaste_interface__intracellular_sodium_concentration__Na_i, var_sodium_calcium_exchanger__n_NaCa) * mParameters[6] * exp((-2 + var_sodium_calcium_exchanger__n_NaCa) * var_membrane__F * var_chaste_interface__membrane__V * var_sodium_calcium_exchanger__gamma / (var_membrane__R * var_membrane__T)) - pow(mParameters[8], var_sodium_calcium_exchanger__n_NaCa) * var_chaste_interface__intracellular_calcium_concentration__Ca_ds * exp((-1 + var_sodium_calcium_exchanger__gamma) * (-2 + var_sodium_calcium_exchanger__n_NaCa) * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * var_sodium_calcium_exchanger__FRiNaCa * mParameters[18] / ((1 + 144.92753623188406 * var_chaste_interface__intracellular_calcium_concentration__Ca_ds) * (1 + (pow(mParameters[8], var_sodium_calcium_exchanger__n_NaCa) * var_chaste_interface__intracellular_calcium_concentration__Ca_ds + pow(var_chaste_interface__intracellular_sodium_concentration__Na_i, var_sodium_calcium_exchanger__n_NaCa) * mParameters[6]) * var_sodium_calcium_exchanger__d_NaCa)); // nanoA + const double var_sodium_calcium_exchanger__i_NaCa = var_sodium_calcium_exchanger__i_NaCa_cyt + var_sodium_calcium_exchanger__i_NaCa_ds; // nanoA + const double var_sodium_calcium_exchanger__i_NaCa_converted = 0.001 * HeartConfig::Instance()->GetCapacitance() * var_sodium_calcium_exchanger__i_NaCa / mParameters[10]; // uA_per_cm2 + const double var_time_independent_potassium_current__K_mk1 = 10; // millimolar + const double var_time_independent_potassium_current__i_K1 = (-var_reversal_potentials__E_K + var_chaste_interface__membrane__V) * mParameters[7] * mParameters[14] / ((1 + exp(1.25 * (-10 - var_reversal_potentials__E_K + var_chaste_interface__membrane__V) * var_membrane__F / (var_membrane__R * var_membrane__T))) * (mParameters[7] + var_time_independent_potassium_current__K_mk1)); // nanoA + const double var_time_independent_potassium_current__i_K1_converted = 0.001 * HeartConfig::Instance()->GetCapacitance() * var_time_independent_potassium_current__i_K1 / mParameters[10]; // uA_per_cm2 + const double var_transient_outward_current__g_tos = 0; // dimensionless + const double var_transient_outward_current__i_to = (-var_reversal_potentials__E_K + var_chaste_interface__membrane__V) * ((1 - var_transient_outward_current__g_tos) * var_chaste_interface__transient_outward_current_s_gate__s + var_transient_outward_current__g_tos) * mParameters[19] * var_chaste_interface__transient_outward_current_r_gate__r; // nanoA + const double var_transient_outward_current__i_to_converted = 0.001 * HeartConfig::Instance()->GetCapacitance() * var_transient_outward_current__i_to / mParameters[10]; // uA_per_cm2 + + std::vector dqs(12); + dqs[0] = var_calcium_release__i_rel; + dqs[1] = var_L_type_Ca_channel__i_Ca_L_converted; + dqs[2] = var_L_type_Ca_channel_f_gate__tau_f; + dqs[3] = var_fast_sodium_current__i_Na_converted; + dqs[4] = var_fast_sodium_current_h_gate__tau_h; + dqs[5] = var_time_independent_potassium_current__i_K1_converted; + dqs[6] = var_rapid_delayed_rectifier_potassium_current__i_Kr_converted; + dqs[7] = var_slow_delayed_rectifier_potassium_current__i_Ks_converted; + dqs[8] = var_sodium_calcium_exchanger__i_NaCa_converted; + dqs[9] = var_membrane__i_Stim_converted; + dqs[10] = var_transient_outward_current__i_to_converted; + dqs[11] = var_chaste_interface__environment__time_converted; + return dqs; + } + +template<> +void OdeSystemInformation::Initialise(void) +{ + this->mSystemName = "noble_model_1998"; + this->mFreeVariableName = "time"; + this->mFreeVariableUnits = "millisecond"; + + // rY[0]: + this->mVariableNames.push_back("membrane_voltage"); + this->mVariableUnits.push_back("millivolt"); + this->mInitialConditions.push_back(-92.849333); + + // rY[1]: + this->mVariableNames.push_back("cytosolic_calcium_concentration"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(1.4e-05); + + // rY[2]: + this->mVariableNames.push_back("rapid_delayed_rectifier_potassium_current_xr1_gate__xr1"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(1.03e-05); + + // rY[3]: + this->mVariableNames.push_back("rapid_delayed_rectifier_potassium_current_xr2_gate__xr2"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(2e-07); + + // rY[4]: + this->mVariableNames.push_back("slow_delayed_rectifier_potassium_current_xs_gate__xs"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.001302); + + // rY[5]: + this->mVariableNames.push_back("membrane_fast_sodium_current_m_gate"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.0016203); + + // rY[6]: + this->mVariableNames.push_back("membrane_fast_sodium_current_h_gate"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.9944036); + + // rY[7]: + this->mVariableNames.push_back("membrane_L_type_calcium_current_d_gate"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.0); + + // rY[8]: + this->mVariableNames.push_back("membrane_L_type_calcium_current_f_gate"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(1.0); + + // rY[9]: + this->mVariableNames.push_back("membrane_L_type_calcium_current_fCa_gate"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.9349197); + + // rY[10]: + this->mVariableNames.push_back("membrane_L_type_calcium_current_fCa2_gate"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.9651958); + + // rY[11]: + this->mVariableNames.push_back("transient_outward_current_s_gate__s"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.9948645); + + // rY[12]: + this->mVariableNames.push_back("transient_outward_current_r_gate__r"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.0); + + // rY[13]: + this->mVariableNames.push_back("calcium_release__ActFrac"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.0042614); + + // rY[14]: + this->mVariableNames.push_back("calcium_release__ProdFrac"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.4068154); + + // rY[15]: + this->mVariableNames.push_back("cytosolic_sodium_concentration"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(7.3321223); + + // rY[16]: + this->mVariableNames.push_back("cytosolic_potassium_concentration"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(136.5644281); + + // rY[17]: + this->mVariableNames.push_back("dyadic_space_calcium_concentration"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(1.88e-05); + + // rY[18]: + this->mVariableNames.push_back("intracellular_calcium_concentration__Ca_up"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(0.4531889); + + // rY[19]: + this->mVariableNames.push_back("JSR_calcium_concentration"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(0.4481927); + + // rY[20]: + this->mVariableNames.push_back("intracellular_calcium_concentration__Ca_Calmod"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(0.0005555); + + // rY[21]: + this->mVariableNames.push_back("intracellular_calcium_concentration__Ca_Trop"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(0.0003542); + + // mParameters[0]: + this->mParameterNames.push_back("SR_leak_current_max"); + this->mParameterUnits.push_back("per_second"); + + // mParameters[1]: + this->mParameterNames.push_back("SR_release_current_max"); + this->mParameterUnits.push_back("per_second"); + + // mParameters[2]: + this->mParameterNames.push_back("SR_release_kmcacyt"); + this->mParameterUnits.push_back("millimolar"); + + // mParameters[3]: + this->mParameterNames.push_back("SR_release_kmcads"); + this->mParameterUnits.push_back("millimolar"); + + // mParameters[4]: + this->mParameterNames.push_back("SR_uptake_current_max"); + this->mParameterUnits.push_back("dimensionless"); + + // mParameters[5]: + this->mParameterNames.push_back("concentration_clamp_onoff"); + this->mParameterUnits.push_back("dimensionless"); + + // mParameters[6]: + this->mParameterNames.push_back("extracellular_calcium_concentration"); + this->mParameterUnits.push_back("millimolar"); + + // mParameters[7]: + this->mParameterNames.push_back("extracellular_potassium_concentration"); + this->mParameterUnits.push_back("millimolar"); + + // mParameters[8]: + this->mParameterNames.push_back("extracellular_sodium_concentration"); + this->mParameterUnits.push_back("millimolar"); + + // mParameters[9]: + this->mParameterNames.push_back("membrane_L_type_calcium_current_conductance"); + this->mParameterUnits.push_back("nanoA_per_millimolar"); + + // mParameters[10]: + this->mParameterNames.push_back("membrane_capacitance"); + this->mParameterUnits.push_back("microF"); + + // mParameters[11]: + this->mParameterNames.push_back("membrane_fast_sodium_current_conductance"); + this->mParameterUnits.push_back("microS"); + + // mParameters[12]: + this->mParameterNames.push_back("membrane_fast_sodium_current_reduced_inactivation"); + this->mParameterUnits.push_back("dimensionless"); + + // mParameters[13]: + this->mParameterNames.push_back("membrane_fast_sodium_current_shift_inactivation"); + this->mParameterUnits.push_back("millivolt"); + + // mParameters[14]: + this->mParameterNames.push_back("membrane_inward_rectifier_potassium_current_conductance"); + this->mParameterUnits.push_back("microS"); + + // mParameters[15]: + this->mParameterNames.push_back("membrane_rapid_delayed_rectifier_potassium_current_conductance1"); + this->mParameterUnits.push_back("microS"); + + // mParameters[16]: + this->mParameterNames.push_back("membrane_rapid_delayed_rectifier_potassium_current_conductance2"); + this->mParameterUnits.push_back("microS"); + + // mParameters[17]: + this->mParameterNames.push_back("membrane_slow_delayed_rectifier_potassium_current_conductance"); + this->mParameterUnits.push_back("microS"); + + // mParameters[18]: + this->mParameterNames.push_back("membrane_sodium_calcium_exchanger_current_conductance"); + this->mParameterUnits.push_back("nanoA"); + + // mParameters[19]: + this->mParameterNames.push_back("membrane_transient_outward_current_conductance"); + this->mParameterUnits.push_back("microS"); + + // Derived Quantity index [0]: + this->mDerivedQuantityNames.push_back("SR_release_current"); + this->mDerivedQuantityUnits.push_back("millimolar_per_second"); + + // Derived Quantity index [1]: + this->mDerivedQuantityNames.push_back("membrane_L_type_calcium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [2]: + this->mDerivedQuantityNames.push_back("membrane_L_type_calcium_current_f_gate_tau"); + this->mDerivedQuantityUnits.push_back("second"); + + // Derived Quantity index [3]: + this->mDerivedQuantityNames.push_back("membrane_fast_sodium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [4]: + this->mDerivedQuantityNames.push_back("membrane_fast_sodium_current_h_gate_tau"); + this->mDerivedQuantityUnits.push_back("second"); + + // Derived Quantity index [5]: + this->mDerivedQuantityNames.push_back("membrane_inward_rectifier_potassium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [6]: + this->mDerivedQuantityNames.push_back("membrane_rapid_delayed_rectifier_potassium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [7]: + this->mDerivedQuantityNames.push_back("membrane_slow_delayed_rectifier_potassium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [8]: + this->mDerivedQuantityNames.push_back("membrane_sodium_calcium_exchanger_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [9]: + this->mDerivedQuantityNames.push_back("membrane_stimulus_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [10]: + this->mDerivedQuantityNames.push_back("membrane_transient_outward_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [11]: + this->mDerivedQuantityNames.push_back("time"); + this->mDerivedQuantityUnits.push_back("millisecond"); + + this->mInitialised = true; +} + +// Serialization for Boost >= 1.36 +#include "SerializationExportWrapperForCpp.hpp" +CHASTE_CLASS_EXPORT(Chaste_CG) +extern "C" +{ + AbstractCardiacCellInterface* MakeCardiacCell( + boost::shared_ptr pSolver, + boost::shared_ptr pStimulus) + { + return new Chaste_CG(pSolver, pStimulus); + } + +} diff --git a/chaste_codegen/tests/numerical/baseline/Normal/output_class.h b/chaste_codegen/tests/numerical/baseline/Normal/output_class.h new file mode 100644 index 00000000..ddfabca9 --- /dev/null +++ b/chaste_codegen/tests/numerical/baseline/Normal/output_class.h @@ -0,0 +1,88 @@ +#ifndef CHASTE_CG_HPP_ +#define CHASTE_CG_HPP_ + +//! @file +//! +//! This source file was generated from CellML by chaste_codegen version (version omitted as unimportant) +//! +//! Model: noble_model_1998 +//! +//! Processed by chaste_codegen: https://github.com/ModellingWebLab/chaste-codegen +//! (translator: chaste_codegen, model type: Normal) +//! on (date omitted as unimportant) +//! +//! + +#include "ChasteSerialization.hpp" +#include +#include "AbstractDynamicallyLoadableEntity.hpp" +#include "AbstractStimulusFunction.hpp" +#include "AbstractCardiacCell.hpp" + +class Chaste_CG : public AbstractCardiacCell, public AbstractDynamicallyLoadableEntity +{ + friend class boost::serialization::access; + template + void serialize(Archive & archive, const unsigned int version) + { + archive & boost::serialization::base_object(*this); + archive & boost::serialization::base_object(*this); + } + + // + // Settable parameters and readable variables + // + +private: + static AbstractCardiacCell* CreateMethod(boost::shared_ptr p_solver, boost::shared_ptr p_stimulus); + static bool registered; +private: +const bool is_concentration[22] = {false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, true, true, true, false, true, false, false}; +const bool is_probability[22] = {false, false, false, false, false, true, true, true, true, true, true, false, false, false, false, false, false, false, false, false, false, false}; +public: + + boost::shared_ptr UseCellMLDefaultStimulus(); + double GetIntracellularCalciumConcentration(); + Chaste_CG(boost::shared_ptr pSolver, boost::shared_ptr pIntracellularStimulus); + ~Chaste_CG(); + void VerifyStateVariables(); + double GetIIonic(const std::vector* pStateVariables=NULL); + void EvaluateYDerivatives(double var_chaste_interface__environment__time_converted, const std::vector& rY, std::vector& rDY); + + std::vector ComputeDerivedQuantities(double var_chaste_interface__environment__time_converted, const std::vector & rY); +}; + +// Needs to be included last +#include "SerializationExportWrapper.hpp" +CHASTE_CLASS_EXPORT(Chaste_CG) + +namespace boost +{ + namespace serialization + { + template + inline void save_construct_data( + Archive & ar, const Chaste_CG * t, const unsigned int fileVersion) + { + const boost::shared_ptr p_solver = t->GetSolver(); + const boost::shared_ptr p_stimulus = t->GetStimulusFunction(); + ar << p_solver; + ar << p_stimulus; + } + + template + inline void load_construct_data( + Archive & ar, Chaste_CG * t, const unsigned int fileVersion) + { + boost::shared_ptr p_solver; + boost::shared_ptr p_stimulus; + ar >> p_solver; + ar >> p_stimulus; + ::new(t)Chaste_CG(p_solver, p_stimulus); + } + + } + +} + +#endif // CHASTE_CG_HPP_ \ No newline at end of file diff --git a/chaste_codegen/tests/numerical/baseline/Normal/test_V_not_state_derived_quant.cpp b/chaste_codegen/tests/numerical/baseline/Normal/test_V_not_state_derived_quant.cpp new file mode 100644 index 00000000..bef3b7f2 --- /dev/null +++ b/chaste_codegen/tests/numerical/baseline/Normal/test_V_not_state_derived_quant.cpp @@ -0,0 +1,159 @@ +//! @file +//! +//! This source file was generated from CellML by chaste_codegen version (version omitted as unimportant) +//! +//! Model: component_with_units +//! +//! Processed by chaste_codegen: https://github.com/ModellingWebLab/chaste-codegen +//! (translator: chaste_codegen, model type: Normal) +//! on (date omitted as unimportant) +//! +//! + +#include "test_V_not_state_derived_quant.hpp" +#include +#include +#include +#include +#include "Exception.hpp" +#include "OdeSystemInformation.hpp" +#include "RegularStimulus.hpp" +#include "HeartConfig.hpp" +#include "IsNan.hpp" +#include "MathsCustomFunctions.hpp" + + + + + + + Celltest_V_not_state_derived_quantFromCellML::Celltest_V_not_state_derived_quantFromCellML(boost::shared_ptr pSolver, boost::shared_ptr pIntracellularStimulus) + : AbstractCardiacCell( + pSolver, + 1, + 0, + pIntracellularStimulus) + { + // Time units: millisecond + // + this->mpSystemInfo = OdeSystemInformation::Instance(); + Init(); + + } + + Celltest_V_not_state_derived_quantFromCellML::~Celltest_V_not_state_derived_quantFromCellML() + { + } + + + void Celltest_V_not_state_derived_quantFromCellML::VerifyStateVariables() + { + std::vector& rY = rGetStateVariables(); + std::string error_message = ""; + + for (unsigned i=0; i < 1; i++) + { + if(std::isnan(rY[i])) + { + error_message += "State variable " + this->rGetStateVariableNames()[i] + " is not a number\n"; + } + if(std::isinf(rY[i])) + { + error_message += "State variable " + this->rGetStateVariableNames()[i] + " has become INFINITE\n"; + } + if(this->is_concentration[i] && rY[i] < 0) + { + error_message += "Concentration " + this->rGetStateVariableNames()[i] + " below 0\n"; + } + if(this->is_probability[i] && rY[i] < 0) + { + error_message += "Probability " + this->rGetStateVariableNames()[i] + " below 0\n"; + } + if(this->is_probability[i] && rY[i] > 1) + { + error_message += "Probability " + this->rGetStateVariableNames()[i] + " above 1\n"; + } + } + if (error_message != ""){ + EXCEPTION(DumpState(error_message)); + } + } + + double Celltest_V_not_state_derived_quantFromCellML::GetIIonic(const std::vector* pStateVariables) + { + // For state variable interpolation (SVI) we read in interpolated state variables, + // otherwise for ionic current interpolation (ICI) we use the state variables of this model (node). + if (!pStateVariables) pStateVariables = &rGetStateVariables(); + const std::vector& rY = *pStateVariables; + + const double var_chaste_interface__i_ionic = 0; // uA_per_cm2 + + const double i_ionic = var_chaste_interface__i_ionic; + EXCEPT_IF_NOT(!std::isnan(i_ionic)); + return i_ionic; + } + + void Celltest_V_not_state_derived_quantFromCellML::EvaluateYDerivatives(double var_chaste_interface__membrane__time_converted, const std::vector& rY, std::vector& rDY) + { + // Inputs: + // Time units: millisecond + + + // Mathematics + + const double var_membrane__V1_orig_deriv = 25; // volt / second + const double d_dt_chaste_interface_var_membrane__V1 = 0.001 * var_membrane__V1_orig_deriv; // volt / millisecond + + if (mSetVoltageDerivativeToZero) + { + + } + else + { + } + + rDY[0] = d_dt_chaste_interface_var_membrane__V1; + } + + std::vector Celltest_V_not_state_derived_quantFromCellML::ComputeDerivedQuantities(double var_chaste_interface__membrane__time_converted, const std::vector & rY) + { + // Inputs: + // Time units: millisecond + + // Mathematics + const double var_membrane__time = 0.001 * var_chaste_interface__membrane__time_converted; // second + const double var_membrane__V_converted = 2000 * var_membrane__time; // millivolt + + std::vector dqs(2); + dqs[0] = var_chaste_interface__membrane__time_converted; + dqs[1] = var_membrane__V_converted; + return dqs; + } + +template<> +void OdeSystemInformation::Initialise(void) +{ + this->mSystemName = "component_with_units"; + this->mFreeVariableName = "membrane__time"; + this->mFreeVariableUnits = "millisecond"; + + // rY[0]: + this->mVariableNames.push_back("membrane__V1"); + this->mVariableUnits.push_back("volt"); + this->mInitialConditions.push_back(-69.1865); + + // Derived Quantity index [0]: + this->mDerivedQuantityNames.push_back("membrane__time"); + this->mDerivedQuantityUnits.push_back("millisecond"); + + // Derived Quantity index [1]: + this->mDerivedQuantityNames.push_back("membrane_voltage"); + this->mDerivedQuantityUnits.push_back("millivolt"); + + this->mInitialised = true; +} + +// Serialization for Boost >= 1.36 +#include "SerializationExportWrapperForCpp.hpp" +CHASTE_CLASS_EXPORT(Celltest_V_not_state_derived_quantFromCellML) + diff --git a/chaste_codegen/tests/numerical/baseline/Normal/test_V_not_state_derived_quant.hpp b/chaste_codegen/tests/numerical/baseline/Normal/test_V_not_state_derived_quant.hpp new file mode 100644 index 00000000..02b23f2f --- /dev/null +++ b/chaste_codegen/tests/numerical/baseline/Normal/test_V_not_state_derived_quant.hpp @@ -0,0 +1,83 @@ +#ifndef CELLTEST_V_NOT_STATE_DERIVED_QUANTFROMCELLML_HPP_ +#define CELLTEST_V_NOT_STATE_DERIVED_QUANTFROMCELLML_HPP_ + +//! @file +//! +//! This source file was generated from CellML by chaste_codegen version (version omitted as unimportant) +//! +//! Model: component_with_units +//! +//! Processed by chaste_codegen: https://github.com/ModellingWebLab/chaste-codegen +//! (translator: chaste_codegen, model type: Normal) +//! on (date omitted as unimportant) +//! +//! + +#include "ChasteSerialization.hpp" +#include +#include "AbstractStimulusFunction.hpp" +#include "AbstractCardiacCell.hpp" + +class Celltest_V_not_state_derived_quantFromCellML : public AbstractCardiacCell +{ + friend class boost::serialization::access; + template + void serialize(Archive & archive, const unsigned int version) + { + archive & boost::serialization::base_object(*this); + + } + + // + // Settable parameters and readable variables + // + + +private: +const bool is_concentration[1] = {false}; +const bool is_probability[1] = {false}; +public: + + Celltest_V_not_state_derived_quantFromCellML(boost::shared_ptr pSolver, boost::shared_ptr pIntracellularStimulus); + ~Celltest_V_not_state_derived_quantFromCellML(); + void VerifyStateVariables(); + double GetIIonic(const std::vector* pStateVariables=NULL); + void EvaluateYDerivatives(double var_chaste_interface__membrane__time_converted, const std::vector& rY, std::vector& rDY); + + std::vector ComputeDerivedQuantities(double var_chaste_interface__membrane__time_converted, const std::vector & rY); +}; + +// Needs to be included last +#include "SerializationExportWrapper.hpp" +CHASTE_CLASS_EXPORT(Celltest_V_not_state_derived_quantFromCellML) + +namespace boost +{ + namespace serialization + { + template + inline void save_construct_data( + Archive & ar, const Celltest_V_not_state_derived_quantFromCellML * t, const unsigned int fileVersion) + { + const boost::shared_ptr p_solver = t->GetSolver(); + const boost::shared_ptr p_stimulus = t->GetStimulusFunction(); + ar << p_solver; + ar << p_stimulus; + } + + template + inline void load_construct_data( + Archive & ar, Celltest_V_not_state_derived_quantFromCellML * t, const unsigned int fileVersion) + { + boost::shared_ptr p_solver; + boost::shared_ptr p_stimulus; + ar >> p_solver; + ar >> p_stimulus; + ::new(t)Celltest_V_not_state_derived_quantFromCellML(p_solver, p_stimulus); + } + + } + +} + +#endif // CELLTEST_V_NOT_STATE_DERIVED_QUANTFROMCELLML_HPP_ \ No newline at end of file diff --git a/chaste_codegen/tests/numerical/baseline/Normal/test_V_not_state_mparam.cpp b/chaste_codegen/tests/numerical/baseline/Normal/test_V_not_state_mparam.cpp new file mode 100644 index 00000000..53e8c534 --- /dev/null +++ b/chaste_codegen/tests/numerical/baseline/Normal/test_V_not_state_mparam.cpp @@ -0,0 +1,158 @@ +//! @file +//! +//! This source file was generated from CellML by chaste_codegen version (version omitted as unimportant) +//! +//! Model: component_with_units +//! +//! Processed by chaste_codegen: https://github.com/ModellingWebLab/chaste-codegen +//! (translator: chaste_codegen, model type: Normal) +//! on (date omitted as unimportant) +//! +//! + +#include "test_V_not_state_mparam.hpp" +#include +#include +#include +#include +#include "Exception.hpp" +#include "OdeSystemInformation.hpp" +#include "RegularStimulus.hpp" +#include "HeartConfig.hpp" +#include "IsNan.hpp" +#include "MathsCustomFunctions.hpp" + + + + + + + Celltest_V_not_state_mparamFromCellML::Celltest_V_not_state_mparamFromCellML(boost::shared_ptr pSolver, boost::shared_ptr pIntracellularStimulus) + : AbstractCardiacCell( + pSolver, + 1, + 0, + pIntracellularStimulus) + { + // Time units: millisecond + // + this->mpSystemInfo = OdeSystemInformation::Instance(); + Init(); + + } + + Celltest_V_not_state_mparamFromCellML::~Celltest_V_not_state_mparamFromCellML() + { + } + + + void Celltest_V_not_state_mparamFromCellML::VerifyStateVariables() + { + std::vector& rY = rGetStateVariables(); + std::string error_message = ""; + + for (unsigned i=0; i < 1; i++) + { + if(std::isnan(rY[i])) + { + error_message += "State variable " + this->rGetStateVariableNames()[i] + " is not a number\n"; + } + if(std::isinf(rY[i])) + { + error_message += "State variable " + this->rGetStateVariableNames()[i] + " has become INFINITE\n"; + } + if(this->is_concentration[i] && rY[i] < 0) + { + error_message += "Concentration " + this->rGetStateVariableNames()[i] + " below 0\n"; + } + if(this->is_probability[i] && rY[i] < 0) + { + error_message += "Probability " + this->rGetStateVariableNames()[i] + " below 0\n"; + } + if(this->is_probability[i] && rY[i] > 1) + { + error_message += "Probability " + this->rGetStateVariableNames()[i] + " above 1\n"; + } + } + if (error_message != ""){ + EXCEPTION(DumpState(error_message)); + } + } + + double Celltest_V_not_state_mparamFromCellML::GetIIonic(const std::vector* pStateVariables) + { + // For state variable interpolation (SVI) we read in interpolated state variables, + // otherwise for ionic current interpolation (ICI) we use the state variables of this model (node). + if (!pStateVariables) pStateVariables = &rGetStateVariables(); + const std::vector& rY = *pStateVariables; + + const double var_chaste_interface__i_ionic = 0; // uA_per_cm2 + + const double i_ionic = var_chaste_interface__i_ionic; + EXCEPT_IF_NOT(!std::isnan(i_ionic)); + return i_ionic; + } + + void Celltest_V_not_state_mparamFromCellML::EvaluateYDerivatives(double var_chaste_interface__membrane__time_converted, const std::vector& rY, std::vector& rDY) + { + // Inputs: + // Time units: millisecond + + + // Mathematics + + const double var_membrane__V1_orig_deriv = 25; // volt / second + const double d_dt_chaste_interface_var_membrane__V1 = 0.001 * var_membrane__V1_orig_deriv; // volt / millisecond + + if (mSetVoltageDerivativeToZero) + { + + } + else + { + } + + rDY[0] = d_dt_chaste_interface_var_membrane__V1; + } + + std::vector Celltest_V_not_state_mparamFromCellML::ComputeDerivedQuantities(double var_chaste_interface__membrane__time_converted, const std::vector & rY) + { + // Inputs: + // Time units: millisecond + + // Mathematics + const double var_membrane__V_converted = -75000; // millivolt + + std::vector dqs(2); + dqs[0] = var_chaste_interface__membrane__time_converted; + dqs[1] = var_membrane__V_converted; + return dqs; + } + +template<> +void OdeSystemInformation::Initialise(void) +{ + this->mSystemName = "component_with_units"; + this->mFreeVariableName = "membrane__time"; + this->mFreeVariableUnits = "millisecond"; + + // rY[0]: + this->mVariableNames.push_back("membrane__V1"); + this->mVariableUnits.push_back("volt"); + this->mInitialConditions.push_back(-69.1865); + + // Derived Quantity index [0]: + this->mDerivedQuantityNames.push_back("membrane__time"); + this->mDerivedQuantityUnits.push_back("millisecond"); + + // Derived Quantity index [1]: + this->mDerivedQuantityNames.push_back("membrane_voltage"); + this->mDerivedQuantityUnits.push_back("millivolt"); + + this->mInitialised = true; +} + +// Serialization for Boost >= 1.36 +#include "SerializationExportWrapperForCpp.hpp" +CHASTE_CLASS_EXPORT(Celltest_V_not_state_mparamFromCellML) + diff --git a/chaste_codegen/tests/numerical/baseline/Normal/test_V_not_state_mparam.hpp b/chaste_codegen/tests/numerical/baseline/Normal/test_V_not_state_mparam.hpp new file mode 100644 index 00000000..cf084a0d --- /dev/null +++ b/chaste_codegen/tests/numerical/baseline/Normal/test_V_not_state_mparam.hpp @@ -0,0 +1,83 @@ +#ifndef CELLTEST_V_NOT_STATE_MPARAMFROMCELLML_HPP_ +#define CELLTEST_V_NOT_STATE_MPARAMFROMCELLML_HPP_ + +//! @file +//! +//! This source file was generated from CellML by chaste_codegen version (version omitted as unimportant) +//! +//! Model: component_with_units +//! +//! Processed by chaste_codegen: https://github.com/ModellingWebLab/chaste-codegen +//! (translator: chaste_codegen, model type: Normal) +//! on (date omitted as unimportant) +//! +//! + +#include "ChasteSerialization.hpp" +#include +#include "AbstractStimulusFunction.hpp" +#include "AbstractCardiacCell.hpp" + +class Celltest_V_not_state_mparamFromCellML : public AbstractCardiacCell +{ + friend class boost::serialization::access; + template + void serialize(Archive & archive, const unsigned int version) + { + archive & boost::serialization::base_object(*this); + + } + + // + // Settable parameters and readable variables + // + + +private: +const bool is_concentration[1] = {false}; +const bool is_probability[1] = {false}; +public: + + Celltest_V_not_state_mparamFromCellML(boost::shared_ptr pSolver, boost::shared_ptr pIntracellularStimulus); + ~Celltest_V_not_state_mparamFromCellML(); + void VerifyStateVariables(); + double GetIIonic(const std::vector* pStateVariables=NULL); + void EvaluateYDerivatives(double var_chaste_interface__membrane__time_converted, const std::vector& rY, std::vector& rDY); + + std::vector ComputeDerivedQuantities(double var_chaste_interface__membrane__time_converted, const std::vector & rY); +}; + +// Needs to be included last +#include "SerializationExportWrapper.hpp" +CHASTE_CLASS_EXPORT(Celltest_V_not_state_mparamFromCellML) + +namespace boost +{ + namespace serialization + { + template + inline void save_construct_data( + Archive & ar, const Celltest_V_not_state_mparamFromCellML * t, const unsigned int fileVersion) + { + const boost::shared_ptr p_solver = t->GetSolver(); + const boost::shared_ptr p_stimulus = t->GetStimulusFunction(); + ar << p_solver; + ar << p_stimulus; + } + + template + inline void load_construct_data( + Archive & ar, Celltest_V_not_state_mparamFromCellML * t, const unsigned int fileVersion) + { + boost::shared_ptr p_solver; + boost::shared_ptr p_stimulus; + ar >> p_solver; + ar >> p_stimulus; + ::new(t)Celltest_V_not_state_mparamFromCellML(p_solver, p_stimulus); + } + + } + +} + +#endif // CELLTEST_V_NOT_STATE_MPARAMFROMCELLML_HPP_ \ No newline at end of file diff --git a/chaste_codegen/tests/numerical/baseline/Normal/zhang_SAN_model_2000_all.cpp b/chaste_codegen/tests/numerical/baseline/Normal/zhang_SAN_model_2000_all.cpp new file mode 100644 index 00000000..b10d434c --- /dev/null +++ b/chaste_codegen/tests/numerical/baseline/Normal/zhang_SAN_model_2000_all.cpp @@ -0,0 +1,616 @@ +//! @file +//! +//! This source file was generated from CellML by chaste_codegen version (version omitted as unimportant) +//! +//! Model: zhang_SAN_model_2000_all +//! +//! Processed by chaste_codegen: https://github.com/ModellingWebLab/chaste-codegen +//! (translator: chaste_codegen, model type: Normal) +//! on (date omitted as unimportant) +//! +//! + +#include "zhang_SAN_model_2000_all.hpp" +#include +#include +#include +#include "Exception.hpp" +#include "Warnings.hpp" +#include "OdeSystemInformation.hpp" +#include "RegularStimulus.hpp" +#include "HeartConfig.hpp" +#include "IsNan.hpp" +#include "MathsCustomFunctions.hpp" + + + + Cellzhang_SAN_model_2000_allFromCellML::Cellzhang_SAN_model_2000_allFromCellML(boost::shared_ptr pSolver, boost::shared_ptr pIntracellularStimulus) + : AbstractCardiacCell( + pSolver, + 15, + 0, + pIntracellularStimulus) + { + // Time units: millisecond + // + this->mpSystemInfo = OdeSystemInformation::Instance(); + Init(); + + } + + Cellzhang_SAN_model_2000_allFromCellML::~Cellzhang_SAN_model_2000_allFromCellML() + { + } + + + double Cellzhang_SAN_model_2000_allFromCellML::GetIIonic(const std::vector* pStateVariables) + { + // For state variable interpolation (SVI) we read in interpolated state variables, + // otherwise for ionic current interpolation (ICI) we use the state variables of this model (node). + if (!pStateVariables) pStateVariables = &rGetStateVariables(); + const std::vector& rY = *pStateVariables; + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -39.013558536 + double var_chaste_interface__sodium_current_m_gate__m = rY[1]; + // Units: dimensionless; Initial value: 0.092361701692 + double var_chaste_interface__sodium_current_h_gate__h1 = rY[2]; + // Units: dimensionless; Initial value: 0.015905380261 + double var_chaste_interface__sodium_current_h_gate__h2 = rY[3]; + // Units: dimensionless; Initial value: 0.01445216109 + double var_chaste_interface__L_type_Ca_channel_d_gate__d_L = rY[4]; + // Units: dimensionless; Initial value: 0.04804900895 + double var_chaste_interface__L_type_Ca_channel_f_gate__f_L = rY[5]; + // Units: dimensionless; Initial value: 0.48779845203 + double var_chaste_interface__T_type_Ca_channel_d_gate__d_T = rY[6]; + // Units: dimensionless; Initial value: 0.42074047435 + double var_chaste_interface__T_type_Ca_channel_f_gate__f_T = rY[7]; + // Units: dimensionless; Initial value: 0.038968420558 + double var_chaste_interface__four_AP_sensitive_currents_q_gate__q = rY[8]; + // Units: dimensionless; Initial value: 0.29760539675 + double var_chaste_interface__four_AP_sensitive_currents_r_gate__r = rY[9]; + // Units: dimensionless; Initial value: 0.064402950262 + double var_chaste_interface__rapid_delayed_rectifying_potassium_current_P_af_gate__P_af = rY[10]; + // Units: dimensionless; Initial value: 0.13034201158 + double var_chaste_interface__rapid_delayed_rectifying_potassium_current_P_as_gate__P_as = rY[11]; + // Units: dimensionless; Initial value: 0.46960956028 + double var_chaste_interface__rapid_delayed_rectifying_potassium_current_P_i_gate__P_i = rY[12]; + // Units: dimensionless; Initial value: 0.87993375273 + double var_chaste_interface__slow_delayed_rectifying_potassium_current_xs_gate__xs = rY[13]; + // Units: dimensionless; Initial value: 0.082293827208 + double var_chaste_interface__hyperpolarisation_activated_current_y_gate__y = rY[14]; + // Units: dimensionless; Initial value: 0.03889291759 + + const double var_L_type_Ca_channel__E_Ca_L = 46.399999999999999; // millivolt + const double var_L_type_Ca_channel__g_Ca_L_Centre_0DCapable = 0.0057938; // microS + const double var_L_type_Ca_channel__g_Ca_L_Centre_1DCapable = 0.0082000000000000007; // microS + const double var_L_type_Ca_channel__g_Ca_L_Centre_Published = 0.0057999999999999996; // microS + const double var_L_type_Ca_channel__g_Ca_L_Periphery_0DCapable = 0.065886479999999997; // microS + const double var_L_type_Ca_channel__g_Ca_L_Periphery_1DCapable = 0.0659; // microS + const double var_L_type_Ca_channel__g_Ca_L_Periphery_Published = 0.0659; // microS + const double var_T_type_Ca_channel__E_Ca_T = 45.0; // millivolt + const double var_T_type_Ca_channel__g_Ca_T_Centre_0DCapable = 0.0042780600000000002; // microS + const double var_T_type_Ca_channel__g_Ca_T_Centre_1DCapable = 0.0020999999999999999; // microS + const double var_T_type_Ca_channel__g_Ca_T_Centre_Published = 0.0043; // microS + const double var_T_type_Ca_channel__g_Ca_T_Periphery_0DCapable = 0.0138823; // microS + const double var_T_type_Ca_channel__g_Ca_T_Periphery_1DCapable = 0.00694; // microS + const double var_T_type_Ca_channel__g_Ca_T_Periphery_Published = 0.013899999999999999; // microS + const double var_calcium_background_current__g_b_Ca_Centre_0DCapable = 1.3236e-5; // microS + const double var_calcium_background_current__g_b_Ca_Centre_1DCapable = 1.323e-5; // microS + const double var_calcium_background_current__g_b_Ca_Centre_Published = 1.3200000000000001e-5; // microS + const double var_calcium_background_current__g_b_Ca_Periphery_0DCapable = 4.2951999999999998e-5; // microS + const double var_calcium_background_current__g_b_Ca_Periphery_1DCapable = 4.2899999999999999e-5; // microS + const double var_calcium_background_current__g_b_Ca_Periphery_Published = 4.3000000000000002e-5; // microS + const double var_four_AP_sensitive_currents__g_sus_Centre_0DCapable = 6.6455040000000003e-5; // microS + const double var_four_AP_sensitive_currents__g_sus_Centre_1DCapable = 0.00026600000000000001; // microS + const double var_four_AP_sensitive_currents__g_sus_Centre_Published = 6.6500000000000004e-5; // microS + const double var_four_AP_sensitive_currents__g_sus_Periphery_0DCapable = 0.01138376; // microS + const double var_four_AP_sensitive_currents__g_sus_Periphery_1DCapable = 0.0114; // microS + const double var_four_AP_sensitive_currents__g_sus_Periphery_Published = 0.0114; // microS + const double var_four_AP_sensitive_currents__g_to_Centre_0DCapable = 0.0049049999999999996; // microS + const double var_four_AP_sensitive_currents__g_to_Centre_1DCapable = 0.0049049999999999996; // microS + const double var_four_AP_sensitive_currents__g_to_Centre_Published = 0.0049100000000000003; // microS + const double var_four_AP_sensitive_currents__g_to_Periphery_0DCapable = 0.036495; // microS + const double var_four_AP_sensitive_currents__g_to_Periphery_1DCapable = 0.036499999999999998; // microS + const double var_four_AP_sensitive_currents__g_to_Periphery_Published = 0.036490000000000002; // microS + const double var_hyperpolarisation_activated_current__g_f_K_Centre_0DCapable = 0.0005465; // microS + const double var_hyperpolarisation_activated_current__g_f_K_Centre_1DCapable = 0.000437; // microS + const double var_hyperpolarisation_activated_current__g_f_K_Centre_Published = 0.00054799999999999998; // microS + const double var_hyperpolarisation_activated_current__g_f_K_Periphery_0DCapable = 0.006875; // microS + const double var_hyperpolarisation_activated_current__g_f_K_Periphery_1DCapable = 0.0054999999999999997; // microS + const double var_hyperpolarisation_activated_current__g_f_K_Periphery_Published = 0.0068999999999999999; // microS + const double var_hyperpolarisation_activated_current__g_f_Na_Centre_0DCapable = 0.0005465; // microS + const double var_hyperpolarisation_activated_current__g_f_Na_Centre_1DCapable = 0.000437; // microS + const double var_hyperpolarisation_activated_current__g_f_Na_Centre_Published = 0.00054799999999999998; // microS + const double var_hyperpolarisation_activated_current__g_f_Na_Periphery_0DCapable = 0.006875; // microS + const double var_hyperpolarisation_activated_current__g_f_Na_Periphery_1DCapable = 0.0054999999999999997; // microS + const double var_hyperpolarisation_activated_current__g_f_Na_Periphery_Published = 0.0068999999999999999; // microS + const double var_ionic_concentrations__Ca_i = 0.0001; // millimolar + const double var_ionic_concentrations__Ca_o = 2.0; // millimolar + const double var_ionic_concentrations__K_i = 140.0; // millimolar + const double var_ionic_concentrations__K_o = 5.4000000000000004; // millimolar + const double var_ionic_concentrations__Na_i = 8.0; // millimolar + const double var_ionic_concentrations__Na_o = 140.0; // millimolar + const double var_membrane__F = 96845.0; // coulomb_per_mole + const double var_membrane__FCellConstant = 1.0309347; // dimensionless + const double var_membrane__R = 8314.0; // millijoule_per_mole_kelvin + const double var_membrane__T = 310.0; // kelvin + const double var_membrane__Version = 1.0; // dimensionless + const double var_membrane__dCell = 0; // dimensionless + const double var_membrane__FCell = ((var_membrane__Version == 0) ? (0.35666666666666669 * (-0.10000000000000001 + 3.0 * var_membrane__dCell) / (1.0 + 0.77449999999999997 * exp(6.9491525423728815 - 10.16949152542373 * var_membrane__dCell))) : ((var_membrane__Version == 1.0) ? (var_membrane__FCellConstant * var_membrane__dCell / (1.0 + 0.77449999999999997 * exp(6.9491525423728815 - 10.16949152542373 * var_membrane__dCell))) : (1.0343333333333333 * var_membrane__dCell / (1.0 + 0.77449999999999997 * exp(12.564102564102564 - 14.871794871794872 * var_membrane__dCell))))); // dimensionless + const double var_L_type_Ca_channel__g_Ca_L = ((var_membrane__Version == 0) ? ((-var_L_type_Ca_channel__g_Ca_L_Centre_Published + var_L_type_Ca_channel__g_Ca_L_Periphery_Published) * var_membrane__FCell + var_L_type_Ca_channel__g_Ca_L_Centre_Published) : ((var_membrane__Version == 1.0) ? ((-var_L_type_Ca_channel__g_Ca_L_Centre_0DCapable + var_L_type_Ca_channel__g_Ca_L_Periphery_0DCapable) * var_membrane__FCell + var_L_type_Ca_channel__g_Ca_L_Centre_0DCapable) : ((-var_L_type_Ca_channel__g_Ca_L_Centre_1DCapable + var_L_type_Ca_channel__g_Ca_L_Periphery_1DCapable) * var_membrane__FCell + var_L_type_Ca_channel__g_Ca_L_Centre_1DCapable))); // microS + const double var_L_type_Ca_channel__i_Ca_L = (-var_L_type_Ca_channel__E_Ca_L + var_chaste_interface__membrane__V) * (0.0060000000000000001 / (1.0 + exp(-2.3500000000000001 - 0.16666666666666666 * var_chaste_interface__membrane__V)) + var_chaste_interface__L_type_Ca_channel_d_gate__d_L * var_chaste_interface__L_type_Ca_channel_f_gate__f_L) * var_L_type_Ca_channel__g_Ca_L; // nanoA + const double var_T_type_Ca_channel__g_Ca_T = ((var_membrane__Version == 0) ? ((-var_T_type_Ca_channel__g_Ca_T_Centre_Published + var_T_type_Ca_channel__g_Ca_T_Periphery_Published) * var_membrane__FCell + var_T_type_Ca_channel__g_Ca_T_Centre_Published) : ((var_membrane__Version == 1.0) ? ((-var_T_type_Ca_channel__g_Ca_T_Centre_0DCapable + var_T_type_Ca_channel__g_Ca_T_Periphery_0DCapable) * var_membrane__FCell + var_T_type_Ca_channel__g_Ca_T_Centre_0DCapable) : ((-var_T_type_Ca_channel__g_Ca_T_Centre_1DCapable + var_T_type_Ca_channel__g_Ca_T_Periphery_1DCapable) * var_membrane__FCell + var_T_type_Ca_channel__g_Ca_T_Centre_1DCapable))); // microS + const double var_T_type_Ca_channel__i_Ca_T = (-var_T_type_Ca_channel__E_Ca_T + var_chaste_interface__membrane__V) * var_T_type_Ca_channel__g_Ca_T * var_chaste_interface__T_type_Ca_channel_d_gate__d_T * var_chaste_interface__T_type_Ca_channel_f_gate__f_T; // nanoA + const double var_calcium_background_current__g_b_Ca = ((var_membrane__Version == 0) ? ((-var_calcium_background_current__g_b_Ca_Centre_Published + var_calcium_background_current__g_b_Ca_Periphery_Published) * var_membrane__FCell + var_calcium_background_current__g_b_Ca_Centre_Published) : ((var_membrane__Version == 1.0) ? ((-var_calcium_background_current__g_b_Ca_Centre_0DCapable + var_calcium_background_current__g_b_Ca_Periphery_0DCapable) * var_membrane__FCell + var_calcium_background_current__g_b_Ca_Centre_0DCapable) : ((-var_calcium_background_current__g_b_Ca_Centre_1DCapable + var_calcium_background_current__g_b_Ca_Periphery_1DCapable) * var_membrane__FCell + var_calcium_background_current__g_b_Ca_Centre_1DCapable))); // microS + const double var_four_AP_sensitive_currents__g_sus = ((var_membrane__Version == 0) ? ((-var_four_AP_sensitive_currents__g_sus_Centre_Published + var_four_AP_sensitive_currents__g_sus_Periphery_Published) * var_membrane__FCell + var_four_AP_sensitive_currents__g_sus_Centre_Published) : ((var_membrane__Version == 1.0) ? ((-var_four_AP_sensitive_currents__g_sus_Centre_0DCapable + var_four_AP_sensitive_currents__g_sus_Periphery_0DCapable) * var_membrane__FCell + var_four_AP_sensitive_currents__g_sus_Centre_0DCapable) : ((-var_four_AP_sensitive_currents__g_sus_Centre_1DCapable + var_four_AP_sensitive_currents__g_sus_Periphery_1DCapable) * var_membrane__FCell + var_four_AP_sensitive_currents__g_sus_Centre_1DCapable))); // microS + const double var_four_AP_sensitive_currents__g_to = ((var_membrane__Version == 0) ? ((-var_four_AP_sensitive_currents__g_to_Centre_Published + var_four_AP_sensitive_currents__g_to_Periphery_Published) * var_membrane__FCell + var_four_AP_sensitive_currents__g_to_Centre_Published) : ((var_membrane__Version == 1.0) ? ((-var_four_AP_sensitive_currents__g_to_Centre_0DCapable + var_four_AP_sensitive_currents__g_to_Periphery_0DCapable) * var_membrane__FCell + var_four_AP_sensitive_currents__g_to_Centre_0DCapable) : ((-var_four_AP_sensitive_currents__g_to_Centre_1DCapable + var_four_AP_sensitive_currents__g_to_Periphery_1DCapable) * var_membrane__FCell + var_four_AP_sensitive_currents__g_to_Centre_1DCapable))); // microS + const double var_hyperpolarisation_activated_current__g_f_K = ((var_membrane__Version == 0) ? ((-var_hyperpolarisation_activated_current__g_f_K_Centre_Published + var_hyperpolarisation_activated_current__g_f_K_Periphery_Published) * var_membrane__FCell + var_hyperpolarisation_activated_current__g_f_K_Centre_Published) : ((var_membrane__Version == 1.0) ? ((-var_hyperpolarisation_activated_current__g_f_K_Centre_0DCapable + var_hyperpolarisation_activated_current__g_f_K_Periphery_0DCapable) * var_membrane__FCell + var_hyperpolarisation_activated_current__g_f_K_Centre_0DCapable) : ((-var_hyperpolarisation_activated_current__g_f_K_Centre_1DCapable + var_hyperpolarisation_activated_current__g_f_K_Periphery_1DCapable) * var_membrane__FCell + var_hyperpolarisation_activated_current__g_f_K_Centre_1DCapable))); // microS + const double var_hyperpolarisation_activated_current__g_f_Na = ((var_membrane__Version == 0) ? ((-var_hyperpolarisation_activated_current__g_f_Na_Centre_Published + var_hyperpolarisation_activated_current__g_f_Na_Periphery_Published) * var_membrane__FCell + var_hyperpolarisation_activated_current__g_f_Na_Centre_Published) : ((var_membrane__Version == 1.0) ? ((-var_hyperpolarisation_activated_current__g_f_Na_Centre_0DCapable + var_hyperpolarisation_activated_current__g_f_Na_Periphery_0DCapable) * var_membrane__FCell + var_hyperpolarisation_activated_current__g_f_Na_Centre_0DCapable) : ((-var_hyperpolarisation_activated_current__g_f_Na_Centre_1DCapable + var_hyperpolarisation_activated_current__g_f_Na_Periphery_1DCapable) * var_membrane__FCell + var_hyperpolarisation_activated_current__g_f_Na_Centre_1DCapable))); // microS + const double var_persistent_calcium_current__i_Ca_p_max_Centre_0DCapable = 0; // nanoA + const double var_persistent_calcium_current__i_Ca_p_max_Centre_1DCapable = 0.0041999999999999997; // nanoA + const double var_persistent_calcium_current__i_Ca_p_max_Centre_Published = 0; // nanoA + const double var_persistent_calcium_current__i_Ca_p_max_Periphery_0DCapable = 0; // nanoA + const double var_persistent_calcium_current__i_Ca_p_max_Periphery_1DCapable = 0.033390000000000003; // nanoA + const double var_persistent_calcium_current__i_Ca_p_max_Periphery_Published = 0; // nanoA + const double var_persistent_calcium_current__i_Ca_p_max = ((var_membrane__Version == 0) ? ((-var_persistent_calcium_current__i_Ca_p_max_Centre_Published + var_persistent_calcium_current__i_Ca_p_max_Periphery_Published) * var_membrane__FCell + var_persistent_calcium_current__i_Ca_p_max_Centre_Published) : ((var_membrane__Version == 1.0) ? ((-var_persistent_calcium_current__i_Ca_p_max_Centre_0DCapable + var_persistent_calcium_current__i_Ca_p_max_Periphery_0DCapable) * var_membrane__FCell + var_persistent_calcium_current__i_Ca_p_max_Centre_0DCapable) : ((-var_persistent_calcium_current__i_Ca_p_max_Centre_1DCapable + var_persistent_calcium_current__i_Ca_p_max_Periphery_1DCapable) * var_membrane__FCell + var_persistent_calcium_current__i_Ca_p_max_Centre_1DCapable))); // nanoA + const double var_persistent_calcium_current__i_Ca_p = var_ionic_concentrations__Ca_i * var_persistent_calcium_current__i_Ca_p_max / (0.00040000000000000002 + var_ionic_concentrations__Ca_i); // nanoA + const double var_potassium_background_current__g_b_K_Centre_0DCapable = 2.5236359999999998e-5; // microS + const double var_potassium_background_current__g_b_K_Centre_1DCapable = 2.5199999999999999e-5; // microS + const double var_potassium_background_current__g_b_K_Centre_Published = 2.5199999999999999e-5; // microS + const double var_potassium_background_current__g_b_K_Periphery_0DCapable = 8.1891999999999995e-5; // microS + const double var_potassium_background_current__g_b_K_Periphery_1DCapable = 8.1899999999999999e-5; // microS + const double var_potassium_background_current__g_b_K_Periphery_Published = 8.1899999999999999e-5; // microS + const double var_potassium_background_current__g_b_K = ((var_membrane__Version == 0) ? ((-var_potassium_background_current__g_b_K_Centre_Published + var_potassium_background_current__g_b_K_Periphery_Published) * var_membrane__FCell + var_potassium_background_current__g_b_K_Centre_Published) : ((var_membrane__Version == 1.0) ? ((-var_potassium_background_current__g_b_K_Centre_0DCapable + var_potassium_background_current__g_b_K_Periphery_0DCapable) * var_membrane__FCell + var_potassium_background_current__g_b_K_Centre_0DCapable) : ((-var_potassium_background_current__g_b_K_Centre_1DCapable + var_potassium_background_current__g_b_K_Periphery_1DCapable) * var_membrane__FCell + var_potassium_background_current__g_b_K_Centre_1DCapable))); // microS + const double var_rapid_delayed_rectifying_potassium_current__g_K_r_Centre_0DCapable = 0.00079704000000000005; // microS + const double var_rapid_delayed_rectifying_potassium_current__g_K_r_Centre_1DCapable = 0.00073800000000000005; // microS + const double var_rapid_delayed_rectifying_potassium_current__g_K_r_Centre_Published = 0.00079699999999999997; // microS + const double var_rapid_delayed_rectifying_potassium_current__g_K_r_Periphery_0DCapable = 0.016; // microS + const double var_rapid_delayed_rectifying_potassium_current__g_K_r_Periphery_1DCapable = 0.020799999999999999; // microS + const double var_rapid_delayed_rectifying_potassium_current__g_K_r_Periphery_Published = 0.016; // microS + const double var_rapid_delayed_rectifying_potassium_current__g_K_r = ((var_membrane__Version == 0) ? ((-var_rapid_delayed_rectifying_potassium_current__g_K_r_Centre_Published + var_rapid_delayed_rectifying_potassium_current__g_K_r_Periphery_Published) * var_membrane__FCell + var_rapid_delayed_rectifying_potassium_current__g_K_r_Centre_Published) : ((var_membrane__Version == 1.0) ? ((-var_rapid_delayed_rectifying_potassium_current__g_K_r_Centre_0DCapable + var_rapid_delayed_rectifying_potassium_current__g_K_r_Periphery_0DCapable) * var_membrane__FCell + var_rapid_delayed_rectifying_potassium_current__g_K_r_Centre_0DCapable) : ((-var_rapid_delayed_rectifying_potassium_current__g_K_r_Centre_1DCapable + var_rapid_delayed_rectifying_potassium_current__g_K_r_Periphery_1DCapable) * var_membrane__FCell + var_rapid_delayed_rectifying_potassium_current__g_K_r_Centre_1DCapable))); // microS + const double var_rapid_delayed_rectifying_potassium_current__P_a = 0.40000000000000002 * var_chaste_interface__rapid_delayed_rectifying_potassium_current_P_as_gate__P_as + 0.59999999999999998 * var_chaste_interface__rapid_delayed_rectifying_potassium_current_P_af_gate__P_af; // dimensionless + const double var_reversal_and_equilibrium_potentials__E_Ca = 0.5 * var_membrane__R * var_membrane__T * log(var_ionic_concentrations__Ca_o / var_ionic_concentrations__Ca_i) / var_membrane__F; // millivolt + const double var_calcium_background_current__i_b_Ca = (-var_reversal_and_equilibrium_potentials__E_Ca + var_chaste_interface__membrane__V) * var_calcium_background_current__g_b_Ca; // nanoA + const double var_reversal_and_equilibrium_potentials__E_K = var_membrane__R * var_membrane__T * log(var_ionic_concentrations__K_o / var_ionic_concentrations__K_i) / var_membrane__F; // millivolt + const double var_four_AP_sensitive_currents__i_sus = (-var_reversal_and_equilibrium_potentials__E_K + var_chaste_interface__membrane__V) * var_four_AP_sensitive_currents__g_sus * var_chaste_interface__four_AP_sensitive_currents_r_gate__r; // nanoA + const double var_four_AP_sensitive_currents__i_to = (-var_reversal_and_equilibrium_potentials__E_K + var_chaste_interface__membrane__V) * var_four_AP_sensitive_currents__g_to * var_chaste_interface__four_AP_sensitive_currents_q_gate__q * var_chaste_interface__four_AP_sensitive_currents_r_gate__r; // nanoA + const double var_hyperpolarisation_activated_current__i_f_K = ((var_membrane__Version != 2.0) ? ((-var_reversal_and_equilibrium_potentials__E_K + var_chaste_interface__membrane__V) * var_hyperpolarisation_activated_current__g_f_K * var_chaste_interface__hyperpolarisation_activated_current_y_gate__y) : ((102.0 + var_chaste_interface__membrane__V) * var_hyperpolarisation_activated_current__g_f_K * var_chaste_interface__hyperpolarisation_activated_current_y_gate__y)); // nanoA + const double var_potassium_background_current__i_b_K = (-var_reversal_and_equilibrium_potentials__E_K + var_chaste_interface__membrane__V) * var_potassium_background_current__g_b_K; // nanoA + const double var_rapid_delayed_rectifying_potassium_current__i_K_r = (-var_reversal_and_equilibrium_potentials__E_K + var_chaste_interface__membrane__V) * var_rapid_delayed_rectifying_potassium_current__P_a * var_rapid_delayed_rectifying_potassium_current__g_K_r * var_chaste_interface__rapid_delayed_rectifying_potassium_current_P_i_gate__P_i; // nanoA + const double var_reversal_and_equilibrium_potentials__E_K_s = ((var_membrane__Version == 0) ? (var_membrane__R * var_membrane__T * log((var_ionic_concentrations__K_o + 0.12 * var_ionic_concentrations__Na_o) / (var_ionic_concentrations__K_i + 0.12 * var_ionic_concentrations__Na_i)) / var_membrane__F) : (var_membrane__R * var_membrane__T * log((var_ionic_concentrations__K_o + 0.029999999999999999 * var_ionic_concentrations__Na_o) / (var_ionic_concentrations__K_i + 0.029999999999999999 * var_ionic_concentrations__Na_i)) / var_membrane__F)); // millivolt + const double var_reversal_and_equilibrium_potentials__E_Na = var_membrane__R * var_membrane__T * log(var_ionic_concentrations__Na_o / var_ionic_concentrations__Na_i) / var_membrane__F; // millivolt + const double var_hyperpolarisation_activated_current__i_f_Na = ((var_membrane__Version != 2.0) ? ((-var_reversal_and_equilibrium_potentials__E_Na + var_chaste_interface__membrane__V) * var_hyperpolarisation_activated_current__g_f_Na * var_chaste_interface__hyperpolarisation_activated_current_y_gate__y) : ((-77.599999999999994 + var_chaste_interface__membrane__V) * var_hyperpolarisation_activated_current__g_f_Na * var_chaste_interface__hyperpolarisation_activated_current_y_gate__y)); // nanoA + const double var_slow_delayed_rectifying_potassium_current__g_K_s_Centre_0DCapable = 0.00034450000000000003; // microS + const double var_slow_delayed_rectifying_potassium_current__g_K_s_Centre_1DCapable = 0.00034499999999999998; // microS + const double var_slow_delayed_rectifying_potassium_current__g_K_s_Centre_Published = 0.00051800000000000001; // microS + const double var_slow_delayed_rectifying_potassium_current__g_K_s_Periphery_0DCapable = 0.0104; // microS + const double var_slow_delayed_rectifying_potassium_current__g_K_s_Periphery_1DCapable = 0.0104; // microS + const double var_slow_delayed_rectifying_potassium_current__g_K_s_Periphery_Published = 0.0104; // microS + const double var_slow_delayed_rectifying_potassium_current__g_K_s = ((var_membrane__Version == 0) ? ((-var_slow_delayed_rectifying_potassium_current__g_K_s_Centre_Published + var_slow_delayed_rectifying_potassium_current__g_K_s_Periphery_Published) * var_membrane__FCell + var_slow_delayed_rectifying_potassium_current__g_K_s_Centre_Published) : ((var_membrane__Version == 1.0) ? ((-var_slow_delayed_rectifying_potassium_current__g_K_s_Centre_0DCapable + var_slow_delayed_rectifying_potassium_current__g_K_s_Periphery_0DCapable) * var_membrane__FCell + var_slow_delayed_rectifying_potassium_current__g_K_s_Centre_0DCapable) : ((-var_slow_delayed_rectifying_potassium_current__g_K_s_Centre_1DCapable + var_slow_delayed_rectifying_potassium_current__g_K_s_Periphery_1DCapable) * var_membrane__FCell + var_slow_delayed_rectifying_potassium_current__g_K_s_Centre_1DCapable))); // microS + const double var_slow_delayed_rectifying_potassium_current__i_K_s = pow(var_chaste_interface__slow_delayed_rectifying_potassium_current_xs_gate__xs, 2) * (-var_reversal_and_equilibrium_potentials__E_K_s + var_chaste_interface__membrane__V) * var_slow_delayed_rectifying_potassium_current__g_K_s; // nanoA + const double var_sodium_background_current__g_b_Na_Centre_0DCapable = 5.8181799999999999e-5; // microS + const double var_sodium_background_current__g_b_Na_Centre_1DCapable = 5.8e-5; // microS + const double var_sodium_background_current__g_b_Na_Centre_Published = 5.8e-5; // microS + const double var_sodium_background_current__g_b_Na_Periphery_0DCapable = 0.00018880000000000001; // microS + const double var_sodium_background_current__g_b_Na_Periphery_1DCapable = 0.00018900000000000001; // microS + const double var_sodium_background_current__g_b_Na_Periphery_Published = 0.00018900000000000001; // microS + const double var_sodium_background_current__g_b_Na = ((var_membrane__Version == 0) ? ((-var_sodium_background_current__g_b_Na_Centre_Published + var_sodium_background_current__g_b_Na_Periphery_Published) * var_membrane__FCell + var_sodium_background_current__g_b_Na_Centre_Published) : ((var_membrane__Version == 1.0) ? ((-var_sodium_background_current__g_b_Na_Centre_0DCapable + var_sodium_background_current__g_b_Na_Periphery_0DCapable) * var_membrane__FCell + var_sodium_background_current__g_b_Na_Centre_0DCapable) : ((-var_sodium_background_current__g_b_Na_Centre_1DCapable + var_sodium_background_current__g_b_Na_Periphery_1DCapable) * var_membrane__FCell + var_sodium_background_current__g_b_Na_Centre_1DCapable))); // microS + const double var_sodium_background_current__i_b_Na = (-var_reversal_and_equilibrium_potentials__E_Na + var_chaste_interface__membrane__V) * var_sodium_background_current__g_b_Na; // nanoA + const double var_sodium_calcium_exchanger__d_NaCa = 0.0001; // dimensionless + const double var_sodium_calcium_exchanger__gamma_NaCa = 0.5; // dimensionless + const double var_sodium_calcium_exchanger__k_NaCa_Centre_0DCapable = 2.7228999999999998e-6; // nanoA + const double var_sodium_calcium_exchanger__k_NaCa_Centre_1DCapable = 2.7999999999999999e-6; // nanoA + const double var_sodium_calcium_exchanger__k_NaCa_Centre_Published = 2.7e-6; // nanoA + const double var_sodium_calcium_exchanger__k_NaCa_Periphery_0DCapable = 8.8358400000000004e-6; // nanoA + const double var_sodium_calcium_exchanger__k_NaCa_Periphery_1DCapable = 8.8000000000000004e-6; // nanoA + const double var_sodium_calcium_exchanger__k_NaCa_Periphery_Published = 8.8000000000000004e-6; // nanoA + const double var_sodium_calcium_exchanger__k_NaCa = ((var_membrane__Version == 0) ? ((-var_sodium_calcium_exchanger__k_NaCa_Centre_Published + var_sodium_calcium_exchanger__k_NaCa_Periphery_Published) * var_membrane__FCell + var_sodium_calcium_exchanger__k_NaCa_Centre_Published) : ((var_membrane__Version == 1.0) ? ((-var_sodium_calcium_exchanger__k_NaCa_Centre_0DCapable + var_sodium_calcium_exchanger__k_NaCa_Periphery_0DCapable) * var_membrane__FCell + var_sodium_calcium_exchanger__k_NaCa_Centre_0DCapable) : ((-var_sodium_calcium_exchanger__k_NaCa_Centre_1DCapable + var_sodium_calcium_exchanger__k_NaCa_Periphery_1DCapable) * var_membrane__FCell + var_sodium_calcium_exchanger__k_NaCa_Centre_1DCapable))); // nanoA + const double var_sodium_calcium_exchanger__i_NaCa = ((var_membrane__Version == 0) ? ((pow(var_ionic_concentrations__Na_i, 3) * var_ionic_concentrations__Ca_o * exp(0.037429999999999998 * var_chaste_interface__membrane__V * var_sodium_calcium_exchanger__gamma_NaCa) - pow(var_ionic_concentrations__Na_o, 3) * var_ionic_concentrations__Ca_i * exp(0.037400000000000003 * (-1.0 + var_sodium_calcium_exchanger__gamma_NaCa) * var_chaste_interface__membrane__V)) * var_sodium_calcium_exchanger__k_NaCa / (1.0 + (pow(var_ionic_concentrations__Na_i, 3) * var_ionic_concentrations__Ca_o + pow(var_ionic_concentrations__Na_o, 3) * var_ionic_concentrations__Ca_i) * var_sodium_calcium_exchanger__d_NaCa)) : ((pow(var_ionic_concentrations__Na_i, 3) * var_ionic_concentrations__Ca_o * exp(0.037429999999999998 * var_chaste_interface__membrane__V * var_sodium_calcium_exchanger__gamma_NaCa) - pow(var_ionic_concentrations__Na_o, 3) * var_ionic_concentrations__Ca_i * exp(0.037429999999999998 * (-1.0 + var_sodium_calcium_exchanger__gamma_NaCa) * var_chaste_interface__membrane__V)) * var_sodium_calcium_exchanger__k_NaCa / (1.0 + (pow(var_ionic_concentrations__Na_i, 3) * var_ionic_concentrations__Ca_o + pow(var_ionic_concentrations__Na_o, 3) * var_ionic_concentrations__Ca_i) * var_sodium_calcium_exchanger__d_NaCa))); // nanoA + const double var_sodium_current__g_Na_Centre_0DCapable = 0; // microlitre_per_second + const double var_sodium_current__g_Na_Centre_1DCapable = 0; // microlitre_per_second + const double var_sodium_current__g_Na_Centre_Published = 0; // microlitre_per_second + const double var_sodium_current__g_Na_Periphery_0DCapable = 1.204e-6; // microlitre_per_second + const double var_sodium_current__g_Na_Periphery_1DCapable = 3.7e-7; // microlitre_per_second + const double var_sodium_current__g_Na_Periphery_Published = 1.1999999999999999e-6; // microlitre_per_second + const double var_sodium_current__g_Na = ((var_membrane__Version == 0) ? ((-var_sodium_current__g_Na_Centre_Published + var_sodium_current__g_Na_Periphery_Published) * var_membrane__FCell + var_sodium_current__g_Na_Centre_Published) : ((var_membrane__Version == 1.0) ? ((-var_sodium_current__g_Na_Centre_0DCapable + var_sodium_current__g_Na_Periphery_0DCapable) * var_membrane__FCell + var_sodium_current__g_Na_Centre_0DCapable) : ((-var_sodium_current__g_Na_Centre_1DCapable + var_sodium_current__g_Na_Periphery_1DCapable) * var_membrane__FCell + var_sodium_current__g_Na_Centre_1DCapable))); // microlitre_per_second + const double var_sodium_current_h_gate__F_Na = ((var_membrane__Version == 0) ? (0.086900000000000005 + 0.095200000000000007 * exp(-2.1671999999999998 - 0.063 * var_chaste_interface__membrane__V) / (1.0 + 1.6599999999999999 * exp(-14.332500000000001 - 0.22500000000000001 * var_chaste_interface__membrane__V))) : (0.086929999999999993 + 0.095180000000000001 * exp(-2.1692640000000001 - 0.063060000000000005 * var_chaste_interface__membrane__V) / (1.0 + 1.6619999999999999 * exp(-14.33887 - 0.22509999999999999 * var_chaste_interface__membrane__V)))); // dimensionless + const double var_sodium_current__i_Na = ((fabs(var_chaste_interface__membrane__V) < 2.6613041457999895e-6) ? (187877.81200772891 * (2.6613041457999895e-6 + var_chaste_interface__membrane__V) * (1.3558299999999999 * pow(var_chaste_interface__sodium_current_m_gate__m, 3) * (-1.0 + exp(-2.8622007809294683)) * ((1.0 - var_sodium_current_h_gate__F_Na) * var_chaste_interface__sodium_current_h_gate__h1 + var_sodium_current_h_gate__F_Na * var_chaste_interface__sodium_current_h_gate__h2) * var_sodium_current__g_Na / (-1.0 + exp(9.9999999999999995e-8)) + 1.3558299999999999 * pow(var_chaste_interface__sodium_current_m_gate__m, 3) * (-1.0 + exp(-2.8622009809294684)) * ((1.0 - var_sodium_current_h_gate__F_Na) * var_chaste_interface__sodium_current_h_gate__h1 + var_sodium_current_h_gate__F_Na * var_chaste_interface__sodium_current_h_gate__h2) * var_sodium_current__g_Na / (-1.0 + exp(-9.9999999999999995e-8))) - 1.3558299999999999 * pow(var_chaste_interface__sodium_current_m_gate__m, 3) * (-1.0 + exp(-2.8622009809294684)) * ((1.0 - var_sodium_current_h_gate__F_Na) * var_chaste_interface__sodium_current_h_gate__h1 + var_sodium_current_h_gate__F_Na * var_chaste_interface__sodium_current_h_gate__h2) * var_sodium_current__g_Na / (-1.0 + exp(-9.9999999999999995e-8))) : (509460.74770887813 * pow(var_chaste_interface__sodium_current_m_gate__m, 3) * (-1.0 + exp(-2.8622008809294686 + 0.037575562401545783 * var_chaste_interface__membrane__V)) * ((1.0 - var_sodium_current_h_gate__F_Na) * var_chaste_interface__sodium_current_h_gate__h1 + var_sodium_current_h_gate__F_Na * var_chaste_interface__sodium_current_h_gate__h2) * var_chaste_interface__membrane__V * var_sodium_current__g_Na / (-1.0 + exp(0.037575562401545783 * var_chaste_interface__membrane__V)))); // nanoA + const double var_sodium_potassium_pump__K_m_K = 0.621; // millimolar + const double var_sodium_potassium_pump__K_m_Na = 5.6399999999999997; // millimolar + const double var_sodium_potassium_pump__i_p_max_Centre_0DCapable = 0.047825449999999999; // nanoA + const double var_sodium_potassium_pump__i_p_max_Centre_1DCapable = 0.047800000000000002; // nanoA + const double var_sodium_potassium_pump__i_p_max_Centre_Published = 0.047800000000000002; // nanoA + const double var_sodium_potassium_pump__i_p_max_Periphery_0DCapable = 0.15519359999999999; // nanoA + const double var_sodium_potassium_pump__i_p_max_Periphery_1DCapable = 0.16; // nanoA + const double var_sodium_potassium_pump__i_p_max_Periphery_Published = 0.16; // nanoA + const double var_sodium_potassium_pump__i_p_max = ((var_membrane__Version == 0) ? ((-var_sodium_potassium_pump__i_p_max_Centre_Published + var_sodium_potassium_pump__i_p_max_Periphery_Published) * var_membrane__FCell + var_sodium_potassium_pump__i_p_max_Centre_Published) : ((var_membrane__Version == 1.0) ? ((-var_sodium_potassium_pump__i_p_max_Centre_0DCapable + var_sodium_potassium_pump__i_p_max_Periphery_0DCapable) * var_membrane__FCell + var_sodium_potassium_pump__i_p_max_Centre_0DCapable) : ((-var_sodium_potassium_pump__i_p_max_Centre_1DCapable + var_sodium_potassium_pump__i_p_max_Periphery_1DCapable) * var_membrane__FCell + var_sodium_potassium_pump__i_p_max_Centre_1DCapable))); // nanoA + const double var_sodium_potassium_pump__i_p = 1.6000000000000001 * pow(var_ionic_concentrations__K_o, 2) * pow(var_ionic_concentrations__Na_i, 3) * var_sodium_potassium_pump__i_p_max / ((1.5 + exp(-1.5 - 0.025000000000000001 * var_chaste_interface__membrane__V)) * pow((var_ionic_concentrations__K_o + var_sodium_potassium_pump__K_m_K), 2) * pow((var_ionic_concentrations__Na_i + var_sodium_potassium_pump__K_m_Na), 3)); // nanoA + const double var_chaste_interface__i_ionic = 0.001 * (var_L_type_Ca_channel__i_Ca_L + var_T_type_Ca_channel__i_Ca_T + var_calcium_background_current__i_b_Ca + var_four_AP_sensitive_currents__i_sus + var_four_AP_sensitive_currents__i_to + var_hyperpolarisation_activated_current__i_f_K + var_hyperpolarisation_activated_current__i_f_Na + var_persistent_calcium_current__i_Ca_p + var_potassium_background_current__i_b_K + var_rapid_delayed_rectifying_potassium_current__i_K_r + var_slow_delayed_rectifying_potassium_current__i_K_s + var_sodium_background_current__i_b_Na + var_sodium_calcium_exchanger__i_NaCa + var_sodium_current__i_Na + var_sodium_potassium_pump__i_p) * HeartConfig::Instance()->GetCapacitance(); // uA_per_cm2 + + const double i_ionic = var_chaste_interface__i_ionic; + EXCEPT_IF_NOT(!std::isnan(i_ionic)); + return i_ionic; + } + + void Cellzhang_SAN_model_2000_allFromCellML::EvaluateYDerivatives(double var_chaste_interface__environment__time_converted, const std::vector& rY, std::vector& rDY) + { + // Inputs: + // Time units: millisecond + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -39.013558536 + double var_chaste_interface__sodium_current_m_gate__m = rY[1]; + // Units: dimensionless; Initial value: 0.092361701692 + double var_chaste_interface__sodium_current_h_gate__h1 = rY[2]; + // Units: dimensionless; Initial value: 0.015905380261 + double var_chaste_interface__sodium_current_h_gate__h2 = rY[3]; + // Units: dimensionless; Initial value: 0.01445216109 + double var_chaste_interface__L_type_Ca_channel_d_gate__d_L = rY[4]; + // Units: dimensionless; Initial value: 0.04804900895 + double var_chaste_interface__L_type_Ca_channel_f_gate__f_L = rY[5]; + // Units: dimensionless; Initial value: 0.48779845203 + double var_chaste_interface__T_type_Ca_channel_d_gate__d_T = rY[6]; + // Units: dimensionless; Initial value: 0.42074047435 + double var_chaste_interface__T_type_Ca_channel_f_gate__f_T = rY[7]; + // Units: dimensionless; Initial value: 0.038968420558 + double var_chaste_interface__four_AP_sensitive_currents_q_gate__q = rY[8]; + // Units: dimensionless; Initial value: 0.29760539675 + double var_chaste_interface__four_AP_sensitive_currents_r_gate__r = rY[9]; + // Units: dimensionless; Initial value: 0.064402950262 + double var_chaste_interface__rapid_delayed_rectifying_potassium_current_P_af_gate__P_af = rY[10]; + // Units: dimensionless; Initial value: 0.13034201158 + double var_chaste_interface__rapid_delayed_rectifying_potassium_current_P_as_gate__P_as = rY[11]; + // Units: dimensionless; Initial value: 0.46960956028 + double var_chaste_interface__rapid_delayed_rectifying_potassium_current_P_i_gate__P_i = rY[12]; + // Units: dimensionless; Initial value: 0.87993375273 + double var_chaste_interface__slow_delayed_rectifying_potassium_current_xs_gate__xs = rY[13]; + // Units: dimensionless; Initial value: 0.082293827208 + double var_chaste_interface__hyperpolarisation_activated_current_y_gate__y = rY[14]; + // Units: dimensionless; Initial value: 0.03889291759 + + // Mathematics + double d_dt_chaste_interface_var_membrane__V; + const double var_membrane__FCellConstant = 1.0309347; // dimensionless + const double var_L_type_Ca_channel_f_gate__f_L_infinity = 1 / (1.0 + exp(9.0 + 0.20000000000000001 * var_chaste_interface__membrane__V)); // dimensionless + const double var_T_type_Ca_channel_d_gate__alpha_d_T = 1068.0 * exp(0.87666666666666671 + 0.033333333333333333 * var_chaste_interface__membrane__V); // per_second + const double var_T_type_Ca_channel_d_gate__beta_d_T = 1068.0 * exp(-0.87666666666666671 - 0.033333333333333333 * var_chaste_interface__membrane__V); // per_second + const double var_T_type_Ca_channel_d_gate__d_T_infinity = 1 / (1.0 + exp(-5.4411764705882355 - 0.14705882352941177 * var_chaste_interface__membrane__V)); // dimensionless + const double var_T_type_Ca_channel_d_gate__tau_d_T = 1 / (var_T_type_Ca_channel_d_gate__alpha_d_T + var_T_type_Ca_channel_d_gate__beta_d_T); // second + const double var_T_type_Ca_channel_d_gate__d_T_orig_deriv = (-var_chaste_interface__T_type_Ca_channel_d_gate__d_T + var_T_type_Ca_channel_d_gate__d_T_infinity) / var_T_type_Ca_channel_d_gate__tau_d_T; // 1 / second + const double d_dt_chaste_interface_var_T_type_Ca_channel_d_gate__d_T = 0.001 * var_T_type_Ca_channel_d_gate__d_T_orig_deriv; // 1 / millisecond + const double var_T_type_Ca_channel_f_gate__f_T_infinity = 1 / (1.0 + exp(7.8888888888888893 + 0.1111111111111111 * var_chaste_interface__membrane__V)); // dimensionless + const double var_four_AP_sensitive_currents_q_gate__q_infinity = 1 / (1.0 + exp(4.5320610687022898 + 0.076335877862595422 * var_chaste_interface__membrane__V)); // dimensionless + const double var_four_AP_sensitive_currents_r_gate__r_infinity = 1 / (1.0 + exp(0.5548223350253807 - 0.050761421319796954 * var_chaste_interface__membrane__V)); // dimensionless + const double var_hyperpolarisation_activated_current_y_gate__beta_y = exp(3.5355294117647058 + 0.047058823529411764 * var_chaste_interface__membrane__V); // per_second + const double var_membrane__Version = 1.0; // dimensionless + const double var_L_type_Ca_channel_d_gate__alpha_d_L = ((var_membrane__Version == 0) ? (-84.900000000000006 * var_chaste_interface__membrane__V / (-1.0 + exp(-0.20799999999999999 * var_chaste_interface__membrane__V)) - 28.379999999999999 * (35.0 + var_chaste_interface__membrane__V) / (-1.0 + exp(-14.0 - 0.40000000000000002 * var_chaste_interface__membrane__V))) : ((var_membrane__Version == 1.0) ? (-28.390000000000001 * (35.0 + var_chaste_interface__membrane__V) / (-1.0 + exp(-14.0 - 0.40000000000000002 * var_chaste_interface__membrane__V)) - 84.900000000000006 * var_chaste_interface__membrane__V / (-1.0 + exp(-0.20799999999999999 * var_chaste_interface__membrane__V))) : (-84.900000000000006 * var_chaste_interface__membrane__V / (-1.0 + exp(-0.20799999999999999 * var_chaste_interface__membrane__V)) - 28.399999999999999 * (35.0 + var_chaste_interface__membrane__V) / (-1.0 + exp(-14.0 - 0.40000000000000002 * var_chaste_interface__membrane__V))))); // per_second + const double var_L_type_Ca_channel_d_gate__beta_d_L = ((var_membrane__Version == 1.0) ? (11.43 * (-5.0 + var_chaste_interface__membrane__V) / (-1.0 + exp(-2.0 + 0.40000000000000002 * var_chaste_interface__membrane__V))) : (11.42 * (-5.0 + var_chaste_interface__membrane__V) / (-1.0 + exp(-2.0 + 0.40000000000000002 * var_chaste_interface__membrane__V)))); // per_second + const double var_L_type_Ca_channel_d_gate__tau_d_L = 2.0 / (var_L_type_Ca_channel_d_gate__alpha_d_L + var_L_type_Ca_channel_d_gate__beta_d_L); // second + const double var_L_type_Ca_channel_f_gate__alpha_f_L = ((var_membrane__Version == 1.0) ? (3.75 * (28.0 + var_chaste_interface__membrane__V) / (-1.0 + exp(7.0 + 0.25 * var_chaste_interface__membrane__V))) : (3.1200000000000001 * (28.0 + var_chaste_interface__membrane__V) / (-1.0 + exp(7.0 + 0.25 * var_chaste_interface__membrane__V)))); // per_second + const double var_L_type_Ca_channel_f_gate__beta_f_L = ((var_membrane__Version == 1.0) ? (30.0 / (1.0 + exp(-7.0 - 0.25 * var_chaste_interface__membrane__V))) : (25.0 / (1.0 + exp(-7.0 - 0.25 * var_chaste_interface__membrane__V)))); // per_second + const double var_T_type_Ca_channel_f_gate__beta_f_T = ((var_membrane__Version == 1.0) ? (15.0 * exp(4.6163849154746419 + 0.065019505851755519 * var_chaste_interface__membrane__V)) : (15.0 * exp(4.6618985695708712 + 0.065019505851755519 * var_chaste_interface__membrane__V))); // per_second + const double var_four_AP_sensitive_currents_r_gate__tau_r = ((var_membrane__Version == 0) ? (0.00298 + 0.01559 / (1.0369999999999999 * exp(2.7548999999999997 + 0.089999999999999997 * var_chaste_interface__membrane__V) + 0.36899999999999999 * exp(-2.8607999999999998 - 0.12 * var_chaste_interface__membrane__V))) : ((var_membrane__Version == 1.0) ? (0.0029775000000000001 + 0.019595000000000001 / (1.0369999999999999 * exp(2.7585732000000003 + 0.090120000000000006 * var_chaste_interface__membrane__V) + 0.36899999999999999 * exp(-2.8369599999999999 - 0.11899999999999999 * var_chaste_interface__membrane__V))) : (0.00298 + 0.01959 / (1.0369999999999999 * exp(2.7585732000000003 + 0.090120000000000006 * var_chaste_interface__membrane__V) + 0.36899999999999999 * exp(-2.8369599999999999 - 0.11899999999999999 * var_chaste_interface__membrane__V))))); // second + const double var_four_AP_sensitive_currents_r_gate__r_orig_deriv = (-var_chaste_interface__four_AP_sensitive_currents_r_gate__r + var_four_AP_sensitive_currents_r_gate__r_infinity) / var_four_AP_sensitive_currents_r_gate__tau_r; // 1 / second + const double d_dt_chaste_interface_var_four_AP_sensitive_currents_r_gate__r = 0.001 * var_four_AP_sensitive_currents_r_gate__r_orig_deriv; // 1 / millisecond + const double var_hyperpolarisation_activated_current_y_gate__alpha_y = ((var_membrane__Version == 0) ? (exp(-2.9643125469571747 - 0.037565740045078885 * var_chaste_interface__membrane__V)) : (exp(-2.9631993991738641 - 0.037551633496057078 * var_chaste_interface__membrane__V))); // per_second + const double var_hyperpolarisation_activated_current_y_gate__y_orig_deriv = (1.0 - var_chaste_interface__hyperpolarisation_activated_current_y_gate__y) * var_hyperpolarisation_activated_current_y_gate__alpha_y - var_hyperpolarisation_activated_current_y_gate__beta_y * var_chaste_interface__hyperpolarisation_activated_current_y_gate__y; // 1 / second + const double d_dt_chaste_interface_var_hyperpolarisation_activated_current_y_gate__y = 0.001 * var_hyperpolarisation_activated_current_y_gate__y_orig_deriv; // 1 / millisecond + const double var_membrane__dCell = 0; // dimensionless + const double var_membrane__FCell = ((var_membrane__Version == 0) ? (0.35666666666666669 * (-0.10000000000000001 + 3.0 * var_membrane__dCell) / (1.0 + 0.77449999999999997 * exp(6.9491525423728815 - 10.16949152542373 * var_membrane__dCell))) : ((var_membrane__Version == 1.0) ? (var_membrane__FCellConstant * var_membrane__dCell / (1.0 + 0.77449999999999997 * exp(6.9491525423728815 - 10.16949152542373 * var_membrane__dCell))) : (1.0343333333333333 * var_membrane__dCell / (1.0 + 0.77449999999999997 * exp(12.564102564102564 - 14.871794871794872 * var_membrane__dCell))))); // dimensionless + const double var_L_type_Ca_channel_d_gate__d_L_infinity = ((var_membrane__Version == 0) ? (1 / (1.0 + exp(-3.8500000000000001 - 0.16666666666666666 * var_chaste_interface__membrane__V))) : ((var_membrane__Version == 1.0) ? (1 / (1.0 + exp(-3.7166666666666668 - 0.13333333333333333 * var_membrane__FCell - 0.16666666666666666 * var_chaste_interface__membrane__V))) : (1 / (1.0 + exp(-3.6999999999999997 - 0.16666666666666666 * var_chaste_interface__membrane__V))))); // dimensionless + const double var_L_type_Ca_channel_d_gate__d_L_orig_deriv = (-var_chaste_interface__L_type_Ca_channel_d_gate__d_L + var_L_type_Ca_channel_d_gate__d_L_infinity) / var_L_type_Ca_channel_d_gate__tau_d_L; // 1 / second + const double d_dt_chaste_interface_var_L_type_Ca_channel_d_gate__d_L = 0.001 * var_L_type_Ca_channel_d_gate__d_L_orig_deriv; // 1 / millisecond + const double var_L_type_Ca_channel_f_gate__tau_f_L = ((var_membrane__Version == 1.0) ? ((1.2 - 0.20000000000000001 * var_membrane__FCell) / (var_L_type_Ca_channel_f_gate__alpha_f_L + var_L_type_Ca_channel_f_gate__beta_f_L)) : (1 / (var_L_type_Ca_channel_f_gate__alpha_f_L + var_L_type_Ca_channel_f_gate__beta_f_L))); // second + const double var_L_type_Ca_channel_f_gate__f_L_orig_deriv = (-var_chaste_interface__L_type_Ca_channel_f_gate__f_L + var_L_type_Ca_channel_f_gate__f_L_infinity) / var_L_type_Ca_channel_f_gate__tau_f_L; // 1 / second + const double d_dt_chaste_interface_var_L_type_Ca_channel_f_gate__f_L = 0.001 * var_L_type_Ca_channel_f_gate__f_L_orig_deriv; // 1 / millisecond + const double var_T_type_Ca_channel_f_gate__alpha_f_T = ((var_membrane__Version == 1.0) ? (15.300000000000001 * exp(-0.85234093637454988 - 0.0084033613445378148 * var_membrane__FCell - 0.012004801920768308 * var_chaste_interface__membrane__V)) : (15.300000000000001 * exp(-0.86074429771908767 - 0.012004801920768308 * var_chaste_interface__membrane__V))); // per_second + const double var_T_type_Ca_channel_f_gate__tau_f_T = 1 / (var_T_type_Ca_channel_f_gate__alpha_f_T + var_T_type_Ca_channel_f_gate__beta_f_T); // second + const double var_T_type_Ca_channel_f_gate__f_T_orig_deriv = (-var_chaste_interface__T_type_Ca_channel_f_gate__f_T + var_T_type_Ca_channel_f_gate__f_T_infinity) / var_T_type_Ca_channel_f_gate__tau_f_T; // 1 / second + const double d_dt_chaste_interface_var_T_type_Ca_channel_f_gate__f_T = 0.001 * var_T_type_Ca_channel_f_gate__f_T_orig_deriv; // 1 / millisecond + const double var_four_AP_sensitive_currents_q_gate__tau_q = ((var_membrane__Version == 0) ? (0.0101 + 2.4000000000000001e-5 * exp(5.093 + 0.10000000000000001 * var_chaste_interface__membrane__V) + 0.11433333333333336 / exp(-3.9199999999999999 - 0.080000000000000002 * var_chaste_interface__membrane__V)) : ((var_membrane__Version == 1.0) ? (0.010103333333333334 + 0.065166666666666664 / (0.56859999999999999 * exp(-3.1827900000000002 - 0.081610000000000002 * var_chaste_interface__membrane__V - 0.81610000000000005 * var_membrane__FCell) + 0.71740000000000004 * exp((0.27189999999999998 - 0.1719 * var_membrane__FCell) * (40.93 + 10.0 * var_membrane__FCell + var_chaste_interface__membrane__V)))) : (0.0101 + 0.065170000000000006 / (0.56859999999999999 * exp(-3.1827900000000002 - 0.081610000000000002 * var_chaste_interface__membrane__V) + 0.71740000000000004 * exp(11.128867 + 0.27189999999999998 * var_chaste_interface__membrane__V))))); // second + const double var_four_AP_sensitive_currents_q_gate__q_orig_deriv = (-var_chaste_interface__four_AP_sensitive_currents_q_gate__q + var_four_AP_sensitive_currents_q_gate__q_infinity) / var_four_AP_sensitive_currents_q_gate__tau_q; // 1 / second + const double d_dt_chaste_interface_var_four_AP_sensitive_currents_q_gate__q = 0.001 * var_four_AP_sensitive_currents_q_gate__q_orig_deriv; // 1 / millisecond + const double var_rapid_delayed_rectifying_potassium_current_P_af_gate__P_af_infinity = ((var_membrane__Version != 2.0) ? (1 / (1.0 + exp(-1.3396226415094339 - 0.094339622641509441 * var_chaste_interface__membrane__V))) : (1 / (1.0 + exp(-1.2452830188679245 - 0.094339622641509441 * var_chaste_interface__membrane__V)))); // dimensionless + const double var_rapid_delayed_rectifying_potassium_current_P_af_gate__tau_P_af = ((var_membrane__Version != 2.0) ? (1 / (0.95999999999999996 * exp(0.40000000000000002 - 0.044444444444444446 * var_chaste_interface__membrane__V) + 37.200000000000003 * exp(-0.56603773584905659 + 0.062893081761006289 * var_chaste_interface__membrane__V))) : (1 / (0.95999999999999996 * exp(0.44444444444444442 - 0.044444444444444446 * var_chaste_interface__membrane__V) + 37.200000000000003 * exp(-0.62893081761006286 + 0.062893081761006289 * var_chaste_interface__membrane__V)))); // second + const double var_rapid_delayed_rectifying_potassium_current_P_af_gate__P_af_orig_deriv = (-var_chaste_interface__rapid_delayed_rectifying_potassium_current_P_af_gate__P_af + var_rapid_delayed_rectifying_potassium_current_P_af_gate__P_af_infinity) / var_rapid_delayed_rectifying_potassium_current_P_af_gate__tau_P_af; // 1 / second + const double d_dt_chaste_interface_var_rapid_delayed_rectifying_potassium_current_P_af_gate__P_af = 0.001 * var_rapid_delayed_rectifying_potassium_current_P_af_gate__P_af_orig_deriv; // 1 / millisecond + const double var_rapid_delayed_rectifying_potassium_current_P_as_gate__P_as_infinity = var_rapid_delayed_rectifying_potassium_current_P_af_gate__P_af_infinity; // dimensionless + const double var_rapid_delayed_rectifying_potassium_current_P_as_gate__tau_P_as = ((var_membrane__Version != 2.0) ? (1 / (4.2000000000000002 * exp(-0.52941176470588236 + 0.058823529411764705 * var_chaste_interface__membrane__V) + 0.14999999999999999 * exp(0.41666666666666663 - 0.046296296296296294 * var_chaste_interface__membrane__V))) : (1 / (4.2000000000000002 * exp(-0.58823529411764708 + 0.058823529411764705 * var_chaste_interface__membrane__V) + 0.14999999999999999 * exp(0.46296296296296291 - 0.046296296296296294 * var_chaste_interface__membrane__V)))); // second + const double var_rapid_delayed_rectifying_potassium_current_P_as_gate__P_as_orig_deriv = (-var_chaste_interface__rapid_delayed_rectifying_potassium_current_P_as_gate__P_as + var_rapid_delayed_rectifying_potassium_current_P_as_gate__P_as_infinity) / var_rapid_delayed_rectifying_potassium_current_P_as_gate__tau_P_as; // 1 / second + const double d_dt_chaste_interface_var_rapid_delayed_rectifying_potassium_current_P_as_gate__P_as = 0.001 * var_rapid_delayed_rectifying_potassium_current_P_as_gate__P_as_orig_deriv; // 1 / millisecond + const double var_rapid_delayed_rectifying_potassium_current_P_i_gate__P_i_infinity = 1 / (1.0 + exp(1.8415841584158419 + 0.099009900990099015 * var_chaste_interface__membrane__V)); // dimensionless + const double var_rapid_delayed_rectifying_potassium_current_P_i_gate__tau_P_i = (((var_membrane__Version == 0) || (var_membrane__Version == 1.0)) ? (0.002) : (0.0060000000000000001)); // second + const double var_rapid_delayed_rectifying_potassium_current_P_i_gate__P_i_orig_deriv = (-var_chaste_interface__rapid_delayed_rectifying_potassium_current_P_i_gate__P_i + var_rapid_delayed_rectifying_potassium_current_P_i_gate__P_i_infinity) / var_rapid_delayed_rectifying_potassium_current_P_i_gate__tau_P_i; // 1 / second + const double d_dt_chaste_interface_var_rapid_delayed_rectifying_potassium_current_P_i_gate__P_i = 0.001 * var_rapid_delayed_rectifying_potassium_current_P_i_gate__P_i_orig_deriv; // 1 / millisecond + const double var_slow_delayed_rectifying_potassium_current_xs_gate__alpha_xs = 14.0 / (1.0 + exp(4.4444444444444446 - 0.1111111111111111 * var_chaste_interface__membrane__V)); // per_second + const double var_slow_delayed_rectifying_potassium_current_xs_gate__beta_xs = exp(-0.022222222222222223 * var_chaste_interface__membrane__V); // per_second + const double var_slow_delayed_rectifying_potassium_current_xs_gate__xs_orig_deriv = (1.0 - var_chaste_interface__slow_delayed_rectifying_potassium_current_xs_gate__xs) * var_slow_delayed_rectifying_potassium_current_xs_gate__alpha_xs - var_slow_delayed_rectifying_potassium_current_xs_gate__beta_xs * var_chaste_interface__slow_delayed_rectifying_potassium_current_xs_gate__xs; // 1 / second + const double d_dt_chaste_interface_var_slow_delayed_rectifying_potassium_current_xs_gate__xs = 0.001 * var_slow_delayed_rectifying_potassium_current_xs_gate__xs_orig_deriv; // 1 / millisecond + const double var_sodium_current_h_gate__h1_infinity = 1 / (1.0 + exp(10.328124999999998 + 0.15625 * var_chaste_interface__membrane__V)); // dimensionless + const double var_sodium_current_h_gate__h2_infinity = var_sodium_current_h_gate__h1_infinity; // dimensionless + const double var_sodium_current_h_gate__tau_h1 = 0.00059770000000000005 + 3.7170000000000002e-6 * exp(-4.8164649999999991 - 0.28149999999999997 * var_chaste_interface__membrane__V) / (1.0 + 0.0037320000000000001 * exp(-12.936576000000001 - 0.34260000000000002 * var_chaste_interface__membrane__V)); // second + const double var_sodium_current_h_gate__h1_orig_deriv = (-var_chaste_interface__sodium_current_h_gate__h1 + var_sodium_current_h_gate__h1_infinity) / var_sodium_current_h_gate__tau_h1; // 1 / second + const double d_dt_chaste_interface_var_sodium_current_h_gate__h1 = 0.001 * var_sodium_current_h_gate__h1_orig_deriv; // 1 / millisecond + const double var_sodium_current_h_gate__tau_h2 = 0.0035560000000000001 + 3.1860000000000002e-8 * exp(-11.69172 - 0.62190000000000001 * var_chaste_interface__membrane__V) / (1.0 + 7.1890000000000005e-5 * exp(-22.768981 - 0.66830000000000001 * var_chaste_interface__membrane__V)); // second + const double var_sodium_current_h_gate__h2_orig_deriv = (-var_chaste_interface__sodium_current_h_gate__h2 + var_sodium_current_h_gate__h2_infinity) / var_sodium_current_h_gate__tau_h2; // 1 / second + const double d_dt_chaste_interface_var_sodium_current_h_gate__h2 = 0.001 * var_sodium_current_h_gate__h2_orig_deriv; // 1 / millisecond + const double var_sodium_current_m_gate__m_infinity = ((var_membrane__Version == 0) ? (pow((1 / (1.0 + exp(-0.18315018315018314 * var_chaste_interface__membrane__V))), 0.33333333333333331)) : (pow((1 / (1.0 + exp(-5.5531135531135529 - 0.18315018315018314 * var_chaste_interface__membrane__V))), 0.33333333333333331))); // dimensionless + const double var_sodium_current_m_gate__tau_m = ((var_membrane__Version == 0) ? (4.0000000000000003e-5 + 0.00062469999999999995 / (0.627 * exp(5.330820000000001 + 0.082000000000000003 * var_chaste_interface__membrane__V) + 0.83199999999999996 * exp(-18.994500000000002 - 0.33500000000000002 * var_chaste_interface__membrane__V))) : (4.5689999999999998e-5 + 0.00062469999999999995 / (0.62739999999999996 * exp(5.3505781299999997 + 0.082299999999999998 * var_chaste_interface__membrane__V) + 0.83221659999999997 * exp(-19.034003092000003 - 0.33566000000000001 * var_chaste_interface__membrane__V)))); // second + const double var_sodium_current_m_gate__m_orig_deriv = (-var_chaste_interface__sodium_current_m_gate__m + var_sodium_current_m_gate__m_infinity) / var_sodium_current_m_gate__tau_m; // 1 / second + const double d_dt_chaste_interface_var_sodium_current_m_gate__m = 0.001 * var_sodium_current_m_gate__m_orig_deriv; // 1 / millisecond + + if (mSetVoltageDerivativeToZero) + { + d_dt_chaste_interface_var_membrane__V = 0.0; + } + else + { + const double var_L_type_Ca_channel__E_Ca_L = 46.399999999999999; // millivolt + const double var_L_type_Ca_channel__g_Ca_L_Centre_0DCapable = 0.0057938; // microS + const double var_L_type_Ca_channel__g_Ca_L_Centre_1DCapable = 0.0082000000000000007; // microS + const double var_L_type_Ca_channel__g_Ca_L_Centre_Published = 0.0057999999999999996; // microS + const double var_L_type_Ca_channel__g_Ca_L_Periphery_0DCapable = 0.065886479999999997; // microS + const double var_L_type_Ca_channel__g_Ca_L_Periphery_1DCapable = 0.0659; // microS + const double var_L_type_Ca_channel__g_Ca_L_Periphery_Published = 0.0659; // microS + const double var_T_type_Ca_channel__E_Ca_T = 45.0; // millivolt + const double var_T_type_Ca_channel__g_Ca_T_Centre_0DCapable = 0.0042780600000000002; // microS + const double var_T_type_Ca_channel__g_Ca_T_Centre_1DCapable = 0.0020999999999999999; // microS + const double var_T_type_Ca_channel__g_Ca_T_Centre_Published = 0.0043; // microS + const double var_T_type_Ca_channel__g_Ca_T_Periphery_0DCapable = 0.0138823; // microS + const double var_T_type_Ca_channel__g_Ca_T_Periphery_1DCapable = 0.00694; // microS + const double var_T_type_Ca_channel__g_Ca_T_Periphery_Published = 0.013899999999999999; // microS + const double var_calcium_background_current__g_b_Ca_Centre_0DCapable = 1.3236e-5; // microS + const double var_calcium_background_current__g_b_Ca_Centre_1DCapable = 1.323e-5; // microS + const double var_calcium_background_current__g_b_Ca_Centre_Published = 1.3200000000000001e-5; // microS + const double var_calcium_background_current__g_b_Ca_Periphery_0DCapable = 4.2951999999999998e-5; // microS + const double var_calcium_background_current__g_b_Ca_Periphery_1DCapable = 4.2899999999999999e-5; // microS + const double var_calcium_background_current__g_b_Ca_Periphery_Published = 4.3000000000000002e-5; // microS + const double var_four_AP_sensitive_currents__g_sus_Centre_0DCapable = 6.6455040000000003e-5; // microS + const double var_four_AP_sensitive_currents__g_sus_Centre_1DCapable = 0.00026600000000000001; // microS + const double var_four_AP_sensitive_currents__g_sus_Centre_Published = 6.6500000000000004e-5; // microS + const double var_four_AP_sensitive_currents__g_sus_Periphery_0DCapable = 0.01138376; // microS + const double var_four_AP_sensitive_currents__g_sus_Periphery_1DCapable = 0.0114; // microS + const double var_four_AP_sensitive_currents__g_sus_Periphery_Published = 0.0114; // microS + const double var_four_AP_sensitive_currents__g_to_Centre_0DCapable = 0.0049049999999999996; // microS + const double var_four_AP_sensitive_currents__g_to_Centre_1DCapable = 0.0049049999999999996; // microS + const double var_four_AP_sensitive_currents__g_to_Centre_Published = 0.0049100000000000003; // microS + const double var_four_AP_sensitive_currents__g_to_Periphery_0DCapable = 0.036495; // microS + const double var_four_AP_sensitive_currents__g_to_Periphery_1DCapable = 0.036499999999999998; // microS + const double var_four_AP_sensitive_currents__g_to_Periphery_Published = 0.036490000000000002; // microS + const double var_hyperpolarisation_activated_current__g_f_K_Centre_0DCapable = 0.0005465; // microS + const double var_hyperpolarisation_activated_current__g_f_K_Centre_1DCapable = 0.000437; // microS + const double var_hyperpolarisation_activated_current__g_f_K_Centre_Published = 0.00054799999999999998; // microS + const double var_hyperpolarisation_activated_current__g_f_K_Periphery_0DCapable = 0.006875; // microS + const double var_hyperpolarisation_activated_current__g_f_K_Periphery_1DCapable = 0.0054999999999999997; // microS + const double var_hyperpolarisation_activated_current__g_f_K_Periphery_Published = 0.0068999999999999999; // microS + const double var_hyperpolarisation_activated_current__g_f_Na_Centre_0DCapable = 0.0005465; // microS + const double var_hyperpolarisation_activated_current__g_f_Na_Centre_1DCapable = 0.000437; // microS + const double var_hyperpolarisation_activated_current__g_f_Na_Centre_Published = 0.00054799999999999998; // microS + const double var_hyperpolarisation_activated_current__g_f_Na_Periphery_0DCapable = 0.006875; // microS + const double var_hyperpolarisation_activated_current__g_f_Na_Periphery_1DCapable = 0.0054999999999999997; // microS + const double var_hyperpolarisation_activated_current__g_f_Na_Periphery_Published = 0.0068999999999999999; // microS + const double var_ionic_concentrations__Ca_i = 0.0001; // millimolar + const double var_ionic_concentrations__Ca_o = 2.0; // millimolar + const double var_ionic_concentrations__K_i = 140.0; // millimolar + const double var_ionic_concentrations__K_o = 5.4000000000000004; // millimolar + const double var_ionic_concentrations__Na_i = 8.0; // millimolar + const double var_ionic_concentrations__Na_o = 140.0; // millimolar + const double var_membrane__CmCentre = 2.0000000000000002e-5; // microF + const double var_membrane__CmPeriphery = 6.4999999999999994e-5; // microF + const double var_membrane__F = 96845.0; // coulomb_per_mole + const double var_membrane__R = 8314.0; // millijoule_per_mole_kelvin + const double var_membrane__T = 310.0; // kelvin + const double var_L_type_Ca_channel__g_Ca_L = ((var_membrane__Version == 0) ? ((-var_L_type_Ca_channel__g_Ca_L_Centre_Published + var_L_type_Ca_channel__g_Ca_L_Periphery_Published) * var_membrane__FCell + var_L_type_Ca_channel__g_Ca_L_Centre_Published) : ((var_membrane__Version == 1.0) ? ((-var_L_type_Ca_channel__g_Ca_L_Centre_0DCapable + var_L_type_Ca_channel__g_Ca_L_Periphery_0DCapable) * var_membrane__FCell + var_L_type_Ca_channel__g_Ca_L_Centre_0DCapable) : ((-var_L_type_Ca_channel__g_Ca_L_Centre_1DCapable + var_L_type_Ca_channel__g_Ca_L_Periphery_1DCapable) * var_membrane__FCell + var_L_type_Ca_channel__g_Ca_L_Centre_1DCapable))); // microS + const double var_L_type_Ca_channel__i_Ca_L = (-var_L_type_Ca_channel__E_Ca_L + var_chaste_interface__membrane__V) * (0.0060000000000000001 / (1.0 + exp(-2.3500000000000001 - 0.16666666666666666 * var_chaste_interface__membrane__V)) + var_chaste_interface__L_type_Ca_channel_d_gate__d_L * var_chaste_interface__L_type_Ca_channel_f_gate__f_L) * var_L_type_Ca_channel__g_Ca_L; // nanoA + const double var_T_type_Ca_channel__g_Ca_T = ((var_membrane__Version == 0) ? ((-var_T_type_Ca_channel__g_Ca_T_Centre_Published + var_T_type_Ca_channel__g_Ca_T_Periphery_Published) * var_membrane__FCell + var_T_type_Ca_channel__g_Ca_T_Centre_Published) : ((var_membrane__Version == 1.0) ? ((-var_T_type_Ca_channel__g_Ca_T_Centre_0DCapable + var_T_type_Ca_channel__g_Ca_T_Periphery_0DCapable) * var_membrane__FCell + var_T_type_Ca_channel__g_Ca_T_Centre_0DCapable) : ((-var_T_type_Ca_channel__g_Ca_T_Centre_1DCapable + var_T_type_Ca_channel__g_Ca_T_Periphery_1DCapable) * var_membrane__FCell + var_T_type_Ca_channel__g_Ca_T_Centre_1DCapable))); // microS + const double var_T_type_Ca_channel__i_Ca_T = (-var_T_type_Ca_channel__E_Ca_T + var_chaste_interface__membrane__V) * var_T_type_Ca_channel__g_Ca_T * var_chaste_interface__T_type_Ca_channel_d_gate__d_T * var_chaste_interface__T_type_Ca_channel_f_gate__f_T; // nanoA + const double var_calcium_background_current__g_b_Ca = ((var_membrane__Version == 0) ? ((-var_calcium_background_current__g_b_Ca_Centre_Published + var_calcium_background_current__g_b_Ca_Periphery_Published) * var_membrane__FCell + var_calcium_background_current__g_b_Ca_Centre_Published) : ((var_membrane__Version == 1.0) ? ((-var_calcium_background_current__g_b_Ca_Centre_0DCapable + var_calcium_background_current__g_b_Ca_Periphery_0DCapable) * var_membrane__FCell + var_calcium_background_current__g_b_Ca_Centre_0DCapable) : ((-var_calcium_background_current__g_b_Ca_Centre_1DCapable + var_calcium_background_current__g_b_Ca_Periphery_1DCapable) * var_membrane__FCell + var_calcium_background_current__g_b_Ca_Centre_1DCapable))); // microS + const double var_four_AP_sensitive_currents__g_sus = ((var_membrane__Version == 0) ? ((-var_four_AP_sensitive_currents__g_sus_Centre_Published + var_four_AP_sensitive_currents__g_sus_Periphery_Published) * var_membrane__FCell + var_four_AP_sensitive_currents__g_sus_Centre_Published) : ((var_membrane__Version == 1.0) ? ((-var_four_AP_sensitive_currents__g_sus_Centre_0DCapable + var_four_AP_sensitive_currents__g_sus_Periphery_0DCapable) * var_membrane__FCell + var_four_AP_sensitive_currents__g_sus_Centre_0DCapable) : ((-var_four_AP_sensitive_currents__g_sus_Centre_1DCapable + var_four_AP_sensitive_currents__g_sus_Periphery_1DCapable) * var_membrane__FCell + var_four_AP_sensitive_currents__g_sus_Centre_1DCapable))); // microS + const double var_four_AP_sensitive_currents__g_to = ((var_membrane__Version == 0) ? ((-var_four_AP_sensitive_currents__g_to_Centre_Published + var_four_AP_sensitive_currents__g_to_Periphery_Published) * var_membrane__FCell + var_four_AP_sensitive_currents__g_to_Centre_Published) : ((var_membrane__Version == 1.0) ? ((-var_four_AP_sensitive_currents__g_to_Centre_0DCapable + var_four_AP_sensitive_currents__g_to_Periphery_0DCapable) * var_membrane__FCell + var_four_AP_sensitive_currents__g_to_Centre_0DCapable) : ((-var_four_AP_sensitive_currents__g_to_Centre_1DCapable + var_four_AP_sensitive_currents__g_to_Periphery_1DCapable) * var_membrane__FCell + var_four_AP_sensitive_currents__g_to_Centre_1DCapable))); // microS + const double var_hyperpolarisation_activated_current__g_f_K = ((var_membrane__Version == 0) ? ((-var_hyperpolarisation_activated_current__g_f_K_Centre_Published + var_hyperpolarisation_activated_current__g_f_K_Periphery_Published) * var_membrane__FCell + var_hyperpolarisation_activated_current__g_f_K_Centre_Published) : ((var_membrane__Version == 1.0) ? ((-var_hyperpolarisation_activated_current__g_f_K_Centre_0DCapable + var_hyperpolarisation_activated_current__g_f_K_Periphery_0DCapable) * var_membrane__FCell + var_hyperpolarisation_activated_current__g_f_K_Centre_0DCapable) : ((-var_hyperpolarisation_activated_current__g_f_K_Centre_1DCapable + var_hyperpolarisation_activated_current__g_f_K_Periphery_1DCapable) * var_membrane__FCell + var_hyperpolarisation_activated_current__g_f_K_Centre_1DCapable))); // microS + const double var_hyperpolarisation_activated_current__g_f_Na = ((var_membrane__Version == 0) ? ((-var_hyperpolarisation_activated_current__g_f_Na_Centre_Published + var_hyperpolarisation_activated_current__g_f_Na_Periphery_Published) * var_membrane__FCell + var_hyperpolarisation_activated_current__g_f_Na_Centre_Published) : ((var_membrane__Version == 1.0) ? ((-var_hyperpolarisation_activated_current__g_f_Na_Centre_0DCapable + var_hyperpolarisation_activated_current__g_f_Na_Periphery_0DCapable) * var_membrane__FCell + var_hyperpolarisation_activated_current__g_f_Na_Centre_0DCapable) : ((-var_hyperpolarisation_activated_current__g_f_Na_Centre_1DCapable + var_hyperpolarisation_activated_current__g_f_Na_Periphery_1DCapable) * var_membrane__FCell + var_hyperpolarisation_activated_current__g_f_Na_Centre_1DCapable))); // microS + const double var_membrane__Cm = (-var_membrane__CmCentre + var_membrane__CmPeriphery) * var_membrane__FCell + var_membrane__CmCentre; // microF + const double var_persistent_calcium_current__i_Ca_p_max_Centre_0DCapable = 0; // nanoA + const double var_persistent_calcium_current__i_Ca_p_max_Centre_1DCapable = 0.0041999999999999997; // nanoA + const double var_persistent_calcium_current__i_Ca_p_max_Centre_Published = 0; // nanoA + const double var_persistent_calcium_current__i_Ca_p_max_Periphery_0DCapable = 0; // nanoA + const double var_persistent_calcium_current__i_Ca_p_max_Periphery_1DCapable = 0.033390000000000003; // nanoA + const double var_persistent_calcium_current__i_Ca_p_max_Periphery_Published = 0; // nanoA + const double var_persistent_calcium_current__i_Ca_p_max = ((var_membrane__Version == 0) ? ((-var_persistent_calcium_current__i_Ca_p_max_Centre_Published + var_persistent_calcium_current__i_Ca_p_max_Periphery_Published) * var_membrane__FCell + var_persistent_calcium_current__i_Ca_p_max_Centre_Published) : ((var_membrane__Version == 1.0) ? ((-var_persistent_calcium_current__i_Ca_p_max_Centre_0DCapable + var_persistent_calcium_current__i_Ca_p_max_Periphery_0DCapable) * var_membrane__FCell + var_persistent_calcium_current__i_Ca_p_max_Centre_0DCapable) : ((-var_persistent_calcium_current__i_Ca_p_max_Centre_1DCapable + var_persistent_calcium_current__i_Ca_p_max_Periphery_1DCapable) * var_membrane__FCell + var_persistent_calcium_current__i_Ca_p_max_Centre_1DCapable))); // nanoA + const double var_persistent_calcium_current__i_Ca_p = var_ionic_concentrations__Ca_i * var_persistent_calcium_current__i_Ca_p_max / (0.00040000000000000002 + var_ionic_concentrations__Ca_i); // nanoA + const double var_potassium_background_current__g_b_K_Centre_0DCapable = 2.5236359999999998e-5; // microS + const double var_potassium_background_current__g_b_K_Centre_1DCapable = 2.5199999999999999e-5; // microS + const double var_potassium_background_current__g_b_K_Centre_Published = 2.5199999999999999e-5; // microS + const double var_potassium_background_current__g_b_K_Periphery_0DCapable = 8.1891999999999995e-5; // microS + const double var_potassium_background_current__g_b_K_Periphery_1DCapable = 8.1899999999999999e-5; // microS + const double var_potassium_background_current__g_b_K_Periphery_Published = 8.1899999999999999e-5; // microS + const double var_potassium_background_current__g_b_K = ((var_membrane__Version == 0) ? ((-var_potassium_background_current__g_b_K_Centre_Published + var_potassium_background_current__g_b_K_Periphery_Published) * var_membrane__FCell + var_potassium_background_current__g_b_K_Centre_Published) : ((var_membrane__Version == 1.0) ? ((-var_potassium_background_current__g_b_K_Centre_0DCapable + var_potassium_background_current__g_b_K_Periphery_0DCapable) * var_membrane__FCell + var_potassium_background_current__g_b_K_Centre_0DCapable) : ((-var_potassium_background_current__g_b_K_Centre_1DCapable + var_potassium_background_current__g_b_K_Periphery_1DCapable) * var_membrane__FCell + var_potassium_background_current__g_b_K_Centre_1DCapable))); // microS + const double var_rapid_delayed_rectifying_potassium_current__g_K_r_Centre_0DCapable = 0.00079704000000000005; // microS + const double var_rapid_delayed_rectifying_potassium_current__g_K_r_Centre_1DCapable = 0.00073800000000000005; // microS + const double var_rapid_delayed_rectifying_potassium_current__g_K_r_Centre_Published = 0.00079699999999999997; // microS + const double var_rapid_delayed_rectifying_potassium_current__g_K_r_Periphery_0DCapable = 0.016; // microS + const double var_rapid_delayed_rectifying_potassium_current__g_K_r_Periphery_1DCapable = 0.020799999999999999; // microS + const double var_rapid_delayed_rectifying_potassium_current__g_K_r_Periphery_Published = 0.016; // microS + const double var_rapid_delayed_rectifying_potassium_current__g_K_r = ((var_membrane__Version == 0) ? ((-var_rapid_delayed_rectifying_potassium_current__g_K_r_Centre_Published + var_rapid_delayed_rectifying_potassium_current__g_K_r_Periphery_Published) * var_membrane__FCell + var_rapid_delayed_rectifying_potassium_current__g_K_r_Centre_Published) : ((var_membrane__Version == 1.0) ? ((-var_rapid_delayed_rectifying_potassium_current__g_K_r_Centre_0DCapable + var_rapid_delayed_rectifying_potassium_current__g_K_r_Periphery_0DCapable) * var_membrane__FCell + var_rapid_delayed_rectifying_potassium_current__g_K_r_Centre_0DCapable) : ((-var_rapid_delayed_rectifying_potassium_current__g_K_r_Centre_1DCapable + var_rapid_delayed_rectifying_potassium_current__g_K_r_Periphery_1DCapable) * var_membrane__FCell + var_rapid_delayed_rectifying_potassium_current__g_K_r_Centre_1DCapable))); // microS + const double var_rapid_delayed_rectifying_potassium_current__P_a = 0.40000000000000002 * var_chaste_interface__rapid_delayed_rectifying_potassium_current_P_as_gate__P_as + 0.59999999999999998 * var_chaste_interface__rapid_delayed_rectifying_potassium_current_P_af_gate__P_af; // dimensionless + const double var_reversal_and_equilibrium_potentials__E_Ca = 0.5 * var_membrane__R * var_membrane__T * log(var_ionic_concentrations__Ca_o / var_ionic_concentrations__Ca_i) / var_membrane__F; // millivolt + const double var_calcium_background_current__i_b_Ca = (-var_reversal_and_equilibrium_potentials__E_Ca + var_chaste_interface__membrane__V) * var_calcium_background_current__g_b_Ca; // nanoA + const double var_reversal_and_equilibrium_potentials__E_K = var_membrane__R * var_membrane__T * log(var_ionic_concentrations__K_o / var_ionic_concentrations__K_i) / var_membrane__F; // millivolt + const double var_four_AP_sensitive_currents__i_sus = (-var_reversal_and_equilibrium_potentials__E_K + var_chaste_interface__membrane__V) * var_four_AP_sensitive_currents__g_sus * var_chaste_interface__four_AP_sensitive_currents_r_gate__r; // nanoA + const double var_four_AP_sensitive_currents__i_to = (-var_reversal_and_equilibrium_potentials__E_K + var_chaste_interface__membrane__V) * var_four_AP_sensitive_currents__g_to * var_chaste_interface__four_AP_sensitive_currents_q_gate__q * var_chaste_interface__four_AP_sensitive_currents_r_gate__r; // nanoA + const double var_hyperpolarisation_activated_current__i_f_K = ((var_membrane__Version != 2.0) ? ((-var_reversal_and_equilibrium_potentials__E_K + var_chaste_interface__membrane__V) * var_hyperpolarisation_activated_current__g_f_K * var_chaste_interface__hyperpolarisation_activated_current_y_gate__y) : ((102.0 + var_chaste_interface__membrane__V) * var_hyperpolarisation_activated_current__g_f_K * var_chaste_interface__hyperpolarisation_activated_current_y_gate__y)); // nanoA + const double var_potassium_background_current__i_b_K = (-var_reversal_and_equilibrium_potentials__E_K + var_chaste_interface__membrane__V) * var_potassium_background_current__g_b_K; // nanoA + const double var_rapid_delayed_rectifying_potassium_current__i_K_r = (-var_reversal_and_equilibrium_potentials__E_K + var_chaste_interface__membrane__V) * var_rapid_delayed_rectifying_potassium_current__P_a * var_rapid_delayed_rectifying_potassium_current__g_K_r * var_chaste_interface__rapid_delayed_rectifying_potassium_current_P_i_gate__P_i; // nanoA + const double var_reversal_and_equilibrium_potentials__E_K_s = ((var_membrane__Version == 0) ? (var_membrane__R * var_membrane__T * log((var_ionic_concentrations__K_o + 0.12 * var_ionic_concentrations__Na_o) / (var_ionic_concentrations__K_i + 0.12 * var_ionic_concentrations__Na_i)) / var_membrane__F) : (var_membrane__R * var_membrane__T * log((var_ionic_concentrations__K_o + 0.029999999999999999 * var_ionic_concentrations__Na_o) / (var_ionic_concentrations__K_i + 0.029999999999999999 * var_ionic_concentrations__Na_i)) / var_membrane__F)); // millivolt + const double var_reversal_and_equilibrium_potentials__E_Na = var_membrane__R * var_membrane__T * log(var_ionic_concentrations__Na_o / var_ionic_concentrations__Na_i) / var_membrane__F; // millivolt + const double var_hyperpolarisation_activated_current__i_f_Na = ((var_membrane__Version != 2.0) ? ((-var_reversal_and_equilibrium_potentials__E_Na + var_chaste_interface__membrane__V) * var_hyperpolarisation_activated_current__g_f_Na * var_chaste_interface__hyperpolarisation_activated_current_y_gate__y) : ((-77.599999999999994 + var_chaste_interface__membrane__V) * var_hyperpolarisation_activated_current__g_f_Na * var_chaste_interface__hyperpolarisation_activated_current_y_gate__y)); // nanoA + const double var_slow_delayed_rectifying_potassium_current__g_K_s_Centre_0DCapable = 0.00034450000000000003; // microS + const double var_slow_delayed_rectifying_potassium_current__g_K_s_Centre_1DCapable = 0.00034499999999999998; // microS + const double var_slow_delayed_rectifying_potassium_current__g_K_s_Centre_Published = 0.00051800000000000001; // microS + const double var_slow_delayed_rectifying_potassium_current__g_K_s_Periphery_0DCapable = 0.0104; // microS + const double var_slow_delayed_rectifying_potassium_current__g_K_s_Periphery_1DCapable = 0.0104; // microS + const double var_slow_delayed_rectifying_potassium_current__g_K_s_Periphery_Published = 0.0104; // microS + const double var_slow_delayed_rectifying_potassium_current__g_K_s = ((var_membrane__Version == 0) ? ((-var_slow_delayed_rectifying_potassium_current__g_K_s_Centre_Published + var_slow_delayed_rectifying_potassium_current__g_K_s_Periphery_Published) * var_membrane__FCell + var_slow_delayed_rectifying_potassium_current__g_K_s_Centre_Published) : ((var_membrane__Version == 1.0) ? ((-var_slow_delayed_rectifying_potassium_current__g_K_s_Centre_0DCapable + var_slow_delayed_rectifying_potassium_current__g_K_s_Periphery_0DCapable) * var_membrane__FCell + var_slow_delayed_rectifying_potassium_current__g_K_s_Centre_0DCapable) : ((-var_slow_delayed_rectifying_potassium_current__g_K_s_Centre_1DCapable + var_slow_delayed_rectifying_potassium_current__g_K_s_Periphery_1DCapable) * var_membrane__FCell + var_slow_delayed_rectifying_potassium_current__g_K_s_Centre_1DCapable))); // microS + const double var_slow_delayed_rectifying_potassium_current__i_K_s = pow(var_chaste_interface__slow_delayed_rectifying_potassium_current_xs_gate__xs, 2) * (-var_reversal_and_equilibrium_potentials__E_K_s + var_chaste_interface__membrane__V) * var_slow_delayed_rectifying_potassium_current__g_K_s; // nanoA + const double var_sodium_background_current__g_b_Na_Centre_0DCapable = 5.8181799999999999e-5; // microS + const double var_sodium_background_current__g_b_Na_Centre_1DCapable = 5.8e-5; // microS + const double var_sodium_background_current__g_b_Na_Centre_Published = 5.8e-5; // microS + const double var_sodium_background_current__g_b_Na_Periphery_0DCapable = 0.00018880000000000001; // microS + const double var_sodium_background_current__g_b_Na_Periphery_1DCapable = 0.00018900000000000001; // microS + const double var_sodium_background_current__g_b_Na_Periphery_Published = 0.00018900000000000001; // microS + const double var_sodium_background_current__g_b_Na = ((var_membrane__Version == 0) ? ((-var_sodium_background_current__g_b_Na_Centre_Published + var_sodium_background_current__g_b_Na_Periphery_Published) * var_membrane__FCell + var_sodium_background_current__g_b_Na_Centre_Published) : ((var_membrane__Version == 1.0) ? ((-var_sodium_background_current__g_b_Na_Centre_0DCapable + var_sodium_background_current__g_b_Na_Periphery_0DCapable) * var_membrane__FCell + var_sodium_background_current__g_b_Na_Centre_0DCapable) : ((-var_sodium_background_current__g_b_Na_Centre_1DCapable + var_sodium_background_current__g_b_Na_Periphery_1DCapable) * var_membrane__FCell + var_sodium_background_current__g_b_Na_Centre_1DCapable))); // microS + const double var_sodium_background_current__i_b_Na = (-var_reversal_and_equilibrium_potentials__E_Na + var_chaste_interface__membrane__V) * var_sodium_background_current__g_b_Na; // nanoA + const double var_sodium_calcium_exchanger__d_NaCa = 0.0001; // dimensionless + const double var_sodium_calcium_exchanger__gamma_NaCa = 0.5; // dimensionless + const double var_sodium_calcium_exchanger__k_NaCa_Centre_0DCapable = 2.7228999999999998e-6; // nanoA + const double var_sodium_calcium_exchanger__k_NaCa_Centre_1DCapable = 2.7999999999999999e-6; // nanoA + const double var_sodium_calcium_exchanger__k_NaCa_Centre_Published = 2.7e-6; // nanoA + const double var_sodium_calcium_exchanger__k_NaCa_Periphery_0DCapable = 8.8358400000000004e-6; // nanoA + const double var_sodium_calcium_exchanger__k_NaCa_Periphery_1DCapable = 8.8000000000000004e-6; // nanoA + const double var_sodium_calcium_exchanger__k_NaCa_Periphery_Published = 8.8000000000000004e-6; // nanoA + const double var_sodium_calcium_exchanger__k_NaCa = ((var_membrane__Version == 0) ? ((-var_sodium_calcium_exchanger__k_NaCa_Centre_Published + var_sodium_calcium_exchanger__k_NaCa_Periphery_Published) * var_membrane__FCell + var_sodium_calcium_exchanger__k_NaCa_Centre_Published) : ((var_membrane__Version == 1.0) ? ((-var_sodium_calcium_exchanger__k_NaCa_Centre_0DCapable + var_sodium_calcium_exchanger__k_NaCa_Periphery_0DCapable) * var_membrane__FCell + var_sodium_calcium_exchanger__k_NaCa_Centre_0DCapable) : ((-var_sodium_calcium_exchanger__k_NaCa_Centre_1DCapable + var_sodium_calcium_exchanger__k_NaCa_Periphery_1DCapable) * var_membrane__FCell + var_sodium_calcium_exchanger__k_NaCa_Centre_1DCapable))); // nanoA + const double var_sodium_calcium_exchanger__i_NaCa = ((var_membrane__Version == 0) ? ((pow(var_ionic_concentrations__Na_i, 3) * var_ionic_concentrations__Ca_o * exp(0.037429999999999998 * var_chaste_interface__membrane__V * var_sodium_calcium_exchanger__gamma_NaCa) - pow(var_ionic_concentrations__Na_o, 3) * var_ionic_concentrations__Ca_i * exp(0.037400000000000003 * (-1.0 + var_sodium_calcium_exchanger__gamma_NaCa) * var_chaste_interface__membrane__V)) * var_sodium_calcium_exchanger__k_NaCa / (1.0 + (pow(var_ionic_concentrations__Na_i, 3) * var_ionic_concentrations__Ca_o + pow(var_ionic_concentrations__Na_o, 3) * var_ionic_concentrations__Ca_i) * var_sodium_calcium_exchanger__d_NaCa)) : ((pow(var_ionic_concentrations__Na_i, 3) * var_ionic_concentrations__Ca_o * exp(0.037429999999999998 * var_chaste_interface__membrane__V * var_sodium_calcium_exchanger__gamma_NaCa) - pow(var_ionic_concentrations__Na_o, 3) * var_ionic_concentrations__Ca_i * exp(0.037429999999999998 * (-1.0 + var_sodium_calcium_exchanger__gamma_NaCa) * var_chaste_interface__membrane__V)) * var_sodium_calcium_exchanger__k_NaCa / (1.0 + (pow(var_ionic_concentrations__Na_i, 3) * var_ionic_concentrations__Ca_o + pow(var_ionic_concentrations__Na_o, 3) * var_ionic_concentrations__Ca_i) * var_sodium_calcium_exchanger__d_NaCa))); // nanoA + const double var_sodium_current__g_Na_Centre_0DCapable = 0; // microlitre_per_second + const double var_sodium_current__g_Na_Centre_1DCapable = 0; // microlitre_per_second + const double var_sodium_current__g_Na_Centre_Published = 0; // microlitre_per_second + const double var_sodium_current__g_Na_Periphery_0DCapable = 1.204e-6; // microlitre_per_second + const double var_sodium_current__g_Na_Periphery_1DCapable = 3.7e-7; // microlitre_per_second + const double var_sodium_current__g_Na_Periphery_Published = 1.1999999999999999e-6; // microlitre_per_second + const double var_sodium_current__g_Na = ((var_membrane__Version == 0) ? ((-var_sodium_current__g_Na_Centre_Published + var_sodium_current__g_Na_Periphery_Published) * var_membrane__FCell + var_sodium_current__g_Na_Centre_Published) : ((var_membrane__Version == 1.0) ? ((-var_sodium_current__g_Na_Centre_0DCapable + var_sodium_current__g_Na_Periphery_0DCapable) * var_membrane__FCell + var_sodium_current__g_Na_Centre_0DCapable) : ((-var_sodium_current__g_Na_Centre_1DCapable + var_sodium_current__g_Na_Periphery_1DCapable) * var_membrane__FCell + var_sodium_current__g_Na_Centre_1DCapable))); // microlitre_per_second + const double var_sodium_current_h_gate__F_Na = ((var_membrane__Version == 0) ? (0.086900000000000005 + 0.095200000000000007 * exp(-2.1671999999999998 - 0.063 * var_chaste_interface__membrane__V) / (1.0 + 1.6599999999999999 * exp(-14.332500000000001 - 0.22500000000000001 * var_chaste_interface__membrane__V))) : (0.086929999999999993 + 0.095180000000000001 * exp(-2.1692640000000001 - 0.063060000000000005 * var_chaste_interface__membrane__V) / (1.0 + 1.6619999999999999 * exp(-14.33887 - 0.22509999999999999 * var_chaste_interface__membrane__V)))); // dimensionless + const double var_sodium_current__i_Na = ((fabs(var_chaste_interface__membrane__V) < 2.6613041457999895e-6) ? (187877.81200772891 * (2.6613041457999895e-6 + var_chaste_interface__membrane__V) * (1.3558299999999999 * pow(var_chaste_interface__sodium_current_m_gate__m, 3) * (-1.0 + exp(-2.8622007809294683)) * ((1.0 - var_sodium_current_h_gate__F_Na) * var_chaste_interface__sodium_current_h_gate__h1 + var_sodium_current_h_gate__F_Na * var_chaste_interface__sodium_current_h_gate__h2) * var_sodium_current__g_Na / (-1.0 + exp(9.9999999999999995e-8)) + 1.3558299999999999 * pow(var_chaste_interface__sodium_current_m_gate__m, 3) * (-1.0 + exp(-2.8622009809294684)) * ((1.0 - var_sodium_current_h_gate__F_Na) * var_chaste_interface__sodium_current_h_gate__h1 + var_sodium_current_h_gate__F_Na * var_chaste_interface__sodium_current_h_gate__h2) * var_sodium_current__g_Na / (-1.0 + exp(-9.9999999999999995e-8))) - 1.3558299999999999 * pow(var_chaste_interface__sodium_current_m_gate__m, 3) * (-1.0 + exp(-2.8622009809294684)) * ((1.0 - var_sodium_current_h_gate__F_Na) * var_chaste_interface__sodium_current_h_gate__h1 + var_sodium_current_h_gate__F_Na * var_chaste_interface__sodium_current_h_gate__h2) * var_sodium_current__g_Na / (-1.0 + exp(-9.9999999999999995e-8))) : (509460.74770887813 * pow(var_chaste_interface__sodium_current_m_gate__m, 3) * (-1.0 + exp(-2.8622008809294686 + 0.037575562401545783 * var_chaste_interface__membrane__V)) * ((1.0 - var_sodium_current_h_gate__F_Na) * var_chaste_interface__sodium_current_h_gate__h1 + var_sodium_current_h_gate__F_Na * var_chaste_interface__sodium_current_h_gate__h2) * var_chaste_interface__membrane__V * var_sodium_current__g_Na / (-1.0 + exp(0.037575562401545783 * var_chaste_interface__membrane__V)))); // nanoA + const double var_sodium_potassium_pump__K_m_K = 0.621; // millimolar + const double var_sodium_potassium_pump__K_m_Na = 5.6399999999999997; // millimolar + const double var_sodium_potassium_pump__i_p_max_Centre_0DCapable = 0.047825449999999999; // nanoA + const double var_sodium_potassium_pump__i_p_max_Centre_1DCapable = 0.047800000000000002; // nanoA + const double var_sodium_potassium_pump__i_p_max_Centre_Published = 0.047800000000000002; // nanoA + const double var_sodium_potassium_pump__i_p_max_Periphery_0DCapable = 0.15519359999999999; // nanoA + const double var_sodium_potassium_pump__i_p_max_Periphery_1DCapable = 0.16; // nanoA + const double var_sodium_potassium_pump__i_p_max_Periphery_Published = 0.16; // nanoA + const double var_sodium_potassium_pump__i_p_max = ((var_membrane__Version == 0) ? ((-var_sodium_potassium_pump__i_p_max_Centre_Published + var_sodium_potassium_pump__i_p_max_Periphery_Published) * var_membrane__FCell + var_sodium_potassium_pump__i_p_max_Centre_Published) : ((var_membrane__Version == 1.0) ? ((-var_sodium_potassium_pump__i_p_max_Centre_0DCapable + var_sodium_potassium_pump__i_p_max_Periphery_0DCapable) * var_membrane__FCell + var_sodium_potassium_pump__i_p_max_Centre_0DCapable) : ((-var_sodium_potassium_pump__i_p_max_Centre_1DCapable + var_sodium_potassium_pump__i_p_max_Periphery_1DCapable) * var_membrane__FCell + var_sodium_potassium_pump__i_p_max_Centre_1DCapable))); // nanoA + const double var_sodium_potassium_pump__i_p = 1.6000000000000001 * pow(var_ionic_concentrations__K_o, 2) * pow(var_ionic_concentrations__Na_i, 3) * var_sodium_potassium_pump__i_p_max / ((1.5 + exp(-1.5 - 0.025000000000000001 * var_chaste_interface__membrane__V)) * pow((var_ionic_concentrations__K_o + var_sodium_potassium_pump__K_m_K), 2) * pow((var_ionic_concentrations__Na_i + var_sodium_potassium_pump__K_m_Na), 3)); // nanoA + const double var_membrane__V_orig_deriv = -(var_L_type_Ca_channel__i_Ca_L + var_T_type_Ca_channel__i_Ca_T + var_calcium_background_current__i_b_Ca + var_four_AP_sensitive_currents__i_sus + var_four_AP_sensitive_currents__i_to + var_hyperpolarisation_activated_current__i_f_K + var_hyperpolarisation_activated_current__i_f_Na + var_persistent_calcium_current__i_Ca_p + var_potassium_background_current__i_b_K + var_rapid_delayed_rectifying_potassium_current__i_K_r + var_slow_delayed_rectifying_potassium_current__i_K_s + var_sodium_background_current__i_b_Na + var_sodium_calcium_exchanger__i_NaCa + var_sodium_current__i_Na + var_sodium_potassium_pump__i_p) / var_membrane__Cm; // millivolt / second + d_dt_chaste_interface_var_membrane__V = 0.001 * var_membrane__V_orig_deriv; // millivolt / millisecond + } + + rDY[0] = d_dt_chaste_interface_var_membrane__V; + rDY[1] = d_dt_chaste_interface_var_sodium_current_m_gate__m; + rDY[2] = d_dt_chaste_interface_var_sodium_current_h_gate__h1; + rDY[3] = d_dt_chaste_interface_var_sodium_current_h_gate__h2; + rDY[4] = d_dt_chaste_interface_var_L_type_Ca_channel_d_gate__d_L; + rDY[5] = d_dt_chaste_interface_var_L_type_Ca_channel_f_gate__f_L; + rDY[6] = d_dt_chaste_interface_var_T_type_Ca_channel_d_gate__d_T; + rDY[7] = d_dt_chaste_interface_var_T_type_Ca_channel_f_gate__f_T; + rDY[8] = d_dt_chaste_interface_var_four_AP_sensitive_currents_q_gate__q; + rDY[9] = d_dt_chaste_interface_var_four_AP_sensitive_currents_r_gate__r; + rDY[10] = d_dt_chaste_interface_var_rapid_delayed_rectifying_potassium_current_P_af_gate__P_af; + rDY[11] = d_dt_chaste_interface_var_rapid_delayed_rectifying_potassium_current_P_as_gate__P_as; + rDY[12] = d_dt_chaste_interface_var_rapid_delayed_rectifying_potassium_current_P_i_gate__P_i; + rDY[13] = d_dt_chaste_interface_var_slow_delayed_rectifying_potassium_current_xs_gate__xs; + rDY[14] = d_dt_chaste_interface_var_hyperpolarisation_activated_current_y_gate__y; + } + + std::vector Cellzhang_SAN_model_2000_allFromCellML::ComputeDerivedQuantities(double var_chaste_interface__environment__time_converted, const std::vector & rY) + { + // Inputs: + // Time units: millisecond + + // Mathematics + + std::vector dqs(1); + dqs[0] = var_chaste_interface__environment__time_converted; + return dqs; + } + +template<> +void OdeSystemInformation::Initialise(void) +{ + this->mSystemName = "zhang_SAN_model_2000_all"; + this->mFreeVariableName = "environment__time"; + this->mFreeVariableUnits = "millisecond"; + + // rY[0]: + this->mVariableNames.push_back("membrane_voltage"); + this->mVariableUnits.push_back("millivolt"); + this->mInitialConditions.push_back(-39.013558536); + + // rY[1]: + this->mVariableNames.push_back("sodium_current_m_gate__m"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.092361701692); + + // rY[2]: + this->mVariableNames.push_back("sodium_current_h_gate__h1"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.015905380261); + + // rY[3]: + this->mVariableNames.push_back("sodium_current_h_gate__h2"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.01445216109); + + // rY[4]: + this->mVariableNames.push_back("L_type_Ca_channel_d_gate__d_L"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.04804900895); + + // rY[5]: + this->mVariableNames.push_back("L_type_Ca_channel_f_gate__f_L"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.48779845203); + + // rY[6]: + this->mVariableNames.push_back("T_type_Ca_channel_d_gate__d_T"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.42074047435); + + // rY[7]: + this->mVariableNames.push_back("T_type_Ca_channel_f_gate__f_T"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.038968420558); + + // rY[8]: + this->mVariableNames.push_back("four_AP_sensitive_currents_q_gate__q"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.29760539675); + + // rY[9]: + this->mVariableNames.push_back("four_AP_sensitive_currents_r_gate__r"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.064402950262); + + // rY[10]: + this->mVariableNames.push_back("rapid_delayed_rectifying_potassium_current_P_af_gate__P_af"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.13034201158); + + // rY[11]: + this->mVariableNames.push_back("rapid_delayed_rectifying_potassium_current_P_as_gate__P_as"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.46960956028); + + // rY[12]: + this->mVariableNames.push_back("rapid_delayed_rectifying_potassium_current_P_i_gate__P_i"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.87993375273); + + // rY[13]: + this->mVariableNames.push_back("slow_delayed_rectifying_potassium_current_xs_gate__xs"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.082293827208); + + // rY[14]: + this->mVariableNames.push_back("hyperpolarisation_activated_current_y_gate__y"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.03889291759); + + // Derived Quantity index [0]: + this->mDerivedQuantityNames.push_back("environment__time"); + this->mDerivedQuantityUnits.push_back("millisecond"); + + this->mInitialised = true; +} + +// Serialization for Boost >= 1.36 +#include "SerializationExportWrapperForCpp.hpp" +CHASTE_CLASS_EXPORT(Cellzhang_SAN_model_2000_allFromCellML) + diff --git a/chaste_codegen/tests/numerical/baseline/Normal/zhang_SAN_model_2000_all.hpp b/chaste_codegen/tests/numerical/baseline/Normal/zhang_SAN_model_2000_all.hpp new file mode 100644 index 00000000..ee049c7f --- /dev/null +++ b/chaste_codegen/tests/numerical/baseline/Normal/zhang_SAN_model_2000_all.hpp @@ -0,0 +1,78 @@ +#ifndef CELLZHANG_SAN_MODEL_2000_ALLFROMCELLML_HPP_ +#define CELLZHANG_SAN_MODEL_2000_ALLFROMCELLML_HPP_ + +//! @file +//! +//! This source file was generated from CellML by chaste_codegen version (version omitted as unimportant) +//! +//! Model: zhang_SAN_model_2000_all +//! +//! Processed by chaste_codegen: https://github.com/ModellingWebLab/chaste-codegen +//! (translator: chaste_codegen, model type: Normal) +//! on (date omitted as unimportant) +//! +//! + +#include "ChasteSerialization.hpp" +#include +#include "AbstractStimulusFunction.hpp" +#include "AbstractCardiacCell.hpp" + +class Cellzhang_SAN_model_2000_allFromCellML : public AbstractCardiacCell +{ + friend class boost::serialization::access; + template + void serialize(Archive & archive, const unsigned int version) + { + archive & boost::serialization::base_object(*this); + + } + + // + // Settable parameters and readable variables + // + +public: + + Cellzhang_SAN_model_2000_allFromCellML(boost::shared_ptr pSolver, boost::shared_ptr pIntracellularStimulus); + ~Cellzhang_SAN_model_2000_allFromCellML(); + double GetIIonic(const std::vector* pStateVariables=NULL); + void EvaluateYDerivatives(double var_chaste_interface__environment__time_converted, const std::vector& rY, std::vector& rDY); + + std::vector ComputeDerivedQuantities(double var_chaste_interface__environment__time_converted, const std::vector & rY); +}; + +// Needs to be included last +#include "SerializationExportWrapper.hpp" +CHASTE_CLASS_EXPORT(Cellzhang_SAN_model_2000_allFromCellML) + +namespace boost +{ + namespace serialization + { + template + inline void save_construct_data( + Archive & ar, const Cellzhang_SAN_model_2000_allFromCellML * t, const unsigned int fileVersion) + { + const boost::shared_ptr p_solver = t->GetSolver(); + const boost::shared_ptr p_stimulus = t->GetStimulusFunction(); + ar << p_solver; + ar << p_stimulus; + } + + template + inline void load_construct_data( + Archive & ar, Cellzhang_SAN_model_2000_allFromCellML * t, const unsigned int fileVersion) + { + boost::shared_ptr p_solver; + boost::shared_ptr p_stimulus; + ar >> p_solver; + ar >> p_stimulus; + ::new(t)Cellzhang_SAN_model_2000_allFromCellML(p_solver, p_stimulus); + } + + } + +} + +#endif // CELLZHANG_SAN_MODEL_2000_ALLFROMCELLML_HPP_ \ No newline at end of file diff --git a/chaste_codegen/tests/numerical/baseline/Opt/beeler_reuter_model_1977_lookup_tables.cpp b/chaste_codegen/tests/numerical/baseline/Opt/beeler_reuter_model_1977_lookup_tables.cpp new file mode 100644 index 00000000..f3598e11 --- /dev/null +++ b/chaste_codegen/tests/numerical/baseline/Opt/beeler_reuter_model_1977_lookup_tables.cpp @@ -0,0 +1,842 @@ +//! @file +//! +//! This source file was generated from CellML by chaste_codegen version (version omitted as unimportant) +//! +//! Model: beeler_reuter_model_1977 +//! +//! Processed by chaste_codegen: https://github.com/ModellingWebLab/chaste-codegen +//! (translator: chaste_codegen, model type: NormalOpt) +//! on (date omitted as unimportant) +//! +//! + +#include "beeler_reuter_model_1977_lookup_tables.hpp" +#include +#include +#include +#include +#include "Exception.hpp" +#include "OdeSystemInformation.hpp" +#include "RegularStimulus.hpp" +#include "HeartConfig.hpp" +#include "IsNan.hpp" +#include "MathsCustomFunctions.hpp" + + + +class Cellbeeler_reuter_model_1977FromCellMLOpt_LookupTables : public AbstractLookupTableCollection +{ +public: + static Cellbeeler_reuter_model_1977FromCellMLOpt_LookupTables* Instance() + { + if (mpInstance.get() == NULL) + { + mpInstance.reset(new Cellbeeler_reuter_model_1977FromCellMLOpt_LookupTables); + } + return mpInstance.get(); + } + + void FreeMemory() + { + + if (_lookup_table_0) + { + delete[] _lookup_table_0; + _lookup_table_0 = NULL; + } + + if (_lookup_table_1) + { + delete[] _lookup_table_1; + _lookup_table_1 = NULL; + } + + mNeedsRegeneration.assign(mNeedsRegeneration.size(), true); + } + + // Row lookup methods + // using linear-interpolation + + double* _lookup_0_row(unsigned i, double _factor_) + { + for (unsigned j=0; j<17; j++) + { + const double y1 = _lookup_table_0[i][j]; + const double y2 = _lookup_table_0[i+1][j]; + _lookup_table_0_row[j] = y1 + (y2-y1)*_factor_; + } + return _lookup_table_0_row; + } + + double* _lookup_1_row(unsigned i, double _factor_) + { + for (unsigned j=0; j<1; j++) + { + const double y1 = _lookup_table_1[i][j]; + const double y2 = _lookup_table_1[i+1][j]; + _lookup_table_1_row[j] = y1 + (y2-y1)*_factor_; + } + return _lookup_table_1_row; + } + + + const double * IndexTable0(double var_chaste_interface__membrane__V) + { + const double _offset_0 = var_chaste_interface__membrane__V - mTableMins[0]; + const double _offset_0_over_table_step = _offset_0 * mTableStepInverses[0]; + const unsigned _table_index_0 = (unsigned)(_offset_0_over_table_step); + const double _factor_0 = _offset_0_over_table_step - _table_index_0; + const double* const _lt_0_row = Cellbeeler_reuter_model_1977FromCellMLOpt_LookupTables::Instance()->_lookup_0_row(_table_index_0, _factor_0); + return _lt_0_row; + } + + const double * IndexTable1(double var_chaste_interface__slow_inward_current__Cai) + { + const double _offset_1 = var_chaste_interface__slow_inward_current__Cai - mTableMins[1]; + const double _offset_1_over_table_step = _offset_1 * mTableStepInverses[1]; + const unsigned _table_index_1 = (unsigned)(_offset_1_over_table_step); + const double _factor_1 = _offset_1_over_table_step - _table_index_1; + const double* const _lt_1_row = Cellbeeler_reuter_model_1977FromCellMLOpt_LookupTables::Instance()->_lookup_1_row(_table_index_1, _factor_1); + return _lt_1_row; + } + + +// LCOV_EXCL_START + bool CheckIndex0(double& var_chaste_interface__membrane__V) + { + bool _oob_0 = false; + if (var_chaste_interface__membrane__V>mTableMaxs[0] || var_chaste_interface__membrane__VmTableMaxs[1] || var_chaste_interface__slow_inward_current__Cai= -9.9999999999999995e-8) && (0.92000000000000004 + 0.040000000000000001 * var_chaste_interface__membrane__V <= 9.9999999999999995e-8)) ? (7.3000000000000007 + 0.10000000000000001 * var_chaste_interface__membrane__V) : (-5 * (0.92000000000000004 + 0.040000000000000001 * var_chaste_interface__membrane__V) / (-1 + exp(-0.92000000000000004 - 0.040000000000000001 * var_chaste_interface__membrane__V)))); + }; + const double var_chaste_interface__membrane__V = mTableMins[0] + i*mTableSteps[0]; + double val = f(var_chaste_interface__membrane__V); + + _lookup_table_0[i][2] = val; + } + + for (unsigned i=0 ; i<_table_size_0; i++) + { + auto f = [](double var_chaste_interface__membrane__V) { + return 1 + exp(0.35997120230381568 - 0.071994240460763137 * var_chaste_interface__membrane__V); + }; + const double var_chaste_interface__membrane__V = mTableMins[0] + i*mTableSteps[0]; + double val = f(var_chaste_interface__membrane__V); + + _lookup_table_0[i][3] = val; + } + + for (unsigned i=0 ; i<_table_size_0; i++) + { + auto f = [](double var_chaste_interface__membrane__V) { + return exp(0.050000000000000003 - 0.01 * var_chaste_interface__membrane__V); + }; + const double var_chaste_interface__membrane__V = mTableMins[0] + i*mTableSteps[0]; + double val = f(var_chaste_interface__membrane__V); + + _lookup_table_0[i][4] = val; + } + + for (unsigned i=0 ; i<_table_size_0; i++) + { + auto f = [](double var_chaste_interface__membrane__V) { + return 1 + exp(2.2000000000000002 + 0.050000000000000003 * var_chaste_interface__membrane__V); + }; + const double var_chaste_interface__membrane__V = mTableMins[0] + i*mTableSteps[0]; + double val = f(var_chaste_interface__membrane__V); + + _lookup_table_0[i][5] = val; + } + + for (unsigned i=0 ; i<_table_size_0; i++) + { + auto f = [](double var_chaste_interface__membrane__V) { + return exp(-0.74576271186440679 - 0.016949152542372881 * var_chaste_interface__membrane__V); + }; + const double var_chaste_interface__membrane__V = mTableMins[0] + i*mTableSteps[0]; + double val = f(var_chaste_interface__membrane__V); + + _lookup_table_0[i][6] = val; + } + + for (unsigned i=0 ; i<_table_size_0; i++) + { + auto f = [](double var_chaste_interface__membrane__V) { + return 1 + exp(4.197901049475262 + 0.14992503748125938 * var_chaste_interface__membrane__V); + }; + const double var_chaste_interface__membrane__V = mTableMins[0] + i*mTableSteps[0]; + double val = f(var_chaste_interface__membrane__V); + + _lookup_table_0[i][7] = val; + } + + for (unsigned i=0 ; i<_table_size_0; i++) + { + auto f = [](double var_chaste_interface__membrane__V) { + return exp(-0.224 - 0.0080000000000000002 * var_chaste_interface__membrane__V); + }; + const double var_chaste_interface__membrane__V = mTableMins[0] + i*mTableSteps[0]; + double val = f(var_chaste_interface__membrane__V); + + _lookup_table_0[i][8] = val; + } + + for (unsigned i=0 ; i<_table_size_0; i++) + { + auto f = [](double var_chaste_interface__membrane__V) { + return 1 + exp(-6 - 0.20000000000000001 * var_chaste_interface__membrane__V); + }; + const double var_chaste_interface__membrane__V = mTableMins[0] + i*mTableSteps[0]; + double val = f(var_chaste_interface__membrane__V); + + _lookup_table_0[i][9] = val; + } + + for (unsigned i=0 ; i<_table_size_0; i++) + { + auto f = [](double var_chaste_interface__membrane__V) { + return exp(-0.59999999999999998 - 0.02 * var_chaste_interface__membrane__V); + }; + const double var_chaste_interface__membrane__V = mTableMins[0] + i*mTableSteps[0]; + double val = f(var_chaste_interface__membrane__V); + + _lookup_table_0[i][10] = val; + } + + for (unsigned i=0 ; i<_table_size_0; i++) + { + auto f = [](double var_chaste_interface__membrane__V) { + return (((4.7000000000000002 + 0.10000000000000001 * var_chaste_interface__membrane__V >= -9.9999999999999995e-8) && (4.7000000000000002 + 0.10000000000000001 * var_chaste_interface__membrane__V <= 9.9999999999999995e-8)) ? (33.5 + 0.5 * var_chaste_interface__membrane__V) : (-10 * (4.7000000000000002 + 0.10000000000000001 * var_chaste_interface__membrane__V) / (-1 + exp(-4.7000000000000002 - 0.10000000000000001 * var_chaste_interface__membrane__V)))); + }; + const double var_chaste_interface__membrane__V = mTableMins[0] + i*mTableSteps[0]; + double val = f(var_chaste_interface__membrane__V); + //Expressions which are part of a piecewise could be inf / nan, this is generally accptable, due to the piecewise, however occasionally interpolation of the lookup table from a nan/inf version can give problems. + //To avoid this values stored in the table are intrpolated. Occurances of this to at most 2 per expression. + if (!std::isfinite(val) && _lookup_table_0_num_misshit_piecewise[11] < 2){ + double left = f(var_chaste_interface__membrane__V - mTableSteps[0]); + double right = f(var_chaste_interface__membrane__V + mTableSteps[0]); + val = (left + right) / 2.0; + // count and limit number of misshits + _lookup_table_0_num_misshit_piecewise[11] +=1; + } + else if (!std::isfinite(val) && _lookup_table_0_num_misshit_piecewise[11] >= 2){ + EXCEPTION("Lookup table 11 at ["< mpInstance; + + // Row lookup methods memory + double _lookup_table_0_row[17]; + + // Row lookup methods memory + double _lookup_table_1_row[1]; + + // Lookup tables + double (*_lookup_table_0)[17]; + int _lookup_table_0_num_misshit_piecewise[17] = {0}; + + // Lookup tables + double (*_lookup_table_1)[1]; + int _lookup_table_1_num_misshit_piecewise[1] = {0}; + +}; + +std::shared_ptr Cellbeeler_reuter_model_1977FromCellMLOpt_LookupTables::mpInstance; + + + boost::shared_ptr Cellbeeler_reuter_model_1977FromCellMLOpt::UseCellMLDefaultStimulus() + { + // Use the default stimulus specified by CellML metadata + const double var_chaste_interface__stimulus_protocol__IstimAmplitude_converted = 50.000000000000007; // uA_per_cm2 + const double var_chaste_interface__stimulus_protocol__IstimPeriod = 1000; // ms + const double var_chaste_interface__stimulus_protocol__IstimPulseDuration = 1; // ms + const double var_chaste_interface__stimulus_protocol__IstimStart = 10; // ms + boost::shared_ptr p_cellml_stim(new RegularStimulus( + -fabs(var_chaste_interface__stimulus_protocol__IstimAmplitude_converted), + var_chaste_interface__stimulus_protocol__IstimPulseDuration, + var_chaste_interface__stimulus_protocol__IstimPeriod, + var_chaste_interface__stimulus_protocol__IstimStart + )); + mpIntracellularStimulus = p_cellml_stim; + return p_cellml_stim; + } + double Cellbeeler_reuter_model_1977FromCellMLOpt::GetIntracellularCalciumConcentration() + { + return mStateVariables[1]; + } + Cellbeeler_reuter_model_1977FromCellMLOpt::Cellbeeler_reuter_model_1977FromCellMLOpt(boost::shared_ptr pSolver, boost::shared_ptr pIntracellularStimulus) + : AbstractCardiacCell( + pSolver, + 8, + 0, + pIntracellularStimulus) + { + // Time units: millisecond + // + this->mpSystemInfo = OdeSystemInformation::Instance(); + Init(); + + // We have a default stimulus specified in the CellML file metadata + this->mHasDefaultStimulusFromCellML = true; + + this->mParameters[0] = 0.00089999999999999998; // (var_slow_inward_current__g_s) [mS_per_mm2] + this->mParameters[1] = 0.01; // (var_membrane__C) [uF_per_mm2] + this->mParameters[2] = 0.040000000000000001; // (var_sodium_current__g_Na) [mS_per_mm2] + this->mParameters[3] = 0; // (var_sodium_current__perc_reduced_inact_for_IpNa) [dimensionless] + this->mParameters[4] = 0; // (var_sodium_current__shift_INa_inact) [mV] + this->mParameters[5] = 0.0035000000000000001; // (var_time_independent_outward_current__G_K1) [uA_per_mm2] + this->mParameters[6] = 0.0080000000000000002; // (var_time_dependent_outward_current__G_Kr) [uA_per_mm2] + this->mParameters[7] = 50; // (var_sodium_current__E_Na) [mV] + } + + Cellbeeler_reuter_model_1977FromCellMLOpt::~Cellbeeler_reuter_model_1977FromCellMLOpt() + { + } + + AbstractLookupTableCollection* Cellbeeler_reuter_model_1977FromCellMLOpt::GetLookupTableCollection() + { + return Cellbeeler_reuter_model_1977FromCellMLOpt_LookupTables::Instance(); + } + + void Cellbeeler_reuter_model_1977FromCellMLOpt::VerifyStateVariables() + { + std::vector& rY = rGetStateVariables(); + std::string error_message = ""; + + for (unsigned i=0; i < 8; i++) + { + if(std::isnan(rY[i])) + { + error_message += "State variable " + this->rGetStateVariableNames()[i] + " is not a number\n"; + } + if(std::isinf(rY[i])) + { + error_message += "State variable " + this->rGetStateVariableNames()[i] + " has become INFINITE\n"; + } + if(this->is_concentration[i] && rY[i] < 0) + { + error_message += "Concentration " + this->rGetStateVariableNames()[i] + " below 0\n"; + } + if(this->is_probability[i] && rY[i] < 0) + { + error_message += "Probability " + this->rGetStateVariableNames()[i] + " below 0\n"; + } + if(this->is_probability[i] && rY[i] > 1) + { + error_message += "Probability " + this->rGetStateVariableNames()[i] + " above 1\n"; + } + } + if (error_message != ""){ + EXCEPTION(DumpState(error_message)); + } + } + + double Cellbeeler_reuter_model_1977FromCellMLOpt::GetIIonic(const std::vector* pStateVariables) + { + // For state variable interpolation (SVI) we read in interpolated state variables, + // otherwise for ionic current interpolation (ICI) we use the state variables of this model (node). + if (!pStateVariables) pStateVariables = &rGetStateVariables(); + const std::vector& rY = *pStateVariables; + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: mV; Initial value: -84.624 + double var_chaste_interface__slow_inward_current__Cai = rY[1]; + // Units: concentration_units; Initial value: 0.0001 + double var_chaste_interface__sodium_current_m_gate__m = rY[2]; + // Units: dimensionless; Initial value: 0.011 + double var_chaste_interface__sodium_current_h_gate__h = rY[3]; + // Units: dimensionless; Initial value: 0.988 + double var_chaste_interface__sodium_current_j_gate__j = rY[4]; + // Units: dimensionless; Initial value: 0.975 + double var_chaste_interface__slow_inward_current_d_gate__d = rY[5]; + // Units: dimensionless; Initial value: 0.003 + double var_chaste_interface__slow_inward_current_f_gate__f = rY[6]; + // Units: dimensionless; Initial value: 0.994 + double var_chaste_interface__time_dependent_outward_current_x1_gate__x1 = rY[7]; + // Units: dimensionless; Initial value: 0.0001 + + // Lookup table indexing + const bool _oob_0 = Cellbeeler_reuter_model_1977FromCellMLOpt_LookupTables::Instance()->CheckIndex0(var_chaste_interface__membrane__V); +// LCOV_EXCL_START + if (_oob_0) + EXCEPTION(DumpState("membrane_voltage outside lookup table range", rY)); +// LCOV_EXCL_STOP + const double* const _lt_0_row = Cellbeeler_reuter_model_1977FromCellMLOpt_LookupTables::Instance()->IndexTable0(var_chaste_interface__membrane__V); + + // Lookup table indexing + const bool _oob_1 = Cellbeeler_reuter_model_1977FromCellMLOpt_LookupTables::Instance()->CheckIndex1(var_chaste_interface__slow_inward_current__Cai); +// LCOV_EXCL_START + if (_oob_1) + EXCEPTION(DumpState("cytosolic_calcium_concentration outside lookup table range", rY)); +// LCOV_EXCL_STOP + const double* const _lt_1_row = Cellbeeler_reuter_model_1977FromCellMLOpt_LookupTables::Instance()->IndexTable1(var_chaste_interface__slow_inward_current__Cai); + + const double var_slow_inward_current__i_s_converted = 100.00000000000001 * (-7.6990712032745758 + _lt_1_row[0] + var_chaste_interface__membrane__V) * mParameters[0] * var_chaste_interface__slow_inward_current_d_gate__d * var_chaste_interface__slow_inward_current_f_gate__f; // uA_per_cm2 + const double var_sodium_current__i_Na_converted = 100.00000000000001 * (3.0000000000000001e-5 + pow(var_chaste_interface__sodium_current_m_gate__m, 3) * mParameters[2] * var_chaste_interface__sodium_current_h_gate__h * var_chaste_interface__sodium_current_j_gate__j) * (-mParameters[7] + var_chaste_interface__membrane__V); // uA_per_cm2 + const double var_time_dependent_outward_current__i_x1_converted = 100.00000000000001 * (_lt_0_row[1]) * mParameters[6] * var_chaste_interface__time_dependent_outward_current_x1_gate__x1 / _lt_0_row[0]; // uA_per_cm2 + const double var_time_independent_outward_current__i_K1_converted = 100.00000000000001 * (_lt_0_row[2]) * mParameters[5]; // uA_per_cm2 + const double var_chaste_interface__i_ionic = var_slow_inward_current__i_s_converted + var_sodium_current__i_Na_converted + var_time_dependent_outward_current__i_x1_converted + var_time_independent_outward_current__i_K1_converted; // uA_per_cm2 + + const double i_ionic = var_chaste_interface__i_ionic; + EXCEPT_IF_NOT(!std::isnan(i_ionic)); + return i_ionic; + } + + void Cellbeeler_reuter_model_1977FromCellMLOpt::EvaluateYDerivatives(double var_chaste_interface__environment__time, const std::vector& rY, std::vector& rDY) + { + // Inputs: + // Time units: millisecond + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: mV; Initial value: -84.624 + double var_chaste_interface__slow_inward_current__Cai = rY[1]; + // Units: concentration_units; Initial value: 0.0001 + double var_chaste_interface__sodium_current_m_gate__m = rY[2]; + // Units: dimensionless; Initial value: 0.011 + double var_chaste_interface__sodium_current_h_gate__h = rY[3]; + // Units: dimensionless; Initial value: 0.988 + double var_chaste_interface__sodium_current_j_gate__j = rY[4]; + // Units: dimensionless; Initial value: 0.975 + double var_chaste_interface__slow_inward_current_d_gate__d = rY[5]; + // Units: dimensionless; Initial value: 0.003 + double var_chaste_interface__slow_inward_current_f_gate__f = rY[6]; + // Units: dimensionless; Initial value: 0.994 + double var_chaste_interface__time_dependent_outward_current_x1_gate__x1 = rY[7]; + // Units: dimensionless; Initial value: 0.0001 + + // Lookup table indexing + const bool _oob_0 = Cellbeeler_reuter_model_1977FromCellMLOpt_LookupTables::Instance()->CheckIndex0(var_chaste_interface__membrane__V); +// LCOV_EXCL_START + if (_oob_0) + EXCEPTION(DumpState("membrane_voltage outside lookup table range", rY , var_chaste_interface__environment__time)); +// LCOV_EXCL_STOP + const double* const _lt_0_row = Cellbeeler_reuter_model_1977FromCellMLOpt_LookupTables::Instance()->IndexTable0(var_chaste_interface__membrane__V); + + // Lookup table indexing + const bool _oob_1 = Cellbeeler_reuter_model_1977FromCellMLOpt_LookupTables::Instance()->CheckIndex1(var_chaste_interface__slow_inward_current__Cai); +// LCOV_EXCL_START + if (_oob_1) + EXCEPTION(DumpState("cytosolic_calcium_concentration outside lookup table range", rY , var_chaste_interface__environment__time)); +// LCOV_EXCL_STOP + const double* const _lt_1_row = Cellbeeler_reuter_model_1977FromCellMLOpt_LookupTables::Instance()->IndexTable1(var_chaste_interface__slow_inward_current__Cai); + + // Mathematics + double d_dt_chaste_interface_var_membrane__V; + const double d_dt_chaste_interface_var_slow_inward_current_d_gate__d = 0.095000000000000001 * (1 - var_chaste_interface__slow_inward_current_d_gate__d) * _lt_0_row[4] / (_lt_0_row[3]) - 0.070000000000000007 * var_chaste_interface__slow_inward_current_d_gate__d * _lt_0_row[6] / (_lt_0_row[5]); // 1 / ms + const double d_dt_chaste_interface_var_slow_inward_current_f_gate__f = 0.012 * (1 - var_chaste_interface__slow_inward_current_f_gate__f) * _lt_0_row[8] / (_lt_0_row[7]) - 0.0064999999999999997 * var_chaste_interface__slow_inward_current_f_gate__f * _lt_0_row[10] / (_lt_0_row[9]); // 1 / ms + const double var_slow_inward_current__i_s = (-7.6990712032745758 + _lt_1_row[0] + var_chaste_interface__membrane__V) * mParameters[0] * var_chaste_interface__slow_inward_current_d_gate__d * var_chaste_interface__slow_inward_current_f_gate__f; // uA_per_mm2 + const double d_dt_chaste_interface_var_slow_inward_current__Cai = 7.0000000000000007e-6 - 0.070000000000000007 * var_chaste_interface__slow_inward_current__Cai - 0.01 * var_slow_inward_current__i_s; // concentration_units / ms + const double var_sodium_current_h_gate__alpha_h = 0.126 * exp(-19.25 + 0.25 * mParameters[4] - 0.25 * var_chaste_interface__membrane__V); // per_ms + const double var_sodium_current_h_gate__beta_h = 1.7 / (1 + exp(-1.845 + 0.082000000000000003 * mParameters[4] - 0.082000000000000003 * var_chaste_interface__membrane__V)); // per_ms + const double d_dt_chaste_interface_var_sodium_current_h_gate__h = (var_sodium_current_h_gate__alpha_h + var_sodium_current_h_gate__beta_h) * (-var_chaste_interface__sodium_current_h_gate__h + 0.01 * mParameters[3] + (1 - 0.01 * mParameters[3]) * var_sodium_current_h_gate__alpha_h / (var_sodium_current_h_gate__alpha_h + var_sodium_current_h_gate__beta_h)); // 1 / ms + const double var_sodium_current_j_gate__alpha_j = 0.055 * exp(-19.5 + 0.25 * mParameters[4] - 0.25 * var_chaste_interface__membrane__V) / (1 + exp(-15.600000000000001 + 0.20000000000000001 * mParameters[4] - 0.20000000000000001 * var_chaste_interface__membrane__V)); // per_ms + const double var_sodium_current_j_gate__beta_j = 0.29999999999999999 / (1 + exp(-3.2000000000000002 + 0.10000000000000001 * mParameters[4] - 0.10000000000000001 * var_chaste_interface__membrane__V)); // per_ms + const double d_dt_chaste_interface_var_sodium_current_j_gate__j = (var_sodium_current_j_gate__alpha_j + var_sodium_current_j_gate__beta_j) * (-var_chaste_interface__sodium_current_j_gate__j + 0.01 * mParameters[3] + (1 - 0.01 * mParameters[3]) * var_sodium_current_j_gate__alpha_j / (var_sodium_current_j_gate__alpha_j + var_sodium_current_j_gate__beta_j)); // 1 / ms + const double d_dt_chaste_interface_var_sodium_current_m_gate__m = (1 - var_chaste_interface__sodium_current_m_gate__m) * _lt_0_row[11] - 40 * var_chaste_interface__sodium_current_m_gate__m * _lt_0_row[12]; // 1 / ms + const double d_dt_chaste_interface_var_time_dependent_outward_current_x1_gate__x1 = 0.00050000000000000001 * (1 - var_chaste_interface__time_dependent_outward_current_x1_gate__x1) * _lt_0_row[14] / (_lt_0_row[13]) - 0.0012999999999999999 * var_chaste_interface__time_dependent_outward_current_x1_gate__x1 * _lt_0_row[16] / (_lt_0_row[15]); // 1 / ms + + if (mSetVoltageDerivativeToZero) + { + d_dt_chaste_interface_var_membrane__V = 0.0; + } + else + { + d_dt_chaste_interface_var_membrane__V = (-var_slow_inward_current__i_s - 0.0099999999999999985 * GetIntracellularAreaStimulus(var_chaste_interface__environment__time) - (3.0000000000000001e-5 + pow(var_chaste_interface__sodium_current_m_gate__m, 3) * mParameters[2] * var_chaste_interface__sodium_current_h_gate__h * var_chaste_interface__sodium_current_j_gate__j) * (-mParameters[7] + var_chaste_interface__membrane__V) - (_lt_0_row[2]) * mParameters[5] - (_lt_0_row[1]) * mParameters[6] * var_chaste_interface__time_dependent_outward_current_x1_gate__x1 / _lt_0_row[0]) / mParameters[1]; // mV / ms + } + + rDY[0] = d_dt_chaste_interface_var_membrane__V; + rDY[1] = d_dt_chaste_interface_var_slow_inward_current__Cai; + rDY[2] = d_dt_chaste_interface_var_sodium_current_m_gate__m; + rDY[3] = d_dt_chaste_interface_var_sodium_current_h_gate__h; + rDY[4] = d_dt_chaste_interface_var_sodium_current_j_gate__j; + rDY[5] = d_dt_chaste_interface_var_slow_inward_current_d_gate__d; + rDY[6] = d_dt_chaste_interface_var_slow_inward_current_f_gate__f; + rDY[7] = d_dt_chaste_interface_var_time_dependent_outward_current_x1_gate__x1; + } + + std::vector Cellbeeler_reuter_model_1977FromCellMLOpt::ComputeDerivedQuantities(double var_chaste_interface__environment__time, const std::vector & rY) + { + // Inputs: + // Time units: millisecond + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: mV; Initial value: -84.624 + double var_chaste_interface__slow_inward_current__Cai = rY[1]; + // Units: concentration_units; Initial value: 0.0001 + double var_chaste_interface__sodium_current_m_gate__m = rY[2]; + // Units: dimensionless; Initial value: 0.011 + double var_chaste_interface__sodium_current_h_gate__h = rY[3]; + // Units: dimensionless; Initial value: 0.988 + double var_chaste_interface__sodium_current_j_gate__j = rY[4]; + // Units: dimensionless; Initial value: 0.975 + double var_chaste_interface__slow_inward_current_d_gate__d = rY[5]; + // Units: dimensionless; Initial value: 0.003 + double var_chaste_interface__slow_inward_current_f_gate__f = rY[6]; + // Units: dimensionless; Initial value: 0.994 + double var_chaste_interface__time_dependent_outward_current_x1_gate__x1 = rY[7]; + // Units: dimensionless; Initial value: 0.0001 + + // Lookup table indexing + const bool _oob_0 = Cellbeeler_reuter_model_1977FromCellMLOpt_LookupTables::Instance()->CheckIndex0(var_chaste_interface__membrane__V); +// LCOV_EXCL_START + if (_oob_0) + EXCEPTION(DumpState("membrane_voltage outside lookup table range", rY , var_chaste_interface__environment__time)); +// LCOV_EXCL_STOP + const double* const _lt_0_row = Cellbeeler_reuter_model_1977FromCellMLOpt_LookupTables::Instance()->IndexTable0(var_chaste_interface__membrane__V); + + + // Mathematics + const double var_slow_inward_current__E_s = 7.6990712032745758 - 13.028700000000001 * log(var_chaste_interface__slow_inward_current__Cai); // mV + const double var_slow_inward_current__i_s = (-var_slow_inward_current__E_s + var_chaste_interface__membrane__V) * mParameters[0] * var_chaste_interface__slow_inward_current_d_gate__d * var_chaste_interface__slow_inward_current_f_gate__f; // uA_per_mm2 + const double var_slow_inward_current__i_s_converted = 100.00000000000001 * var_slow_inward_current__i_s; // uA_per_cm2 + const double var_sodium_current__g_Nac = 3.0000000000000001e-5; // mS_per_mm2 + const double var_sodium_current_h_gate__alpha_h = 0.126 * exp(-19.25 + 0.25 * mParameters[4] - 0.25 * var_chaste_interface__membrane__V); // per_ms + const double var_sodium_current_h_gate__beta_h = 1.7 / (1 + exp(-1.845 + 0.082000000000000003 * mParameters[4] - 0.082000000000000003 * var_chaste_interface__membrane__V)); // per_ms + const double var_sodium_current_h_gate__tau_h = 1 / (var_sodium_current_h_gate__alpha_h + var_sodium_current_h_gate__beta_h); // ms + const double var_sodium_current_j_gate__alpha_j = 0.055 * exp(-19.5 + 0.25 * mParameters[4] - 0.25 * var_chaste_interface__membrane__V) / (1 + exp(-15.600000000000001 + 0.20000000000000001 * mParameters[4] - 0.20000000000000001 * var_chaste_interface__membrane__V)); // per_ms + const double var_sodium_current_j_gate__beta_j = 0.29999999999999999 / (1 + exp(-3.2000000000000002 + 0.10000000000000001 * mParameters[4] - 0.10000000000000001 * var_chaste_interface__membrane__V)); // per_ms + const double var_sodium_current_j_gate__tau_j = 1 / (var_sodium_current_j_gate__alpha_j + var_sodium_current_j_gate__beta_j); // ms + const double var_sodium_current__i_Na = (-mParameters[7] + var_chaste_interface__membrane__V) * (pow(var_chaste_interface__sodium_current_m_gate__m, 3) * mParameters[2] * var_chaste_interface__sodium_current_h_gate__h * var_chaste_interface__sodium_current_j_gate__j + var_sodium_current__g_Nac); // uA_per_mm2 + const double var_sodium_current__i_Na_converted = 100.00000000000001 * var_sodium_current__i_Na; // uA_per_cm2 + const double var_stimulus_protocol__Istim_converted = -GetIntracellularAreaStimulus(var_chaste_interface__environment__time); // uA_per_cm2 + const double var_time_dependent_outward_current__i_x1 = (_lt_0_row[1]) * mParameters[6] * var_chaste_interface__time_dependent_outward_current_x1_gate__x1 / _lt_0_row[0]; // uA_per_mm2 + const double var_time_dependent_outward_current__i_x1_converted = 100.00000000000001 * var_time_dependent_outward_current__i_x1; // uA_per_cm2 + const double var_time_independent_outward_current__B = -0.040000000000000001; // per_mV + const double var_time_independent_outward_current__A = -0.20000000000000001 / var_time_independent_outward_current__B; // dimensionless + const double var_time_independent_outward_current__v0 = -23; // mV + const double var_time_independent_outward_current__U = (-var_time_independent_outward_current__v0 + var_chaste_interface__membrane__V) * var_time_independent_outward_current__B; // dimensionless + const double var_time_independent_outward_current__temp_current = (((var_time_independent_outward_current__U >= -9.9999999999999995e-8) && (var_time_independent_outward_current__U <= 9.9999999999999995e-8)) ? ((1 - 0.5 * var_time_independent_outward_current__U) * var_time_independent_outward_current__A) : (var_time_independent_outward_current__A * var_time_independent_outward_current__U / (-1 + exp(var_time_independent_outward_current__U)))); // dimensionless + const double var_time_independent_outward_current__i_K1 = (4 * (-1 + exp(3.3999999999999999 + 0.040000000000000001 * var_chaste_interface__membrane__V)) / (exp(2.1200000000000001 + 0.040000000000000001 * var_chaste_interface__membrane__V) + exp(4.2400000000000002 + 0.080000000000000002 * var_chaste_interface__membrane__V)) + var_time_independent_outward_current__temp_current) * mParameters[5]; // uA_per_mm2 + const double var_time_independent_outward_current__i_K1_converted = 100.00000000000001 * var_time_independent_outward_current__i_K1; // uA_per_cm2 + + std::vector dqs(8); + dqs[0] = var_slow_inward_current__i_s_converted; + dqs[1] = var_sodium_current__i_Na_converted; + dqs[2] = var_sodium_current_h_gate__tau_h; + dqs[3] = var_sodium_current_j_gate__tau_j; + dqs[4] = var_time_independent_outward_current__i_K1_converted; + dqs[5] = var_time_dependent_outward_current__i_x1_converted; + dqs[6] = var_stimulus_protocol__Istim_converted; + dqs[7] = var_chaste_interface__environment__time; + return dqs; + } + +template<> +void OdeSystemInformation::Initialise(void) +{ + this->mSystemName = "beeler_reuter_model_1977"; + this->mFreeVariableName = "time"; + this->mFreeVariableUnits = "ms"; + + // rY[0]: + this->mVariableNames.push_back("membrane_voltage"); + this->mVariableUnits.push_back("mV"); + this->mInitialConditions.push_back(-84.624); + + // rY[1]: + this->mVariableNames.push_back("cytosolic_calcium_concentration"); + this->mVariableUnits.push_back("concentration_units"); + this->mInitialConditions.push_back(0.0001); + + // rY[2]: + this->mVariableNames.push_back("membrane_fast_sodium_current_m_gate"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.011); + + // rY[3]: + this->mVariableNames.push_back("membrane_fast_sodium_current_h_gate"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.988); + + // rY[4]: + this->mVariableNames.push_back("membrane_fast_sodium_current_j_gate"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.975); + + // rY[5]: + this->mVariableNames.push_back("membrane_L_type_calcium_current_d_gate"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.003); + + // rY[6]: + this->mVariableNames.push_back("membrane_L_type_calcium_current_f_gate"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.994); + + // rY[7]: + this->mVariableNames.push_back("time_dependent_outward_current_x1_gate__x1"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.0001); + + // mParameters[0]: + this->mParameterNames.push_back("membrane_L_type_calcium_current_conductance"); + this->mParameterUnits.push_back("mS_per_mm2"); + + // mParameters[1]: + this->mParameterNames.push_back("membrane_capacitance"); + this->mParameterUnits.push_back("uF_per_mm2"); + + // mParameters[2]: + this->mParameterNames.push_back("membrane_fast_sodium_current_conductance"); + this->mParameterUnits.push_back("mS_per_mm2"); + + // mParameters[3]: + this->mParameterNames.push_back("membrane_fast_sodium_current_reduced_inactivation"); + this->mParameterUnits.push_back("dimensionless"); + + // mParameters[4]: + this->mParameterNames.push_back("membrane_fast_sodium_current_shift_inactivation"); + this->mParameterUnits.push_back("mV"); + + // mParameters[5]: + this->mParameterNames.push_back("membrane_inward_rectifier_potassium_current_conductance"); + this->mParameterUnits.push_back("uA_per_mm2"); + + // mParameters[6]: + this->mParameterNames.push_back("membrane_rapid_delayed_rectifier_potassium_current_conductance"); + this->mParameterUnits.push_back("uA_per_mm2"); + + // mParameters[7]: + this->mParameterNames.push_back("sodium_reversal_potential"); + this->mParameterUnits.push_back("mV"); + + // Derived Quantity index [0]: + this->mDerivedQuantityNames.push_back("membrane_L_type_calcium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [1]: + this->mDerivedQuantityNames.push_back("membrane_fast_sodium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [2]: + this->mDerivedQuantityNames.push_back("membrane_fast_sodium_current_h_gate_tau"); + this->mDerivedQuantityUnits.push_back("ms"); + + // Derived Quantity index [3]: + this->mDerivedQuantityNames.push_back("membrane_fast_sodium_current_j_gate_tau"); + this->mDerivedQuantityUnits.push_back("ms"); + + // Derived Quantity index [4]: + this->mDerivedQuantityNames.push_back("membrane_inward_rectifier_potassium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [5]: + this->mDerivedQuantityNames.push_back("membrane_rapid_delayed_rectifier_potassium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [6]: + this->mDerivedQuantityNames.push_back("membrane_stimulus_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [7]: + this->mDerivedQuantityNames.push_back("time"); + this->mDerivedQuantityUnits.push_back("ms"); + + this->mInitialised = true; +} + +// Serialization for Boost >= 1.36 +#include "SerializationExportWrapperForCpp.hpp" +CHASTE_CLASS_EXPORT(Cellbeeler_reuter_model_1977FromCellMLOpt) + diff --git a/chaste_codegen/tests/numerical/baseline/Opt/beeler_reuter_model_1977_lookup_tables.hpp b/chaste_codegen/tests/numerical/baseline/Opt/beeler_reuter_model_1977_lookup_tables.hpp new file mode 100644 index 00000000..0dd28675 --- /dev/null +++ b/chaste_codegen/tests/numerical/baseline/Opt/beeler_reuter_model_1977_lookup_tables.hpp @@ -0,0 +1,86 @@ +#ifndef CELLBEELER_REUTER_MODEL_1977FROMCELLMLOPT_HPP_ +#define CELLBEELER_REUTER_MODEL_1977FROMCELLMLOPT_HPP_ + +//! @file +//! +//! This source file was generated from CellML by chaste_codegen version (version omitted as unimportant) +//! +//! Model: beeler_reuter_model_1977 +//! +//! Processed by chaste_codegen: https://github.com/ModellingWebLab/chaste-codegen +//! (translator: chaste_codegen, model type: NormalOpt) +//! on (date omitted as unimportant) +//! +//! + +#include "ChasteSerialization.hpp" +#include +#include "AbstractStimulusFunction.hpp" +#include "AbstractCardiacCell.hpp" + +class Cellbeeler_reuter_model_1977FromCellMLOpt : public AbstractCardiacCell +{ + friend class boost::serialization::access; + template + void serialize(Archive & archive, const unsigned int version) + { + archive & boost::serialization::base_object(*this); + + } + + // + // Settable parameters and readable variables + // + + +private: +const bool is_concentration[8] = {false, true, false, false, false, false, false, false}; +const bool is_probability[8] = {false, false, true, true, true, true, true, false}; +public: + + boost::shared_ptr UseCellMLDefaultStimulus(); + double GetIntracellularCalciumConcentration(); + Cellbeeler_reuter_model_1977FromCellMLOpt(boost::shared_ptr pSolver, boost::shared_ptr pIntracellularStimulus); + ~Cellbeeler_reuter_model_1977FromCellMLOpt(); + void VerifyStateVariables(); + AbstractLookupTableCollection* GetLookupTableCollection(); + double GetIIonic(const std::vector* pStateVariables=NULL); + void EvaluateYDerivatives(double var_chaste_interface__environment__time, const std::vector& rY, std::vector& rDY); + + std::vector ComputeDerivedQuantities(double var_chaste_interface__environment__time, const std::vector & rY); +}; + +// Needs to be included last +#include "SerializationExportWrapper.hpp" +CHASTE_CLASS_EXPORT(Cellbeeler_reuter_model_1977FromCellMLOpt) + +namespace boost +{ + namespace serialization + { + template + inline void save_construct_data( + Archive & ar, const Cellbeeler_reuter_model_1977FromCellMLOpt * t, const unsigned int fileVersion) + { + const boost::shared_ptr p_solver = t->GetSolver(); + const boost::shared_ptr p_stimulus = t->GetStimulusFunction(); + ar << p_solver; + ar << p_stimulus; + } + + template + inline void load_construct_data( + Archive & ar, Cellbeeler_reuter_model_1977FromCellMLOpt * t, const unsigned int fileVersion) + { + boost::shared_ptr p_solver; + boost::shared_ptr p_stimulus; + ar >> p_solver; + ar >> p_stimulus; + ::new(t)Cellbeeler_reuter_model_1977FromCellMLOpt(p_solver, p_stimulus); + } + + } + +} + +#endif // CELLBEELER_REUTER_MODEL_1977FROMCELLMLOPT_HPP_ \ No newline at end of file diff --git a/chaste_codegen/tests/numerical/baseline/Opt/dynamic_aslanidi_Purkinje_model_2009.cpp b/chaste_codegen/tests/numerical/baseline/Opt/dynamic_aslanidi_Purkinje_model_2009.cpp new file mode 100644 index 00000000..5c3fceb9 --- /dev/null +++ b/chaste_codegen/tests/numerical/baseline/Opt/dynamic_aslanidi_Purkinje_model_2009.cpp @@ -0,0 +1,1443 @@ +//! @file +//! +//! This source file was generated from CellML by chaste_codegen version (version omitted as unimportant) +//! +//! Model: aslanidi_2009 +//! +//! Processed by chaste_codegen: https://github.com/ModellingWebLab/chaste-codegen +//! (translator: chaste_codegen, model type: NormalOpt) +//! on (date omitted as unimportant) +//! +//! + +#include "aslanidi_Purkinje_model_2009Opt.hpp" +#include +#include +#include +#include +#include "Exception.hpp" +#include "OdeSystemInformation.hpp" +#include "RegularStimulus.hpp" +#include "HeartConfig.hpp" +#include "IsNan.hpp" +#include "MathsCustomFunctions.hpp" + +#include "ModelFactory.hpp" + +AbstractCardiacCellWithModifiers* Dynamicaslanidi_Purkinje_model_2009FromCellMLOpt::CreateMethod(boost::shared_ptr p_solver, boost::shared_ptr p_stimulus) { + return new Dynamicaslanidi_Purkinje_model_2009FromCellMLOpt(p_solver, p_stimulus); +} + +bool Dynamicaslanidi_Purkinje_model_2009FromCellMLOpt::registered = ModelFactory::Register("aslanidi_Purkinje_model_2009", "NormalOpt", (ModelFactory::TCreateMethod)Dynamicaslanidi_Purkinje_model_2009FromCellMLOpt::CreateMethod); + +class Dynamicaslanidi_Purkinje_model_2009FromCellMLOpt_LookupTables : public AbstractLookupTableCollection +{ +public: + static Dynamicaslanidi_Purkinje_model_2009FromCellMLOpt_LookupTables* Instance() + { + if (mpInstance.get() == NULL) + { + mpInstance.reset(new Dynamicaslanidi_Purkinje_model_2009FromCellMLOpt_LookupTables); + } + return mpInstance.get(); + } + + void FreeMemory() + { + + if (_lookup_table_0) + { + delete[] _lookup_table_0; + _lookup_table_0 = NULL; + } + + mNeedsRegeneration.assign(mNeedsRegeneration.size(), true); + } + + // Row lookup methods + // using linear-interpolation + + double* _lookup_0_row(unsigned i, double _factor_) + { + for (unsigned j=0; j<35; j++) + { + const double y1 = _lookup_table_0[i][j]; + const double y2 = _lookup_table_0[i+1][j]; + _lookup_table_0_row[j] = y1 + (y2-y1)*_factor_; + } + return _lookup_table_0_row; + } + + + const double * IndexTable0(double var_chaste_interface__membrane__V) + { + const double _offset_0 = var_chaste_interface__membrane__V - mTableMins[0]; + const double _offset_0_over_table_step = _offset_0 * mTableStepInverses[0]; + const unsigned _table_index_0 = (unsigned)(_offset_0_over_table_step); + const double _factor_0 = _offset_0_over_table_step - _table_index_0; + const double* const _lt_0_row = Dynamicaslanidi_Purkinje_model_2009FromCellMLOpt_LookupTables::Instance()->_lookup_0_row(_table_index_0, _factor_0); + return _lt_0_row; + } + + +// LCOV_EXCL_START + bool CheckIndex0(double& var_chaste_interface__membrane__V) + { + bool _oob_0 = false; + if (var_chaste_interface__membrane__V>mTableMaxs[0] || var_chaste_interface__membrane__V mpInstance; + + // Row lookup methods memory + double _lookup_table_0_row[35]; + + // Lookup tables + double (*_lookup_table_0)[35]; + int _lookup_table_0_num_misshit_piecewise[35] = {0}; + +}; + +std::shared_ptr Dynamicaslanidi_Purkinje_model_2009FromCellMLOpt_LookupTables::mpInstance; + + + boost::shared_ptr Dynamicaslanidi_Purkinje_model_2009FromCellMLOpt::UseCellMLDefaultStimulus() + { + // Use the default stimulus specified by CellML metadata + const double var_chaste_interface__membrane__stim_amplitude_converted = -80 * HeartConfig::Instance()->GetCapacitance(); // uA_per_cm2 + const double var_chaste_interface__membrane__stim_duration = 1; // millisecond + const double var_chaste_interface__membrane__stim_period = 800; // millisecond + const double var_chaste_interface__membrane__stim_start = 100; // millisecond + boost::shared_ptr p_cellml_stim(new RegularStimulus( + -fabs(var_chaste_interface__membrane__stim_amplitude_converted), + var_chaste_interface__membrane__stim_duration, + var_chaste_interface__membrane__stim_period, + var_chaste_interface__membrane__stim_start + )); + mpIntracellularStimulus = p_cellml_stim; + return p_cellml_stim; + } + double Dynamicaslanidi_Purkinje_model_2009FromCellMLOpt::GetIntracellularCalciumConcentration() + { + return mStateVariables[1]; + } + Dynamicaslanidi_Purkinje_model_2009FromCellMLOpt::Dynamicaslanidi_Purkinje_model_2009FromCellMLOpt(boost::shared_ptr pSolver, boost::shared_ptr pIntracellularStimulus) + : AbstractCardiacCellWithModifiers( + pSolver, + 30, + 0, + pIntracellularStimulus) + { + // Time units: millisecond + // + this->mpSystemInfo = OdeSystemInformation::Instance(); + Init(); + + // We have a default stimulus specified in the CellML file metadata + this->mHasDefaultStimulusFromCellML = true; + + // These will get initialised to DummyModifiers in the base class method. + this->AddModifier("JSR_calcium_concentration", + mp_JSR_calcium_concentration_modifier); + this->AddModifier("SR_leak_current_max", + mp_SR_leak_current_max_modifier); + this->AddModifier("SR_release_current", + mp_SR_release_current_modifier); + this->AddModifier("SR_release_current_max", + mp_SR_release_current_max_modifier); + this->AddModifier("SR_uptake_current_max", + mp_SR_uptake_current_max_modifier); + this->AddModifier("concentration_clamp_onoff", + mp_concentration_clamp_onoff_modifier); + this->AddModifier("cytosolic_calcium_concentration", + mp_cytosolic_calcium_concentration_modifier); + this->AddModifier("cytosolic_potassium_concentration", + mp_cytosolic_potassium_concentration_modifier); + this->AddModifier("cytosolic_sodium_concentration", + mp_cytosolic_sodium_concentration_modifier); + this->AddModifier("dyadic_space_calcium_concentration", + mp_dyadic_space_calcium_concentration_modifier); + this->AddModifier("extracellular_calcium_concentration", + mp_extracellular_calcium_concentration_modifier); + this->AddModifier("extracellular_potassium_concentration", + mp_extracellular_potassium_concentration_modifier); + this->AddModifier("extracellular_sodium_concentration", + mp_extracellular_sodium_concentration_modifier); + this->AddModifier("membrane_L_type_calcium_current", + mp_i_Ca_L__i_Ca_L_modifier); + this->AddModifier("membrane_L_type_calcium_current_conductance", + mp_membrane_L_type_calcium_current_conductance_modifier); + this->AddModifier("membrane_L_type_calcium_current_d_gate", + mp_membrane_L_type_calcium_current_d_gate_modifier); + this->AddModifier("membrane_L_type_calcium_current_f2_gate", + mp_membrane_L_type_calcium_current_f2_gate_modifier); + this->AddModifier("membrane_L_type_calcium_current_f2_gate_tau", + mp_membrane_L_type_calcium_current_f2_gate_tau_modifier); + this->AddModifier("membrane_L_type_calcium_current_fCa2_gate", + mp_membrane_L_type_calcium_current_fCa2_gate_modifier); + this->AddModifier("membrane_L_type_calcium_current_fCa2_gate_tau", + mp_membrane_L_type_calcium_current_fCa2_gate_tau_modifier); + this->AddModifier("membrane_L_type_calcium_current_fCa_gate", + mp_membrane_L_type_calcium_current_fCa_gate_modifier); + this->AddModifier("membrane_L_type_calcium_current_fCa_gate_tau", + mp_membrane_L_type_calcium_current_fCa_gate_tau_modifier); + this->AddModifier("membrane_L_type_calcium_current_f_gate", + mp_membrane_L_type_calcium_current_f_gate_modifier); + this->AddModifier("membrane_L_type_calcium_current_f_gate_tau", + mp_membrane_L_type_calcium_current_f_gate_tau_modifier); + this->AddModifier("membrane_fast_sodium_current", + mp_i_Na__i_Na_modifier); + this->AddModifier("membrane_fast_sodium_current_conductance", + mp_membrane_fast_sodium_current_conductance_modifier); + this->AddModifier("membrane_fast_sodium_current_h_gate", + mp_membrane_fast_sodium_current_h_gate_modifier); + this->AddModifier("membrane_fast_sodium_current_h_gate_tau", + mp_membrane_fast_sodium_current_h_gate_tau_modifier); + this->AddModifier("membrane_fast_sodium_current_j_gate", + mp_membrane_fast_sodium_current_j_gate_modifier); + this->AddModifier("membrane_fast_sodium_current_j_gate_tau", + mp_membrane_fast_sodium_current_j_gate_tau_modifier); + this->AddModifier("membrane_fast_sodium_current_m_gate", + mp_membrane_fast_sodium_current_m_gate_modifier); + this->AddModifier("membrane_fast_sodium_current_reduced_inactivation", + mp_membrane_fast_sodium_current_reduced_inactivation_modifier); + this->AddModifier("membrane_fast_sodium_current_shift_inactivation", + mp_membrane_fast_sodium_current_shift_inactivation_modifier); + this->AddModifier("membrane_inward_rectifier_potassium_current", + mp_i_K1__i_K1_modifier); + this->AddModifier("membrane_inward_rectifier_potassium_current_conductance", + mp_membrane_inward_rectifier_potassium_current_conductance_modifier); + this->AddModifier("membrane_rapid_delayed_rectifier_potassium_current", + mp_i_Kr__i_Kr_modifier); + this->AddModifier("membrane_rapid_delayed_rectifier_potassium_current_conductance", + mp_membrane_rapid_delayed_rectifier_potassium_current_conductance_modifier); + this->AddModifier("membrane_slow_delayed_rectifier_potassium_current", + mp_i_Ks__i_Ks_modifier); + this->AddModifier("membrane_slow_delayed_rectifier_potassium_current_conductance", + mp_membrane_slow_delayed_rectifier_potassium_current_conductance_modifier); + this->AddModifier("membrane_sodium_calcium_exchanger_current", + mp_i_NaCa__i_NaCa_modifier); + this->AddModifier("membrane_sodium_calcium_exchanger_current_conductance", + mp_membrane_sodium_calcium_exchanger_current_conductance_modifier); + this->AddModifier("membrane_transient_outward_current", + mp_i_to_1__i_to_1_modifier); + this->AddModifier("membrane_transient_outward_current_conductance", + mp_membrane_transient_outward_current_conductance_modifier); + this->AddModifier("membrane_voltage", + mp_membrane_voltage_modifier); + this->mParameters[0] = 0.0043750000000000004; // (var_q_leak__q_leak_max) [millimolar_per_millisecond] + this->mParameters[1] = 3000; // (var_q_rel__g_rel_max) [per_millisecond] + this->mParameters[2] = 0.0043750000000000004; // (var_q_up__q_up_max) [millimolar_per_millisecond] + this->mParameters[3] = 1; // (var_intracellular_ion_concentrations__conc_clamp) [dimensionless] + this->mParameters[4] = 1.8; // (var_model_parameters__Ca_o) [millimolar] + this->mParameters[5] = 5.4000000000000004; // (var_model_parameters__K_o) [millimolar] + this->mParameters[6] = 140; // (var_model_parameters__Na_o) [millimolar] + this->mParameters[7] = 0.3392328; // (var_i_Ca_L__g_Ca_L) [dimensionless] + this->mParameters[8] = 8; // (var_i_Na__g_Na) [milliS_per_microF] + this->mParameters[9] = 0; // (var_i_Na__perc_reduced_inact_for_IpNa) [dimensionless] + this->mParameters[10] = 0; // (var_i_Na__shift_INa_inact) [millivolt] + this->mParameters[11] = 0.25; // (var_i_K1__g_K1_max) [milliS_per_microF] + this->mParameters[12] = 0.040008488000000002; // (var_i_Kr__g_Kr_max) [milliS_per_microF] + this->mParameters[13] = 0.052581329000000003; // (var_i_Ks__g_Ks_max) [milliS_per_microF] + this->mParameters[14] = 4.5; // (var_i_NaCa__i_NaCa_max) [microA_per_microF] + this->mParameters[15] = 0.14135944; // (var_i_to_1__g_to_1) [milliS_per_microF] + } + + Dynamicaslanidi_Purkinje_model_2009FromCellMLOpt::~Dynamicaslanidi_Purkinje_model_2009FromCellMLOpt() + { + } + + AbstractLookupTableCollection* Dynamicaslanidi_Purkinje_model_2009FromCellMLOpt::GetLookupTableCollection() + { + return Dynamicaslanidi_Purkinje_model_2009FromCellMLOpt_LookupTables::Instance(); + } + + void Dynamicaslanidi_Purkinje_model_2009FromCellMLOpt::VerifyStateVariables() + { + std::vector& rY = rGetStateVariables(); + std::string error_message = ""; + + for (unsigned i=0; i < 30; i++) + { + if(std::isnan(rY[i])) + { + error_message += "State variable " + this->rGetStateVariableNames()[i] + " is not a number\n"; + } + if(std::isinf(rY[i])) + { + error_message += "State variable " + this->rGetStateVariableNames()[i] + " has become INFINITE\n"; + } + if(this->is_concentration[i] && rY[i] < 0) + { + error_message += "Concentration " + this->rGetStateVariableNames()[i] + " below 0\n"; + } + if(this->is_probability[i] && rY[i] < 0) + { + error_message += "Probability " + this->rGetStateVariableNames()[i] + " below 0\n"; + } + if(this->is_probability[i] && rY[i] > 1) + { + error_message += "Probability " + this->rGetStateVariableNames()[i] + " above 1\n"; + } + } + if (error_message != ""){ + EXCEPTION(DumpState(error_message)); + } + } + + double Dynamicaslanidi_Purkinje_model_2009FromCellMLOpt::GetIIonic(const std::vector* pStateVariables) + { + // For state variable interpolation (SVI) we read in interpolated state variables, + // otherwise for ionic current interpolation (ICI) we use the state variables of this model (node). + if (!pStateVariables) pStateVariables = &rGetStateVariables(); + const std::vector& rY = *pStateVariables; + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -83.43812846286808 + double var_chaste_interface__Ca_i__Ca_i = rY[1]; + // Units: millimolar; Initial value: 0.00022355433459434943 + double var_chaste_interface__i_Na_m_gate__m = rY[2]; + // Units: dimensionless; Initial value: 0.002003390432234504 + double var_chaste_interface__i_Na_h_gate__h = rY[3]; + // Units: dimensionless; Initial value: 0.9786390933308567 + double var_chaste_interface__i_Na_j_gate__j = rY[4]; + // Units: dimensionless; Initial value: 0.09866447258167589 + double var_chaste_interface__i_Na_L_m_L_gate__m_L = rY[5]; + // Units: dimensionless; Initial value: 0.002003390432234504 + double var_chaste_interface__i_Na_L_h_L_gate__h_L = rY[6]; + // Units: dimensionless; Initial value: 0.8946968372659203 + double var_chaste_interface__i_Ca_L_d_gate__d = rY[7]; + // Units: dimensionless; Initial value: 2.322223865147363e-06 + double var_chaste_interface__i_Ca_L_f_gate__f = rY[8]; + // Units: dimensionless; Initial value: 0.9985607329462358 + double var_chaste_interface__i_Ca_L_f2_gate__f2 = rY[9]; + // Units: dimensionless; Initial value: 0.8173435436674658 + double var_chaste_interface__i_Ca_L_f_Ca_gate__f_Ca = rY[10]; + // Units: dimensionless; Initial value: 0.9610551285529658 + double var_chaste_interface__i_Ca_L_f_Ca2_gate__f_Ca2 = rY[11]; + // Units: dimensionless; Initial value: 0.868690796671854 + double var_chaste_interface__i_Ca_T_b_gate__b = rY[12]; + // Units: dimensionless; Initial value: 0.0002563937630984438 + double var_chaste_interface__i_Ca_T_g_gate__g = rY[13]; + // Units: dimensionless; Initial value: 0.9720432601848331 + double var_chaste_interface__i_to_1_a_gate__a = rY[14]; + // Units: dimensionless; Initial value: 0.0004238729429342389 + double var_chaste_interface__i_to_1_i_gate__i = rY[15]; + // Units: dimensionless; Initial value: 0.9990935802459496 + double var_chaste_interface__i_to_1_i2_gate__i2 = rY[16]; + // Units: dimensionless; Initial value: 0.9777368439681764 + double var_chaste_interface__i_Kr_xr_gate__xr = rY[17]; + // Units: dimensionless; Initial value: 0.07084939408222911 + double var_chaste_interface__i_Ks_xs1_gate__xs1 = rY[18]; + // Units: dimensionless; Initial value: 0.0011737654433043125 + double var_chaste_interface__i_Ks_xs2_gate__xs2 = rY[19]; + // Units: dimensionless; Initial value: 0.001179442867470093 + double var_chaste_interface__i_to_2_a_gate__a = rY[20]; + // Units: dimensionless; Initial value: 0.0014909437525000811 + double var_chaste_interface__intracellular_ion_concentrations__Na_i = rY[21]; + // Units: millimolar; Initial value: 9.927155552932733 + double var_chaste_interface__intracellular_ion_concentrations__Cl_i = rY[22]; + // Units: millimolar; Initial value: 18.904682470140408 + double var_chaste_interface__intracellular_ion_concentrations__K_i = rY[23]; + // Units: millimolar; Initial value: 141.9670801746057 + double var_chaste_interface__Ca_r__Ca_r = rY[27]; + // Units: millimolar; Initial value: 0.00022418117117903934 + + // Lookup table indexing + const bool _oob_0 = Dynamicaslanidi_Purkinje_model_2009FromCellMLOpt_LookupTables::Instance()->CheckIndex0(var_chaste_interface__membrane__V); +// LCOV_EXCL_START + if (_oob_0) + EXCEPTION(DumpState("membrane_voltage outside lookup table range", rY)); +// LCOV_EXCL_STOP + const double* const _lt_0_row = Dynamicaslanidi_Purkinje_model_2009FromCellMLOpt_LookupTables::Instance()->IndexTable0(var_chaste_interface__membrane__V); + + const double var_equilibrium_potentials__E_K = 26.712338705498265 * log(mParameters[5] / var_chaste_interface__intracellular_ion_concentrations__K_i); // millivolt + const double var_equilibrium_potentials__E_Na = 26.712338705498265 * log(mParameters[6] / var_chaste_interface__intracellular_ion_concentrations__Na_i); // millivolt + const double var_membrane__i_tot = 0.0077250000000000001 * var_chaste_interface__membrane__V + 0.0060102762087371094 * log(100 / var_chaste_interface__intracellular_ion_concentrations__Cl_i) - 0.0025000000000000001 * var_equilibrium_potentials__E_Na - 0.0050000000000000001 * var_equilibrium_potentials__E_K + (0.0040000000000000001 + 0.4389381125701739 * sqrt(mParameters[5]) * mParameters[11] / ((1 + exp(-14.1227775 + 0.23849999999999999 * var_chaste_interface__membrane__V - 0.23849999999999999 * var_equilibrium_potentials__E_K)) * (1.02 / (1 + exp(-14.1227775 + 0.23849999999999999 * var_chaste_interface__membrane__V - 0.23849999999999999 * var_equilibrium_potentials__E_K)) + (0.49124000000000001 * exp(0.43983232 + 0.080320000000000003 * var_chaste_interface__membrane__V - 0.080320000000000003 * var_equilibrium_potentials__E_K) + exp(-36.698642499999998 + 0.061749999999999999 * var_chaste_interface__membrane__V - 0.061749999999999999 * var_equilibrium_potentials__E_K)) / (1 + exp(-2.4444678999999998 + 0.51429999999999998 * var_equilibrium_potentials__E_K - 0.51429999999999998 * var_chaste_interface__membrane__V))))) * (-var_equilibrium_potentials__E_K + var_chaste_interface__membrane__V) + 0.0027599999999999999 * (-var_equilibrium_potentials__E_K + var_chaste_interface__membrane__V) / (_lt_0_row[0]) + 0.057500000000000002 * var_chaste_interface__Ca_i__Ca_i / (0.00050000000000000001 + var_chaste_interface__Ca_i__Ca_i) + 0.13 * (-50 + var_chaste_interface__membrane__V) * var_chaste_interface__i_Ca_T_b_gate__b * var_chaste_interface__i_Ca_T_g_gate__g + 0.037374999999999999 * pow(var_chaste_interface__i_Na_L_m_L_gate__m_L, 3) * (-var_equilibrium_potentials__E_Na + var_chaste_interface__membrane__V) * var_chaste_interface__i_Na_L_h_L_gate__h_L + 0.0028824983370007683 * (-0.34100000000000003 * mParameters[4] + var_chaste_interface__Ca_i__Ca_i * _lt_0_row[1]) * var_chaste_interface__membrane__V / (_lt_0_row[2]) + (-1.5 * pow(mParameters[6], 3) * var_chaste_interface__Ca_i__Ca_i * _lt_0_row[3] + 0.40000000000000002 * pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, 3) * mParameters[14] * mParameters[4] * _lt_0_row[4]) / ((_lt_0_row[5]) * (1 + 6.9444444444444451e-9 / pow(var_chaste_interface__Ca_i__Ca_i, 2)) * (1004882.8125 * var_chaste_interface__Ca_i__Ca_i + 1.3 * pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, 3) + pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, 3) * mParameters[4] + 1.5 * pow(mParameters[6], 3) * var_chaste_interface__Ca_i__Ca_i + 0.0035999999999999999 * pow(mParameters[6], 3) * (1 + 0.081300813008130079 * var_chaste_interface__intracellular_ion_concentrations__Na_i) + 1860.8670000000004 * (1 + 416.66666666666669 * var_chaste_interface__Ca_i__Ca_i) * mParameters[4])) + pow(var_chaste_interface__i_Na_m_gate__m, 3) * (-var_equilibrium_potentials__E_Na + var_chaste_interface__membrane__V) * (0.20000000000000001 * var_chaste_interface__i_Na_j_gate__j + 0.80000000000000004 * var_chaste_interface__i_Na_h_gate__h) * mParameters[8] + (-var_equilibrium_potentials__E_K + var_chaste_interface__membrane__V) * (0.20000000000000001 * var_chaste_interface__i_to_1_i2_gate__i2 + 0.80000000000000004 * var_chaste_interface__i_to_1_i_gate__i) * mParameters[15] * var_chaste_interface__i_to_1_a_gate__a + 0.61875000000000002 * mParameters[5] / ((1 + 100 / pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, 2)) * (1.5 + mParameters[5]) * (1 + _lt_0_row[7] + 0.036499999999999998 * (-0.14285714285714285 + 0.14285714285714285 * exp(0.01485884101040119 * mParameters[6])) * _lt_0_row[6])) + 0.028896009762002683 * (_lt_0_row[8] + var_chaste_interface__intracellular_ion_concentrations__Cl_i) * var_chaste_interface__i_to_2_a_gate__a * var_chaste_interface__membrane__V / (_lt_0_row[9]) + (1 + 0.59999999999999998 / (1 + 6.4818210260626455e-7 * pow((1 / var_chaste_interface__Ca_i__Ca_i), 1.3999999999999999))) * (-26.712338705498265 * log((0.018329999999999999 * mParameters[6] + mParameters[5]) / (0.018329999999999999 * var_chaste_interface__intracellular_ion_concentrations__Na_i + var_chaste_interface__intracellular_ion_concentrations__K_i)) + var_chaste_interface__membrane__V) * mParameters[13] * var_chaste_interface__i_Ks_xs1_gate__xs1 * var_chaste_interface__i_Ks_xs2_gate__xs2 + 0.43033148291193518 * sqrt(mParameters[5]) * (-var_equilibrium_potentials__E_K + var_chaste_interface__membrane__V) * mParameters[12] * var_chaste_interface__i_Kr_xr_gate__xr / (_lt_0_row[10]) + 3.510865186083326 * (-15 + var_chaste_interface__membrane__V) * (-0.34100000000000003 * mParameters[4] + var_chaste_interface__Ca_r__Ca_r * _lt_0_row[11]) * mParameters[7] * var_chaste_interface__i_Ca_L_d_gate__d * var_chaste_interface__i_Ca_L_f2_gate__f2 * var_chaste_interface__i_Ca_L_f_Ca2_gate__f_Ca2 * var_chaste_interface__i_Ca_L_f_Ca_gate__f_Ca * var_chaste_interface__i_Ca_L_f_gate__f / (_lt_0_row[12]); // microA_per_microF + const double var_chaste_interface__i_ionic = HeartConfig::Instance()->GetCapacitance() * var_membrane__i_tot; // uA_per_cm2 + + const double i_ionic = var_chaste_interface__i_ionic; + EXCEPT_IF_NOT(!std::isnan(i_ionic)); + return i_ionic; + } + + void Dynamicaslanidi_Purkinje_model_2009FromCellMLOpt::EvaluateYDerivatives(double var_chaste_interface__environment__time, const std::vector& rY, std::vector& rDY) + { + // Inputs: + // Time units: millisecond + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : mp_membrane_voltage_modifier->Calc(rY[0], var_chaste_interface__environment__time)); + // Units: millivolt; Initial value: -83.43812846286808 + double var_chaste_interface__Ca_i__Ca_i = mp_cytosolic_calcium_concentration_modifier->Calc(rY[1], var_chaste_interface__environment__time); + // Units: millimolar; Initial value: 0.00022355433459434943 + double var_chaste_interface__i_Na_m_gate__m = mp_membrane_fast_sodium_current_m_gate_modifier->Calc(rY[2], var_chaste_interface__environment__time); + // Units: dimensionless; Initial value: 0.002003390432234504 + double var_chaste_interface__i_Na_h_gate__h = mp_membrane_fast_sodium_current_h_gate_modifier->Calc(rY[3], var_chaste_interface__environment__time); + // Units: dimensionless; Initial value: 0.9786390933308567 + double var_chaste_interface__i_Na_j_gate__j = mp_membrane_fast_sodium_current_j_gate_modifier->Calc(rY[4], var_chaste_interface__environment__time); + // Units: dimensionless; Initial value: 0.09866447258167589 + double var_chaste_interface__i_Na_L_m_L_gate__m_L = rY[5]; + // Units: dimensionless; Initial value: 0.002003390432234504 + double var_chaste_interface__i_Na_L_h_L_gate__h_L = rY[6]; + // Units: dimensionless; Initial value: 0.8946968372659203 + double var_chaste_interface__i_Ca_L_d_gate__d = mp_membrane_L_type_calcium_current_d_gate_modifier->Calc(rY[7], var_chaste_interface__environment__time); + // Units: dimensionless; Initial value: 2.322223865147363e-06 + double var_chaste_interface__i_Ca_L_f_gate__f = mp_membrane_L_type_calcium_current_f_gate_modifier->Calc(rY[8], var_chaste_interface__environment__time); + // Units: dimensionless; Initial value: 0.9985607329462358 + double var_chaste_interface__i_Ca_L_f2_gate__f2 = mp_membrane_L_type_calcium_current_f2_gate_modifier->Calc(rY[9], var_chaste_interface__environment__time); + // Units: dimensionless; Initial value: 0.8173435436674658 + double var_chaste_interface__i_Ca_L_f_Ca_gate__f_Ca = mp_membrane_L_type_calcium_current_fCa_gate_modifier->Calc(rY[10], var_chaste_interface__environment__time); + // Units: dimensionless; Initial value: 0.9610551285529658 + double var_chaste_interface__i_Ca_L_f_Ca2_gate__f_Ca2 = mp_membrane_L_type_calcium_current_fCa2_gate_modifier->Calc(rY[11], var_chaste_interface__environment__time); + // Units: dimensionless; Initial value: 0.868690796671854 + double var_chaste_interface__i_Ca_T_b_gate__b = rY[12]; + // Units: dimensionless; Initial value: 0.0002563937630984438 + double var_chaste_interface__i_Ca_T_g_gate__g = rY[13]; + // Units: dimensionless; Initial value: 0.9720432601848331 + double var_chaste_interface__i_to_1_a_gate__a = rY[14]; + // Units: dimensionless; Initial value: 0.0004238729429342389 + double var_chaste_interface__i_to_1_i_gate__i = rY[15]; + // Units: dimensionless; Initial value: 0.9990935802459496 + double var_chaste_interface__i_to_1_i2_gate__i2 = rY[16]; + // Units: dimensionless; Initial value: 0.9777368439681764 + double var_chaste_interface__i_Kr_xr_gate__xr = rY[17]; + // Units: dimensionless; Initial value: 0.07084939408222911 + double var_chaste_interface__i_Ks_xs1_gate__xs1 = rY[18]; + // Units: dimensionless; Initial value: 0.0011737654433043125 + double var_chaste_interface__i_Ks_xs2_gate__xs2 = rY[19]; + // Units: dimensionless; Initial value: 0.001179442867470093 + double var_chaste_interface__i_to_2_a_gate__a = rY[20]; + // Units: dimensionless; Initial value: 0.0014909437525000811 + double var_chaste_interface__intracellular_ion_concentrations__Na_i = mp_cytosolic_sodium_concentration_modifier->Calc(rY[21], var_chaste_interface__environment__time); + // Units: millimolar; Initial value: 9.927155552932733 + double var_chaste_interface__intracellular_ion_concentrations__Cl_i = rY[22]; + // Units: millimolar; Initial value: 18.904682470140408 + double var_chaste_interface__intracellular_ion_concentrations__K_i = mp_cytosolic_potassium_concentration_modifier->Calc(rY[23], var_chaste_interface__environment__time); + // Units: millimolar; Initial value: 141.9670801746057 + double var_chaste_interface__Ca_MK_act__Ca_MK_trap = rY[24]; + // Units: dimensionless; Initial value: 8.789168284782809e-06 + double var_chaste_interface__Ca_NSR__Ca_NSR = rY[25]; + // Units: millimolar; Initial value: 1.2132524695849454 + double var_chaste_interface__Ca_JSR__Ca_JSR = mp_JSR_calcium_concentration_modifier->Calc(rY[26], var_chaste_interface__environment__time); + // Units: millimolar; Initial value: 1.1433050636518596 + double var_chaste_interface__Ca_r__Ca_r = mp_dyadic_space_calcium_concentration_modifier->Calc(rY[27], var_chaste_interface__environment__time); + // Units: millimolar; Initial value: 0.00022418117117903934 + double var_chaste_interface__q_rel_ri_gate__ri = rY[28]; + // Units: dimensionless; Initial value: 0.7802870066567904 + double var_chaste_interface__q_rel_ro_gate__ro = rY[29]; + // Units: dimensionless; Initial value: 1.2785734760674763e-09 + + // Lookup table indexing + const bool _oob_0 = Dynamicaslanidi_Purkinje_model_2009FromCellMLOpt_LookupTables::Instance()->CheckIndex0(var_chaste_interface__membrane__V); +// LCOV_EXCL_START + if (_oob_0) + EXCEPTION(DumpState("membrane_voltage outside lookup table range", rY , var_chaste_interface__environment__time)); +// LCOV_EXCL_STOP + const double* const _lt_0_row = Dynamicaslanidi_Purkinje_model_2009FromCellMLOpt_LookupTables::Instance()->IndexTable0(var_chaste_interface__membrane__V); + + // Mathematics + double d_dt_chaste_interface_var_membrane__V; + const double var_Ca_MK_act__Ca_MK_bound = 0.050000000000000003 * (1 - var_chaste_interface__Ca_MK_act__Ca_MK_trap) / (1 + 0.14999999999999999 / var_chaste_interface__Ca_r__Ca_r); // dimensionless + const double var_Ca_MK_act__Ca_MK_act = var_Ca_MK_act__Ca_MK_bound + var_chaste_interface__Ca_MK_act__Ca_MK_trap; // dimensionless + const double var_Ca_r__q_diff = 5 * var_chaste_interface__Ca_r__Ca_r - 5 * var_chaste_interface__Ca_i__Ca_i; // millimolar_per_millisecond + const double d_dt_chaste_interface_var_Ca_MK_act__Ca_MK_trap = -0.00068000000000000005 * var_chaste_interface__Ca_MK_act__Ca_MK_trap + 0.050000000000000003 * (var_Ca_MK_act__Ca_MK_bound + var_chaste_interface__Ca_MK_act__Ca_MK_trap) * var_Ca_MK_act__Ca_MK_bound; // 1 / millisecond + const double var_i_Ca_p__i_Ca_p = 0.057500000000000002 * var_chaste_interface__Ca_i__Ca_i / (0.00050000000000000001 + var_chaste_interface__Ca_i__Ca_i); // microA_per_microF + const double d_dt_chaste_interface_var_i_to_2_a_gate__a = 1 / (1 + 0.1502 / var_chaste_interface__Ca_r__Ca_r) - var_chaste_interface__i_to_2_a_gate__a; // 1 / millisecond + const double d_dt_chaste_interface_var_i_Ca_L_d_gate__d = (-var_chaste_interface__i_Ca_L_d_gate__d + _lt_0_row[13]) / (_lt_0_row[14]); // 1 / millisecond + const double d_dt_chaste_interface_var_i_Ca_L_f2_gate__f2 = (-var_chaste_interface__i_Ca_L_f2_gate__f2 + _lt_0_row[15]) / (38 + 24.217200000000005 * pow((-1 + 0.053763440860215048 * var_chaste_interface__membrane__V), 2)); // 1 / millisecond + const double d_dt_chaste_interface_var_i_Ca_L_f_gate__f = (-var_chaste_interface__i_Ca_L_f_gate__f + _lt_0_row[15]) / (4 + 0.03125 * pow((-1 + 0.40000000000000002 * var_chaste_interface__membrane__V), 2)); // 1 / millisecond + const double d_dt_chaste_interface_var_i_Ca_T_b_gate__b = (-var_chaste_interface__i_Ca_T_b_gate__b + _lt_0_row[16]) * (_lt_0_row[17]); // 1 / millisecond + const double d_dt_chaste_interface_var_i_Ca_T_g_gate__g = (-var_chaste_interface__i_Ca_T_g_gate__g + _lt_0_row[18]) * (_lt_0_row[19]); // 1 / millisecond + const double d_dt_chaste_interface_var_i_Kr_xr_gate__xr = (-var_chaste_interface__i_Kr_xr_gate__xr + _lt_0_row[20]) / (_lt_0_row[21]); // 1 / millisecond + const double d_dt_chaste_interface_var_i_Ks_xs1_gate__xs1 = (-var_chaste_interface__i_Ks_xs1_gate__xs1 + _lt_0_row[22]) * (_lt_0_row[23]); // 1 / millisecond + const double d_dt_chaste_interface_var_i_Ks_xs2_gate__xs2 = (-var_chaste_interface__i_Ks_xs2_gate__xs2 + _lt_0_row[22]) * (_lt_0_row[24]); // 1 / millisecond + const double d_dt_chaste_interface_var_i_Na_L_h_L_gate__h_L = (-var_chaste_interface__i_Na_L_h_L_gate__h_L + _lt_0_row[25]) / (_lt_0_row[26]); // 1 / millisecond + const double var_i_Na_L_m_L_gate__alpha_m_L = _lt_0_row[27]; // per_millisecond + const double var_i_Na_L_m_L_gate__beta_m_L = _lt_0_row[28]; // per_millisecond + const double d_dt_chaste_interface_var_i_Na_L_m_L_gate__m_L = (-var_chaste_interface__i_Na_L_m_L_gate__m_L + var_i_Na_L_m_L_gate__alpha_m_L / (var_i_Na_L_m_L_gate__alpha_m_L + var_i_Na_L_m_L_gate__beta_m_L)) * (var_i_Na_L_m_L_gate__alpha_m_L + var_i_Na_L_m_L_gate__beta_m_L); // 1 / millisecond + const double var_i_Na_h_gate__alpha_h = ((var_chaste_interface__membrane__V < -40) ? (0.13500000000000001 * exp(-11.764705882352942 + 0.14705882352941177 * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(mParameters[10], var_chaste_interface__environment__time) - 0.14705882352941177 * var_chaste_interface__membrane__V)) : (0)); // per_millisecond + const double var_i_Na_h_gate__beta_h = ((var_chaste_interface__membrane__V < -40) ? (310000 * exp(0.34999999999999998 * var_chaste_interface__membrane__V - 0.34999999999999998 * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(mParameters[10], var_chaste_interface__environment__time)) + 3.5600000000000001 * exp(0.079000000000000001 * var_chaste_interface__membrane__V - 0.079000000000000001 * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(mParameters[10], var_chaste_interface__environment__time))) : (7.6923076923076916 / (1 + exp(-0.96036036036036043 + 0.0900900900900901 * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(mParameters[10], var_chaste_interface__environment__time) - 0.0900900900900901 * var_chaste_interface__membrane__V)))); // per_millisecond + const double d_dt_chaste_interface_var_i_Na_h_gate__h = (var_i_Na_h_gate__alpha_h + var_i_Na_h_gate__beta_h) * (-var_chaste_interface__i_Na_h_gate__h + 0.01 * mp_membrane_fast_sodium_current_reduced_inactivation_modifier->Calc(mParameters[9], var_chaste_interface__environment__time) + (1 - 0.01 * mp_membrane_fast_sodium_current_reduced_inactivation_modifier->Calc(mParameters[9], var_chaste_interface__environment__time)) * var_i_Na_h_gate__alpha_h / (var_i_Na_h_gate__alpha_h + var_i_Na_h_gate__beta_h)); // 1 / millisecond + const double var_i_Na_j_gate__alpha_j = ((var_chaste_interface__membrane__V < -40) ? ((37.780000000000001 + var_chaste_interface__membrane__V) * (-127140 * exp(0.24440000000000001 * var_chaste_interface__membrane__V - 0.24440000000000001 * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(mParameters[10], var_chaste_interface__environment__time)) - 3.4740000000000003e-5 * exp(0.043909999999999998 * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(mParameters[10], var_chaste_interface__environment__time) - 0.043909999999999998 * var_chaste_interface__membrane__V)) / (1 + exp(24.640530000000002 + 0.311 * var_chaste_interface__membrane__V - 0.311 * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(mParameters[10], var_chaste_interface__environment__time)))) : (0)); // per_millisecond + const double var_i_Na_j_gate__beta_j = ((var_chaste_interface__membrane__V < -40) ? (0.1212 * exp(0.01052 * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(mParameters[10], var_chaste_interface__environment__time) - 0.01052 * var_chaste_interface__membrane__V) / (1 + exp(-5.5312920000000005 + 0.13780000000000001 * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(mParameters[10], var_chaste_interface__environment__time) - 0.13780000000000001 * var_chaste_interface__membrane__V))) : (0.29999999999999999 * exp(2.5349999999999999e-7 * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(mParameters[10], var_chaste_interface__environment__time) - 2.5349999999999999e-7 * var_chaste_interface__membrane__V) / (1 + exp(-3.2000000000000002 + 0.10000000000000001 * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(mParameters[10], var_chaste_interface__environment__time) - 0.10000000000000001 * var_chaste_interface__membrane__V)))); // per_millisecond + const double d_dt_chaste_interface_var_i_Na_j_gate__j = (var_i_Na_j_gate__alpha_j + var_i_Na_j_gate__beta_j) * (-var_chaste_interface__i_Na_j_gate__j + 0.01 * mp_membrane_fast_sodium_current_reduced_inactivation_modifier->Calc(mParameters[9], var_chaste_interface__environment__time) + (1 - 0.01 * mp_membrane_fast_sodium_current_reduced_inactivation_modifier->Calc(mParameters[9], var_chaste_interface__environment__time)) * var_i_Na_j_gate__alpha_j / (var_i_Na_j_gate__alpha_j + var_i_Na_j_gate__beta_j)); // 1 / millisecond + const double var_i_Na_m_gate__alpha_m = _lt_0_row[27]; // per_millisecond + const double var_i_Na_m_gate__beta_m = _lt_0_row[28]; // per_millisecond + const double d_dt_chaste_interface_var_i_Na_m_gate__m = (-var_chaste_interface__i_Na_m_gate__m + var_i_Na_m_gate__alpha_m / (var_i_Na_m_gate__alpha_m + var_i_Na_m_gate__beta_m)) * (var_i_Na_m_gate__alpha_m + var_i_Na_m_gate__beta_m); // 1 / millisecond + const double var_i_to_1_a_gate__alpha_a = _lt_0_row[29]; // per_millisecond + const double var_i_to_1_a_gate__beta_a = _lt_0_row[30]; // per_millisecond + const double d_dt_chaste_interface_var_i_to_1_a_gate__a = (-var_chaste_interface__i_to_1_a_gate__a + var_i_to_1_a_gate__alpha_a / (var_i_to_1_a_gate__alpha_a + var_i_to_1_a_gate__beta_a)) * (var_i_to_1_a_gate__alpha_a + var_i_to_1_a_gate__beta_a); // 1 / millisecond + const double d_dt_chaste_interface_var_i_to_1_i2_gate__i2 = (-var_chaste_interface__i_to_1_i2_gate__i2 + _lt_0_row[31]) / (_lt_0_row[32]); // 1 / millisecond + const double d_dt_chaste_interface_var_i_to_1_i_gate__i = (-var_chaste_interface__i_to_1_i_gate__i + _lt_0_row[33]) / (_lt_0_row[34]); // 1 / millisecond + const double var_equilibrium_potentials__E_Cl = -26.712338705498265 * log(100 / var_chaste_interface__intracellular_ion_concentrations__Cl_i); // millivolt + const double var_background_currents__i_Cl_b = 0.00022499999999999999 * var_chaste_interface__membrane__V - 0.00022499999999999999 * var_equilibrium_potentials__E_Cl; // microA_per_microF + const double var_equilibrium_potentials__E_K = 26.712338705498265 * log(mp_extracellular_potassium_concentration_modifier->Calc(mParameters[5], var_chaste_interface__environment__time) / var_chaste_interface__intracellular_ion_concentrations__K_i); // millivolt + const double var_CT_K_Cl__CT_K_Cl = 7.0755999999999996e-6 * (-var_equilibrium_potentials__E_Cl + var_equilibrium_potentials__E_K) / (87.825100000000006 - var_equilibrium_potentials__E_Cl + var_equilibrium_potentials__E_K); // millimolar_per_millisecond + const double var_background_currents__i_K_b = 0.0050000000000000001 * var_chaste_interface__membrane__V - 0.0050000000000000001 * var_equilibrium_potentials__E_K; // microA_per_microF + const double var_equilibrium_potentials__E_Na = 26.712338705498265 * log(mp_extracellular_sodium_concentration_modifier->Calc(mParameters[6], var_chaste_interface__environment__time) / var_chaste_interface__intracellular_ion_concentrations__Na_i); // millivolt + const double var_CT_Na_Cl__CT_Na_Cl = 9.8442999999999999e-6 * pow((-var_equilibrium_potentials__E_Cl + var_equilibrium_potentials__E_Na), 4) / (59494197.640692554 + pow((-var_equilibrium_potentials__E_Cl + var_equilibrium_potentials__E_Na), 4)); // millimolar_per_millisecond + const double var_background_currents__i_Na_b = 0.0025000000000000001 * var_chaste_interface__membrane__V - 0.0025000000000000001 * var_equilibrium_potentials__E_Na; // microA_per_microF + const double var_i_K1__i_K1 = mp_i_K1__i_K1_modifier->Calc((0.0040000000000000001 + 0.4389381125701739 * sqrt(mp_extracellular_potassium_concentration_modifier->Calc(mParameters[5], var_chaste_interface__environment__time)) * mp_membrane_inward_rectifier_potassium_current_conductance_modifier->Calc(mParameters[11], var_chaste_interface__environment__time) / ((1 + exp(-14.1227775 + 0.23849999999999999 * var_chaste_interface__membrane__V - 0.23849999999999999 * var_equilibrium_potentials__E_K)) * (1.02 / (1 + exp(-14.1227775 + 0.23849999999999999 * var_chaste_interface__membrane__V - 0.23849999999999999 * var_equilibrium_potentials__E_K)) + (0.49124000000000001 * exp(0.43983232 + 0.080320000000000003 * var_chaste_interface__membrane__V - 0.080320000000000003 * var_equilibrium_potentials__E_K) + exp(-36.698642499999998 + 0.061749999999999999 * var_chaste_interface__membrane__V - 0.061749999999999999 * var_equilibrium_potentials__E_K)) / (1 + exp(-2.4444678999999998 + 0.51429999999999998 * var_equilibrium_potentials__E_K - 0.51429999999999998 * var_chaste_interface__membrane__V))))) * (-var_equilibrium_potentials__E_K + var_chaste_interface__membrane__V), var_chaste_interface__environment__time); // microA_per_microF + const double var_i_K_p__i_K_p = 0.0027599999999999999 * (-var_equilibrium_potentials__E_K + var_chaste_interface__membrane__V) / (_lt_0_row[0]); // microA_per_microF + const double var_i_Kr__i_Kr = mp_i_Kr__i_Kr_modifier->Calc(0.43033148291193518 * sqrt(mp_extracellular_potassium_concentration_modifier->Calc(mParameters[5], var_chaste_interface__environment__time)) * (-var_equilibrium_potentials__E_K + var_chaste_interface__membrane__V) * mp_membrane_rapid_delayed_rectifier_potassium_current_conductance_modifier->Calc(mParameters[12], var_chaste_interface__environment__time) * var_chaste_interface__i_Kr_xr_gate__xr / (_lt_0_row[10]), var_chaste_interface__environment__time); // microA_per_microF + const double var_i_Ks__i_Ks = mp_i_Ks__i_Ks_modifier->Calc((1 + 0.59999999999999998 / (1 + 6.4818210260626455e-7 * pow((1 / var_chaste_interface__Ca_i__Ca_i), 1.3999999999999999))) * (-26.712338705498265 * log((0.018329999999999999 * mp_extracellular_sodium_concentration_modifier->Calc(mParameters[6], var_chaste_interface__environment__time) + mp_extracellular_potassium_concentration_modifier->Calc(mParameters[5], var_chaste_interface__environment__time)) / (0.018329999999999999 * var_chaste_interface__intracellular_ion_concentrations__Na_i + var_chaste_interface__intracellular_ion_concentrations__K_i)) + var_chaste_interface__membrane__V) * mp_membrane_slow_delayed_rectifier_potassium_current_conductance_modifier->Calc(mParameters[13], var_chaste_interface__environment__time) * var_chaste_interface__i_Ks_xs1_gate__xs1 * var_chaste_interface__i_Ks_xs2_gate__xs2, var_chaste_interface__environment__time); // microA_per_microF + const double var_i_Na__i_Na = mp_i_Na__i_Na_modifier->Calc(pow(var_chaste_interface__i_Na_m_gate__m, 3) * (-var_equilibrium_potentials__E_Na + var_chaste_interface__membrane__V) * (0.20000000000000001 * var_chaste_interface__i_Na_j_gate__j + 0.80000000000000004 * var_chaste_interface__i_Na_h_gate__h) * mp_membrane_fast_sodium_current_conductance_modifier->Calc(mParameters[8], var_chaste_interface__environment__time), var_chaste_interface__environment__time); // microA_per_microF + const double var_i_NaCa__i_NaCa = mp_i_NaCa__i_NaCa_modifier->Calc((-1.5 * pow(mp_extracellular_sodium_concentration_modifier->Calc(mParameters[6], var_chaste_interface__environment__time), 3) * var_chaste_interface__Ca_i__Ca_i * _lt_0_row[3] + 0.40000000000000002 * pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, 3) * mp_membrane_sodium_calcium_exchanger_current_conductance_modifier->Calc(mParameters[14], var_chaste_interface__environment__time) * mp_extracellular_calcium_concentration_modifier->Calc(mParameters[4], var_chaste_interface__environment__time) * _lt_0_row[4]) / ((_lt_0_row[5]) * (1 + 6.9444444444444451e-9 / pow(var_chaste_interface__Ca_i__Ca_i, 2)) * (1004882.8125 * var_chaste_interface__Ca_i__Ca_i + 1.3 * pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, 3) + pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, 3) * mp_extracellular_calcium_concentration_modifier->Calc(mParameters[4], var_chaste_interface__environment__time) + 1.5 * pow(mp_extracellular_sodium_concentration_modifier->Calc(mParameters[6], var_chaste_interface__environment__time), 3) * var_chaste_interface__Ca_i__Ca_i + 0.0035999999999999999 * pow(mp_extracellular_sodium_concentration_modifier->Calc(mParameters[6], var_chaste_interface__environment__time), 3) * (1 + 0.081300813008130079 * var_chaste_interface__intracellular_ion_concentrations__Na_i) + 1860.8670000000004 * (1 + 416.66666666666669 * var_chaste_interface__Ca_i__Ca_i) * mp_extracellular_calcium_concentration_modifier->Calc(mParameters[4], var_chaste_interface__environment__time))), var_chaste_interface__environment__time); // microA_per_microF + const double var_i_NaK__i_NaK = 0.61875000000000002 * mp_extracellular_potassium_concentration_modifier->Calc(mParameters[5], var_chaste_interface__environment__time) / ((1 + 100 / pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, 2)) * (1.5 + mp_extracellular_potassium_concentration_modifier->Calc(mParameters[5], var_chaste_interface__environment__time)) * (1 + _lt_0_row[7] + 0.036499999999999998 * (-0.14285714285714285 + 0.14285714285714285 * exp(0.01485884101040119 * mp_extracellular_sodium_concentration_modifier->Calc(mParameters[6], var_chaste_interface__environment__time))) * _lt_0_row[6])); // microA_per_microF + const double var_i_Na_L__i_Na_L = 0.037374999999999999 * pow(var_chaste_interface__i_Na_L_m_L_gate__m_L, 3) * (-var_equilibrium_potentials__E_Na + var_chaste_interface__membrane__V) * var_chaste_interface__i_Na_L_h_L_gate__h_L; // microA_per_microF + const double var_i_to_1__i_to_1 = mp_i_to_1__i_to_1_modifier->Calc((-var_equilibrium_potentials__E_K + var_chaste_interface__membrane__V) * (0.20000000000000001 * var_chaste_interface__i_to_1_i2_gate__i2 + 0.80000000000000004 * var_chaste_interface__i_to_1_i_gate__i) * mp_membrane_transient_outward_current_conductance_modifier->Calc(mParameters[15], var_chaste_interface__environment__time) * var_chaste_interface__i_to_1_a_gate__a, var_chaste_interface__environment__time); // microA_per_microF + const double var_i_to_2__i_to_2 = 0.028896009762002683 * (_lt_0_row[8] + var_chaste_interface__intracellular_ion_concentrations__Cl_i) * var_chaste_interface__i_to_2_a_gate__a * var_chaste_interface__membrane__V / (_lt_0_row[9]); // microA_per_microF + const double d_dt_chaste_interface_var_intracellular_ion_concentrations__Cl_i = (-6.767281717060562e-9 * var_background_currents__i_Cl_b - 6.767281717060562e-9 * var_i_to_2__i_to_2 + var_CT_K_Cl__CT_K_Cl + var_CT_Na_Cl__CT_Na_Cl) * mp_concentration_clamp_onoff_modifier->Calc(mParameters[3], var_chaste_interface__environment__time); // millimolar / millisecond + const double d_dt_chaste_interface_var_intracellular_ion_concentrations__K_i = (1.3534563434121124e-8 * var_i_NaK__i_NaK - 6.767281717060562e-9 * var_background_currents__i_K_b - 6.767281717060562e-9 * var_i_K1__i_K1 - 6.767281717060562e-9 * var_i_K_p__i_K_p - 6.767281717060562e-9 * var_i_Kr__i_Kr - 6.767281717060562e-9 * var_i_Ks__i_Ks - 6.767281717060562e-9 * var_i_to_1__i_to_1 + var_CT_K_Cl__CT_K_Cl) * mp_concentration_clamp_onoff_modifier->Calc(mParameters[3], var_chaste_interface__environment__time); // millimolar / millisecond + const double d_dt_chaste_interface_var_intracellular_ion_concentrations__Na_i = (-2.0301845151181685e-8 * var_i_NaCa__i_NaCa - 2.0301845151181685e-8 * var_i_NaK__i_NaK - 6.767281717060562e-9 * var_background_currents__i_Na_b - 6.767281717060562e-9 * var_i_Na__i_Na - 6.767281717060562e-9 * var_i_Na_L__i_Na_L + var_CT_Na_Cl__CT_Na_Cl) * mp_concentration_clamp_onoff_modifier->Calc(mParameters[3], var_chaste_interface__environment__time); // millimolar / millisecond + const double var_background_currents__i_Ca_b = 0.0028824983370007683 * (-0.34100000000000003 * mp_extracellular_calcium_concentration_modifier->Calc(mParameters[4], var_chaste_interface__environment__time) + var_chaste_interface__Ca_i__Ca_i * _lt_0_row[1]) * var_chaste_interface__membrane__V / (_lt_0_row[2]); // microA_per_microF + const double var_i_Ca_L__i_Ca_L_max = 3.510865186083326 * (-15 + var_chaste_interface__membrane__V) * (-0.34100000000000003 * mp_extracellular_calcium_concentration_modifier->Calc(mParameters[4], var_chaste_interface__environment__time) + var_chaste_interface__Ca_r__Ca_r * _lt_0_row[11]) / (_lt_0_row[12]); // microA_per_microF + const double var_i_Ca_L__i_Ca_L = mp_i_Ca_L__i_Ca_L_modifier->Calc(mp_membrane_L_type_calcium_current_conductance_modifier->Calc(mParameters[7], var_chaste_interface__environment__time) * var_i_Ca_L__i_Ca_L_max * var_chaste_interface__i_Ca_L_d_gate__d * var_chaste_interface__i_Ca_L_f2_gate__f2 * var_chaste_interface__i_Ca_L_f_Ca2_gate__f_Ca2 * var_chaste_interface__i_Ca_L_f_Ca_gate__f_Ca * var_chaste_interface__i_Ca_L_f_gate__f, var_chaste_interface__environment__time); // microA_per_microF + const double d_dt_chaste_interface_var_i_Ca_L_f_Ca2_gate__f_Ca2 = (-var_chaste_interface__i_Ca_L_f_Ca2_gate__f_Ca2 + 1 / (1 - 100 * var_i_Ca_L__i_Ca_L)) / (125 + 300 / (1 + exp(-4.375 - 25 * var_i_Ca_L__i_Ca_L))); // 1 / millisecond + const double d_dt_chaste_interface_var_i_Ca_L_f_Ca_gate__f_Ca = (0.14999999999999999 - var_chaste_interface__i_Ca_L_f_Ca_gate__f_Ca + 0.55000000000000004 / (1 + 333.33333333333331 * var_chaste_interface__Ca_r__Ca_r) + 0.29999999999999999 / (1 - 20 * var_i_Ca_L__i_Ca_L)) / (0.5 + 1 / (1 + 333.33333333333331 * var_chaste_interface__Ca_r__Ca_r) + 10 * var_Ca_MK_act__Ca_MK_act / (0.14999999999999999 + var_Ca_MK_act__Ca_MK_act)); // 1 / millisecond + const double var_q_leak__q_leak = 0.066666666666666666 * var_chaste_interface__Ca_NSR__Ca_NSR * mp_SR_leak_current_max_modifier->Calc(mParameters[0], var_chaste_interface__environment__time); // millimolar_per_millisecond + const double var_q_rel_ri_gate__Ca_fac = 1 / (1 + exp(3.3333333333333335 + 66.666666666666671 * var_i_Ca_L__i_Ca_L)); // millimolar + const double d_dt_chaste_interface_var_q_rel_ri_gate__ri = (-var_chaste_interface__q_rel_ri_gate__ri + 1 / (1 + exp(-16 + 80 * var_q_rel_ri_gate__Ca_fac + 40000 * var_chaste_interface__Ca_r__Ca_r))) / (3 + (350 - 10 * var_Ca_MK_act__Ca_MK_act / (0.14999999999999999 + var_Ca_MK_act__Ca_MK_act)) / (1 + exp(-15 + 5000 * var_chaste_interface__Ca_r__Ca_r + 15 * var_q_rel_ri_gate__Ca_fac)) + 10 * var_Ca_MK_act__Ca_MK_act / (0.14999999999999999 + var_Ca_MK_act__Ca_MK_act)); // 1 / millisecond + const double var_q_rel__q_rel = mp_SR_release_current_modifier->Calc((-var_chaste_interface__Ca_r__Ca_r + var_chaste_interface__Ca_JSR__Ca_JSR) * mp_SR_release_current_max_modifier->Calc(mParameters[1], var_chaste_interface__environment__time) * var_chaste_interface__q_rel_ri_gate__ri * var_chaste_interface__q_rel_ro_gate__ro / (1 + exp(2.6000000000000001 + 0.20000000000000001 * mp_membrane_L_type_calcium_current_conductance_modifier->Calc(mParameters[7], var_chaste_interface__environment__time) * var_i_Ca_L__i_Ca_L_max)), var_chaste_interface__environment__time); // millimolar_per_millisecond + const double d_dt_chaste_interface_var_Ca_r__Ca_r = (-var_Ca_r__q_diff + 0.23999999999999996 * var_q_rel__q_rel - 1.1504378919002956e-7 * var_i_Ca_L__i_Ca_L) / (1 + 2.2480000000000002 * var_chaste_interface__Ca_r__Ca_r / pow((0.0086999999999999994 + var_chaste_interface__Ca_r__Ca_r), 2) + 0.094 * var_chaste_interface__Ca_r__Ca_r / pow((0.00087000000000000001 + var_chaste_interface__Ca_r__Ca_r), 2)); // millimolar / millisecond + const double d_dt_chaste_interface_var_q_rel_ro_gate__ro = -0.33333333333333331 * var_chaste_interface__q_rel_ro_gate__ro + 0.33333333333333331 * pow(var_chaste_interface__Ca_JSR__Ca_JSR, 1.8999999999999999) * pow(var_i_Ca_L__i_Ca_L, 2) / ((1 + pow(var_i_Ca_L__i_Ca_L, 2)) * (pow(var_chaste_interface__Ca_JSR__Ca_JSR, 1.8999999999999999) + 1644.6531773416521 * pow((var_chaste_interface__Ca_r__Ca_r / (0.0028 + var_chaste_interface__Ca_r__Ca_r)), 1.8999999999999999))); // 1 / millisecond + const double var_q_tr__q_tr = 0.0083333333333333332 * var_chaste_interface__Ca_NSR__Ca_NSR - 0.0083333333333333332 * var_chaste_interface__Ca_JSR__Ca_JSR; // millimolar_per_millisecond + const double d_dt_chaste_interface_var_Ca_JSR__Ca_JSR = (-var_q_rel__q_rel + var_q_tr__q_tr) / (1 + 8 / pow((0.80000000000000004 + var_chaste_interface__Ca_JSR__Ca_JSR), 2)); // millimolar / millisecond + const double var_q_up__q_up = 0.5 * (1 + 0.75 * var_Ca_MK_act__Ca_MK_act / (0.14999999999999999 + var_Ca_MK_act__Ca_MK_act)) * var_chaste_interface__Ca_i__Ca_i * mp_SR_uptake_current_max_modifier->Calc(mParameters[2], var_chaste_interface__environment__time) / (0.00092000000000000003 - 0.00017000000000000001 * var_Ca_MK_act__Ca_MK_act / (0.14999999999999999 + var_Ca_MK_act__Ca_MK_act) + var_chaste_interface__Ca_i__Ca_i); // millimolar_per_millisecond + const double d_dt_chaste_interface_var_Ca_NSR__Ca_NSR = -var_q_leak__q_leak - 0.086956521739130432 * var_q_tr__q_tr + var_q_up__q_up; // millimolar / millisecond + const double d_dt_chaste_interface_var_Ca_i__Ca_i = -(3.383640858530281e-9 * var_background_currents__i_Ca_b + 3.383640858530281e-9 * var_i_Ca_p__i_Ca_p + 0.081176470588235281 * var_q_up__q_up - 0.029411764705882353 * var_Ca_r__q_diff - 6.767281717060562e-9 * var_i_NaCa__i_NaCa - 0.081176470588235281 * var_q_leak__q_leak) / (1 + 0.14000000000000001 * var_chaste_interface__Ca_i__Ca_i / pow((0.00050000000000000001 + var_chaste_interface__Ca_i__Ca_i), 2) + 0.10000000000000001 * var_chaste_interface__Ca_i__Ca_i / pow((0.0023800000000000002 + var_chaste_interface__Ca_i__Ca_i), 2)); // millimolar / millisecond + + if (mSetVoltageDerivativeToZero) + { + d_dt_chaste_interface_var_membrane__V = 0.0; + } + else + { + d_dt_chaste_interface_var_membrane__V = -var_background_currents__i_Ca_b - var_background_currents__i_Cl_b - var_background_currents__i_K_b - var_background_currents__i_Na_b - var_i_Ca_L__i_Ca_L - var_i_Ca_p__i_Ca_p - var_i_K1__i_K1 - var_i_K_p__i_K_p - var_i_Kr__i_Kr - var_i_Ks__i_Ks - var_i_Na__i_Na - var_i_NaCa__i_NaCa - var_i_NaK__i_NaK - var_i_Na_L__i_Na_L - var_i_to_1__i_to_1 - var_i_to_2__i_to_2 - GetIntracellularAreaStimulus(var_chaste_interface__environment__time) / HeartConfig::Instance()->GetCapacitance() - 0.13 * (-50 + var_chaste_interface__membrane__V) * var_chaste_interface__i_Ca_T_b_gate__b * var_chaste_interface__i_Ca_T_g_gate__g; // millivolt / millisecond + } + + rDY[0] = d_dt_chaste_interface_var_membrane__V; + rDY[1] = d_dt_chaste_interface_var_Ca_i__Ca_i; + rDY[2] = d_dt_chaste_interface_var_i_Na_m_gate__m; + rDY[3] = d_dt_chaste_interface_var_i_Na_h_gate__h; + rDY[4] = d_dt_chaste_interface_var_i_Na_j_gate__j; + rDY[5] = d_dt_chaste_interface_var_i_Na_L_m_L_gate__m_L; + rDY[6] = d_dt_chaste_interface_var_i_Na_L_h_L_gate__h_L; + rDY[7] = d_dt_chaste_interface_var_i_Ca_L_d_gate__d; + rDY[8] = d_dt_chaste_interface_var_i_Ca_L_f_gate__f; + rDY[9] = d_dt_chaste_interface_var_i_Ca_L_f2_gate__f2; + rDY[10] = d_dt_chaste_interface_var_i_Ca_L_f_Ca_gate__f_Ca; + rDY[11] = d_dt_chaste_interface_var_i_Ca_L_f_Ca2_gate__f_Ca2; + rDY[12] = d_dt_chaste_interface_var_i_Ca_T_b_gate__b; + rDY[13] = d_dt_chaste_interface_var_i_Ca_T_g_gate__g; + rDY[14] = d_dt_chaste_interface_var_i_to_1_a_gate__a; + rDY[15] = d_dt_chaste_interface_var_i_to_1_i_gate__i; + rDY[16] = d_dt_chaste_interface_var_i_to_1_i2_gate__i2; + rDY[17] = d_dt_chaste_interface_var_i_Kr_xr_gate__xr; + rDY[18] = d_dt_chaste_interface_var_i_Ks_xs1_gate__xs1; + rDY[19] = d_dt_chaste_interface_var_i_Ks_xs2_gate__xs2; + rDY[20] = d_dt_chaste_interface_var_i_to_2_a_gate__a; + rDY[21] = d_dt_chaste_interface_var_intracellular_ion_concentrations__Na_i; + rDY[22] = d_dt_chaste_interface_var_intracellular_ion_concentrations__Cl_i; + rDY[23] = d_dt_chaste_interface_var_intracellular_ion_concentrations__K_i; + rDY[24] = d_dt_chaste_interface_var_Ca_MK_act__Ca_MK_trap; + rDY[25] = d_dt_chaste_interface_var_Ca_NSR__Ca_NSR; + rDY[26] = d_dt_chaste_interface_var_Ca_JSR__Ca_JSR; + rDY[27] = d_dt_chaste_interface_var_Ca_r__Ca_r; + rDY[28] = d_dt_chaste_interface_var_q_rel_ri_gate__ri; + rDY[29] = d_dt_chaste_interface_var_q_rel_ro_gate__ro; + } + + std::vector Dynamicaslanidi_Purkinje_model_2009FromCellMLOpt::ComputeDerivedQuantities(double var_chaste_interface__environment__time, const std::vector & rY) + { + // Inputs: + // Time units: millisecond + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : mp_membrane_voltage_modifier->Calc(rY[0], var_chaste_interface__environment__time)); + // Units: millivolt; Initial value: -83.43812846286808 + double var_chaste_interface__Ca_i__Ca_i = mp_cytosolic_calcium_concentration_modifier->Calc(rY[1], var_chaste_interface__environment__time); + // Units: millimolar; Initial value: 0.00022355433459434943 + double var_chaste_interface__i_Na_m_gate__m = mp_membrane_fast_sodium_current_m_gate_modifier->Calc(rY[2], var_chaste_interface__environment__time); + // Units: dimensionless; Initial value: 0.002003390432234504 + double var_chaste_interface__i_Na_h_gate__h = mp_membrane_fast_sodium_current_h_gate_modifier->Calc(rY[3], var_chaste_interface__environment__time); + // Units: dimensionless; Initial value: 0.9786390933308567 + double var_chaste_interface__i_Na_j_gate__j = mp_membrane_fast_sodium_current_j_gate_modifier->Calc(rY[4], var_chaste_interface__environment__time); + // Units: dimensionless; Initial value: 0.09866447258167589 + double var_chaste_interface__i_Ca_L_d_gate__d = mp_membrane_L_type_calcium_current_d_gate_modifier->Calc(rY[7], var_chaste_interface__environment__time); + // Units: dimensionless; Initial value: 2.322223865147363e-06 + double var_chaste_interface__i_Ca_L_f_gate__f = mp_membrane_L_type_calcium_current_f_gate_modifier->Calc(rY[8], var_chaste_interface__environment__time); + // Units: dimensionless; Initial value: 0.9985607329462358 + double var_chaste_interface__i_Ca_L_f2_gate__f2 = mp_membrane_L_type_calcium_current_f2_gate_modifier->Calc(rY[9], var_chaste_interface__environment__time); + // Units: dimensionless; Initial value: 0.8173435436674658 + double var_chaste_interface__i_Ca_L_f_Ca_gate__f_Ca = mp_membrane_L_type_calcium_current_fCa_gate_modifier->Calc(rY[10], var_chaste_interface__environment__time); + // Units: dimensionless; Initial value: 0.9610551285529658 + double var_chaste_interface__i_Ca_L_f_Ca2_gate__f_Ca2 = mp_membrane_L_type_calcium_current_fCa2_gate_modifier->Calc(rY[11], var_chaste_interface__environment__time); + // Units: dimensionless; Initial value: 0.868690796671854 + double var_chaste_interface__i_to_1_a_gate__a = rY[14]; + // Units: dimensionless; Initial value: 0.0004238729429342389 + double var_chaste_interface__i_to_1_i_gate__i = rY[15]; + // Units: dimensionless; Initial value: 0.9990935802459496 + double var_chaste_interface__i_to_1_i2_gate__i2 = rY[16]; + // Units: dimensionless; Initial value: 0.9777368439681764 + double var_chaste_interface__i_Kr_xr_gate__xr = rY[17]; + // Units: dimensionless; Initial value: 0.07084939408222911 + double var_chaste_interface__i_Ks_xs1_gate__xs1 = rY[18]; + // Units: dimensionless; Initial value: 0.0011737654433043125 + double var_chaste_interface__i_Ks_xs2_gate__xs2 = rY[19]; + // Units: dimensionless; Initial value: 0.001179442867470093 + double var_chaste_interface__intracellular_ion_concentrations__Na_i = mp_cytosolic_sodium_concentration_modifier->Calc(rY[21], var_chaste_interface__environment__time); + // Units: millimolar; Initial value: 9.927155552932733 + double var_chaste_interface__intracellular_ion_concentrations__K_i = mp_cytosolic_potassium_concentration_modifier->Calc(rY[23], var_chaste_interface__environment__time); + // Units: millimolar; Initial value: 141.9670801746057 + double var_chaste_interface__Ca_MK_act__Ca_MK_trap = rY[24]; + // Units: dimensionless; Initial value: 8.789168284782809e-06 + double var_chaste_interface__Ca_JSR__Ca_JSR = mp_JSR_calcium_concentration_modifier->Calc(rY[26], var_chaste_interface__environment__time); + // Units: millimolar; Initial value: 1.1433050636518596 + double var_chaste_interface__Ca_r__Ca_r = mp_dyadic_space_calcium_concentration_modifier->Calc(rY[27], var_chaste_interface__environment__time); + // Units: millimolar; Initial value: 0.00022418117117903934 + double var_chaste_interface__q_rel_ri_gate__ri = rY[28]; + // Units: dimensionless; Initial value: 0.7802870066567904 + double var_chaste_interface__q_rel_ro_gate__ro = rY[29]; + // Units: dimensionless; Initial value: 1.2785734760674763e-09 + + // Lookup table indexing + const bool _oob_0 = Dynamicaslanidi_Purkinje_model_2009FromCellMLOpt_LookupTables::Instance()->CheckIndex0(var_chaste_interface__membrane__V); +// LCOV_EXCL_START + if (_oob_0) + EXCEPTION(DumpState("membrane_voltage outside lookup table range", rY , var_chaste_interface__environment__time)); +// LCOV_EXCL_STOP + const double* const _lt_0_row = Dynamicaslanidi_Purkinje_model_2009FromCellMLOpt_LookupTables::Instance()->IndexTable0(var_chaste_interface__membrane__V); + + // Mathematics + const double var_Ca_MK_act__Ca_MK_0 = 0.050000000000000003; // dimensionless + const double var_Ca_MK_act__km_Ca_MK = 0.14999999999999999; // millimolar + const double var_Ca_MK_act__Ca_MK_bound = (1 - var_chaste_interface__Ca_MK_act__Ca_MK_trap) * var_Ca_MK_act__Ca_MK_0 / (1 + var_Ca_MK_act__km_Ca_MK / var_chaste_interface__Ca_r__Ca_r); // dimensionless + const double var_Ca_MK_act__Ca_MK_act = var_Ca_MK_act__Ca_MK_bound + var_chaste_interface__Ca_MK_act__Ca_MK_trap; // dimensionless + const double var_equilibrium_potentials__r_NaK = 0.018329999999999999; // dimensionless + const double var_i_Ca_L__p_Ca = 0.000243; // cm_per_second + const double var_i_Ca_L_f_Ca_gate__tau_f_Ca = mp_membrane_L_type_calcium_current_fCa_gate_tau_modifier->Calc(0.5 + 1 / (1 + 333.33333333333331 * var_chaste_interface__Ca_r__Ca_r) + 10 * var_Ca_MK_act__Ca_MK_act / (var_Ca_MK_act__Ca_MK_act + var_Ca_MK_act__km_Ca_MK), var_chaste_interface__environment__time); // millisecond + const double var_i_Ks__g_Ks = (1 + 0.59999999999999998 / (1 + 6.4818210260626455e-7 * pow((1 / var_chaste_interface__Ca_i__Ca_i), 1.3999999999999999))) * mp_membrane_slow_delayed_rectifier_potassium_current_conductance_modifier->Calc(mParameters[13], var_chaste_interface__environment__time); // milliS_per_microF + const double var_i_NaCa__X_NaCa = 0.40000000000000002; // dimensionless + const double var_i_NaCa__k_sat = 0.27000000000000002; // dimensionless + const double var_i_NaCa__km_Ca_act = 0.000125; // millimolar + const double var_i_NaCa__km_Ca_i = 0.0035999999999999999; // millimolar + const double var_i_NaCa__km_Ca_o = 1.3; // millimolar + const double var_i_NaCa__km_Na_i_1 = 12.300000000000001; // millimolar + const double var_i_NaCa__km_Na_o = 87.5; // millimolar + const double var_i_Ca_L_f2_gate__tau_f2 = mp_membrane_L_type_calcium_current_f2_gate_tau_modifier->Calc(38 + 24.217200000000005 * pow((-1 + 0.053763440860215048 * var_chaste_interface__membrane__V), 2), var_chaste_interface__environment__time); // millisecond + const double var_i_Ca_L_f_gate__tau_f = mp_membrane_L_type_calcium_current_f_gate_tau_modifier->Calc(4 + 0.03125 * pow((-1 + 0.40000000000000002 * var_chaste_interface__membrane__V), 2), var_chaste_interface__environment__time); // millisecond + const double var_i_Kr__rr_infinity = 1 / (_lt_0_row[10]); // dimensionless + const double var_i_Na_h_gate__alpha_h = ((var_chaste_interface__membrane__V < -40) ? (0.13500000000000001 * exp(-11.764705882352942 + 0.14705882352941177 * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(mParameters[10], var_chaste_interface__environment__time) - 0.14705882352941177 * var_chaste_interface__membrane__V)) : (0)); // per_millisecond + const double var_i_Na_h_gate__beta_h = ((var_chaste_interface__membrane__V < -40) ? (310000 * exp(0.34999999999999998 * var_chaste_interface__membrane__V - 0.34999999999999998 * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(mParameters[10], var_chaste_interface__environment__time)) + 3.5600000000000001 * exp(0.079000000000000001 * var_chaste_interface__membrane__V - 0.079000000000000001 * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(mParameters[10], var_chaste_interface__environment__time))) : (7.6923076923076916 / (1 + exp(-0.96036036036036043 + 0.0900900900900901 * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(mParameters[10], var_chaste_interface__environment__time) - 0.0900900900900901 * var_chaste_interface__membrane__V)))); // per_millisecond + const double var_i_Na_h_gate__tau_h = mp_membrane_fast_sodium_current_h_gate_tau_modifier->Calc(1 / (var_i_Na_h_gate__alpha_h + var_i_Na_h_gate__beta_h), var_chaste_interface__environment__time); // millisecond + const double var_i_Na_j_gate__alpha_j = ((var_chaste_interface__membrane__V < -40) ? ((37.780000000000001 + var_chaste_interface__membrane__V) * (-127140 * exp(0.24440000000000001 * var_chaste_interface__membrane__V - 0.24440000000000001 * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(mParameters[10], var_chaste_interface__environment__time)) - 3.4740000000000003e-5 * exp(0.043909999999999998 * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(mParameters[10], var_chaste_interface__environment__time) - 0.043909999999999998 * var_chaste_interface__membrane__V)) / (1 + exp(24.640530000000002 + 0.311 * var_chaste_interface__membrane__V - 0.311 * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(mParameters[10], var_chaste_interface__environment__time)))) : (0)); // per_millisecond + const double var_i_Na_j_gate__beta_j = ((var_chaste_interface__membrane__V < -40) ? (0.1212 * exp(0.01052 * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(mParameters[10], var_chaste_interface__environment__time) - 0.01052 * var_chaste_interface__membrane__V) / (1 + exp(-5.5312920000000005 + 0.13780000000000001 * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(mParameters[10], var_chaste_interface__environment__time) - 0.13780000000000001 * var_chaste_interface__membrane__V))) : (0.29999999999999999 * exp(2.5349999999999999e-7 * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(mParameters[10], var_chaste_interface__environment__time) - 2.5349999999999999e-7 * var_chaste_interface__membrane__V) / (1 + exp(-3.2000000000000002 + 0.10000000000000001 * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(mParameters[10], var_chaste_interface__environment__time) - 0.10000000000000001 * var_chaste_interface__membrane__V)))); // per_millisecond + const double var_i_Na_j_gate__tau_j = mp_membrane_fast_sodium_current_j_gate_tau_modifier->Calc(1 / (var_i_Na_j_gate__alpha_j + var_i_Na_j_gate__beta_j), var_chaste_interface__environment__time); // millisecond + const double var_membrane__i_stim_converted = GetIntracellularAreaStimulus(var_chaste_interface__environment__time); // uA_per_cm2 + const double var_i_NaCa__dNaCa_1 = pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, 3) * var_i_NaCa__km_Ca_o + 1.5 * pow(var_i_NaCa__km_Na_o, 3) * var_chaste_interface__Ca_i__Ca_i + pow(var_i_NaCa__km_Na_i_1, 3) * (1 + 1.5 * var_chaste_interface__Ca_i__Ca_i / var_i_NaCa__km_Ca_i) * mp_extracellular_calcium_concentration_modifier->Calc(mParameters[4], var_chaste_interface__environment__time); // millimolar4 + const double var_model_parameters__Cm = 1; // microF_per_cm2 + const double var_model_parameters__F = 96485; // coulomb_per_mole + const double var_i_K1__g_K1 = 0.43033148291193518 * sqrt(mp_extracellular_potassium_concentration_modifier->Calc(mParameters[5], var_chaste_interface__environment__time)) * mp_membrane_inward_rectifier_potassium_current_conductance_modifier->Calc(mParameters[11], var_chaste_interface__environment__time); // milliS_per_microF + const double var_i_Kr__g_Kr = 0.43033148291193518 * sqrt(mp_extracellular_potassium_concentration_modifier->Calc(mParameters[5], var_chaste_interface__environment__time)) * mp_membrane_rapid_delayed_rectifier_potassium_current_conductance_modifier->Calc(mParameters[12], var_chaste_interface__environment__time); // milliS_per_microF + const double var_i_NaCa__dNaCa_2 = pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, 3) * mp_extracellular_calcium_concentration_modifier->Calc(mParameters[4], var_chaste_interface__environment__time) + 1.5 * pow(mp_extracellular_sodium_concentration_modifier->Calc(mParameters[6], var_chaste_interface__environment__time), 3) * var_chaste_interface__Ca_i__Ca_i + pow(mp_extracellular_sodium_concentration_modifier->Calc(mParameters[6], var_chaste_interface__environment__time), 3) * (1 + var_chaste_interface__intracellular_ion_concentrations__Na_i / var_i_NaCa__km_Na_i_1) * var_i_NaCa__km_Ca_i; // millimolar4 + const double var_model_parameters__R = 8314; // joule_per_kilomole_kelvin + const double var_model_parameters__T = 310; // kelvin + const double var_equilibrium_potentials__E_K = var_model_parameters__R * var_model_parameters__T * log(mp_extracellular_potassium_concentration_modifier->Calc(mParameters[5], var_chaste_interface__environment__time) / var_chaste_interface__intracellular_ion_concentrations__K_i) / var_model_parameters__F; // millivolt + const double var_equilibrium_potentials__E_Ks = var_model_parameters__R * var_model_parameters__T * log((var_equilibrium_potentials__r_NaK * mp_extracellular_sodium_concentration_modifier->Calc(mParameters[6], var_chaste_interface__environment__time) + mp_extracellular_potassium_concentration_modifier->Calc(mParameters[5], var_chaste_interface__environment__time)) / (var_equilibrium_potentials__r_NaK * var_chaste_interface__intracellular_ion_concentrations__Na_i + var_chaste_interface__intracellular_ion_concentrations__K_i)) / var_model_parameters__F; // millivolt + const double var_equilibrium_potentials__E_Na = var_model_parameters__R * var_model_parameters__T * log(mp_extracellular_sodium_concentration_modifier->Calc(mParameters[6], var_chaste_interface__environment__time) / var_chaste_interface__intracellular_ion_concentrations__Na_i) / var_model_parameters__F; // millivolt + const double var_i_K1_xK1_gate__alpha_xK1 = 1.02 / (1 + exp(-14.1227775 + 0.23849999999999999 * var_chaste_interface__membrane__V - 0.23849999999999999 * var_equilibrium_potentials__E_K)); // dimensionless + const double var_i_K1_xK1_gate__beta_xK1 = (0.49124000000000001 * exp(0.43983232 + 0.080320000000000003 * var_chaste_interface__membrane__V - 0.080320000000000003 * var_equilibrium_potentials__E_K) + exp(-36.698642499999998 + 0.061749999999999999 * var_chaste_interface__membrane__V - 0.061749999999999999 * var_equilibrium_potentials__E_K)) / (1 + exp(-2.4444678999999998 + 0.51429999999999998 * var_equilibrium_potentials__E_K - 0.51429999999999998 * var_chaste_interface__membrane__V)); // dimensionless + const double var_i_K1_xK1_gate__xK1 = var_i_K1_xK1_gate__alpha_xK1 / (var_i_K1_xK1_gate__alpha_xK1 + var_i_K1_xK1_gate__beta_xK1); // dimensionless + const double var_i_K1__i_K1 = mp_i_K1__i_K1_modifier->Calc((0.0040000000000000001 + var_i_K1__g_K1 * var_i_K1_xK1_gate__xK1) * (-var_equilibrium_potentials__E_K + var_chaste_interface__membrane__V), var_chaste_interface__environment__time); // microA_per_microF + const double var_i_K1__i_K1_converted = HeartConfig::Instance()->GetCapacitance() * var_i_K1__i_K1; // uA_per_cm2 + const double var_i_Kr__i_Kr = mp_i_Kr__i_Kr_modifier->Calc((-var_equilibrium_potentials__E_K + var_chaste_interface__membrane__V) * var_i_Kr__g_Kr * var_i_Kr__rr_infinity * var_chaste_interface__i_Kr_xr_gate__xr, var_chaste_interface__environment__time); // microA_per_microF + const double var_i_Kr__i_Kr_converted = HeartConfig::Instance()->GetCapacitance() * var_i_Kr__i_Kr; // uA_per_cm2 + const double var_i_Ks__i_Ks = mp_i_Ks__i_Ks_modifier->Calc((-var_equilibrium_potentials__E_Ks + var_chaste_interface__membrane__V) * var_i_Ks__g_Ks * var_chaste_interface__i_Ks_xs1_gate__xs1 * var_chaste_interface__i_Ks_xs2_gate__xs2, var_chaste_interface__environment__time); // microA_per_microF + const double var_i_Ks__i_Ks_converted = HeartConfig::Instance()->GetCapacitance() * var_i_Ks__i_Ks; // uA_per_cm2 + const double var_i_Na__i_Na = mp_i_Na__i_Na_modifier->Calc(pow(var_chaste_interface__i_Na_m_gate__m, 3) * (-var_equilibrium_potentials__E_Na + var_chaste_interface__membrane__V) * (0.20000000000000001 * var_chaste_interface__i_Na_j_gate__j + 0.80000000000000004 * var_chaste_interface__i_Na_h_gate__h) * mp_membrane_fast_sodium_current_conductance_modifier->Calc(mParameters[8], var_chaste_interface__environment__time), var_chaste_interface__environment__time); // microA_per_microF + const double var_i_Na__i_Na_converted = HeartConfig::Instance()->GetCapacitance() * var_i_Na__i_Na; // uA_per_cm2 + const double var_i_NaCa__i_NaCa = mp_i_NaCa__i_NaCa_modifier->Calc((-1.5 * pow(mp_extracellular_sodium_concentration_modifier->Calc(mParameters[6], var_chaste_interface__environment__time), 3) * var_chaste_interface__Ca_i__Ca_i * exp(-0.65000000000000002 * var_chaste_interface__membrane__V * var_model_parameters__F / (var_model_parameters__R * var_model_parameters__T)) + pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, 3) * var_i_NaCa__X_NaCa * mp_membrane_sodium_calcium_exchanger_current_conductance_modifier->Calc(mParameters[14], var_chaste_interface__environment__time) * mp_extracellular_calcium_concentration_modifier->Calc(mParameters[4], var_chaste_interface__environment__time) * exp(0.34999999999999998 * var_chaste_interface__membrane__V * var_model_parameters__F / (var_model_parameters__R * var_model_parameters__T))) / ((1 + var_i_NaCa__k_sat * exp(-0.65000000000000002 * var_chaste_interface__membrane__V * var_model_parameters__F / (var_model_parameters__R * var_model_parameters__T))) * (1 + 0.44444444444444442 * pow(var_i_NaCa__km_Ca_act, 2) / pow(var_chaste_interface__Ca_i__Ca_i, 2)) * (var_i_NaCa__dNaCa_1 + var_i_NaCa__dNaCa_2)), var_chaste_interface__environment__time); // microA_per_microF + const double var_i_NaCa__i_NaCa_converted = HeartConfig::Instance()->GetCapacitance() * var_i_NaCa__i_NaCa; // uA_per_cm2 + const double var_i_to_1__i_to_1 = mp_i_to_1__i_to_1_modifier->Calc((-var_equilibrium_potentials__E_K + var_chaste_interface__membrane__V) * (0.20000000000000001 * var_chaste_interface__i_to_1_i2_gate__i2 + 0.80000000000000004 * var_chaste_interface__i_to_1_i_gate__i) * mp_membrane_transient_outward_current_conductance_modifier->Calc(mParameters[15], var_chaste_interface__environment__time) * var_chaste_interface__i_to_1_a_gate__a, var_chaste_interface__environment__time); // microA_per_microF + const double var_i_to_1__i_to_1_converted = HeartConfig::Instance()->GetCapacitance() * var_i_to_1__i_to_1; // uA_per_cm2 + const double var_model_parameters__gamma_Cai = 1; // dimensionless + const double var_model_parameters__gamma_Cao = 0.34100000000000003; // dimensionless + const double var_model_parameters__z_Ca = 2; // dimensionless + const double var_i_Ca_L__i_Ca_L_max = pow(var_model_parameters__F, 2) * pow(var_model_parameters__z_Ca, 2) * (-15 + var_chaste_interface__membrane__V) * (-mp_extracellular_calcium_concentration_modifier->Calc(mParameters[4], var_chaste_interface__environment__time) * var_model_parameters__gamma_Cao + var_chaste_interface__Ca_r__Ca_r * var_model_parameters__gamma_Cai * exp((-15 + var_chaste_interface__membrane__V) * var_model_parameters__F * var_model_parameters__z_Ca / (var_model_parameters__R * var_model_parameters__T))) * var_i_Ca_L__p_Ca / ((-1 + exp((-15 + var_chaste_interface__membrane__V) * var_model_parameters__F * var_model_parameters__z_Ca / (var_model_parameters__R * var_model_parameters__T))) * var_model_parameters__Cm * var_model_parameters__R * var_model_parameters__T); // microA_per_microF + const double var_i_Ca_L__i_Ca_L = mp_i_Ca_L__i_Ca_L_modifier->Calc(mp_membrane_L_type_calcium_current_conductance_modifier->Calc(mParameters[7], var_chaste_interface__environment__time) * var_i_Ca_L__i_Ca_L_max * var_chaste_interface__i_Ca_L_d_gate__d * var_chaste_interface__i_Ca_L_f2_gate__f2 * var_chaste_interface__i_Ca_L_f_Ca2_gate__f_Ca2 * var_chaste_interface__i_Ca_L_f_Ca_gate__f_Ca * var_chaste_interface__i_Ca_L_f_gate__f, var_chaste_interface__environment__time); // microA_per_microF + const double var_i_Ca_L__i_Ca_L_converted = HeartConfig::Instance()->GetCapacitance() * var_i_Ca_L__i_Ca_L; // uA_per_cm2 + const double var_i_Ca_L_f_Ca2_gate__tau_f_Ca2 = mp_membrane_L_type_calcium_current_fCa2_gate_tau_modifier->Calc(125 + 300 / (1 + exp(-4.375 - 25 * var_i_Ca_L__i_Ca_L)), var_chaste_interface__environment__time); // millisecond + const double var_q_rel__vg = 1 / (1 + exp(2.6000000000000001 + 0.20000000000000001 * mp_membrane_L_type_calcium_current_conductance_modifier->Calc(mParameters[7], var_chaste_interface__environment__time) * var_i_Ca_L__i_Ca_L_max)); // dimensionless + const double var_q_rel__g_rel = mp_SR_release_current_max_modifier->Calc(mParameters[1], var_chaste_interface__environment__time) * var_q_rel__vg; // per_millisecond + const double var_q_rel__q_rel = mp_SR_release_current_modifier->Calc((-var_chaste_interface__Ca_r__Ca_r + var_chaste_interface__Ca_JSR__Ca_JSR) * var_q_rel__g_rel * var_chaste_interface__q_rel_ri_gate__ri * var_chaste_interface__q_rel_ro_gate__ro, var_chaste_interface__environment__time); // millimolar_per_millisecond + + std::vector dqs(16); + dqs[0] = var_q_rel__q_rel; + dqs[1] = var_i_Ca_L__i_Ca_L_converted; + dqs[2] = var_i_Ca_L_f2_gate__tau_f2; + dqs[3] = var_i_Ca_L_f_Ca2_gate__tau_f_Ca2; + dqs[4] = var_i_Ca_L_f_Ca_gate__tau_f_Ca; + dqs[5] = var_i_Ca_L_f_gate__tau_f; + dqs[6] = var_i_Na__i_Na_converted; + dqs[7] = var_i_Na_h_gate__tau_h; + dqs[8] = var_i_Na_j_gate__tau_j; + dqs[9] = var_i_K1__i_K1_converted; + dqs[10] = var_i_Kr__i_Kr_converted; + dqs[11] = var_i_Ks__i_Ks_converted; + dqs[12] = var_i_NaCa__i_NaCa_converted; + dqs[13] = var_membrane__i_stim_converted; + dqs[14] = var_i_to_1__i_to_1_converted; + dqs[15] = var_chaste_interface__environment__time; + return dqs; + } + +template<> +void OdeSystemInformation::Initialise(void) +{ + this->mSystemName = "aslanidi_2009"; + this->mFreeVariableName = "time"; + this->mFreeVariableUnits = "millisecond"; + + // rY[0]: + this->mVariableNames.push_back("membrane_voltage"); + this->mVariableUnits.push_back("millivolt"); + this->mInitialConditions.push_back(-83.43812846286808); + + // rY[1]: + this->mVariableNames.push_back("cytosolic_calcium_concentration"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(0.00022355433459434943); + + // rY[2]: + this->mVariableNames.push_back("membrane_fast_sodium_current_m_gate"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.002003390432234504); + + // rY[3]: + this->mVariableNames.push_back("membrane_fast_sodium_current_h_gate"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.9786390933308567); + + // rY[4]: + this->mVariableNames.push_back("membrane_fast_sodium_current_j_gate"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.09866447258167589); + + // rY[5]: + this->mVariableNames.push_back("i_Na_L_m_L_gate__m_L"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.002003390432234504); + + // rY[6]: + this->mVariableNames.push_back("i_Na_L_h_L_gate__h_L"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.8946968372659203); + + // rY[7]: + this->mVariableNames.push_back("membrane_L_type_calcium_current_d_gate"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(2.322223865147363e-06); + + // rY[8]: + this->mVariableNames.push_back("membrane_L_type_calcium_current_f_gate"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.9985607329462358); + + // rY[9]: + this->mVariableNames.push_back("membrane_L_type_calcium_current_f2_gate"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.8173435436674658); + + // rY[10]: + this->mVariableNames.push_back("membrane_L_type_calcium_current_fCa_gate"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.9610551285529658); + + // rY[11]: + this->mVariableNames.push_back("membrane_L_type_calcium_current_fCa2_gate"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.868690796671854); + + // rY[12]: + this->mVariableNames.push_back("i_Ca_T_b_gate__b"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.0002563937630984438); + + // rY[13]: + this->mVariableNames.push_back("i_Ca_T_g_gate__g"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.9720432601848331); + + // rY[14]: + this->mVariableNames.push_back("i_to_1_a_gate__a"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.0004238729429342389); + + // rY[15]: + this->mVariableNames.push_back("i_to_1_i_gate__i"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.9990935802459496); + + // rY[16]: + this->mVariableNames.push_back("i_to_1_i2_gate__i2"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.9777368439681764); + + // rY[17]: + this->mVariableNames.push_back("i_Kr_xr_gate__xr"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.07084939408222911); + + // rY[18]: + this->mVariableNames.push_back("i_Ks_xs1_gate__xs1"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.0011737654433043125); + + // rY[19]: + this->mVariableNames.push_back("i_Ks_xs2_gate__xs2"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.001179442867470093); + + // rY[20]: + this->mVariableNames.push_back("i_to_2_a_gate__a"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.0014909437525000811); + + // rY[21]: + this->mVariableNames.push_back("cytosolic_sodium_concentration"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(9.927155552932733); + + // rY[22]: + this->mVariableNames.push_back("intracellular_ion_concentrations__Cl_i"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(18.904682470140408); + + // rY[23]: + this->mVariableNames.push_back("cytosolic_potassium_concentration"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(141.9670801746057); + + // rY[24]: + this->mVariableNames.push_back("Ca_MK_act__Ca_MK_trap"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(8.789168284782809e-06); + + // rY[25]: + this->mVariableNames.push_back("Ca_NSR__Ca_NSR"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(1.2132524695849454); + + // rY[26]: + this->mVariableNames.push_back("JSR_calcium_concentration"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(1.1433050636518596); + + // rY[27]: + this->mVariableNames.push_back("dyadic_space_calcium_concentration"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(0.00022418117117903934); + + // rY[28]: + this->mVariableNames.push_back("q_rel_ri_gate__ri"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.7802870066567904); + + // rY[29]: + this->mVariableNames.push_back("q_rel_ro_gate__ro"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(1.2785734760674763e-09); + + // mParameters[0]: + this->mParameterNames.push_back("SR_leak_current_max"); + this->mParameterUnits.push_back("millimolar_per_millisecond"); + + // mParameters[1]: + this->mParameterNames.push_back("SR_release_current_max"); + this->mParameterUnits.push_back("per_millisecond"); + + // mParameters[2]: + this->mParameterNames.push_back("SR_uptake_current_max"); + this->mParameterUnits.push_back("millimolar_per_millisecond"); + + // mParameters[3]: + this->mParameterNames.push_back("concentration_clamp_onoff"); + this->mParameterUnits.push_back("dimensionless"); + + // mParameters[4]: + this->mParameterNames.push_back("extracellular_calcium_concentration"); + this->mParameterUnits.push_back("millimolar"); + + // mParameters[5]: + this->mParameterNames.push_back("extracellular_potassium_concentration"); + this->mParameterUnits.push_back("millimolar"); + + // mParameters[6]: + this->mParameterNames.push_back("extracellular_sodium_concentration"); + this->mParameterUnits.push_back("millimolar"); + + // mParameters[7]: + this->mParameterNames.push_back("membrane_L_type_calcium_current_conductance"); + this->mParameterUnits.push_back("dimensionless"); + + // mParameters[8]: + this->mParameterNames.push_back("membrane_fast_sodium_current_conductance"); + this->mParameterUnits.push_back("milliS_per_microF"); + + // mParameters[9]: + this->mParameterNames.push_back("membrane_fast_sodium_current_reduced_inactivation"); + this->mParameterUnits.push_back("dimensionless"); + + // mParameters[10]: + this->mParameterNames.push_back("membrane_fast_sodium_current_shift_inactivation"); + this->mParameterUnits.push_back("millivolt"); + + // mParameters[11]: + this->mParameterNames.push_back("membrane_inward_rectifier_potassium_current_conductance"); + this->mParameterUnits.push_back("milliS_per_microF"); + + // mParameters[12]: + this->mParameterNames.push_back("membrane_rapid_delayed_rectifier_potassium_current_conductance"); + this->mParameterUnits.push_back("milliS_per_microF"); + + // mParameters[13]: + this->mParameterNames.push_back("membrane_slow_delayed_rectifier_potassium_current_conductance"); + this->mParameterUnits.push_back("milliS_per_microF"); + + // mParameters[14]: + this->mParameterNames.push_back("membrane_sodium_calcium_exchanger_current_conductance"); + this->mParameterUnits.push_back("microA_per_microF"); + + // mParameters[15]: + this->mParameterNames.push_back("membrane_transient_outward_current_conductance"); + this->mParameterUnits.push_back("milliS_per_microF"); + + // Derived Quantity index [0]: + this->mDerivedQuantityNames.push_back("SR_release_current"); + this->mDerivedQuantityUnits.push_back("millimolar_per_millisecond"); + + // Derived Quantity index [1]: + this->mDerivedQuantityNames.push_back("membrane_L_type_calcium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [2]: + this->mDerivedQuantityNames.push_back("membrane_L_type_calcium_current_f2_gate_tau"); + this->mDerivedQuantityUnits.push_back("millisecond"); + + // Derived Quantity index [3]: + this->mDerivedQuantityNames.push_back("membrane_L_type_calcium_current_fCa2_gate_tau"); + this->mDerivedQuantityUnits.push_back("millisecond"); + + // Derived Quantity index [4]: + this->mDerivedQuantityNames.push_back("membrane_L_type_calcium_current_fCa_gate_tau"); + this->mDerivedQuantityUnits.push_back("millisecond"); + + // Derived Quantity index [5]: + this->mDerivedQuantityNames.push_back("membrane_L_type_calcium_current_f_gate_tau"); + this->mDerivedQuantityUnits.push_back("millisecond"); + + // Derived Quantity index [6]: + this->mDerivedQuantityNames.push_back("membrane_fast_sodium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [7]: + this->mDerivedQuantityNames.push_back("membrane_fast_sodium_current_h_gate_tau"); + this->mDerivedQuantityUnits.push_back("millisecond"); + + // Derived Quantity index [8]: + this->mDerivedQuantityNames.push_back("membrane_fast_sodium_current_j_gate_tau"); + this->mDerivedQuantityUnits.push_back("millisecond"); + + // Derived Quantity index [9]: + this->mDerivedQuantityNames.push_back("membrane_inward_rectifier_potassium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [10]: + this->mDerivedQuantityNames.push_back("membrane_rapid_delayed_rectifier_potassium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [11]: + this->mDerivedQuantityNames.push_back("membrane_slow_delayed_rectifier_potassium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [12]: + this->mDerivedQuantityNames.push_back("membrane_sodium_calcium_exchanger_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [13]: + this->mDerivedQuantityNames.push_back("membrane_stimulus_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [14]: + this->mDerivedQuantityNames.push_back("membrane_transient_outward_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [15]: + this->mDerivedQuantityNames.push_back("time"); + this->mDerivedQuantityUnits.push_back("millisecond"); + + this->mInitialised = true; +} + +// Serialization for Boost >= 1.36 +#include "SerializationExportWrapperForCpp.hpp" +CHASTE_CLASS_EXPORT(Dynamicaslanidi_Purkinje_model_2009FromCellMLOpt) +extern "C" +{ + AbstractCardiacCellInterface* MakeCardiacCell( + boost::shared_ptr pSolver, + boost::shared_ptr pStimulus) + { + return new Dynamicaslanidi_Purkinje_model_2009FromCellMLOpt(pSolver, pStimulus); + } + +} diff --git a/chaste_codegen/tests/numerical/baseline/Opt/dynamic_aslanidi_Purkinje_model_2009.hpp b/chaste_codegen/tests/numerical/baseline/Opt/dynamic_aslanidi_Purkinje_model_2009.hpp new file mode 100644 index 00000000..4bfdf1ff --- /dev/null +++ b/chaste_codegen/tests/numerical/baseline/Opt/dynamic_aslanidi_Purkinje_model_2009.hpp @@ -0,0 +1,137 @@ +#ifndef DYNAMICASLANIDI_PURKINJE_MODEL_2009FROMCELLMLOPT_HPP_ +#define DYNAMICASLANIDI_PURKINJE_MODEL_2009FROMCELLMLOPT_HPP_ + +//! @file +//! +//! This source file was generated from CellML by chaste_codegen version (version omitted as unimportant) +//! +//! Model: aslanidi_2009 +//! +//! Processed by chaste_codegen: https://github.com/ModellingWebLab/chaste-codegen +//! (translator: chaste_codegen, model type: NormalOpt) +//! on (date omitted as unimportant) +//! +//! + +#include "ChasteSerialization.hpp" +#include +#include "AbstractCardiacCellWithModifiers.hpp" +#include "AbstractModifier.hpp" +#include "AbstractDynamicallyLoadableEntity.hpp" +#include "AbstractStimulusFunction.hpp" +#include "AbstractCardiacCell.hpp" + +class Dynamicaslanidi_Purkinje_model_2009FromCellMLOpt : public AbstractCardiacCellWithModifiers, public AbstractDynamicallyLoadableEntity +{ + friend class boost::serialization::access; + template + void serialize(Archive & archive, const unsigned int version) + { + archive & boost::serialization::base_object >(*this); + archive & boost::serialization::base_object(*this); + // Despite this class having modifier member variables, they are all added to the + // abstract class by the constructor, and archived via that, instead of here. + } + + // + // Settable parameters and readable variables + // + boost::shared_ptr mp_JSR_calcium_concentration_modifier; + boost::shared_ptr mp_SR_leak_current_max_modifier; + boost::shared_ptr mp_SR_release_current_modifier; + boost::shared_ptr mp_SR_release_current_max_modifier; + boost::shared_ptr mp_SR_uptake_current_max_modifier; + boost::shared_ptr mp_concentration_clamp_onoff_modifier; + boost::shared_ptr mp_cytosolic_calcium_concentration_modifier; + boost::shared_ptr mp_cytosolic_potassium_concentration_modifier; + boost::shared_ptr mp_cytosolic_sodium_concentration_modifier; + boost::shared_ptr mp_dyadic_space_calcium_concentration_modifier; + boost::shared_ptr mp_extracellular_calcium_concentration_modifier; + boost::shared_ptr mp_extracellular_potassium_concentration_modifier; + boost::shared_ptr mp_extracellular_sodium_concentration_modifier; + boost::shared_ptr mp_i_Ca_L__i_Ca_L_modifier; + boost::shared_ptr mp_membrane_L_type_calcium_current_conductance_modifier; + boost::shared_ptr mp_membrane_L_type_calcium_current_d_gate_modifier; + boost::shared_ptr mp_membrane_L_type_calcium_current_f2_gate_modifier; + boost::shared_ptr mp_membrane_L_type_calcium_current_f2_gate_tau_modifier; + boost::shared_ptr mp_membrane_L_type_calcium_current_fCa2_gate_modifier; + boost::shared_ptr mp_membrane_L_type_calcium_current_fCa2_gate_tau_modifier; + boost::shared_ptr mp_membrane_L_type_calcium_current_fCa_gate_modifier; + boost::shared_ptr mp_membrane_L_type_calcium_current_fCa_gate_tau_modifier; + boost::shared_ptr mp_membrane_L_type_calcium_current_f_gate_modifier; + boost::shared_ptr mp_membrane_L_type_calcium_current_f_gate_tau_modifier; + boost::shared_ptr mp_i_Na__i_Na_modifier; + boost::shared_ptr mp_membrane_fast_sodium_current_conductance_modifier; + boost::shared_ptr mp_membrane_fast_sodium_current_h_gate_modifier; + boost::shared_ptr mp_membrane_fast_sodium_current_h_gate_tau_modifier; + boost::shared_ptr mp_membrane_fast_sodium_current_j_gate_modifier; + boost::shared_ptr mp_membrane_fast_sodium_current_j_gate_tau_modifier; + boost::shared_ptr mp_membrane_fast_sodium_current_m_gate_modifier; + boost::shared_ptr mp_membrane_fast_sodium_current_reduced_inactivation_modifier; + boost::shared_ptr mp_membrane_fast_sodium_current_shift_inactivation_modifier; + boost::shared_ptr mp_i_K1__i_K1_modifier; + boost::shared_ptr mp_membrane_inward_rectifier_potassium_current_conductance_modifier; + boost::shared_ptr mp_i_Kr__i_Kr_modifier; + boost::shared_ptr mp_membrane_rapid_delayed_rectifier_potassium_current_conductance_modifier; + boost::shared_ptr mp_i_Ks__i_Ks_modifier; + boost::shared_ptr mp_membrane_slow_delayed_rectifier_potassium_current_conductance_modifier; + boost::shared_ptr mp_i_NaCa__i_NaCa_modifier; + boost::shared_ptr mp_membrane_sodium_calcium_exchanger_current_conductance_modifier; + boost::shared_ptr mp_i_to_1__i_to_1_modifier; + boost::shared_ptr mp_membrane_transient_outward_current_conductance_modifier; + boost::shared_ptr mp_membrane_voltage_modifier; + +private: + static AbstractCardiacCellWithModifiers* CreateMethod(boost::shared_ptr p_solver, boost::shared_ptr p_stimulus); + static bool registered; +private: +const bool is_concentration[30] = {false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, false, true, false, false, true, true, false, false}; +const bool is_probability[30] = {false, false, true, true, true, false, false, true, true, true, true, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false}; +public: + + boost::shared_ptr UseCellMLDefaultStimulus(); + double GetIntracellularCalciumConcentration(); + Dynamicaslanidi_Purkinje_model_2009FromCellMLOpt(boost::shared_ptr pSolver, boost::shared_ptr pIntracellularStimulus); + ~Dynamicaslanidi_Purkinje_model_2009FromCellMLOpt(); + void VerifyStateVariables(); + AbstractLookupTableCollection* GetLookupTableCollection(); + double GetIIonic(const std::vector* pStateVariables=NULL); + void EvaluateYDerivatives(double var_chaste_interface__environment__time, const std::vector& rY, std::vector& rDY); + + std::vector ComputeDerivedQuantities(double var_chaste_interface__environment__time, const std::vector & rY); +}; + +// Needs to be included last +#include "SerializationExportWrapper.hpp" +CHASTE_CLASS_EXPORT(Dynamicaslanidi_Purkinje_model_2009FromCellMLOpt) + +namespace boost +{ + namespace serialization + { + template + inline void save_construct_data( + Archive & ar, const Dynamicaslanidi_Purkinje_model_2009FromCellMLOpt * t, const unsigned int fileVersion) + { + const boost::shared_ptr p_solver = t->GetSolver(); + const boost::shared_ptr p_stimulus = t->GetStimulusFunction(); + ar << p_solver; + ar << p_stimulus; + } + + template + inline void load_construct_data( + Archive & ar, Dynamicaslanidi_Purkinje_model_2009FromCellMLOpt * t, const unsigned int fileVersion) + { + boost::shared_ptr p_solver; + boost::shared_ptr p_stimulus; + ar >> p_solver; + ar >> p_stimulus; + ::new(t)Dynamicaslanidi_Purkinje_model_2009FromCellMLOpt(p_solver, p_stimulus); + } + + } + +} + +#endif // DYNAMICASLANIDI_PURKINJE_MODEL_2009FROMCELLMLOPT_HPP_ \ No newline at end of file diff --git a/chaste_codegen/tests/numerical/baseline/Opt/hodgkin_huxley_squid_axon_model_1952_modified.cpp b/chaste_codegen/tests/numerical/baseline/Opt/hodgkin_huxley_squid_axon_model_1952_modified.cpp new file mode 100644 index 00000000..dfc0e14c --- /dev/null +++ b/chaste_codegen/tests/numerical/baseline/Opt/hodgkin_huxley_squid_axon_model_1952_modified.cpp @@ -0,0 +1,503 @@ +//! @file +//! +//! This source file was generated from CellML by chaste_codegen version (version omitted as unimportant) +//! +//! Model: hodgkin_huxley_squid_axon_model_1952_modified +//! +//! Processed by chaste_codegen: https://github.com/ModellingWebLab/chaste-codegen +//! (translator: chaste_codegen, model type: NormalOpt) +//! on (date omitted as unimportant) +//! +//! + +#include "hodgkin_huxley_squid_axon_model_1952_modified.hpp" +#include +#include +#include +#include +#include "Exception.hpp" +#include "OdeSystemInformation.hpp" +#include "RegularStimulus.hpp" +#include "HeartConfig.hpp" +#include "IsNan.hpp" +#include "MathsCustomFunctions.hpp" + + + +class Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLOpt_LookupTables : public AbstractLookupTableCollection +{ +public: + static Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLOpt_LookupTables* Instance() + { + if (mpInstance.get() == NULL) + { + mpInstance.reset(new Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLOpt_LookupTables); + } + return mpInstance.get(); + } + + void FreeMemory() + { + + if (_lookup_table_0) + { + delete[] _lookup_table_0; + _lookup_table_0 = NULL; + } + + mNeedsRegeneration.assign(mNeedsRegeneration.size(), true); + } + + // Row lookup methods + // using linear-interpolation + + double* _lookup_0_row(unsigned i, double _factor_) + { + for (unsigned j=0; j<6; j++) + { + const double y1 = _lookup_table_0[i][j]; + const double y2 = _lookup_table_0[i+1][j]; + _lookup_table_0_row[j] = y1 + (y2-y1)*_factor_; + } + return _lookup_table_0_row; + } + + + const double * IndexTable0(double var_chaste_interface__membrane__V) + { + const double _offset_0 = var_chaste_interface__membrane__V - mTableMins[0]; + const double _offset_0_over_table_step = _offset_0 * mTableStepInverses[0]; + const unsigned _table_index_0 = (unsigned)(_offset_0_over_table_step); + const double _factor_0 = _offset_0_over_table_step - _table_index_0; + const double* const _lt_0_row = Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLOpt_LookupTables::Instance()->_lookup_0_row(_table_index_0, _factor_0); + return _lt_0_row; + } + + +// LCOV_EXCL_START + bool CheckIndex0(double& var_chaste_interface__membrane__V) + { + bool _oob_0 = false; + if (var_chaste_interface__membrane__V>mTableMaxs[0] || var_chaste_interface__membrane__V= -9.9999999999999995e-8) && (6.5 + 0.10000000000000001 * var_chaste_interface__membrane__V <= 9.9999999999999995e-8)) ? (0.42499999999999999 + 0.0050000000000000001 * var_chaste_interface__membrane__V) : (-0.099999999999999992 * (6.5 + 0.10000000000000001 * var_chaste_interface__membrane__V) / (-1 + exp(-6.5 - 0.10000000000000001 * var_chaste_interface__membrane__V)))); + }; + const double var_chaste_interface__membrane__V = mTableMins[0] + i*mTableSteps[0]; + double val = f(var_chaste_interface__membrane__V); + //Expressions which are part of a piecewise could be inf / nan, this is generally accptable, due to the piecewise, however occasionally interpolation of the lookup table from a nan/inf version can give problems. + //To avoid this values stored in the table are intrpolated. Occurances of this to at most 2 per expression. + if (!std::isfinite(val) && _lookup_table_0_num_misshit_piecewise[0] < 2){ + double left = f(var_chaste_interface__membrane__V - mTableSteps[0]); + double right = f(var_chaste_interface__membrane__V + mTableSteps[0]); + val = (left + right) / 2.0; + // count and limit number of misshits + _lookup_table_0_num_misshit_piecewise[0] +=1; + } + else if (!std::isfinite(val) && _lookup_table_0_num_misshit_piecewise[0] >= 2){ + EXCEPTION("Lookup table 0 at ["<= -9.9999999999999995e-8) && (5 + 0.10000000000000001 * var_chaste_interface__membrane__V <= 9.9999999999999995e-8)) ? (3.5 + 0.050000000000000003 * var_chaste_interface__membrane__V) : (-(5 + 0.10000000000000001 * var_chaste_interface__membrane__V) / (-1 + exp(-5 - 0.10000000000000001 * var_chaste_interface__membrane__V)))); + }; + const double var_chaste_interface__membrane__V = mTableMins[0] + i*mTableSteps[0]; + double val = f(var_chaste_interface__membrane__V); + //Expressions which are part of a piecewise could be inf / nan, this is generally accptable, due to the piecewise, however occasionally interpolation of the lookup table from a nan/inf version can give problems. + //To avoid this values stored in the table are intrpolated. Occurances of this to at most 2 per expression. + if (!std::isfinite(val) && _lookup_table_0_num_misshit_piecewise[4] < 2){ + double left = f(var_chaste_interface__membrane__V - mTableSteps[0]); + double right = f(var_chaste_interface__membrane__V + mTableSteps[0]); + val = (left + right) / 2.0; + // count and limit number of misshits + _lookup_table_0_num_misshit_piecewise[4] +=1; + } + else if (!std::isfinite(val) && _lookup_table_0_num_misshit_piecewise[4] >= 2){ + EXCEPTION("Lookup table 4 at ["< mpInstance; + + // Row lookup methods memory + double _lookup_table_0_row[6]; + + // Lookup tables + double (*_lookup_table_0)[6]; + int _lookup_table_0_num_misshit_piecewise[6] = {0}; + +}; + +std::shared_ptr Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLOpt_LookupTables::mpInstance; + + + boost::shared_ptr Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLOpt::UseCellMLDefaultStimulus() + { + // Use the default stimulus specified by CellML metadata + const double var_chaste_interface__membrane__stim_amplitude = -20; // microA_per_cm2 + const double var_chaste_interface__membrane__stim_duration = 0.5; // millisecond + const double var_chaste_interface__membrane__stim_period = 1000; // millisecond + const double var_chaste_interface__membrane__stim_start = 10; // millisecond + boost::shared_ptr p_cellml_stim(new RegularStimulus( + -fabs(var_chaste_interface__membrane__stim_amplitude), + var_chaste_interface__membrane__stim_duration, + var_chaste_interface__membrane__stim_period, + var_chaste_interface__membrane__stim_start + )); + mpIntracellularStimulus = p_cellml_stim; + return p_cellml_stim; + } + + Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLOpt::Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLOpt(boost::shared_ptr pSolver, boost::shared_ptr pIntracellularStimulus) + : AbstractCardiacCell( + pSolver, + 4, + 0, + pIntracellularStimulus) + { + // Time units: millisecond + // + this->mpSystemInfo = OdeSystemInformation::Instance(); + Init(); + + // We have a default stimulus specified in the CellML file metadata + this->mHasDefaultStimulusFromCellML = true; + + this->mParameters[0] = 1; // (var_membrane__Cm) [microF_per_cm2] + this->mParameters[1] = 120; // (var_sodium_channel__g_Na) [milliS_per_cm2] + this->mParameters[2] = 0.29999999999999999; // (var_leakage_current__g_L) [milliS_per_cm2] + this->mParameters[3] = 36; // (var_potassium_channel__g_K) [milliS_per_cm2] + } + + Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLOpt::~Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLOpt() + { + } + + AbstractLookupTableCollection* Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLOpt::GetLookupTableCollection() + { + return Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLOpt_LookupTables::Instance(); + } + + void Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLOpt::VerifyStateVariables() + { + std::vector& rY = rGetStateVariables(); + std::string error_message = ""; + + for (unsigned i=0; i < 4; i++) + { + if(std::isnan(rY[i])) + { + error_message += "State variable " + this->rGetStateVariableNames()[i] + " is not a number\n"; + } + if(std::isinf(rY[i])) + { + error_message += "State variable " + this->rGetStateVariableNames()[i] + " has become INFINITE\n"; + } + if(this->is_concentration[i] && rY[i] < 0) + { + error_message += "Concentration " + this->rGetStateVariableNames()[i] + " below 0\n"; + } + if(this->is_probability[i] && rY[i] < 0) + { + error_message += "Probability " + this->rGetStateVariableNames()[i] + " below 0\n"; + } + if(this->is_probability[i] && rY[i] > 1) + { + error_message += "Probability " + this->rGetStateVariableNames()[i] + " above 1\n"; + } + } + if (error_message != ""){ + EXCEPTION(DumpState(error_message)); + } + } + + double Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLOpt::GetIIonic(const std::vector* pStateVariables) + { + // For state variable interpolation (SVI) we read in interpolated state variables, + // otherwise for ionic current interpolation (ICI) we use the state variables of this model (node). + if (!pStateVariables) pStateVariables = &rGetStateVariables(); + const std::vector& rY = *pStateVariables; + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -75.0 + double var_chaste_interface__sodium_channel_m_gate__m = rY[1]; + // Units: dimensionless; Initial value: 0.05 + double var_chaste_interface__sodium_channel_h_gate__h = rY[2]; + // Units: dimensionless; Initial value: 0.6 + double var_chaste_interface__potassium_channel_n_gate__n = rY[3]; + // Units: dimensionless; Initial value: 0.325 + + + const double var_leakage_current__i_L = (64.387 + var_chaste_interface__membrane__V) * mParameters[2]; // microA_per_cm2 + const double var_potassium_channel__i_K = pow(var_chaste_interface__potassium_channel_n_gate__n, 4) * (87 + var_chaste_interface__membrane__V) * mParameters[3]; // microA_per_cm2 + const double var_sodium_channel__i_Na = pow(var_chaste_interface__sodium_channel_m_gate__m, 3) * (-40 + var_chaste_interface__membrane__V) * mParameters[1] * var_chaste_interface__sodium_channel_h_gate__h; // microA_per_cm2 + const double var_chaste_interface__i_ionic = var_leakage_current__i_L + var_potassium_channel__i_K + var_sodium_channel__i_Na; // uA_per_cm2 + + const double i_ionic = var_chaste_interface__i_ionic; + EXCEPT_IF_NOT(!std::isnan(i_ionic)); + return i_ionic; + } + + void Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLOpt::EvaluateYDerivatives(double var_chaste_interface__environment__time, const std::vector& rY, std::vector& rDY) + { + // Inputs: + // Time units: millisecond + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -75.0 + double var_chaste_interface__sodium_channel_m_gate__m = rY[1]; + // Units: dimensionless; Initial value: 0.05 + double var_chaste_interface__sodium_channel_h_gate__h = rY[2]; + // Units: dimensionless; Initial value: 0.6 + double var_chaste_interface__potassium_channel_n_gate__n = rY[3]; + // Units: dimensionless; Initial value: 0.325 + + // Lookup table indexing + const bool _oob_0 = Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLOpt_LookupTables::Instance()->CheckIndex0(var_chaste_interface__membrane__V); +// LCOV_EXCL_START + if (_oob_0) + EXCEPTION(DumpState("membrane_voltage outside lookup table range", rY , var_chaste_interface__environment__time)); +// LCOV_EXCL_STOP + const double* const _lt_0_row = Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLOpt_LookupTables::Instance()->IndexTable0(var_chaste_interface__membrane__V); + + // Mathematics + double d_dt_chaste_interface_var_membrane__V; + const double d_dt_chaste_interface_var_potassium_channel_n_gate__n = (1 - var_chaste_interface__potassium_channel_n_gate__n) * _lt_0_row[0] - 0.125 * var_chaste_interface__potassium_channel_n_gate__n * _lt_0_row[1]; // 1 / millisecond + const double d_dt_chaste_interface_var_sodium_channel_h_gate__h = 0.070000000000000007 * (1 - var_chaste_interface__sodium_channel_h_gate__h) * _lt_0_row[2] - var_chaste_interface__sodium_channel_h_gate__h / (_lt_0_row[3]); // 1 / millisecond + const double d_dt_chaste_interface_var_sodium_channel_m_gate__m = (1 - var_chaste_interface__sodium_channel_m_gate__m) * _lt_0_row[4] - 4 * var_chaste_interface__sodium_channel_m_gate__m * _lt_0_row[5]; // 1 / millisecond + + if (mSetVoltageDerivativeToZero) + { + d_dt_chaste_interface_var_membrane__V = 0.0; + } + else + { + d_dt_chaste_interface_var_membrane__V = (-GetIntracellularAreaStimulus(var_chaste_interface__environment__time) - (64.387 + var_chaste_interface__membrane__V) * mParameters[2] - pow(var_chaste_interface__potassium_channel_n_gate__n, 4) * (87 + var_chaste_interface__membrane__V) * mParameters[3] - pow(var_chaste_interface__sodium_channel_m_gate__m, 3) * (-40 + var_chaste_interface__membrane__V) * mParameters[1] * var_chaste_interface__sodium_channel_h_gate__h) / mParameters[0]; // millivolt / millisecond + } + + rDY[0] = d_dt_chaste_interface_var_membrane__V; + rDY[1] = d_dt_chaste_interface_var_sodium_channel_m_gate__m; + rDY[2] = d_dt_chaste_interface_var_sodium_channel_h_gate__h; + rDY[3] = d_dt_chaste_interface_var_potassium_channel_n_gate__n; + } + + std::vector Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLOpt::ComputeDerivedQuantities(double var_chaste_interface__environment__time, const std::vector & rY) + { + // Inputs: + // Time units: millisecond + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -75.0 + double var_chaste_interface__sodium_channel_m_gate__m = rY[1]; + // Units: dimensionless; Initial value: 0.05 + double var_chaste_interface__sodium_channel_h_gate__h = rY[2]; + // Units: dimensionless; Initial value: 0.6 + double var_chaste_interface__potassium_channel_n_gate__n = rY[3]; + // Units: dimensionless; Initial value: 0.325 + + + // Mathematics + const double var_membrane__E_R = -75; // millivolt + const double var_leakage_current__E_L = 10.613 + var_membrane__E_R; // millivolt + const double var_leakage_current__i_L = (-var_leakage_current__E_L + var_chaste_interface__membrane__V) * mParameters[2]; // microA_per_cm2 + const double var_membrane__i_Stim = GetIntracellularAreaStimulus(var_chaste_interface__environment__time); // microA_per_cm2 + const double var_potassium_channel__E_K = -12 + var_membrane__E_R; // millivolt + const double var_potassium_channel__i_K = pow(var_chaste_interface__potassium_channel_n_gate__n, 4) * (-var_potassium_channel__E_K + var_chaste_interface__membrane__V) * mParameters[3]; // microA_per_cm2 + const double var_sodium_channel__E_Na = 115 + var_membrane__E_R; // millivolt + const double var_sodium_channel__i_Na = pow(var_chaste_interface__sodium_channel_m_gate__m, 3) * (-var_sodium_channel__E_Na + var_chaste_interface__membrane__V) * mParameters[1] * var_chaste_interface__sodium_channel_h_gate__h; // microA_per_cm2 + + std::vector dqs(5); + dqs[0] = var_sodium_channel__i_Na; + dqs[1] = var_leakage_current__i_L; + dqs[2] = var_potassium_channel__i_K; + dqs[3] = var_membrane__i_Stim; + dqs[4] = var_chaste_interface__environment__time; + return dqs; + } + +template<> +void OdeSystemInformation::Initialise(void) +{ + this->mSystemName = "hodgkin_huxley_squid_axon_model_1952_modified"; + this->mFreeVariableName = "time"; + this->mFreeVariableUnits = "millisecond"; + + // rY[0]: + this->mVariableNames.push_back("membrane_voltage"); + this->mVariableUnits.push_back("millivolt"); + this->mInitialConditions.push_back(-75.0); + + // rY[1]: + this->mVariableNames.push_back("sodium_channel_m_gate__m"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.05); + + // rY[2]: + this->mVariableNames.push_back("sodium_channel_h_gate__h"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.6); + + // rY[3]: + this->mVariableNames.push_back("potassium_channel_n_gate__n"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.325); + + // mParameters[0]: + this->mParameterNames.push_back("membrane_capacitance"); + this->mParameterUnits.push_back("microF_per_cm2"); + + // mParameters[1]: + this->mParameterNames.push_back("membrane_fast_sodium_current_conductance"); + this->mParameterUnits.push_back("milliS_per_cm2"); + + // mParameters[2]: + this->mParameterNames.push_back("membrane_leakage_current_conductance"); + this->mParameterUnits.push_back("milliS_per_cm2"); + + // mParameters[3]: + this->mParameterNames.push_back("membrane_potassium_current_conductance"); + this->mParameterUnits.push_back("milliS_per_cm2"); + + // Derived Quantity index [0]: + this->mDerivedQuantityNames.push_back("membrane_fast_sodium_current"); + this->mDerivedQuantityUnits.push_back("microA_per_cm2"); + + // Derived Quantity index [1]: + this->mDerivedQuantityNames.push_back("membrane_leakage_current"); + this->mDerivedQuantityUnits.push_back("microA_per_cm2"); + + // Derived Quantity index [2]: + this->mDerivedQuantityNames.push_back("membrane_potassium_current"); + this->mDerivedQuantityUnits.push_back("microA_per_cm2"); + + // Derived Quantity index [3]: + this->mDerivedQuantityNames.push_back("membrane_stimulus_current"); + this->mDerivedQuantityUnits.push_back("microA_per_cm2"); + + // Derived Quantity index [4]: + this->mDerivedQuantityNames.push_back("time"); + this->mDerivedQuantityUnits.push_back("millisecond"); + + this->mInitialised = true; +} + +// Serialization for Boost >= 1.36 +#include "SerializationExportWrapperForCpp.hpp" +CHASTE_CLASS_EXPORT(Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLOpt) + diff --git a/chaste_codegen/tests/numerical/baseline/Opt/hodgkin_huxley_squid_axon_model_1952_modified.hpp b/chaste_codegen/tests/numerical/baseline/Opt/hodgkin_huxley_squid_axon_model_1952_modified.hpp new file mode 100644 index 00000000..8f9a681f --- /dev/null +++ b/chaste_codegen/tests/numerical/baseline/Opt/hodgkin_huxley_squid_axon_model_1952_modified.hpp @@ -0,0 +1,85 @@ +#ifndef CELLHODGKIN_HUXLEY_SQUID_AXON_MODEL_1952_MODIFIEDFROMCELLMLOPT_HPP_ +#define CELLHODGKIN_HUXLEY_SQUID_AXON_MODEL_1952_MODIFIEDFROMCELLMLOPT_HPP_ + +//! @file +//! +//! This source file was generated from CellML by chaste_codegen version (version omitted as unimportant) +//! +//! Model: hodgkin_huxley_squid_axon_model_1952_modified +//! +//! Processed by chaste_codegen: https://github.com/ModellingWebLab/chaste-codegen +//! (translator: chaste_codegen, model type: NormalOpt) +//! on (date omitted as unimportant) +//! +//! + +#include "ChasteSerialization.hpp" +#include +#include "AbstractStimulusFunction.hpp" +#include "AbstractCardiacCell.hpp" + +class Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLOpt : public AbstractCardiacCell +{ + friend class boost::serialization::access; + template + void serialize(Archive & archive, const unsigned int version) + { + archive & boost::serialization::base_object(*this); + + } + + // + // Settable parameters and readable variables + // + + +private: +const bool is_concentration[4] = {false, false, false, false}; +const bool is_probability[4] = {false, false, false, false}; +public: + + boost::shared_ptr UseCellMLDefaultStimulus(); + Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLOpt(boost::shared_ptr pSolver, boost::shared_ptr pIntracellularStimulus); + ~Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLOpt(); + void VerifyStateVariables(); + AbstractLookupTableCollection* GetLookupTableCollection(); + double GetIIonic(const std::vector* pStateVariables=NULL); + void EvaluateYDerivatives(double var_chaste_interface__environment__time, const std::vector& rY, std::vector& rDY); + + std::vector ComputeDerivedQuantities(double var_chaste_interface__environment__time, const std::vector & rY); +}; + +// Needs to be included last +#include "SerializationExportWrapper.hpp" +CHASTE_CLASS_EXPORT(Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLOpt) + +namespace boost +{ + namespace serialization + { + template + inline void save_construct_data( + Archive & ar, const Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLOpt * t, const unsigned int fileVersion) + { + const boost::shared_ptr p_solver = t->GetSolver(); + const boost::shared_ptr p_stimulus = t->GetStimulusFunction(); + ar << p_solver; + ar << p_stimulus; + } + + template + inline void load_construct_data( + Archive & ar, Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLOpt * t, const unsigned int fileVersion) + { + boost::shared_ptr p_solver; + boost::shared_ptr p_stimulus; + ar >> p_solver; + ar >> p_stimulus; + ::new(t)Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLOpt(p_solver, p_stimulus); + } + + } + +} + +#endif // CELLHODGKIN_HUXLEY_SQUID_AXON_MODEL_1952_MODIFIEDFROMCELLMLOPT_HPP_ \ No newline at end of file diff --git a/chaste_codegen/tests/numerical/baseline/Opt/non_dynamic_aslanidi_Purkinje_model_2009.cpp b/chaste_codegen/tests/numerical/baseline/Opt/non_dynamic_aslanidi_Purkinje_model_2009.cpp new file mode 100644 index 00000000..697a88b1 --- /dev/null +++ b/chaste_codegen/tests/numerical/baseline/Opt/non_dynamic_aslanidi_Purkinje_model_2009.cpp @@ -0,0 +1,1428 @@ +//! @file +//! +//! This source file was generated from CellML by chaste_codegen version (version omitted as unimportant) +//! +//! Model: aslanidi_2009 +//! +//! Processed by chaste_codegen: https://github.com/ModellingWebLab/chaste-codegen +//! (translator: chaste_codegen, model type: NormalOpt) +//! on (date omitted as unimportant) +//! +//! + +#include "aslanidi_Purkinje_model_2009Opt.hpp" +#include +#include +#include +#include +#include "Exception.hpp" +#include "OdeSystemInformation.hpp" +#include "RegularStimulus.hpp" +#include "HeartConfig.hpp" +#include "IsNan.hpp" +#include "MathsCustomFunctions.hpp" + + + +class Cellaslanidi_Purkinje_model_2009FromCellMLOpt_LookupTables : public AbstractLookupTableCollection +{ +public: + static Cellaslanidi_Purkinje_model_2009FromCellMLOpt_LookupTables* Instance() + { + if (mpInstance.get() == NULL) + { + mpInstance.reset(new Cellaslanidi_Purkinje_model_2009FromCellMLOpt_LookupTables); + } + return mpInstance.get(); + } + + void FreeMemory() + { + + if (_lookup_table_0) + { + delete[] _lookup_table_0; + _lookup_table_0 = NULL; + } + + mNeedsRegeneration.assign(mNeedsRegeneration.size(), true); + } + + // Row lookup methods + // using linear-interpolation + + double* _lookup_0_row(unsigned i, double _factor_) + { + for (unsigned j=0; j<35; j++) + { + const double y1 = _lookup_table_0[i][j]; + const double y2 = _lookup_table_0[i+1][j]; + _lookup_table_0_row[j] = y1 + (y2-y1)*_factor_; + } + return _lookup_table_0_row; + } + + + const double * IndexTable0(double var_chaste_interface__membrane__V) + { + const double _offset_0 = var_chaste_interface__membrane__V - mTableMins[0]; + const double _offset_0_over_table_step = _offset_0 * mTableStepInverses[0]; + const unsigned _table_index_0 = (unsigned)(_offset_0_over_table_step); + const double _factor_0 = _offset_0_over_table_step - _table_index_0; + const double* const _lt_0_row = Cellaslanidi_Purkinje_model_2009FromCellMLOpt_LookupTables::Instance()->_lookup_0_row(_table_index_0, _factor_0); + return _lt_0_row; + } + + +// LCOV_EXCL_START + bool CheckIndex0(double& var_chaste_interface__membrane__V) + { + bool _oob_0 = false; + if (var_chaste_interface__membrane__V>mTableMaxs[0] || var_chaste_interface__membrane__V mpInstance; + + // Row lookup methods memory + double _lookup_table_0_row[35]; + + // Lookup tables + double (*_lookup_table_0)[35]; + int _lookup_table_0_num_misshit_piecewise[35] = {0}; + +}; + +std::shared_ptr Cellaslanidi_Purkinje_model_2009FromCellMLOpt_LookupTables::mpInstance; + + + boost::shared_ptr Cellaslanidi_Purkinje_model_2009FromCellMLOpt::UseCellMLDefaultStimulus() + { + // Use the default stimulus specified by CellML metadata + const double var_chaste_interface__membrane__stim_amplitude_converted = -80 * HeartConfig::Instance()->GetCapacitance(); // uA_per_cm2 + const double var_chaste_interface__membrane__stim_duration = 1; // millisecond + const double var_chaste_interface__membrane__stim_period = 800; // millisecond + const double var_chaste_interface__membrane__stim_start = 100; // millisecond + boost::shared_ptr p_cellml_stim(new RegularStimulus( + -fabs(var_chaste_interface__membrane__stim_amplitude_converted), + var_chaste_interface__membrane__stim_duration, + var_chaste_interface__membrane__stim_period, + var_chaste_interface__membrane__stim_start + )); + mpIntracellularStimulus = p_cellml_stim; + return p_cellml_stim; + } + double Cellaslanidi_Purkinje_model_2009FromCellMLOpt::GetIntracellularCalciumConcentration() + { + return mStateVariables[1]; + } + Cellaslanidi_Purkinje_model_2009FromCellMLOpt::Cellaslanidi_Purkinje_model_2009FromCellMLOpt(boost::shared_ptr pSolver, boost::shared_ptr pIntracellularStimulus) + : AbstractCardiacCellWithModifiers( + pSolver, + 30, + 0, + pIntracellularStimulus) + { + // Time units: millisecond + // + this->mpSystemInfo = OdeSystemInformation::Instance(); + Init(); + + // We have a default stimulus specified in the CellML file metadata + this->mHasDefaultStimulusFromCellML = true; + + // These will get initialised to DummyModifiers in the base class method. + this->AddModifier("JSR_calcium_concentration", + mp_JSR_calcium_concentration_modifier); + this->AddModifier("SR_leak_current_max", + mp_SR_leak_current_max_modifier); + this->AddModifier("SR_release_current", + mp_SR_release_current_modifier); + this->AddModifier("SR_release_current_max", + mp_SR_release_current_max_modifier); + this->AddModifier("SR_uptake_current_max", + mp_SR_uptake_current_max_modifier); + this->AddModifier("concentration_clamp_onoff", + mp_concentration_clamp_onoff_modifier); + this->AddModifier("cytosolic_calcium_concentration", + mp_cytosolic_calcium_concentration_modifier); + this->AddModifier("cytosolic_potassium_concentration", + mp_cytosolic_potassium_concentration_modifier); + this->AddModifier("cytosolic_sodium_concentration", + mp_cytosolic_sodium_concentration_modifier); + this->AddModifier("dyadic_space_calcium_concentration", + mp_dyadic_space_calcium_concentration_modifier); + this->AddModifier("extracellular_calcium_concentration", + mp_extracellular_calcium_concentration_modifier); + this->AddModifier("extracellular_potassium_concentration", + mp_extracellular_potassium_concentration_modifier); + this->AddModifier("extracellular_sodium_concentration", + mp_extracellular_sodium_concentration_modifier); + this->AddModifier("membrane_L_type_calcium_current", + mp_i_Ca_L__i_Ca_L_modifier); + this->AddModifier("membrane_L_type_calcium_current_conductance", + mp_membrane_L_type_calcium_current_conductance_modifier); + this->AddModifier("membrane_L_type_calcium_current_d_gate", + mp_membrane_L_type_calcium_current_d_gate_modifier); + this->AddModifier("membrane_L_type_calcium_current_f2_gate", + mp_membrane_L_type_calcium_current_f2_gate_modifier); + this->AddModifier("membrane_L_type_calcium_current_f2_gate_tau", + mp_membrane_L_type_calcium_current_f2_gate_tau_modifier); + this->AddModifier("membrane_L_type_calcium_current_fCa2_gate", + mp_membrane_L_type_calcium_current_fCa2_gate_modifier); + this->AddModifier("membrane_L_type_calcium_current_fCa2_gate_tau", + mp_membrane_L_type_calcium_current_fCa2_gate_tau_modifier); + this->AddModifier("membrane_L_type_calcium_current_fCa_gate", + mp_membrane_L_type_calcium_current_fCa_gate_modifier); + this->AddModifier("membrane_L_type_calcium_current_fCa_gate_tau", + mp_membrane_L_type_calcium_current_fCa_gate_tau_modifier); + this->AddModifier("membrane_L_type_calcium_current_f_gate", + mp_membrane_L_type_calcium_current_f_gate_modifier); + this->AddModifier("membrane_L_type_calcium_current_f_gate_tau", + mp_membrane_L_type_calcium_current_f_gate_tau_modifier); + this->AddModifier("membrane_fast_sodium_current", + mp_i_Na__i_Na_modifier); + this->AddModifier("membrane_fast_sodium_current_conductance", + mp_membrane_fast_sodium_current_conductance_modifier); + this->AddModifier("membrane_fast_sodium_current_h_gate", + mp_membrane_fast_sodium_current_h_gate_modifier); + this->AddModifier("membrane_fast_sodium_current_h_gate_tau", + mp_membrane_fast_sodium_current_h_gate_tau_modifier); + this->AddModifier("membrane_fast_sodium_current_j_gate", + mp_membrane_fast_sodium_current_j_gate_modifier); + this->AddModifier("membrane_fast_sodium_current_j_gate_tau", + mp_membrane_fast_sodium_current_j_gate_tau_modifier); + this->AddModifier("membrane_fast_sodium_current_m_gate", + mp_membrane_fast_sodium_current_m_gate_modifier); + this->AddModifier("membrane_fast_sodium_current_reduced_inactivation", + mp_membrane_fast_sodium_current_reduced_inactivation_modifier); + this->AddModifier("membrane_fast_sodium_current_shift_inactivation", + mp_membrane_fast_sodium_current_shift_inactivation_modifier); + this->AddModifier("membrane_inward_rectifier_potassium_current", + mp_i_K1__i_K1_modifier); + this->AddModifier("membrane_inward_rectifier_potassium_current_conductance", + mp_membrane_inward_rectifier_potassium_current_conductance_modifier); + this->AddModifier("membrane_rapid_delayed_rectifier_potassium_current", + mp_i_Kr__i_Kr_modifier); + this->AddModifier("membrane_rapid_delayed_rectifier_potassium_current_conductance", + mp_membrane_rapid_delayed_rectifier_potassium_current_conductance_modifier); + this->AddModifier("membrane_slow_delayed_rectifier_potassium_current", + mp_i_Ks__i_Ks_modifier); + this->AddModifier("membrane_slow_delayed_rectifier_potassium_current_conductance", + mp_membrane_slow_delayed_rectifier_potassium_current_conductance_modifier); + this->AddModifier("membrane_sodium_calcium_exchanger_current", + mp_i_NaCa__i_NaCa_modifier); + this->AddModifier("membrane_sodium_calcium_exchanger_current_conductance", + mp_membrane_sodium_calcium_exchanger_current_conductance_modifier); + this->AddModifier("membrane_transient_outward_current", + mp_i_to_1__i_to_1_modifier); + this->AddModifier("membrane_transient_outward_current_conductance", + mp_membrane_transient_outward_current_conductance_modifier); + this->AddModifier("membrane_voltage", + mp_membrane_voltage_modifier); + this->mParameters[0] = 0.0043750000000000004; // (var_q_leak__q_leak_max) [millimolar_per_millisecond] + this->mParameters[1] = 3000; // (var_q_rel__g_rel_max) [per_millisecond] + this->mParameters[2] = 0.0043750000000000004; // (var_q_up__q_up_max) [millimolar_per_millisecond] + this->mParameters[3] = 1; // (var_intracellular_ion_concentrations__conc_clamp) [dimensionless] + this->mParameters[4] = 1.8; // (var_model_parameters__Ca_o) [millimolar] + this->mParameters[5] = 5.4000000000000004; // (var_model_parameters__K_o) [millimolar] + this->mParameters[6] = 140; // (var_model_parameters__Na_o) [millimolar] + this->mParameters[7] = 0.3392328; // (var_i_Ca_L__g_Ca_L) [dimensionless] + this->mParameters[8] = 8; // (var_i_Na__g_Na) [milliS_per_microF] + this->mParameters[9] = 0; // (var_i_Na__perc_reduced_inact_for_IpNa) [dimensionless] + this->mParameters[10] = 0; // (var_i_Na__shift_INa_inact) [millivolt] + this->mParameters[11] = 0.25; // (var_i_K1__g_K1_max) [milliS_per_microF] + this->mParameters[12] = 0.040008488000000002; // (var_i_Kr__g_Kr_max) [milliS_per_microF] + this->mParameters[13] = 0.052581329000000003; // (var_i_Ks__g_Ks_max) [milliS_per_microF] + this->mParameters[14] = 4.5; // (var_i_NaCa__i_NaCa_max) [microA_per_microF] + this->mParameters[15] = 0.14135944; // (var_i_to_1__g_to_1) [milliS_per_microF] + } + + Cellaslanidi_Purkinje_model_2009FromCellMLOpt::~Cellaslanidi_Purkinje_model_2009FromCellMLOpt() + { + } + + AbstractLookupTableCollection* Cellaslanidi_Purkinje_model_2009FromCellMLOpt::GetLookupTableCollection() + { + return Cellaslanidi_Purkinje_model_2009FromCellMLOpt_LookupTables::Instance(); + } + + void Cellaslanidi_Purkinje_model_2009FromCellMLOpt::VerifyStateVariables() + { + std::vector& rY = rGetStateVariables(); + std::string error_message = ""; + + for (unsigned i=0; i < 30; i++) + { + if(std::isnan(rY[i])) + { + error_message += "State variable " + this->rGetStateVariableNames()[i] + " is not a number\n"; + } + if(std::isinf(rY[i])) + { + error_message += "State variable " + this->rGetStateVariableNames()[i] + " has become INFINITE\n"; + } + if(this->is_concentration[i] && rY[i] < 0) + { + error_message += "Concentration " + this->rGetStateVariableNames()[i] + " below 0\n"; + } + if(this->is_probability[i] && rY[i] < 0) + { + error_message += "Probability " + this->rGetStateVariableNames()[i] + " below 0\n"; + } + if(this->is_probability[i] && rY[i] > 1) + { + error_message += "Probability " + this->rGetStateVariableNames()[i] + " above 1\n"; + } + } + if (error_message != ""){ + EXCEPTION(DumpState(error_message)); + } + } + + double Cellaslanidi_Purkinje_model_2009FromCellMLOpt::GetIIonic(const std::vector* pStateVariables) + { + // For state variable interpolation (SVI) we read in interpolated state variables, + // otherwise for ionic current interpolation (ICI) we use the state variables of this model (node). + if (!pStateVariables) pStateVariables = &rGetStateVariables(); + const std::vector& rY = *pStateVariables; + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -83.43812846286808 + double var_chaste_interface__Ca_i__Ca_i = rY[1]; + // Units: millimolar; Initial value: 0.00022355433459434943 + double var_chaste_interface__i_Na_m_gate__m = rY[2]; + // Units: dimensionless; Initial value: 0.002003390432234504 + double var_chaste_interface__i_Na_h_gate__h = rY[3]; + // Units: dimensionless; Initial value: 0.9786390933308567 + double var_chaste_interface__i_Na_j_gate__j = rY[4]; + // Units: dimensionless; Initial value: 0.09866447258167589 + double var_chaste_interface__i_Na_L_m_L_gate__m_L = rY[5]; + // Units: dimensionless; Initial value: 0.002003390432234504 + double var_chaste_interface__i_Na_L_h_L_gate__h_L = rY[6]; + // Units: dimensionless; Initial value: 0.8946968372659203 + double var_chaste_interface__i_Ca_L_d_gate__d = rY[7]; + // Units: dimensionless; Initial value: 2.322223865147363e-06 + double var_chaste_interface__i_Ca_L_f_gate__f = rY[8]; + // Units: dimensionless; Initial value: 0.9985607329462358 + double var_chaste_interface__i_Ca_L_f2_gate__f2 = rY[9]; + // Units: dimensionless; Initial value: 0.8173435436674658 + double var_chaste_interface__i_Ca_L_f_Ca_gate__f_Ca = rY[10]; + // Units: dimensionless; Initial value: 0.9610551285529658 + double var_chaste_interface__i_Ca_L_f_Ca2_gate__f_Ca2 = rY[11]; + // Units: dimensionless; Initial value: 0.868690796671854 + double var_chaste_interface__i_Ca_T_b_gate__b = rY[12]; + // Units: dimensionless; Initial value: 0.0002563937630984438 + double var_chaste_interface__i_Ca_T_g_gate__g = rY[13]; + // Units: dimensionless; Initial value: 0.9720432601848331 + double var_chaste_interface__i_to_1_a_gate__a = rY[14]; + // Units: dimensionless; Initial value: 0.0004238729429342389 + double var_chaste_interface__i_to_1_i_gate__i = rY[15]; + // Units: dimensionless; Initial value: 0.9990935802459496 + double var_chaste_interface__i_to_1_i2_gate__i2 = rY[16]; + // Units: dimensionless; Initial value: 0.9777368439681764 + double var_chaste_interface__i_Kr_xr_gate__xr = rY[17]; + // Units: dimensionless; Initial value: 0.07084939408222911 + double var_chaste_interface__i_Ks_xs1_gate__xs1 = rY[18]; + // Units: dimensionless; Initial value: 0.0011737654433043125 + double var_chaste_interface__i_Ks_xs2_gate__xs2 = rY[19]; + // Units: dimensionless; Initial value: 0.001179442867470093 + double var_chaste_interface__i_to_2_a_gate__a = rY[20]; + // Units: dimensionless; Initial value: 0.0014909437525000811 + double var_chaste_interface__intracellular_ion_concentrations__Na_i = rY[21]; + // Units: millimolar; Initial value: 9.927155552932733 + double var_chaste_interface__intracellular_ion_concentrations__Cl_i = rY[22]; + // Units: millimolar; Initial value: 18.904682470140408 + double var_chaste_interface__intracellular_ion_concentrations__K_i = rY[23]; + // Units: millimolar; Initial value: 141.9670801746057 + double var_chaste_interface__Ca_r__Ca_r = rY[27]; + // Units: millimolar; Initial value: 0.00022418117117903934 + + // Lookup table indexing + const bool _oob_0 = Cellaslanidi_Purkinje_model_2009FromCellMLOpt_LookupTables::Instance()->CheckIndex0(var_chaste_interface__membrane__V); +// LCOV_EXCL_START + if (_oob_0) + EXCEPTION(DumpState("membrane_voltage outside lookup table range", rY)); +// LCOV_EXCL_STOP + const double* const _lt_0_row = Cellaslanidi_Purkinje_model_2009FromCellMLOpt_LookupTables::Instance()->IndexTable0(var_chaste_interface__membrane__V); + + const double var_equilibrium_potentials__E_K = 26.712338705498265 * log(mParameters[5] / var_chaste_interface__intracellular_ion_concentrations__K_i); // millivolt + const double var_equilibrium_potentials__E_Na = 26.712338705498265 * log(mParameters[6] / var_chaste_interface__intracellular_ion_concentrations__Na_i); // millivolt + const double var_membrane__i_tot = 0.0077250000000000001 * var_chaste_interface__membrane__V + 0.0060102762087371094 * log(100 / var_chaste_interface__intracellular_ion_concentrations__Cl_i) - 0.0025000000000000001 * var_equilibrium_potentials__E_Na - 0.0050000000000000001 * var_equilibrium_potentials__E_K + (0.0040000000000000001 + 0.4389381125701739 * sqrt(mParameters[5]) * mParameters[11] / ((1 + exp(-14.1227775 + 0.23849999999999999 * var_chaste_interface__membrane__V - 0.23849999999999999 * var_equilibrium_potentials__E_K)) * (1.02 / (1 + exp(-14.1227775 + 0.23849999999999999 * var_chaste_interface__membrane__V - 0.23849999999999999 * var_equilibrium_potentials__E_K)) + (0.49124000000000001 * exp(0.43983232 + 0.080320000000000003 * var_chaste_interface__membrane__V - 0.080320000000000003 * var_equilibrium_potentials__E_K) + exp(-36.698642499999998 + 0.061749999999999999 * var_chaste_interface__membrane__V - 0.061749999999999999 * var_equilibrium_potentials__E_K)) / (1 + exp(-2.4444678999999998 + 0.51429999999999998 * var_equilibrium_potentials__E_K - 0.51429999999999998 * var_chaste_interface__membrane__V))))) * (-var_equilibrium_potentials__E_K + var_chaste_interface__membrane__V) + 0.0027599999999999999 * (-var_equilibrium_potentials__E_K + var_chaste_interface__membrane__V) / (_lt_0_row[0]) + 0.057500000000000002 * var_chaste_interface__Ca_i__Ca_i / (0.00050000000000000001 + var_chaste_interface__Ca_i__Ca_i) + 0.13 * (-50 + var_chaste_interface__membrane__V) * var_chaste_interface__i_Ca_T_b_gate__b * var_chaste_interface__i_Ca_T_g_gate__g + 0.037374999999999999 * pow(var_chaste_interface__i_Na_L_m_L_gate__m_L, 3) * (-var_equilibrium_potentials__E_Na + var_chaste_interface__membrane__V) * var_chaste_interface__i_Na_L_h_L_gate__h_L + 0.0028824983370007683 * (-0.34100000000000003 * mParameters[4] + var_chaste_interface__Ca_i__Ca_i * _lt_0_row[1]) * var_chaste_interface__membrane__V / (_lt_0_row[2]) + (-1.5 * pow(mParameters[6], 3) * var_chaste_interface__Ca_i__Ca_i * _lt_0_row[3] + 0.40000000000000002 * pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, 3) * mParameters[14] * mParameters[4] * _lt_0_row[4]) / ((_lt_0_row[5]) * (1 + 6.9444444444444451e-9 / pow(var_chaste_interface__Ca_i__Ca_i, 2)) * (1004882.8125 * var_chaste_interface__Ca_i__Ca_i + 1.3 * pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, 3) + pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, 3) * mParameters[4] + 1.5 * pow(mParameters[6], 3) * var_chaste_interface__Ca_i__Ca_i + 0.0035999999999999999 * pow(mParameters[6], 3) * (1 + 0.081300813008130079 * var_chaste_interface__intracellular_ion_concentrations__Na_i) + 1860.8670000000004 * (1 + 416.66666666666669 * var_chaste_interface__Ca_i__Ca_i) * mParameters[4])) + pow(var_chaste_interface__i_Na_m_gate__m, 3) * (-var_equilibrium_potentials__E_Na + var_chaste_interface__membrane__V) * (0.20000000000000001 * var_chaste_interface__i_Na_j_gate__j + 0.80000000000000004 * var_chaste_interface__i_Na_h_gate__h) * mParameters[8] + (-var_equilibrium_potentials__E_K + var_chaste_interface__membrane__V) * (0.20000000000000001 * var_chaste_interface__i_to_1_i2_gate__i2 + 0.80000000000000004 * var_chaste_interface__i_to_1_i_gate__i) * mParameters[15] * var_chaste_interface__i_to_1_a_gate__a + 0.61875000000000002 * mParameters[5] / ((1 + 100 / pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, 2)) * (1.5 + mParameters[5]) * (1 + _lt_0_row[7] + 0.036499999999999998 * (-0.14285714285714285 + 0.14285714285714285 * exp(0.01485884101040119 * mParameters[6])) * _lt_0_row[6])) + 0.028896009762002683 * (_lt_0_row[8] + var_chaste_interface__intracellular_ion_concentrations__Cl_i) * var_chaste_interface__i_to_2_a_gate__a * var_chaste_interface__membrane__V / (_lt_0_row[9]) + (1 + 0.59999999999999998 / (1 + 6.4818210260626455e-7 * pow((1 / var_chaste_interface__Ca_i__Ca_i), 1.3999999999999999))) * (-26.712338705498265 * log((0.018329999999999999 * mParameters[6] + mParameters[5]) / (0.018329999999999999 * var_chaste_interface__intracellular_ion_concentrations__Na_i + var_chaste_interface__intracellular_ion_concentrations__K_i)) + var_chaste_interface__membrane__V) * mParameters[13] * var_chaste_interface__i_Ks_xs1_gate__xs1 * var_chaste_interface__i_Ks_xs2_gate__xs2 + 0.43033148291193518 * sqrt(mParameters[5]) * (-var_equilibrium_potentials__E_K + var_chaste_interface__membrane__V) * mParameters[12] * var_chaste_interface__i_Kr_xr_gate__xr / (_lt_0_row[10]) + 3.510865186083326 * (-15 + var_chaste_interface__membrane__V) * (-0.34100000000000003 * mParameters[4] + var_chaste_interface__Ca_r__Ca_r * _lt_0_row[11]) * mParameters[7] * var_chaste_interface__i_Ca_L_d_gate__d * var_chaste_interface__i_Ca_L_f2_gate__f2 * var_chaste_interface__i_Ca_L_f_Ca2_gate__f_Ca2 * var_chaste_interface__i_Ca_L_f_Ca_gate__f_Ca * var_chaste_interface__i_Ca_L_f_gate__f / (_lt_0_row[12]); // microA_per_microF + const double var_chaste_interface__i_ionic = HeartConfig::Instance()->GetCapacitance() * var_membrane__i_tot; // uA_per_cm2 + + const double i_ionic = var_chaste_interface__i_ionic; + EXCEPT_IF_NOT(!std::isnan(i_ionic)); + return i_ionic; + } + + void Cellaslanidi_Purkinje_model_2009FromCellMLOpt::EvaluateYDerivatives(double var_chaste_interface__environment__time, const std::vector& rY, std::vector& rDY) + { + // Inputs: + // Time units: millisecond + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : mp_membrane_voltage_modifier->Calc(rY[0], var_chaste_interface__environment__time)); + // Units: millivolt; Initial value: -83.43812846286808 + double var_chaste_interface__Ca_i__Ca_i = mp_cytosolic_calcium_concentration_modifier->Calc(rY[1], var_chaste_interface__environment__time); + // Units: millimolar; Initial value: 0.00022355433459434943 + double var_chaste_interface__i_Na_m_gate__m = mp_membrane_fast_sodium_current_m_gate_modifier->Calc(rY[2], var_chaste_interface__environment__time); + // Units: dimensionless; Initial value: 0.002003390432234504 + double var_chaste_interface__i_Na_h_gate__h = mp_membrane_fast_sodium_current_h_gate_modifier->Calc(rY[3], var_chaste_interface__environment__time); + // Units: dimensionless; Initial value: 0.9786390933308567 + double var_chaste_interface__i_Na_j_gate__j = mp_membrane_fast_sodium_current_j_gate_modifier->Calc(rY[4], var_chaste_interface__environment__time); + // Units: dimensionless; Initial value: 0.09866447258167589 + double var_chaste_interface__i_Na_L_m_L_gate__m_L = rY[5]; + // Units: dimensionless; Initial value: 0.002003390432234504 + double var_chaste_interface__i_Na_L_h_L_gate__h_L = rY[6]; + // Units: dimensionless; Initial value: 0.8946968372659203 + double var_chaste_interface__i_Ca_L_d_gate__d = mp_membrane_L_type_calcium_current_d_gate_modifier->Calc(rY[7], var_chaste_interface__environment__time); + // Units: dimensionless; Initial value: 2.322223865147363e-06 + double var_chaste_interface__i_Ca_L_f_gate__f = mp_membrane_L_type_calcium_current_f_gate_modifier->Calc(rY[8], var_chaste_interface__environment__time); + // Units: dimensionless; Initial value: 0.9985607329462358 + double var_chaste_interface__i_Ca_L_f2_gate__f2 = mp_membrane_L_type_calcium_current_f2_gate_modifier->Calc(rY[9], var_chaste_interface__environment__time); + // Units: dimensionless; Initial value: 0.8173435436674658 + double var_chaste_interface__i_Ca_L_f_Ca_gate__f_Ca = mp_membrane_L_type_calcium_current_fCa_gate_modifier->Calc(rY[10], var_chaste_interface__environment__time); + // Units: dimensionless; Initial value: 0.9610551285529658 + double var_chaste_interface__i_Ca_L_f_Ca2_gate__f_Ca2 = mp_membrane_L_type_calcium_current_fCa2_gate_modifier->Calc(rY[11], var_chaste_interface__environment__time); + // Units: dimensionless; Initial value: 0.868690796671854 + double var_chaste_interface__i_Ca_T_b_gate__b = rY[12]; + // Units: dimensionless; Initial value: 0.0002563937630984438 + double var_chaste_interface__i_Ca_T_g_gate__g = rY[13]; + // Units: dimensionless; Initial value: 0.9720432601848331 + double var_chaste_interface__i_to_1_a_gate__a = rY[14]; + // Units: dimensionless; Initial value: 0.0004238729429342389 + double var_chaste_interface__i_to_1_i_gate__i = rY[15]; + // Units: dimensionless; Initial value: 0.9990935802459496 + double var_chaste_interface__i_to_1_i2_gate__i2 = rY[16]; + // Units: dimensionless; Initial value: 0.9777368439681764 + double var_chaste_interface__i_Kr_xr_gate__xr = rY[17]; + // Units: dimensionless; Initial value: 0.07084939408222911 + double var_chaste_interface__i_Ks_xs1_gate__xs1 = rY[18]; + // Units: dimensionless; Initial value: 0.0011737654433043125 + double var_chaste_interface__i_Ks_xs2_gate__xs2 = rY[19]; + // Units: dimensionless; Initial value: 0.001179442867470093 + double var_chaste_interface__i_to_2_a_gate__a = rY[20]; + // Units: dimensionless; Initial value: 0.0014909437525000811 + double var_chaste_interface__intracellular_ion_concentrations__Na_i = mp_cytosolic_sodium_concentration_modifier->Calc(rY[21], var_chaste_interface__environment__time); + // Units: millimolar; Initial value: 9.927155552932733 + double var_chaste_interface__intracellular_ion_concentrations__Cl_i = rY[22]; + // Units: millimolar; Initial value: 18.904682470140408 + double var_chaste_interface__intracellular_ion_concentrations__K_i = mp_cytosolic_potassium_concentration_modifier->Calc(rY[23], var_chaste_interface__environment__time); + // Units: millimolar; Initial value: 141.9670801746057 + double var_chaste_interface__Ca_MK_act__Ca_MK_trap = rY[24]; + // Units: dimensionless; Initial value: 8.789168284782809e-06 + double var_chaste_interface__Ca_NSR__Ca_NSR = rY[25]; + // Units: millimolar; Initial value: 1.2132524695849454 + double var_chaste_interface__Ca_JSR__Ca_JSR = mp_JSR_calcium_concentration_modifier->Calc(rY[26], var_chaste_interface__environment__time); + // Units: millimolar; Initial value: 1.1433050636518596 + double var_chaste_interface__Ca_r__Ca_r = mp_dyadic_space_calcium_concentration_modifier->Calc(rY[27], var_chaste_interface__environment__time); + // Units: millimolar; Initial value: 0.00022418117117903934 + double var_chaste_interface__q_rel_ri_gate__ri = rY[28]; + // Units: dimensionless; Initial value: 0.7802870066567904 + double var_chaste_interface__q_rel_ro_gate__ro = rY[29]; + // Units: dimensionless; Initial value: 1.2785734760674763e-09 + + // Lookup table indexing + const bool _oob_0 = Cellaslanidi_Purkinje_model_2009FromCellMLOpt_LookupTables::Instance()->CheckIndex0(var_chaste_interface__membrane__V); +// LCOV_EXCL_START + if (_oob_0) + EXCEPTION(DumpState("membrane_voltage outside lookup table range", rY , var_chaste_interface__environment__time)); +// LCOV_EXCL_STOP + const double* const _lt_0_row = Cellaslanidi_Purkinje_model_2009FromCellMLOpt_LookupTables::Instance()->IndexTable0(var_chaste_interface__membrane__V); + + // Mathematics + double d_dt_chaste_interface_var_membrane__V; + const double var_Ca_MK_act__Ca_MK_bound = 0.050000000000000003 * (1 - var_chaste_interface__Ca_MK_act__Ca_MK_trap) / (1 + 0.14999999999999999 / var_chaste_interface__Ca_r__Ca_r); // dimensionless + const double var_Ca_MK_act__Ca_MK_act = var_Ca_MK_act__Ca_MK_bound + var_chaste_interface__Ca_MK_act__Ca_MK_trap; // dimensionless + const double var_Ca_r__q_diff = 5 * var_chaste_interface__Ca_r__Ca_r - 5 * var_chaste_interface__Ca_i__Ca_i; // millimolar_per_millisecond + const double d_dt_chaste_interface_var_Ca_MK_act__Ca_MK_trap = -0.00068000000000000005 * var_chaste_interface__Ca_MK_act__Ca_MK_trap + 0.050000000000000003 * (var_Ca_MK_act__Ca_MK_bound + var_chaste_interface__Ca_MK_act__Ca_MK_trap) * var_Ca_MK_act__Ca_MK_bound; // 1 / millisecond + const double var_i_Ca_p__i_Ca_p = 0.057500000000000002 * var_chaste_interface__Ca_i__Ca_i / (0.00050000000000000001 + var_chaste_interface__Ca_i__Ca_i); // microA_per_microF + const double d_dt_chaste_interface_var_i_to_2_a_gate__a = 1 / (1 + 0.1502 / var_chaste_interface__Ca_r__Ca_r) - var_chaste_interface__i_to_2_a_gate__a; // 1 / millisecond + const double d_dt_chaste_interface_var_i_Ca_L_d_gate__d = (-var_chaste_interface__i_Ca_L_d_gate__d + _lt_0_row[13]) / (_lt_0_row[14]); // 1 / millisecond + const double d_dt_chaste_interface_var_i_Ca_L_f2_gate__f2 = (-var_chaste_interface__i_Ca_L_f2_gate__f2 + _lt_0_row[15]) / (38 + 24.217200000000005 * pow((-1 + 0.053763440860215048 * var_chaste_interface__membrane__V), 2)); // 1 / millisecond + const double d_dt_chaste_interface_var_i_Ca_L_f_gate__f = (-var_chaste_interface__i_Ca_L_f_gate__f + _lt_0_row[15]) / (4 + 0.03125 * pow((-1 + 0.40000000000000002 * var_chaste_interface__membrane__V), 2)); // 1 / millisecond + const double d_dt_chaste_interface_var_i_Ca_T_b_gate__b = (-var_chaste_interface__i_Ca_T_b_gate__b + _lt_0_row[16]) * (_lt_0_row[17]); // 1 / millisecond + const double d_dt_chaste_interface_var_i_Ca_T_g_gate__g = (-var_chaste_interface__i_Ca_T_g_gate__g + _lt_0_row[18]) * (_lt_0_row[19]); // 1 / millisecond + const double d_dt_chaste_interface_var_i_Kr_xr_gate__xr = (-var_chaste_interface__i_Kr_xr_gate__xr + _lt_0_row[20]) / (_lt_0_row[21]); // 1 / millisecond + const double d_dt_chaste_interface_var_i_Ks_xs1_gate__xs1 = (-var_chaste_interface__i_Ks_xs1_gate__xs1 + _lt_0_row[22]) * (_lt_0_row[23]); // 1 / millisecond + const double d_dt_chaste_interface_var_i_Ks_xs2_gate__xs2 = (-var_chaste_interface__i_Ks_xs2_gate__xs2 + _lt_0_row[22]) * (_lt_0_row[24]); // 1 / millisecond + const double d_dt_chaste_interface_var_i_Na_L_h_L_gate__h_L = (-var_chaste_interface__i_Na_L_h_L_gate__h_L + _lt_0_row[25]) / (_lt_0_row[26]); // 1 / millisecond + const double var_i_Na_L_m_L_gate__alpha_m_L = _lt_0_row[27]; // per_millisecond + const double var_i_Na_L_m_L_gate__beta_m_L = _lt_0_row[28]; // per_millisecond + const double d_dt_chaste_interface_var_i_Na_L_m_L_gate__m_L = (-var_chaste_interface__i_Na_L_m_L_gate__m_L + var_i_Na_L_m_L_gate__alpha_m_L / (var_i_Na_L_m_L_gate__alpha_m_L + var_i_Na_L_m_L_gate__beta_m_L)) * (var_i_Na_L_m_L_gate__alpha_m_L + var_i_Na_L_m_L_gate__beta_m_L); // 1 / millisecond + const double var_i_Na_h_gate__alpha_h = ((var_chaste_interface__membrane__V < -40) ? (0.13500000000000001 * exp(-11.764705882352942 + 0.14705882352941177 * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(mParameters[10], var_chaste_interface__environment__time) - 0.14705882352941177 * var_chaste_interface__membrane__V)) : (0)); // per_millisecond + const double var_i_Na_h_gate__beta_h = ((var_chaste_interface__membrane__V < -40) ? (310000 * exp(0.34999999999999998 * var_chaste_interface__membrane__V - 0.34999999999999998 * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(mParameters[10], var_chaste_interface__environment__time)) + 3.5600000000000001 * exp(0.079000000000000001 * var_chaste_interface__membrane__V - 0.079000000000000001 * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(mParameters[10], var_chaste_interface__environment__time))) : (7.6923076923076916 / (1 + exp(-0.96036036036036043 + 0.0900900900900901 * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(mParameters[10], var_chaste_interface__environment__time) - 0.0900900900900901 * var_chaste_interface__membrane__V)))); // per_millisecond + const double d_dt_chaste_interface_var_i_Na_h_gate__h = (var_i_Na_h_gate__alpha_h + var_i_Na_h_gate__beta_h) * (-var_chaste_interface__i_Na_h_gate__h + 0.01 * mp_membrane_fast_sodium_current_reduced_inactivation_modifier->Calc(mParameters[9], var_chaste_interface__environment__time) + (1 - 0.01 * mp_membrane_fast_sodium_current_reduced_inactivation_modifier->Calc(mParameters[9], var_chaste_interface__environment__time)) * var_i_Na_h_gate__alpha_h / (var_i_Na_h_gate__alpha_h + var_i_Na_h_gate__beta_h)); // 1 / millisecond + const double var_i_Na_j_gate__alpha_j = ((var_chaste_interface__membrane__V < -40) ? ((37.780000000000001 + var_chaste_interface__membrane__V) * (-127140 * exp(0.24440000000000001 * var_chaste_interface__membrane__V - 0.24440000000000001 * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(mParameters[10], var_chaste_interface__environment__time)) - 3.4740000000000003e-5 * exp(0.043909999999999998 * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(mParameters[10], var_chaste_interface__environment__time) - 0.043909999999999998 * var_chaste_interface__membrane__V)) / (1 + exp(24.640530000000002 + 0.311 * var_chaste_interface__membrane__V - 0.311 * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(mParameters[10], var_chaste_interface__environment__time)))) : (0)); // per_millisecond + const double var_i_Na_j_gate__beta_j = ((var_chaste_interface__membrane__V < -40) ? (0.1212 * exp(0.01052 * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(mParameters[10], var_chaste_interface__environment__time) - 0.01052 * var_chaste_interface__membrane__V) / (1 + exp(-5.5312920000000005 + 0.13780000000000001 * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(mParameters[10], var_chaste_interface__environment__time) - 0.13780000000000001 * var_chaste_interface__membrane__V))) : (0.29999999999999999 * exp(2.5349999999999999e-7 * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(mParameters[10], var_chaste_interface__environment__time) - 2.5349999999999999e-7 * var_chaste_interface__membrane__V) / (1 + exp(-3.2000000000000002 + 0.10000000000000001 * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(mParameters[10], var_chaste_interface__environment__time) - 0.10000000000000001 * var_chaste_interface__membrane__V)))); // per_millisecond + const double d_dt_chaste_interface_var_i_Na_j_gate__j = (var_i_Na_j_gate__alpha_j + var_i_Na_j_gate__beta_j) * (-var_chaste_interface__i_Na_j_gate__j + 0.01 * mp_membrane_fast_sodium_current_reduced_inactivation_modifier->Calc(mParameters[9], var_chaste_interface__environment__time) + (1 - 0.01 * mp_membrane_fast_sodium_current_reduced_inactivation_modifier->Calc(mParameters[9], var_chaste_interface__environment__time)) * var_i_Na_j_gate__alpha_j / (var_i_Na_j_gate__alpha_j + var_i_Na_j_gate__beta_j)); // 1 / millisecond + const double var_i_Na_m_gate__alpha_m = _lt_0_row[27]; // per_millisecond + const double var_i_Na_m_gate__beta_m = _lt_0_row[28]; // per_millisecond + const double d_dt_chaste_interface_var_i_Na_m_gate__m = (-var_chaste_interface__i_Na_m_gate__m + var_i_Na_m_gate__alpha_m / (var_i_Na_m_gate__alpha_m + var_i_Na_m_gate__beta_m)) * (var_i_Na_m_gate__alpha_m + var_i_Na_m_gate__beta_m); // 1 / millisecond + const double var_i_to_1_a_gate__alpha_a = _lt_0_row[29]; // per_millisecond + const double var_i_to_1_a_gate__beta_a = _lt_0_row[30]; // per_millisecond + const double d_dt_chaste_interface_var_i_to_1_a_gate__a = (-var_chaste_interface__i_to_1_a_gate__a + var_i_to_1_a_gate__alpha_a / (var_i_to_1_a_gate__alpha_a + var_i_to_1_a_gate__beta_a)) * (var_i_to_1_a_gate__alpha_a + var_i_to_1_a_gate__beta_a); // 1 / millisecond + const double d_dt_chaste_interface_var_i_to_1_i2_gate__i2 = (-var_chaste_interface__i_to_1_i2_gate__i2 + _lt_0_row[31]) / (_lt_0_row[32]); // 1 / millisecond + const double d_dt_chaste_interface_var_i_to_1_i_gate__i = (-var_chaste_interface__i_to_1_i_gate__i + _lt_0_row[33]) / (_lt_0_row[34]); // 1 / millisecond + const double var_equilibrium_potentials__E_Cl = -26.712338705498265 * log(100 / var_chaste_interface__intracellular_ion_concentrations__Cl_i); // millivolt + const double var_background_currents__i_Cl_b = 0.00022499999999999999 * var_chaste_interface__membrane__V - 0.00022499999999999999 * var_equilibrium_potentials__E_Cl; // microA_per_microF + const double var_equilibrium_potentials__E_K = 26.712338705498265 * log(mp_extracellular_potassium_concentration_modifier->Calc(mParameters[5], var_chaste_interface__environment__time) / var_chaste_interface__intracellular_ion_concentrations__K_i); // millivolt + const double var_CT_K_Cl__CT_K_Cl = 7.0755999999999996e-6 * (-var_equilibrium_potentials__E_Cl + var_equilibrium_potentials__E_K) / (87.825100000000006 - var_equilibrium_potentials__E_Cl + var_equilibrium_potentials__E_K); // millimolar_per_millisecond + const double var_background_currents__i_K_b = 0.0050000000000000001 * var_chaste_interface__membrane__V - 0.0050000000000000001 * var_equilibrium_potentials__E_K; // microA_per_microF + const double var_equilibrium_potentials__E_Na = 26.712338705498265 * log(mp_extracellular_sodium_concentration_modifier->Calc(mParameters[6], var_chaste_interface__environment__time) / var_chaste_interface__intracellular_ion_concentrations__Na_i); // millivolt + const double var_CT_Na_Cl__CT_Na_Cl = 9.8442999999999999e-6 * pow((-var_equilibrium_potentials__E_Cl + var_equilibrium_potentials__E_Na), 4) / (59494197.640692554 + pow((-var_equilibrium_potentials__E_Cl + var_equilibrium_potentials__E_Na), 4)); // millimolar_per_millisecond + const double var_background_currents__i_Na_b = 0.0025000000000000001 * var_chaste_interface__membrane__V - 0.0025000000000000001 * var_equilibrium_potentials__E_Na; // microA_per_microF + const double var_i_K1__i_K1 = mp_i_K1__i_K1_modifier->Calc((0.0040000000000000001 + 0.4389381125701739 * sqrt(mp_extracellular_potassium_concentration_modifier->Calc(mParameters[5], var_chaste_interface__environment__time)) * mp_membrane_inward_rectifier_potassium_current_conductance_modifier->Calc(mParameters[11], var_chaste_interface__environment__time) / ((1 + exp(-14.1227775 + 0.23849999999999999 * var_chaste_interface__membrane__V - 0.23849999999999999 * var_equilibrium_potentials__E_K)) * (1.02 / (1 + exp(-14.1227775 + 0.23849999999999999 * var_chaste_interface__membrane__V - 0.23849999999999999 * var_equilibrium_potentials__E_K)) + (0.49124000000000001 * exp(0.43983232 + 0.080320000000000003 * var_chaste_interface__membrane__V - 0.080320000000000003 * var_equilibrium_potentials__E_K) + exp(-36.698642499999998 + 0.061749999999999999 * var_chaste_interface__membrane__V - 0.061749999999999999 * var_equilibrium_potentials__E_K)) / (1 + exp(-2.4444678999999998 + 0.51429999999999998 * var_equilibrium_potentials__E_K - 0.51429999999999998 * var_chaste_interface__membrane__V))))) * (-var_equilibrium_potentials__E_K + var_chaste_interface__membrane__V), var_chaste_interface__environment__time); // microA_per_microF + const double var_i_K_p__i_K_p = 0.0027599999999999999 * (-var_equilibrium_potentials__E_K + var_chaste_interface__membrane__V) / (_lt_0_row[0]); // microA_per_microF + const double var_i_Kr__i_Kr = mp_i_Kr__i_Kr_modifier->Calc(0.43033148291193518 * sqrt(mp_extracellular_potassium_concentration_modifier->Calc(mParameters[5], var_chaste_interface__environment__time)) * (-var_equilibrium_potentials__E_K + var_chaste_interface__membrane__V) * mp_membrane_rapid_delayed_rectifier_potassium_current_conductance_modifier->Calc(mParameters[12], var_chaste_interface__environment__time) * var_chaste_interface__i_Kr_xr_gate__xr / (_lt_0_row[10]), var_chaste_interface__environment__time); // microA_per_microF + const double var_i_Ks__i_Ks = mp_i_Ks__i_Ks_modifier->Calc((1 + 0.59999999999999998 / (1 + 6.4818210260626455e-7 * pow((1 / var_chaste_interface__Ca_i__Ca_i), 1.3999999999999999))) * (-26.712338705498265 * log((0.018329999999999999 * mp_extracellular_sodium_concentration_modifier->Calc(mParameters[6], var_chaste_interface__environment__time) + mp_extracellular_potassium_concentration_modifier->Calc(mParameters[5], var_chaste_interface__environment__time)) / (0.018329999999999999 * var_chaste_interface__intracellular_ion_concentrations__Na_i + var_chaste_interface__intracellular_ion_concentrations__K_i)) + var_chaste_interface__membrane__V) * mp_membrane_slow_delayed_rectifier_potassium_current_conductance_modifier->Calc(mParameters[13], var_chaste_interface__environment__time) * var_chaste_interface__i_Ks_xs1_gate__xs1 * var_chaste_interface__i_Ks_xs2_gate__xs2, var_chaste_interface__environment__time); // microA_per_microF + const double var_i_Na__i_Na = mp_i_Na__i_Na_modifier->Calc(pow(var_chaste_interface__i_Na_m_gate__m, 3) * (-var_equilibrium_potentials__E_Na + var_chaste_interface__membrane__V) * (0.20000000000000001 * var_chaste_interface__i_Na_j_gate__j + 0.80000000000000004 * var_chaste_interface__i_Na_h_gate__h) * mp_membrane_fast_sodium_current_conductance_modifier->Calc(mParameters[8], var_chaste_interface__environment__time), var_chaste_interface__environment__time); // microA_per_microF + const double var_i_NaCa__i_NaCa = mp_i_NaCa__i_NaCa_modifier->Calc((-1.5 * pow(mp_extracellular_sodium_concentration_modifier->Calc(mParameters[6], var_chaste_interface__environment__time), 3) * var_chaste_interface__Ca_i__Ca_i * _lt_0_row[3] + 0.40000000000000002 * pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, 3) * mp_membrane_sodium_calcium_exchanger_current_conductance_modifier->Calc(mParameters[14], var_chaste_interface__environment__time) * mp_extracellular_calcium_concentration_modifier->Calc(mParameters[4], var_chaste_interface__environment__time) * _lt_0_row[4]) / ((_lt_0_row[5]) * (1 + 6.9444444444444451e-9 / pow(var_chaste_interface__Ca_i__Ca_i, 2)) * (1004882.8125 * var_chaste_interface__Ca_i__Ca_i + 1.3 * pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, 3) + pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, 3) * mp_extracellular_calcium_concentration_modifier->Calc(mParameters[4], var_chaste_interface__environment__time) + 1.5 * pow(mp_extracellular_sodium_concentration_modifier->Calc(mParameters[6], var_chaste_interface__environment__time), 3) * var_chaste_interface__Ca_i__Ca_i + 0.0035999999999999999 * pow(mp_extracellular_sodium_concentration_modifier->Calc(mParameters[6], var_chaste_interface__environment__time), 3) * (1 + 0.081300813008130079 * var_chaste_interface__intracellular_ion_concentrations__Na_i) + 1860.8670000000004 * (1 + 416.66666666666669 * var_chaste_interface__Ca_i__Ca_i) * mp_extracellular_calcium_concentration_modifier->Calc(mParameters[4], var_chaste_interface__environment__time))), var_chaste_interface__environment__time); // microA_per_microF + const double var_i_NaK__i_NaK = 0.61875000000000002 * mp_extracellular_potassium_concentration_modifier->Calc(mParameters[5], var_chaste_interface__environment__time) / ((1 + 100 / pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, 2)) * (1.5 + mp_extracellular_potassium_concentration_modifier->Calc(mParameters[5], var_chaste_interface__environment__time)) * (1 + _lt_0_row[7] + 0.036499999999999998 * (-0.14285714285714285 + 0.14285714285714285 * exp(0.01485884101040119 * mp_extracellular_sodium_concentration_modifier->Calc(mParameters[6], var_chaste_interface__environment__time))) * _lt_0_row[6])); // microA_per_microF + const double var_i_Na_L__i_Na_L = 0.037374999999999999 * pow(var_chaste_interface__i_Na_L_m_L_gate__m_L, 3) * (-var_equilibrium_potentials__E_Na + var_chaste_interface__membrane__V) * var_chaste_interface__i_Na_L_h_L_gate__h_L; // microA_per_microF + const double var_i_to_1__i_to_1 = mp_i_to_1__i_to_1_modifier->Calc((-var_equilibrium_potentials__E_K + var_chaste_interface__membrane__V) * (0.20000000000000001 * var_chaste_interface__i_to_1_i2_gate__i2 + 0.80000000000000004 * var_chaste_interface__i_to_1_i_gate__i) * mp_membrane_transient_outward_current_conductance_modifier->Calc(mParameters[15], var_chaste_interface__environment__time) * var_chaste_interface__i_to_1_a_gate__a, var_chaste_interface__environment__time); // microA_per_microF + const double var_i_to_2__i_to_2 = 0.028896009762002683 * (_lt_0_row[8] + var_chaste_interface__intracellular_ion_concentrations__Cl_i) * var_chaste_interface__i_to_2_a_gate__a * var_chaste_interface__membrane__V / (_lt_0_row[9]); // microA_per_microF + const double d_dt_chaste_interface_var_intracellular_ion_concentrations__Cl_i = (-6.767281717060562e-9 * var_background_currents__i_Cl_b - 6.767281717060562e-9 * var_i_to_2__i_to_2 + var_CT_K_Cl__CT_K_Cl + var_CT_Na_Cl__CT_Na_Cl) * mp_concentration_clamp_onoff_modifier->Calc(mParameters[3], var_chaste_interface__environment__time); // millimolar / millisecond + const double d_dt_chaste_interface_var_intracellular_ion_concentrations__K_i = (1.3534563434121124e-8 * var_i_NaK__i_NaK - 6.767281717060562e-9 * var_background_currents__i_K_b - 6.767281717060562e-9 * var_i_K1__i_K1 - 6.767281717060562e-9 * var_i_K_p__i_K_p - 6.767281717060562e-9 * var_i_Kr__i_Kr - 6.767281717060562e-9 * var_i_Ks__i_Ks - 6.767281717060562e-9 * var_i_to_1__i_to_1 + var_CT_K_Cl__CT_K_Cl) * mp_concentration_clamp_onoff_modifier->Calc(mParameters[3], var_chaste_interface__environment__time); // millimolar / millisecond + const double d_dt_chaste_interface_var_intracellular_ion_concentrations__Na_i = (-2.0301845151181685e-8 * var_i_NaCa__i_NaCa - 2.0301845151181685e-8 * var_i_NaK__i_NaK - 6.767281717060562e-9 * var_background_currents__i_Na_b - 6.767281717060562e-9 * var_i_Na__i_Na - 6.767281717060562e-9 * var_i_Na_L__i_Na_L + var_CT_Na_Cl__CT_Na_Cl) * mp_concentration_clamp_onoff_modifier->Calc(mParameters[3], var_chaste_interface__environment__time); // millimolar / millisecond + const double var_background_currents__i_Ca_b = 0.0028824983370007683 * (-0.34100000000000003 * mp_extracellular_calcium_concentration_modifier->Calc(mParameters[4], var_chaste_interface__environment__time) + var_chaste_interface__Ca_i__Ca_i * _lt_0_row[1]) * var_chaste_interface__membrane__V / (_lt_0_row[2]); // microA_per_microF + const double var_i_Ca_L__i_Ca_L_max = 3.510865186083326 * (-15 + var_chaste_interface__membrane__V) * (-0.34100000000000003 * mp_extracellular_calcium_concentration_modifier->Calc(mParameters[4], var_chaste_interface__environment__time) + var_chaste_interface__Ca_r__Ca_r * _lt_0_row[11]) / (_lt_0_row[12]); // microA_per_microF + const double var_i_Ca_L__i_Ca_L = mp_i_Ca_L__i_Ca_L_modifier->Calc(mp_membrane_L_type_calcium_current_conductance_modifier->Calc(mParameters[7], var_chaste_interface__environment__time) * var_i_Ca_L__i_Ca_L_max * var_chaste_interface__i_Ca_L_d_gate__d * var_chaste_interface__i_Ca_L_f2_gate__f2 * var_chaste_interface__i_Ca_L_f_Ca2_gate__f_Ca2 * var_chaste_interface__i_Ca_L_f_Ca_gate__f_Ca * var_chaste_interface__i_Ca_L_f_gate__f, var_chaste_interface__environment__time); // microA_per_microF + const double d_dt_chaste_interface_var_i_Ca_L_f_Ca2_gate__f_Ca2 = (-var_chaste_interface__i_Ca_L_f_Ca2_gate__f_Ca2 + 1 / (1 - 100 * var_i_Ca_L__i_Ca_L)) / (125 + 300 / (1 + exp(-4.375 - 25 * var_i_Ca_L__i_Ca_L))); // 1 / millisecond + const double d_dt_chaste_interface_var_i_Ca_L_f_Ca_gate__f_Ca = (0.14999999999999999 - var_chaste_interface__i_Ca_L_f_Ca_gate__f_Ca + 0.55000000000000004 / (1 + 333.33333333333331 * var_chaste_interface__Ca_r__Ca_r) + 0.29999999999999999 / (1 - 20 * var_i_Ca_L__i_Ca_L)) / (0.5 + 1 / (1 + 333.33333333333331 * var_chaste_interface__Ca_r__Ca_r) + 10 * var_Ca_MK_act__Ca_MK_act / (0.14999999999999999 + var_Ca_MK_act__Ca_MK_act)); // 1 / millisecond + const double var_q_leak__q_leak = 0.066666666666666666 * var_chaste_interface__Ca_NSR__Ca_NSR * mp_SR_leak_current_max_modifier->Calc(mParameters[0], var_chaste_interface__environment__time); // millimolar_per_millisecond + const double var_q_rel_ri_gate__Ca_fac = 1 / (1 + exp(3.3333333333333335 + 66.666666666666671 * var_i_Ca_L__i_Ca_L)); // millimolar + const double d_dt_chaste_interface_var_q_rel_ri_gate__ri = (-var_chaste_interface__q_rel_ri_gate__ri + 1 / (1 + exp(-16 + 80 * var_q_rel_ri_gate__Ca_fac + 40000 * var_chaste_interface__Ca_r__Ca_r))) / (3 + (350 - 10 * var_Ca_MK_act__Ca_MK_act / (0.14999999999999999 + var_Ca_MK_act__Ca_MK_act)) / (1 + exp(-15 + 5000 * var_chaste_interface__Ca_r__Ca_r + 15 * var_q_rel_ri_gate__Ca_fac)) + 10 * var_Ca_MK_act__Ca_MK_act / (0.14999999999999999 + var_Ca_MK_act__Ca_MK_act)); // 1 / millisecond + const double var_q_rel__q_rel = mp_SR_release_current_modifier->Calc((-var_chaste_interface__Ca_r__Ca_r + var_chaste_interface__Ca_JSR__Ca_JSR) * mp_SR_release_current_max_modifier->Calc(mParameters[1], var_chaste_interface__environment__time) * var_chaste_interface__q_rel_ri_gate__ri * var_chaste_interface__q_rel_ro_gate__ro / (1 + exp(2.6000000000000001 + 0.20000000000000001 * mp_membrane_L_type_calcium_current_conductance_modifier->Calc(mParameters[7], var_chaste_interface__environment__time) * var_i_Ca_L__i_Ca_L_max)), var_chaste_interface__environment__time); // millimolar_per_millisecond + const double d_dt_chaste_interface_var_Ca_r__Ca_r = (-var_Ca_r__q_diff + 0.23999999999999996 * var_q_rel__q_rel - 1.1504378919002956e-7 * var_i_Ca_L__i_Ca_L) / (1 + 2.2480000000000002 * var_chaste_interface__Ca_r__Ca_r / pow((0.0086999999999999994 + var_chaste_interface__Ca_r__Ca_r), 2) + 0.094 * var_chaste_interface__Ca_r__Ca_r / pow((0.00087000000000000001 + var_chaste_interface__Ca_r__Ca_r), 2)); // millimolar / millisecond + const double d_dt_chaste_interface_var_q_rel_ro_gate__ro = -0.33333333333333331 * var_chaste_interface__q_rel_ro_gate__ro + 0.33333333333333331 * pow(var_chaste_interface__Ca_JSR__Ca_JSR, 1.8999999999999999) * pow(var_i_Ca_L__i_Ca_L, 2) / ((1 + pow(var_i_Ca_L__i_Ca_L, 2)) * (pow(var_chaste_interface__Ca_JSR__Ca_JSR, 1.8999999999999999) + 1644.6531773416521 * pow((var_chaste_interface__Ca_r__Ca_r / (0.0028 + var_chaste_interface__Ca_r__Ca_r)), 1.8999999999999999))); // 1 / millisecond + const double var_q_tr__q_tr = 0.0083333333333333332 * var_chaste_interface__Ca_NSR__Ca_NSR - 0.0083333333333333332 * var_chaste_interface__Ca_JSR__Ca_JSR; // millimolar_per_millisecond + const double d_dt_chaste_interface_var_Ca_JSR__Ca_JSR = (-var_q_rel__q_rel + var_q_tr__q_tr) / (1 + 8 / pow((0.80000000000000004 + var_chaste_interface__Ca_JSR__Ca_JSR), 2)); // millimolar / millisecond + const double var_q_up__q_up = 0.5 * (1 + 0.75 * var_Ca_MK_act__Ca_MK_act / (0.14999999999999999 + var_Ca_MK_act__Ca_MK_act)) * var_chaste_interface__Ca_i__Ca_i * mp_SR_uptake_current_max_modifier->Calc(mParameters[2], var_chaste_interface__environment__time) / (0.00092000000000000003 - 0.00017000000000000001 * var_Ca_MK_act__Ca_MK_act / (0.14999999999999999 + var_Ca_MK_act__Ca_MK_act) + var_chaste_interface__Ca_i__Ca_i); // millimolar_per_millisecond + const double d_dt_chaste_interface_var_Ca_NSR__Ca_NSR = -var_q_leak__q_leak - 0.086956521739130432 * var_q_tr__q_tr + var_q_up__q_up; // millimolar / millisecond + const double d_dt_chaste_interface_var_Ca_i__Ca_i = -(3.383640858530281e-9 * var_background_currents__i_Ca_b + 3.383640858530281e-9 * var_i_Ca_p__i_Ca_p + 0.081176470588235281 * var_q_up__q_up - 0.029411764705882353 * var_Ca_r__q_diff - 6.767281717060562e-9 * var_i_NaCa__i_NaCa - 0.081176470588235281 * var_q_leak__q_leak) / (1 + 0.14000000000000001 * var_chaste_interface__Ca_i__Ca_i / pow((0.00050000000000000001 + var_chaste_interface__Ca_i__Ca_i), 2) + 0.10000000000000001 * var_chaste_interface__Ca_i__Ca_i / pow((0.0023800000000000002 + var_chaste_interface__Ca_i__Ca_i), 2)); // millimolar / millisecond + + if (mSetVoltageDerivativeToZero) + { + d_dt_chaste_interface_var_membrane__V = 0.0; + } + else + { + d_dt_chaste_interface_var_membrane__V = -var_background_currents__i_Ca_b - var_background_currents__i_Cl_b - var_background_currents__i_K_b - var_background_currents__i_Na_b - var_i_Ca_L__i_Ca_L - var_i_Ca_p__i_Ca_p - var_i_K1__i_K1 - var_i_K_p__i_K_p - var_i_Kr__i_Kr - var_i_Ks__i_Ks - var_i_Na__i_Na - var_i_NaCa__i_NaCa - var_i_NaK__i_NaK - var_i_Na_L__i_Na_L - var_i_to_1__i_to_1 - var_i_to_2__i_to_2 - GetIntracellularAreaStimulus(var_chaste_interface__environment__time) / HeartConfig::Instance()->GetCapacitance() - 0.13 * (-50 + var_chaste_interface__membrane__V) * var_chaste_interface__i_Ca_T_b_gate__b * var_chaste_interface__i_Ca_T_g_gate__g; // millivolt / millisecond + } + + rDY[0] = d_dt_chaste_interface_var_membrane__V; + rDY[1] = d_dt_chaste_interface_var_Ca_i__Ca_i; + rDY[2] = d_dt_chaste_interface_var_i_Na_m_gate__m; + rDY[3] = d_dt_chaste_interface_var_i_Na_h_gate__h; + rDY[4] = d_dt_chaste_interface_var_i_Na_j_gate__j; + rDY[5] = d_dt_chaste_interface_var_i_Na_L_m_L_gate__m_L; + rDY[6] = d_dt_chaste_interface_var_i_Na_L_h_L_gate__h_L; + rDY[7] = d_dt_chaste_interface_var_i_Ca_L_d_gate__d; + rDY[8] = d_dt_chaste_interface_var_i_Ca_L_f_gate__f; + rDY[9] = d_dt_chaste_interface_var_i_Ca_L_f2_gate__f2; + rDY[10] = d_dt_chaste_interface_var_i_Ca_L_f_Ca_gate__f_Ca; + rDY[11] = d_dt_chaste_interface_var_i_Ca_L_f_Ca2_gate__f_Ca2; + rDY[12] = d_dt_chaste_interface_var_i_Ca_T_b_gate__b; + rDY[13] = d_dt_chaste_interface_var_i_Ca_T_g_gate__g; + rDY[14] = d_dt_chaste_interface_var_i_to_1_a_gate__a; + rDY[15] = d_dt_chaste_interface_var_i_to_1_i_gate__i; + rDY[16] = d_dt_chaste_interface_var_i_to_1_i2_gate__i2; + rDY[17] = d_dt_chaste_interface_var_i_Kr_xr_gate__xr; + rDY[18] = d_dt_chaste_interface_var_i_Ks_xs1_gate__xs1; + rDY[19] = d_dt_chaste_interface_var_i_Ks_xs2_gate__xs2; + rDY[20] = d_dt_chaste_interface_var_i_to_2_a_gate__a; + rDY[21] = d_dt_chaste_interface_var_intracellular_ion_concentrations__Na_i; + rDY[22] = d_dt_chaste_interface_var_intracellular_ion_concentrations__Cl_i; + rDY[23] = d_dt_chaste_interface_var_intracellular_ion_concentrations__K_i; + rDY[24] = d_dt_chaste_interface_var_Ca_MK_act__Ca_MK_trap; + rDY[25] = d_dt_chaste_interface_var_Ca_NSR__Ca_NSR; + rDY[26] = d_dt_chaste_interface_var_Ca_JSR__Ca_JSR; + rDY[27] = d_dt_chaste_interface_var_Ca_r__Ca_r; + rDY[28] = d_dt_chaste_interface_var_q_rel_ri_gate__ri; + rDY[29] = d_dt_chaste_interface_var_q_rel_ro_gate__ro; + } + + std::vector Cellaslanidi_Purkinje_model_2009FromCellMLOpt::ComputeDerivedQuantities(double var_chaste_interface__environment__time, const std::vector & rY) + { + // Inputs: + // Time units: millisecond + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : mp_membrane_voltage_modifier->Calc(rY[0], var_chaste_interface__environment__time)); + // Units: millivolt; Initial value: -83.43812846286808 + double var_chaste_interface__Ca_i__Ca_i = mp_cytosolic_calcium_concentration_modifier->Calc(rY[1], var_chaste_interface__environment__time); + // Units: millimolar; Initial value: 0.00022355433459434943 + double var_chaste_interface__i_Na_m_gate__m = mp_membrane_fast_sodium_current_m_gate_modifier->Calc(rY[2], var_chaste_interface__environment__time); + // Units: dimensionless; Initial value: 0.002003390432234504 + double var_chaste_interface__i_Na_h_gate__h = mp_membrane_fast_sodium_current_h_gate_modifier->Calc(rY[3], var_chaste_interface__environment__time); + // Units: dimensionless; Initial value: 0.9786390933308567 + double var_chaste_interface__i_Na_j_gate__j = mp_membrane_fast_sodium_current_j_gate_modifier->Calc(rY[4], var_chaste_interface__environment__time); + // Units: dimensionless; Initial value: 0.09866447258167589 + double var_chaste_interface__i_Ca_L_d_gate__d = mp_membrane_L_type_calcium_current_d_gate_modifier->Calc(rY[7], var_chaste_interface__environment__time); + // Units: dimensionless; Initial value: 2.322223865147363e-06 + double var_chaste_interface__i_Ca_L_f_gate__f = mp_membrane_L_type_calcium_current_f_gate_modifier->Calc(rY[8], var_chaste_interface__environment__time); + // Units: dimensionless; Initial value: 0.9985607329462358 + double var_chaste_interface__i_Ca_L_f2_gate__f2 = mp_membrane_L_type_calcium_current_f2_gate_modifier->Calc(rY[9], var_chaste_interface__environment__time); + // Units: dimensionless; Initial value: 0.8173435436674658 + double var_chaste_interface__i_Ca_L_f_Ca_gate__f_Ca = mp_membrane_L_type_calcium_current_fCa_gate_modifier->Calc(rY[10], var_chaste_interface__environment__time); + // Units: dimensionless; Initial value: 0.9610551285529658 + double var_chaste_interface__i_Ca_L_f_Ca2_gate__f_Ca2 = mp_membrane_L_type_calcium_current_fCa2_gate_modifier->Calc(rY[11], var_chaste_interface__environment__time); + // Units: dimensionless; Initial value: 0.868690796671854 + double var_chaste_interface__i_to_1_a_gate__a = rY[14]; + // Units: dimensionless; Initial value: 0.0004238729429342389 + double var_chaste_interface__i_to_1_i_gate__i = rY[15]; + // Units: dimensionless; Initial value: 0.9990935802459496 + double var_chaste_interface__i_to_1_i2_gate__i2 = rY[16]; + // Units: dimensionless; Initial value: 0.9777368439681764 + double var_chaste_interface__i_Kr_xr_gate__xr = rY[17]; + // Units: dimensionless; Initial value: 0.07084939408222911 + double var_chaste_interface__i_Ks_xs1_gate__xs1 = rY[18]; + // Units: dimensionless; Initial value: 0.0011737654433043125 + double var_chaste_interface__i_Ks_xs2_gate__xs2 = rY[19]; + // Units: dimensionless; Initial value: 0.001179442867470093 + double var_chaste_interface__intracellular_ion_concentrations__Na_i = mp_cytosolic_sodium_concentration_modifier->Calc(rY[21], var_chaste_interface__environment__time); + // Units: millimolar; Initial value: 9.927155552932733 + double var_chaste_interface__intracellular_ion_concentrations__K_i = mp_cytosolic_potassium_concentration_modifier->Calc(rY[23], var_chaste_interface__environment__time); + // Units: millimolar; Initial value: 141.9670801746057 + double var_chaste_interface__Ca_MK_act__Ca_MK_trap = rY[24]; + // Units: dimensionless; Initial value: 8.789168284782809e-06 + double var_chaste_interface__Ca_JSR__Ca_JSR = mp_JSR_calcium_concentration_modifier->Calc(rY[26], var_chaste_interface__environment__time); + // Units: millimolar; Initial value: 1.1433050636518596 + double var_chaste_interface__Ca_r__Ca_r = mp_dyadic_space_calcium_concentration_modifier->Calc(rY[27], var_chaste_interface__environment__time); + // Units: millimolar; Initial value: 0.00022418117117903934 + double var_chaste_interface__q_rel_ri_gate__ri = rY[28]; + // Units: dimensionless; Initial value: 0.7802870066567904 + double var_chaste_interface__q_rel_ro_gate__ro = rY[29]; + // Units: dimensionless; Initial value: 1.2785734760674763e-09 + + // Lookup table indexing + const bool _oob_0 = Cellaslanidi_Purkinje_model_2009FromCellMLOpt_LookupTables::Instance()->CheckIndex0(var_chaste_interface__membrane__V); +// LCOV_EXCL_START + if (_oob_0) + EXCEPTION(DumpState("membrane_voltage outside lookup table range", rY , var_chaste_interface__environment__time)); +// LCOV_EXCL_STOP + const double* const _lt_0_row = Cellaslanidi_Purkinje_model_2009FromCellMLOpt_LookupTables::Instance()->IndexTable0(var_chaste_interface__membrane__V); + + // Mathematics + const double var_Ca_MK_act__Ca_MK_0 = 0.050000000000000003; // dimensionless + const double var_Ca_MK_act__km_Ca_MK = 0.14999999999999999; // millimolar + const double var_Ca_MK_act__Ca_MK_bound = (1 - var_chaste_interface__Ca_MK_act__Ca_MK_trap) * var_Ca_MK_act__Ca_MK_0 / (1 + var_Ca_MK_act__km_Ca_MK / var_chaste_interface__Ca_r__Ca_r); // dimensionless + const double var_Ca_MK_act__Ca_MK_act = var_Ca_MK_act__Ca_MK_bound + var_chaste_interface__Ca_MK_act__Ca_MK_trap; // dimensionless + const double var_equilibrium_potentials__r_NaK = 0.018329999999999999; // dimensionless + const double var_i_Ca_L__p_Ca = 0.000243; // cm_per_second + const double var_i_Ca_L_f_Ca_gate__tau_f_Ca = mp_membrane_L_type_calcium_current_fCa_gate_tau_modifier->Calc(0.5 + 1 / (1 + 333.33333333333331 * var_chaste_interface__Ca_r__Ca_r) + 10 * var_Ca_MK_act__Ca_MK_act / (var_Ca_MK_act__Ca_MK_act + var_Ca_MK_act__km_Ca_MK), var_chaste_interface__environment__time); // millisecond + const double var_i_Ks__g_Ks = (1 + 0.59999999999999998 / (1 + 6.4818210260626455e-7 * pow((1 / var_chaste_interface__Ca_i__Ca_i), 1.3999999999999999))) * mp_membrane_slow_delayed_rectifier_potassium_current_conductance_modifier->Calc(mParameters[13], var_chaste_interface__environment__time); // milliS_per_microF + const double var_i_NaCa__X_NaCa = 0.40000000000000002; // dimensionless + const double var_i_NaCa__k_sat = 0.27000000000000002; // dimensionless + const double var_i_NaCa__km_Ca_act = 0.000125; // millimolar + const double var_i_NaCa__km_Ca_i = 0.0035999999999999999; // millimolar + const double var_i_NaCa__km_Ca_o = 1.3; // millimolar + const double var_i_NaCa__km_Na_i_1 = 12.300000000000001; // millimolar + const double var_i_NaCa__km_Na_o = 87.5; // millimolar + const double var_i_Ca_L_f2_gate__tau_f2 = mp_membrane_L_type_calcium_current_f2_gate_tau_modifier->Calc(38 + 24.217200000000005 * pow((-1 + 0.053763440860215048 * var_chaste_interface__membrane__V), 2), var_chaste_interface__environment__time); // millisecond + const double var_i_Ca_L_f_gate__tau_f = mp_membrane_L_type_calcium_current_f_gate_tau_modifier->Calc(4 + 0.03125 * pow((-1 + 0.40000000000000002 * var_chaste_interface__membrane__V), 2), var_chaste_interface__environment__time); // millisecond + const double var_i_Kr__rr_infinity = 1 / (_lt_0_row[10]); // dimensionless + const double var_i_Na_h_gate__alpha_h = ((var_chaste_interface__membrane__V < -40) ? (0.13500000000000001 * exp(-11.764705882352942 + 0.14705882352941177 * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(mParameters[10], var_chaste_interface__environment__time) - 0.14705882352941177 * var_chaste_interface__membrane__V)) : (0)); // per_millisecond + const double var_i_Na_h_gate__beta_h = ((var_chaste_interface__membrane__V < -40) ? (310000 * exp(0.34999999999999998 * var_chaste_interface__membrane__V - 0.34999999999999998 * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(mParameters[10], var_chaste_interface__environment__time)) + 3.5600000000000001 * exp(0.079000000000000001 * var_chaste_interface__membrane__V - 0.079000000000000001 * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(mParameters[10], var_chaste_interface__environment__time))) : (7.6923076923076916 / (1 + exp(-0.96036036036036043 + 0.0900900900900901 * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(mParameters[10], var_chaste_interface__environment__time) - 0.0900900900900901 * var_chaste_interface__membrane__V)))); // per_millisecond + const double var_i_Na_h_gate__tau_h = mp_membrane_fast_sodium_current_h_gate_tau_modifier->Calc(1 / (var_i_Na_h_gate__alpha_h + var_i_Na_h_gate__beta_h), var_chaste_interface__environment__time); // millisecond + const double var_i_Na_j_gate__alpha_j = ((var_chaste_interface__membrane__V < -40) ? ((37.780000000000001 + var_chaste_interface__membrane__V) * (-127140 * exp(0.24440000000000001 * var_chaste_interface__membrane__V - 0.24440000000000001 * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(mParameters[10], var_chaste_interface__environment__time)) - 3.4740000000000003e-5 * exp(0.043909999999999998 * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(mParameters[10], var_chaste_interface__environment__time) - 0.043909999999999998 * var_chaste_interface__membrane__V)) / (1 + exp(24.640530000000002 + 0.311 * var_chaste_interface__membrane__V - 0.311 * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(mParameters[10], var_chaste_interface__environment__time)))) : (0)); // per_millisecond + const double var_i_Na_j_gate__beta_j = ((var_chaste_interface__membrane__V < -40) ? (0.1212 * exp(0.01052 * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(mParameters[10], var_chaste_interface__environment__time) - 0.01052 * var_chaste_interface__membrane__V) / (1 + exp(-5.5312920000000005 + 0.13780000000000001 * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(mParameters[10], var_chaste_interface__environment__time) - 0.13780000000000001 * var_chaste_interface__membrane__V))) : (0.29999999999999999 * exp(2.5349999999999999e-7 * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(mParameters[10], var_chaste_interface__environment__time) - 2.5349999999999999e-7 * var_chaste_interface__membrane__V) / (1 + exp(-3.2000000000000002 + 0.10000000000000001 * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(mParameters[10], var_chaste_interface__environment__time) - 0.10000000000000001 * var_chaste_interface__membrane__V)))); // per_millisecond + const double var_i_Na_j_gate__tau_j = mp_membrane_fast_sodium_current_j_gate_tau_modifier->Calc(1 / (var_i_Na_j_gate__alpha_j + var_i_Na_j_gate__beta_j), var_chaste_interface__environment__time); // millisecond + const double var_membrane__i_stim_converted = GetIntracellularAreaStimulus(var_chaste_interface__environment__time); // uA_per_cm2 + const double var_i_NaCa__dNaCa_1 = pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, 3) * var_i_NaCa__km_Ca_o + 1.5 * pow(var_i_NaCa__km_Na_o, 3) * var_chaste_interface__Ca_i__Ca_i + pow(var_i_NaCa__km_Na_i_1, 3) * (1 + 1.5 * var_chaste_interface__Ca_i__Ca_i / var_i_NaCa__km_Ca_i) * mp_extracellular_calcium_concentration_modifier->Calc(mParameters[4], var_chaste_interface__environment__time); // millimolar4 + const double var_model_parameters__Cm = 1; // microF_per_cm2 + const double var_model_parameters__F = 96485; // coulomb_per_mole + const double var_i_K1__g_K1 = 0.43033148291193518 * sqrt(mp_extracellular_potassium_concentration_modifier->Calc(mParameters[5], var_chaste_interface__environment__time)) * mp_membrane_inward_rectifier_potassium_current_conductance_modifier->Calc(mParameters[11], var_chaste_interface__environment__time); // milliS_per_microF + const double var_i_Kr__g_Kr = 0.43033148291193518 * sqrt(mp_extracellular_potassium_concentration_modifier->Calc(mParameters[5], var_chaste_interface__environment__time)) * mp_membrane_rapid_delayed_rectifier_potassium_current_conductance_modifier->Calc(mParameters[12], var_chaste_interface__environment__time); // milliS_per_microF + const double var_i_NaCa__dNaCa_2 = pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, 3) * mp_extracellular_calcium_concentration_modifier->Calc(mParameters[4], var_chaste_interface__environment__time) + 1.5 * pow(mp_extracellular_sodium_concentration_modifier->Calc(mParameters[6], var_chaste_interface__environment__time), 3) * var_chaste_interface__Ca_i__Ca_i + pow(mp_extracellular_sodium_concentration_modifier->Calc(mParameters[6], var_chaste_interface__environment__time), 3) * (1 + var_chaste_interface__intracellular_ion_concentrations__Na_i / var_i_NaCa__km_Na_i_1) * var_i_NaCa__km_Ca_i; // millimolar4 + const double var_model_parameters__R = 8314; // joule_per_kilomole_kelvin + const double var_model_parameters__T = 310; // kelvin + const double var_equilibrium_potentials__E_K = var_model_parameters__R * var_model_parameters__T * log(mp_extracellular_potassium_concentration_modifier->Calc(mParameters[5], var_chaste_interface__environment__time) / var_chaste_interface__intracellular_ion_concentrations__K_i) / var_model_parameters__F; // millivolt + const double var_equilibrium_potentials__E_Ks = var_model_parameters__R * var_model_parameters__T * log((var_equilibrium_potentials__r_NaK * mp_extracellular_sodium_concentration_modifier->Calc(mParameters[6], var_chaste_interface__environment__time) + mp_extracellular_potassium_concentration_modifier->Calc(mParameters[5], var_chaste_interface__environment__time)) / (var_equilibrium_potentials__r_NaK * var_chaste_interface__intracellular_ion_concentrations__Na_i + var_chaste_interface__intracellular_ion_concentrations__K_i)) / var_model_parameters__F; // millivolt + const double var_equilibrium_potentials__E_Na = var_model_parameters__R * var_model_parameters__T * log(mp_extracellular_sodium_concentration_modifier->Calc(mParameters[6], var_chaste_interface__environment__time) / var_chaste_interface__intracellular_ion_concentrations__Na_i) / var_model_parameters__F; // millivolt + const double var_i_K1_xK1_gate__alpha_xK1 = 1.02 / (1 + exp(-14.1227775 + 0.23849999999999999 * var_chaste_interface__membrane__V - 0.23849999999999999 * var_equilibrium_potentials__E_K)); // dimensionless + const double var_i_K1_xK1_gate__beta_xK1 = (0.49124000000000001 * exp(0.43983232 + 0.080320000000000003 * var_chaste_interface__membrane__V - 0.080320000000000003 * var_equilibrium_potentials__E_K) + exp(-36.698642499999998 + 0.061749999999999999 * var_chaste_interface__membrane__V - 0.061749999999999999 * var_equilibrium_potentials__E_K)) / (1 + exp(-2.4444678999999998 + 0.51429999999999998 * var_equilibrium_potentials__E_K - 0.51429999999999998 * var_chaste_interface__membrane__V)); // dimensionless + const double var_i_K1_xK1_gate__xK1 = var_i_K1_xK1_gate__alpha_xK1 / (var_i_K1_xK1_gate__alpha_xK1 + var_i_K1_xK1_gate__beta_xK1); // dimensionless + const double var_i_K1__i_K1 = mp_i_K1__i_K1_modifier->Calc((0.0040000000000000001 + var_i_K1__g_K1 * var_i_K1_xK1_gate__xK1) * (-var_equilibrium_potentials__E_K + var_chaste_interface__membrane__V), var_chaste_interface__environment__time); // microA_per_microF + const double var_i_K1__i_K1_converted = HeartConfig::Instance()->GetCapacitance() * var_i_K1__i_K1; // uA_per_cm2 + const double var_i_Kr__i_Kr = mp_i_Kr__i_Kr_modifier->Calc((-var_equilibrium_potentials__E_K + var_chaste_interface__membrane__V) * var_i_Kr__g_Kr * var_i_Kr__rr_infinity * var_chaste_interface__i_Kr_xr_gate__xr, var_chaste_interface__environment__time); // microA_per_microF + const double var_i_Kr__i_Kr_converted = HeartConfig::Instance()->GetCapacitance() * var_i_Kr__i_Kr; // uA_per_cm2 + const double var_i_Ks__i_Ks = mp_i_Ks__i_Ks_modifier->Calc((-var_equilibrium_potentials__E_Ks + var_chaste_interface__membrane__V) * var_i_Ks__g_Ks * var_chaste_interface__i_Ks_xs1_gate__xs1 * var_chaste_interface__i_Ks_xs2_gate__xs2, var_chaste_interface__environment__time); // microA_per_microF + const double var_i_Ks__i_Ks_converted = HeartConfig::Instance()->GetCapacitance() * var_i_Ks__i_Ks; // uA_per_cm2 + const double var_i_Na__i_Na = mp_i_Na__i_Na_modifier->Calc(pow(var_chaste_interface__i_Na_m_gate__m, 3) * (-var_equilibrium_potentials__E_Na + var_chaste_interface__membrane__V) * (0.20000000000000001 * var_chaste_interface__i_Na_j_gate__j + 0.80000000000000004 * var_chaste_interface__i_Na_h_gate__h) * mp_membrane_fast_sodium_current_conductance_modifier->Calc(mParameters[8], var_chaste_interface__environment__time), var_chaste_interface__environment__time); // microA_per_microF + const double var_i_Na__i_Na_converted = HeartConfig::Instance()->GetCapacitance() * var_i_Na__i_Na; // uA_per_cm2 + const double var_i_NaCa__i_NaCa = mp_i_NaCa__i_NaCa_modifier->Calc((-1.5 * pow(mp_extracellular_sodium_concentration_modifier->Calc(mParameters[6], var_chaste_interface__environment__time), 3) * var_chaste_interface__Ca_i__Ca_i * exp(-0.65000000000000002 * var_chaste_interface__membrane__V * var_model_parameters__F / (var_model_parameters__R * var_model_parameters__T)) + pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, 3) * var_i_NaCa__X_NaCa * mp_membrane_sodium_calcium_exchanger_current_conductance_modifier->Calc(mParameters[14], var_chaste_interface__environment__time) * mp_extracellular_calcium_concentration_modifier->Calc(mParameters[4], var_chaste_interface__environment__time) * exp(0.34999999999999998 * var_chaste_interface__membrane__V * var_model_parameters__F / (var_model_parameters__R * var_model_parameters__T))) / ((1 + var_i_NaCa__k_sat * exp(-0.65000000000000002 * var_chaste_interface__membrane__V * var_model_parameters__F / (var_model_parameters__R * var_model_parameters__T))) * (1 + 0.44444444444444442 * pow(var_i_NaCa__km_Ca_act, 2) / pow(var_chaste_interface__Ca_i__Ca_i, 2)) * (var_i_NaCa__dNaCa_1 + var_i_NaCa__dNaCa_2)), var_chaste_interface__environment__time); // microA_per_microF + const double var_i_NaCa__i_NaCa_converted = HeartConfig::Instance()->GetCapacitance() * var_i_NaCa__i_NaCa; // uA_per_cm2 + const double var_i_to_1__i_to_1 = mp_i_to_1__i_to_1_modifier->Calc((-var_equilibrium_potentials__E_K + var_chaste_interface__membrane__V) * (0.20000000000000001 * var_chaste_interface__i_to_1_i2_gate__i2 + 0.80000000000000004 * var_chaste_interface__i_to_1_i_gate__i) * mp_membrane_transient_outward_current_conductance_modifier->Calc(mParameters[15], var_chaste_interface__environment__time) * var_chaste_interface__i_to_1_a_gate__a, var_chaste_interface__environment__time); // microA_per_microF + const double var_i_to_1__i_to_1_converted = HeartConfig::Instance()->GetCapacitance() * var_i_to_1__i_to_1; // uA_per_cm2 + const double var_model_parameters__gamma_Cai = 1; // dimensionless + const double var_model_parameters__gamma_Cao = 0.34100000000000003; // dimensionless + const double var_model_parameters__z_Ca = 2; // dimensionless + const double var_i_Ca_L__i_Ca_L_max = pow(var_model_parameters__F, 2) * pow(var_model_parameters__z_Ca, 2) * (-15 + var_chaste_interface__membrane__V) * (-mp_extracellular_calcium_concentration_modifier->Calc(mParameters[4], var_chaste_interface__environment__time) * var_model_parameters__gamma_Cao + var_chaste_interface__Ca_r__Ca_r * var_model_parameters__gamma_Cai * exp((-15 + var_chaste_interface__membrane__V) * var_model_parameters__F * var_model_parameters__z_Ca / (var_model_parameters__R * var_model_parameters__T))) * var_i_Ca_L__p_Ca / ((-1 + exp((-15 + var_chaste_interface__membrane__V) * var_model_parameters__F * var_model_parameters__z_Ca / (var_model_parameters__R * var_model_parameters__T))) * var_model_parameters__Cm * var_model_parameters__R * var_model_parameters__T); // microA_per_microF + const double var_i_Ca_L__i_Ca_L = mp_i_Ca_L__i_Ca_L_modifier->Calc(mp_membrane_L_type_calcium_current_conductance_modifier->Calc(mParameters[7], var_chaste_interface__environment__time) * var_i_Ca_L__i_Ca_L_max * var_chaste_interface__i_Ca_L_d_gate__d * var_chaste_interface__i_Ca_L_f2_gate__f2 * var_chaste_interface__i_Ca_L_f_Ca2_gate__f_Ca2 * var_chaste_interface__i_Ca_L_f_Ca_gate__f_Ca * var_chaste_interface__i_Ca_L_f_gate__f, var_chaste_interface__environment__time); // microA_per_microF + const double var_i_Ca_L__i_Ca_L_converted = HeartConfig::Instance()->GetCapacitance() * var_i_Ca_L__i_Ca_L; // uA_per_cm2 + const double var_i_Ca_L_f_Ca2_gate__tau_f_Ca2 = mp_membrane_L_type_calcium_current_fCa2_gate_tau_modifier->Calc(125 + 300 / (1 + exp(-4.375 - 25 * var_i_Ca_L__i_Ca_L)), var_chaste_interface__environment__time); // millisecond + const double var_q_rel__vg = 1 / (1 + exp(2.6000000000000001 + 0.20000000000000001 * mp_membrane_L_type_calcium_current_conductance_modifier->Calc(mParameters[7], var_chaste_interface__environment__time) * var_i_Ca_L__i_Ca_L_max)); // dimensionless + const double var_q_rel__g_rel = mp_SR_release_current_max_modifier->Calc(mParameters[1], var_chaste_interface__environment__time) * var_q_rel__vg; // per_millisecond + const double var_q_rel__q_rel = mp_SR_release_current_modifier->Calc((-var_chaste_interface__Ca_r__Ca_r + var_chaste_interface__Ca_JSR__Ca_JSR) * var_q_rel__g_rel * var_chaste_interface__q_rel_ri_gate__ri * var_chaste_interface__q_rel_ro_gate__ro, var_chaste_interface__environment__time); // millimolar_per_millisecond + + std::vector dqs(16); + dqs[0] = var_q_rel__q_rel; + dqs[1] = var_i_Ca_L__i_Ca_L_converted; + dqs[2] = var_i_Ca_L_f2_gate__tau_f2; + dqs[3] = var_i_Ca_L_f_Ca2_gate__tau_f_Ca2; + dqs[4] = var_i_Ca_L_f_Ca_gate__tau_f_Ca; + dqs[5] = var_i_Ca_L_f_gate__tau_f; + dqs[6] = var_i_Na__i_Na_converted; + dqs[7] = var_i_Na_h_gate__tau_h; + dqs[8] = var_i_Na_j_gate__tau_j; + dqs[9] = var_i_K1__i_K1_converted; + dqs[10] = var_i_Kr__i_Kr_converted; + dqs[11] = var_i_Ks__i_Ks_converted; + dqs[12] = var_i_NaCa__i_NaCa_converted; + dqs[13] = var_membrane__i_stim_converted; + dqs[14] = var_i_to_1__i_to_1_converted; + dqs[15] = var_chaste_interface__environment__time; + return dqs; + } + +template<> +void OdeSystemInformation::Initialise(void) +{ + this->mSystemName = "aslanidi_2009"; + this->mFreeVariableName = "time"; + this->mFreeVariableUnits = "millisecond"; + + // rY[0]: + this->mVariableNames.push_back("membrane_voltage"); + this->mVariableUnits.push_back("millivolt"); + this->mInitialConditions.push_back(-83.43812846286808); + + // rY[1]: + this->mVariableNames.push_back("cytosolic_calcium_concentration"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(0.00022355433459434943); + + // rY[2]: + this->mVariableNames.push_back("membrane_fast_sodium_current_m_gate"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.002003390432234504); + + // rY[3]: + this->mVariableNames.push_back("membrane_fast_sodium_current_h_gate"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.9786390933308567); + + // rY[4]: + this->mVariableNames.push_back("membrane_fast_sodium_current_j_gate"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.09866447258167589); + + // rY[5]: + this->mVariableNames.push_back("i_Na_L_m_L_gate__m_L"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.002003390432234504); + + // rY[6]: + this->mVariableNames.push_back("i_Na_L_h_L_gate__h_L"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.8946968372659203); + + // rY[7]: + this->mVariableNames.push_back("membrane_L_type_calcium_current_d_gate"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(2.322223865147363e-06); + + // rY[8]: + this->mVariableNames.push_back("membrane_L_type_calcium_current_f_gate"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.9985607329462358); + + // rY[9]: + this->mVariableNames.push_back("membrane_L_type_calcium_current_f2_gate"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.8173435436674658); + + // rY[10]: + this->mVariableNames.push_back("membrane_L_type_calcium_current_fCa_gate"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.9610551285529658); + + // rY[11]: + this->mVariableNames.push_back("membrane_L_type_calcium_current_fCa2_gate"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.868690796671854); + + // rY[12]: + this->mVariableNames.push_back("i_Ca_T_b_gate__b"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.0002563937630984438); + + // rY[13]: + this->mVariableNames.push_back("i_Ca_T_g_gate__g"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.9720432601848331); + + // rY[14]: + this->mVariableNames.push_back("i_to_1_a_gate__a"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.0004238729429342389); + + // rY[15]: + this->mVariableNames.push_back("i_to_1_i_gate__i"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.9990935802459496); + + // rY[16]: + this->mVariableNames.push_back("i_to_1_i2_gate__i2"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.9777368439681764); + + // rY[17]: + this->mVariableNames.push_back("i_Kr_xr_gate__xr"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.07084939408222911); + + // rY[18]: + this->mVariableNames.push_back("i_Ks_xs1_gate__xs1"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.0011737654433043125); + + // rY[19]: + this->mVariableNames.push_back("i_Ks_xs2_gate__xs2"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.001179442867470093); + + // rY[20]: + this->mVariableNames.push_back("i_to_2_a_gate__a"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.0014909437525000811); + + // rY[21]: + this->mVariableNames.push_back("cytosolic_sodium_concentration"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(9.927155552932733); + + // rY[22]: + this->mVariableNames.push_back("intracellular_ion_concentrations__Cl_i"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(18.904682470140408); + + // rY[23]: + this->mVariableNames.push_back("cytosolic_potassium_concentration"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(141.9670801746057); + + // rY[24]: + this->mVariableNames.push_back("Ca_MK_act__Ca_MK_trap"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(8.789168284782809e-06); + + // rY[25]: + this->mVariableNames.push_back("Ca_NSR__Ca_NSR"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(1.2132524695849454); + + // rY[26]: + this->mVariableNames.push_back("JSR_calcium_concentration"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(1.1433050636518596); + + // rY[27]: + this->mVariableNames.push_back("dyadic_space_calcium_concentration"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(0.00022418117117903934); + + // rY[28]: + this->mVariableNames.push_back("q_rel_ri_gate__ri"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.7802870066567904); + + // rY[29]: + this->mVariableNames.push_back("q_rel_ro_gate__ro"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(1.2785734760674763e-09); + + // mParameters[0]: + this->mParameterNames.push_back("SR_leak_current_max"); + this->mParameterUnits.push_back("millimolar_per_millisecond"); + + // mParameters[1]: + this->mParameterNames.push_back("SR_release_current_max"); + this->mParameterUnits.push_back("per_millisecond"); + + // mParameters[2]: + this->mParameterNames.push_back("SR_uptake_current_max"); + this->mParameterUnits.push_back("millimolar_per_millisecond"); + + // mParameters[3]: + this->mParameterNames.push_back("concentration_clamp_onoff"); + this->mParameterUnits.push_back("dimensionless"); + + // mParameters[4]: + this->mParameterNames.push_back("extracellular_calcium_concentration"); + this->mParameterUnits.push_back("millimolar"); + + // mParameters[5]: + this->mParameterNames.push_back("extracellular_potassium_concentration"); + this->mParameterUnits.push_back("millimolar"); + + // mParameters[6]: + this->mParameterNames.push_back("extracellular_sodium_concentration"); + this->mParameterUnits.push_back("millimolar"); + + // mParameters[7]: + this->mParameterNames.push_back("membrane_L_type_calcium_current_conductance"); + this->mParameterUnits.push_back("dimensionless"); + + // mParameters[8]: + this->mParameterNames.push_back("membrane_fast_sodium_current_conductance"); + this->mParameterUnits.push_back("milliS_per_microF"); + + // mParameters[9]: + this->mParameterNames.push_back("membrane_fast_sodium_current_reduced_inactivation"); + this->mParameterUnits.push_back("dimensionless"); + + // mParameters[10]: + this->mParameterNames.push_back("membrane_fast_sodium_current_shift_inactivation"); + this->mParameterUnits.push_back("millivolt"); + + // mParameters[11]: + this->mParameterNames.push_back("membrane_inward_rectifier_potassium_current_conductance"); + this->mParameterUnits.push_back("milliS_per_microF"); + + // mParameters[12]: + this->mParameterNames.push_back("membrane_rapid_delayed_rectifier_potassium_current_conductance"); + this->mParameterUnits.push_back("milliS_per_microF"); + + // mParameters[13]: + this->mParameterNames.push_back("membrane_slow_delayed_rectifier_potassium_current_conductance"); + this->mParameterUnits.push_back("milliS_per_microF"); + + // mParameters[14]: + this->mParameterNames.push_back("membrane_sodium_calcium_exchanger_current_conductance"); + this->mParameterUnits.push_back("microA_per_microF"); + + // mParameters[15]: + this->mParameterNames.push_back("membrane_transient_outward_current_conductance"); + this->mParameterUnits.push_back("milliS_per_microF"); + + // Derived Quantity index [0]: + this->mDerivedQuantityNames.push_back("SR_release_current"); + this->mDerivedQuantityUnits.push_back("millimolar_per_millisecond"); + + // Derived Quantity index [1]: + this->mDerivedQuantityNames.push_back("membrane_L_type_calcium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [2]: + this->mDerivedQuantityNames.push_back("membrane_L_type_calcium_current_f2_gate_tau"); + this->mDerivedQuantityUnits.push_back("millisecond"); + + // Derived Quantity index [3]: + this->mDerivedQuantityNames.push_back("membrane_L_type_calcium_current_fCa2_gate_tau"); + this->mDerivedQuantityUnits.push_back("millisecond"); + + // Derived Quantity index [4]: + this->mDerivedQuantityNames.push_back("membrane_L_type_calcium_current_fCa_gate_tau"); + this->mDerivedQuantityUnits.push_back("millisecond"); + + // Derived Quantity index [5]: + this->mDerivedQuantityNames.push_back("membrane_L_type_calcium_current_f_gate_tau"); + this->mDerivedQuantityUnits.push_back("millisecond"); + + // Derived Quantity index [6]: + this->mDerivedQuantityNames.push_back("membrane_fast_sodium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [7]: + this->mDerivedQuantityNames.push_back("membrane_fast_sodium_current_h_gate_tau"); + this->mDerivedQuantityUnits.push_back("millisecond"); + + // Derived Quantity index [8]: + this->mDerivedQuantityNames.push_back("membrane_fast_sodium_current_j_gate_tau"); + this->mDerivedQuantityUnits.push_back("millisecond"); + + // Derived Quantity index [9]: + this->mDerivedQuantityNames.push_back("membrane_inward_rectifier_potassium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [10]: + this->mDerivedQuantityNames.push_back("membrane_rapid_delayed_rectifier_potassium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [11]: + this->mDerivedQuantityNames.push_back("membrane_slow_delayed_rectifier_potassium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [12]: + this->mDerivedQuantityNames.push_back("membrane_sodium_calcium_exchanger_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [13]: + this->mDerivedQuantityNames.push_back("membrane_stimulus_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [14]: + this->mDerivedQuantityNames.push_back("membrane_transient_outward_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [15]: + this->mDerivedQuantityNames.push_back("time"); + this->mDerivedQuantityUnits.push_back("millisecond"); + + this->mInitialised = true; +} + +// Serialization for Boost >= 1.36 +#include "SerializationExportWrapperForCpp.hpp" +CHASTE_CLASS_EXPORT(Cellaslanidi_Purkinje_model_2009FromCellMLOpt) + diff --git a/chaste_codegen/tests/numerical/baseline/Opt/non_dynamic_aslanidi_Purkinje_model_2009.hpp b/chaste_codegen/tests/numerical/baseline/Opt/non_dynamic_aslanidi_Purkinje_model_2009.hpp new file mode 100644 index 00000000..7c38bf4d --- /dev/null +++ b/chaste_codegen/tests/numerical/baseline/Opt/non_dynamic_aslanidi_Purkinje_model_2009.hpp @@ -0,0 +1,134 @@ +#ifndef CELLASLANIDI_PURKINJE_MODEL_2009FROMCELLMLOPT_HPP_ +#define CELLASLANIDI_PURKINJE_MODEL_2009FROMCELLMLOPT_HPP_ + +//! @file +//! +//! This source file was generated from CellML by chaste_codegen version (version omitted as unimportant) +//! +//! Model: aslanidi_2009 +//! +//! Processed by chaste_codegen: https://github.com/ModellingWebLab/chaste-codegen +//! (translator: chaste_codegen, model type: NormalOpt) +//! on (date omitted as unimportant) +//! +//! + +#include "ChasteSerialization.hpp" +#include +#include "AbstractCardiacCellWithModifiers.hpp" +#include "AbstractModifier.hpp" +#include "AbstractStimulusFunction.hpp" +#include "AbstractCardiacCell.hpp" + +class Cellaslanidi_Purkinje_model_2009FromCellMLOpt : public AbstractCardiacCellWithModifiers +{ + friend class boost::serialization::access; + template + void serialize(Archive & archive, const unsigned int version) + { + archive & boost::serialization::base_object >(*this); + + // Despite this class having modifier member variables, they are all added to the + // abstract class by the constructor, and archived via that, instead of here. + } + + // + // Settable parameters and readable variables + // + boost::shared_ptr mp_JSR_calcium_concentration_modifier; + boost::shared_ptr mp_SR_leak_current_max_modifier; + boost::shared_ptr mp_SR_release_current_modifier; + boost::shared_ptr mp_SR_release_current_max_modifier; + boost::shared_ptr mp_SR_uptake_current_max_modifier; + boost::shared_ptr mp_concentration_clamp_onoff_modifier; + boost::shared_ptr mp_cytosolic_calcium_concentration_modifier; + boost::shared_ptr mp_cytosolic_potassium_concentration_modifier; + boost::shared_ptr mp_cytosolic_sodium_concentration_modifier; + boost::shared_ptr mp_dyadic_space_calcium_concentration_modifier; + boost::shared_ptr mp_extracellular_calcium_concentration_modifier; + boost::shared_ptr mp_extracellular_potassium_concentration_modifier; + boost::shared_ptr mp_extracellular_sodium_concentration_modifier; + boost::shared_ptr mp_i_Ca_L__i_Ca_L_modifier; + boost::shared_ptr mp_membrane_L_type_calcium_current_conductance_modifier; + boost::shared_ptr mp_membrane_L_type_calcium_current_d_gate_modifier; + boost::shared_ptr mp_membrane_L_type_calcium_current_f2_gate_modifier; + boost::shared_ptr mp_membrane_L_type_calcium_current_f2_gate_tau_modifier; + boost::shared_ptr mp_membrane_L_type_calcium_current_fCa2_gate_modifier; + boost::shared_ptr mp_membrane_L_type_calcium_current_fCa2_gate_tau_modifier; + boost::shared_ptr mp_membrane_L_type_calcium_current_fCa_gate_modifier; + boost::shared_ptr mp_membrane_L_type_calcium_current_fCa_gate_tau_modifier; + boost::shared_ptr mp_membrane_L_type_calcium_current_f_gate_modifier; + boost::shared_ptr mp_membrane_L_type_calcium_current_f_gate_tau_modifier; + boost::shared_ptr mp_i_Na__i_Na_modifier; + boost::shared_ptr mp_membrane_fast_sodium_current_conductance_modifier; + boost::shared_ptr mp_membrane_fast_sodium_current_h_gate_modifier; + boost::shared_ptr mp_membrane_fast_sodium_current_h_gate_tau_modifier; + boost::shared_ptr mp_membrane_fast_sodium_current_j_gate_modifier; + boost::shared_ptr mp_membrane_fast_sodium_current_j_gate_tau_modifier; + boost::shared_ptr mp_membrane_fast_sodium_current_m_gate_modifier; + boost::shared_ptr mp_membrane_fast_sodium_current_reduced_inactivation_modifier; + boost::shared_ptr mp_membrane_fast_sodium_current_shift_inactivation_modifier; + boost::shared_ptr mp_i_K1__i_K1_modifier; + boost::shared_ptr mp_membrane_inward_rectifier_potassium_current_conductance_modifier; + boost::shared_ptr mp_i_Kr__i_Kr_modifier; + boost::shared_ptr mp_membrane_rapid_delayed_rectifier_potassium_current_conductance_modifier; + boost::shared_ptr mp_i_Ks__i_Ks_modifier; + boost::shared_ptr mp_membrane_slow_delayed_rectifier_potassium_current_conductance_modifier; + boost::shared_ptr mp_i_NaCa__i_NaCa_modifier; + boost::shared_ptr mp_membrane_sodium_calcium_exchanger_current_conductance_modifier; + boost::shared_ptr mp_i_to_1__i_to_1_modifier; + boost::shared_ptr mp_membrane_transient_outward_current_conductance_modifier; + boost::shared_ptr mp_membrane_voltage_modifier; + + +private: +const bool is_concentration[30] = {false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, false, true, false, false, true, true, false, false}; +const bool is_probability[30] = {false, false, true, true, true, false, false, true, true, true, true, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false}; +public: + + boost::shared_ptr UseCellMLDefaultStimulus(); + double GetIntracellularCalciumConcentration(); + Cellaslanidi_Purkinje_model_2009FromCellMLOpt(boost::shared_ptr pSolver, boost::shared_ptr pIntracellularStimulus); + ~Cellaslanidi_Purkinje_model_2009FromCellMLOpt(); + void VerifyStateVariables(); + AbstractLookupTableCollection* GetLookupTableCollection(); + double GetIIonic(const std::vector* pStateVariables=NULL); + void EvaluateYDerivatives(double var_chaste_interface__environment__time, const std::vector& rY, std::vector& rDY); + + std::vector ComputeDerivedQuantities(double var_chaste_interface__environment__time, const std::vector & rY); +}; + +// Needs to be included last +#include "SerializationExportWrapper.hpp" +CHASTE_CLASS_EXPORT(Cellaslanidi_Purkinje_model_2009FromCellMLOpt) + +namespace boost +{ + namespace serialization + { + template + inline void save_construct_data( + Archive & ar, const Cellaslanidi_Purkinje_model_2009FromCellMLOpt * t, const unsigned int fileVersion) + { + const boost::shared_ptr p_solver = t->GetSolver(); + const boost::shared_ptr p_stimulus = t->GetStimulusFunction(); + ar << p_solver; + ar << p_stimulus; + } + + template + inline void load_construct_data( + Archive & ar, Cellaslanidi_Purkinje_model_2009FromCellMLOpt * t, const unsigned int fileVersion) + { + boost::shared_ptr p_solver; + boost::shared_ptr p_stimulus; + ar >> p_solver; + ar >> p_stimulus; + ::new(t)Cellaslanidi_Purkinje_model_2009FromCellMLOpt(p_solver, p_stimulus); + } + + } + +} + +#endif // CELLASLANIDI_PURKINJE_MODEL_2009FROMCELLMLOPT_HPP_ \ No newline at end of file diff --git a/chaste_codegen/tests/numerical/baseline/Opt/test_luo_rudy_1991_with_range_cap_dimensionless.cpp b/chaste_codegen/tests/numerical/baseline/Opt/test_luo_rudy_1991_with_range_cap_dimensionless.cpp new file mode 100644 index 00000000..b4bf7b0c --- /dev/null +++ b/chaste_codegen/tests/numerical/baseline/Opt/test_luo_rudy_1991_with_range_cap_dimensionless.cpp @@ -0,0 +1,805 @@ +//! @file +//! +//! This source file was generated from CellML by chaste_codegen version (version omitted as unimportant) +//! +//! Model: luo_rudy_1991 +//! +//! Processed by chaste_codegen: https://github.com/ModellingWebLab/chaste-codegen +//! (translator: chaste_codegen, model type: NormalOpt) +//! on (date omitted as unimportant) +//! +//! + +#include "test_luo_rudy_1991_with_range_cap_dimensionless.hpp" +#include +#include +#include +#include +#include "Exception.hpp" +#include "OdeSystemInformation.hpp" +#include "RegularStimulus.hpp" +#include "HeartConfig.hpp" +#include "IsNan.hpp" +#include "MathsCustomFunctions.hpp" + + + +class Celltest_luo_rudy_1991_with_range_cap_dimensionlessFromCellMLOpt_LookupTables : public AbstractLookupTableCollection +{ +public: + static Celltest_luo_rudy_1991_with_range_cap_dimensionlessFromCellMLOpt_LookupTables* Instance() + { + if (mpInstance.get() == NULL) + { + mpInstance.reset(new Celltest_luo_rudy_1991_with_range_cap_dimensionlessFromCellMLOpt_LookupTables); + } + return mpInstance.get(); + } + + void FreeMemory() + { + + if (_lookup_table_0) + { + delete[] _lookup_table_0; + _lookup_table_0 = NULL; + } + + mNeedsRegeneration.assign(mNeedsRegeneration.size(), true); + } + + // Row lookup methods + // using linear-interpolation + + double* _lookup_0_row(unsigned i, double _factor_) + { + for (unsigned j=0; j<16; j++) + { + const double y1 = _lookup_table_0[i][j]; + const double y2 = _lookup_table_0[i+1][j]; + _lookup_table_0_row[j] = y1 + (y2-y1)*_factor_; + } + return _lookup_table_0_row; + } + + + const double * IndexTable0(double var_chaste_interface__membrane__V) + { + const double _offset_0 = var_chaste_interface__membrane__V - mTableMins[0]; + const double _offset_0_over_table_step = _offset_0 * mTableStepInverses[0]; + const unsigned _table_index_0 = (unsigned)(_offset_0_over_table_step); + const double _factor_0 = _offset_0_over_table_step - _table_index_0; + const double* const _lt_0_row = Celltest_luo_rudy_1991_with_range_cap_dimensionlessFromCellMLOpt_LookupTables::Instance()->_lookup_0_row(_table_index_0, _factor_0); + return _lt_0_row; + } + + +// LCOV_EXCL_START + bool CheckIndex0(double& var_chaste_interface__membrane__V) + { + bool _oob_0 = false; + if (var_chaste_interface__membrane__V>mTableMaxs[0] || var_chaste_interface__membrane__V -100) && (3.0800000000000001 + 0.040000000000000001 * var_chaste_interface__membrane__V >= -9.9999999999999995e-8) && (3.0800000000000001 + 0.040000000000000001 * var_chaste_interface__membrane__V <= 9.9999999999999995e-8)) ? ((0.28823920000000003 + 0.0022696000000000001 * var_chaste_interface__membrane__V) / exp(1.4000000000000001 + 0.040000000000000001 * var_chaste_interface__membrane__V)) : ((var_chaste_interface__membrane__V > -100) ? (0.11348000000000001 * (-1 + exp(3.0800000000000001 + 0.040000000000000001 * var_chaste_interface__membrane__V)) / ((3.0800000000000001 + 0.040000000000000001 * var_chaste_interface__membrane__V) * exp(1.4000000000000001 + 0.040000000000000001 * var_chaste_interface__membrane__V))) : (1))); + }; + const double var_chaste_interface__membrane__V = mTableMins[0] + i*mTableSteps[0]; + double val = f(var_chaste_interface__membrane__V); + //Expressions which are part of a piecewise could be inf / nan, this is generally accptable, due to the piecewise, however occasionally interpolation of the lookup table from a nan/inf version can give problems. + //To avoid this values stored in the table are intrpolated. Occurances of this to at most 2 per expression. + if (!std::isfinite(val) && _lookup_table_0_num_misshit_piecewise[0] < 2){ + double left = f(var_chaste_interface__membrane__V - mTableSteps[0]); + double right = f(var_chaste_interface__membrane__V + mTableSteps[0]); + val = (left + right) / 2.0; + // count and limit number of misshits + _lookup_table_0_num_misshit_piecewise[0] +=1; + } + else if (!std::isfinite(val) && _lookup_table_0_num_misshit_piecewise[0] >= 2){ + EXCEPTION("Lookup table 0 at ["<= -9.9999999999999995e-8) && (4.7130000000000001 + 0.10000000000000001 * var_chaste_interface__membrane__V <= 9.9999999999999995e-8)) ? (10.7408 + 0.16 * var_chaste_interface__membrane__V) : (-3.1999999999999997 * (4.7130000000000001 + 0.10000000000000001 * var_chaste_interface__membrane__V) / (-1 + exp(-4.7130000000000001 - 0.10000000000000001 * var_chaste_interface__membrane__V)))); + }; + const double var_chaste_interface__membrane__V = mTableMins[0] + i*mTableSteps[0]; + double val = f(var_chaste_interface__membrane__V); + //Expressions which are part of a piecewise could be inf / nan, this is generally accptable, due to the piecewise, however occasionally interpolation of the lookup table from a nan/inf version can give problems. + //To avoid this values stored in the table are intrpolated. Occurances of this to at most 2 per expression. + if (!std::isfinite(val) && _lookup_table_0_num_misshit_piecewise[2] < 2){ + double left = f(var_chaste_interface__membrane__V - mTableSteps[0]); + double right = f(var_chaste_interface__membrane__V + mTableSteps[0]); + val = (left + right) / 2.0; + // count and limit number of misshits + _lookup_table_0_num_misshit_piecewise[2] +=1; + } + else if (!std::isfinite(val) && _lookup_table_0_num_misshit_piecewise[2] >= 2){ + EXCEPTION("Lookup table 2 at ["< mpInstance; + + // Row lookup methods memory + double _lookup_table_0_row[16]; + + // Lookup tables + double (*_lookup_table_0)[16]; + int _lookup_table_0_num_misshit_piecewise[16] = {0}; + +}; + +std::shared_ptr Celltest_luo_rudy_1991_with_range_cap_dimensionlessFromCellMLOpt_LookupTables::mpInstance; + + + boost::shared_ptr Celltest_luo_rudy_1991_with_range_cap_dimensionlessFromCellMLOpt::UseCellMLDefaultStimulus() + { + // Use the default stimulus specified by CellML metadata + const double var_chaste_interface__membrane__stim_amplitude = -25.5; // microA_per_cm2 + const double var_chaste_interface__membrane__stim_duration = 2; // millisecond + const double var_chaste_interface__membrane__stim_end = 100000000000.0; // millisecond + const double var_chaste_interface__membrane__stim_period = 1000; // millisecond + const double var_chaste_interface__membrane__stim_start = 100; // millisecond + boost::shared_ptr p_cellml_stim(new RegularStimulus( + -fabs(var_chaste_interface__membrane__stim_amplitude), + var_chaste_interface__membrane__stim_duration, + var_chaste_interface__membrane__stim_period, + var_chaste_interface__membrane__stim_start, var_chaste_interface__membrane__stim_end + )); + mpIntracellularStimulus = p_cellml_stim; + return p_cellml_stim; + } + double Celltest_luo_rudy_1991_with_range_cap_dimensionlessFromCellMLOpt::GetIntracellularCalciumConcentration() + { + return mStateVariables[7]; + } + Celltest_luo_rudy_1991_with_range_cap_dimensionlessFromCellMLOpt::Celltest_luo_rudy_1991_with_range_cap_dimensionlessFromCellMLOpt(boost::shared_ptr pSolver, boost::shared_ptr pIntracellularStimulus) + : AbstractCardiacCell( + pSolver, + 8, + 0, + pIntracellularStimulus) + { + // Time units: millisecond + // + this->mpSystemInfo = OdeSystemInformation::Instance(); + Init(); + + // We have a default stimulus specified in the CellML file metadata + this->mHasDefaultStimulusFromCellML = true; + + this->mParameters[0] = 145; // (var_ionic_concentrations__Ki) [millimolar] + this->mParameters[1] = 18; // (var_ionic_concentrations__Nai) [millimolar] + this->mParameters[2] = 5.4000000000000004; // (var_ionic_concentrations__Ko) [millimolar] + this->mParameters[3] = 140; // (var_ionic_concentrations__Nao) [millimolar] + this->mParameters[4] = 0.089999999999999997; // (var_slow_inward_current__P_si) [milliS_per_cm2] + this->mParameters[5] = 1; // (var_membrane__C) [dimensionless] + this->mParameters[6] = 0.28199999999999997; // (var_time_dependent_potassium_current__g_K_max) [milliS_per_cm2] + this->mParameters[7] = 23; // (var_fast_sodium_current__g_Na) [milliS_per_cm2] + this->mParameters[8] = 0; // (var_fast_sodium_current__perc_reduced_inact_for_IpNa) [dimensionless] + this->mParameters[9] = 0; // (var_fast_sodium_current__shift_INa_inact) [millivolt] + this->mParameters[10] = 0.60470000000000002; // (var_time_independent_potassium_current__g_K1_max) [milliS_per_cm2] + this->mParameters[11] = 0.039210000000000002; // (var_background_current__g_b) [milliS_per_cm2] + this->mParameters[12] = 0.0183; // (var_plateau_potassium_current__g_Kp) [milliS_per_cm2] + } + + Celltest_luo_rudy_1991_with_range_cap_dimensionlessFromCellMLOpt::~Celltest_luo_rudy_1991_with_range_cap_dimensionlessFromCellMLOpt() + { + } + + AbstractLookupTableCollection* Celltest_luo_rudy_1991_with_range_cap_dimensionlessFromCellMLOpt::GetLookupTableCollection() + { + return Celltest_luo_rudy_1991_with_range_cap_dimensionlessFromCellMLOpt_LookupTables::Instance(); + } + + void Celltest_luo_rudy_1991_with_range_cap_dimensionlessFromCellMLOpt::VerifyStateVariables() + { + std::vector& rY = rGetStateVariables();double var_chaste_interface__fast_sodium_current_m_gate__m = rY[1]; + // Units: dimensionless; Initial value: 0.00187018 + + if (var_chaste_interface__fast_sodium_current_m_gate__m < 0.0 || var_chaste_interface__fast_sodium_current_m_gate__m > 1.0) + { + EXCEPTION(DumpState("State variable membrane_fast_sodium_current_m_gate has gone out of range. Check numerical parameters, for example time and space stepsizes, and/or solver tolerances")); + } + + std::string error_message = ""; + + for (unsigned i=0; i < 8; i++) + { + if(std::isnan(rY[i])) + { + error_message += "State variable " + this->rGetStateVariableNames()[i] + " is not a number\n"; + } + if(std::isinf(rY[i])) + { + error_message += "State variable " + this->rGetStateVariableNames()[i] + " has become INFINITE\n"; + } + if(this->is_concentration[i] && rY[i] < 0) + { + error_message += "Concentration " + this->rGetStateVariableNames()[i] + " below 0\n"; + } + if(this->is_probability[i] && rY[i] < 0) + { + error_message += "Probability " + this->rGetStateVariableNames()[i] + " below 0\n"; + } + if(this->is_probability[i] && rY[i] > 1) + { + error_message += "Probability " + this->rGetStateVariableNames()[i] + " above 1\n"; + } + } + if (error_message != ""){ + EXCEPTION(DumpState(error_message)); + } + } + + double Celltest_luo_rudy_1991_with_range_cap_dimensionlessFromCellMLOpt::GetIIonic(const std::vector* pStateVariables) + { + // For state variable interpolation (SVI) we read in interpolated state variables, + // otherwise for ionic current interpolation (ICI) we use the state variables of this model (node). + if (!pStateVariables) pStateVariables = &rGetStateVariables(); + const std::vector& rY = *pStateVariables; + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -83.853 + double var_chaste_interface__fast_sodium_current_m_gate__m = rY[1]; + // Units: dimensionless; Initial value: 0.00187018 + double var_chaste_interface__fast_sodium_current_h_gate__h = rY[2]; + // Units: dimensionless; Initial value: 0.9804713 + double var_chaste_interface__fast_sodium_current_j_gate__j = rY[3]; + // Units: dimensionless; Initial value: 0.98767124 + double var_chaste_interface__slow_inward_current_d_gate__d = rY[4]; + // Units: dimensionless; Initial value: 0.00316354 + double var_chaste_interface__slow_inward_current_f_gate__f = rY[5]; + // Units: dimensionless; Initial value: 0.99427859 + double var_chaste_interface__time_dependent_potassium_current_X_gate__X = rY[6]; + // Units: dimensionless; Initial value: 0.16647703 + double var_chaste_interface__intracellular_calcium_concentration__Cai = rY[7]; + // Units: dimensionless; Initial value: 0.0002 + + // Lookup table indexing + const bool _oob_0 = Celltest_luo_rudy_1991_with_range_cap_dimensionlessFromCellMLOpt_LookupTables::Instance()->CheckIndex0(var_chaste_interface__membrane__V); +// LCOV_EXCL_START + if (_oob_0) + EXCEPTION(DumpState("membrane_voltage outside lookup table range", rY)); +// LCOV_EXCL_STOP + const double* const _lt_0_row = Celltest_luo_rudy_1991_with_range_cap_dimensionlessFromCellMLOpt_LookupTables::Instance()->IndexTable0(var_chaste_interface__membrane__V); + + const double var_background_current__i_b = (59.869999999999997 + var_chaste_interface__membrane__V) * mParameters[11]; // microA_per_cm2 + const double var_fast_sodium_current__i_Na = pow(var_chaste_interface__fast_sodium_current_m_gate__m, 3) * (-26.712449447891164 * log(mParameters[3] / mParameters[1]) + var_chaste_interface__membrane__V) * mParameters[7] * var_chaste_interface__fast_sodium_current_h_gate__h * var_chaste_interface__fast_sodium_current_j_gate__j; // microA_per_cm2 + const double var_slow_inward_current__i_si = (-7.7000000000000002 + 13.028700000000001 * log(var_chaste_interface__intracellular_calcium_concentration__Cai) + var_chaste_interface__membrane__V) * mParameters[4] * var_chaste_interface__slow_inward_current_d_gate__d * var_chaste_interface__slow_inward_current_f_gate__f; // microA_per_cm2 + const double var_time_dependent_potassium_current__i_K = 0.43033148291193518 * sqrt(mParameters[2]) * (-26.712449447891164 * log((0.018329999999999999 * mParameters[3] + mParameters[2]) / (0.018329999999999999 * mParameters[1] + mParameters[0])) + var_chaste_interface__membrane__V) * _lt_0_row[0] * mParameters[6] * var_chaste_interface__time_dependent_potassium_current_X_gate__X; // microA_per_cm2 + const double var_time_independent_potassium_current__E_K1 = 26.712449447891164 * log(mParameters[2] / mParameters[0]); // millivolt + const double var_plateau_potassium_current__i_Kp = (-var_time_independent_potassium_current__E_K1 + var_chaste_interface__membrane__V) * mParameters[12] / (_lt_0_row[1]); // microA_per_cm2 + const double var_time_independent_potassium_current__i_K1 = 0.4389381125701739 * sqrt(mParameters[2]) * (-var_time_independent_potassium_current__E_K1 + var_chaste_interface__membrane__V) * mParameters[10] / ((1 + exp(-14.1227775 + 0.23849999999999999 * var_chaste_interface__membrane__V - 0.23849999999999999 * var_time_independent_potassium_current__E_K1)) * (1.02 / (1 + exp(-14.1227775 + 0.23849999999999999 * var_chaste_interface__membrane__V - 0.23849999999999999 * var_time_independent_potassium_current__E_K1)) + (exp(-36.698642499999998 + 0.061749999999999999 * var_chaste_interface__membrane__V - 0.061749999999999999 * var_time_independent_potassium_current__E_K1) + 0.49124000000000001 * exp(0.43983232 + 0.080320000000000003 * var_chaste_interface__membrane__V - 0.080320000000000003 * var_time_independent_potassium_current__E_K1)) / (1 + exp(-2.4444678999999998 + 0.51429999999999998 * var_time_independent_potassium_current__E_K1 - 0.51429999999999998 * var_chaste_interface__membrane__V)))); // microA_per_cm2 + const double var_chaste_interface__i_ionic = var_background_current__i_b + var_fast_sodium_current__i_Na + var_plateau_potassium_current__i_Kp + var_slow_inward_current__i_si + var_time_dependent_potassium_current__i_K + var_time_independent_potassium_current__i_K1; // uA_per_cm2 + + const double i_ionic = var_chaste_interface__i_ionic; + EXCEPT_IF_NOT(!std::isnan(i_ionic)); + return i_ionic; + } + + void Celltest_luo_rudy_1991_with_range_cap_dimensionlessFromCellMLOpt::EvaluateYDerivatives(double var_chaste_interface__environment__time, const std::vector& rY, std::vector& rDY) + { + // Inputs: + // Time units: millisecond + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -83.853 + double var_chaste_interface__fast_sodium_current_m_gate__m = rY[1]; + // Units: dimensionless; Initial value: 0.00187018 + double var_chaste_interface__fast_sodium_current_h_gate__h = rY[2]; + // Units: dimensionless; Initial value: 0.9804713 + double var_chaste_interface__fast_sodium_current_j_gate__j = rY[3]; + // Units: dimensionless; Initial value: 0.98767124 + double var_chaste_interface__slow_inward_current_d_gate__d = rY[4]; + // Units: dimensionless; Initial value: 0.00316354 + double var_chaste_interface__slow_inward_current_f_gate__f = rY[5]; + // Units: dimensionless; Initial value: 0.99427859 + double var_chaste_interface__time_dependent_potassium_current_X_gate__X = rY[6]; + // Units: dimensionless; Initial value: 0.16647703 + double var_chaste_interface__intracellular_calcium_concentration__Cai = rY[7]; + // Units: dimensionless; Initial value: 0.0002 + + // Lookup table indexing + const bool _oob_0 = Celltest_luo_rudy_1991_with_range_cap_dimensionlessFromCellMLOpt_LookupTables::Instance()->CheckIndex0(var_chaste_interface__membrane__V); +// LCOV_EXCL_START + if (_oob_0) + EXCEPTION(DumpState("membrane_voltage outside lookup table range", rY , var_chaste_interface__environment__time)); +// LCOV_EXCL_STOP + const double* const _lt_0_row = Celltest_luo_rudy_1991_with_range_cap_dimensionlessFromCellMLOpt_LookupTables::Instance()->IndexTable0(var_chaste_interface__membrane__V); + + // Mathematics + double d_dt_chaste_interface_var_membrane__V; + const double var_fast_sodium_current_h_gate__alpha_h = ((var_chaste_interface__membrane__V < -40) ? (0.13500000000000001 * exp(-11.764705882352942 + 0.14705882352941177 * mParameters[9] - 0.14705882352941177 * var_chaste_interface__membrane__V)) : (0)); // per_millisecond + const double var_fast_sodium_current_h_gate__beta_h = ((var_chaste_interface__membrane__V < -40) ? (310000 * exp(0.34999999999999998 * var_chaste_interface__membrane__V - 0.34999999999999998 * mParameters[9]) + 3.5600000000000001 * exp(0.079000000000000001 * var_chaste_interface__membrane__V - 0.079000000000000001 * mParameters[9])) : (7.6923076923076916 / (1 + exp(-0.96036036036036043 + 0.0900900900900901 * mParameters[9] - 0.0900900900900901 * var_chaste_interface__membrane__V)))); // per_millisecond + const double d_dt_chaste_interface_var_fast_sodium_current_h_gate__h = (var_fast_sodium_current_h_gate__alpha_h + var_fast_sodium_current_h_gate__beta_h) * (-var_chaste_interface__fast_sodium_current_h_gate__h + 0.01 * mParameters[8] + (1 - 0.01 * mParameters[8]) * var_fast_sodium_current_h_gate__alpha_h / (var_fast_sodium_current_h_gate__alpha_h + var_fast_sodium_current_h_gate__beta_h)); // 1 / millisecond + const double var_fast_sodium_current_j_gate__alpha_j = ((var_chaste_interface__membrane__V < -40) ? ((37.780000000000001 + var_chaste_interface__membrane__V) * (-127140 * exp(0.24440000000000001 * var_chaste_interface__membrane__V - 0.24440000000000001 * mParameters[9]) - 3.4740000000000003e-5 * exp(0.043909999999999998 * mParameters[9] - 0.043909999999999998 * var_chaste_interface__membrane__V)) / (1 + exp(24.640530000000002 + 0.311 * var_chaste_interface__membrane__V - 0.311 * mParameters[9]))) : (0)); // per_millisecond + const double var_fast_sodium_current_j_gate__beta_j = ((var_chaste_interface__membrane__V < -40) ? (0.1212 * exp(0.01052 * mParameters[9] - 0.01052 * var_chaste_interface__membrane__V) / (1 + exp(-5.5312920000000005 + 0.13780000000000001 * mParameters[9] - 0.13780000000000001 * var_chaste_interface__membrane__V))) : (0.29999999999999999 * exp(2.5349999999999999e-7 * mParameters[9] - 2.5349999999999999e-7 * var_chaste_interface__membrane__V) / (1 + exp(-3.2000000000000002 + 0.10000000000000001 * mParameters[9] - 0.10000000000000001 * var_chaste_interface__membrane__V)))); // per_millisecond + const double d_dt_chaste_interface_var_fast_sodium_current_j_gate__j = (var_fast_sodium_current_j_gate__alpha_j + var_fast_sodium_current_j_gate__beta_j) * (-var_chaste_interface__fast_sodium_current_j_gate__j + 0.01 * mParameters[8] + (1 - 0.01 * mParameters[8]) * var_fast_sodium_current_j_gate__alpha_j / (var_fast_sodium_current_j_gate__alpha_j + var_fast_sodium_current_j_gate__beta_j)); // 1 / millisecond + const double d_dt_chaste_interface_var_fast_sodium_current_m_gate__m = (1 - var_chaste_interface__fast_sodium_current_m_gate__m) * _lt_0_row[2] - 0.080000000000000002 * var_chaste_interface__fast_sodium_current_m_gate__m * _lt_0_row[3]; // 1 / millisecond + const double d_dt_chaste_interface_var_slow_inward_current_d_gate__d = 0.095000000000000001 * (1 - var_chaste_interface__slow_inward_current_d_gate__d) * _lt_0_row[5] / (_lt_0_row[4]) - 0.070000000000000007 * var_chaste_interface__slow_inward_current_d_gate__d * _lt_0_row[7] / (_lt_0_row[6]); // 1 / millisecond + const double d_dt_chaste_interface_var_slow_inward_current_f_gate__f = 0.012 * (1 - var_chaste_interface__slow_inward_current_f_gate__f) * _lt_0_row[9] / (_lt_0_row[8]) - 0.0064999999999999997 * var_chaste_interface__slow_inward_current_f_gate__f * _lt_0_row[11] / (_lt_0_row[10]); // 1 / millisecond + const double var_slow_inward_current__i_si = (-7.7000000000000002 + 13.028700000000001 * log(var_chaste_interface__intracellular_calcium_concentration__Cai) + var_chaste_interface__membrane__V) * mParameters[4] * var_chaste_interface__slow_inward_current_d_gate__d * var_chaste_interface__slow_inward_current_f_gate__f; // microA_per_cm2 + const double d_dt_chaste_interface_var_intracellular_calcium_concentration__Cai = 7.0000000000000007e-6 - 0.070000000000000007 * var_chaste_interface__intracellular_calcium_concentration__Cai - 0.0001 * var_slow_inward_current__i_si; // 1 / millisecond + const double d_dt_chaste_interface_var_time_dependent_potassium_current_X_gate__X = 0.00050000000000000001 * (1 - var_chaste_interface__time_dependent_potassium_current_X_gate__X) * _lt_0_row[13] / (_lt_0_row[12]) - 0.0012999999999999999 * var_chaste_interface__time_dependent_potassium_current_X_gate__X * _lt_0_row[15] / (_lt_0_row[14]); // 1 / millisecond + + if (mSetVoltageDerivativeToZero) + { + d_dt_chaste_interface_var_membrane__V = 0.0; + } + else + { + const double var_time_independent_potassium_current__E_K1 = 26.712449447891164 * log(mParameters[2] / mParameters[0]); // millivolt + d_dt_chaste_interface_var_membrane__V = -((59.869999999999997 + var_chaste_interface__membrane__V) * mParameters[11] + (-var_time_independent_potassium_current__E_K1 + var_chaste_interface__membrane__V) * mParameters[12] / (_lt_0_row[1]) + pow(var_chaste_interface__fast_sodium_current_m_gate__m, 3) * (-26.712449447891164 * log(mParameters[3] / mParameters[1]) + var_chaste_interface__membrane__V) * mParameters[7] * var_chaste_interface__fast_sodium_current_h_gate__h * var_chaste_interface__fast_sodium_current_j_gate__j + 0.43033148291193518 * sqrt(mParameters[2]) * (-26.712449447891164 * log((0.018329999999999999 * mParameters[3] + mParameters[2]) / (0.018329999999999999 * mParameters[1] + mParameters[0])) + var_chaste_interface__membrane__V) * _lt_0_row[0] * mParameters[6] * var_chaste_interface__time_dependent_potassium_current_X_gate__X + 0.4389381125701739 * sqrt(mParameters[2]) * (-var_time_independent_potassium_current__E_K1 + var_chaste_interface__membrane__V) * mParameters[10] / ((1 + exp(-14.1227775 + 0.23849999999999999 * var_chaste_interface__membrane__V - 0.23849999999999999 * var_time_independent_potassium_current__E_K1)) * (1.02 / (1 + exp(-14.1227775 + 0.23849999999999999 * var_chaste_interface__membrane__V - 0.23849999999999999 * var_time_independent_potassium_current__E_K1)) + (exp(-36.698642499999998 + 0.061749999999999999 * var_chaste_interface__membrane__V - 0.061749999999999999 * var_time_independent_potassium_current__E_K1) + 0.49124000000000001 * exp(0.43983232 + 0.080320000000000003 * var_chaste_interface__membrane__V - 0.080320000000000003 * var_time_independent_potassium_current__E_K1)) / (1 + exp(-2.4444678999999998 + 0.51429999999999998 * var_time_independent_potassium_current__E_K1 - 0.51429999999999998 * var_chaste_interface__membrane__V)))) + GetIntracellularAreaStimulus(var_chaste_interface__environment__time) + var_slow_inward_current__i_si) / mParameters[5]; // millivolt / millisecond + } + + rDY[0] = d_dt_chaste_interface_var_membrane__V; + rDY[1] = d_dt_chaste_interface_var_fast_sodium_current_m_gate__m; + rDY[2] = d_dt_chaste_interface_var_fast_sodium_current_h_gate__h; + rDY[3] = d_dt_chaste_interface_var_fast_sodium_current_j_gate__j; + rDY[4] = d_dt_chaste_interface_var_slow_inward_current_d_gate__d; + rDY[5] = d_dt_chaste_interface_var_slow_inward_current_f_gate__f; + rDY[6] = d_dt_chaste_interface_var_time_dependent_potassium_current_X_gate__X; + rDY[7] = d_dt_chaste_interface_var_intracellular_calcium_concentration__Cai; + } + + std::vector Celltest_luo_rudy_1991_with_range_cap_dimensionlessFromCellMLOpt::ComputeDerivedQuantities(double var_chaste_interface__environment__time, const std::vector & rY) + { + // Inputs: + // Time units: millisecond + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -83.853 + double var_chaste_interface__fast_sodium_current_m_gate__m = rY[1]; + // Units: dimensionless; Initial value: 0.00187018 + double var_chaste_interface__fast_sodium_current_h_gate__h = rY[2]; + // Units: dimensionless; Initial value: 0.9804713 + double var_chaste_interface__fast_sodium_current_j_gate__j = rY[3]; + // Units: dimensionless; Initial value: 0.98767124 + double var_chaste_interface__slow_inward_current_d_gate__d = rY[4]; + // Units: dimensionless; Initial value: 0.00316354 + double var_chaste_interface__slow_inward_current_f_gate__f = rY[5]; + // Units: dimensionless; Initial value: 0.99427859 + double var_chaste_interface__time_dependent_potassium_current_X_gate__X = rY[6]; + // Units: dimensionless; Initial value: 0.16647703 + double var_chaste_interface__intracellular_calcium_concentration__Cai = rY[7]; + // Units: dimensionless; Initial value: 0.0002 + + // Lookup table indexing + const bool _oob_0 = Celltest_luo_rudy_1991_with_range_cap_dimensionlessFromCellMLOpt_LookupTables::Instance()->CheckIndex0(var_chaste_interface__membrane__V); +// LCOV_EXCL_START + if (_oob_0) + EXCEPTION(DumpState("membrane_voltage outside lookup table range", rY , var_chaste_interface__environment__time)); +// LCOV_EXCL_STOP + const double* const _lt_0_row = Celltest_luo_rudy_1991_with_range_cap_dimensionlessFromCellMLOpt_LookupTables::Instance()->IndexTable0(var_chaste_interface__membrane__V); + + // Mathematics + const double var_background_current__E_b = -59.869999999999997; // millivolt + const double var_membrane__F = 96484.600000000006; // coulomb_per_mole + const double var_membrane__I_stim = GetIntracellularAreaStimulus(var_chaste_interface__environment__time); // microA_per_cm2 + const double var_membrane__R = 8314; // joule_per_kilomole_kelvin + const double var_membrane__T = 310; // kelvin + const double var_fast_sodium_current__E_Na = var_membrane__R * var_membrane__T * log(mParameters[3] / mParameters[1]) / var_membrane__F; // millivolt + const double var_background_current__i_b = (-var_background_current__E_b + var_chaste_interface__membrane__V) * mParameters[11]; // microA_per_cm2 + const double var_fast_sodium_current__i_Na = pow(var_chaste_interface__fast_sodium_current_m_gate__m, 3) * (-var_fast_sodium_current__E_Na + var_chaste_interface__membrane__V) * mParameters[7] * var_chaste_interface__fast_sodium_current_h_gate__h * var_chaste_interface__fast_sodium_current_j_gate__j; // microA_per_cm2 + const double var_fast_sodium_current_h_gate__alpha_h = ((var_chaste_interface__membrane__V < -40) ? (0.13500000000000001 * exp(-11.764705882352942 + 0.14705882352941177 * mParameters[9] - 0.14705882352941177 * var_chaste_interface__membrane__V)) : (0)); // per_millisecond + const double var_fast_sodium_current_h_gate__beta_h = ((var_chaste_interface__membrane__V < -40) ? (310000 * exp(0.34999999999999998 * var_chaste_interface__membrane__V - 0.34999999999999998 * mParameters[9]) + 3.5600000000000001 * exp(0.079000000000000001 * var_chaste_interface__membrane__V - 0.079000000000000001 * mParameters[9])) : (7.6923076923076916 / (1 + exp(-0.96036036036036043 + 0.0900900900900901 * mParameters[9] - 0.0900900900900901 * var_chaste_interface__membrane__V)))); // per_millisecond + const double var_fast_sodium_current_h_gate__tau_h = 1 / (var_fast_sodium_current_h_gate__alpha_h + var_fast_sodium_current_h_gate__beta_h); // millisecond + const double var_fast_sodium_current_j_gate__alpha_j = ((var_chaste_interface__membrane__V < -40) ? ((37.780000000000001 + var_chaste_interface__membrane__V) * (-127140 * exp(0.24440000000000001 * var_chaste_interface__membrane__V - 0.24440000000000001 * mParameters[9]) - 3.4740000000000003e-5 * exp(0.043909999999999998 * mParameters[9] - 0.043909999999999998 * var_chaste_interface__membrane__V)) / (1 + exp(24.640530000000002 + 0.311 * var_chaste_interface__membrane__V - 0.311 * mParameters[9]))) : (0)); // per_millisecond + const double var_fast_sodium_current_j_gate__beta_j = ((var_chaste_interface__membrane__V < -40) ? (0.1212 * exp(0.01052 * mParameters[9] - 0.01052 * var_chaste_interface__membrane__V) / (1 + exp(-5.5312920000000005 + 0.13780000000000001 * mParameters[9] - 0.13780000000000001 * var_chaste_interface__membrane__V))) : (0.29999999999999999 * exp(2.5349999999999999e-7 * mParameters[9] - 2.5349999999999999e-7 * var_chaste_interface__membrane__V) / (1 + exp(-3.2000000000000002 + 0.10000000000000001 * mParameters[9] - 0.10000000000000001 * var_chaste_interface__membrane__V)))); // per_millisecond + const double var_fast_sodium_current_j_gate__tau_j = 1 / (var_fast_sodium_current_j_gate__alpha_j + var_fast_sodium_current_j_gate__beta_j); // millisecond + const double var_plateau_potassium_current__Kp = 1 / (_lt_0_row[1]); // dimensionless + const double var_slow_inward_current__E_si = 7.7000000000000002 - 13.028700000000001 * log(var_chaste_interface__intracellular_calcium_concentration__Cai); // millivolt + const double var_slow_inward_current_f_gate__alpha_f = 0.012 * _lt_0_row[9] / (_lt_0_row[8]); // per_millisecond + const double var_slow_inward_current_f_gate__beta_f = 0.0064999999999999997 * _lt_0_row[11] / (_lt_0_row[10]); // per_millisecond + const double var_slow_inward_current__i_si = (-var_slow_inward_current__E_si + var_chaste_interface__membrane__V) * mParameters[4] * var_chaste_interface__slow_inward_current_d_gate__d * var_chaste_interface__slow_inward_current_f_gate__f; // microA_per_cm2 + const double var_slow_inward_current_f_gate__tau_f = 1 / (var_slow_inward_current_f_gate__alpha_f + var_slow_inward_current_f_gate__beta_f); // millisecond + const double var_time_dependent_potassium_current__PR_NaK = 0.018329999999999999; // dimensionless + const double var_time_dependent_potassium_current__E_K = var_membrane__R * var_membrane__T * log((mParameters[3] * var_time_dependent_potassium_current__PR_NaK + mParameters[2]) / (mParameters[1] * var_time_dependent_potassium_current__PR_NaK + mParameters[0])) / var_membrane__F; // millivolt + const double var_time_dependent_potassium_current__g_K = 0.43033148291193518 * sqrt(mParameters[2]) * mParameters[6]; // milliS_per_cm2 + const double var_time_dependent_potassium_current_Xi_gate__B = 0.040000000000000001; // per_millivolt + const double var_time_dependent_potassium_current_Xi_gate__A = 2.8370000000000002 * var_time_dependent_potassium_current_Xi_gate__B; // dimensionless + const double var_time_dependent_potassium_current_Xi_gate__v0 = -77; // millivolt + const double var_time_dependent_potassium_current_Xi_gate__U = (-var_time_dependent_potassium_current_Xi_gate__v0 + var_chaste_interface__membrane__V) * var_time_dependent_potassium_current_Xi_gate__B; // dimensionless + const double var_time_dependent_potassium_current_Xi_gate__temp_Xi = (((var_time_dependent_potassium_current_Xi_gate__U >= -9.9999999999999995e-8) && (var_time_dependent_potassium_current_Xi_gate__U <= 9.9999999999999995e-8)) ? ((1 + 0.5 * var_time_dependent_potassium_current_Xi_gate__U) * var_time_dependent_potassium_current_Xi_gate__A) : ((-1 + exp(var_time_dependent_potassium_current_Xi_gate__U)) * var_time_dependent_potassium_current_Xi_gate__A / var_time_dependent_potassium_current_Xi_gate__U)); // dimensionless + const double var_time_dependent_potassium_current_Xi_gate__Xi = ((var_chaste_interface__membrane__V > -100) ? (var_time_dependent_potassium_current_Xi_gate__temp_Xi / exp(1.4000000000000001 + 0.040000000000000001 * var_chaste_interface__membrane__V)) : (1)); // dimensionless + const double var_time_dependent_potassium_current__i_K = (-var_time_dependent_potassium_current__E_K + var_chaste_interface__membrane__V) * var_time_dependent_potassium_current__g_K * var_chaste_interface__time_dependent_potassium_current_X_gate__X * var_time_dependent_potassium_current_Xi_gate__Xi; // microA_per_cm2 + const double var_time_independent_potassium_current__E_K1 = var_membrane__R * var_membrane__T * log(mParameters[2] / mParameters[0]) / var_membrane__F; // millivolt + const double var_plateau_potassium_current__E_Kp = var_time_independent_potassium_current__E_K1; // millivolt + const double var_plateau_potassium_current__i_Kp = (-var_plateau_potassium_current__E_Kp + var_chaste_interface__membrane__V) * var_plateau_potassium_current__Kp * mParameters[12]; // microA_per_cm2 + const double var_time_independent_potassium_current__g_K1 = 0.43033148291193518 * sqrt(mParameters[2]) * mParameters[10]; // milliS_per_cm2 + const double var_time_independent_potassium_current_K1_gate__alpha_K1 = 1.02 / (1 + exp(-14.1227775 + 0.23849999999999999 * var_chaste_interface__membrane__V - 0.23849999999999999 * var_time_independent_potassium_current__E_K1)); // per_millisecond + const double var_time_independent_potassium_current_K1_gate__beta_K1 = (exp(-36.698642499999998 + 0.061749999999999999 * var_chaste_interface__membrane__V - 0.061749999999999999 * var_time_independent_potassium_current__E_K1) + 0.49124000000000001 * exp(0.43983232 + 0.080320000000000003 * var_chaste_interface__membrane__V - 0.080320000000000003 * var_time_independent_potassium_current__E_K1)) / (1 + exp(-2.4444678999999998 + 0.51429999999999998 * var_time_independent_potassium_current__E_K1 - 0.51429999999999998 * var_chaste_interface__membrane__V)); // per_millisecond + const double var_time_independent_potassium_current_K1_gate__K1_infinity = var_time_independent_potassium_current_K1_gate__alpha_K1 / (var_time_independent_potassium_current_K1_gate__alpha_K1 + var_time_independent_potassium_current_K1_gate__beta_K1); // dimensionless + const double var_time_independent_potassium_current__i_K1 = (-var_time_independent_potassium_current__E_K1 + var_chaste_interface__membrane__V) * var_time_independent_potassium_current__g_K1 * var_time_independent_potassium_current_K1_gate__K1_infinity; // microA_per_cm2 + + std::vector dqs(11); + dqs[0] = var_slow_inward_current__i_si; + dqs[1] = var_slow_inward_current_f_gate__tau_f; + dqs[2] = var_time_dependent_potassium_current__i_K; + dqs[3] = var_fast_sodium_current__i_Na; + dqs[4] = var_fast_sodium_current_h_gate__tau_h; + dqs[5] = var_fast_sodium_current_j_gate__tau_j; + dqs[6] = var_time_independent_potassium_current__i_K1; + dqs[7] = var_background_current__i_b; + dqs[8] = var_plateau_potassium_current__i_Kp; + dqs[9] = var_membrane__I_stim; + dqs[10] = var_chaste_interface__environment__time; + return dqs; + } + +template<> +void OdeSystemInformation::Initialise(void) +{ + this->mSystemName = "luo_rudy_1991"; + this->mFreeVariableName = "time"; + this->mFreeVariableUnits = "millisecond"; + + // rY[0]: + this->mVariableNames.push_back("membrane_voltage"); + this->mVariableUnits.push_back("millivolt"); + this->mInitialConditions.push_back(-83.853); + + // rY[1]: + this->mVariableNames.push_back("membrane_fast_sodium_current_m_gate"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.00187018); + + // rY[2]: + this->mVariableNames.push_back("membrane_fast_sodium_current_h_gate"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.9804713); + + // rY[3]: + this->mVariableNames.push_back("membrane_fast_sodium_current_j_gate"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.98767124); + + // rY[4]: + this->mVariableNames.push_back("membrane_L_type_calcium_current_d_gate"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.00316354); + + // rY[5]: + this->mVariableNames.push_back("membrane_L_type_calcium_current_f_gate"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.99427859); + + // rY[6]: + this->mVariableNames.push_back("time_dependent_potassium_current_X_gate__X"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.16647703); + + // rY[7]: + this->mVariableNames.push_back("cytosolic_calcium_concentration"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.0002); + + // mParameters[0]: + this->mParameterNames.push_back("cytosolic_potassium_concentration"); + this->mParameterUnits.push_back("millimolar"); + + // mParameters[1]: + this->mParameterNames.push_back("cytosolic_sodium_concentration"); + this->mParameterUnits.push_back("millimolar"); + + // mParameters[2]: + this->mParameterNames.push_back("extracellular_potassium_concentration"); + this->mParameterUnits.push_back("millimolar"); + + // mParameters[3]: + this->mParameterNames.push_back("extracellular_sodium_concentration"); + this->mParameterUnits.push_back("millimolar"); + + // mParameters[4]: + this->mParameterNames.push_back("membrane_L_type_calcium_current_conductance"); + this->mParameterUnits.push_back("milliS_per_cm2"); + + // mParameters[5]: + this->mParameterNames.push_back("membrane_capacitance"); + this->mParameterUnits.push_back("dimensionless"); + + // mParameters[6]: + this->mParameterNames.push_back("membrane_delayed_rectifier_potassium_current_conductance"); + this->mParameterUnits.push_back("milliS_per_cm2"); + + // mParameters[7]: + this->mParameterNames.push_back("membrane_fast_sodium_current_conductance"); + this->mParameterUnits.push_back("milliS_per_cm2"); + + // mParameters[8]: + this->mParameterNames.push_back("membrane_fast_sodium_current_reduced_inactivation"); + this->mParameterUnits.push_back("dimensionless"); + + // mParameters[9]: + this->mParameterNames.push_back("membrane_fast_sodium_current_shift_inactivation"); + this->mParameterUnits.push_back("millivolt"); + + // mParameters[10]: + this->mParameterNames.push_back("membrane_inward_rectifier_potassium_current_conductance"); + this->mParameterUnits.push_back("milliS_per_cm2"); + + // mParameters[11]: + this->mParameterNames.push_back("membrane_leakage_current_conductance"); + this->mParameterUnits.push_back("milliS_per_cm2"); + + // mParameters[12]: + this->mParameterNames.push_back("membrane_plateau_potassium_current_conductance"); + this->mParameterUnits.push_back("milliS_per_cm2"); + + // Derived Quantity index [0]: + this->mDerivedQuantityNames.push_back("membrane_L_type_calcium_current"); + this->mDerivedQuantityUnits.push_back("microA_per_cm2"); + + // Derived Quantity index [1]: + this->mDerivedQuantityNames.push_back("membrane_L_type_calcium_current_f_gate_tau"); + this->mDerivedQuantityUnits.push_back("millisecond"); + + // Derived Quantity index [2]: + this->mDerivedQuantityNames.push_back("membrane_delayed_rectifier_potassium_current"); + this->mDerivedQuantityUnits.push_back("microA_per_cm2"); + + // Derived Quantity index [3]: + this->mDerivedQuantityNames.push_back("membrane_fast_sodium_current"); + this->mDerivedQuantityUnits.push_back("microA_per_cm2"); + + // Derived Quantity index [4]: + this->mDerivedQuantityNames.push_back("membrane_fast_sodium_current_h_gate_tau"); + this->mDerivedQuantityUnits.push_back("millisecond"); + + // Derived Quantity index [5]: + this->mDerivedQuantityNames.push_back("membrane_fast_sodium_current_j_gate_tau"); + this->mDerivedQuantityUnits.push_back("millisecond"); + + // Derived Quantity index [6]: + this->mDerivedQuantityNames.push_back("membrane_inward_rectifier_potassium_current"); + this->mDerivedQuantityUnits.push_back("microA_per_cm2"); + + // Derived Quantity index [7]: + this->mDerivedQuantityNames.push_back("membrane_leakage_current"); + this->mDerivedQuantityUnits.push_back("microA_per_cm2"); + + // Derived Quantity index [8]: + this->mDerivedQuantityNames.push_back("membrane_plateau_potassium_current"); + this->mDerivedQuantityUnits.push_back("microA_per_cm2"); + + // Derived Quantity index [9]: + this->mDerivedQuantityNames.push_back("membrane_stimulus_current"); + this->mDerivedQuantityUnits.push_back("microA_per_cm2"); + + // Derived Quantity index [10]: + this->mDerivedQuantityNames.push_back("time"); + this->mDerivedQuantityUnits.push_back("millisecond"); + + this->mInitialised = true; +} + +// Serialization for Boost >= 1.36 +#include "SerializationExportWrapperForCpp.hpp" +CHASTE_CLASS_EXPORT(Celltest_luo_rudy_1991_with_range_cap_dimensionlessFromCellMLOpt) + diff --git a/chaste_codegen/tests/numerical/baseline/Opt/test_luo_rudy_1991_with_range_cap_dimensionless.hpp b/chaste_codegen/tests/numerical/baseline/Opt/test_luo_rudy_1991_with_range_cap_dimensionless.hpp new file mode 100644 index 00000000..fd71687b --- /dev/null +++ b/chaste_codegen/tests/numerical/baseline/Opt/test_luo_rudy_1991_with_range_cap_dimensionless.hpp @@ -0,0 +1,86 @@ +#ifndef CELLTEST_LUO_RUDY_1991_WITH_RANGE_CAP_DIMENSIONLESSFROMCELLMLOPT_HPP_ +#define CELLTEST_LUO_RUDY_1991_WITH_RANGE_CAP_DIMENSIONLESSFROMCELLMLOPT_HPP_ + +//! @file +//! +//! This source file was generated from CellML by chaste_codegen version (version omitted as unimportant) +//! +//! Model: luo_rudy_1991 +//! +//! Processed by chaste_codegen: https://github.com/ModellingWebLab/chaste-codegen +//! (translator: chaste_codegen, model type: NormalOpt) +//! on (date omitted as unimportant) +//! +//! + +#include "ChasteSerialization.hpp" +#include +#include "AbstractStimulusFunction.hpp" +#include "AbstractCardiacCell.hpp" + +class Celltest_luo_rudy_1991_with_range_cap_dimensionlessFromCellMLOpt : public AbstractCardiacCell +{ + friend class boost::serialization::access; + template + void serialize(Archive & archive, const unsigned int version) + { + archive & boost::serialization::base_object(*this); + + } + + // + // Settable parameters and readable variables + // + + +private: +const bool is_concentration[8] = {false, false, false, false, false, false, false, true}; +const bool is_probability[8] = {false, true, true, true, true, true, false, false}; +public: + + boost::shared_ptr UseCellMLDefaultStimulus(); + double GetIntracellularCalciumConcentration(); + Celltest_luo_rudy_1991_with_range_cap_dimensionlessFromCellMLOpt(boost::shared_ptr pSolver, boost::shared_ptr pIntracellularStimulus); + ~Celltest_luo_rudy_1991_with_range_cap_dimensionlessFromCellMLOpt(); + void VerifyStateVariables(); + AbstractLookupTableCollection* GetLookupTableCollection(); + double GetIIonic(const std::vector* pStateVariables=NULL); + void EvaluateYDerivatives(double var_chaste_interface__environment__time, const std::vector& rY, std::vector& rDY); + + std::vector ComputeDerivedQuantities(double var_chaste_interface__environment__time, const std::vector & rY); +}; + +// Needs to be included last +#include "SerializationExportWrapper.hpp" +CHASTE_CLASS_EXPORT(Celltest_luo_rudy_1991_with_range_cap_dimensionlessFromCellMLOpt) + +namespace boost +{ + namespace serialization + { + template + inline void save_construct_data( + Archive & ar, const Celltest_luo_rudy_1991_with_range_cap_dimensionlessFromCellMLOpt * t, const unsigned int fileVersion) + { + const boost::shared_ptr p_solver = t->GetSolver(); + const boost::shared_ptr p_stimulus = t->GetStimulusFunction(); + ar << p_solver; + ar << p_stimulus; + } + + template + inline void load_construct_data( + Archive & ar, Celltest_luo_rudy_1991_with_range_cap_dimensionlessFromCellMLOpt * t, const unsigned int fileVersion) + { + boost::shared_ptr p_solver; + boost::shared_ptr p_stimulus; + ar >> p_solver; + ar >> p_stimulus; + ::new(t)Celltest_luo_rudy_1991_with_range_cap_dimensionlessFromCellMLOpt(p_solver, p_stimulus); + } + + } + +} + +#endif // CELLTEST_LUO_RUDY_1991_WITH_RANGE_CAP_DIMENSIONLESSFROMCELLMLOPT_HPP_ \ No newline at end of file diff --git a/chaste_codegen/tests/numerical/baseline/RL/dynamic_livshitz_rudy_2007.cpp b/chaste_codegen/tests/numerical/baseline/RL/dynamic_livshitz_rudy_2007.cpp new file mode 100644 index 00000000..e2f8136f --- /dev/null +++ b/chaste_codegen/tests/numerical/baseline/RL/dynamic_livshitz_rudy_2007.cpp @@ -0,0 +1,796 @@ +//! @file +//! +//! This source file was generated from CellML by chaste_codegen version (version omitted as unimportant) +//! +//! Model: LivshitzRudy2007 +//! +//! Processed by chaste_codegen: https://github.com/ModellingWebLab/chaste-codegen +//! (translator: chaste_codegen, model type: RushLarsen) +//! on (date omitted as unimportant) +//! +//! + +#include "dynamic_livshitz_rudy_2007.hpp" +#include +#include +#include +#include +#include "Exception.hpp" +#include "OdeSystemInformation.hpp" +#include "RegularStimulus.hpp" +#include "HeartConfig.hpp" +#include "IsNan.hpp" +#include "MathsCustomFunctions.hpp" + + + + + + boost::shared_ptr Dynamiclivshitz_rudy_2007FromCellMLRushLarsen::UseCellMLDefaultStimulus() + { + // Use the default stimulus specified by CellML metadata + const double var_chaste_interface__cell__stim_amplitude_converted = -15 * HeartConfig::Instance()->GetCapacitance(); // uA_per_cm2 + const double var_chaste_interface__cell__stim_duration = 3; // ms + const double var_chaste_interface__cell__stim_offset = 100; // ms + const double var_chaste_interface__cell__stim_period = 400; // ms + boost::shared_ptr p_cellml_stim(new RegularStimulus( + -fabs(var_chaste_interface__cell__stim_amplitude_converted), + var_chaste_interface__cell__stim_duration, + var_chaste_interface__cell__stim_period, + var_chaste_interface__cell__stim_offset + )); + mpIntracellularStimulus = p_cellml_stim; + return p_cellml_stim; + } + + Dynamiclivshitz_rudy_2007FromCellMLRushLarsen::Dynamiclivshitz_rudy_2007FromCellMLRushLarsen(boost::shared_ptr /* unused; should be empty */, boost::shared_ptr pIntracellularStimulus) + : AbstractRushLarsenCardiacCell( + 18, + 0, + pIntracellularStimulus) + { + // Time units: millisecond + // + this->mpSystemInfo = OdeSystemInformation::Instance(); + Init(); + + // We have a default stimulus specified in the CellML file metadata + this->mHasDefaultStimulusFromCellML = true; + + this->mParameters[0] = 1; // (var_Iup_Ileak__leak_factor) [dimensionless] + this->mParameters[1] = 0.125; // (var_Irel__kappa) [mM_per_mV_ms] + this->mParameters[2] = 0.0087500000000000008; // (var_Iup_Ileak__iupbar) [mM_per_ms] + this->mParameters[3] = 1; // (var_Na__conc_clamp) [dimensionless] + this->mParameters[4] = 1.8; // (var_Environment__Ca_o) [mM] + this->mParameters[5] = 4.5; // (var_Environment__K_o) [mM] + this->mParameters[6] = 140; // (var_Environment__Na_o) [mM] + this->mParameters[7] = 0.00054000000000000001; // (var_ICaL__pca) [L_per_F_ms] + this->mParameters[8] = 16; // (var_INa__GNa) [mS_per_uF] + this->mParameters[9] = 0; // (var_INa__perc_reduced_inact_for_IpNa) [dimensionless] + this->mParameters[10] = 0; // (var_INa__shift_h) [mV] + this->mParameters[11] = 0.02614; // (var_IKr__gkrmax) [mS_per_uF] + this->mParameters[12] = 0.433; // (var_IKs__GKsmax) [mS_per_uF] + this->mParameters[13] = 0.00025000000000000001; // (var_INaCa__c1) [uA_per_uF] + } + + Dynamiclivshitz_rudy_2007FromCellMLRushLarsen::~Dynamiclivshitz_rudy_2007FromCellMLRushLarsen() + { + } + + + void Dynamiclivshitz_rudy_2007FromCellMLRushLarsen::VerifyStateVariables() + { + std::vector& rY = rGetStateVariables(); + std::string error_message = ""; + + for (unsigned i=0; i < 18; i++) + { + if(std::isnan(rY[i])) + { + error_message += "State variable " + this->rGetStateVariableNames()[i] + " is not a number\n"; + } + if(std::isinf(rY[i])) + { + error_message += "State variable " + this->rGetStateVariableNames()[i] + " has become INFINITE\n"; + } + if(this->is_concentration[i] && rY[i] < 0) + { + error_message += "Concentration " + this->rGetStateVariableNames()[i] + " below 0\n"; + } + if(this->is_probability[i] && rY[i] < 0) + { + error_message += "Probability " + this->rGetStateVariableNames()[i] + " below 0\n"; + } + if(this->is_probability[i] && rY[i] > 1) + { + error_message += "Probability " + this->rGetStateVariableNames()[i] + " above 1\n"; + } + } + if (error_message != ""){ + EXCEPTION(DumpState(error_message)); + } + } + + double Dynamiclivshitz_rudy_2007FromCellMLRushLarsen::GetIIonic(const std::vector* pStateVariables) + { + // For state variable interpolation (SVI) we read in interpolated state variables, + // otherwise for ionic current interpolation (ICI) we use the state variables of this model (node). + if (!pStateVariables) pStateVariables = &rGetStateVariables(); + const std::vector& rY = *pStateVariables; + double var_chaste_interface__cell__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: mV; Initial value: -89.4356034692784 + double var_chaste_interface__INa__H = rY[1]; + // Units: dimensionless; Initial value: 0.994401369032678 + double var_chaste_interface__INa__m = rY[2]; + // Units: dimensionless; Initial value: 0.000734780346592185 + double var_chaste_interface__INa__J = rY[3]; + // Units: dimensionless; Initial value: 0.996100688673679 + double var_chaste_interface__ICaL__d = rY[4]; + // Units: dimensionless; Initial value: 3.2514786721066e-27 + double var_chaste_interface__ICaL__f = rY[5]; + // Units: dimensionless; Initial value: 0.997404948824816 + double var_chaste_interface__IKr__xr = rY[6]; + // Units: dimensionless; Initial value: 0.000162194715543637 + double var_chaste_interface__IKs__xs1 = rY[7]; + // Units: dimensionless; Initial value: 0.0285147332973946 + double var_chaste_interface__IKs__xs2 = rY[8]; + // Units: dimensionless; Initial value: 0.0764114040188678 + double var_chaste_interface__ICaT__b = rY[9]; + // Units: dimensionless; Initial value: 0.000927461915392873 + double var_chaste_interface__ICaT__g = rY[10]; + // Units: dimensionless; Initial value: 0.952834331760863 + double var_chaste_interface__Na__Na_i = rY[12]; + // Units: mM; Initial value: 16.612739313555 + double var_chaste_interface__K__K_i = rY[13]; + // Units: mM; Initial value: 139.730914103161 + double var_chaste_interface__Ca__Ca_T = rY[14]; + // Units: mM; Initial value: 0.0257059808595638 + + const double var_Ca__cmdnbar = 0.050000000000000003; // mM + const double var_Ca__kmcmdn = 0.0023800000000000002; // mM + const double var_Ca__kmtrpn = 0.00050000000000000001; // mM + const double var_Ca__dmyo = -var_chaste_interface__Ca__Ca_T * var_Ca__kmcmdn * var_Ca__kmtrpn; // mM3 + const double var_Ca__trpnbar = 0.070000000000000007; // mM + const double var_Ca__bmyo = -var_chaste_interface__Ca__Ca_T + var_Ca__cmdnbar + var_Ca__kmcmdn + var_Ca__kmtrpn + var_Ca__trpnbar; // mM + const double var_Ca__cmyo = var_Ca__cmdnbar * var_Ca__kmtrpn + var_Ca__kmcmdn * var_Ca__kmtrpn + var_Ca__kmcmdn * var_Ca__trpnbar - (var_Ca__kmcmdn + var_Ca__kmtrpn) * var_chaste_interface__Ca__Ca_T; // mM2 + const double var_Ca__Ca_i = -0.33333333333333331 * var_Ca__bmyo + 1.1547005383792515 * sqrt(-var_Ca__cmyo + 0.33333333333333331 * pow(var_Ca__bmyo, 2)) * cos(0.33333333333333331 * acos(0.096225044864937631 * pow((-var_Ca__cmyo + 0.33333333333333331 * pow(var_Ca__bmyo, 2)), (-1.5)) * (-2 * pow(var_Ca__bmyo, 3) - 27 * var_Ca__dmyo + 9 * var_Ca__bmyo * var_Ca__cmyo))); // mM + const double var_Environment__F = 96485; // C_per_mole + const double var_Environment__R = 8314; // mJ_per_mole_K + const double var_Environment__Temp = 310; // kelvin + const double var_Environment__FonRT = var_Environment__F / (var_Environment__R * var_Environment__Temp); // per_mV + const double var_ICaL__gacai = 1; // dimensionless + const double var_ICaL__gacao = 0.34100000000000003; // dimensionless + const double var_ICaL__gaki = 0.75; // dimensionless + const double var_ICaL__gako = 0.75; // dimensionless + const double var_ICaL__ganai = 0.75; // dimensionless + const double var_ICaL__ganao = 0.75; // dimensionless + const double var_ICaL__kmca = 0.00059999999999999995; // mM + const double var_ICaL__fca = 1 / (1 + var_Ca__Ca_i / var_ICaL__kmca); // dimensionless + const double var_ICaL__pk = 1.9299999999999999e-7; // L_per_F_ms + const double var_ICaL__pna = 6.75e-7; // L_per_F_ms + const double var_ICaT__gcat = 0.050000000000000003; // mS_per_uF + const double var_ICab__gcab = 0.003016; // mS_per_uF + const double var_IK1__GK1max = 0.75; // mS_per_uF + const double var_IK1__GK1_ = 0.43033148291193518 * sqrt(mParameters[5]) * var_IK1__GK1max; // mS_per_uF + const double var_IKp__GKpmax = 0.0055199999999999997; // mS_per_uF + const double var_IKr__gkr = 0.43033148291193518 * sqrt(mParameters[5]) * mParameters[11]; // mS_per_uF + const double var_IKs__gks = (1 + 0.59999999999999998 / (1 + 6.4818210260626455e-7 * pow((1 / var_Ca__Ca_i), 1.3999999999999999))) * mParameters[12]; // mS_per_uF + const double var_INaCa__c2 = 0.0001; // dimensionless + const double var_INaCa__gammas = 0.14999999999999999; // dimensionless + const double var_INaK__ibarnak = 2.25; // uA_per_uF + const double var_INaK__kmko = 1.5; // mM + const double var_INaK__kmnai = 10; // mM + const double var_INaK__sigma = -0.14285714285714285 + 0.14285714285714285 * exp(0.01485884101040119 * mParameters[6]); // dimensionless + const double var_INab__GNab = 0.0040000000000000001; // mS_per_uF + const double var_IpCa__ibarpca = 1.1499999999999999; // uA_per_uF + const double var_IpCa__kmpca = 0.00050000000000000001; // mM + const double var_IpCa__ipca = var_Ca__Ca_i * var_IpCa__ibarpca / (var_Ca__Ca_i + var_IpCa__kmpca); // uA_per_uF + const double var_ICaL__ibarca = 4 * (-mParameters[4] * var_ICaL__gacao + var_Ca__Ca_i * var_ICaL__gacai * exp(2 * var_Environment__FonRT * var_chaste_interface__cell__V)) * var_Environment__F * var_Environment__FonRT * mParameters[7] * var_chaste_interface__cell__V / (-1 + exp(2 * var_Environment__FonRT * var_chaste_interface__cell__V)); // uA_per_uF + const double var_ICaL__ibark = (-mParameters[5] * var_ICaL__gako + var_ICaL__gaki * var_chaste_interface__K__K_i * exp(var_Environment__FonRT * var_chaste_interface__cell__V)) * var_Environment__F * var_Environment__FonRT * var_ICaL__pk * var_chaste_interface__cell__V / (-1 + exp(var_Environment__FonRT * var_chaste_interface__cell__V)); // uA_per_uF + const double var_ICaL__ibarna = (-mParameters[6] * var_ICaL__ganao + var_ICaL__ganai * var_chaste_interface__Na__Na_i * exp(var_Environment__FonRT * var_chaste_interface__cell__V)) * var_Environment__F * var_Environment__FonRT * var_ICaL__pna * var_chaste_interface__cell__V / (-1 + exp(var_Environment__FonRT * var_chaste_interface__cell__V)); // uA_per_uF + const double var_ICaL__ilca = var_chaste_interface__ICaL__d * var_chaste_interface__ICaL__f * var_ICaL__fca * var_ICaL__ibarca; // uA_per_uF + const double var_ICaL__ilcak = var_chaste_interface__ICaL__d * var_chaste_interface__ICaL__f * var_ICaL__fca * var_ICaL__ibark; // uA_per_uF + const double var_ICaL__ilcana = var_chaste_interface__ICaL__d * var_chaste_interface__ICaL__f * var_ICaL__fca * var_ICaL__ibarna; // uA_per_uF + const double var_ICab__icab = (-0.5 * log(mParameters[4] / var_Ca__Ca_i) / var_Environment__FonRT + var_chaste_interface__cell__V) * var_ICab__gcab; // uA_per_uF + const double var_IKr__r = 1 / (1 + exp(0.4017857142857143 + 0.044642857142857144 * var_chaste_interface__cell__V)); // dimensionless + const double var_INaCa__inaca = (-pow(mParameters[6], 3) * var_Ca__Ca_i + pow(var_chaste_interface__Na__Na_i, 3) * mParameters[4] * exp(var_Environment__FonRT * var_chaste_interface__cell__V)) * mParameters[13] * exp((-1 + var_INaCa__gammas) * var_Environment__FonRT * var_chaste_interface__cell__V) / (1 + (pow(mParameters[6], 3) * var_Ca__Ca_i + pow(var_chaste_interface__Na__Na_i, 3) * mParameters[4] * exp(var_Environment__FonRT * var_chaste_interface__cell__V)) * var_INaCa__c2 * exp((-1 + var_INaCa__gammas) * var_Environment__FonRT * var_chaste_interface__cell__V)); // uA_per_uF + const double var_INaK__fnak = 1 / (1 + 0.1245 * exp(-0.10000000000000001 * var_Environment__FonRT * var_chaste_interface__cell__V) + 0.036499999999999998 * var_INaK__sigma * exp(-var_Environment__FonRT * var_chaste_interface__cell__V)); // dimensionless + const double var_INaK__inak = var_INaK__fnak * var_INaK__ibarnak / ((1 + var_INaK__kmko / mParameters[5]) * (1 + pow(var_INaK__kmnai, 2) / pow(var_chaste_interface__Na__Na_i, 2))); // uA_per_uF + const double var_cell__i_Stim = 0; // uA_per_uF + const double var_reversal_potentials__ECa = 0.5 * log(mParameters[4] / var_Ca__Ca_i) / var_Environment__FonRT; // mV + const double var_ICaT__icat = pow(var_chaste_interface__ICaT__b, 2) * (-var_reversal_potentials__ECa + var_chaste_interface__cell__V) * var_chaste_interface__ICaT__g * var_ICaT__gcat; // uA_per_uF + const double var_cell__caiont = -2 * var_INaCa__inaca + var_ICaL__ilca + var_ICaT__icat + var_ICab__icab + var_IpCa__ipca; // uA_per_uF + const double var_reversal_potentials__EK = log(mParameters[5] / var_chaste_interface__K__K_i) / var_Environment__FonRT; // mV + const double var_IK1__ak1 = 1.02 / (1 + exp(-14.1227775 + 0.23849999999999999 * var_chaste_interface__cell__V - 0.23849999999999999 * var_reversal_potentials__EK)); // per_ms + const double var_IK1__bk1 = (exp(-36.698642499999998 + 0.061749999999999999 * var_chaste_interface__cell__V - 0.061749999999999999 * var_reversal_potentials__EK) + 0.49124000000000001 * exp(0.43983232 + 0.080320000000000003 * var_chaste_interface__cell__V - 0.080320000000000003 * var_reversal_potentials__EK)) / (1 + exp(-2.4444678999999998 + 0.51429999999999998 * var_reversal_potentials__EK - 0.51429999999999998 * var_chaste_interface__cell__V)); // per_ms + const double var_IK1__gK1 = var_IK1__GK1_ * var_IK1__ak1 / (var_IK1__ak1 + var_IK1__bk1); // mS_per_uF + const double var_IK1__IK1 = (-var_reversal_potentials__EK + var_chaste_interface__cell__V) * var_IK1__gK1; // uA_per_uF + const double var_IKp__ikp = (-var_reversal_potentials__EK + var_chaste_interface__cell__V) * var_IKp__GKpmax / (1 + exp(1.2521739130434781 - 0.16722408026755853 * var_chaste_interface__cell__V)); // uA_per_uF + const double var_IKr__ikr = (-var_reversal_potentials__EK + var_chaste_interface__cell__V) * var_IKr__gkr * var_IKr__r * var_chaste_interface__IKr__xr; // uA_per_uF + const double var_reversal_potentials__ENa = log(mParameters[6] / var_chaste_interface__Na__Na_i) / var_Environment__FonRT; // mV + const double var_INa__ina = pow(var_chaste_interface__INa__m, 3) * (-var_reversal_potentials__ENa + var_chaste_interface__cell__V) * mParameters[8] * var_chaste_interface__INa__H * var_chaste_interface__INa__J; // uA_per_uF + const double var_INab__inab = (-var_reversal_potentials__ENa + var_chaste_interface__cell__V) * var_INab__GNab; // uA_per_uF + const double var_cell__naiont = 3 * var_INaCa__inaca + 3 * var_INaK__inak + var_ICaL__ilcana + var_INa__ina + var_INab__inab; // uA_per_uF + const double var_reversal_potentials__prnak = 0.018329999999999999; // dimensionless + const double var_reversal_potentials__EKs = log((mParameters[6] * var_reversal_potentials__prnak + mParameters[5]) / (var_chaste_interface__Na__Na_i * var_reversal_potentials__prnak + var_chaste_interface__K__K_i)) / var_Environment__FonRT; // mV + const double var_IKs__iks = (-var_reversal_potentials__EKs + var_chaste_interface__cell__V) * var_IKs__gks * var_chaste_interface__IKs__xs1 * var_chaste_interface__IKs__xs2; // uA_per_uF + const double var_cell__kiont = -2 * var_INaK__inak + var_ICaL__ilcak + var_IK1__IK1 + var_IKp__ikp + var_IKr__ikr + var_IKs__iks + var_cell__i_Stim; // uA_per_uF + const double var_chaste_interface__i_ionic = (var_cell__caiont + var_cell__kiont + var_cell__naiont) * HeartConfig::Instance()->GetCapacitance(); // uA_per_cm2 + + const double i_ionic = var_chaste_interface__i_ionic; + EXCEPT_IF_NOT(!std::isnan(i_ionic)); + return i_ionic; + } + + void Dynamiclivshitz_rudy_2007FromCellMLRushLarsen::EvaluateEquations(double var_chaste_interface__Environment__time, std::vector &rDY, std::vector &rAlphaOrTau, std::vector &rBetaOrInf) + { + std::vector& rY = rGetStateVariables(); + double var_chaste_interface__cell__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: mV; Initial value: -89.4356034692784 + double var_chaste_interface__INa__H = rY[1]; + // Units: dimensionless; Initial value: 0.994401369032678 + double var_chaste_interface__INa__m = rY[2]; + // Units: dimensionless; Initial value: 0.000734780346592185 + double var_chaste_interface__INa__J = rY[3]; + // Units: dimensionless; Initial value: 0.996100688673679 + double var_chaste_interface__ICaL__d = rY[4]; + // Units: dimensionless; Initial value: 3.2514786721066e-27 + double var_chaste_interface__ICaL__f = rY[5]; + // Units: dimensionless; Initial value: 0.997404948824816 + double var_chaste_interface__IKr__xr = rY[6]; + // Units: dimensionless; Initial value: 0.000162194715543637 + double var_chaste_interface__IKs__xs1 = rY[7]; + // Units: dimensionless; Initial value: 0.0285147332973946 + double var_chaste_interface__IKs__xs2 = rY[8]; + // Units: dimensionless; Initial value: 0.0764114040188678 + double var_chaste_interface__ICaT__b = rY[9]; + // Units: dimensionless; Initial value: 0.000927461915392873 + double var_chaste_interface__ICaT__g = rY[10]; + // Units: dimensionless; Initial value: 0.952834331760863 + double var_chaste_interface__Irel__Rel = rY[11]; + // Units: mM_per_ms; Initial value: 1.06874246141923e-23 + double var_chaste_interface__Na__Na_i = rY[12]; + // Units: mM; Initial value: 16.612739313555 + double var_chaste_interface__K__K_i = rY[13]; + // Units: mM; Initial value: 139.730914103161 + double var_chaste_interface__Ca__Ca_T = rY[14]; + // Units: mM; Initial value: 0.0257059808595638 + double var_chaste_interface__Ca__Ca_JSR_T = rY[15]; + // Units: mM; Initial value: 7.87371650296567 + double var_chaste_interface__Ca__Ca_NSR = rY[16]; + // Units: mM; Initial value: 2.71518235696672 + + + // Mathematics + double d_dt_chaste_interface_var_cell__V; + const double var_Ca__cmdnbar = 0.050000000000000003; // mM + const double var_Ca__kmcmdn = 0.0023800000000000002; // mM + const double var_Ca__kmtrpn = 0.00050000000000000001; // mM + const double var_Ca__dmyo = -var_chaste_interface__Ca__Ca_T * var_Ca__kmcmdn * var_Ca__kmtrpn; // mM3 + const double var_Ca__trpnbar = 0.070000000000000007; // mM + const double var_Ca__bmyo = -var_chaste_interface__Ca__Ca_T + var_Ca__cmdnbar + var_Ca__kmcmdn + var_Ca__kmtrpn + var_Ca__trpnbar; // mM + const double var_Ca__cmyo = var_Ca__cmdnbar * var_Ca__kmtrpn + var_Ca__kmcmdn * var_Ca__kmtrpn + var_Ca__kmcmdn * var_Ca__trpnbar - (var_Ca__kmcmdn + var_Ca__kmtrpn) * var_chaste_interface__Ca__Ca_T; // mM2 + const double var_Ca__Ca_i = -0.33333333333333331 * var_Ca__bmyo + 1.1547005383792515 * sqrt(-var_Ca__cmyo + 0.33333333333333331 * pow(var_Ca__bmyo, 2)) * cos(0.33333333333333331 * acos(0.096225044864937631 * pow((-var_Ca__cmyo + 0.33333333333333331 * pow(var_Ca__bmyo, 2)), (-1.5)) * (-2 * pow(var_Ca__bmyo, 3) - 27 * var_Ca__dmyo + 9 * var_Ca__bmyo * var_Ca__cmyo))); // mM + const double d_dt_chaste_interface_var_Ca__Over = 0; // 1 / ms + const double var_Environment__F = 96485; // C_per_mole + const double var_Environment__R = 8314; // mJ_per_mole_K + const double var_Environment__Temp = 310; // kelvin + const double var_Environment__FonRT = var_Environment__F / (var_Environment__R * var_Environment__Temp); // per_mV + const double var_ICaL__gacai = 1; // dimensionless + const double var_ICaL__gacao = 0.34100000000000003; // dimensionless + const double var_ICaL__gaki = 0.75; // dimensionless + const double var_ICaL__gako = 0.75; // dimensionless + const double var_ICaL__ganai = 0.75; // dimensionless + const double var_ICaL__ganao = 0.75; // dimensionless + const double var_ICaL__kmca = 0.00059999999999999995; // mM + const double var_ICaL__fca = 1 / (1 + var_Ca__Ca_i / var_ICaL__kmca); // dimensionless + const double var_ICaL__pk = 1.9299999999999999e-7; // L_per_F_ms + const double var_ICaL__pna = 6.75e-7; // L_per_F_ms + const double var_ICaT__gcat = 0.050000000000000003; // mS_per_uF + const double var_ICab__gcab = 0.003016; // mS_per_uF + const double var_IK1__GK1max = 0.75; // mS_per_uF + const double var_IK1__GK1_ = 0.43033148291193518 * sqrt(mParameters[5]) * var_IK1__GK1max; // mS_per_uF + const double var_IKp__GKpmax = 0.0055199999999999997; // mS_per_uF + const double var_IKr__gkr = 0.43033148291193518 * sqrt(mParameters[5]) * mParameters[11]; // mS_per_uF + const double var_IKs__gks = (1 + 0.59999999999999998 / (1 + 6.4818210260626455e-7 * pow((1 / var_Ca__Ca_i), 1.3999999999999999))) * mParameters[12]; // mS_per_uF + const double var_INaCa__c2 = 0.0001; // dimensionless + const double var_INaCa__gammas = 0.14999999999999999; // dimensionless + const double var_INaK__ibarnak = 2.25; // uA_per_uF + const double var_INaK__kmko = 1.5; // mM + const double var_INaK__kmnai = 10; // mM + const double var_INaK__sigma = -0.14285714285714285 + 0.14285714285714285 * exp(0.01485884101040119 * mParameters[6]); // dimensionless + const double var_INab__GNab = 0.0040000000000000001; // mS_per_uF + const double var_IpCa__ibarpca = 1.1499999999999999; // uA_per_uF + const double var_IpCa__kmpca = 0.00050000000000000001; // mM + const double var_IpCa__ipca = var_Ca__Ca_i * var_IpCa__ibarpca / (var_Ca__Ca_i + var_IpCa__kmpca); // uA_per_uF + const double var_Irel__K_Relss = 1; // mM + const double var_Irel__csqnbar = 10; // mM + const double var_Irel__kmcsqn = 0.80000000000000004; // mM + const double var_Irel__bbb = -var_chaste_interface__Ca__Ca_JSR_T + var_Irel__csqnbar + var_Irel__kmcsqn; // mM + const double var_Irel__c = var_chaste_interface__Ca__Ca_JSR_T * var_Irel__kmcsqn; // mM2 + const double var_Irel__Ca_JSR_free = sqrt(0.25 * pow(var_Irel__bbb, 2) + var_Irel__c) - 0.5 * var_Irel__bbb; // mM + const double var_Irel__qn = 9; // dimensionless + const double var_Irel__tau = 4.75; // ms + const double var_Irel__alpha_Rel = mParameters[1] * var_Irel__tau; // mM_per_mV + const double var_Irel__tau_Rel = var_Irel__tau / (1 + 0.0123 / var_Irel__Ca_JSR_free); // ms + const double var_Itr__tautr = 120; // ms + const double var_Itr__itr = (-var_Irel__Ca_JSR_free + var_chaste_interface__Ca__Ca_NSR) / var_Itr__tautr; // mM_per_ms + const double d_dt_chaste_interface_var_Ca__Ca_JSR_T = -var_chaste_interface__Irel__Rel + var_Itr__itr; // mM / ms + const double var_Iup_Ileak__kmup = 0.00092000000000000003; // mM + const double var_Iup_Ileak__iup = var_Ca__Ca_i * mParameters[2] / (var_Ca__Ca_i + var_Iup_Ileak__kmup); // mM_per_ms + const double var_Iup_Ileak__nsrbar = 15; // mM + const double var_Iup_Ileak__ileak = var_chaste_interface__Ca__Ca_NSR * mParameters[2] * mParameters[0] / var_Iup_Ileak__nsrbar; // mM_per_ms + const double var_ICaL__dss0 = 1 / (1 + exp(-1.6025641025641024 - 0.16025641025641024 * var_chaste_interface__cell__V)); // dimensionless + const double var_ICaL__dss1 = 1 / (1 + exp(-2500 - 41.666666666666664 * var_chaste_interface__cell__V)); // dimensionless + const double var_ICaL__dss = var_ICaL__dss0 * var_ICaL__dss1; // dimensionless + const double var_ICaL__fss = 1 / (1 + exp(4 + 0.125 * var_chaste_interface__cell__V)) + 0.59999999999999998 / (1 + exp(2.5 - 0.050000000000000003 * var_chaste_interface__cell__V)); // dimensionless + const double var_ICaL__ibarca = 4 * (-mParameters[4] * var_ICaL__gacao + var_Ca__Ca_i * var_ICaL__gacai * exp(2 * var_Environment__FonRT * var_chaste_interface__cell__V)) * var_Environment__F * var_Environment__FonRT * mParameters[7] * var_chaste_interface__cell__V / (-1 + exp(2 * var_Environment__FonRT * var_chaste_interface__cell__V)); // uA_per_uF + const double var_ICaL__ibark = (-mParameters[5] * var_ICaL__gako + var_ICaL__gaki * var_chaste_interface__K__K_i * exp(var_Environment__FonRT * var_chaste_interface__cell__V)) * var_Environment__F * var_Environment__FonRT * var_ICaL__pk * var_chaste_interface__cell__V / (-1 + exp(var_Environment__FonRT * var_chaste_interface__cell__V)); // uA_per_uF + const double var_ICaL__ibarna = (-mParameters[6] * var_ICaL__ganao + var_ICaL__ganai * var_chaste_interface__Na__Na_i * exp(var_Environment__FonRT * var_chaste_interface__cell__V)) * var_Environment__F * var_Environment__FonRT * var_ICaL__pna * var_chaste_interface__cell__V / (-1 + exp(var_Environment__FonRT * var_chaste_interface__cell__V)); // uA_per_uF + const double var_ICaL__ilca = var_chaste_interface__ICaL__d * var_chaste_interface__ICaL__f * var_ICaL__fca * var_ICaL__ibarca; // uA_per_uF + const double var_ICaL__ilcak = var_chaste_interface__ICaL__d * var_chaste_interface__ICaL__f * var_ICaL__fca * var_ICaL__ibark; // uA_per_uF + const double var_ICaL__ilcana = var_chaste_interface__ICaL__d * var_chaste_interface__ICaL__f * var_ICaL__fca * var_ICaL__ibarna; // uA_per_uF + const double var_ICaL__taud = 28.571428571428569 * (1 - exp(-1.6025641025641024 - 0.16025641025641024 * var_chaste_interface__cell__V)) * var_ICaL__dss0 / (10 + var_chaste_interface__cell__V); // ms + const double var_ICaL__tauf = 1 / (0.02 + 0.019699999999999999 * exp(-0.113569 * pow((1 + 0.10000000000000001 * var_chaste_interface__cell__V), 2))); // ms + const double var_ICaT__aa = 1 - 1 / (1 + exp(-416.66666666666669 * var_chaste_interface__cell__V)); // dimensionless + const double var_ICaT__bss = 1 / (1 + exp(-1.2962962962962963 - 0.092592592592592587 * var_chaste_interface__cell__V)); // dimensionless + const double var_ICaT__gss = 1 / (1 + exp(10.714285714285715 + 0.17857142857142858 * var_chaste_interface__cell__V)); // dimensionless + const double var_ICaT__taub = 3.7000000000000002 + 6.0999999999999996 / (1 + exp(5.5555555555555554 + 0.22222222222222221 * var_chaste_interface__cell__V)); // ms + const double var_ICaT__taug = 12 - 12 * var_ICaT__aa + (12 - 0.875 * var_chaste_interface__cell__V) * var_ICaT__aa; // ms + const double var_ICab__icab = (-0.5 * log(mParameters[4] / var_Ca__Ca_i) / var_Environment__FonRT + var_chaste_interface__cell__V) * var_ICab__gcab; // uA_per_uF + const double var_IKr__r = 1 / (1 + exp(0.4017857142857143 + 0.044642857142857144 * var_chaste_interface__cell__V)); // dimensionless + const double var_IKr__tauxr = 1 / (0.00060999999999999997 * (38.899999999999999 + var_chaste_interface__cell__V) / (-1 + exp(5.6404999999999994 + 0.14499999999999999 * var_chaste_interface__cell__V)) + 0.0013799999999999999 * (14.199999999999999 + var_chaste_interface__cell__V) / (1 - exp(-1.7465999999999999 - 0.123 * var_chaste_interface__cell__V))); // ms + const double var_IKr__xrss = 1 / (1 + exp(-2.3729411764705883 - 0.23529411764705882 * var_chaste_interface__cell__V)); // dimensionless + const double var_IKs__tauxs = 1 / (0.00013100000000000001 * (30 + var_chaste_interface__cell__V) / (-1 + exp(2.0609999999999999 + 0.068699999999999997 * var_chaste_interface__cell__V)) + 7.1899999999999999e-5 * (30 + var_chaste_interface__cell__V) / (1 - exp(-4.4399999999999995 - 0.14799999999999999 * var_chaste_interface__cell__V))); // ms + const double var_IKs__xss = 1 / (1 + exp(0.089820359281437126 - 0.059880239520958084 * var_chaste_interface__cell__V)); // dimensionless + const double var_INa__a = 1 - 1 / (1 + exp(-1666.6666666666667 - 41.666666666666664 * var_chaste_interface__cell__V)); // per_ms + const double var_INa__aH = 0.13500000000000001 * var_INa__a * exp(-11.764705882352942 + 0.14705882352941177 * mParameters[10] - 0.14705882352941177 * var_chaste_interface__cell__V); // per_ms + const double var_INa__aj = (37.780000000000001 + var_chaste_interface__cell__V) * (-127140 * exp(0.24440000000000001 * var_chaste_interface__cell__V - 0.24440000000000001 * mParameters[10]) - 3.4740000000000003e-5 * exp(0.043909999999999998 * mParameters[10] - 0.043909999999999998 * var_chaste_interface__cell__V)) * var_INa__a / (1 + exp(24.640530000000002 + 0.311 * var_chaste_interface__cell__V)); // per_ms + const double var_INa__am = 0.32000000000000001 * (47.130000000000003 + var_chaste_interface__cell__V) / (1 - exp(-4.7130000000000001 - 0.10000000000000001 * var_chaste_interface__cell__V)); // per_ms + const double var_INa__bH = (3.5600000000000001 * exp(0.079000000000000001 * var_chaste_interface__cell__V - 0.079000000000000001 * mParameters[10]) + 310000 * exp(0.34999999999999998 * var_chaste_interface__cell__V - 0.34999999999999998 * mParameters[10])) * var_INa__a + 7.6923076923076916 * (1 - var_INa__a) / (1 + exp(-0.96036036036036043 - 0.0900900900900901 * var_chaste_interface__cell__V)); // per_ms + const double var_INa__H_inf = 0.01 * mParameters[9] + (1 - 0.01 * mParameters[9]) * var_INa__aH / (var_INa__aH + var_INa__bH); // dimensionless + const double var_INa__bj = 0.1212 * var_INa__a * exp(0.01052 * mParameters[10] - 0.01052 * var_chaste_interface__cell__V) / (1 + exp(-5.5312920000000005 - 0.13780000000000001 * var_chaste_interface__cell__V)) + 0.29999999999999999 * (1 - var_INa__a) * exp(2.5349999999999999e-7 * mParameters[10] - 2.5349999999999999e-7 * var_chaste_interface__cell__V) / (1 + exp(-3.2000000000000002 - 0.10000000000000001 * var_chaste_interface__cell__V)); // per_ms + const double var_INa__bm = 0.080000000000000002 * exp(-0.090909090909090912 * var_chaste_interface__cell__V); // per_ms + const double var_INa__j_inf = 0.01 * mParameters[9] + (1 - 0.01 * mParameters[9]) * var_INa__aj / (var_INa__aj + var_INa__bj); // dimensionless + const double var_INa__tau_H = 1 / (var_INa__aH + var_INa__bH); // ms + const double var_INa__tau_j = 1 / (var_INa__aj + var_INa__bj); // ms + const double var_INaCa__inaca = (-pow(mParameters[6], 3) * var_Ca__Ca_i + pow(var_chaste_interface__Na__Na_i, 3) * mParameters[4] * exp(var_Environment__FonRT * var_chaste_interface__cell__V)) * mParameters[13] * exp((-1 + var_INaCa__gammas) * var_Environment__FonRT * var_chaste_interface__cell__V) / (1 + (pow(mParameters[6], 3) * var_Ca__Ca_i + pow(var_chaste_interface__Na__Na_i, 3) * mParameters[4] * exp(var_Environment__FonRT * var_chaste_interface__cell__V)) * var_INaCa__c2 * exp((-1 + var_INaCa__gammas) * var_Environment__FonRT * var_chaste_interface__cell__V)); // uA_per_uF + const double var_INaK__fnak = 1 / (1 + 0.1245 * exp(-0.10000000000000001 * var_Environment__FonRT * var_chaste_interface__cell__V) + 0.036499999999999998 * var_INaK__sigma * exp(-var_Environment__FonRT * var_chaste_interface__cell__V)); // dimensionless + const double var_INaK__inak = var_INaK__fnak * var_INaK__ibarnak / ((1 + var_INaK__kmko / mParameters[5]) * (1 + pow(var_INaK__kmnai, 2) / pow(var_chaste_interface__Na__Na_i, 2))); // uA_per_uF + const double var_Irel__Rel_ss = var_ICaL__ilca * var_Irel__alpha_Rel / (1 + pow((var_Irel__K_Relss / var_Irel__Ca_JSR_free), var_Irel__qn)); // mM_per_ms + const double d_dt_chaste_interface_var_Irel__Rel = (-var_chaste_interface__Irel__Rel - var_Irel__Rel_ss) / var_Irel__tau_Rel; // mM_per_ms / ms + const double var_cell__i_Stim_converted = GetIntracellularAreaStimulus(var_chaste_interface__Environment__time); // uA_per_cm2 + const double var_cell__i_Stim = var_cell__i_Stim_converted / HeartConfig::Instance()->GetCapacitance(); // uA_per_uF + const double var_cell__l = 0.01; // cm + const double var_cell__ra = 0.0011000000000000001; // cm + const double var_cell__ageo = 2 * M_PI * pow(var_cell__ra, 2) + 2 * M_PI * var_cell__l * var_cell__ra; // cm2 + const double var_cell__Acap = 2 * var_cell__ageo; // uF + const double var_cell__AF = var_cell__Acap / var_Environment__F; // uF_mole_per_C + const double var_cell__vcell = 1000 * M_PI * pow(var_cell__ra, 2) * var_cell__l; // uL + const double var_cell__vjsr = 0.0047999999999999996 * var_cell__vcell; // uL + const double var_cell__vmyo = 0.68000000000000005 * var_cell__vcell; // uL + const double var_cell__vnsr = 0.055199999999999999 * var_cell__vcell; // uL + const double d_dt_chaste_interface_var_Ca__Ca_NSR = -var_Iup_Ileak__ileak - var_Itr__itr * var_cell__vjsr / var_cell__vnsr + var_Iup_Ileak__iup; // mM / ms + const double var_reversal_potentials__ECa = 0.5 * log(mParameters[4] / var_Ca__Ca_i) / var_Environment__FonRT; // mV + const double var_ICaT__icat = pow(var_chaste_interface__ICaT__b, 2) * (-var_reversal_potentials__ECa + var_chaste_interface__cell__V) * var_chaste_interface__ICaT__g * var_ICaT__gcat; // uA_per_uF + const double var_cell__caiont = -2 * var_INaCa__inaca + var_ICaL__ilca + var_ICaT__icat + var_ICab__icab + var_IpCa__ipca; // uA_per_uF + const double d_dt_chaste_interface_var_Ca__Ca_T = (-var_Iup_Ileak__iup + var_Iup_Ileak__ileak) * var_cell__vnsr / var_cell__vmyo + var_chaste_interface__Irel__Rel * var_cell__vjsr / var_cell__vmyo - 0.5 * var_cell__AF * var_cell__caiont / var_cell__vmyo; // mM / ms + const double var_reversal_potentials__EK = log(mParameters[5] / var_chaste_interface__K__K_i) / var_Environment__FonRT; // mV + const double var_IK1__ak1 = 1.02 / (1 + exp(-14.1227775 + 0.23849999999999999 * var_chaste_interface__cell__V - 0.23849999999999999 * var_reversal_potentials__EK)); // per_ms + const double var_IK1__bk1 = (exp(-36.698642499999998 + 0.061749999999999999 * var_chaste_interface__cell__V - 0.061749999999999999 * var_reversal_potentials__EK) + 0.49124000000000001 * exp(0.43983232 + 0.080320000000000003 * var_chaste_interface__cell__V - 0.080320000000000003 * var_reversal_potentials__EK)) / (1 + exp(-2.4444678999999998 + 0.51429999999999998 * var_reversal_potentials__EK - 0.51429999999999998 * var_chaste_interface__cell__V)); // per_ms + const double var_IK1__gK1 = var_IK1__GK1_ * var_IK1__ak1 / (var_IK1__ak1 + var_IK1__bk1); // mS_per_uF + const double var_IK1__IK1 = (-var_reversal_potentials__EK + var_chaste_interface__cell__V) * var_IK1__gK1; // uA_per_uF + const double var_IKp__ikp = (-var_reversal_potentials__EK + var_chaste_interface__cell__V) * var_IKp__GKpmax / (1 + exp(1.2521739130434781 - 0.16722408026755853 * var_chaste_interface__cell__V)); // uA_per_uF + const double var_IKr__ikr = (-var_reversal_potentials__EK + var_chaste_interface__cell__V) * var_IKr__gkr * var_IKr__r * var_chaste_interface__IKr__xr; // uA_per_uF + const double var_reversal_potentials__ENa = log(mParameters[6] / var_chaste_interface__Na__Na_i) / var_Environment__FonRT; // mV + const double var_INa__ina = pow(var_chaste_interface__INa__m, 3) * (-var_reversal_potentials__ENa + var_chaste_interface__cell__V) * mParameters[8] * var_chaste_interface__INa__H * var_chaste_interface__INa__J; // uA_per_uF + const double var_INab__inab = (-var_reversal_potentials__ENa + var_chaste_interface__cell__V) * var_INab__GNab; // uA_per_uF + const double var_cell__naiont = 3 * var_INaCa__inaca + 3 * var_INaK__inak + var_ICaL__ilcana + var_INa__ina + var_INab__inab; // uA_per_uF + const double d_dt_chaste_interface_var_Na__Na_i = -mParameters[3] * var_cell__AF * var_cell__naiont / var_cell__vmyo; // mM / ms + const double var_reversal_potentials__prnak = 0.018329999999999999; // dimensionless + const double var_reversal_potentials__EKs = log((mParameters[6] * var_reversal_potentials__prnak + mParameters[5]) / (var_chaste_interface__Na__Na_i * var_reversal_potentials__prnak + var_chaste_interface__K__K_i)) / var_Environment__FonRT; // mV + const double var_IKs__iks = (-var_reversal_potentials__EKs + var_chaste_interface__cell__V) * var_IKs__gks * var_chaste_interface__IKs__xs1 * var_chaste_interface__IKs__xs2; // uA_per_uF + const double var_cell__kiont = -2 * var_INaK__inak + var_ICaL__ilcak + var_IK1__IK1 + var_IKp__ikp + var_IKr__ikr + var_IKs__iks + var_cell__i_Stim; // uA_per_uF + const double d_dt_chaste_interface_var_K__K_i = -mParameters[3] * var_cell__AF * var_cell__kiont / var_cell__vmyo; // mM / ms + + if (mSetVoltageDerivativeToZero) + { + d_dt_chaste_interface_var_cell__V = 0.0; + } + else + { + d_dt_chaste_interface_var_cell__V = -var_cell__caiont - var_cell__kiont - var_cell__naiont; // mV / ms + } + + rDY[0] = d_dt_chaste_interface_var_cell__V; + rAlphaOrTau[1] = var_INa__tau_H; + rBetaOrInf[1] = var_INa__H_inf; + rAlphaOrTau[2] = var_INa__am; + rBetaOrInf[2] = var_INa__bm; + rAlphaOrTau[3] = var_INa__tau_j; + rBetaOrInf[3] = var_INa__j_inf; + rAlphaOrTau[4] = var_ICaL__taud; + rBetaOrInf[4] = var_ICaL__dss; + rAlphaOrTau[5] = var_ICaL__tauf; + rBetaOrInf[5] = var_ICaL__fss; + rAlphaOrTau[6] = var_IKr__tauxr; + rBetaOrInf[6] = var_IKr__xrss; + rAlphaOrTau[7] = var_IKs__tauxs; + rBetaOrInf[7] = var_IKs__xss; + rAlphaOrTau[8] = 4 * var_IKs__tauxs; + rBetaOrInf[8] = var_IKs__xss; + rAlphaOrTau[9] = var_ICaT__taub; + rBetaOrInf[9] = var_ICaT__bss; + rAlphaOrTau[10] = var_ICaT__taug; + rBetaOrInf[10] = var_ICaT__gss; + rDY[11] = d_dt_chaste_interface_var_Irel__Rel; + rDY[12] = d_dt_chaste_interface_var_Na__Na_i; + rDY[13] = d_dt_chaste_interface_var_K__K_i; + rDY[14] = d_dt_chaste_interface_var_Ca__Ca_T; + rDY[15] = d_dt_chaste_interface_var_Ca__Ca_JSR_T; + rDY[16] = d_dt_chaste_interface_var_Ca__Ca_NSR; + rDY[17] = d_dt_chaste_interface_var_Ca__Over; + } + void Dynamiclivshitz_rudy_2007FromCellMLRushLarsen::ComputeOneStepExceptVoltage(const std::vector &rDY, const std::vector &rAlphaOrTau, const std::vector &rBetaOrInf) + { + std::vector& rY = rGetStateVariables(); + + rY[1] = rBetaOrInf[1] + (rY[1] - rBetaOrInf[1])*exp(-mDt/rAlphaOrTau[1]); + { + const double tau_inv = rAlphaOrTau[2] + rBetaOrInf[2]; + const double y_inf = rAlphaOrTau[2] / tau_inv; + rY[2] = y_inf + (rY[2] - y_inf)*exp(-mDt*tau_inv); + } + rY[3] = rBetaOrInf[3] + (rY[3] - rBetaOrInf[3])*exp(-mDt/rAlphaOrTau[3]); + rY[4] = rBetaOrInf[4] + (rY[4] - rBetaOrInf[4])*exp(-mDt/rAlphaOrTau[4]); + rY[5] = rBetaOrInf[5] + (rY[5] - rBetaOrInf[5])*exp(-mDt/rAlphaOrTau[5]); + rY[6] = rBetaOrInf[6] + (rY[6] - rBetaOrInf[6])*exp(-mDt/rAlphaOrTau[6]); + rY[7] = rBetaOrInf[7] + (rY[7] - rBetaOrInf[7])*exp(-mDt/rAlphaOrTau[7]); + rY[8] = rBetaOrInf[8] + (rY[8] - rBetaOrInf[8])*exp(-mDt/rAlphaOrTau[8]); + rY[9] = rBetaOrInf[9] + (rY[9] - rBetaOrInf[9])*exp(-mDt/rAlphaOrTau[9]); + rY[10] = rBetaOrInf[10] + (rY[10] - rBetaOrInf[10])*exp(-mDt/rAlphaOrTau[10]); + rY[11] += mDt * rDY[11]; + rY[12] += mDt * rDY[12]; + rY[13] += mDt * rDY[13]; + rY[14] += mDt * rDY[14]; + rY[15] += mDt * rDY[15]; + rY[16] += mDt * rDY[16]; + rY[17] += mDt * rDY[17]; + } + + std::vector Dynamiclivshitz_rudy_2007FromCellMLRushLarsen::ComputeDerivedQuantities(double var_chaste_interface__Environment__time, const std::vector & rY) + { + // Inputs: + // Time units: millisecond + double var_chaste_interface__cell__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: mV; Initial value: -89.4356034692784 + double var_chaste_interface__INa__H = rY[1]; + // Units: dimensionless; Initial value: 0.994401369032678 + double var_chaste_interface__INa__m = rY[2]; + // Units: dimensionless; Initial value: 0.000734780346592185 + double var_chaste_interface__INa__J = rY[3]; + // Units: dimensionless; Initial value: 0.996100688673679 + double var_chaste_interface__ICaL__d = rY[4]; + // Units: dimensionless; Initial value: 3.2514786721066e-27 + double var_chaste_interface__ICaL__f = rY[5]; + // Units: dimensionless; Initial value: 0.997404948824816 + double var_chaste_interface__IKr__xr = rY[6]; + // Units: dimensionless; Initial value: 0.000162194715543637 + double var_chaste_interface__IKs__xs1 = rY[7]; + // Units: dimensionless; Initial value: 0.0285147332973946 + double var_chaste_interface__IKs__xs2 = rY[8]; + // Units: dimensionless; Initial value: 0.0764114040188678 + double var_chaste_interface__Na__Na_i = rY[12]; + // Units: mM; Initial value: 16.612739313555 + double var_chaste_interface__K__K_i = rY[13]; + // Units: mM; Initial value: 139.730914103161 + double var_chaste_interface__Ca__Ca_T = rY[14]; + // Units: mM; Initial value: 0.0257059808595638 + + // Mathematics + const double var_Ca__cmdnbar = 0.050000000000000003; // mM + const double var_Ca__kmcmdn = 0.0023800000000000002; // mM + const double var_Ca__kmtrpn = 0.00050000000000000001; // mM + const double var_Ca__dmyo = -var_chaste_interface__Ca__Ca_T * var_Ca__kmcmdn * var_Ca__kmtrpn; // mM3 + const double var_Ca__trpnbar = 0.070000000000000007; // mM + const double var_Ca__bmyo = -var_chaste_interface__Ca__Ca_T + var_Ca__cmdnbar + var_Ca__kmcmdn + var_Ca__kmtrpn + var_Ca__trpnbar; // mM + const double var_Ca__cmyo = var_Ca__cmdnbar * var_Ca__kmtrpn + var_Ca__kmcmdn * var_Ca__kmtrpn + var_Ca__kmcmdn * var_Ca__trpnbar - (var_Ca__kmcmdn + var_Ca__kmtrpn) * var_chaste_interface__Ca__Ca_T; // mM2 + const double var_Ca__Ca_i = -0.33333333333333331 * var_Ca__bmyo + 1.1547005383792515 * sqrt(-var_Ca__cmyo + 0.33333333333333331 * pow(var_Ca__bmyo, 2)) * cos(0.33333333333333331 * acos(0.096225044864937631 * pow((-var_Ca__cmyo + 0.33333333333333331 * pow(var_Ca__bmyo, 2)), (-1.5)) * (-2 * pow(var_Ca__bmyo, 3) - 27 * var_Ca__dmyo + 9 * var_Ca__bmyo * var_Ca__cmyo))); // mM + const double var_Environment__F = 96485; // C_per_mole + const double var_Environment__R = 8314; // mJ_per_mole_K + const double var_Environment__Temp = 310; // kelvin + const double var_Environment__FonRT = var_Environment__F / (var_Environment__R * var_Environment__Temp); // per_mV + const double var_ICaL__gacai = 1; // dimensionless + const double var_ICaL__gacao = 0.34100000000000003; // dimensionless + const double var_ICaL__kmca = 0.00059999999999999995; // mM + const double var_ICaL__fca = 1 / (1 + var_Ca__Ca_i / var_ICaL__kmca); // dimensionless + const double var_IK1__GK1max = 0.75; // mS_per_uF + const double var_IK1__GK1_ = 0.43033148291193518 * sqrt(mParameters[5]) * var_IK1__GK1max; // mS_per_uF + const double var_IKr__gkr = 0.43033148291193518 * sqrt(mParameters[5]) * mParameters[11]; // mS_per_uF + const double var_IKs__gks = (1 + 0.59999999999999998 / (1 + 6.4818210260626455e-7 * pow((1 / var_Ca__Ca_i), 1.3999999999999999))) * mParameters[12]; // mS_per_uF + const double var_INaCa__c2 = 0.0001; // dimensionless + const double var_INaCa__gammas = 0.14999999999999999; // dimensionless + const double var_ICaL__ibarca = 4 * (-mParameters[4] * var_ICaL__gacao + var_Ca__Ca_i * var_ICaL__gacai * exp(2 * var_Environment__FonRT * var_chaste_interface__cell__V)) * var_Environment__F * var_Environment__FonRT * mParameters[7] * var_chaste_interface__cell__V / (-1 + exp(2 * var_Environment__FonRT * var_chaste_interface__cell__V)); // uA_per_uF + const double var_ICaL__ilca = var_chaste_interface__ICaL__d * var_chaste_interface__ICaL__f * var_ICaL__fca * var_ICaL__ibarca; // uA_per_uF + const double var_ICaL__ilca_converted = HeartConfig::Instance()->GetCapacitance() * var_ICaL__ilca; // uA_per_cm2 + const double var_ICaL__tauf = 1 / (0.02 + 0.019699999999999999 * exp(-0.113569 * pow((1 + 0.10000000000000001 * var_chaste_interface__cell__V), 2))); // ms + const double var_IKr__r = 1 / (1 + exp(0.4017857142857143 + 0.044642857142857144 * var_chaste_interface__cell__V)); // dimensionless + const double var_INa__a = 1 - 1 / (1 + exp(-1666.6666666666667 - 41.666666666666664 * var_chaste_interface__cell__V)); // per_ms + const double var_INa__aH = 0.13500000000000001 * var_INa__a * exp(-11.764705882352942 + 0.14705882352941177 * mParameters[10] - 0.14705882352941177 * var_chaste_interface__cell__V); // per_ms + const double var_INa__aj = (37.780000000000001 + var_chaste_interface__cell__V) * (-127140 * exp(0.24440000000000001 * var_chaste_interface__cell__V - 0.24440000000000001 * mParameters[10]) - 3.4740000000000003e-5 * exp(0.043909999999999998 * mParameters[10] - 0.043909999999999998 * var_chaste_interface__cell__V)) * var_INa__a / (1 + exp(24.640530000000002 + 0.311 * var_chaste_interface__cell__V)); // per_ms + const double var_INa__bH = (3.5600000000000001 * exp(0.079000000000000001 * var_chaste_interface__cell__V - 0.079000000000000001 * mParameters[10]) + 310000 * exp(0.34999999999999998 * var_chaste_interface__cell__V - 0.34999999999999998 * mParameters[10])) * var_INa__a + 7.6923076923076916 * (1 - var_INa__a) / (1 + exp(-0.96036036036036043 - 0.0900900900900901 * var_chaste_interface__cell__V)); // per_ms + const double var_INa__bj = 0.1212 * var_INa__a * exp(0.01052 * mParameters[10] - 0.01052 * var_chaste_interface__cell__V) / (1 + exp(-5.5312920000000005 - 0.13780000000000001 * var_chaste_interface__cell__V)) + 0.29999999999999999 * (1 - var_INa__a) * exp(2.5349999999999999e-7 * mParameters[10] - 2.5349999999999999e-7 * var_chaste_interface__cell__V) / (1 + exp(-3.2000000000000002 - 0.10000000000000001 * var_chaste_interface__cell__V)); // per_ms + const double var_INa__tau_H = 1 / (var_INa__aH + var_INa__bH); // ms + const double var_INa__tau_j = 1 / (var_INa__aj + var_INa__bj); // ms + const double var_INaCa__inaca = (-pow(mParameters[6], 3) * var_Ca__Ca_i + pow(var_chaste_interface__Na__Na_i, 3) * mParameters[4] * exp(var_Environment__FonRT * var_chaste_interface__cell__V)) * mParameters[13] * exp((-1 + var_INaCa__gammas) * var_Environment__FonRT * var_chaste_interface__cell__V) / (1 + (pow(mParameters[6], 3) * var_Ca__Ca_i + pow(var_chaste_interface__Na__Na_i, 3) * mParameters[4] * exp(var_Environment__FonRT * var_chaste_interface__cell__V)) * var_INaCa__c2 * exp((-1 + var_INaCa__gammas) * var_Environment__FonRT * var_chaste_interface__cell__V)); // uA_per_uF + const double var_INaCa__inaca_converted = HeartConfig::Instance()->GetCapacitance() * var_INaCa__inaca; // uA_per_cm2 + const double var_cell__i_Stim_converted = GetIntracellularAreaStimulus(var_chaste_interface__Environment__time); // uA_per_cm2 + const double var_reversal_potentials__EK = log(mParameters[5] / var_chaste_interface__K__K_i) / var_Environment__FonRT; // mV + const double var_IK1__ak1 = 1.02 / (1 + exp(-14.1227775 + 0.23849999999999999 * var_chaste_interface__cell__V - 0.23849999999999999 * var_reversal_potentials__EK)); // per_ms + const double var_IK1__bk1 = (exp(-36.698642499999998 + 0.061749999999999999 * var_chaste_interface__cell__V - 0.061749999999999999 * var_reversal_potentials__EK) + 0.49124000000000001 * exp(0.43983232 + 0.080320000000000003 * var_chaste_interface__cell__V - 0.080320000000000003 * var_reversal_potentials__EK)) / (1 + exp(-2.4444678999999998 + 0.51429999999999998 * var_reversal_potentials__EK - 0.51429999999999998 * var_chaste_interface__cell__V)); // per_ms + const double var_IK1__gK1 = var_IK1__GK1_ * var_IK1__ak1 / (var_IK1__ak1 + var_IK1__bk1); // mS_per_uF + const double var_IK1__IK1 = (-var_reversal_potentials__EK + var_chaste_interface__cell__V) * var_IK1__gK1; // uA_per_uF + const double var_IK1__IK1_converted = HeartConfig::Instance()->GetCapacitance() * var_IK1__IK1; // uA_per_cm2 + const double var_IKr__ikr = (-var_reversal_potentials__EK + var_chaste_interface__cell__V) * var_IKr__gkr * var_IKr__r * var_chaste_interface__IKr__xr; // uA_per_uF + const double var_IKr__ikr_converted = HeartConfig::Instance()->GetCapacitance() * var_IKr__ikr; // uA_per_cm2 + const double var_reversal_potentials__ENa = log(mParameters[6] / var_chaste_interface__Na__Na_i) / var_Environment__FonRT; // mV + const double var_INa__ina = pow(var_chaste_interface__INa__m, 3) * (-var_reversal_potentials__ENa + var_chaste_interface__cell__V) * mParameters[8] * var_chaste_interface__INa__H * var_chaste_interface__INa__J; // uA_per_uF + const double var_INa__ina_converted = HeartConfig::Instance()->GetCapacitance() * var_INa__ina; // uA_per_cm2 + const double var_reversal_potentials__prnak = 0.018329999999999999; // dimensionless + const double var_reversal_potentials__EKs = log((mParameters[6] * var_reversal_potentials__prnak + mParameters[5]) / (var_chaste_interface__Na__Na_i * var_reversal_potentials__prnak + var_chaste_interface__K__K_i)) / var_Environment__FonRT; // mV + const double var_IKs__iks = (-var_reversal_potentials__EKs + var_chaste_interface__cell__V) * var_IKs__gks * var_chaste_interface__IKs__xs1 * var_chaste_interface__IKs__xs2; // uA_per_uF + const double var_IKs__iks_converted = HeartConfig::Instance()->GetCapacitance() * var_IKs__iks; // uA_per_cm2 + + std::vector dqs(16); + dqs[0] = var_Ca__Ca_i; + dqs[1] = var_ICaL__ilca_converted; + dqs[2] = var_ICaL__tauf; + dqs[3] = var_INa__ina_converted; + dqs[4] = var_INa__tau_H; + dqs[5] = var_INa__tau_j; + dqs[6] = var_IK1__IK1_converted; + dqs[7] = var_IK1__GK1_; + dqs[8] = var_IK1__gK1; + dqs[9] = var_IKr__ikr_converted; + dqs[10] = var_IKr__gkr; + dqs[11] = var_IKs__iks_converted; + dqs[12] = var_IKs__gks; + dqs[13] = var_INaCa__inaca_converted; + dqs[14] = var_cell__i_Stim_converted; + dqs[15] = var_chaste_interface__Environment__time; + return dqs; + } + +template<> +void OdeSystemInformation::Initialise(void) +{ + this->mSystemName = "LivshitzRudy2007"; + this->mFreeVariableName = "time"; + this->mFreeVariableUnits = "ms"; + + // rY[0]: + this->mVariableNames.push_back("membrane_voltage"); + this->mVariableUnits.push_back("mV"); + this->mInitialConditions.push_back(-89.4356034692784); + + // rY[1]: + this->mVariableNames.push_back("membrane_fast_sodium_current_h_gate"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.994401369032678); + + // rY[2]: + this->mVariableNames.push_back("membrane_fast_sodium_current_m_gate"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.000734780346592185); + + // rY[3]: + this->mVariableNames.push_back("membrane_fast_sodium_current_j_gate"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.996100688673679); + + // rY[4]: + this->mVariableNames.push_back("membrane_L_type_calcium_current_d_gate"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(3.2514786721066e-27); + + // rY[5]: + this->mVariableNames.push_back("membrane_L_type_calcium_current_f_gate"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.997404948824816); + + // rY[6]: + this->mVariableNames.push_back("IKr__xr"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.000162194715543637); + + // rY[7]: + this->mVariableNames.push_back("IKs__xs1"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.0285147332973946); + + // rY[8]: + this->mVariableNames.push_back("IKs__xs2"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.0764114040188678); + + // rY[9]: + this->mVariableNames.push_back("ICaT__b"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.000927461915392873); + + // rY[10]: + this->mVariableNames.push_back("ICaT__g"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.952834331760863); + + // rY[11]: + this->mVariableNames.push_back("SR_release_current"); + this->mVariableUnits.push_back("mM_per_ms"); + this->mInitialConditions.push_back(1.06874246141923e-23); + + // rY[12]: + this->mVariableNames.push_back("cytosolic_sodium_concentration"); + this->mVariableUnits.push_back("mM"); + this->mInitialConditions.push_back(16.612739313555); + + // rY[13]: + this->mVariableNames.push_back("cytosolic_potassium_concentration"); + this->mVariableUnits.push_back("mM"); + this->mInitialConditions.push_back(139.730914103161); + + // rY[14]: + this->mVariableNames.push_back("Ca__Ca_T"); + this->mVariableUnits.push_back("mM"); + this->mInitialConditions.push_back(0.0257059808595638); + + // rY[15]: + this->mVariableNames.push_back("JSR_calcium_concentration"); + this->mVariableUnits.push_back("mM"); + this->mInitialConditions.push_back(7.87371650296567); + + // rY[16]: + this->mVariableNames.push_back("Ca__Ca_NSR"); + this->mVariableUnits.push_back("mM"); + this->mInitialConditions.push_back(2.71518235696672); + + // rY[17]: + this->mVariableNames.push_back("Ca__Over"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(1e-12); + + // mParameters[0]: + this->mParameterNames.push_back("SR_leak_current_max"); + this->mParameterUnits.push_back("dimensionless"); + + // mParameters[1]: + this->mParameterNames.push_back("SR_release_current_max"); + this->mParameterUnits.push_back("mM_per_mV_ms"); + + // mParameters[2]: + this->mParameterNames.push_back("SR_uptake_current_max"); + this->mParameterUnits.push_back("mM_per_ms"); + + // mParameters[3]: + this->mParameterNames.push_back("concentration_clamp_onoff"); + this->mParameterUnits.push_back("dimensionless"); + + // mParameters[4]: + this->mParameterNames.push_back("extracellular_calcium_concentration"); + this->mParameterUnits.push_back("mM"); + + // mParameters[5]: + this->mParameterNames.push_back("extracellular_potassium_concentration"); + this->mParameterUnits.push_back("mM"); + + // mParameters[6]: + this->mParameterNames.push_back("extracellular_sodium_concentration"); + this->mParameterUnits.push_back("mM"); + + // mParameters[7]: + this->mParameterNames.push_back("membrane_L_type_calcium_current_conductance"); + this->mParameterUnits.push_back("L_per_F_ms"); + + // mParameters[8]: + this->mParameterNames.push_back("membrane_fast_sodium_current_conductance"); + this->mParameterUnits.push_back("mS_per_uF"); + + // mParameters[9]: + this->mParameterNames.push_back("membrane_fast_sodium_current_reduced_inactivation"); + this->mParameterUnits.push_back("dimensionless"); + + // mParameters[10]: + this->mParameterNames.push_back("membrane_fast_sodium_current_shift_inactivation"); + this->mParameterUnits.push_back("mV"); + + // mParameters[11]: + this->mParameterNames.push_back("membrane_rapid_delayed_rectifier_potassium_current_conductance_scaling_factor"); + this->mParameterUnits.push_back("mS_per_uF"); + + // mParameters[12]: + this->mParameterNames.push_back("membrane_slow_delayed_rectifier_potassium_current_conductance_scaling_factor"); + this->mParameterUnits.push_back("mS_per_uF"); + + // mParameters[13]: + this->mParameterNames.push_back("membrane_sodium_calcium_exchanger_current_conductance"); + this->mParameterUnits.push_back("uA_per_uF"); + + // Derived Quantity index [0]: + this->mDerivedQuantityNames.push_back("cytosolic_calcium_concentration"); + this->mDerivedQuantityUnits.push_back("mM"); + + // Derived Quantity index [1]: + this->mDerivedQuantityNames.push_back("membrane_L_type_calcium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [2]: + this->mDerivedQuantityNames.push_back("membrane_L_type_calcium_current_f_gate_tau"); + this->mDerivedQuantityUnits.push_back("ms"); + + // Derived Quantity index [3]: + this->mDerivedQuantityNames.push_back("membrane_fast_sodium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [4]: + this->mDerivedQuantityNames.push_back("membrane_fast_sodium_current_h_gate_tau"); + this->mDerivedQuantityUnits.push_back("ms"); + + // Derived Quantity index [5]: + this->mDerivedQuantityNames.push_back("membrane_fast_sodium_current_j_gate_tau"); + this->mDerivedQuantityUnits.push_back("ms"); + + // Derived Quantity index [6]: + this->mDerivedQuantityNames.push_back("membrane_inward_rectifier_potassium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [7]: + this->mDerivedQuantityNames.push_back("membrane_inward_rectifier_potassium_current_conductance"); + this->mDerivedQuantityUnits.push_back("mS_per_uF"); + + // Derived Quantity index [8]: + this->mDerivedQuantityNames.push_back("membrane_inward_rectifier_potassium_current_conductance_scaling_factor"); + this->mDerivedQuantityUnits.push_back("mS_per_uF"); + + // Derived Quantity index [9]: + this->mDerivedQuantityNames.push_back("membrane_rapid_delayed_rectifier_potassium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [10]: + this->mDerivedQuantityNames.push_back("membrane_rapid_delayed_rectifier_potassium_current_conductance"); + this->mDerivedQuantityUnits.push_back("mS_per_uF"); + + // Derived Quantity index [11]: + this->mDerivedQuantityNames.push_back("membrane_slow_delayed_rectifier_potassium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [12]: + this->mDerivedQuantityNames.push_back("membrane_slow_delayed_rectifier_potassium_current_conductance"); + this->mDerivedQuantityUnits.push_back("mS_per_uF"); + + // Derived Quantity index [13]: + this->mDerivedQuantityNames.push_back("membrane_sodium_calcium_exchanger_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [14]: + this->mDerivedQuantityNames.push_back("membrane_stimulus_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [15]: + this->mDerivedQuantityNames.push_back("time"); + this->mDerivedQuantityUnits.push_back("ms"); + + this->mInitialised = true; +} + +// Serialization for Boost >= 1.36 +#include "SerializationExportWrapperForCpp.hpp" +CHASTE_CLASS_EXPORT(Dynamiclivshitz_rudy_2007FromCellMLRushLarsen) +extern "C" +{ + AbstractCardiacCellInterface* MakeCardiacCell( + boost::shared_ptr pSolver, + boost::shared_ptr pStimulus) + { + return new Dynamiclivshitz_rudy_2007FromCellMLRushLarsen(pSolver, pStimulus); + } + +} diff --git a/chaste_codegen/tests/numerical/baseline/RL/dynamic_livshitz_rudy_2007.hpp b/chaste_codegen/tests/numerical/baseline/RL/dynamic_livshitz_rudy_2007.hpp new file mode 100644 index 00000000..9b9971f2 --- /dev/null +++ b/chaste_codegen/tests/numerical/baseline/RL/dynamic_livshitz_rudy_2007.hpp @@ -0,0 +1,86 @@ +#ifndef DYNAMICLIVSHITZ_RUDY_2007FROMCELLMLRUSHLARSEN_HPP_ +#define DYNAMICLIVSHITZ_RUDY_2007FROMCELLMLRUSHLARSEN_HPP_ + +//! @file +//! +//! This source file was generated from CellML by chaste_codegen version (version omitted as unimportant) +//! +//! Model: LivshitzRudy2007 +//! +//! Processed by chaste_codegen: https://github.com/ModellingWebLab/chaste-codegen +//! (translator: chaste_codegen, model type: RushLarsen) +//! on (date omitted as unimportant) +//! +//! + +#include "ChasteSerialization.hpp" +#include +#include "AbstractDynamicallyLoadableEntity.hpp" +#include "AbstractStimulusFunction.hpp" +#include "AbstractRushLarsenCardiacCell.hpp" + +class Dynamiclivshitz_rudy_2007FromCellMLRushLarsen : public AbstractRushLarsenCardiacCell, public AbstractDynamicallyLoadableEntity +{ + friend class boost::serialization::access; + template + void serialize(Archive & archive, const unsigned int version) + { + archive & boost::serialization::base_object(*this); + archive & boost::serialization::base_object(*this); + } + + // + // Settable parameters and readable variables + // + + +private: +const bool is_concentration[18] = {false, false, false, false, false, false, false, false, false, false, false, false, true, true, false, true, false, false}; +const bool is_probability[18] = {false, true, true, true, true, true, false, false, false, false, false, false, false, false, false, false, false, false}; +public: + + boost::shared_ptr UseCellMLDefaultStimulus(); + Dynamiclivshitz_rudy_2007FromCellMLRushLarsen(boost::shared_ptr /* unused; should be empty */, boost::shared_ptr pIntracellularStimulus); + ~Dynamiclivshitz_rudy_2007FromCellMLRushLarsen(); + void VerifyStateVariables(); + double GetIIonic(const std::vector* pStateVariables=NULL); + void EvaluateEquations(double var_chaste_interface__Environment__time, std::vector &rDY, std::vector &rAlphaOrTau, std::vector &rBetaOrInf); + void ComputeOneStepExceptVoltage(const std::vector &rDY, const std::vector &rAlphaOrTau, const std::vector &rBetaOrInf); + + std::vector ComputeDerivedQuantities(double var_chaste_interface__Environment__time, const std::vector & rY); +}; + +// Needs to be included last +#include "SerializationExportWrapper.hpp" +CHASTE_CLASS_EXPORT(Dynamiclivshitz_rudy_2007FromCellMLRushLarsen) + +namespace boost +{ + namespace serialization + { + template + inline void save_construct_data( + Archive & ar, const Dynamiclivshitz_rudy_2007FromCellMLRushLarsen * t, const unsigned int fileVersion) + { + const boost::shared_ptr p_solver = t->GetSolver(); + const boost::shared_ptr p_stimulus = t->GetStimulusFunction(); + ar << p_solver; + ar << p_stimulus; + } + + template + inline void load_construct_data( + Archive & ar, Dynamiclivshitz_rudy_2007FromCellMLRushLarsen * t, const unsigned int fileVersion) + { + boost::shared_ptr p_solver; + boost::shared_ptr p_stimulus; + ar >> p_solver; + ar >> p_stimulus; + ::new(t)Dynamiclivshitz_rudy_2007FromCellMLRushLarsen(p_solver, p_stimulus); + } + + } + +} + +#endif // DYNAMICLIVSHITZ_RUDY_2007FROMCELLMLRUSHLARSEN_HPP_ \ No newline at end of file diff --git a/chaste_codegen/tests/numerical/baseline/RL/hodgkin_huxley_squid_axon_model_1952_modified.cpp b/chaste_codegen/tests/numerical/baseline/RL/hodgkin_huxley_squid_axon_model_1952_modified.cpp new file mode 100644 index 00000000..063bcd9e --- /dev/null +++ b/chaste_codegen/tests/numerical/baseline/RL/hodgkin_huxley_squid_axon_model_1952_modified.cpp @@ -0,0 +1,309 @@ +//! @file +//! +//! This source file was generated from CellML by chaste_codegen version (version omitted as unimportant) +//! +//! Model: hodgkin_huxley_squid_axon_model_1952_modified +//! +//! Processed by chaste_codegen: https://github.com/ModellingWebLab/chaste-codegen +//! (translator: chaste_codegen, model type: RushLarsen) +//! on (date omitted as unimportant) +//! +//! + +#include "hodgkin_huxley_squid_axon_model_1952_modified.hpp" +#include +#include +#include +#include +#include "Exception.hpp" +#include "OdeSystemInformation.hpp" +#include "RegularStimulus.hpp" +#include "HeartConfig.hpp" +#include "IsNan.hpp" +#include "MathsCustomFunctions.hpp" + + + + + + boost::shared_ptr Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLRushLarsen::UseCellMLDefaultStimulus() + { + // Use the default stimulus specified by CellML metadata + const double var_chaste_interface__membrane__stim_amplitude = -20; // microA_per_cm2 + const double var_chaste_interface__membrane__stim_duration = 0.5; // millisecond + const double var_chaste_interface__membrane__stim_period = 1000; // millisecond + const double var_chaste_interface__membrane__stim_start = 10; // millisecond + boost::shared_ptr p_cellml_stim(new RegularStimulus( + -fabs(var_chaste_interface__membrane__stim_amplitude), + var_chaste_interface__membrane__stim_duration, + var_chaste_interface__membrane__stim_period, + var_chaste_interface__membrane__stim_start + )); + mpIntracellularStimulus = p_cellml_stim; + return p_cellml_stim; + } + + Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLRushLarsen::Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLRushLarsen(boost::shared_ptr /* unused; should be empty */, boost::shared_ptr pIntracellularStimulus) + : AbstractRushLarsenCardiacCell( + 4, + 0, + pIntracellularStimulus) + { + // Time units: millisecond + // + this->mpSystemInfo = OdeSystemInformation::Instance(); + Init(); + + // We have a default stimulus specified in the CellML file metadata + this->mHasDefaultStimulusFromCellML = true; + + this->mParameters[0] = 1; // (var_membrane__Cm) [microF_per_cm2] + this->mParameters[1] = 120; // (var_sodium_channel__g_Na) [milliS_per_cm2] + this->mParameters[2] = 0.29999999999999999; // (var_leakage_current__g_L) [milliS_per_cm2] + this->mParameters[3] = 36; // (var_potassium_channel__g_K) [milliS_per_cm2] + } + + Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLRushLarsen::~Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLRushLarsen() + { + } + + + void Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLRushLarsen::VerifyStateVariables() + { + std::vector& rY = rGetStateVariables(); + std::string error_message = ""; + + for (unsigned i=0; i < 4; i++) + { + if(std::isnan(rY[i])) + { + error_message += "State variable " + this->rGetStateVariableNames()[i] + " is not a number\n"; + } + if(std::isinf(rY[i])) + { + error_message += "State variable " + this->rGetStateVariableNames()[i] + " has become INFINITE\n"; + } + if(this->is_concentration[i] && rY[i] < 0) + { + error_message += "Concentration " + this->rGetStateVariableNames()[i] + " below 0\n"; + } + if(this->is_probability[i] && rY[i] < 0) + { + error_message += "Probability " + this->rGetStateVariableNames()[i] + " below 0\n"; + } + if(this->is_probability[i] && rY[i] > 1) + { + error_message += "Probability " + this->rGetStateVariableNames()[i] + " above 1\n"; + } + } + if (error_message != ""){ + EXCEPTION(DumpState(error_message)); + } + } + + double Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLRushLarsen::GetIIonic(const std::vector* pStateVariables) + { + // For state variable interpolation (SVI) we read in interpolated state variables, + // otherwise for ionic current interpolation (ICI) we use the state variables of this model (node). + if (!pStateVariables) pStateVariables = &rGetStateVariables(); + const std::vector& rY = *pStateVariables; + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -75.0 + double var_chaste_interface__sodium_channel_m_gate__m = rY[1]; + // Units: dimensionless; Initial value: 0.05 + double var_chaste_interface__sodium_channel_h_gate__h = rY[2]; + // Units: dimensionless; Initial value: 0.6 + double var_chaste_interface__potassium_channel_n_gate__n = rY[3]; + // Units: dimensionless; Initial value: 0.325 + + const double var_membrane__E_R = -75; // millivolt + const double var_leakage_current__E_L = 10.613 + var_membrane__E_R; // millivolt + const double var_leakage_current__i_L = (-var_leakage_current__E_L + var_chaste_interface__membrane__V) * mParameters[2]; // microA_per_cm2 + const double var_potassium_channel__E_K = -12 + var_membrane__E_R; // millivolt + const double var_potassium_channel__i_K = pow(var_chaste_interface__potassium_channel_n_gate__n, 4) * (-var_potassium_channel__E_K + var_chaste_interface__membrane__V) * mParameters[3]; // microA_per_cm2 + const double var_sodium_channel__E_Na = 115 + var_membrane__E_R; // millivolt + const double var_sodium_channel__i_Na = pow(var_chaste_interface__sodium_channel_m_gate__m, 3) * (-var_sodium_channel__E_Na + var_chaste_interface__membrane__V) * mParameters[1] * var_chaste_interface__sodium_channel_h_gate__h; // microA_per_cm2 + const double var_chaste_interface__i_ionic = var_leakage_current__i_L + var_potassium_channel__i_K + var_sodium_channel__i_Na; // uA_per_cm2 + + const double i_ionic = var_chaste_interface__i_ionic; + EXCEPT_IF_NOT(!std::isnan(i_ionic)); + return i_ionic; + } + + void Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLRushLarsen::EvaluateEquations(double var_chaste_interface__environment__time, std::vector &rDY, std::vector &rAlphaOrTau, std::vector &rBetaOrInf) + { + std::vector& rY = rGetStateVariables(); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -75.0 + double var_chaste_interface__sodium_channel_m_gate__m = rY[1]; + // Units: dimensionless; Initial value: 0.05 + double var_chaste_interface__sodium_channel_h_gate__h = rY[2]; + // Units: dimensionless; Initial value: 0.6 + double var_chaste_interface__potassium_channel_n_gate__n = rY[3]; + // Units: dimensionless; Initial value: 0.325 + + // Mathematics + double d_dt_chaste_interface_var_membrane__V; + const double var_potassium_channel_n_gate__B = -0.10000000000000001; // per_millivolt + const double var_potassium_channel_n_gate__A = -0.01 / var_potassium_channel_n_gate__B; // per_millisecond + const double var_potassium_channel_n_gate__beta_n = 0.125 * exp(0.9375 + 0.012500000000000001 * var_chaste_interface__membrane__V); // per_millisecond + const double var_potassium_channel_n_gate__v0 = -65; // millivolt + const double var_potassium_channel_n_gate__U = (-var_potassium_channel_n_gate__v0 + var_chaste_interface__membrane__V) * var_potassium_channel_n_gate__B; // dimensionless + const double var_potassium_channel_n_gate__alpha_n = (((var_potassium_channel_n_gate__U >= -9.9999999999999995e-8) && (var_potassium_channel_n_gate__U <= 9.9999999999999995e-8)) ? ((1 - 0.5 * var_potassium_channel_n_gate__U) * var_potassium_channel_n_gate__A) : (var_potassium_channel_n_gate__A * var_potassium_channel_n_gate__U / (-1 + exp(var_potassium_channel_n_gate__U)))); // per_millisecond + const double var_sodium_channel_h_gate__alpha_h = 0.070000000000000007 * exp(-3.75 - 0.050000000000000003 * var_chaste_interface__membrane__V); // per_millisecond + const double var_sodium_channel_h_gate__beta_h = 1 / (1 + exp(-4.5 - 0.10000000000000001 * var_chaste_interface__membrane__V)); // per_millisecond + const double var_sodium_channel_m_gate__B = -0.10000000000000001; // per_millivolt + const double var_sodium_channel_m_gate__A = -0.10000000000000001 / var_sodium_channel_m_gate__B; // per_millisecond + const double var_sodium_channel_m_gate__beta_m = 4 * exp(-4.166666666666667 - 0.055555555555555552 * var_chaste_interface__membrane__V); // per_millisecond + const double var_sodium_channel_m_gate__v0 = -50; // millivolt + const double var_sodium_channel_m_gate__U = (-var_sodium_channel_m_gate__v0 + var_chaste_interface__membrane__V) * var_sodium_channel_m_gate__B; // dimensionless + const double var_sodium_channel_m_gate__alpha_m = (((var_sodium_channel_m_gate__U >= -9.9999999999999995e-8) && (var_sodium_channel_m_gate__U <= 9.9999999999999995e-8)) ? ((1 - 0.5 * var_sodium_channel_m_gate__U) * var_sodium_channel_m_gate__A) : (var_sodium_channel_m_gate__A * var_sodium_channel_m_gate__U / (-1 + exp(var_sodium_channel_m_gate__U)))); // per_millisecond + + if (mSetVoltageDerivativeToZero) + { + d_dt_chaste_interface_var_membrane__V = 0.0; + } + else + { + const double var_membrane__E_R = -75; // millivolt + const double var_leakage_current__E_L = 10.613 + var_membrane__E_R; // millivolt + const double var_leakage_current__i_L = (-var_leakage_current__E_L + var_chaste_interface__membrane__V) * mParameters[2]; // microA_per_cm2 + const double var_membrane__i_Stim = GetIntracellularAreaStimulus(var_chaste_interface__environment__time); // microA_per_cm2 + const double var_potassium_channel__E_K = -12 + var_membrane__E_R; // millivolt + const double var_potassium_channel__i_K = pow(var_chaste_interface__potassium_channel_n_gate__n, 4) * (-var_potassium_channel__E_K + var_chaste_interface__membrane__V) * mParameters[3]; // microA_per_cm2 + const double var_sodium_channel__E_Na = 115 + var_membrane__E_R; // millivolt + const double var_sodium_channel__i_Na = pow(var_chaste_interface__sodium_channel_m_gate__m, 3) * (-var_sodium_channel__E_Na + var_chaste_interface__membrane__V) * mParameters[1] * var_chaste_interface__sodium_channel_h_gate__h; // microA_per_cm2 + d_dt_chaste_interface_var_membrane__V = (-var_leakage_current__i_L - var_membrane__i_Stim - var_potassium_channel__i_K - var_sodium_channel__i_Na) / mParameters[0]; // millivolt / millisecond + } + + rDY[0] = d_dt_chaste_interface_var_membrane__V; + rAlphaOrTau[1] = var_sodium_channel_m_gate__alpha_m; + rBetaOrInf[1] = var_sodium_channel_m_gate__beta_m; + rAlphaOrTau[2] = var_sodium_channel_h_gate__alpha_h; + rBetaOrInf[2] = var_sodium_channel_h_gate__beta_h; + rAlphaOrTau[3] = var_potassium_channel_n_gate__alpha_n; + rBetaOrInf[3] = var_potassium_channel_n_gate__beta_n; + } + void Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLRushLarsen::ComputeOneStepExceptVoltage(const std::vector &rDY, const std::vector &rAlphaOrTau, const std::vector &rBetaOrInf) + { + std::vector& rY = rGetStateVariables(); + + { + const double tau_inv = rAlphaOrTau[1] + rBetaOrInf[1]; + const double y_inf = rAlphaOrTau[1] / tau_inv; + rY[1] = y_inf + (rY[1] - y_inf)*exp(-mDt*tau_inv); + } + { + const double tau_inv = rAlphaOrTau[2] + rBetaOrInf[2]; + const double y_inf = rAlphaOrTau[2] / tau_inv; + rY[2] = y_inf + (rY[2] - y_inf)*exp(-mDt*tau_inv); + } + { + const double tau_inv = rAlphaOrTau[3] + rBetaOrInf[3]; + const double y_inf = rAlphaOrTau[3] / tau_inv; + rY[3] = y_inf + (rY[3] - y_inf)*exp(-mDt*tau_inv); + } + } + + std::vector Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLRushLarsen::ComputeDerivedQuantities(double var_chaste_interface__environment__time, const std::vector & rY) + { + // Inputs: + // Time units: millisecond + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -75.0 + double var_chaste_interface__sodium_channel_m_gate__m = rY[1]; + // Units: dimensionless; Initial value: 0.05 + double var_chaste_interface__sodium_channel_h_gate__h = rY[2]; + // Units: dimensionless; Initial value: 0.6 + double var_chaste_interface__potassium_channel_n_gate__n = rY[3]; + // Units: dimensionless; Initial value: 0.325 + + // Mathematics + const double var_membrane__E_R = -75; // millivolt + const double var_leakage_current__E_L = 10.613 + var_membrane__E_R; // millivolt + const double var_leakage_current__i_L = (-var_leakage_current__E_L + var_chaste_interface__membrane__V) * mParameters[2]; // microA_per_cm2 + const double var_membrane__i_Stim = GetIntracellularAreaStimulus(var_chaste_interface__environment__time); // microA_per_cm2 + const double var_potassium_channel__E_K = -12 + var_membrane__E_R; // millivolt + const double var_potassium_channel__i_K = pow(var_chaste_interface__potassium_channel_n_gate__n, 4) * (-var_potassium_channel__E_K + var_chaste_interface__membrane__V) * mParameters[3]; // microA_per_cm2 + const double var_sodium_channel__E_Na = 115 + var_membrane__E_R; // millivolt + const double var_sodium_channel__i_Na = pow(var_chaste_interface__sodium_channel_m_gate__m, 3) * (-var_sodium_channel__E_Na + var_chaste_interface__membrane__V) * mParameters[1] * var_chaste_interface__sodium_channel_h_gate__h; // microA_per_cm2 + + std::vector dqs(5); + dqs[0] = var_sodium_channel__i_Na; + dqs[1] = var_leakage_current__i_L; + dqs[2] = var_potassium_channel__i_K; + dqs[3] = var_membrane__i_Stim; + dqs[4] = var_chaste_interface__environment__time; + return dqs; + } + +template<> +void OdeSystemInformation::Initialise(void) +{ + this->mSystemName = "hodgkin_huxley_squid_axon_model_1952_modified"; + this->mFreeVariableName = "time"; + this->mFreeVariableUnits = "millisecond"; + + // rY[0]: + this->mVariableNames.push_back("membrane_voltage"); + this->mVariableUnits.push_back("millivolt"); + this->mInitialConditions.push_back(-75.0); + + // rY[1]: + this->mVariableNames.push_back("sodium_channel_m_gate__m"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.05); + + // rY[2]: + this->mVariableNames.push_back("sodium_channel_h_gate__h"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.6); + + // rY[3]: + this->mVariableNames.push_back("potassium_channel_n_gate__n"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.325); + + // mParameters[0]: + this->mParameterNames.push_back("membrane_capacitance"); + this->mParameterUnits.push_back("microF_per_cm2"); + + // mParameters[1]: + this->mParameterNames.push_back("membrane_fast_sodium_current_conductance"); + this->mParameterUnits.push_back("milliS_per_cm2"); + + // mParameters[2]: + this->mParameterNames.push_back("membrane_leakage_current_conductance"); + this->mParameterUnits.push_back("milliS_per_cm2"); + + // mParameters[3]: + this->mParameterNames.push_back("membrane_potassium_current_conductance"); + this->mParameterUnits.push_back("milliS_per_cm2"); + + // Derived Quantity index [0]: + this->mDerivedQuantityNames.push_back("membrane_fast_sodium_current"); + this->mDerivedQuantityUnits.push_back("microA_per_cm2"); + + // Derived Quantity index [1]: + this->mDerivedQuantityNames.push_back("membrane_leakage_current"); + this->mDerivedQuantityUnits.push_back("microA_per_cm2"); + + // Derived Quantity index [2]: + this->mDerivedQuantityNames.push_back("membrane_potassium_current"); + this->mDerivedQuantityUnits.push_back("microA_per_cm2"); + + // Derived Quantity index [3]: + this->mDerivedQuantityNames.push_back("membrane_stimulus_current"); + this->mDerivedQuantityUnits.push_back("microA_per_cm2"); + + // Derived Quantity index [4]: + this->mDerivedQuantityNames.push_back("time"); + this->mDerivedQuantityUnits.push_back("millisecond"); + + this->mInitialised = true; +} + +// Serialization for Boost >= 1.36 +#include "SerializationExportWrapperForCpp.hpp" +CHASTE_CLASS_EXPORT(Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLRushLarsen) + diff --git a/chaste_codegen/tests/numerical/baseline/RL/hodgkin_huxley_squid_axon_model_1952_modified.hpp b/chaste_codegen/tests/numerical/baseline/RL/hodgkin_huxley_squid_axon_model_1952_modified.hpp new file mode 100644 index 00000000..93d2b4a7 --- /dev/null +++ b/chaste_codegen/tests/numerical/baseline/RL/hodgkin_huxley_squid_axon_model_1952_modified.hpp @@ -0,0 +1,85 @@ +#ifndef CELLHODGKIN_HUXLEY_SQUID_AXON_MODEL_1952_MODIFIEDFROMCELLMLRUSHLARSEN_HPP_ +#define CELLHODGKIN_HUXLEY_SQUID_AXON_MODEL_1952_MODIFIEDFROMCELLMLRUSHLARSEN_HPP_ + +//! @file +//! +//! This source file was generated from CellML by chaste_codegen version (version omitted as unimportant) +//! +//! Model: hodgkin_huxley_squid_axon_model_1952_modified +//! +//! Processed by chaste_codegen: https://github.com/ModellingWebLab/chaste-codegen +//! (translator: chaste_codegen, model type: RushLarsen) +//! on (date omitted as unimportant) +//! +//! + +#include "ChasteSerialization.hpp" +#include +#include "AbstractStimulusFunction.hpp" +#include "AbstractRushLarsenCardiacCell.hpp" + +class Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLRushLarsen : public AbstractRushLarsenCardiacCell +{ + friend class boost::serialization::access; + template + void serialize(Archive & archive, const unsigned int version) + { + archive & boost::serialization::base_object(*this); + + } + + // + // Settable parameters and readable variables + // + + +private: +const bool is_concentration[4] = {false, false, false, false}; +const bool is_probability[4] = {false, false, false, false}; +public: + + boost::shared_ptr UseCellMLDefaultStimulus(); + Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLRushLarsen(boost::shared_ptr /* unused; should be empty */, boost::shared_ptr pIntracellularStimulus); + ~Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLRushLarsen(); + void VerifyStateVariables(); + double GetIIonic(const std::vector* pStateVariables=NULL); + void EvaluateEquations(double var_chaste_interface__environment__time, std::vector &rDY, std::vector &rAlphaOrTau, std::vector &rBetaOrInf); + void ComputeOneStepExceptVoltage(const std::vector &rDY, const std::vector &rAlphaOrTau, const std::vector &rBetaOrInf); + + std::vector ComputeDerivedQuantities(double var_chaste_interface__environment__time, const std::vector & rY); +}; + +// Needs to be included last +#include "SerializationExportWrapper.hpp" +CHASTE_CLASS_EXPORT(Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLRushLarsen) + +namespace boost +{ + namespace serialization + { + template + inline void save_construct_data( + Archive & ar, const Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLRushLarsen * t, const unsigned int fileVersion) + { + const boost::shared_ptr p_solver = t->GetSolver(); + const boost::shared_ptr p_stimulus = t->GetStimulusFunction(); + ar << p_solver; + ar << p_stimulus; + } + + template + inline void load_construct_data( + Archive & ar, Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLRushLarsen * t, const unsigned int fileVersion) + { + boost::shared_ptr p_solver; + boost::shared_ptr p_stimulus; + ar >> p_solver; + ar >> p_stimulus; + ::new(t)Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLRushLarsen(p_solver, p_stimulus); + } + + } + +} + +#endif // CELLHODGKIN_HUXLEY_SQUID_AXON_MODEL_1952_MODIFIEDFROMCELLMLRUSHLARSEN_HPP_ \ No newline at end of file diff --git a/chaste_codegen/tests/numerical/baseline/RL_C/aslanidi_Purkinje_model_2009.c b/chaste_codegen/tests/numerical/baseline/RL_C/aslanidi_Purkinje_model_2009.c new file mode 100644 index 00000000..1f019779 --- /dev/null +++ b/chaste_codegen/tests/numerical/baseline/RL_C/aslanidi_Purkinje_model_2009.c @@ -0,0 +1,816 @@ +//=========================================================================== +// This source file was generated from CellML by chaste_codegen version (version omitted as unimportant) +// +// Model: aslanidi_2009 +// +// Processed by chaste_codegen: https://github.com/ModellingWebLab/chaste-codegen +// (translator: chaste_codegen, model type: RushLarsenC) +// on (date omitted as unimportant) +// +// +//=========================================================================== + + +#include "aslanidi_Purkinje_model_2009.h" + +//------------------------------------------------------------------------------ + +#include +#include + +//------------------------------------------------------------------------------ +// State variables +//------------------------------------------------------------------------------ + +extern double Y[_NB_OF_STATE_VARIABLES_]; +double dY[_NB_OF_STATE_VARIABLES_]; +double Ynew[_NB_OF_STATE_VARIABLES_]; +// 0: V (units: millivolt, initial value: -83.43812846286808, component: membrane) +// 1: Ca_i (units: millimolar, initial value: 0.00022355433459434943, component: Ca_i) +// 2: m (units: dimensionless, initial value: 0.002003390432234504, component: i_Na_m_gate) +// 3: h (units: dimensionless, initial value: 0.9786390933308567, component: i_Na_h_gate) +// 4: j (units: dimensionless, initial value: 0.09866447258167589, component: i_Na_j_gate) +// 5: m_L (units: dimensionless, initial value: 0.002003390432234504, component: i_Na_L_m_L_gate) +// 6: h_L (units: dimensionless, initial value: 0.8946968372659203, component: i_Na_L_h_L_gate) +// 7: d (units: dimensionless, initial value: 2.322223865147363e-06, component: i_Ca_L_d_gate) +// 8: f (units: dimensionless, initial value: 0.9985607329462358, component: i_Ca_L_f_gate) +// 9: f2 (units: dimensionless, initial value: 0.8173435436674658, component: i_Ca_L_f2_gate) +// 10: f_Ca (units: dimensionless, initial value: 0.9610551285529658, component: i_Ca_L_f_Ca_gate) +// 11: f_Ca2 (units: dimensionless, initial value: 0.868690796671854, component: i_Ca_L_f_Ca2_gate) +// 12: b (units: dimensionless, initial value: 0.0002563937630984438, component: i_Ca_T_b_gate) +// 13: g (units: dimensionless, initial value: 0.9720432601848331, component: i_Ca_T_g_gate) +// 14: a (units: dimensionless, initial value: 0.0004238729429342389, component: i_to_1_a_gate) +// 15: i (units: dimensionless, initial value: 0.9990935802459496, component: i_to_1_i_gate) +// 16: i2 (units: dimensionless, initial value: 0.9777368439681764, component: i_to_1_i2_gate) +// 17: xr (units: dimensionless, initial value: 0.07084939408222911, component: i_Kr_xr_gate) +// 18: xs1 (units: dimensionless, initial value: 0.0011737654433043125, component: i_Ks_xs1_gate) +// 19: xs2 (units: dimensionless, initial value: 0.001179442867470093, component: i_Ks_xs2_gate) +// 20: a (units: dimensionless, initial value: 0.0014909437525000811, component: i_to_2_a_gate) +// 21: Na_i (units: millimolar, initial value: 9.927155552932733, component: intracellular_ion_concentrations) +// 22: Cl_i (units: millimolar, initial value: 18.904682470140408, component: intracellular_ion_concentrations) +// 23: K_i (units: millimolar, initial value: 141.9670801746057, component: intracellular_ion_concentrations) +// 24: Ca_MK_trap (units: dimensionless, initial value: 8.789168284782809e-06, component: Ca_MK_act) +// 25: Ca_NSR (units: millimolar, initial value: 1.2132524695849454, component: Ca_NSR) +// 26: Ca_JSR (units: millimolar, initial value: 1.1433050636518596, component: Ca_JSR) +// 27: Ca_r (units: millimolar, initial value: 0.00022418117117903934, component: Ca_r) +// 28: ri (units: dimensionless, initial value: 0.7802870066567904, component: q_rel_ri_gate) +// 29: ro (units: dimensionless, initial value: 1.2785734760674763e-09, component: q_rel_ro_gate) + +double Vmem; +double time; + +char YNames[_NB_OF_STATE_VARIABLES_][11]; +char YUnits[_NB_OF_STATE_VARIABLES_][14]; +char YComponents[_NB_OF_STATE_VARIABLES_][33]; + +//------------------------------------------------------------------------------ +// Constants +//------------------------------------------------------------------------------ + +double A0_bck; // dimensionless (in A0_bc) +double Ampl_gain; // dimensionless (in Ampl_gai) +double Cext; // picoF (in Cex) +double E_l; // millivolt (in E_) +double I; // dimensionless (in ) +double R_seal; // ohm (in R_sea) +double Scale_bck; // dimensionless (in Scale_bc) +double Scaling; // dimensionless (in Scalin) +double k_bck; // one_over_millivolt (in k_bc) +double leak_comp_perc; // dimensionless (in leak_comp_per) +double q_leak_max; // millimolar_per_millisecond (in q_leak) +double g_rel_max; // per_millisecond (in q_rel) +double q_up_max; // millimolar_per_millisecond (in q_up) +double conc_clamp; // dimensionless (in intracellular_ion_concentrations) +double Ca_o; // millimolar (in model_parameters) +double K_o; // millimolar (in model_parameters) +double Na_o; // millimolar (in model_parameters) +double g_Ca_L; // dimensionless (in i_Ca_L) +double g_Na; // milliS_per_microF (in i_Na) +double perc_reduced_inact_for_IpNa; // dimensionless (in i_Na) +double shift_INa_inact; // millivolt (in i_Na) +double g_K1_max; // milliS_per_microF (in i_K1) +double g_Kr_max; // milliS_per_microF (in i_Kr) +double g_Ks_max; // milliS_per_microF (in i_Ks) +double i_NaCa_max; // microA_per_microF (in i_NaCa) +double stim_amplitude; // microA_per_microF (in membrane) +double stim_duration; // millisecond (in membrane) +double stim_start; // millisecond (in membrane) +double stim_period; // millisecond (in membrane) +double g_to_1; // milliS_per_microF (in i_to_1) + +double A0_bck; // dimensionless (in A0_bc) +double Ampl_gain; // dimensionless (in Ampl_gai) +double CT_K_Cl_max; // millimolar_per_millisecond (in CT_K_Cl) +double CT_Na_Cl_max; // millimolar_per_millisecond (in CT_Na_Cl) +double CSQN_max; // millimolar (in Ca_JSR) +double km_CSQN; // millimolar (in Ca_JSR) +double Ca_MK_0; // dimensionless (in Ca_MK_act) +double alpha_Ca_MK; // per_millisecond (in Ca_MK_act) +double beta_Ca_MK; // per_millisecond (in Ca_MK_act) +double km_Ca_MK; // millimolar (in Ca_MK_act) +double CMDN_max; // millimolar (in Ca_i) +double TRPN_max; // millimolar (in Ca_i) +double km_CMDN; // millimolar (in Ca_i) +double km_TRPN; // millimolar (in Ca_i) +double b_SL_max; // millimolar (in Ca_r) +double b_SR_max; // millimolar (in Ca_r) +double km_b_SL; // millimolar (in Ca_r) +double km_b_SR; // millimolar (in Ca_r) +double tau_ss; // millisecond (in Ca_r) +double Cext; // picoF (in Cex) +double E_l; // millivolt (in E_) +double I; // dimensionless (in ) +double R_seal; // ohm (in R_sea) +double Scale_bck; // dimensionless (in Scale_bc) +double Scaling; // dimensionless (in Scalin) +double g_Cl_b; // milliS_per_microF (in background_currents) +double g_K_b; // milliS_per_microF (in background_currents) +double g_Na_b; // milliS_per_microF (in background_currents) +double r_NaK; // dimensionless (in equilibrium_potentials) +double g_Ca_T; // milliS_per_microF (in i_Ca_T) +double i_Ca_p_max; // microA_per_microF (in i_Ca_p) +double km_Ca_p; // millimolar (in i_Ca_p) +double g_K_p; // milliS_per_microF (in i_K_p) +double X_NaCa; // dimensionless (in i_NaCa) +double k_sat; // dimensionless (in i_NaCa) +double km_Ca_act; // millimolar (in i_NaCa) +double km_Ca_i; // millimolar (in i_NaCa) +double km_Ca_o; // millimolar (in i_NaCa) +double km_Na_i_1; // millimolar (in i_NaCa) +double km_Na_o; // millimolar (in i_NaCa) +double g_NaK; // microA_per_microF (in i_NaK) +double km_K_o; // millimolar (in i_NaK) +double km_Na_i_2; // millimolar (in i_NaK) +double g_Na_L; // milliS_per_microF (in i_Na_L) +double km_to_2; // millimolar (in i_to_2_a_gate) +double tau_a; // millisecond (in i_to_2_a_gate) +double k_bck; // one_over_millivolt (in k_bc) +double leak_comp_perc; // dimensionless (in leak_comp_per) +double stim_end; // millisecond (in membrane) +double Cl_o; // millimolar (in model_parameters) +double Cm; // microF_per_cm2 (in model_parameters) +double F; // coulomb_per_mole (in model_parameters) +double R; // joule_per_kilomole_kelvin (in model_parameters) +double T; // kelvin (in model_parameters) +double Vol_cell; // microlitre (in model_parameters) +double length; // cm (in model_parameters) +double radius; // cm (in model_parameters) +double rcg; // dimensionless (in model_parameters) +double z_Ca; // dimensionless (in model_parameters) +double NSR_max; // millimolar (in q_leak) +double tau_Ca_MK_max; // millisecond (in q_rel_ri_gate) +double tau_ro; // millisecond (in q_rel_ro_gate) +double tau_tr; // millisecond (in q_tr) +double X_q_up; // dimensionless (in q_up) +double dkm_plb_max; // millimolar (in q_up) +double dq_up_Ca_MK_max; // dimensionless (in q_up) +double km_up; // millimolar (in q_up) + +//------------------------------------------------------------------------------ +// Computed variables +//------------------------------------------------------------------------------ + +double CMDN; // dimensionless (in Ca_i) +double TRPN; // dimensionless (in Ca_i) +double b_myo; // dimensionless (in Ca_i) +double Ca_MK_bound; // dimensionless (in Ca_MK_act) +double Ca_MK_act; // dimensionless (in Ca_MK_act) +double b_SL; // dimensionless (in Ca_r) +double b_SR; // dimensionless (in Ca_r) +double Ca_r_tot; // dimensionless (in Ca_r) +double q_diff; // millimolar_per_millisecond (in Ca_r) +double I_ext; // dimensionless (in I_ex) +double g_leak; // one_over_ohm (in g_lea) +double tau_f_Ca; // millisecond (in i_Ca_L_f_Ca_gate) +double i_Ca_p; // microA_per_microF (in i_Ca_p) +double g_Ks; // milliS_per_microF (in i_Ks) +double a_infinity; // dimensionless (in i_to_2_a_gate) +double d_infinity; // dimensionless (in i_Ca_L_d_gate) +double tau_d; // millisecond (in i_Ca_L_d_gate) +double f2_infinity; // dimensionless (in i_Ca_L_f2_gate) +double tau_f2; // millisecond (in i_Ca_L_f2_gate) +double f_infinity; // dimensionless (in i_Ca_L_f_gate) +double tau_f; // millisecond (in i_Ca_L_f_gate) +double i_Ca_T; // microA_per_microF (in i_Ca_T) +double alpha_b; // per_millisecond (in i_Ca_T_b_gate) +double b_infinity; // dimensionless (in i_Ca_T_b_gate) +double beta_b; // per_millisecond (in i_Ca_T_b_gate) +double tau_b; // millisecond (in i_Ca_T_b_gate) +double alpha_g; // per_millisecond (in i_Ca_T_g_gate) +double beta_g; // per_millisecond (in i_Ca_T_g_gate) +double g_infinity; // dimensionless (in i_Ca_T_g_gate) +double tau_g; // millisecond (in i_Ca_T_g_gate) +double kp; // dimensionless (in i_K_p) +double rr_infinity; // dimensionless (in i_Kr) +double tau_xr; // millisecond (in i_Kr_xr_gate) +double xr_infinity; // dimensionless (in i_Kr_xr_gate) +double tau_xs1; // millisecond (in i_Ks_xs1_gate) +double xs1_infinity; // dimensionless (in i_Ks_xs1_gate) +double tau_xs2; // millisecond (in i_Ks_xs2_gate) +double xs2_infinity; // dimensionless (in i_Ks_xs2_gate) +double h_L_infinity; // dimensionless (in i_Na_L_h_L_gate) +double tau_h_L; // millisecond (in i_Na_L_h_L_gate) +double alpha_m_L; // per_millisecond (in i_Na_L_m_L_gate) +double beta_m_L; // per_millisecond (in i_Na_L_m_L_gate) +double m_L_infinity; // dimensionless (in i_Na_L_m_L_gate) +double tau_m_L; // millisecond (in i_Na_L_m_L_gate) +double alpha_h; // per_millisecond (in i_Na_h_gate) +double beta_h; // per_millisecond (in i_Na_h_gate) +double h_infinity; // dimensionless (in i_Na_h_gate) +double tau_h; // millisecond (in i_Na_h_gate) +double alpha_j; // per_millisecond (in i_Na_j_gate) +double beta_j; // per_millisecond (in i_Na_j_gate) +double j_infinity; // dimensionless (in i_Na_j_gate) +double tau_j; // millisecond (in i_Na_j_gate) +double alpha_m; // per_millisecond (in i_Na_m_gate) +double beta_m; // per_millisecond (in i_Na_m_gate) +double m_infinity; // dimensionless (in i_Na_m_gate) +double tau_m; // millisecond (in i_Na_m_gate) +double i_bck; // dimensionless (in i_bc) +double i_leak_comp; // dimensionless (in i_leak_com) +double i_inj; // dimensionless (in i_in) +double alpha_a; // per_millisecond (in i_to_1_a_gate) +double beta_a; // per_millisecond (in i_to_1_a_gate) +double a_infinity; // dimensionless (in i_to_1_a_gate) +double tau_a; // millisecond (in i_to_1_a_gate) +double alpha_i2; // per_millisecond (in i_to_1_i2_gate) +double beta_i2; // per_millisecond (in i_to_1_i2_gate) +double i2_infinity; // dimensionless (in i_to_1_i2_gate) +double tau_i2; // millisecond (in i_to_1_i2_gate) +double alpha_i; // per_millisecond (in i_to_1_i_gate) +double beta_i; // per_millisecond (in i_to_1_i_gate) +double i_infinity; // dimensionless (in i_to_1_i_gate) +double tau_i; // millisecond (in i_to_1_i_gate) +double i_to_2_max; // microA_per_microF (in i_to_2) +double i_to_2; // microA_per_microF (in i_to_2) +double i_stim; // microA_per_microF (in membrane) +double i_Ca_b; // microA_per_microF (in background_currents) +double i_Ca_L_max; // microA_per_microF (in i_Ca_L) +double i_Ca_L; // microA_per_microF (in i_Ca_L) +double f_Ca2_infinity; // dimensionless (in i_Ca_L_f_Ca2_gate) +double tau_f_Ca2; // millisecond (in i_Ca_L_f_Ca2_gate) +double f_Ca_infinity; // dimensionless (in i_Ca_L_f_Ca_gate) +double dNaCa_1; // millimolar4 (in i_NaCa) +double g_K1; // milliS_per_microF (in i_K1) +double g_Kr; // milliS_per_microF (in i_Kr) +double dNaCa_2; // millimolar4 (in i_NaCa) +double sigma; // dimensionless (in i_NaK) +double E_Cl; // millivolt (in equilibrium_potentials) +double i_Cl_b; // microA_per_microF (in background_currents) +double E_K; // millivolt (in equilibrium_potentials) +double CT_K_Cl; // millimolar_per_millisecond (in CT_K_Cl) +double i_K_b; // microA_per_microF (in background_currents) +double E_Ks; // millivolt (in equilibrium_potentials) +double E_Na; // millivolt (in equilibrium_potentials) +double CT_Na_Cl; // millimolar_per_millisecond (in CT_Na_Cl) +double i_Na_b; // microA_per_microF (in background_currents) +double alpha_xK1; // dimensionless (in i_K1_xK1_gate) +double beta_xK1; // dimensionless (in i_K1_xK1_gate) +double xK1; // dimensionless (in i_K1_xK1_gate) +double i_K1; // microA_per_microF (in i_K1) +double i_K_p; // microA_per_microF (in i_K_p) +double i_Kr; // microA_per_microF (in i_Kr) +double i_Ks; // microA_per_microF (in i_Ks) +double i_Na; // microA_per_microF (in i_Na) +double i_NaCa; // microA_per_microF (in i_NaCa) +double f_NaK; // dimensionless (in i_NaK) +double i_NaK; // microA_per_microF (in i_NaK) +double i_Na_L; // microA_per_microF (in i_Na_L) +double i_to_1; // microA_per_microF (in i_to_1) +double i_tot; // microA_per_microF (in membrane) +double Vol_jsr; // microlitre (in model_parameters) +double Vol_myo; // microlitre (in model_parameters) +double Vol_nsr; // microlitre (in model_parameters) +double Vol_ss; // microlitre (in model_parameters) +double a_geo; // cm2 (in model_parameters) +double a_cap; // cm2 (in model_parameters) +double q_leak; // millimolar_per_millisecond (in q_leak) +double vg; // dimensionless (in q_rel) +double g_rel; // per_millisecond (in q_rel) +double Ca_fac; // millimolar (in q_rel_ri_gate) +double ri_infinity; // dimensionless (in q_rel_ri_gate) +double tau_Ca_MK; // millisecond (in q_rel_ri_gate) +double tau_ri; // millisecond (in q_rel_ri_gate) +double q_rel; // millimolar_per_millisecond (in q_rel) +double ro_infinity_JSR; // dimensionless (in q_rel_ro_gate) +double ro_infinity; // dimensionless (in q_rel_ro_gate) +double q_tr; // millimolar_per_millisecond (in q_tr) +double dkm_plb; // millimolar (in q_up) +double dq_up_Ca_MK; // dimensionless (in q_up) +double q_up; // millimolar_per_millisecond (in q_up) + + +//------------------------------------------------------------------------------ +// Initialisation +//------------------------------------------------------------------------------ + +void init() +{ + //--------------------------------------------------------------------------- + // State variables + //--------------------------------------------------------------------------- + + Y[0] = -83.43812846286808; // V (millivolt) (in membrane) + Y[1] = 0.00022355433459434943; // Ca_i (millimolar) (in Ca_i) + Y[2] = 0.002003390432234504; // m (dimensionless) (in i_Na_m_gate) + Y[3] = 0.9786390933308567; // h (dimensionless) (in i_Na_h_gate) + Y[4] = 0.09866447258167589; // j (dimensionless) (in i_Na_j_gate) + Y[5] = 0.002003390432234504; // m_L (dimensionless) (in i_Na_L_m_L_gate) + Y[6] = 0.8946968372659203; // h_L (dimensionless) (in i_Na_L_h_L_gate) + Y[7] = 2.322223865147363e-06; // d (dimensionless) (in i_Ca_L_d_gate) + Y[8] = 0.9985607329462358; // f (dimensionless) (in i_Ca_L_f_gate) + Y[9] = 0.8173435436674658; // f2 (dimensionless) (in i_Ca_L_f2_gate) + Y[10] = 0.9610551285529658; // f_Ca (dimensionless) (in i_Ca_L_f_Ca_gate) + Y[11] = 0.868690796671854; // f_Ca2 (dimensionless) (in i_Ca_L_f_Ca2_gate) + Y[12] = 0.0002563937630984438; // b (dimensionless) (in i_Ca_T_b_gate) + Y[13] = 0.9720432601848331; // g (dimensionless) (in i_Ca_T_g_gate) + Y[14] = 0.0004238729429342389; // a (dimensionless) (in i_to_1_a_gate) + Y[15] = 0.9990935802459496; // i (dimensionless) (in i_to_1_i_gate) + Y[16] = 0.9777368439681764; // i2 (dimensionless) (in i_to_1_i2_gate) + Y[17] = 0.07084939408222911; // xr (dimensionless) (in i_Kr_xr_gate) + Y[18] = 0.0011737654433043125; // xs1 (dimensionless) (in i_Ks_xs1_gate) + Y[19] = 0.001179442867470093; // xs2 (dimensionless) (in i_Ks_xs2_gate) + Y[20] = 0.0014909437525000811; // a (dimensionless) (in i_to_2_a_gate) + Y[21] = 9.927155552932733; // Na_i (millimolar) (in intracellular_ion_concentrations) + Y[22] = 18.904682470140408; // Cl_i (millimolar) (in intracellular_ion_concentrations) + Y[23] = 141.9670801746057; // K_i (millimolar) (in intracellular_ion_concentrations) + Y[24] = 8.789168284782809e-06; // Ca_MK_trap (dimensionless) (in Ca_MK_act) + Y[25] = 1.2132524695849454; // Ca_NSR (millimolar) (in Ca_NSR) + Y[26] = 1.1433050636518596; // Ca_JSR (millimolar) (in Ca_JSR) + Y[27] = 0.00022418117117903934; // Ca_r (millimolar) (in Ca_r) + Y[28] = 0.7802870066567904; // ri (dimensionless) (in q_rel_ri_gate) + Y[29] = 1.2785734760674763e-09; // ro (dimensionless) (in q_rel_ro_gate) + Y[30]; // (time} (milliseconds) + + + strcpy(YNames[0], "V"); + strcpy(YNames[1], "Ca_i"); + strcpy(YNames[2], "m"); + strcpy(YNames[3], "h"); + strcpy(YNames[4], "j"); + strcpy(YNames[5], "m_L"); + strcpy(YNames[6], "h_L"); + strcpy(YNames[7], "d"); + strcpy(YNames[8], "f"); + strcpy(YNames[9], "f2"); + strcpy(YNames[10], "f_Ca"); + strcpy(YNames[11], "f_Ca2"); + strcpy(YNames[12], "b"); + strcpy(YNames[13], "g"); + strcpy(YNames[14], "a"); + strcpy(YNames[15], "i"); + strcpy(YNames[16], "i2"); + strcpy(YNames[17], "xr"); + strcpy(YNames[18], "xs1"); + strcpy(YNames[19], "xs2"); + strcpy(YNames[20], "a"); + strcpy(YNames[21], "Na_i"); + strcpy(YNames[22], "Cl_i"); + strcpy(YNames[23], "K_i"); + strcpy(YNames[24], "Ca_MK_trap"); + strcpy(YNames[25], "Ca_NSR"); + strcpy(YNames[26], "Ca_JSR"); + strcpy(YNames[27], "Ca_r"); + strcpy(YNames[28], "ri"); + strcpy(YNames[29], "ro"); + strcpy(YNames[30], "time"); + + + strcpy(YUnits[0], "millivolt"); + strcpy(YUnits[1], "millimolar"); + strcpy(YUnits[2], "dimensionless"); + strcpy(YUnits[3], "dimensionless"); + strcpy(YUnits[4], "dimensionless"); + strcpy(YUnits[5], "dimensionless"); + strcpy(YUnits[6], "dimensionless"); + strcpy(YUnits[7], "dimensionless"); + strcpy(YUnits[8], "dimensionless"); + strcpy(YUnits[9], "dimensionless"); + strcpy(YUnits[10], "dimensionless"); + strcpy(YUnits[11], "dimensionless"); + strcpy(YUnits[12], "dimensionless"); + strcpy(YUnits[13], "dimensionless"); + strcpy(YUnits[14], "dimensionless"); + strcpy(YUnits[15], "dimensionless"); + strcpy(YUnits[16], "dimensionless"); + strcpy(YUnits[17], "dimensionless"); + strcpy(YUnits[18], "dimensionless"); + strcpy(YUnits[19], "dimensionless"); + strcpy(YUnits[20], "dimensionless"); + strcpy(YUnits[21], "millimolar"); + strcpy(YUnits[22], "millimolar"); + strcpy(YUnits[23], "millimolar"); + strcpy(YUnits[24], "dimensionless"); + strcpy(YUnits[25], "millimolar"); + strcpy(YUnits[26], "millimolar"); + strcpy(YUnits[27], "millimolar"); + strcpy(YUnits[28], "dimensionless"); + strcpy(YUnits[29], "dimensionless"); + strcpy(YUnits[30], "milliseconds"); + + //------------------------------------------------------------------------------ + // Constants + //------------------------------------------------------------------------------ + + A0_bck = 1.0278; + Ampl_gain = 1; + Cext = 1; + E_l = 1; + I = 1; + R_seal = 1; + Scale_bck = 1; + Scaling = 1; + k_bck = 0.098599999999999993; + leak_comp_perc = 1; + q_leak_max = 0.0043750000000000004; + g_rel_max = 3000; + q_up_max = 0.0043750000000000004; + conc_clamp = 1; + Ca_o = 1.8; + K_o = 5.4000000000000004; + Na_o = 140; + g_Ca_L = 0.3392328; + g_Na = 8; + perc_reduced_inact_for_IpNa = 0; + shift_INa_inact = 0; + g_K1_max = 0.25; + g_Kr_max = 0.040008488000000002; + g_Ks_max = 0.052581329000000003; + i_NaCa_max = 4.5; + stim_amplitude = -80; + stim_duration = 1; + stim_start = 100; + stim_period = 800; + g_to_1 = 0.14135944; + + A0_bck = 1.0278; + Ampl_gain = 1; + CT_K_Cl_max = 7.0755999999999996e-6; + CT_Na_Cl_max = 9.8442999999999999e-6; + CSQN_max = 10; + km_CSQN = 0.80000000000000004; + Ca_MK_0 = 0.050000000000000003; + alpha_Ca_MK = 0.050000000000000003; + beta_Ca_MK = 0.00068000000000000005; + km_Ca_MK = 0.14999999999999999; + CMDN_max = 0.050000000000000003; + TRPN_max = 0.070000000000000007; + km_CMDN = 0.0023800000000000002; + km_TRPN = 0.00050000000000000001; + b_SL_max = 1.1240000000000001; + b_SR_max = 0.047; + km_b_SL = 0.0086999999999999994; + km_b_SR = 0.00087000000000000001; + tau_ss = 0.20000000000000001; + Cext = 1; + E_l = 1; + I = 1; + R_seal = 1; + Scale_bck = 1; + Scaling = 1; + g_Cl_b = 0.00022499999999999999; + g_K_b = 0.0050000000000000001; + g_Na_b = 0.0025000000000000001; + r_NaK = 0.018329999999999999; + g_Ca_T = 0.13; + i_Ca_p_max = 0.057500000000000002; + km_Ca_p = 0.00050000000000000001; + g_K_p = 0.0027599999999999999; + X_NaCa = 0.40000000000000002; + k_sat = 0.27000000000000002; + km_Ca_act = 0.000125; + km_Ca_i = 0.0035999999999999999; + km_Ca_o = 1.3; + km_Na_i_1 = 12.300000000000001; + km_Na_o = 87.5; + g_NaK = 0.61875000000000002; + km_K_o = 1.5; + km_Na_i_2 = 10; + g_Na_L = 0.037374999999999999; + km_to_2 = 0.1502; + tau_a = 1; + k_bck = 0.098599999999999993; + leak_comp_perc = 1; + stim_end = 100000; + Cl_o = 100; + Cm = 1; + F = 96485; + R = 8314; + T = 310; + Vol_cell = 0.34539999999999998; + length = 0.01; + radius = 0.0011000000000000001; + rcg = 2; + z_Ca = 2; + NSR_max = 15; + tau_Ca_MK_max = 10; + tau_ro = 3; + tau_tr = 120; + X_q_up = 0.5; + dkm_plb_max = 0.00017000000000000001; + dq_up_Ca_MK_max = 0.75; + km_up = 0.00092000000000000003; + +} + + //--------------------------------------------------------------------------- + // Computation + //--------------------------------------------------------------------------- +void compute() +{ + // time: time (millisecond) + + CMDN = 2 * CMDN_max * Y[1] / pow((km_CMDN + Y[1]), 2); + TRPN = 2 * TRPN_max * Y[1] / pow((km_TRPN + Y[1]), 2); + b_myo = 1 / (1 + CMDN + TRPN); + Ca_MK_bound = (1 - Y[24]) * Ca_MK_0 / (1 + km_Ca_MK / Y[27]); + Ca_MK_act = Ca_MK_bound + Y[24]; + b_SL = 2 * b_SL_max * Y[27] / pow((km_b_SL + Y[27]), 2); + b_SR = 2 * b_SR_max * Y[27] / pow((km_b_SR + Y[27]), 2); + Ca_r_tot = 1 / (1 + b_SL + b_SR); + q_diff = (-Y[1] + Y[27]) / tau_ss; + dY[24] = -beta_Ca_MK * Y[24] + (Ca_MK_bound + Y[24]) * Ca_MK_bound * alpha_Ca_MK; + I_ext = I / (Ampl_gain * Cext); + g_leak = 1 / R_seal; + tau_f_Ca = 0.5 + 1 / (1 + 333.33333333333331 * Y[27]) + 10 * Ca_MK_act / (Ca_MK_act + km_Ca_MK); + i_Ca_p = Y[1] * i_Ca_p_max / (Y[1] + km_Ca_p); + g_Ks = (1 + 0.59999999999999998 / (1 + 6.4818210260626455e-7 * pow((1 / Y[1]), 1.3999999999999999))) * g_Ks_max; + a_infinity = 1 / (1 + km_to_2 / Y[27]); + dY[20] = (-Y[20] + a_infinity) / tau_a; + d_infinity = 1 / (1 + exp(0.59347181008902072 - 0.14836795252225518 * Y[0])); + tau_d = 0.58999999999999997 + 0.80000000000000004 * exp(0.67599999999999993 + 0.051999999999999998 * Y[0]) / (1 + exp(1.7160000000000002 + 0.13200000000000001 * Y[0])); + dY[7] = (-Y[7] + d_infinity) / tau_d; + f2_infinity = 1 / (1 + exp(1.8 + 0.10000000000000001 * Y[0])); + tau_f2 = 38 + 24.217200000000005 * pow((-1 + 0.053763440860215048 * Y[0]), 2); + dY[9] = (-Y[9] + f2_infinity) / tau_f2; + f_infinity = 1 / (1 + exp(1.8 + 0.10000000000000001 * Y[0])); + tau_f = 4 + 0.03125 * pow((-1 + 0.40000000000000002 * Y[0]), 2); + dY[8] = (-Y[8] + f_infinity) / tau_f; + i_Ca_T = (-50 + Y[0]) * Y[12] * Y[13] * g_Ca_T; + alpha_b = 1.0680000000000001 * exp(0.54333333333333333 + 0.033333333333333333 * Y[0]); + b_infinity = 1 / (1 + exp(-5.4098360655737707 - 0.16393442622950821 * Y[0])); + beta_b = 1.0680000000000001 * exp(-0.54333333333333333 - 0.033333333333333333 * Y[0]); + tau_b = 1 / (alpha_b + beta_b); + dY[12] = (-Y[12] + b_infinity) / tau_b; + alpha_g = 0.014999999999999999 * exp(-0.86074429771908767 - 0.012004801920768308 * Y[0]); + beta_g = 0.014999999999999999 * exp(4.6558441558441563 + 0.064935064935064929 * Y[0]); + g_infinity = 1 / (1 + exp(9.0909090909090917 + 0.15151515151515152 * Y[0])); + tau_g = 1 / (alpha_g + beta_g); + dY[13] = (-Y[13] + g_infinity) / tau_g; + kp = 1 / (1 + exp(1.2521739130434781 - 0.16722408026755853 * Y[0])); + rr_infinity = 1 / (1 + exp(-0.26470588235294124 + 0.049019607843137261 * Y[0])); + tau_xr = 100 + 900 / (1 + exp(0.20000000000000001 * Y[0])); + xr_infinity = 1 / (1 + exp(-0.0069387755102040824 - 0.081632653061224483 * Y[0])); + dY[17] = (-Y[17] + xr_infinity) / tau_xr; + tau_xs1 = 1 / ((((Y[0] >= 0.54999921875000002) && (Y[0] <= 0.55000078125000007)) ? (-2.8124999999965681e-10 / (-1 + exp(-9.999999999987797e-8)) + 640000.00000042573 * (-0.54999921875000002 + Y[0]) * (2.8124999999996902e-10 / (-1 + exp(9.9999999999988984e-8)) + 2.8124999999965681e-10 / (-1 + exp(-9.999999999987797e-8)))) : (0.00036000000000000002 * (-0.55000000000000004 + Y[0]) / (-1 + exp(-0.070400000000000004 + 0.128 * Y[0])))) + (((Y[0] >= -44.600000010030094) && (Y[0] <= -44.599999989969909)) ? (-7.6328986866047728e-13 / (1 - exp(9.9999999875755032e-8)) + 49850000.061936118 * (44.600000010030094 + Y[0]) * (7.6328986866047728e-13 / (1 - exp(9.9999999875755032e-8)) + 7.6328986866047728e-13 / (1 - exp(-9.9999999875755032e-8)))) : (7.6100000000000007e-5 * (44.600000000000001 + Y[0]) / (1 - exp(-444.66200000000003 - 9.9700000000000006 * Y[0]))))); + xs1_infinity = 1 / (1 + exp(0.65693430656934315 - 0.072992700729927015 * Y[0])); + dY[18] = (-Y[18] + xs1_infinity) / tau_xs1; + tau_xs2 = 2 / ((((Y[0] >= 0.54999921875000002) && (Y[0] <= 0.55000078125000007)) ? (-2.8124999999965681e-10 / (-1 + exp(-9.999999999987797e-8)) + 640000.00000042573 * (-0.54999921875000002 + Y[0]) * (2.8124999999996902e-10 / (-1 + exp(9.9999999999988984e-8)) + 2.8124999999965681e-10 / (-1 + exp(-9.999999999987797e-8)))) : (0.00036000000000000002 * (-0.55000000000000004 + Y[0]) / (-1 + exp(-0.070400000000000004 + 0.128 * Y[0])))) + (((Y[0] >= -44.600000010030094) && (Y[0] <= -44.599999989969909)) ? (-7.6328986866047728e-13 / (1 - exp(9.9999999875755032e-8)) + 49850000.061936118 * (44.600000010030094 + Y[0]) * (7.6328986866047728e-13 / (1 - exp(9.9999999875755032e-8)) + 7.6328986866047728e-13 / (1 - exp(-9.9999999875755032e-8)))) : (7.6100000000000007e-5 * (44.600000000000001 + Y[0]) / (1 - exp(-444.66200000000003 - 9.9700000000000006 * Y[0]))))); + xs2_infinity = 1 / (1 + exp(0.65693430656934315 - 0.072992700729927015 * Y[0])); + dY[19] = (-Y[19] + xs2_infinity) / tau_xs2; + h_L_infinity = 1 / (1 + exp(11.311475409836067 + 0.16393442622950821 * Y[0])); + tau_h_L = 175 + 125 / (1 + exp(-4.166666666666667 - 0.16666666666666666 * Y[0])); + dY[6] = (-Y[6] + h_L_infinity) / tau_h_L; + if ((Y[0] >= -47.130001) && (Y[0] <= -47.129999000000005)) + alpha_m_L = -3.200000000092018e-7 / (1 - exp(1.0000000000287557e-7)) + 499999.99998562218 * (47.130001 + Y[0]) * (3.200000000092018e-7 / (1 - exp(1.0000000000287557e-7)) + 3.200000000092018e-7 / (1 - exp(-1.0000000000287557e-7))) + else + alpha_m_L = 0.32000000000000001 * (47.130000000000003 + Y[0]) / (1 - exp(-4.7130000000000001 - 0.10000000000000001 * Y[0])) + + beta_m_L = 0.080000000000000002 * exp(-0.090909090909090912 * Y[0]); + m_L_infinity = alpha_m_L / (alpha_m_L + beta_m_L); + tau_m_L = 1 / (alpha_m_L + beta_m_L); + dY[5] = (-Y[5] + m_L_infinity) / tau_m_L; + if (Y[0] < -40) + alpha_h = 0.13500000000000001 * exp(-11.764705882352942 + 0.14705882352941177 * shift_INa_inact - 0.14705882352941177 * Y[0]) + else + alpha_h = 0 + + if (Y[0] < -40) + beta_h = 310000 * exp(0.34999999999999998 * Y[0] - 0.34999999999999998 * shift_INa_inact) + 3.5600000000000001 * exp(0.079000000000000001 * Y[0] - 0.079000000000000001 * shift_INa_inact) + else + beta_h = 7.6923076923076916 / (1 + exp(-0.96036036036036043 + 0.0900900900900901 * shift_INa_inact - 0.0900900900900901 * Y[0])) + + h_infinity = 0.01 * perc_reduced_inact_for_IpNa + (1 - 0.01 * perc_reduced_inact_for_IpNa) * alpha_h / (alpha_h + beta_h); + tau_h = 1 / (alpha_h + beta_h); + dY[3] = (-Y[3] + h_infinity) / tau_h; + if (Y[0] < -40) + alpha_j = (37.780000000000001 + Y[0]) * (-127140 * exp(0.24440000000000001 * Y[0] - 0.24440000000000001 * shift_INa_inact) - 3.4740000000000003e-5 * exp(0.043909999999999998 * shift_INa_inact - 0.043909999999999998 * Y[0])) / (1 + exp(24.640530000000002 + 0.311 * Y[0] - 0.311 * shift_INa_inact)) + else + alpha_j = 0 + + if (Y[0] < -40) + beta_j = 0.1212 * exp(0.01052 * shift_INa_inact - 0.01052 * Y[0]) / (1 + exp(-5.5312920000000005 + 0.13780000000000001 * shift_INa_inact - 0.13780000000000001 * Y[0])) + else + beta_j = 0.29999999999999999 * exp(2.5349999999999999e-7 * shift_INa_inact - 2.5349999999999999e-7 * Y[0]) / (1 + exp(-3.2000000000000002 + 0.10000000000000001 * shift_INa_inact - 0.10000000000000001 * Y[0])) + + j_infinity = 0.01 * perc_reduced_inact_for_IpNa + (1 - 0.01 * perc_reduced_inact_for_IpNa) * alpha_j / (alpha_j + beta_j); + tau_j = 1 / (alpha_j + beta_j); + dY[4] = (-Y[4] + j_infinity) / tau_j; + if ((Y[0] >= -47.130001) && (Y[0] <= -47.129999000000005)) + alpha_m = -3.200000000092018e-7 / (1 - exp(1.0000000000287557e-7)) + 499999.99998562218 * (47.130001 + Y[0]) * (3.200000000092018e-7 / (1 - exp(1.0000000000287557e-7)) + 3.200000000092018e-7 / (1 - exp(-1.0000000000287557e-7))) + else + alpha_m = 0.32000000000000001 * (47.130000000000003 + Y[0]) / (1 - exp(-4.7130000000000001 - 0.10000000000000001 * Y[0])) + + beta_m = 0.080000000000000002 * exp(-0.090909090909090912 * Y[0]); + m_infinity = alpha_m / (alpha_m + beta_m); + tau_m = 1 / (alpha_m + beta_m); + dY[2] = (-Y[2] + m_infinity) / tau_m; + i_bck = A0_bck * Scale_bck / ((1 + exp(-Y[0] * k_bck)) * Cext); + i_leak_comp = (-E_l + Y[0]) * g_leak * leak_comp_perc / (100 * Cext); + i_inj = (-i_bck - i_leak_comp + I_ext) * Scaling; + alpha_a = 25 * exp(-3.7999999999999998 + 0.050000000000000003 * Y[0]) / (1 + exp(-3.7999999999999998 + 0.050000000000000003 * Y[0])); + beta_a = 25 * exp(-2.7000000000000002 - 0.050000000000000003 * Y[0]) / (1 + exp(-2.7000000000000002 - 0.050000000000000003 * Y[0])); + a_infinity = alpha_a / (alpha_a + beta_a); + tau_a = 1 / (alpha_a + beta_a); + dY[14] = (-Y[14] + a_infinity) / tau_a; + alpha_i2 = 0.0044200000000000003 / (1 + exp(1.7333333333333334 + 0.066666666666666666 * Y[0])); + beta_i2 = 0.050000000000000003 * exp(-0.66666666666666663 + 0.066666666666666666 * Y[0]) / (1 + exp(-0.66666666666666663 + 0.066666666666666666 * Y[0])); + i2_infinity = alpha_i2 / (alpha_i2 + beta_i2); + tau_i2 = 21.5 + 30 / (1 + exp(-2.5 + 0.10000000000000001 * Y[0])); + dY[16] = (-Y[16] + i2_infinity) / tau_i2; + alpha_i = 0.029999999999999999 / (1 + exp(1.6666666666666667 + 0.066666666666666666 * Y[0])); + beta_i = 0.10000000000000001 * exp(-2.6666666666666665 + 0.066666666666666666 * Y[0]) / (1 + exp(-2.6666666666666665 + 0.066666666666666666 * Y[0])); + i_infinity = alpha_i / (alpha_i + beta_i); + tau_i = 6 + 5 / (1 + exp(-1.6499999999999999 + 0.10000000000000001 * Y[0])); + dY[15] = (-Y[15] + i_infinity) / tau_i; + if ((Y[0] >= -2.6712338705498262e-6) && (Y[0] <= 2.6712338705498262e-6)) + i_to_2_max = 187179.41753901311 * (2.6712338705498262e-6 + Y[0]) * (3.8593999999999993e-9 * (-100 * exp(9.9999999999999995e-8) + Y[22]) / (1 - exp(9.9999999999999995e-8)) + 3.8593999999999993e-9 * (-100 * exp(-9.9999999999999995e-8) + Y[22]) / (1 - exp(-9.9999999999999995e-8))) - 3.8593999999999993e-9 * (-100 * exp(-9.9999999999999995e-8) + Y[22]) / (1 - exp(-9.9999999999999995e-8)) + else + i_to_2_max = 0.0014448004881001341 * (-100 * exp(0.037435883507802616 * Y[0]) + Y[22]) * Y[0] / (1 - exp(0.037435883507802616 * Y[0])) + + i_to_2 = 20 * Y[20] * i_to_2_max; + if ((Y[30] >= stim_start) && (Y[30] <= stim_end) && (stim_duration >= -stim_start - stim_period * floor((-stim_start + Y[30]) / stim_period) + Y[30])) + i_stim = stim_amplitude + else + i_stim = 0 + + if ((Y[0] >= -1.3356169352749131e-6) && (Y[0] <= 1.3356169352749131e-6)) + i_Ca_b = 374358.83507802623 * (1.3356169352749131e-6 + Y[0]) * (3.8499135947999997e-9 * (-0.34100000000000003 * Ca_o + Y[1] * exp(9.9999999999999995e-8)) / (-1 + exp(9.9999999999999995e-8)) + 3.8499135947999997e-9 * (-0.34100000000000003 * Ca_o + Y[1] * exp(-9.9999999999999995e-8)) / (-1 + exp(-9.9999999999999995e-8))) - 3.8499135947999997e-9 * (-0.34100000000000003 * Ca_o + Y[1] * exp(-9.9999999999999995e-8)) / (-1 + exp(-9.9999999999999995e-8)) + else + i_Ca_b = 0.0028824983370007683 * (-0.34100000000000003 * Ca_o + Y[1] * exp(0.074871767015605231 * Y[0])) * Y[0] / (-1 + exp(0.074871767015605231 * Y[0])) + + if ((Y[0] >= 14.999998664383064) && (Y[0] <= 15.000001335616936)) + i_Ca_L_max = 374358.83507888648 * (-14.999998664383064 + Y[0]) * (4.6891709999892238e-6 * (-0.34100000000000003 * Ca_o + Y[27] * exp(9.9999999999770198e-8)) / (-1 + exp(9.9999999999770198e-8)) + 4.6891709999892238e-6 * (-0.34100000000000003 * Ca_o + Y[27] * exp(-9.9999999999770198e-8)) / (-1 + exp(-9.9999999999770198e-8))) - 4.6891709999892238e-6 * (-0.34100000000000003 * Ca_o + Y[27] * exp(-9.9999999999770198e-8)) / (-1 + exp(-9.9999999999770198e-8)) + else + i_Ca_L_max = 3.510865186083326 * (-15 + Y[0]) * (-0.34100000000000003 * Ca_o + Y[27] * exp(-1.1230765052340785 + 0.074871767015605231 * Y[0])) / (-1 + exp(-1.1230765052340785 + 0.074871767015605231 * Y[0])) + + i_Ca_L = Y[10] * Y[11] * Y[7] * Y[8] * Y[9] * g_Ca_L * i_Ca_L_max; + f_Ca2_infinity = 1 / (1 - 100 * i_Ca_L); + tau_f_Ca2 = 125 + 300 / (1 + exp(-4.375 - 25 * i_Ca_L)); + dY[11] = (-Y[11] + f_Ca2_infinity) / tau_f_Ca2; + f_Ca_infinity = 0.14999999999999999 + 0.55000000000000004 / (1 + 333.33333333333331 * Y[27]) + 0.29999999999999999 / (1 - 20 * i_Ca_L); + dY[10] = (-Y[10] + f_Ca_infinity) / tau_f_Ca; + dNaCa_1 = pow(Y[21], 3) * km_Ca_o + 1.5 * pow(km_Na_o, 3) * Y[1] + pow(km_Na_i_1, 3) * (1 + 1.5 * Y[1] / km_Ca_i) * Ca_o; + g_K1 = 0.43033148291193518 * sqrt(K_o) * g_K1_max; + g_Kr = 0.43033148291193518 * sqrt(K_o) * g_Kr_max; + dNaCa_2 = pow(Y[21], 3) * Ca_o + 1.5 * pow(Na_o, 3) * Y[1] + pow(Na_o, 3) * (1 + Y[21] / km_Na_i_1) * km_Ca_i; + sigma = -0.14285714285714285 + 0.14285714285714285 * exp(0.01485884101040119 * Na_o); + E_Cl = -R * T * log(Cl_o / Y[22]) / F; + i_Cl_b = (-E_Cl + Y[0]) * g_Cl_b; + E_K = R * T * log(K_o / Y[23]) / F; + CT_K_Cl = (-E_Cl + E_K) * CT_K_Cl_max / (87.825100000000006 - E_Cl + E_K); + i_K_b = (-E_K + Y[0]) * g_K_b; + E_Ks = R * T * log((r_NaK * Na_o + K_o) / (Y[21] * r_NaK + Y[23])) / F; + E_Na = R * T * log(Na_o / Y[21]) / F; + CT_Na_Cl = pow((-E_Cl + E_Na), 4) * CT_Na_Cl_max / (59494197.640692554 + pow((-E_Cl + E_Na), 4)); + i_Na_b = (-E_Na + Y[0]) * g_Na_b; + alpha_xK1 = 1.02 / (1 + exp(-14.1227775 + 0.23849999999999999 * Y[0] - 0.23849999999999999 * E_K)); + beta_xK1 = (0.49124000000000001 * exp(0.43983232 + 0.080320000000000003 * Y[0] - 0.080320000000000003 * E_K) + exp(-36.698642499999998 + 0.061749999999999999 * Y[0] - 0.061749999999999999 * E_K)) / (1 + exp(-2.4444678999999998 + 0.51429999999999998 * E_K - 0.51429999999999998 * Y[0])); + xK1 = alpha_xK1 / (alpha_xK1 + beta_xK1); + i_K1 = (0.0040000000000000001 + g_K1 * xK1) * (-E_K + Y[0]); + i_K_p = (-E_K + Y[0]) * g_K_p * kp; + i_Kr = (-E_K + Y[0]) * Y[17] * g_Kr * rr_infinity; + i_Ks = (-E_Ks + Y[0]) * Y[18] * Y[19] * g_Ks; + i_Na = pow(Y[2], 3) * (-E_Na + Y[0]) * (0.20000000000000001 * Y[4] + 0.80000000000000004 * Y[3]) * g_Na; + i_NaCa = (-1.5 * pow(Na_o, 3) * Y[1] * exp(-0.65000000000000002 * Y[0] * F / (R * T)) + pow(Y[21], 3) * X_NaCa * i_NaCa_max * Ca_o * exp(0.34999999999999998 * Y[0] * F / (R * T))) / ((1 + k_sat * exp(-0.65000000000000002 * Y[0] * F / (R * T))) * (1 + 0.44444444444444442 * pow(km_Ca_act, 2) / pow(Y[1], 2)) * (dNaCa_1 + dNaCa_2)); + f_NaK = 1 / (1 + 0.1245 * exp(-0.10000000000000001 * Y[0] * F / (R * T)) + 0.036499999999999998 * sigma * exp(-Y[0] * F / (R * T))); + i_NaK = f_NaK * g_NaK * K_o / ((1 + pow(km_Na_i_2, 2) / pow(Y[21], 2)) * (km_K_o + K_o)); + i_Na_L = pow(Y[5], 3) * (-E_Na + Y[0]) * Y[6] * g_Na_L; + i_to_1 = (-E_K + Y[0]) * (0.20000000000000001 * Y[16] + 0.80000000000000004 * Y[15]) * Y[14] * g_to_1; + i_tot = i_Ca_b + i_Cl_b + i_K_b + i_Na_b + i_Ca_L + i_Ca_T + i_Ca_p + i_K1 + i_K_p + i_Kr + i_Ks + i_Na + i_NaCa + i_NaK + i_Na_L + i_to_1 + i_to_2; + dY[0] = -i_inj - i_stim - i_tot; + Vol_jsr = 0.0047999999999999996 * Vol_cell; + Vol_myo = 0.68000000000000005 * Vol_cell; + Vol_nsr = 0.055199999999999999 * Vol_cell; + Vol_ss = 0.02 * Vol_cell; + a_geo = 6.2800000000000002 * pow(radius, 2) + 6.2800000000000002 * length * radius; + a_cap = a_geo * rcg; + dY[22] = (-(i_Cl_b + i_to_2) * Cm * a_cap / (F * Vol_myo) + CT_K_Cl + CT_Na_Cl) * conc_clamp; + dY[23] = (-(-2 * i_NaK + i_K_b + i_K1 + i_K_p + i_Kr + i_Ks + i_to_1) * Cm * a_cap / (F * Vol_myo) + CT_K_Cl) * conc_clamp; + dY[21] = (-(3 * i_NaCa + 3 * i_NaK + i_Na_b + i_Na + i_Na_L) * Cm * a_cap / (F * Vol_myo) + CT_Na_Cl) * conc_clamp; + q_leak = Y[25] * q_leak_max / NSR_max; + vg = 1 / (1 + exp(2.6000000000000001 + 0.20000000000000001 * g_Ca_L * i_Ca_L_max)); + g_rel = g_rel_max * vg; + Ca_fac = 1 / (1 + exp(3.3333333333333335 + 66.666666666666671 * i_Ca_L)); + ri_infinity = 1 / (1 + exp(-16 + 80 * Ca_fac + 40000 * Y[27])); + tau_Ca_MK = Ca_MK_act * tau_Ca_MK_max / (Ca_MK_act + km_Ca_MK); + tau_ri = 3 + (350 - tau_Ca_MK) / (1 + exp(-15 + 5000 * Y[27] + 15 * Ca_fac)) + tau_Ca_MK; + dY[28] = (-Y[28] + ri_infinity) / tau_ri; + q_rel = (-Y[27] + Y[26]) * Y[28] * Y[29] * g_rel; + dY[27] = (-q_diff + Vol_jsr * q_rel / Vol_ss - i_Ca_L * Cm * a_cap / (F * Vol_ss * z_Ca)) * Ca_r_tot; + ro_infinity_JSR = pow(Y[26], 1.8999999999999999) / (pow(Y[26], 1.8999999999999999) + 1644.6531773416521 * pow((Y[27] / (0.0028 + Y[27])), 1.8999999999999999)); + ro_infinity = pow(i_Ca_L, 2) * ro_infinity_JSR / (1 + pow(i_Ca_L, 2)); + dY[29] = (-Y[29] + ro_infinity) / tau_ro; + q_tr = (-Y[26] + Y[25]) / tau_tr; + dY[26] = (-q_rel + q_tr) / (1 + CSQN_max * km_CSQN / pow((km_CSQN + Y[26]), 2)); + dkm_plb = Ca_MK_act * dkm_plb_max / (Ca_MK_act + km_Ca_MK); + dq_up_Ca_MK = Ca_MK_act * dq_up_Ca_MK_max / (Ca_MK_act + km_Ca_MK); + q_up = (1 + dq_up_Ca_MK) * Y[1] * X_q_up * q_up_max / (-dkm_plb + Y[1] + km_up); + dY[25] = -q_leak - Vol_jsr * q_tr / Vol_nsr + q_up; + dY[1] = -((-q_leak + q_up) * Vol_nsr / Vol_myo - q_diff * Vol_ss / Vol_myo + 0.5 * (-2 * i_NaCa + i_Ca_b + i_Ca_p) * Cm * a_cap / (F * Vol_myo)) * b_myo; +} + + //------------------------------------------------------------------------------ + // Integration & Output + //------------------------------------------------------------------------------ + // Rush-Larsen method + + +// get tau/inf or alpha/beta +void computeTauInf() + double alphaOrTau_2 = tau_m; + double betaOrInf_2 = m_infinity; + double alphaOrTau_3 = tau_h; + double betaOrInf_3 = h_infinity; + double alphaOrTau_4 = tau_j; + double betaOrInf_4 = j_infinity; + double alphaOrTau_5 = tau_m_L; + double betaOrInf_5 = m_L_infinity; + double alphaOrTau_6 = tau_h_L; + double betaOrInf_6 = h_L_infinity; + double alphaOrTau_7 = tau_d; + double betaOrInf_7 = d_infinity; + double alphaOrTau_8 = tau_f; + double betaOrInf_8 = f_infinity; + double alphaOrTau_9 = tau_f2; + double betaOrInf_9 = f2_infinity; + double alphaOrTau_12 = tau_b; + double betaOrInf_12 = b_infinity; + double alphaOrTau_13 = tau_g; + double betaOrInf_13 = g_infinity; + double alphaOrTau_14 = tau_a; + double betaOrInf_14 = a_infinity; + double alphaOrTau_15 = tau_i; + double betaOrInf_15 = i_infinity; + double alphaOrTau_16 = tau_i2; + double betaOrInf_16 = i2_infinity; + double alphaOrTau_17 = tau_xr; + double betaOrInf_17 = xr_infinity; + double alphaOrTau_18 = tau_xs1; + double betaOrInf_18 = xs1_infinity; + double alphaOrTau_19 = tau_xs2; + double betaOrInf_19 = xs2_infinity; + + // gating variables: Exponential integration + + Ynew[2] = betaOrInf_2 + (Y[2] - betaOrInf_2)*exp(-dt/alphaOrTau_2); + Ynew[3] = betaOrInf_3 + (Y[3] - betaOrInf_3)*exp(-dt/alphaOrTau_3); + Ynew[4] = betaOrInf_4 + (Y[4] - betaOrInf_4)*exp(-dt/alphaOrTau_4); + Ynew[5] = betaOrInf_5 + (Y[5] - betaOrInf_5)*exp(-dt/alphaOrTau_5); + Ynew[6] = betaOrInf_6 + (Y[6] - betaOrInf_6)*exp(-dt/alphaOrTau_6); + Ynew[7] = betaOrInf_7 + (Y[7] - betaOrInf_7)*exp(-dt/alphaOrTau_7); + Ynew[8] = betaOrInf_8 + (Y[8] - betaOrInf_8)*exp(-dt/alphaOrTau_8); + Ynew[9] = betaOrInf_9 + (Y[9] - betaOrInf_9)*exp(-dt/alphaOrTau_9); + Ynew[12] = betaOrInf_12 + (Y[12] - betaOrInf_12)*exp(-dt/alphaOrTau_12); + Ynew[13] = betaOrInf_13 + (Y[13] - betaOrInf_13)*exp(-dt/alphaOrTau_13); + Ynew[14] = betaOrInf_14 + (Y[14] - betaOrInf_14)*exp(-dt/alphaOrTau_14); + Ynew[15] = betaOrInf_15 + (Y[15] - betaOrInf_15)*exp(-dt/alphaOrTau_15); + Ynew[16] = betaOrInf_16 + (Y[16] - betaOrInf_16)*exp(-dt/alphaOrTau_16); + Ynew[17] = betaOrInf_17 + (Y[17] - betaOrInf_17)*exp(-dt/alphaOrTau_17); + Ynew[18] = betaOrInf_18 + (Y[18] - betaOrInf_18)*exp(-dt/alphaOrTau_18); + Ynew[19] = betaOrInf_19 + (Y[19] - betaOrInf_19)*exp(-dt/alphaOrTau_19); +} + +// Remainder: Forward Euler +void computeRemainderForwardEuler(){ + + Ynew[0] = Y[0] + dt * d_dt_V; + Ynew[1] = Y[1] + dt * d_dt_Ca_i; + Ynew[10] = Y[10] + dt * d_dt_f_Ca; + Ynew[11] = Y[11] + dt * d_dt_f_Ca2; + Ynew[20] = Y[20] + dt * d_dt_a; + Ynew[21] = Y[21] + dt * d_dt_Na_i; + Ynew[22] = Y[22] + dt * d_dt_Cl_i; + Ynew[23] = Y[23] + dt * d_dt_K_i; + Ynew[24] = Y[24] + dt * d_dt_Ca_MK_trap; + Ynew[25] = Y[25] + dt * d_dt_Ca_NSR; + Ynew[26] = Y[26] + dt * d_dt_Ca_JSR; + Ynew[27] = Y[27] + dt * d_dt_Ca_r; + Ynew[28] = Y[28] + dt * d_dt_ri; + Ynew[29] = Y[29] + dt * d_dt_ro; + Ynew[30] = Y[30] + dt; +} + +compute(); +computeTauInf(); +computeRemainderForwardEuler(); + + +Vmem = Ynew[0]; +time = Ynew[30]; + + + +//============================================================================== +// End of file +//============================================================================== diff --git a/chaste_codegen/tests/numerical/baseline/RL_C/aslanidi_Purkinje_model_2009.h b/chaste_codegen/tests/numerical/baseline/RL_C/aslanidi_Purkinje_model_2009.h new file mode 100644 index 00000000..40e1a457 --- /dev/null +++ b/chaste_codegen/tests/numerical/baseline/RL_C/aslanidi_Purkinje_model_2009.h @@ -0,0 +1,315 @@ +//=========================================================================== +// This source file was generated from CellML by chaste_codegen version (version omitted as unimportant) +// +// Model: aslanidi_2009 +// +// Processed by chaste_codegen: https://github.com/ModellingWebLab/chaste-codegen +// (translator: chaste_codegen, model type: RushLarsenC) +// on (date omitted as unimportant) +// +// +//=========================================================================== + +#ifndef __ASLANIDI_2009_H__ +#define __ASLANIDI_2009_H__ + +//------------------------------------------------------------------------------ +// State variables +//------------------------------------------------------------------------------ + +#define _NB_OF_STATE_VARIABLES_ 31 + +extern double Y[_NB_OF_STATE_VARIABLES_]; +extern double Y[_NB_OF_STATE_VARIABLES_]; +extern double double dY[_NB_OF_STATE_VARIABLES_]; +// 0: V (millivolt) (in membrane) (Initial value: -83.43812846286808) +// 1: Ca_i (millimolar) (in Ca_i) (Initial value: 0.00022355433459434943) +// 2: m (dimensionless) (in i_Na_m_gate) (Initial value: 0.002003390432234504) +// 3: h (dimensionless) (in i_Na_h_gate) (Initial value: 0.9786390933308567) +// 4: j (dimensionless) (in i_Na_j_gate) (Initial value: 0.09866447258167589) +// 5: m_L (dimensionless) (in i_Na_L_m_L_gate) (Initial value: 0.002003390432234504) +// 6: h_L (dimensionless) (in i_Na_L_h_L_gate) (Initial value: 0.8946968372659203) +// 7: d (dimensionless) (in i_Ca_L_d_gate) (Initial value: 2.322223865147363e-06) +// 8: f (dimensionless) (in i_Ca_L_f_gate) (Initial value: 0.9985607329462358) +// 9: f2 (dimensionless) (in i_Ca_L_f2_gate) (Initial value: 0.8173435436674658) +// 10: f_Ca (dimensionless) (in i_Ca_L_f_Ca_gate) (Initial value: 0.9610551285529658) +// 11: f_Ca2 (dimensionless) (in i_Ca_L_f_Ca2_gate) (Initial value: 0.868690796671854) +// 12: b (dimensionless) (in i_Ca_T_b_gate) (Initial value: 0.0002563937630984438) +// 13: g (dimensionless) (in i_Ca_T_g_gate) (Initial value: 0.9720432601848331) +// 14: a (dimensionless) (in i_to_1_a_gate) (Initial value: 0.0004238729429342389) +// 15: i (dimensionless) (in i_to_1_i_gate) (Initial value: 0.9990935802459496) +// 16: i2 (dimensionless) (in i_to_1_i2_gate) (Initial value: 0.9777368439681764) +// 17: xr (dimensionless) (in i_Kr_xr_gate) (Initial value: 0.07084939408222911) +// 18: xs1 (dimensionless) (in i_Ks_xs1_gate) (Initial value: 0.0011737654433043125) +// 19: xs2 (dimensionless) (in i_Ks_xs2_gate) (Initial value: 0.001179442867470093) +// 20: a (dimensionless) (in i_to_2_a_gate) (Initial value: 0.0014909437525000811) +// 21: Na_i (millimolar) (in intracellular_ion_concentrations) (Initial value: 9.927155552932733) +// 22: Cl_i (millimolar) (in intracellular_ion_concentrations) (Initial value: 18.904682470140408) +// 23: K_i (millimolar) (in intracellular_ion_concentrations) (Initial value: 141.9670801746057) +// 24: Ca_MK_trap (dimensionless) (in Ca_MK_act) (Initial value: 8.789168284782809e-06) +// 25: Ca_NSR (millimolar) (in Ca_NSR) (Initial value: 1.2132524695849454) +// 26: Ca_JSR (millimolar) (in Ca_JSR) (Initial value: 1.1433050636518596) +// 27: Ca_r (millimolar) (in Ca_r) (Initial value: 0.00022418117117903934) +// 28: ri (dimensionless) (in q_rel_ri_gate) (Initial value: 0.7802870066567904) +// 29: ro (dimensionless) (in q_rel_ro_gate) (Initial value: 1.2785734760674763e-09) + +extern double Vmem; +extern double time; + +extern char YNames[_NB_OF_STATE_VARIABLES_][11]; +extern char YUnits[_NB_OF_STATE_VARIABLES_][14]; +extern char YComponents[_NB_OF_STATE_VARIABLES_][33]; + +//------------------------------------------------------------------------------ +// Constants +//------------------------------------------------------------------------------ + +extern double A0_bck; // dimensionless (in A0_bc) +extern double Ampl_gain; // dimensionless (in Ampl_gai) +extern double Cext; // picoF (in Cex) +extern double E_l; // millivolt (in E_) +extern double I; // dimensionless (in ) +extern double R_seal; // ohm (in R_sea) +extern double Scale_bck; // dimensionless (in Scale_bc) +extern double Scaling; // dimensionless (in Scalin) +extern double k_bck; // one_over_millivolt (in k_bc) +extern double leak_comp_perc; // dimensionless (in leak_comp_per) +extern double q_leak_max; // millimolar_per_millisecond (in q_leak) +extern double g_rel_max; // per_millisecond (in q_rel) +extern double q_up_max; // millimolar_per_millisecond (in q_up) +extern double conc_clamp; // dimensionless (in intracellular_ion_concentrations) +extern double Ca_o; // millimolar (in model_parameters) +extern double K_o; // millimolar (in model_parameters) +extern double Na_o; // millimolar (in model_parameters) +extern double g_Ca_L; // dimensionless (in i_Ca_L) +extern double g_Na; // milliS_per_microF (in i_Na) +extern double perc_reduced_inact_for_IpNa; // dimensionless (in i_Na) +extern double shift_INa_inact; // millivolt (in i_Na) +extern double g_K1_max; // milliS_per_microF (in i_K1) +extern double g_Kr_max; // milliS_per_microF (in i_Kr) +extern double g_Ks_max; // milliS_per_microF (in i_Ks) +extern double i_NaCa_max; // microA_per_microF (in i_NaCa) +extern double stim_amplitude; // microA_per_microF (in membrane) +extern double stim_duration; // millisecond (in membrane) +extern double stim_start; // millisecond (in membrane) +extern double stim_period; // millisecond (in membrane) +extern double g_to_1; // milliS_per_microF (in i_to_1) + +extern double A0_bck; // dimensionless (in A0_bc) +extern double Ampl_gain; // dimensionless (in Ampl_gai) +extern double CT_K_Cl_max; // millimolar_per_millisecond (in CT_K_Cl) +extern double CT_Na_Cl_max; // millimolar_per_millisecond (in CT_Na_Cl) +extern double CSQN_max; // millimolar (in Ca_JSR) +extern double km_CSQN; // millimolar (in Ca_JSR) +extern double Ca_MK_0; // dimensionless (in Ca_MK_act) +extern double alpha_Ca_MK; // per_millisecond (in Ca_MK_act) +extern double beta_Ca_MK; // per_millisecond (in Ca_MK_act) +extern double km_Ca_MK; // millimolar (in Ca_MK_act) +extern double CMDN_max; // millimolar (in Ca_i) +extern double TRPN_max; // millimolar (in Ca_i) +extern double km_CMDN; // millimolar (in Ca_i) +extern double km_TRPN; // millimolar (in Ca_i) +extern double b_SL_max; // millimolar (in Ca_r) +extern double b_SR_max; // millimolar (in Ca_r) +extern double km_b_SL; // millimolar (in Ca_r) +extern double km_b_SR; // millimolar (in Ca_r) +extern double tau_ss; // millisecond (in Ca_r) +extern double Cext; // picoF (in Cex) +extern double E_l; // millivolt (in E_) +extern double I; // dimensionless (in ) +extern double R_seal; // ohm (in R_sea) +extern double Scale_bck; // dimensionless (in Scale_bc) +extern double Scaling; // dimensionless (in Scalin) +extern double g_Cl_b; // milliS_per_microF (in background_currents) +extern double g_K_b; // milliS_per_microF (in background_currents) +extern double g_Na_b; // milliS_per_microF (in background_currents) +extern double r_NaK; // dimensionless (in equilibrium_potentials) +extern double g_Ca_T; // milliS_per_microF (in i_Ca_T) +extern double i_Ca_p_max; // microA_per_microF (in i_Ca_p) +extern double km_Ca_p; // millimolar (in i_Ca_p) +extern double g_K_p; // milliS_per_microF (in i_K_p) +extern double X_NaCa; // dimensionless (in i_NaCa) +extern double k_sat; // dimensionless (in i_NaCa) +extern double km_Ca_act; // millimolar (in i_NaCa) +extern double km_Ca_i; // millimolar (in i_NaCa) +extern double km_Ca_o; // millimolar (in i_NaCa) +extern double km_Na_i_1; // millimolar (in i_NaCa) +extern double km_Na_o; // millimolar (in i_NaCa) +extern double g_NaK; // microA_per_microF (in i_NaK) +extern double km_K_o; // millimolar (in i_NaK) +extern double km_Na_i_2; // millimolar (in i_NaK) +extern double g_Na_L; // milliS_per_microF (in i_Na_L) +extern double km_to_2; // millimolar (in i_to_2_a_gate) +extern double tau_a; // millisecond (in i_to_2_a_gate) +extern double k_bck; // one_over_millivolt (in k_bc) +extern double leak_comp_perc; // dimensionless (in leak_comp_per) +extern double stim_end; // millisecond (in membrane) +extern double Cl_o; // millimolar (in model_parameters) +extern double Cm; // microF_per_cm2 (in model_parameters) +extern double F; // coulomb_per_mole (in model_parameters) +extern double R; // joule_per_kilomole_kelvin (in model_parameters) +extern double T; // kelvin (in model_parameters) +extern double Vol_cell; // microlitre (in model_parameters) +extern double length; // cm (in model_parameters) +extern double radius; // cm (in model_parameters) +extern double rcg; // dimensionless (in model_parameters) +extern double z_Ca; // dimensionless (in model_parameters) +extern double NSR_max; // millimolar (in q_leak) +extern double tau_Ca_MK_max; // millisecond (in q_rel_ri_gate) +extern double tau_ro; // millisecond (in q_rel_ro_gate) +extern double tau_tr; // millisecond (in q_tr) +extern double X_q_up; // dimensionless (in q_up) +extern double dkm_plb_max; // millimolar (in q_up) +extern double dq_up_Ca_MK_max; // dimensionless (in q_up) +extern double km_up; // millimolar (in q_up) + +//------------------------------------------------------------------------------ +// Computed variables +//------------------------------------------------------------------------------ + +extern double CMDN; // dimensionless (in Ca_i) +extern double TRPN; // dimensionless (in Ca_i) +extern double b_myo; // dimensionless (in Ca_i) +extern double Ca_MK_bound; // dimensionless (in Ca_MK_act) +extern double Ca_MK_act; // dimensionless (in Ca_MK_act) +extern double b_SL; // dimensionless (in Ca_r) +extern double b_SR; // dimensionless (in Ca_r) +extern double Ca_r_tot; // dimensionless (in Ca_r) +extern double q_diff; // millimolar_per_millisecond (in Ca_r) +extern double I_ext; // dimensionless (in I_ex) +extern double g_leak; // one_over_ohm (in g_lea) +extern double tau_f_Ca; // millisecond (in i_Ca_L_f_Ca_gate) +extern double i_Ca_p; // microA_per_microF (in i_Ca_p) +extern double g_Ks; // milliS_per_microF (in i_Ks) +extern double a_infinity; // dimensionless (in i_to_2_a_gate) +extern double d_infinity; // dimensionless (in i_Ca_L_d_gate) +extern double tau_d; // millisecond (in i_Ca_L_d_gate) +extern double f2_infinity; // dimensionless (in i_Ca_L_f2_gate) +extern double tau_f2; // millisecond (in i_Ca_L_f2_gate) +extern double f_infinity; // dimensionless (in i_Ca_L_f_gate) +extern double tau_f; // millisecond (in i_Ca_L_f_gate) +extern double i_Ca_T; // microA_per_microF (in i_Ca_T) +extern double alpha_b; // per_millisecond (in i_Ca_T_b_gate) +extern double b_infinity; // dimensionless (in i_Ca_T_b_gate) +extern double beta_b; // per_millisecond (in i_Ca_T_b_gate) +extern double tau_b; // millisecond (in i_Ca_T_b_gate) +extern double alpha_g; // per_millisecond (in i_Ca_T_g_gate) +extern double beta_g; // per_millisecond (in i_Ca_T_g_gate) +extern double g_infinity; // dimensionless (in i_Ca_T_g_gate) +extern double tau_g; // millisecond (in i_Ca_T_g_gate) +extern double kp; // dimensionless (in i_K_p) +extern double rr_infinity; // dimensionless (in i_Kr) +extern double tau_xr; // millisecond (in i_Kr_xr_gate) +extern double xr_infinity; // dimensionless (in i_Kr_xr_gate) +extern double tau_xs1; // millisecond (in i_Ks_xs1_gate) +extern double xs1_infinity; // dimensionless (in i_Ks_xs1_gate) +extern double tau_xs2; // millisecond (in i_Ks_xs2_gate) +extern double xs2_infinity; // dimensionless (in i_Ks_xs2_gate) +extern double h_L_infinity; // dimensionless (in i_Na_L_h_L_gate) +extern double tau_h_L; // millisecond (in i_Na_L_h_L_gate) +extern double alpha_m_L; // per_millisecond (in i_Na_L_m_L_gate) +extern double beta_m_L; // per_millisecond (in i_Na_L_m_L_gate) +extern double m_L_infinity; // dimensionless (in i_Na_L_m_L_gate) +extern double tau_m_L; // millisecond (in i_Na_L_m_L_gate) +extern double alpha_h; // per_millisecond (in i_Na_h_gate) +extern double beta_h; // per_millisecond (in i_Na_h_gate) +extern double h_infinity; // dimensionless (in i_Na_h_gate) +extern double tau_h; // millisecond (in i_Na_h_gate) +extern double alpha_j; // per_millisecond (in i_Na_j_gate) +extern double beta_j; // per_millisecond (in i_Na_j_gate) +extern double j_infinity; // dimensionless (in i_Na_j_gate) +extern double tau_j; // millisecond (in i_Na_j_gate) +extern double alpha_m; // per_millisecond (in i_Na_m_gate) +extern double beta_m; // per_millisecond (in i_Na_m_gate) +extern double m_infinity; // dimensionless (in i_Na_m_gate) +extern double tau_m; // millisecond (in i_Na_m_gate) +extern double i_bck; // dimensionless (in i_bc) +extern double i_leak_comp; // dimensionless (in i_leak_com) +extern double i_inj; // dimensionless (in i_in) +extern double alpha_a; // per_millisecond (in i_to_1_a_gate) +extern double beta_a; // per_millisecond (in i_to_1_a_gate) +extern double a_infinity; // dimensionless (in i_to_1_a_gate) +extern double tau_a; // millisecond (in i_to_1_a_gate) +extern double alpha_i2; // per_millisecond (in i_to_1_i2_gate) +extern double beta_i2; // per_millisecond (in i_to_1_i2_gate) +extern double i2_infinity; // dimensionless (in i_to_1_i2_gate) +extern double tau_i2; // millisecond (in i_to_1_i2_gate) +extern double alpha_i; // per_millisecond (in i_to_1_i_gate) +extern double beta_i; // per_millisecond (in i_to_1_i_gate) +extern double i_infinity; // dimensionless (in i_to_1_i_gate) +extern double tau_i; // millisecond (in i_to_1_i_gate) +extern double i_to_2_max; // microA_per_microF (in i_to_2) +extern double i_to_2; // microA_per_microF (in i_to_2) +extern double i_stim; // microA_per_microF (in membrane) +extern double i_Ca_b; // microA_per_microF (in background_currents) +extern double i_Ca_L_max; // microA_per_microF (in i_Ca_L) +extern double i_Ca_L; // microA_per_microF (in i_Ca_L) +extern double f_Ca2_infinity; // dimensionless (in i_Ca_L_f_Ca2_gate) +extern double tau_f_Ca2; // millisecond (in i_Ca_L_f_Ca2_gate) +extern double f_Ca_infinity; // dimensionless (in i_Ca_L_f_Ca_gate) +extern double dNaCa_1; // millimolar4 (in i_NaCa) +extern double g_K1; // milliS_per_microF (in i_K1) +extern double g_Kr; // milliS_per_microF (in i_Kr) +extern double dNaCa_2; // millimolar4 (in i_NaCa) +extern double sigma; // dimensionless (in i_NaK) +extern double E_Cl; // millivolt (in equilibrium_potentials) +extern double i_Cl_b; // microA_per_microF (in background_currents) +extern double E_K; // millivolt (in equilibrium_potentials) +extern double CT_K_Cl; // millimolar_per_millisecond (in CT_K_Cl) +extern double i_K_b; // microA_per_microF (in background_currents) +extern double E_Ks; // millivolt (in equilibrium_potentials) +extern double E_Na; // millivolt (in equilibrium_potentials) +extern double CT_Na_Cl; // millimolar_per_millisecond (in CT_Na_Cl) +extern double i_Na_b; // microA_per_microF (in background_currents) +extern double alpha_xK1; // dimensionless (in i_K1_xK1_gate) +extern double beta_xK1; // dimensionless (in i_K1_xK1_gate) +extern double xK1; // dimensionless (in i_K1_xK1_gate) +extern double i_K1; // microA_per_microF (in i_K1) +extern double i_K_p; // microA_per_microF (in i_K_p) +extern double i_Kr; // microA_per_microF (in i_Kr) +extern double i_Ks; // microA_per_microF (in i_Ks) +extern double i_Na; // microA_per_microF (in i_Na) +extern double i_NaCa; // microA_per_microF (in i_NaCa) +extern double f_NaK; // dimensionless (in i_NaK) +extern double i_NaK; // microA_per_microF (in i_NaK) +extern double i_Na_L; // microA_per_microF (in i_Na_L) +extern double i_to_1; // microA_per_microF (in i_to_1) +extern double i_tot; // microA_per_microF (in membrane) +extern double Vol_jsr; // microlitre (in model_parameters) +extern double Vol_myo; // microlitre (in model_parameters) +extern double Vol_nsr; // microlitre (in model_parameters) +extern double Vol_ss; // microlitre (in model_parameters) +extern double a_geo; // cm2 (in model_parameters) +extern double a_cap; // cm2 (in model_parameters) +extern double q_leak; // millimolar_per_millisecond (in q_leak) +extern double vg; // dimensionless (in q_rel) +extern double g_rel; // per_millisecond (in q_rel) +extern double Ca_fac; // millimolar (in q_rel_ri_gate) +extern double ri_infinity; // dimensionless (in q_rel_ri_gate) +extern double tau_Ca_MK; // millisecond (in q_rel_ri_gate) +extern double tau_ri; // millisecond (in q_rel_ri_gate) +extern double q_rel; // millimolar_per_millisecond (in q_rel) +extern double ro_infinity_JSR; // dimensionless (in q_rel_ro_gate) +extern double ro_infinity; // dimensionless (in q_rel_ro_gate) +extern double q_tr; // millimolar_per_millisecond (in q_tr) +extern double dkm_plb; // millimolar (in q_up) +extern double dq_up_Ca_MK; // dimensionless (in q_up) +extern double q_up; // millimolar_per_millisecond (in q_up) + + +//------------------------------------------------------------------------------ +// Procedures +//------------------------------------------------------------------------------ + +extern void init(); +extern void compute(); +extern void computeTauInf(); +extern void computeRemainderForwardEuler(); + +//------------------------------------------------------------------------------ + +#endif + +//============================================================================== +// End of file +//============================================================================== diff --git a/chaste_codegen/tests/numerical/baseline/RL_labview/aslanidi_Purkinje_model_2009.txt b/chaste_codegen/tests/numerical/baseline/RL_labview/aslanidi_Purkinje_model_2009.txt new file mode 100644 index 00000000..d7d2b87e --- /dev/null +++ b/chaste_codegen/tests/numerical/baseline/RL_labview/aslanidi_Purkinje_model_2009.txt @@ -0,0 +1,573 @@ +//=========================================================================== +// This source file was generated from CellML by chaste_codegen version 0.6.3 +// +// Model: aslanidi_2009 +// +// Processed by chaste_codegen: https://github.com/ModellingWebLab/chaste-codegen +// (translator: chaste_codegen, model type: RushLarsenLabview) +// on 2021-09-16 17:48:36 +// +// +//=========================================================================== + +//--------------------------------------------------------------------------- +// Setup & input +//--------------------------------------------------------------------------- + +float64 Ynew[31]; +float64 dY[31]; +float64 Vmem; +float64 time; + +//--------------------------------------------------------------------------- +// State Variables +//--------------------------------------------------------------------------- + +// 0: V (units: millivolt, initial value: -83.43812846286808, component: membrane) +// 1: Ca_i (units: millimolar, initial value: 0.00022355433459434943, component: Ca_i) +// 2: m (units: dimensionless, initial value: 0.002003390432234504, component: i_Na_m_gate) +// 3: h (units: dimensionless, initial value: 0.9786390933308567, component: i_Na_h_gate) +// 4: j (units: dimensionless, initial value: 0.09866447258167589, component: i_Na_j_gate) +// 5: m_L (units: dimensionless, initial value: 0.002003390432234504, component: i_Na_L_m_L_gate) +// 6: h_L (units: dimensionless, initial value: 0.8946968372659203, component: i_Na_L_h_L_gate) +// 7: d (units: dimensionless, initial value: 2.322223865147363e-06, component: i_Ca_L_d_gate) +// 8: f (units: dimensionless, initial value: 0.9985607329462358, component: i_Ca_L_f_gate) +// 9: f2 (units: dimensionless, initial value: 0.8173435436674658, component: i_Ca_L_f2_gate) +// 10: f_Ca (units: dimensionless, initial value: 0.9610551285529658, component: i_Ca_L_f_Ca_gate) +// 11: f_Ca2 (units: dimensionless, initial value: 0.868690796671854, component: i_Ca_L_f_Ca2_gate) +// 12: b (units: dimensionless, initial value: 0.0002563937630984438, component: i_Ca_T_b_gate) +// 13: g (units: dimensionless, initial value: 0.9720432601848331, component: i_Ca_T_g_gate) +// 14: a (units: dimensionless, initial value: 0.0004238729429342389, component: i_to_1_a_gate) +// 15: i (units: dimensionless, initial value: 0.9990935802459496, component: i_to_1_i_gate) +// 16: i2 (units: dimensionless, initial value: 0.9777368439681764, component: i_to_1_i2_gate) +// 17: xr (units: dimensionless, initial value: 0.07084939408222911, component: i_Kr_xr_gate) +// 18: xs1 (units: dimensionless, initial value: 0.0011737654433043125, component: i_Ks_xs1_gate) +// 19: xs2 (units: dimensionless, initial value: 0.001179442867470093, component: i_Ks_xs2_gate) +// 20: a (units: dimensionless, initial value: 0.0014909437525000811, component: i_to_2_a_gate) +// 21: Na_i (units: millimolar, initial value: 9.927155552932733, component: intracellular_ion_concentrations) +// 22: Cl_i (units: millimolar, initial value: 18.904682470140408, component: intracellular_ion_concentrations) +// 23: K_i (units: millimolar, initial value: 141.9670801746057, component: intracellular_ion_concentrations) +// 24: Ca_MK_trap (units: dimensionless, initial value: 8.789168284782809e-06, component: Ca_MK_act) +// 25: Ca_NSR (units: millimolar, initial value: 1.2132524695849454, component: Ca_NSR) +// 26: Ca_JSR (units: millimolar, initial value: 1.1433050636518596, component: Ca_JSR) +// 27: Ca_r (units: millimolar, initial value: 0.00022418117117903934, component: Ca_r) +// 28: ri (units: dimensionless, initial value: 0.7802870066567904, component: q_rel_ri_gate) +// 29: ro (units: dimensionless, initial value: 1.2785734760674763e-09, component: q_rel_ro_gate) +// 30: time (millisecond) + +//--------------------------------------------------------------------------- +// Constants +//--------------------------------------------------------------------------- + +float64 A0_bck = 1.0278; // dimensionless (in A0_bc) +float64 Ampl_gain = 1.0; // dimensionless (in Ampl_gai) +float64 Cext = 1.0; // picoF (in Cex) +float64 E_l = 1.0; // millivolt (in E_) +float64 I = 1.0; // dimensionless (in ) +float64 R_seal = 1.0; // ohm (in R_sea) +float64 Scale_bck = 1.0; // dimensionless (in Scale_bc) +float64 Scaling = 1.0; // dimensionless (in Scalin) +float64 k_bck = 0.098599999999999993; // one_over_millivolt (in k_bc) +float64 leak_comp_perc = 1.0; // dimensionless (in leak_comp_per) +float64 q_leak_max = 0.0043750000000000004; // millimolar_per_millisecond (in q_leak) +float64 g_rel_max = 3000.0; // per_millisecond (in q_rel) +float64 q_up_max = 0.0043750000000000004; // millimolar_per_millisecond (in q_up) +float64 conc_clamp = 1.0; // dimensionless (in intracellular_ion_concentrations) +float64 Ca_o = 1.8; // millimolar (in model_parameters) +float64 K_o = 5.4000000000000004; // millimolar (in model_parameters) +float64 Na_o = 140.0; // millimolar (in model_parameters) +float64 g_Ca_L = 0.3392328; // dimensionless (in i_Ca_L) +float64 g_Na = 8.0; // milliS_per_microF (in i_Na) +float64 perc_reduced_inact_for_IpNa = 0; // dimensionless (in i_Na) +float64 shift_INa_inact = 0; // millivolt (in i_Na) +float64 g_K1_max = 0.25; // milliS_per_microF (in i_K1) +float64 g_Kr_max = 0.040008488000000002; // milliS_per_microF (in i_Kr) +float64 g_Ks_max = 0.052581329000000003; // milliS_per_microF (in i_Ks) +float64 i_NaCa_max = 4.5; // microA_per_microF (in i_NaCa) +float64 stim_amplitude = -80.0; // microA_per_microF (in membrane) +float64 stim_duration = 1.0; // millisecond (in membrane) +float64 stim_start = 100.0; // millisecond (in membrane) +float64 stim_period = 800.0; // millisecond (in membrane) +float64 g_to_1 = 0.14135944; // milliS_per_microF (in i_to_1) + +float64 CT_K_Cl_max = 7.0755999999999996e-6; // millimolar_per_millisecond (in CT_K_Cl) +float64 CT_Na_Cl_max = 9.8442999999999999e-6; // millimolar_per_millisecond (in CT_Na_Cl) +float64 CSQN_max = 10.0; // millimolar (in Ca_JSR) +float64 km_CSQN = 0.80000000000000004; // millimolar (in Ca_JSR) +float64 Ca_MK_0 = 0.050000000000000003; // dimensionless (in Ca_MK_act) +float64 alpha_Ca_MK = 0.050000000000000003; // per_millisecond (in Ca_MK_act) +float64 beta_Ca_MK = 0.00068000000000000005; // per_millisecond (in Ca_MK_act) +float64 km_Ca_MK = 0.14999999999999999; // millimolar (in Ca_MK_act) +float64 CMDN_max = 0.050000000000000003; // millimolar (in Ca_i) +float64 TRPN_max = 0.070000000000000007; // millimolar (in Ca_i) +float64 km_CMDN = 0.0023800000000000002; // millimolar (in Ca_i) +float64 km_TRPN = 0.00050000000000000001; // millimolar (in Ca_i) +float64 b_SL_max = 1.1240000000000001; // millimolar (in Ca_r) +float64 b_SR_max = 0.047; // millimolar (in Ca_r) +float64 km_b_SL = 0.0086999999999999994; // millimolar (in Ca_r) +float64 km_b_SR = 0.00087000000000000001; // millimolar (in Ca_r) +float64 tau_ss = 0.20000000000000001; // millisecond (in Ca_r) +float64 g_Cl_b = 0.00022499999999999999; // milliS_per_microF (in background_currents) +float64 g_K_b = 0.0050000000000000001; // milliS_per_microF (in background_currents) +float64 g_Na_b = 0.0025000000000000001; // milliS_per_microF (in background_currents) +float64 r_NaK = 0.018329999999999999; // dimensionless (in equilibrium_potentials) +float64 g_Ca_T = 0.13; // milliS_per_microF (in i_Ca_T) +float64 i_Ca_p_max = 0.057500000000000002; // microA_per_microF (in i_Ca_p) +float64 km_Ca_p = 0.00050000000000000001; // millimolar (in i_Ca_p) +float64 g_K_p = 0.0027599999999999999; // milliS_per_microF (in i_K_p) +float64 X_NaCa = 0.40000000000000002; // dimensionless (in i_NaCa) +float64 k_sat = 0.27000000000000002; // dimensionless (in i_NaCa) +float64 km_Ca_act = 0.000125; // millimolar (in i_NaCa) +float64 km_Ca_i = 0.0035999999999999999; // millimolar (in i_NaCa) +float64 km_Ca_o = 1.3; // millimolar (in i_NaCa) +float64 km_Na_i_1 = 12.300000000000001; // millimolar (in i_NaCa) +float64 km_Na_o = 87.5; // millimolar (in i_NaCa) +float64 g_NaK = 0.61875000000000002; // microA_per_microF (in i_NaK) +float64 km_K_o = 1.5; // millimolar (in i_NaK) +float64 km_Na_i_2 = 10.0; // millimolar (in i_NaK) +float64 g_Na_L = 0.037374999999999999; // milliS_per_microF (in i_Na_L) +float64 km_to_2 = 0.1502; // millimolar (in i_to_2_a_gate) +float64 tau_a = 1.0; // millisecond (in i_to_2_a_gate) +float64 stim_end = 100000.0; // millisecond (in membrane) +float64 Cl_o = 100.0; // millimolar (in model_parameters) +float64 Cm = 1.0; // microF_per_cm2 (in model_parameters) +float64 F = 96485.0; // coulomb_per_mole (in model_parameters) +float64 R = 8314.0; // joule_per_kilomole_kelvin (in model_parameters) +float64 T = 310.0; // kelvin (in model_parameters) +float64 Vol_cell = 0.34539999999999998; // microlitre (in model_parameters) +float64 length = 0.01; // cm (in model_parameters) +float64 radius = 0.0011000000000000001; // cm (in model_parameters) +float64 rcg = 2.0; // dimensionless (in model_parameters) +float64 z_Ca = 2.0; // dimensionless (in model_parameters) +float64 NSR_max = 15.0; // millimolar (in q_leak) +float64 tau_Ca_MK_max = 10.0; // millisecond (in q_rel_ri_gate) +float64 tau_ro = 3.0; // millisecond (in q_rel_ro_gate) +float64 tau_tr = 120.0; // millisecond (in q_tr) +float64 X_q_up = 0.5; // dimensionless (in q_up) +float64 dkm_plb_max = 0.00017000000000000001; // millimolar (in q_up) +float64 dq_up_Ca_MK_max = 0.75; // dimensionless (in q_up) +float64 km_up = 0.00092000000000000003; // millimolar (in q_up) + +//------------------------------------------------------------------------------ +// Computed variables +//------------------------------------------------------------------------------ + +float64 CMDN; // dimensionless (in Ca_i) +float64 TRPN; // dimensionless (in Ca_i) +float64 b_myo; // dimensionless (in Ca_i) +float64 Ca_MK_bound; // dimensionless (in Ca_MK_act) +float64 Ca_MK_act; // dimensionless (in Ca_MK_act) +float64 b_SL; // dimensionless (in Ca_r) +float64 b_SR; // dimensionless (in Ca_r) +float64 Ca_r_tot; // dimensionless (in Ca_r) +float64 q_diff; // millimolar_per_millisecond (in Ca_r) +float64 I_ext; // dimensionless (in I_ex) +float64 g_leak; // one_over_ohm (in g_lea) +float64 tau_f_Ca; // millisecond (in i_Ca_L_f_Ca_gate) +float64 i_Ca_p; // microA_per_microF (in i_Ca_p) +float64 g_Ks; // milliS_per_microF (in i_Ks) +float64 a_infinity; // dimensionless (in i_to_2_a_gate) +float64 d_infinity; // dimensionless (in i_Ca_L_d_gate) +float64 tau_d; // millisecond (in i_Ca_L_d_gate) +float64 f2_infinity; // dimensionless (in i_Ca_L_f2_gate) +float64 tau_f2; // millisecond (in i_Ca_L_f2_gate) +float64 f_infinity; // dimensionless (in i_Ca_L_f_gate) +float64 tau_f; // millisecond (in i_Ca_L_f_gate) +float64 i_Ca_T; // microA_per_microF (in i_Ca_T) +float64 alpha_b; // per_millisecond (in i_Ca_T_b_gate) +float64 b_infinity; // dimensionless (in i_Ca_T_b_gate) +float64 beta_b; // per_millisecond (in i_Ca_T_b_gate) +float64 tau_b; // millisecond (in i_Ca_T_b_gate) +float64 alpha_g; // per_millisecond (in i_Ca_T_g_gate) +float64 beta_g; // per_millisecond (in i_Ca_T_g_gate) +float64 g_infinity; // dimensionless (in i_Ca_T_g_gate) +float64 tau_g; // millisecond (in i_Ca_T_g_gate) +float64 kp; // dimensionless (in i_K_p) +float64 rr_infinity; // dimensionless (in i_Kr) +float64 tau_xr; // millisecond (in i_Kr_xr_gate) +float64 xr_infinity; // dimensionless (in i_Kr_xr_gate) +float64 tau_xs1_PW_0; // millisecond (in i_Ks_xs1_gate) +float64 tau_xs1_PW_1; // millisecond (in i_Ks_xs1_gate) +float64 tau_xs1; // millisecond (in i_Ks_xs1_gate) +float64 xs1_infinity; // dimensionless (in i_Ks_xs1_gate) +float64 tau_xs2_PW_0; // millisecond (in i_Ks_xs2_gate) +float64 tau_xs2_PW_1; // millisecond (in i_Ks_xs2_gate) +float64 tau_xs2; // millisecond (in i_Ks_xs2_gate) +float64 xs2_infinity; // dimensionless (in i_Ks_xs2_gate) +float64 h_L_infinity; // dimensionless (in i_Na_L_h_L_gate) +float64 tau_h_L; // millisecond (in i_Na_L_h_L_gate) +float64 alpha_m_L; // per_millisecond (in i_Na_L_m_L_gate) +float64 beta_m_L; // per_millisecond (in i_Na_L_m_L_gate) +float64 m_L_infinity; // dimensionless (in i_Na_L_m_L_gate) +float64 tau_m_L; // millisecond (in i_Na_L_m_L_gate) +float64 alpha_h; // per_millisecond (in i_Na_h_gate) +float64 beta_h; // per_millisecond (in i_Na_h_gate) +float64 h_infinity; // dimensionless (in i_Na_h_gate) +float64 tau_h; // millisecond (in i_Na_h_gate) +float64 alpha_j; // per_millisecond (in i_Na_j_gate) +float64 beta_j; // per_millisecond (in i_Na_j_gate) +float64 j_infinity; // dimensionless (in i_Na_j_gate) +float64 tau_j; // millisecond (in i_Na_j_gate) +float64 alpha_m; // per_millisecond (in i_Na_m_gate) +float64 beta_m; // per_millisecond (in i_Na_m_gate) +float64 m_infinity; // dimensionless (in i_Na_m_gate) +float64 tau_m; // millisecond (in i_Na_m_gate) +float64 i_bck; // dimensionless (in i_bc) +float64 i_leak_comp; // dimensionless (in i_leak_com) +float64 i_inj; // dimensionless (in i_in) +float64 alpha_a; // per_millisecond (in i_to_1_a_gate) +float64 beta_a; // per_millisecond (in i_to_1_a_gate) +float64 a_infinity; // dimensionless (in i_to_1_a_gate) +float64 tau_a; // millisecond (in i_to_1_a_gate) +float64 alpha_i2; // per_millisecond (in i_to_1_i2_gate) +float64 beta_i2; // per_millisecond (in i_to_1_i2_gate) +float64 i2_infinity; // dimensionless (in i_to_1_i2_gate) +float64 tau_i2; // millisecond (in i_to_1_i2_gate) +float64 alpha_i; // per_millisecond (in i_to_1_i_gate) +float64 beta_i; // per_millisecond (in i_to_1_i_gate) +float64 i_infinity; // dimensionless (in i_to_1_i_gate) +float64 tau_i; // millisecond (in i_to_1_i_gate) +float64 i_to_2_max; // microA_per_microF (in i_to_2) +float64 i_to_2; // microA_per_microF (in i_to_2) +float64 i_stim; // microA_per_microF (in membrane) +float64 i_Ca_b; // microA_per_microF (in background_currents) +float64 i_Ca_L_max; // microA_per_microF (in i_Ca_L) +float64 i_Ca_L; // microA_per_microF (in i_Ca_L) +float64 f_Ca2_infinity; // dimensionless (in i_Ca_L_f_Ca2_gate) +float64 tau_f_Ca2; // millisecond (in i_Ca_L_f_Ca2_gate) +float64 f_Ca_infinity; // dimensionless (in i_Ca_L_f_Ca_gate) +float64 dNaCa_1; // millimolar4 (in i_NaCa) +float64 g_K1; // milliS_per_microF (in i_K1) +float64 g_Kr; // milliS_per_microF (in i_Kr) +float64 dNaCa_2; // millimolar4 (in i_NaCa) +float64 sigma; // dimensionless (in i_NaK) +float64 E_Cl; // millivolt (in equilibrium_potentials) +float64 i_Cl_b; // microA_per_microF (in background_currents) +float64 E_K; // millivolt (in equilibrium_potentials) +float64 CT_K_Cl; // millimolar_per_millisecond (in CT_K_Cl) +float64 i_K_b; // microA_per_microF (in background_currents) +float64 E_Ks; // millivolt (in equilibrium_potentials) +float64 E_Na; // millivolt (in equilibrium_potentials) +float64 CT_Na_Cl; // millimolar_per_millisecond (in CT_Na_Cl) +float64 i_Na_b; // microA_per_microF (in background_currents) +float64 alpha_xK1; // dimensionless (in i_K1_xK1_gate) +float64 beta_xK1; // dimensionless (in i_K1_xK1_gate) +float64 xK1; // dimensionless (in i_K1_xK1_gate) +float64 i_K1; // microA_per_microF (in i_K1) +float64 i_K_p; // microA_per_microF (in i_K_p) +float64 i_Kr; // microA_per_microF (in i_Kr) +float64 i_Ks; // microA_per_microF (in i_Ks) +float64 i_Na; // microA_per_microF (in i_Na) +float64 i_NaCa; // microA_per_microF (in i_NaCa) +float64 f_NaK; // dimensionless (in i_NaK) +float64 i_NaK; // microA_per_microF (in i_NaK) +float64 i_Na_L; // microA_per_microF (in i_Na_L) +float64 i_to_1; // microA_per_microF (in i_to_1) +float64 i_tot; // microA_per_microF (in membrane) +float64 Vol_jsr; // microlitre (in model_parameters) +float64 Vol_myo; // microlitre (in model_parameters) +float64 Vol_nsr; // microlitre (in model_parameters) +float64 Vol_ss; // microlitre (in model_parameters) +float64 a_geo; // cm2 (in model_parameters) +float64 a_cap; // cm2 (in model_parameters) +float64 q_leak; // millimolar_per_millisecond (in q_leak) +float64 vg; // dimensionless (in q_rel) +float64 g_rel; // per_millisecond (in q_rel) +float64 Ca_fac; // millimolar (in q_rel_ri_gate) +float64 ri_infinity; // dimensionless (in q_rel_ri_gate) +float64 tau_Ca_MK; // millisecond (in q_rel_ri_gate) +float64 tau_ri; // millisecond (in q_rel_ri_gate) +float64 q_rel; // millimolar_per_millisecond (in q_rel) +float64 ro_infinity_JSR; // dimensionless (in q_rel_ro_gate) +float64 ro_infinity; // dimensionless (in q_rel_ro_gate) +float64 q_tr; // millimolar_per_millisecond (in q_tr) +float64 dkm_plb; // millimolar (in q_up) +float64 dq_up_Ca_MK; // dimensionless (in q_up) +float64 q_up; // millimolar_per_millisecond (in q_up) + + +//--------------------------------------------------------------------------- +// Computation +//--------------------------------------------------------------------------- + +CMDN = 2.0 * CMDN_max * Y[1] / pow((km_CMDN + Y[1]), 2); // dimensionless +TRPN = 2.0 * TRPN_max * Y[1] / pow((km_TRPN + Y[1]), 2); // dimensionless +b_myo = 1 / (1.0 + CMDN + TRPN); // dimensionless +Ca_MK_bound = (1.0 - Y[24]) * Ca_MK_0 / (1.0 + km_Ca_MK / Y[27]); // dimensionless +Ca_MK_act = Ca_MK_bound + Y[24]; // dimensionless +b_SL = 2.0 * b_SL_max * Y[27] / pow((km_b_SL + Y[27]), 2); // dimensionless +b_SR = 2.0 * b_SR_max * Y[27] / pow((km_b_SR + Y[27]), 2); // dimensionless +Ca_r_tot = 1 / (1.0 + b_SL + b_SR); // dimensionless +q_diff = (-Y[1] + Y[27]) / tau_ss; // millimolar_per_millisecond +dY[24] = -beta_Ca_MK * Y[24] + (Ca_MK_bound + Y[24]) * Ca_MK_bound * alpha_Ca_MK; // 1 / millisecond +I_ext = I / (Ampl_gain * Cext); // dimensionless +g_leak = 1 / R_seal; // one_over_ohm +tau_f_Ca = 0.5 + 1 / (1.0 + 333.33333333333331 * Y[27]) + 10.0 * Ca_MK_act / (Ca_MK_act + km_Ca_MK); // millisecond +i_Ca_p = Y[1] * i_Ca_p_max / (Y[1] + km_Ca_p); // microA_per_microF +g_Ks = (1.0 + 0.59999999999999998 / (1.0 + 6.4818210260626455e-7 * pow((1 / Y[1]), 1.3999999999999999))) * g_Ks_max; // milliS_per_microF +a_infinity = 1 / (1.0 + km_to_2 / Y[27]); // dimensionless +dY[20] = (-Y[20] + a_infinity) / tau_a; // 1 / millisecond +d_infinity = 1 / (1.0 + exp(0.59347181008902072 - 0.14836795252225518 * Y[0])); // dimensionless +tau_d = 0.58999999999999997 + 0.80000000000000004 * exp(0.67599999999999993 + 0.051999999999999998 * Y[0]) / (1.0 + exp(1.7160000000000002 + 0.13200000000000001 * Y[0])); // millisecond +f2_infinity = 1 / (1.0 + exp(1.8 + 0.10000000000000001 * Y[0])); // dimensionless +tau_f2 = 38.0 + 24.217200000000005 * pow((-1 + 0.053763440860215048 * Y[0]), 2); // millisecond +f_infinity = 1 / (1.0 + exp(1.8 + 0.10000000000000001 * Y[0])); // dimensionless +tau_f = 4.0 + 0.03125 * pow((-1 + 0.40000000000000002 * Y[0]), 2); // millisecond +i_Ca_T = (-50.0 + Y[0]) * Y[12] * Y[13] * g_Ca_T; // microA_per_microF +alpha_b = 1.0680000000000001 * exp(0.54333333333333333 + 0.033333333333333333 * Y[0]); // per_millisecond +b_infinity = 1 / (1.0 + exp(-5.4098360655737707 - 0.16393442622950821 * Y[0])); // dimensionless +beta_b = 1.0680000000000001 * exp(-0.54333333333333333 - 0.033333333333333333 * Y[0]); // per_millisecond +tau_b = 1 / (alpha_b + beta_b); // millisecond +alpha_g = 0.014999999999999999 * exp(-0.86074429771908767 - 0.012004801920768308 * Y[0]); // per_millisecond +beta_g = 0.014999999999999999 * exp(4.6558441558441563 + 0.064935064935064929 * Y[0]); // per_millisecond +g_infinity = 1 / (1.0 + exp(9.0909090909090917 + 0.15151515151515152 * Y[0])); // dimensionless +tau_g = 1 / (alpha_g + beta_g); // millisecond +kp = 1 / (1.0 + exp(1.2521739130434781 - 0.16722408026755853 * Y[0])); // dimensionless +rr_infinity = 1 / (1.0 + exp(-0.26470588235294124 + 0.049019607843137261 * Y[0])); // dimensionless +tau_xr = 100.0 + 900.0 / (1.0 + exp(0.20000000000000001 * Y[0])); // millisecond +xr_infinity = 1 / (1.0 + exp(-0.0069387755102040824 - 0.081632653061224483 * Y[0])); // dimensionless +if (abs(-0.55000000000000004 + Y[0]) < 7.8124999999948028e-7) +tau_xs1_PW_0 = -2.8124999999965681e-10 / (-1.0 + exp(-9.999999999987797e-8)) + 640000.00000042573 * (-0.54999921875000002 + Y[0]) * (2.8124999999996902e-10 / (-1.0 + exp(9.9999999999988984e-8)) + 2.8124999999965681e-10 / (-1.0 + exp(-9.999999999987797e-8))) +else +tau_xs1_PW_0 = 0.00036000000000000002 * (-0.55000000000000004 + Y[0]) / (-1.0 + exp(-0.070400000000000004 + 0.128 * Y[0])) + +if (abs(44.600000000000001 + Y[0]) < 1.0030090258350555e-8) +tau_xs1_PW_1 = 7.6328986866047728e-13 / (1.0 - exp(-9.9999999875755032e-8)) - 49850000.061936118 * (44.599999989969909 + Y[0]) * (-7.6328986866047728e-13 / (1.0 - exp(9.9999999875755032e-8)) - 7.6328986866047728e-13 / (1.0 - exp(-9.9999999875755032e-8))) +else +tau_xs1_PW_1 = 7.6100000000000007e-5 * (44.600000000000001 + Y[0]) / (1.0 - exp(-444.66200000000003 - 9.9700000000000006 * Y[0])) + +tau_xs1 = 1 / (tau_xs1_PW_0 + tau_xs1_PW_1); // millisecond +xs1_infinity = 1 / (1.0 + exp(0.65693430656934315 - 0.072992700729927015 * Y[0])); // dimensionless +if (abs(-0.55000000000000004 + Y[0]) < 7.8124999999948028e-7) +tau_xs2_PW_0 = -2.8124999999965681e-10 / (-1.0 + exp(-9.999999999987797e-8)) + 640000.00000042573 * (-0.54999921875000002 + Y[0]) * (2.8124999999996902e-10 / (-1.0 + exp(9.9999999999988984e-8)) + 2.8124999999965681e-10 / (-1.0 + exp(-9.999999999987797e-8))) +else +tau_xs2_PW_0 = 0.00036000000000000002 * (-0.55000000000000004 + Y[0]) / (-1.0 + exp(-0.070400000000000004 + 0.128 * Y[0])) + +if (abs(44.600000000000001 + Y[0]) < 1.0030090258350555e-8) +tau_xs2_PW_1 = 7.6328986866047728e-13 / (1.0 - exp(-9.9999999875755032e-8)) - 49850000.061936118 * (44.599999989969909 + Y[0]) * (-7.6328986866047728e-13 / (1.0 - exp(9.9999999875755032e-8)) - 7.6328986866047728e-13 / (1.0 - exp(-9.9999999875755032e-8))) +else +tau_xs2_PW_1 = 7.6100000000000007e-5 * (44.600000000000001 + Y[0]) / (1.0 - exp(-444.66200000000003 - 9.9700000000000006 * Y[0])) + +tau_xs2 = 2.0 / (tau_xs2_PW_0 + tau_xs2_PW_1); // millisecond +xs2_infinity = 1 / (1.0 + exp(0.65693430656934315 - 0.072992700729927015 * Y[0])); // dimensionless +h_L_infinity = 1 / (1.0 + exp(11.311475409836067 + 0.16393442622950821 * Y[0])); // dimensionless +tau_h_L = 175.0 + 125.0 / (1.0 + exp(-4.166666666666667 - 0.16666666666666666 * Y[0])); // millisecond +if (abs(47.130000000000003 + Y[0]) < 1.0000000000287557e-6) +alpha_m_L = 3.200000000092018e-7 / (1.0 - exp(-1.0000000000287557e-7)) - 499999.99998562218 * (47.129999000000005 + Y[0]) * (-3.200000000092018e-7 / (1.0 - exp(1.0000000000287557e-7)) - 3.200000000092018e-7 / (1.0 - exp(-1.0000000000287557e-7))) +else +alpha_m_L = 0.32000000000000001 * (47.130000000000003 + Y[0]) / (1.0 - exp(-4.7130000000000001 - 0.10000000000000001 * Y[0])) + +beta_m_L = 0.080000000000000002 * exp(-0.090909090909090912 * Y[0]); // per_millisecond +m_L_infinity = alpha_m_L / (alpha_m_L + beta_m_L); // dimensionless +tau_m_L = 1 / (alpha_m_L + beta_m_L); // millisecond +if (Y[0] < -40.0) +alpha_h = 0.13500000000000001 * exp(-11.764705882352942 + 0.14705882352941177 * shift_INa_inact - 0.14705882352941177 * Y[0]) +else +alpha_h = 0 + +if (Y[0] < -40.0) +beta_h = 310000.0 * exp(0.34999999999999998 * Y[0] - 0.34999999999999998 * shift_INa_inact) + 3.5600000000000001 * exp(0.079000000000000001 * Y[0] - 0.079000000000000001 * shift_INa_inact) +else +beta_h = 7.6923076923076916 / (1.0 + exp(-0.96036036036036043 + 0.0900900900900901 * shift_INa_inact - 0.0900900900900901 * Y[0])) + +h_infinity = 0.01 * perc_reduced_inact_for_IpNa + (1.0 - 0.01 * perc_reduced_inact_for_IpNa) * alpha_h / (alpha_h + beta_h); // dimensionless +tau_h = 1 / (alpha_h + beta_h); // millisecond +if (Y[0] < -40.0) +alpha_j = (37.780000000000001 + Y[0]) * (-127140.0 * exp(0.24440000000000001 * Y[0] - 0.24440000000000001 * shift_INa_inact) - 3.4740000000000003e-5 * exp(0.043909999999999998 * shift_INa_inact - 0.043909999999999998 * Y[0])) / (1.0 + exp(24.640530000000002 + 0.311 * Y[0] - 0.311 * shift_INa_inact)) +else +alpha_j = 0 + +if (Y[0] < -40.0) +beta_j = 0.1212 * exp(0.01052 * shift_INa_inact - 0.01052 * Y[0]) / (1.0 + exp(-5.5312920000000005 + 0.13780000000000001 * shift_INa_inact - 0.13780000000000001 * Y[0])) +else +beta_j = 0.29999999999999999 * exp(2.5349999999999999e-7 * shift_INa_inact - 2.5349999999999999e-7 * Y[0]) / (1.0 + exp(-3.2000000000000002 + 0.10000000000000001 * shift_INa_inact - 0.10000000000000001 * Y[0])) + +j_infinity = 0.01 * perc_reduced_inact_for_IpNa + (1.0 - 0.01 * perc_reduced_inact_for_IpNa) * alpha_j / (alpha_j + beta_j); // dimensionless +tau_j = 1 / (alpha_j + beta_j); // millisecond +if (abs(47.130000000000003 + Y[0]) < 1.0000000000287557e-6) +alpha_m = 3.200000000092018e-7 / (1.0 - exp(-1.0000000000287557e-7)) - 499999.99998562218 * (47.129999000000005 + Y[0]) * (-3.200000000092018e-7 / (1.0 - exp(1.0000000000287557e-7)) - 3.200000000092018e-7 / (1.0 - exp(-1.0000000000287557e-7))) +else +alpha_m = 0.32000000000000001 * (47.130000000000003 + Y[0]) / (1.0 - exp(-4.7130000000000001 - 0.10000000000000001 * Y[0])) + +beta_m = 0.080000000000000002 * exp(-0.090909090909090912 * Y[0]); // per_millisecond +m_infinity = alpha_m / (alpha_m + beta_m); // dimensionless +tau_m = 1 / (alpha_m + beta_m); // millisecond +i_bck = A0_bck * Scale_bck / ((1 + exp(-Y[0] * k_bck)) * Cext); // dimensionless +i_leak_comp = (-E_l + Y[0]) * g_leak * leak_comp_perc / (100 * Cext); // dimensionless +i_inj = (-i_bck - i_leak_comp + I_ext) * Scaling; // dimensionless +alpha_a = 25.0 * exp(-3.7999999999999998 + 0.050000000000000003 * Y[0]) / (1.0 + exp(-3.7999999999999998 + 0.050000000000000003 * Y[0])); // per_millisecond +beta_a = 25.0 * exp(-2.7000000000000002 - 0.050000000000000003 * Y[0]) / (1.0 + exp(-2.7000000000000002 - 0.050000000000000003 * Y[0])); // per_millisecond +a_infinity = alpha_a / (alpha_a + beta_a); // dimensionless +tau_a = 1 / (alpha_a + beta_a); // millisecond +alpha_i2 = 0.0044200000000000003 / (1.0 + exp(1.7333333333333334 + 0.066666666666666666 * Y[0])); // per_millisecond +beta_i2 = 0.050000000000000003 * exp(-0.66666666666666663 + 0.066666666666666666 * Y[0]) / (1.0 + exp(-0.66666666666666663 + 0.066666666666666666 * Y[0])); // per_millisecond +i2_infinity = alpha_i2 / (alpha_i2 + beta_i2); // dimensionless +tau_i2 = 21.5 + 30.0 / (1.0 + exp(-2.5 + 0.10000000000000001 * Y[0])); // millisecond +alpha_i = 0.029999999999999999 / (1.0 + exp(1.6666666666666667 + 0.066666666666666666 * Y[0])); // per_millisecond +beta_i = 0.10000000000000001 * exp(-2.6666666666666665 + 0.066666666666666666 * Y[0]) / (1.0 + exp(-2.6666666666666665 + 0.066666666666666666 * Y[0])); // per_millisecond +i_infinity = alpha_i / (alpha_i + beta_i); // dimensionless +tau_i = 6.0 + 5.0 / (1.0 + exp(-1.6499999999999999 + 0.10000000000000001 * Y[0])); // millisecond +if (abs(Y[0]) < 2.6712338705498262e-6) +i_to_2_max = 187179.41753901311 * (2.6712338705498262e-6 + Y[0]) * (3.8593999999999993e-9 * (-100.0 * exp(9.9999999999999995e-8) + Y[22]) / (1.0 - exp(9.9999999999999995e-8)) + 3.8593999999999993e-9 * (-100.0 * exp(-9.9999999999999995e-8) + Y[22]) / (1.0 - exp(-9.9999999999999995e-8))) - 3.8593999999999993e-9 * (-100.0 * exp(-9.9999999999999995e-8) + Y[22]) / (1.0 - exp(-9.9999999999999995e-8)) +else +i_to_2_max = 0.0014448004881001341 * (-100.0 * exp(0.037435883507802616 * Y[0]) + Y[22]) * Y[0] / (1.0 - exp(0.037435883507802616 * Y[0])) + +i_to_2 = 20.0 * Y[20] * i_to_2_max; // microA_per_microF +if ((Y[30] >= stim_start) && (Y[30] <= stim_end) && (stim_duration >= -stim_start - stim_period * floor((-stim_start + Y[30]) / stim_period) + Y[30])) +i_stim = stim_amplitude +else +i_stim = 0 + +if (abs(Y[0]) < 1.3356169352749131e-6) +i_Ca_b = 374358.83507802623 * (1.3356169352749131e-6 + Y[0]) * (3.8499135947999997e-9 * (-0.34100000000000003 * Ca_o + Y[1] * exp(9.9999999999999995e-8)) / (-1.0 + exp(9.9999999999999995e-8)) + 3.8499135947999997e-9 * (-0.34100000000000003 * Ca_o + Y[1] * exp(-9.9999999999999995e-8)) / (-1.0 + exp(-9.9999999999999995e-8))) - 3.8499135947999997e-9 * (-0.34100000000000003 * Ca_o + Y[1] * exp(-9.9999999999999995e-8)) / (-1.0 + exp(-9.9999999999999995e-8)) +else +i_Ca_b = 0.0028824983370007683 * (-0.34100000000000003 * Ca_o + Y[1] * exp(0.074871767015605231 * Y[0])) * Y[0] / (-1.0 + exp(0.074871767015605231 * Y[0])) + +if (abs(-15.0 + Y[0]) < 1.3356169352718439e-6) +i_Ca_L_max = 374358.83507888648 * (-14.999998664383064 + Y[0]) * (4.6891709999892238e-6 * (-0.34100000000000003 * Ca_o + Y[27] * exp(9.9999999999770198e-8)) / (-1.0 + exp(9.9999999999770198e-8)) + 4.6891709999892238e-6 * (-0.34100000000000003 * Ca_o + Y[27] * exp(-9.9999999999770198e-8)) / (-1.0 + exp(-9.9999999999770198e-8))) - 4.6891709999892238e-6 * (-0.34100000000000003 * Ca_o + Y[27] * exp(-9.9999999999770198e-8)) / (-1.0 + exp(-9.9999999999770198e-8)) +else +i_Ca_L_max = 3.510865186083326 * (-15.0 + Y[0]) * (-0.34100000000000003 * Ca_o + Y[27] * exp(-1.1230765052340785 + 0.074871767015605231 * Y[0])) / (-1.0 + exp(-1.1230765052340785 + 0.074871767015605231 * Y[0])) + +i_Ca_L = Y[10] * Y[11] * Y[7] * Y[8] * Y[9] * g_Ca_L * i_Ca_L_max; // microA_per_microF +f_Ca2_infinity = 1 / (1.0 - 100.0 * i_Ca_L); // dimensionless +tau_f_Ca2 = 125.0 + 300.0 / (1.0 + exp(-4.375 - 25.0 * i_Ca_L)); // millisecond +dY[11] = (-Y[11] + f_Ca2_infinity) / tau_f_Ca2; // 1 / millisecond +f_Ca_infinity = 0.14999999999999999 + 0.55000000000000004 / (1.0 + 333.33333333333331 * Y[27]) + 0.29999999999999999 / (1.0 - 20.0 * i_Ca_L); // dimensionless +dY[10] = (-Y[10] + f_Ca_infinity) / tau_f_Ca; // 1 / millisecond +dNaCa_1 = pow(Y[21], 3) * km_Ca_o + 1.5 * pow(km_Na_o, 3) * Y[1] + pow(km_Na_i_1, 3) * (1.0 + 1.5 * Y[1] / km_Ca_i) * Ca_o; // millimolar4 +g_K1 = 0.43033148291193518 * sqrt(K_o) * g_K1_max; // milliS_per_microF +g_Kr = 0.43033148291193518 * sqrt(K_o) * g_Kr_max; // milliS_per_microF +dNaCa_2 = pow(Y[21], 3) * Ca_o + 1.5 * pow(Na_o, 3) * Y[1] + pow(Na_o, 3) * (1.0 + Y[21] / km_Na_i_1) * km_Ca_i; // millimolar4 +sigma = -0.14285714285714285 + 0.14285714285714285 * exp(0.01485884101040119 * Na_o); // dimensionless +E_Cl = -R * T * log(Cl_o / Y[22]) / F; // millivolt +i_Cl_b = (-E_Cl + Y[0]) * g_Cl_b; // microA_per_microF +E_K = R * T * log(K_o / Y[23]) / F; // millivolt +CT_K_Cl = (-E_Cl + E_K) * CT_K_Cl_max / (87.825100000000006 - E_Cl + E_K); // millimolar_per_millisecond +i_K_b = (-E_K + Y[0]) * g_K_b; // microA_per_microF +E_Ks = R * T * log((r_NaK * Na_o + K_o) / (Y[21] * r_NaK + Y[23])) / F; // millivolt +E_Na = R * T * log(Na_o / Y[21]) / F; // millivolt +CT_Na_Cl = pow((-E_Cl + E_Na), 4) * CT_Na_Cl_max / (59494197.640692554 + pow((-E_Cl + E_Na), 4)); // millimolar_per_millisecond +i_Na_b = (-E_Na + Y[0]) * g_Na_b; // microA_per_microF +alpha_xK1 = 1.02 / (1.0 + exp(-14.1227775 + 0.23849999999999999 * Y[0] - 0.23849999999999999 * E_K)); // dimensionless +beta_xK1 = (0.49124000000000001 * exp(0.43983232 + 0.080320000000000003 * Y[0] - 0.080320000000000003 * E_K) + exp(-36.698642499999998 + 0.061749999999999999 * Y[0] - 0.061749999999999999 * E_K)) / (1.0 + exp(-2.4444678999999998 + 0.51429999999999998 * E_K - 0.51429999999999998 * Y[0])); // dimensionless +xK1 = alpha_xK1 / (alpha_xK1 + beta_xK1); // dimensionless +i_K1 = (0.0040000000000000001 + g_K1 * xK1) * (-E_K + Y[0]); // microA_per_microF +i_K_p = (-E_K + Y[0]) * g_K_p * kp; // microA_per_microF +i_Kr = (-E_K + Y[0]) * Y[17] * g_Kr * rr_infinity; // microA_per_microF +i_Ks = (-E_Ks + Y[0]) * Y[18] * Y[19] * g_Ks; // microA_per_microF +i_Na = pow(Y[2], 3) * (-E_Na + Y[0]) * (0.20000000000000001 * Y[4] + 0.80000000000000004 * Y[3]) * g_Na; // microA_per_microF +i_NaCa = (-1.5 * pow(Na_o, 3) * Y[1] * exp(-0.65000000000000002 * Y[0] * F / (R * T)) + pow(Y[21], 3) * X_NaCa * i_NaCa_max * Ca_o * exp(0.34999999999999998 * Y[0] * F / (R * T))) / ((1.0 + k_sat * exp(-0.65000000000000002 * Y[0] * F / (R * T))) * (1.0 + 0.44444444444444442 * pow(km_Ca_act, 2) / pow(Y[1], 2)) * (dNaCa_1 + dNaCa_2)); // microA_per_microF +f_NaK = 1 / (1.0 + 0.1245 * exp(-0.10000000000000001 * Y[0] * F / (R * T)) + 0.036499999999999998 * sigma * exp(-Y[0] * F / (R * T))); // dimensionless +i_NaK = f_NaK * g_NaK * K_o / ((1.0 + pow(km_Na_i_2, 2) / pow(Y[21], 2)) * (km_K_o + K_o)); // microA_per_microF +i_Na_L = pow(Y[5], 3) * (-E_Na + Y[0]) * Y[6] * g_Na_L; // microA_per_microF +i_to_1 = (-E_K + Y[0]) * (0.20000000000000001 * Y[16] + 0.80000000000000004 * Y[15]) * Y[14] * g_to_1; // microA_per_microF +i_tot = i_Ca_b + i_Cl_b + i_K_b + i_Na_b + i_Ca_L + i_Ca_T + i_Ca_p + i_K1 + i_K_p + i_Kr + i_Ks + i_Na + i_NaCa + i_NaK + i_Na_L + i_to_1 + i_to_2; // microA_per_microF +dY[0] = -i_inj - i_stim - i_tot; // millivolt / millisecond +Vol_jsr = 0.0047999999999999996 * Vol_cell; // microlitre +Vol_myo = 0.68000000000000005 * Vol_cell; // microlitre +Vol_nsr = 0.055199999999999999 * Vol_cell; // microlitre +Vol_ss = 0.02 * Vol_cell; // microlitre +a_geo = 6.2800000000000002 * pow(radius, 2) + 6.2800000000000002 * length * radius; // cm2 +a_cap = a_geo * rcg; // cm2 +dY[22] = (-(i_Cl_b + i_to_2) * Cm * a_cap / (F * Vol_myo) + CT_K_Cl + CT_Na_Cl) * conc_clamp; // millimolar / millisecond +dY[23] = (-(-2.0 * i_NaK + i_K_b + i_K1 + i_K_p + i_Kr + i_Ks + i_to_1) * Cm * a_cap / (F * Vol_myo) + CT_K_Cl) * conc_clamp; // millimolar / millisecond +dY[21] = (-(3.0 * i_NaCa + 3.0 * i_NaK + i_Na_b + i_Na + i_Na_L) * Cm * a_cap / (F * Vol_myo) + CT_Na_Cl) * conc_clamp; // millimolar / millisecond +q_leak = Y[25] * q_leak_max / NSR_max; // millimolar_per_millisecond +vg = 1 / (1.0 + exp(2.6000000000000001 + 0.20000000000000001 * g_Ca_L * i_Ca_L_max)); // dimensionless +g_rel = g_rel_max * vg; // per_millisecond +Ca_fac = 1 / (1.0 + exp(3.3333333333333335 + 66.666666666666671 * i_Ca_L)); // millimolar +ri_infinity = 1 / (1.0 + exp(-16.0 + 80.0 * Ca_fac + 40000.0 * Y[27])); // dimensionless +tau_Ca_MK = Ca_MK_act * tau_Ca_MK_max / (Ca_MK_act + km_Ca_MK); // millisecond +tau_ri = 3.0 + (350.0 - tau_Ca_MK) / (1.0 + exp(-15.0 + 5000.0 * Y[27] + 15.0 * Ca_fac)) + tau_Ca_MK; // millisecond +dY[28] = (-Y[28] + ri_infinity) / tau_ri; // 1 / millisecond +q_rel = (-Y[27] + Y[26]) * Y[28] * Y[29] * g_rel; // millimolar_per_millisecond +dY[27] = (-q_diff + Vol_jsr * q_rel / Vol_ss - i_Ca_L * Cm * a_cap / (F * Vol_ss * z_Ca)) * Ca_r_tot; // millimolar / millisecond +ro_infinity_JSR = pow(Y[26], 1.8999999999999999) / (pow(Y[26], 1.8999999999999999) + 1644.6531773416521 * pow((Y[27] / (0.0028 + Y[27])), 1.8999999999999999)); // dimensionless +ro_infinity = pow(i_Ca_L, 2) * ro_infinity_JSR / (1.0 + pow(i_Ca_L, 2)); // dimensionless +dY[29] = (-Y[29] + ro_infinity) / tau_ro; // 1 / millisecond +q_tr = (-Y[26] + Y[25]) / tau_tr; // millimolar_per_millisecond +dY[26] = (-q_rel + q_tr) / (1.0 + CSQN_max * km_CSQN / pow((km_CSQN + Y[26]), 2)); // millimolar / millisecond +dkm_plb = Ca_MK_act * dkm_plb_max / (Ca_MK_act + km_Ca_MK); // millimolar +dq_up_Ca_MK = Ca_MK_act * dq_up_Ca_MK_max / (Ca_MK_act + km_Ca_MK); // dimensionless +q_up = (1.0 + dq_up_Ca_MK) * Y[1] * X_q_up * q_up_max / (-dkm_plb + Y[1] + km_up); // millimolar_per_millisecond +dY[25] = -q_leak - Vol_jsr * q_tr / Vol_nsr + q_up; // millimolar / millisecond +dY[1] = -((-q_leak + q_up) * Vol_nsr / Vol_myo - q_diff * Vol_ss / Vol_myo + 0.5 * (-2.0 * i_NaCa + i_Ca_b + i_Ca_p) * Cm * a_cap / (F * Vol_myo)) * b_myo; // millimolar / millisecond +//------------------------------------------------------------------------------ +// Integration & Output +//------------------------------------------------------------------------------ +// Rush-Larsen method + +// get tau/inf or alpha/beta + +float64 alphaOrTau_2 = tau_m; +float64 betaOrInf_2 = m_infinity; +float64 alphaOrTau_3 = tau_h; +float64 betaOrInf_3 = h_infinity; +float64 alphaOrTau_4 = tau_j; +float64 betaOrInf_4 = j_infinity; +float64 alphaOrTau_5 = tau_m_L; +float64 betaOrInf_5 = m_L_infinity; +float64 alphaOrTau_6 = tau_h_L; +float64 betaOrInf_6 = h_L_infinity; +float64 alphaOrTau_7 = tau_d; +float64 betaOrInf_7 = d_infinity; +float64 alphaOrTau_8 = tau_f; +float64 betaOrInf_8 = f_infinity; +float64 alphaOrTau_9 = tau_f2; +float64 betaOrInf_9 = f2_infinity; +float64 alphaOrTau_12 = tau_b; +float64 betaOrInf_12 = b_infinity; +float64 alphaOrTau_13 = tau_g; +float64 betaOrInf_13 = g_infinity; +float64 alphaOrTau_14 = tau_a; +float64 betaOrInf_14 = a_infinity; +float64 alphaOrTau_15 = tau_i; +float64 betaOrInf_15 = i_infinity; +float64 alphaOrTau_16 = tau_i2; +float64 betaOrInf_16 = i2_infinity; +float64 alphaOrTau_17 = tau_xr; +float64 betaOrInf_17 = xr_infinity; +float64 alphaOrTau_18 = tau_xs1; +float64 betaOrInf_18 = xs1_infinity; +float64 alphaOrTau_19 = tau_xs2; +float64 betaOrInf_19 = xs2_infinity; + +// gating variables: Exponential integration + +Ynew[2] = betaOrInf_2 + (Y[2] - betaOrInf_2)*exp(-dt/alphaOrTau_2); +Ynew[3] = betaOrInf_3 + (Y[3] - betaOrInf_3)*exp(-dt/alphaOrTau_3); +Ynew[4] = betaOrInf_4 + (Y[4] - betaOrInf_4)*exp(-dt/alphaOrTau_4); +Ynew[5] = betaOrInf_5 + (Y[5] - betaOrInf_5)*exp(-dt/alphaOrTau_5); +Ynew[6] = betaOrInf_6 + (Y[6] - betaOrInf_6)*exp(-dt/alphaOrTau_6); +Ynew[7] = betaOrInf_7 + (Y[7] - betaOrInf_7)*exp(-dt/alphaOrTau_7); +Ynew[8] = betaOrInf_8 + (Y[8] - betaOrInf_8)*exp(-dt/alphaOrTau_8); +Ynew[9] = betaOrInf_9 + (Y[9] - betaOrInf_9)*exp(-dt/alphaOrTau_9); +Ynew[12] = betaOrInf_12 + (Y[12] - betaOrInf_12)*exp(-dt/alphaOrTau_12); +Ynew[13] = betaOrInf_13 + (Y[13] - betaOrInf_13)*exp(-dt/alphaOrTau_13); +Ynew[14] = betaOrInf_14 + (Y[14] - betaOrInf_14)*exp(-dt/alphaOrTau_14); +Ynew[15] = betaOrInf_15 + (Y[15] - betaOrInf_15)*exp(-dt/alphaOrTau_15); +Ynew[16] = betaOrInf_16 + (Y[16] - betaOrInf_16)*exp(-dt/alphaOrTau_16); +Ynew[17] = betaOrInf_17 + (Y[17] - betaOrInf_17)*exp(-dt/alphaOrTau_17); +Ynew[18] = betaOrInf_18 + (Y[18] - betaOrInf_18)*exp(-dt/alphaOrTau_18); +Ynew[19] = betaOrInf_19 + (Y[19] - betaOrInf_19)*exp(-dt/alphaOrTau_19); + +// Remainder: Forward Euler + +Ynew[0] = Y[0] + dt * dY[0]; +Ynew[1] = Y[1] + dt * dY[1]; +Ynew[10] = Y[10] + dt * dY[10]; +Ynew[11] = Y[11] + dt * dY[11]; +Ynew[20] = Y[20] + dt * dY[20]; +Ynew[21] = Y[21] + dt * dY[21]; +Ynew[22] = Y[22] + dt * dY[22]; +Ynew[23] = Y[23] + dt * dY[23]; +Ynew[24] = Y[24] + dt * dY[24]; +Ynew[25] = Y[25] + dt * dY[25]; +Ynew[26] = Y[26] + dt * dY[26]; +Ynew[27] = Y[27] + dt * dY[27]; +Ynew[28] = Y[28] + dt * dY[28]; +Ynew[29] = Y[29] + dt * dY[29]; +Ynew[30] = Y[30] + dt; + +Vmem = Ynew[0]; +time = Ynew[30]; \ No newline at end of file diff --git a/chaste_codegen/tests/numerical/baseline/RL_labview/aslanidi_atrial_model_2009.txt b/chaste_codegen/tests/numerical/baseline/RL_labview/aslanidi_atrial_model_2009.txt new file mode 100644 index 00000000..7bd67ac6 --- /dev/null +++ b/chaste_codegen/tests/numerical/baseline/RL_labview/aslanidi_atrial_model_2009.txt @@ -0,0 +1,573 @@ +//=========================================================================== +// This source file was generated from CellML by chaste_codegen version (version omitted as unimportant) +// +// Model: aslanidi_2009 +// +// Processed by chaste_codegen: https://github.com/ModellingWebLab/chaste-codegen +// (translator: chaste_codegen, model type: RushLarsenLabview) +// on (date omitted as unimportant) +// +// +//=========================================================================== + +//--------------------------------------------------------------------------- +// Setup & input +//--------------------------------------------------------------------------- + +float64 Ynew[31]; +float64 dY[31]; +float64 Vmem; +float64 time; + +//--------------------------------------------------------------------------- +// State Variables +//--------------------------------------------------------------------------- + +// 0: V (units: millivolt, initial value: -83.43812846286808, component: membrane) +// 1: Ca_i (units: millimolar, initial value: 0.00022355433459434943, component: Ca_i) +// 2: m (units: dimensionless, initial value: 0.002003390432234504, component: i_Na_m_gate) +// 3: h (units: dimensionless, initial value: 0.9786390933308567, component: i_Na_h_gate) +// 4: j (units: dimensionless, initial value: 0.09866447258167589, component: i_Na_j_gate) +// 5: m_L (units: dimensionless, initial value: 0.002003390432234504, component: i_Na_L_m_L_gate) +// 6: h_L (units: dimensionless, initial value: 0.8946968372659203, component: i_Na_L_h_L_gate) +// 7: d (units: dimensionless, initial value: 2.322223865147363e-06, component: i_Ca_L_d_gate) +// 8: f (units: dimensionless, initial value: 0.9985607329462358, component: i_Ca_L_f_gate) +// 9: f2 (units: dimensionless, initial value: 0.8173435436674658, component: i_Ca_L_f2_gate) +// 10: f_Ca (units: dimensionless, initial value: 0.9610551285529658, component: i_Ca_L_f_Ca_gate) +// 11: f_Ca2 (units: dimensionless, initial value: 0.868690796671854, component: i_Ca_L_f_Ca2_gate) +// 12: b (units: dimensionless, initial value: 0.0002563937630984438, component: i_Ca_T_b_gate) +// 13: g (units: dimensionless, initial value: 0.9720432601848331, component: i_Ca_T_g_gate) +// 14: a (units: dimensionless, initial value: 0.0004238729429342389, component: i_to_1_a_gate) +// 15: i (units: dimensionless, initial value: 0.9990935802459496, component: i_to_1_i_gate) +// 16: i2 (units: dimensionless, initial value: 0.9777368439681764, component: i_to_1_i2_gate) +// 17: xr (units: dimensionless, initial value: 0.07084939408222911, component: i_Kr_xr_gate) +// 18: xs1 (units: dimensionless, initial value: 0.0011737654433043125, component: i_Ks_xs1_gate) +// 19: xs2 (units: dimensionless, initial value: 0.001179442867470093, component: i_Ks_xs2_gate) +// 20: a (units: dimensionless, initial value: 0.0014909437525000811, component: i_to_2_a_gate) +// 21: Na_i (units: millimolar, initial value: 9.927155552932733, component: intracellular_ion_concentrations) +// 22: Cl_i (units: millimolar, initial value: 18.904682470140408, component: intracellular_ion_concentrations) +// 23: K_i (units: millimolar, initial value: 141.9670801746057, component: intracellular_ion_concentrations) +// 24: Ca_MK_trap (units: dimensionless, initial value: 8.789168284782809e-06, component: Ca_MK_act) +// 25: Ca_NSR (units: millimolar, initial value: 1.2132524695849454, component: Ca_NSR) +// 26: Ca_JSR (units: millimolar, initial value: 1.1433050636518596, component: Ca_JSR) +// 27: Ca_r (units: millimolar, initial value: 0.00022418117117903934, component: Ca_r) +// 28: ri (units: dimensionless, initial value: 0.7802870066567904, component: q_rel_ri_gate) +// 29: ro (units: dimensionless, initial value: 1.2785734760674763e-09, component: q_rel_ro_gate) +// 30: time (millisecond) + +//--------------------------------------------------------------------------- +// Constants +//--------------------------------------------------------------------------- + +float64 A0_bck = 1.0278; // dimensionless (in A0_bc) +float64 Ampl_gain = 1; // dimensionless (in Ampl_gai) +float64 Cext = 1; // picoF (in Cex) +float64 E_l = 1; // millivolt (in E_) +float64 I = 1; // dimensionless (in ) +float64 R_seal = 1; // ohm (in R_sea) +float64 Scale_bck = 1; // dimensionless (in Scale_bc) +float64 Scaling = 1; // dimensionless (in Scalin) +float64 k_bck = 0.098599999999999993; // one_over_millivolt (in k_bc) +float64 leak_comp_perc = 1; // dimensionless (in leak_comp_per) +float64 q_leak_max = 0.0043750000000000004; // millimolar_per_millisecond (in q_leak) +float64 g_rel_max = 3000; // per_millisecond (in q_rel) +float64 q_up_max = 0.0043750000000000004; // millimolar_per_millisecond (in q_up) +float64 conc_clamp = 1; // dimensionless (in intracellular_ion_concentrations) +float64 Ca_o = 1.8; // millimolar (in model_parameters) +float64 K_o = 5.4000000000000004; // millimolar (in model_parameters) +float64 Na_o = 140; // millimolar (in model_parameters) +float64 g_Ca_L = 0.3392328; // dimensionless (in i_Ca_L) +float64 g_Na = 8; // milliS_per_microF (in i_Na) +float64 perc_reduced_inact_for_IpNa = 0; // dimensionless (in i_Na) +float64 shift_INa_inact = 0; // millivolt (in i_Na) +float64 g_K1_max = 0.25; // milliS_per_microF (in i_K1) +float64 g_Kr_max = 0.040008488000000002; // milliS_per_microF (in i_Kr) +float64 g_Ks_max = 0.052581329000000003; // milliS_per_microF (in i_Ks) +float64 i_NaCa_max = 4.5; // microA_per_microF (in i_NaCa) +float64 stim_amplitude = -80; // microA_per_microF (in membrane) +float64 stim_duration = 1; // millisecond (in membrane) +float64 stim_start = 100; // millisecond (in membrane) +float64 stim_period = 800; // millisecond (in membrane) +float64 g_to_1 = 0.14135944; // milliS_per_microF (in i_to_1) + +float64 CT_K_Cl_max = 7.0755999999999996e-6; // millimolar_per_millisecond (in CT_K_Cl) +float64 CT_Na_Cl_max = 9.8442999999999999e-6; // millimolar_per_millisecond (in CT_Na_Cl) +float64 CSQN_max = 10; // millimolar (in Ca_JSR) +float64 km_CSQN = 0.80000000000000004; // millimolar (in Ca_JSR) +float64 Ca_MK_0 = 0.050000000000000003; // dimensionless (in Ca_MK_act) +float64 alpha_Ca_MK = 0.050000000000000003; // per_millisecond (in Ca_MK_act) +float64 beta_Ca_MK = 0.00068000000000000005; // per_millisecond (in Ca_MK_act) +float64 km_Ca_MK = 0.14999999999999999; // millimolar (in Ca_MK_act) +float64 CMDN_max = 0.050000000000000003; // millimolar (in Ca_i) +float64 TRPN_max = 0.070000000000000007; // millimolar (in Ca_i) +float64 km_CMDN = 0.0023800000000000002; // millimolar (in Ca_i) +float64 km_TRPN = 0.00050000000000000001; // millimolar (in Ca_i) +float64 b_SL_max = 1.1240000000000001; // millimolar (in Ca_r) +float64 b_SR_max = 0.047; // millimolar (in Ca_r) +float64 km_b_SL = 0.0086999999999999994; // millimolar (in Ca_r) +float64 km_b_SR = 0.00087000000000000001; // millimolar (in Ca_r) +float64 tau_ss = 0.20000000000000001; // millisecond (in Ca_r) +float64 g_Cl_b = 0.00022499999999999999; // milliS_per_microF (in background_currents) +float64 g_K_b = 0.0050000000000000001; // milliS_per_microF (in background_currents) +float64 g_Na_b = 0.0025000000000000001; // milliS_per_microF (in background_currents) +float64 r_NaK = 0.018329999999999999; // dimensionless (in equilibrium_potentials) +float64 g_Ca_T = 0.13; // milliS_per_microF (in i_Ca_T) +float64 i_Ca_p_max = 0.057500000000000002; // microA_per_microF (in i_Ca_p) +float64 km_Ca_p = 0.00050000000000000001; // millimolar (in i_Ca_p) +float64 g_K_p = 0.0027599999999999999; // milliS_per_microF (in i_K_p) +float64 X_NaCa = 0.40000000000000002; // dimensionless (in i_NaCa) +float64 k_sat = 0.27000000000000002; // dimensionless (in i_NaCa) +float64 km_Ca_act = 0.000125; // millimolar (in i_NaCa) +float64 km_Ca_i = 0.0035999999999999999; // millimolar (in i_NaCa) +float64 km_Ca_o = 1.3; // millimolar (in i_NaCa) +float64 km_Na_i_1 = 12.300000000000001; // millimolar (in i_NaCa) +float64 km_Na_o = 87.5; // millimolar (in i_NaCa) +float64 g_NaK = 0.61875000000000002; // microA_per_microF (in i_NaK) +float64 km_K_o = 1.5; // millimolar (in i_NaK) +float64 km_Na_i_2 = 10; // millimolar (in i_NaK) +float64 g_Na_L = 0.037374999999999999; // milliS_per_microF (in i_Na_L) +float64 km_to_2 = 0.1502; // millimolar (in i_to_2_a_gate) +float64 tau_a = 1; // millisecond (in i_to_2_a_gate) +float64 stim_end = 100000; // millisecond (in membrane) +float64 Cl_o = 100; // millimolar (in model_parameters) +float64 Cm = 1; // microF_per_cm2 (in model_parameters) +float64 F = 96485; // coulomb_per_mole (in model_parameters) +float64 R = 8314; // joule_per_kilomole_kelvin (in model_parameters) +float64 T = 310; // kelvin (in model_parameters) +float64 Vol_cell = 0.34539999999999998; // microlitre (in model_parameters) +float64 length = 0.01; // cm (in model_parameters) +float64 radius = 0.0011000000000000001; // cm (in model_parameters) +float64 rcg = 2; // dimensionless (in model_parameters) +float64 z_Ca = 2; // dimensionless (in model_parameters) +float64 NSR_max = 15; // millimolar (in q_leak) +float64 tau_Ca_MK_max = 10; // millisecond (in q_rel_ri_gate) +float64 tau_ro = 3; // millisecond (in q_rel_ro_gate) +float64 tau_tr = 120; // millisecond (in q_tr) +float64 X_q_up = 0.5; // dimensionless (in q_up) +float64 dkm_plb_max = 0.00017000000000000001; // millimolar (in q_up) +float64 dq_up_Ca_MK_max = 0.75; // dimensionless (in q_up) +float64 km_up = 0.00092000000000000003; // millimolar (in q_up) + +//------------------------------------------------------------------------------ +// Computed variables +//------------------------------------------------------------------------------ + +float64 CMDN; // dimensionless (in Ca_i) +float64 TRPN; // dimensionless (in Ca_i) +float64 b_myo; // dimensionless (in Ca_i) +float64 Ca_MK_bound; // dimensionless (in Ca_MK_act) +float64 Ca_MK_act; // dimensionless (in Ca_MK_act) +float64 b_SL; // dimensionless (in Ca_r) +float64 b_SR; // dimensionless (in Ca_r) +float64 Ca_r_tot; // dimensionless (in Ca_r) +float64 q_diff; // millimolar_per_millisecond (in Ca_r) +float64 I_ext; // dimensionless (in I_ex) +float64 g_leak; // one_over_ohm (in g_lea) +float64 tau_f_Ca; // millisecond (in i_Ca_L_f_Ca_gate) +float64 i_Ca_p; // microA_per_microF (in i_Ca_p) +float64 g_Ks; // milliS_per_microF (in i_Ks) +float64 a_infinity; // dimensionless (in i_to_2_a_gate) +float64 d_infinity; // dimensionless (in i_Ca_L_d_gate) +float64 tau_d; // millisecond (in i_Ca_L_d_gate) +float64 f2_infinity; // dimensionless (in i_Ca_L_f2_gate) +float64 tau_f2; // millisecond (in i_Ca_L_f2_gate) +float64 f_infinity; // dimensionless (in i_Ca_L_f_gate) +float64 tau_f; // millisecond (in i_Ca_L_f_gate) +float64 i_Ca_T; // microA_per_microF (in i_Ca_T) +float64 alpha_b; // per_millisecond (in i_Ca_T_b_gate) +float64 b_infinity; // dimensionless (in i_Ca_T_b_gate) +float64 beta_b; // per_millisecond (in i_Ca_T_b_gate) +float64 tau_b; // millisecond (in i_Ca_T_b_gate) +float64 alpha_g; // per_millisecond (in i_Ca_T_g_gate) +float64 beta_g; // per_millisecond (in i_Ca_T_g_gate) +float64 g_infinity; // dimensionless (in i_Ca_T_g_gate) +float64 tau_g; // millisecond (in i_Ca_T_g_gate) +float64 kp; // dimensionless (in i_K_p) +float64 rr_infinity; // dimensionless (in i_Kr) +float64 tau_xr; // millisecond (in i_Kr_xr_gate) +float64 xr_infinity; // dimensionless (in i_Kr_xr_gate) +float64 tau_xs1_PW_0; // millisecond (in i_Ks_xs1_gate) +float64 tau_xs1_PW_1; // millisecond (in i_Ks_xs1_gate) +float64 tau_xs1; // millisecond (in i_Ks_xs1_gate) +float64 xs1_infinity; // dimensionless (in i_Ks_xs1_gate) +float64 tau_xs2_PW_0; // millisecond (in i_Ks_xs2_gate) +float64 tau_xs2_PW_1; // millisecond (in i_Ks_xs2_gate) +float64 tau_xs2; // millisecond (in i_Ks_xs2_gate) +float64 xs2_infinity; // dimensionless (in i_Ks_xs2_gate) +float64 h_L_infinity; // dimensionless (in i_Na_L_h_L_gate) +float64 tau_h_L; // millisecond (in i_Na_L_h_L_gate) +float64 alpha_m_L; // per_millisecond (in i_Na_L_m_L_gate) +float64 beta_m_L; // per_millisecond (in i_Na_L_m_L_gate) +float64 m_L_infinity; // dimensionless (in i_Na_L_m_L_gate) +float64 tau_m_L; // millisecond (in i_Na_L_m_L_gate) +float64 alpha_h; // per_millisecond (in i_Na_h_gate) +float64 beta_h; // per_millisecond (in i_Na_h_gate) +float64 h_infinity; // dimensionless (in i_Na_h_gate) +float64 tau_h; // millisecond (in i_Na_h_gate) +float64 alpha_j; // per_millisecond (in i_Na_j_gate) +float64 beta_j; // per_millisecond (in i_Na_j_gate) +float64 j_infinity; // dimensionless (in i_Na_j_gate) +float64 tau_j; // millisecond (in i_Na_j_gate) +float64 alpha_m; // per_millisecond (in i_Na_m_gate) +float64 beta_m; // per_millisecond (in i_Na_m_gate) +float64 m_infinity; // dimensionless (in i_Na_m_gate) +float64 tau_m; // millisecond (in i_Na_m_gate) +float64 i_bck; // dimensionless (in i_bc) +float64 i_leak_comp; // dimensionless (in i_leak_com) +float64 i_inj; // dimensionless (in i_in) +float64 alpha_a; // per_millisecond (in i_to_1_a_gate) +float64 beta_a; // per_millisecond (in i_to_1_a_gate) +float64 a_infinity; // dimensionless (in i_to_1_a_gate) +float64 tau_a; // millisecond (in i_to_1_a_gate) +float64 alpha_i2; // per_millisecond (in i_to_1_i2_gate) +float64 beta_i2; // per_millisecond (in i_to_1_i2_gate) +float64 i2_infinity; // dimensionless (in i_to_1_i2_gate) +float64 tau_i2; // millisecond (in i_to_1_i2_gate) +float64 alpha_i; // per_millisecond (in i_to_1_i_gate) +float64 beta_i; // per_millisecond (in i_to_1_i_gate) +float64 i_infinity; // dimensionless (in i_to_1_i_gate) +float64 tau_i; // millisecond (in i_to_1_i_gate) +float64 i_to_2_max; // microA_per_microF (in i_to_2) +float64 i_to_2; // microA_per_microF (in i_to_2) +float64 i_stim; // microA_per_microF (in membrane) +float64 i_Ca_b; // microA_per_microF (in background_currents) +float64 i_Ca_L_max; // microA_per_microF (in i_Ca_L) +float64 i_Ca_L; // microA_per_microF (in i_Ca_L) +float64 f_Ca2_infinity; // dimensionless (in i_Ca_L_f_Ca2_gate) +float64 tau_f_Ca2; // millisecond (in i_Ca_L_f_Ca2_gate) +float64 f_Ca_infinity; // dimensionless (in i_Ca_L_f_Ca_gate) +float64 dNaCa_1; // millimolar4 (in i_NaCa) +float64 g_K1; // milliS_per_microF (in i_K1) +float64 g_Kr; // milliS_per_microF (in i_Kr) +float64 dNaCa_2; // millimolar4 (in i_NaCa) +float64 sigma; // dimensionless (in i_NaK) +float64 E_Cl; // millivolt (in equilibrium_potentials) +float64 i_Cl_b; // microA_per_microF (in background_currents) +float64 E_K; // millivolt (in equilibrium_potentials) +float64 CT_K_Cl; // millimolar_per_millisecond (in CT_K_Cl) +float64 i_K_b; // microA_per_microF (in background_currents) +float64 E_Ks; // millivolt (in equilibrium_potentials) +float64 E_Na; // millivolt (in equilibrium_potentials) +float64 CT_Na_Cl; // millimolar_per_millisecond (in CT_Na_Cl) +float64 i_Na_b; // microA_per_microF (in background_currents) +float64 alpha_xK1; // dimensionless (in i_K1_xK1_gate) +float64 beta_xK1; // dimensionless (in i_K1_xK1_gate) +float64 xK1; // dimensionless (in i_K1_xK1_gate) +float64 i_K1; // microA_per_microF (in i_K1) +float64 i_K_p; // microA_per_microF (in i_K_p) +float64 i_Kr; // microA_per_microF (in i_Kr) +float64 i_Ks; // microA_per_microF (in i_Ks) +float64 i_Na; // microA_per_microF (in i_Na) +float64 i_NaCa; // microA_per_microF (in i_NaCa) +float64 f_NaK; // dimensionless (in i_NaK) +float64 i_NaK; // microA_per_microF (in i_NaK) +float64 i_Na_L; // microA_per_microF (in i_Na_L) +float64 i_to_1; // microA_per_microF (in i_to_1) +float64 i_tot; // microA_per_microF (in membrane) +float64 Vol_jsr; // microlitre (in model_parameters) +float64 Vol_myo; // microlitre (in model_parameters) +float64 Vol_nsr; // microlitre (in model_parameters) +float64 Vol_ss; // microlitre (in model_parameters) +float64 a_geo; // cm2 (in model_parameters) +float64 a_cap; // cm2 (in model_parameters) +float64 q_leak; // millimolar_per_millisecond (in q_leak) +float64 vg; // dimensionless (in q_rel) +float64 g_rel; // per_millisecond (in q_rel) +float64 Ca_fac; // millimolar (in q_rel_ri_gate) +float64 ri_infinity; // dimensionless (in q_rel_ri_gate) +float64 tau_Ca_MK; // millisecond (in q_rel_ri_gate) +float64 tau_ri; // millisecond (in q_rel_ri_gate) +float64 q_rel; // millimolar_per_millisecond (in q_rel) +float64 ro_infinity_JSR; // dimensionless (in q_rel_ro_gate) +float64 ro_infinity; // dimensionless (in q_rel_ro_gate) +float64 q_tr; // millimolar_per_millisecond (in q_tr) +float64 dkm_plb; // millimolar (in q_up) +float64 dq_up_Ca_MK; // dimensionless (in q_up) +float64 q_up; // millimolar_per_millisecond (in q_up) + + +//--------------------------------------------------------------------------- +// Computation +//--------------------------------------------------------------------------- + +CMDN = 2 * CMDN_max * Y[1] / pow((km_CMDN + Y[1]), 2); // dimensionless +TRPN = 2 * TRPN_max * Y[1] / pow((km_TRPN + Y[1]), 2); // dimensionless +b_myo = 1 / (1 + CMDN + TRPN); // dimensionless +Ca_MK_bound = (1 - Y[24]) * Ca_MK_0 / (1 + km_Ca_MK / Y[27]); // dimensionless +Ca_MK_act = Ca_MK_bound + Y[24]; // dimensionless +b_SL = 2 * b_SL_max * Y[27] / pow((km_b_SL + Y[27]), 2); // dimensionless +b_SR = 2 * b_SR_max * Y[27] / pow((km_b_SR + Y[27]), 2); // dimensionless +Ca_r_tot = 1 / (1 + b_SL + b_SR); // dimensionless +q_diff = (-Y[1] + Y[27]) / tau_ss; // millimolar_per_millisecond +dY[24] = -beta_Ca_MK * Y[24] + (Ca_MK_bound + Y[24]) * Ca_MK_bound * alpha_Ca_MK; // 1 / millisecond +I_ext = I / (Ampl_gain * Cext); // dimensionless +g_leak = 1 / R_seal; // one_over_ohm +tau_f_Ca = 0.5 + 1 / (1 + 333.33333333333331 * Y[27]) + 10 * Ca_MK_act / (Ca_MK_act + km_Ca_MK); // millisecond +i_Ca_p = Y[1] * i_Ca_p_max / (Y[1] + km_Ca_p); // microA_per_microF +g_Ks = (1 + 0.59999999999999998 / (1 + 6.4818210260626455e-7 * pow((1 / Y[1]), 1.3999999999999999))) * g_Ks_max; // milliS_per_microF +a_infinity = 1 / (1 + km_to_2 / Y[27]); // dimensionless +dY[20] = (-Y[20] + a_infinity) / tau_a; // 1 / millisecond +d_infinity = 1 / (1 + exp(0.59347181008902072 - 0.14836795252225518 * Y[0])); // dimensionless +tau_d = 0.58999999999999997 + 0.80000000000000004 * exp(0.67599999999999993 + 0.051999999999999998 * Y[0]) / (1 + exp(1.7160000000000002 + 0.13200000000000001 * Y[0])); // millisecond +f2_infinity = 1 / (1 + exp(1.8 + 0.10000000000000001 * Y[0])); // dimensionless +tau_f2 = 38 + 24.217200000000005 * pow((-1 + 0.053763440860215048 * Y[0]), 2); // millisecond +f_infinity = 1 / (1 + exp(1.8 + 0.10000000000000001 * Y[0])); // dimensionless +tau_f = 4 + 0.03125 * pow((-1 + 0.40000000000000002 * Y[0]), 2); // millisecond +i_Ca_T = (-50 + Y[0]) * Y[12] * Y[13] * g_Ca_T; // microA_per_microF +alpha_b = 1.0680000000000001 * exp(0.54333333333333333 + 0.033333333333333333 * Y[0]); // per_millisecond +b_infinity = 1 / (1 + exp(-5.4098360655737707 - 0.16393442622950821 * Y[0])); // dimensionless +beta_b = 1.0680000000000001 * exp(-0.54333333333333333 - 0.033333333333333333 * Y[0]); // per_millisecond +tau_b = 1 / (alpha_b + beta_b); // millisecond +alpha_g = 0.014999999999999999 * exp(-0.86074429771908767 - 0.012004801920768308 * Y[0]); // per_millisecond +beta_g = 0.014999999999999999 * exp(4.6558441558441563 + 0.064935064935064929 * Y[0]); // per_millisecond +g_infinity = 1 / (1 + exp(9.0909090909090917 + 0.15151515151515152 * Y[0])); // dimensionless +tau_g = 1 / (alpha_g + beta_g); // millisecond +kp = 1 / (1 + exp(1.2521739130434781 - 0.16722408026755853 * Y[0])); // dimensionless +rr_infinity = 1 / (1 + exp(-0.26470588235294124 + 0.049019607843137261 * Y[0])); // dimensionless +tau_xr = 100 + 900 / (1 + exp(0.20000000000000001 * Y[0])); // millisecond +xr_infinity = 1 / (1 + exp(-0.0069387755102040824 - 0.081632653061224483 * Y[0])); // dimensionless +if ((Y[0] >= 0.54999921875000002) && (Y[0] <= 0.55000078125000007)) + tau_xs1_PW_0 = -2.8124999999965681e-10 / (-1 + exp(-9.999999999987797e-8)) + 640000.00000042573 * (-0.54999921875000002 + Y[0]) * (2.8124999999996902e-10 / (-1 + exp(9.9999999999988984e-8)) + 2.8124999999965681e-10 / (-1 + exp(-9.999999999987797e-8))) +else + tau_xs1_PW_0 = 0.00036000000000000002 * (-0.55000000000000004 + Y[0]) / (-1 + exp(-0.070400000000000004 + 0.128 * Y[0])) + +if ((Y[0] >= -44.600000010030094) && (Y[0] <= -44.599999989969909)) + tau_xs1_PW_1 = -7.6328986866047728e-13 / (1 - exp(9.9999999875755032e-8)) + 49850000.061936118 * (44.600000010030094 + Y[0]) * (7.6328986866047728e-13 / (1 - exp(9.9999999875755032e-8)) + 7.6328986866047728e-13 / (1 - exp(-9.9999999875755032e-8))) +else + tau_xs1_PW_1 = 7.6100000000000007e-5 * (44.600000000000001 + Y[0]) / (1 - exp(-444.66200000000003 - 9.9700000000000006 * Y[0])) + +tau_xs1 = 1 / (tau_xs1_PW_0 + tau_xs1_PW_1); // millisecond +xs1_infinity = 1 / (1 + exp(0.65693430656934315 - 0.072992700729927015 * Y[0])); // dimensionless +if ((Y[0] >= 0.54999921875000002) && (Y[0] <= 0.55000078125000007)) + tau_xs2_PW_0 = -2.8124999999965681e-10 / (-1 + exp(-9.999999999987797e-8)) + 640000.00000042573 * (-0.54999921875000002 + Y[0]) * (2.8124999999996902e-10 / (-1 + exp(9.9999999999988984e-8)) + 2.8124999999965681e-10 / (-1 + exp(-9.999999999987797e-8))) +else + tau_xs2_PW_0 = 0.00036000000000000002 * (-0.55000000000000004 + Y[0]) / (-1 + exp(-0.070400000000000004 + 0.128 * Y[0])) + +if ((Y[0] >= -44.600000010030094) && (Y[0] <= -44.599999989969909)) + tau_xs2_PW_1 = -7.6328986866047728e-13 / (1 - exp(9.9999999875755032e-8)) + 49850000.061936118 * (44.600000010030094 + Y[0]) * (7.6328986866047728e-13 / (1 - exp(9.9999999875755032e-8)) + 7.6328986866047728e-13 / (1 - exp(-9.9999999875755032e-8))) +else + tau_xs2_PW_1 = 7.6100000000000007e-5 * (44.600000000000001 + Y[0]) / (1 - exp(-444.66200000000003 - 9.9700000000000006 * Y[0])) + +tau_xs2 = 2 / (tau_xs2_PW_0 + tau_xs2_PW_1); // millisecond +xs2_infinity = 1 / (1 + exp(0.65693430656934315 - 0.072992700729927015 * Y[0])); // dimensionless +h_L_infinity = 1 / (1 + exp(11.311475409836067 + 0.16393442622950821 * Y[0])); // dimensionless +tau_h_L = 175 + 125 / (1 + exp(-4.166666666666667 - 0.16666666666666666 * Y[0])); // millisecond +if ((Y[0] >= -47.130001) && (Y[0] <= -47.129999000000005)) + alpha_m_L = -3.200000000092018e-7 / (1 - exp(1.0000000000287557e-7)) + 499999.99998562218 * (47.130001 + Y[0]) * (3.200000000092018e-7 / (1 - exp(1.0000000000287557e-7)) + 3.200000000092018e-7 / (1 - exp(-1.0000000000287557e-7))) +else + alpha_m_L = 0.32000000000000001 * (47.130000000000003 + Y[0]) / (1 - exp(-4.7130000000000001 - 0.10000000000000001 * Y[0])) + +beta_m_L = 0.080000000000000002 * exp(-0.090909090909090912 * Y[0]); // per_millisecond +m_L_infinity = alpha_m_L / (alpha_m_L + beta_m_L); // dimensionless +tau_m_L = 1 / (alpha_m_L + beta_m_L); // millisecond +if (Y[0] < -40) + alpha_h = 0.13500000000000001 * exp(-11.764705882352942 + 0.14705882352941177 * shift_INa_inact - 0.14705882352941177 * Y[0]) +else + alpha_h = 0 + +if (Y[0] < -40) + beta_h = 310000 * exp(0.34999999999999998 * Y[0] - 0.34999999999999998 * shift_INa_inact) + 3.5600000000000001 * exp(0.079000000000000001 * Y[0] - 0.079000000000000001 * shift_INa_inact) +else + beta_h = 7.6923076923076916 / (1 + exp(-0.96036036036036043 + 0.0900900900900901 * shift_INa_inact - 0.0900900900900901 * Y[0])) + +h_infinity = 0.01 * perc_reduced_inact_for_IpNa + (1 - 0.01 * perc_reduced_inact_for_IpNa) * alpha_h / (alpha_h + beta_h); // dimensionless +tau_h = 1 / (alpha_h + beta_h); // millisecond +if (Y[0] < -40) + alpha_j = (37.780000000000001 + Y[0]) * (-127140 * exp(0.24440000000000001 * Y[0] - 0.24440000000000001 * shift_INa_inact) - 3.4740000000000003e-5 * exp(0.043909999999999998 * shift_INa_inact - 0.043909999999999998 * Y[0])) / (1 + exp(24.640530000000002 + 0.311 * Y[0] - 0.311 * shift_INa_inact)) +else + alpha_j = 0 + +if (Y[0] < -40) + beta_j = 0.1212 * exp(0.01052 * shift_INa_inact - 0.01052 * Y[0]) / (1 + exp(-5.5312920000000005 + 0.13780000000000001 * shift_INa_inact - 0.13780000000000001 * Y[0])) +else + beta_j = 0.29999999999999999 * exp(2.5349999999999999e-7 * shift_INa_inact - 2.5349999999999999e-7 * Y[0]) / (1 + exp(-3.2000000000000002 + 0.10000000000000001 * shift_INa_inact - 0.10000000000000001 * Y[0])) + +j_infinity = 0.01 * perc_reduced_inact_for_IpNa + (1 - 0.01 * perc_reduced_inact_for_IpNa) * alpha_j / (alpha_j + beta_j); // dimensionless +tau_j = 1 / (alpha_j + beta_j); // millisecond +if ((Y[0] >= -47.130001) && (Y[0] <= -47.129999000000005)) + alpha_m = -3.200000000092018e-7 / (1 - exp(1.0000000000287557e-7)) + 499999.99998562218 * (47.130001 + Y[0]) * (3.200000000092018e-7 / (1 - exp(1.0000000000287557e-7)) + 3.200000000092018e-7 / (1 - exp(-1.0000000000287557e-7))) +else + alpha_m = 0.32000000000000001 * (47.130000000000003 + Y[0]) / (1 - exp(-4.7130000000000001 - 0.10000000000000001 * Y[0])) + +beta_m = 0.080000000000000002 * exp(-0.090909090909090912 * Y[0]); // per_millisecond +m_infinity = alpha_m / (alpha_m + beta_m); // dimensionless +tau_m = 1 / (alpha_m + beta_m); // millisecond +i_bck = A0_bck * Scale_bck / ((1 + exp(-Y[0] * k_bck)) * Cext); // dimensionless +i_leak_comp = (-E_l + Y[0]) * g_leak * leak_comp_perc / (100 * Cext); // dimensionless +i_inj = (-i_bck - i_leak_comp + I_ext) * Scaling; // dimensionless +alpha_a = 25 * exp(-3.7999999999999998 + 0.050000000000000003 * Y[0]) / (1 + exp(-3.7999999999999998 + 0.050000000000000003 * Y[0])); // per_millisecond +beta_a = 25 * exp(-2.7000000000000002 - 0.050000000000000003 * Y[0]) / (1 + exp(-2.7000000000000002 - 0.050000000000000003 * Y[0])); // per_millisecond +a_infinity = alpha_a / (alpha_a + beta_a); // dimensionless +tau_a = 1 / (alpha_a + beta_a); // millisecond +alpha_i2 = 0.0044200000000000003 / (1 + exp(1.7333333333333334 + 0.066666666666666666 * Y[0])); // per_millisecond +beta_i2 = 0.050000000000000003 * exp(-0.66666666666666663 + 0.066666666666666666 * Y[0]) / (1 + exp(-0.66666666666666663 + 0.066666666666666666 * Y[0])); // per_millisecond +i2_infinity = alpha_i2 / (alpha_i2 + beta_i2); // dimensionless +tau_i2 = 21.5 + 30 / (1 + exp(-2.5 + 0.10000000000000001 * Y[0])); // millisecond +alpha_i = 0.029999999999999999 / (1 + exp(1.6666666666666667 + 0.066666666666666666 * Y[0])); // per_millisecond +beta_i = 0.10000000000000001 * exp(-2.6666666666666665 + 0.066666666666666666 * Y[0]) / (1 + exp(-2.6666666666666665 + 0.066666666666666666 * Y[0])); // per_millisecond +i_infinity = alpha_i / (alpha_i + beta_i); // dimensionless +tau_i = 6 + 5 / (1 + exp(-1.6499999999999999 + 0.10000000000000001 * Y[0])); // millisecond +if ((Y[0] >= -2.6712338705498262e-6) && (Y[0] <= 2.6712338705498262e-6)) + i_to_2_max = 187179.41753901311 * (2.6712338705498262e-6 + Y[0]) * (3.8593999999999993e-9 * (-100 * exp(9.9999999999999995e-8) + Y[22]) / (1 - exp(9.9999999999999995e-8)) + 3.8593999999999993e-9 * (-100 * exp(-9.9999999999999995e-8) + Y[22]) / (1 - exp(-9.9999999999999995e-8))) - 3.8593999999999993e-9 * (-100 * exp(-9.9999999999999995e-8) + Y[22]) / (1 - exp(-9.9999999999999995e-8)) +else + i_to_2_max = 0.0014448004881001341 * (-100 * exp(0.037435883507802616 * Y[0]) + Y[22]) * Y[0] / (1 - exp(0.037435883507802616 * Y[0])) + +i_to_2 = 20 * Y[20] * i_to_2_max; // microA_per_microF +if ((Y[30] >= stim_start) && (Y[30] <= stim_end) && (stim_duration >= -stim_start - stim_period * floor((-stim_start + Y[30]) / stim_period) + Y[30])) + i_stim = stim_amplitude +else + i_stim = 0 + +if ((Y[0] >= -1.3356169352749131e-6) && (Y[0] <= 1.3356169352749131e-6)) + i_Ca_b = 374358.83507802623 * (1.3356169352749131e-6 + Y[0]) * (3.8499135947999997e-9 * (-0.34100000000000003 * Ca_o + Y[1] * exp(9.9999999999999995e-8)) / (-1 + exp(9.9999999999999995e-8)) + 3.8499135947999997e-9 * (-0.34100000000000003 * Ca_o + Y[1] * exp(-9.9999999999999995e-8)) / (-1 + exp(-9.9999999999999995e-8))) - 3.8499135947999997e-9 * (-0.34100000000000003 * Ca_o + Y[1] * exp(-9.9999999999999995e-8)) / (-1 + exp(-9.9999999999999995e-8)) +else + i_Ca_b = 0.0028824983370007683 * (-0.34100000000000003 * Ca_o + Y[1] * exp(0.074871767015605231 * Y[0])) * Y[0] / (-1 + exp(0.074871767015605231 * Y[0])) + +if ((Y[0] >= 14.999998664383064) && (Y[0] <= 15.000001335616936)) + i_Ca_L_max = 374358.83507888648 * (-14.999998664383064 + Y[0]) * (4.6891709999892238e-6 * (-0.34100000000000003 * Ca_o + Y[27] * exp(9.9999999999770198e-8)) / (-1 + exp(9.9999999999770198e-8)) + 4.6891709999892238e-6 * (-0.34100000000000003 * Ca_o + Y[27] * exp(-9.9999999999770198e-8)) / (-1 + exp(-9.9999999999770198e-8))) - 4.6891709999892238e-6 * (-0.34100000000000003 * Ca_o + Y[27] * exp(-9.9999999999770198e-8)) / (-1 + exp(-9.9999999999770198e-8)) +else + i_Ca_L_max = 3.510865186083326 * (-15 + Y[0]) * (-0.34100000000000003 * Ca_o + Y[27] * exp(-1.1230765052340785 + 0.074871767015605231 * Y[0])) / (-1 + exp(-1.1230765052340785 + 0.074871767015605231 * Y[0])) + +i_Ca_L = Y[10] * Y[11] * Y[7] * Y[8] * Y[9] * g_Ca_L * i_Ca_L_max; // microA_per_microF +f_Ca2_infinity = 1 / (1 - 100 * i_Ca_L); // dimensionless +tau_f_Ca2 = 125 + 300 / (1 + exp(-4.375 - 25 * i_Ca_L)); // millisecond +dY[11] = (-Y[11] + f_Ca2_infinity) / tau_f_Ca2; // 1 / millisecond +f_Ca_infinity = 0.14999999999999999 + 0.55000000000000004 / (1 + 333.33333333333331 * Y[27]) + 0.29999999999999999 / (1 - 20 * i_Ca_L); // dimensionless +dY[10] = (-Y[10] + f_Ca_infinity) / tau_f_Ca; // 1 / millisecond +dNaCa_1 = pow(Y[21], 3) * km_Ca_o + 1.5 * pow(km_Na_o, 3) * Y[1] + pow(km_Na_i_1, 3) * (1 + 1.5 * Y[1] / km_Ca_i) * Ca_o; // millimolar4 +g_K1 = 0.43033148291193518 * sqrt(K_o) * g_K1_max; // milliS_per_microF +g_Kr = 0.43033148291193518 * sqrt(K_o) * g_Kr_max; // milliS_per_microF +dNaCa_2 = pow(Y[21], 3) * Ca_o + 1.5 * pow(Na_o, 3) * Y[1] + pow(Na_o, 3) * (1 + Y[21] / km_Na_i_1) * km_Ca_i; // millimolar4 +sigma = -0.14285714285714285 + 0.14285714285714285 * exp(0.01485884101040119 * Na_o); // dimensionless +E_Cl = -R * T * log(Cl_o / Y[22]) / F; // millivolt +i_Cl_b = (-E_Cl + Y[0]) * g_Cl_b; // microA_per_microF +E_K = R * T * log(K_o / Y[23]) / F; // millivolt +CT_K_Cl = (-E_Cl + E_K) * CT_K_Cl_max / (87.825100000000006 - E_Cl + E_K); // millimolar_per_millisecond +i_K_b = (-E_K + Y[0]) * g_K_b; // microA_per_microF +E_Ks = R * T * log((r_NaK * Na_o + K_o) / (Y[21] * r_NaK + Y[23])) / F; // millivolt +E_Na = R * T * log(Na_o / Y[21]) / F; // millivolt +CT_Na_Cl = pow((-E_Cl + E_Na), 4) * CT_Na_Cl_max / (59494197.640692554 + pow((-E_Cl + E_Na), 4)); // millimolar_per_millisecond +i_Na_b = (-E_Na + Y[0]) * g_Na_b; // microA_per_microF +alpha_xK1 = 1.02 / (1 + exp(-14.1227775 + 0.23849999999999999 * Y[0] - 0.23849999999999999 * E_K)); // dimensionless +beta_xK1 = (0.49124000000000001 * exp(0.43983232 + 0.080320000000000003 * Y[0] - 0.080320000000000003 * E_K) + exp(-36.698642499999998 + 0.061749999999999999 * Y[0] - 0.061749999999999999 * E_K)) / (1 + exp(-2.4444678999999998 + 0.51429999999999998 * E_K - 0.51429999999999998 * Y[0])); // dimensionless +xK1 = alpha_xK1 / (alpha_xK1 + beta_xK1); // dimensionless +i_K1 = (0.0040000000000000001 + g_K1 * xK1) * (-E_K + Y[0]); // microA_per_microF +i_K_p = (-E_K + Y[0]) * g_K_p * kp; // microA_per_microF +i_Kr = (-E_K + Y[0]) * Y[17] * g_Kr * rr_infinity; // microA_per_microF +i_Ks = (-E_Ks + Y[0]) * Y[18] * Y[19] * g_Ks; // microA_per_microF +i_Na = pow(Y[2], 3) * (-E_Na + Y[0]) * (0.20000000000000001 * Y[4] + 0.80000000000000004 * Y[3]) * g_Na; // microA_per_microF +i_NaCa = (-1.5 * pow(Na_o, 3) * Y[1] * exp(-0.65000000000000002 * Y[0] * F / (R * T)) + pow(Y[21], 3) * X_NaCa * i_NaCa_max * Ca_o * exp(0.34999999999999998 * Y[0] * F / (R * T))) / ((1 + k_sat * exp(-0.65000000000000002 * Y[0] * F / (R * T))) * (1 + 0.44444444444444442 * pow(km_Ca_act, 2) / pow(Y[1], 2)) * (dNaCa_1 + dNaCa_2)); // microA_per_microF +f_NaK = 1 / (1 + 0.1245 * exp(-0.10000000000000001 * Y[0] * F / (R * T)) + 0.036499999999999998 * sigma * exp(-Y[0] * F / (R * T))); // dimensionless +i_NaK = f_NaK * g_NaK * K_o / ((1 + pow(km_Na_i_2, 2) / pow(Y[21], 2)) * (km_K_o + K_o)); // microA_per_microF +i_Na_L = pow(Y[5], 3) * (-E_Na + Y[0]) * Y[6] * g_Na_L; // microA_per_microF +i_to_1 = (-E_K + Y[0]) * (0.20000000000000001 * Y[16] + 0.80000000000000004 * Y[15]) * Y[14] * g_to_1; // microA_per_microF +i_tot = i_Ca_b + i_Cl_b + i_K_b + i_Na_b + i_Ca_L + i_Ca_T + i_Ca_p + i_K1 + i_K_p + i_Kr + i_Ks + i_Na + i_NaCa + i_NaK + i_Na_L + i_to_1 + i_to_2; // microA_per_microF +dY[0] = -i_inj - i_stim - i_tot; // millivolt / millisecond +Vol_jsr = 0.0047999999999999996 * Vol_cell; // microlitre +Vol_myo = 0.68000000000000005 * Vol_cell; // microlitre +Vol_nsr = 0.055199999999999999 * Vol_cell; // microlitre +Vol_ss = 0.02 * Vol_cell; // microlitre +a_geo = 6.2800000000000002 * pow(radius, 2) + 6.2800000000000002 * length * radius; // cm2 +a_cap = a_geo * rcg; // cm2 +dY[22] = (-(i_Cl_b + i_to_2) * Cm * a_cap / (F * Vol_myo) + CT_K_Cl + CT_Na_Cl) * conc_clamp; // millimolar / millisecond +dY[23] = (-(-2 * i_NaK + i_K_b + i_K1 + i_K_p + i_Kr + i_Ks + i_to_1) * Cm * a_cap / (F * Vol_myo) + CT_K_Cl) * conc_clamp; // millimolar / millisecond +dY[21] = (-(3 * i_NaCa + 3 * i_NaK + i_Na_b + i_Na + i_Na_L) * Cm * a_cap / (F * Vol_myo) + CT_Na_Cl) * conc_clamp; // millimolar / millisecond +q_leak = Y[25] * q_leak_max / NSR_max; // millimolar_per_millisecond +vg = 1 / (1 + exp(2.6000000000000001 + 0.20000000000000001 * g_Ca_L * i_Ca_L_max)); // dimensionless +g_rel = g_rel_max * vg; // per_millisecond +Ca_fac = 1 / (1 + exp(3.3333333333333335 + 66.666666666666671 * i_Ca_L)); // millimolar +ri_infinity = 1 / (1 + exp(-16 + 80 * Ca_fac + 40000 * Y[27])); // dimensionless +tau_Ca_MK = Ca_MK_act * tau_Ca_MK_max / (Ca_MK_act + km_Ca_MK); // millisecond +tau_ri = 3 + (350 - tau_Ca_MK) / (1 + exp(-15 + 5000 * Y[27] + 15 * Ca_fac)) + tau_Ca_MK; // millisecond +dY[28] = (-Y[28] + ri_infinity) / tau_ri; // 1 / millisecond +q_rel = (-Y[27] + Y[26]) * Y[28] * Y[29] * g_rel; // millimolar_per_millisecond +dY[27] = (-q_diff + Vol_jsr * q_rel / Vol_ss - i_Ca_L * Cm * a_cap / (F * Vol_ss * z_Ca)) * Ca_r_tot; // millimolar / millisecond +ro_infinity_JSR = pow(Y[26], 1.8999999999999999) / (pow(Y[26], 1.8999999999999999) + 1644.6531773416521 * pow((Y[27] / (0.0028 + Y[27])), 1.8999999999999999)); // dimensionless +ro_infinity = pow(i_Ca_L, 2) * ro_infinity_JSR / (1 + pow(i_Ca_L, 2)); // dimensionless +dY[29] = (-Y[29] + ro_infinity) / tau_ro; // 1 / millisecond +q_tr = (-Y[26] + Y[25]) / tau_tr; // millimolar_per_millisecond +dY[26] = (-q_rel + q_tr) / (1 + CSQN_max * km_CSQN / pow((km_CSQN + Y[26]), 2)); // millimolar / millisecond +dkm_plb = Ca_MK_act * dkm_plb_max / (Ca_MK_act + km_Ca_MK); // millimolar +dq_up_Ca_MK = Ca_MK_act * dq_up_Ca_MK_max / (Ca_MK_act + km_Ca_MK); // dimensionless +q_up = (1 + dq_up_Ca_MK) * Y[1] * X_q_up * q_up_max / (-dkm_plb + Y[1] + km_up); // millimolar_per_millisecond +dY[25] = -q_leak - Vol_jsr * q_tr / Vol_nsr + q_up; // millimolar / millisecond +dY[1] = -((-q_leak + q_up) * Vol_nsr / Vol_myo - q_diff * Vol_ss / Vol_myo + 0.5 * (-2 * i_NaCa + i_Ca_b + i_Ca_p) * Cm * a_cap / (F * Vol_myo)) * b_myo; // millimolar / millisecond +//------------------------------------------------------------------------------ +// Integration & Output +//------------------------------------------------------------------------------ +// Rush-Larsen method + +// get tau/inf or alpha/beta + +float64 alphaOrTau_2 = tau_m; +float64 betaOrInf_2 = m_infinity; +float64 alphaOrTau_3 = tau_h; +float64 betaOrInf_3 = h_infinity; +float64 alphaOrTau_4 = tau_j; +float64 betaOrInf_4 = j_infinity; +float64 alphaOrTau_5 = tau_m_L; +float64 betaOrInf_5 = m_L_infinity; +float64 alphaOrTau_6 = tau_h_L; +float64 betaOrInf_6 = h_L_infinity; +float64 alphaOrTau_7 = tau_d; +float64 betaOrInf_7 = d_infinity; +float64 alphaOrTau_8 = tau_f; +float64 betaOrInf_8 = f_infinity; +float64 alphaOrTau_9 = tau_f2; +float64 betaOrInf_9 = f2_infinity; +float64 alphaOrTau_12 = tau_b; +float64 betaOrInf_12 = b_infinity; +float64 alphaOrTau_13 = tau_g; +float64 betaOrInf_13 = g_infinity; +float64 alphaOrTau_14 = tau_a; +float64 betaOrInf_14 = a_infinity; +float64 alphaOrTau_15 = tau_i; +float64 betaOrInf_15 = i_infinity; +float64 alphaOrTau_16 = tau_i2; +float64 betaOrInf_16 = i2_infinity; +float64 alphaOrTau_17 = tau_xr; +float64 betaOrInf_17 = xr_infinity; +float64 alphaOrTau_18 = tau_xs1; +float64 betaOrInf_18 = xs1_infinity; +float64 alphaOrTau_19 = tau_xs2; +float64 betaOrInf_19 = xs2_infinity; + +// gating variables: Exponential integration + +Ynew[2] = betaOrInf_2 + (Y[2] - betaOrInf_2)*exp(-dt/alphaOrTau_2); +Ynew[3] = betaOrInf_3 + (Y[3] - betaOrInf_3)*exp(-dt/alphaOrTau_3); +Ynew[4] = betaOrInf_4 + (Y[4] - betaOrInf_4)*exp(-dt/alphaOrTau_4); +Ynew[5] = betaOrInf_5 + (Y[5] - betaOrInf_5)*exp(-dt/alphaOrTau_5); +Ynew[6] = betaOrInf_6 + (Y[6] - betaOrInf_6)*exp(-dt/alphaOrTau_6); +Ynew[7] = betaOrInf_7 + (Y[7] - betaOrInf_7)*exp(-dt/alphaOrTau_7); +Ynew[8] = betaOrInf_8 + (Y[8] - betaOrInf_8)*exp(-dt/alphaOrTau_8); +Ynew[9] = betaOrInf_9 + (Y[9] - betaOrInf_9)*exp(-dt/alphaOrTau_9); +Ynew[12] = betaOrInf_12 + (Y[12] - betaOrInf_12)*exp(-dt/alphaOrTau_12); +Ynew[13] = betaOrInf_13 + (Y[13] - betaOrInf_13)*exp(-dt/alphaOrTau_13); +Ynew[14] = betaOrInf_14 + (Y[14] - betaOrInf_14)*exp(-dt/alphaOrTau_14); +Ynew[15] = betaOrInf_15 + (Y[15] - betaOrInf_15)*exp(-dt/alphaOrTau_15); +Ynew[16] = betaOrInf_16 + (Y[16] - betaOrInf_16)*exp(-dt/alphaOrTau_16); +Ynew[17] = betaOrInf_17 + (Y[17] - betaOrInf_17)*exp(-dt/alphaOrTau_17); +Ynew[18] = betaOrInf_18 + (Y[18] - betaOrInf_18)*exp(-dt/alphaOrTau_18); +Ynew[19] = betaOrInf_19 + (Y[19] - betaOrInf_19)*exp(-dt/alphaOrTau_19); + +// Remainder: Forward Euler + +Ynew[0] = Y[0] + dt * d_dt_V; +Ynew[1] = Y[1] + dt * d_dt_Ca_i; +Ynew[10] = Y[10] + dt * d_dt_f_Ca; +Ynew[11] = Y[11] + dt * d_dt_f_Ca2; +Ynew[20] = Y[20] + dt * d_dt_a; +Ynew[21] = Y[21] + dt * d_dt_Na_i; +Ynew[22] = Y[22] + dt * d_dt_Cl_i; +Ynew[23] = Y[23] + dt * d_dt_K_i; +Ynew[24] = Y[24] + dt * d_dt_Ca_MK_trap; +Ynew[25] = Y[25] + dt * d_dt_Ca_NSR; +Ynew[26] = Y[26] + dt * d_dt_Ca_JSR; +Ynew[27] = Y[27] + dt * d_dt_Ca_r; +Ynew[28] = Y[28] + dt * d_dt_ri; +Ynew[29] = Y[29] + dt * d_dt_ro; +Ynew[30] = Y[30] + dt; + +Vmem = Ynew[0]; +time = Ynew[30]; \ No newline at end of file diff --git a/chaste_codegen/tests/numerical/baseline/RLopt/dynamic_bondarenko_szigeti_bett_kim_rasmusson_2004_apical.cpp b/chaste_codegen/tests/numerical/baseline/RLopt/dynamic_bondarenko_szigeti_bett_kim_rasmusson_2004_apical.cpp new file mode 100644 index 00000000..2f0b9d76 --- /dev/null +++ b/chaste_codegen/tests/numerical/baseline/RLopt/dynamic_bondarenko_szigeti_bett_kim_rasmusson_2004_apical.cpp @@ -0,0 +1,1545 @@ +//! @file +//! +//! This source file was generated from CellML by chaste_codegen version (version omitted as unimportant) +//! +//! Model: bondarenko_2004_apical +//! +//! Processed by chaste_codegen: https://github.com/ModellingWebLab/chaste-codegen +//! (translator: chaste_codegen, model type: RushLarsenOpt) +//! on (date omitted as unimportant) +//! +//! + +#include "dynamic_bondarenko_szigeti_bett_kim_rasmusson_2004_apical.hpp" +#include +#include +#include +#include +#include "Exception.hpp" +#include "OdeSystemInformation.hpp" +#include "RegularStimulus.hpp" +#include "HeartConfig.hpp" +#include "IsNan.hpp" +#include "MathsCustomFunctions.hpp" + +#include "ModelFactory.hpp" + +AbstractRushLarsenCardiacCell* Dynamicbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLRushLarsenOpt::CreateMethod(boost::shared_ptr p_solver, boost::shared_ptr p_stimulus) { + return new Dynamicbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLRushLarsenOpt(p_solver, p_stimulus); +} + +bool Dynamicbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLRushLarsenOpt::registered = ModelFactory::Register("dynamic_bondarenko_szigeti_bett_kim_rasmusson_2004_apical", "RushLarsenOpt", (ModelFactory::TCreateMethod)Dynamicbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLRushLarsenOpt::CreateMethod); + +class Dynamicbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLRushLarsenOpt_LookupTables : public AbstractLookupTableCollection +{ +public: + static Dynamicbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLRushLarsenOpt_LookupTables* Instance() + { + if (mpInstance.get() == NULL) + { + mpInstance.reset(new Dynamicbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLRushLarsenOpt_LookupTables); + } + return mpInstance.get(); + } + + void FreeMemory() + { + + if (_lookup_table_0) + { + delete[] _lookup_table_0; + _lookup_table_0 = NULL; + } + + mNeedsRegeneration.assign(mNeedsRegeneration.size(), true); + } + + // Row lookup methods + // using linear-interpolation + + double* _lookup_0_row(unsigned i, double _factor_) + { + for (unsigned j=0; j<37; j++) + { + const double y1 = _lookup_table_0[i][j]; + const double y2 = _lookup_table_0[i+1][j]; + _lookup_table_0_row[j] = y1 + (y2-y1)*_factor_; + } + return _lookup_table_0_row; + } + + + const double * IndexTable0(double var_chaste_interface__membrane__V) + { + const double _offset_0 = var_chaste_interface__membrane__V - mTableMins[0]; + const double _offset_0_over_table_step = _offset_0 * mTableStepInverses[0]; + const unsigned _table_index_0 = (unsigned)(_offset_0_over_table_step); + const double _factor_0 = _offset_0_over_table_step - _table_index_0; + const double* const _lt_0_row = Dynamicbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLRushLarsenOpt_LookupTables::Instance()->_lookup_0_row(_table_index_0, _factor_0); + return _lt_0_row; + } + + +// LCOV_EXCL_START + bool CheckIndex0(double& var_chaste_interface__membrane__V) + { + bool _oob_0 = false; + if (var_chaste_interface__membrane__V>mTableMaxs[0] || var_chaste_interface__membrane__V mpInstance; + + // Row lookup methods memory + double _lookup_table_0_row[37]; + + // Lookup tables + double (*_lookup_table_0)[37]; + int _lookup_table_0_num_misshit_piecewise[37] = {0}; + +}; + +std::shared_ptr Dynamicbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLRushLarsenOpt_LookupTables::mpInstance; + + + boost::shared_ptr Dynamicbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLRushLarsenOpt::UseCellMLDefaultStimulus() + { + // Use the default stimulus specified by CellML metadata + const double var_chaste_interface__membrane__stim_amplitude_converted = -80 * HeartConfig::Instance()->GetCapacitance(); // uA_per_cm2 + const double var_chaste_interface__membrane__stim_duration = 0.5; // millisecond + const double var_chaste_interface__membrane__stim_period = 71.430000000000007; // millisecond + const double var_chaste_interface__membrane__stim_start = 0; // millisecond + boost::shared_ptr p_cellml_stim(new RegularStimulus( + -fabs(var_chaste_interface__membrane__stim_amplitude_converted), + var_chaste_interface__membrane__stim_duration, + var_chaste_interface__membrane__stim_period, + var_chaste_interface__membrane__stim_start + )); + mpIntracellularStimulus = p_cellml_stim; + return p_cellml_stim; + } + double Dynamicbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLRushLarsenOpt::GetIntracellularCalciumConcentration() + { + return mStateVariables[1]; + } + Dynamicbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLRushLarsenOpt::Dynamicbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLRushLarsenOpt(boost::shared_ptr /* unused; should be empty */, boost::shared_ptr pIntracellularStimulus) + : AbstractRushLarsenCardiacCell( + 41, + 0, + pIntracellularStimulus) + { + // Time units: millisecond + // + this->mpSystemInfo = OdeSystemInformation::Instance(); + Init(); + + // We have a default stimulus specified in the CellML file metadata + this->mHasDefaultStimulusFromCellML = true; + + this->mParameters[0] = 1.7399999999999999e-5; // (var_calcium_fluxes__v2) [per_millisecond] + this->mParameters[1] = 4.5; // (var_calcium_fluxes__v1) [per_millisecond] + this->mParameters[2] = 0.45000000000000001; // (var_calcium_fluxes__v3) [micromolar_per_millisecond] + this->mParameters[3] = 1; // (var_sodium_concentration__conc_clamp) [dimensionless] + this->mParameters[4] = 1800; // (var_membrane__Cao) [micromolar] + this->mParameters[5] = 5400; // (var_membrane__Ko) [micromolar] + this->mParameters[6] = 140000; // (var_membrane__Nao) [micromolar] + this->mParameters[7] = 0.1729; // (var_L_type_calcium_current__g_CaL) [milliS_per_microF] + this->mParameters[8] = 1; // (var_membrane__Cm) [microF_per_cm2] + this->mParameters[9] = 13; // (var_fast_sodium_current__g_Na) [milliS_per_microF] + this->mParameters[10] = 0; // (var_fast_sodium_current__shift_INa_inact) [millivolt] + this->mParameters[11] = 0.29380000000000001; // (var_time_independent_potassium_current__g_K1) [milliS_per_microF] + this->mParameters[12] = 0.050000000000000003; // (var_non_inactivating_steady_state_potassium_current__g_Kss) [milliS_per_microF] + this->mParameters[13] = 0.078; // (var_rapid_delayed_rectifier_potassium_current__g_Kr) [milliS_per_microF] + this->mParameters[14] = 0.0057499999999999999; // (var_slow_delayed_rectifier_potassium_current__g_Ks) [milliS_per_microF] + this->mParameters[15] = 292.80000000000001; // (var_sodium_calcium_exchange_current__k_NaCa) [picoA_per_picoF] + this->mParameters[16] = 0.40670000000000001; // (var_fast_transient_outward_potassium_current__g_Kto_f) [milliS_per_microF] + } + + Dynamicbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLRushLarsenOpt::~Dynamicbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLRushLarsenOpt() + { + } + + AbstractLookupTableCollection* Dynamicbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLRushLarsenOpt::GetLookupTableCollection() + { + return Dynamicbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLRushLarsenOpt_LookupTables::Instance(); + } + + void Dynamicbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLRushLarsenOpt::VerifyStateVariables() + { + std::vector& rY = rGetStateVariables(); + std::string error_message = ""; + + for (unsigned i=0; i < 41; i++) + { + if(std::isnan(rY[i])) + { + error_message += "State variable " + this->rGetStateVariableNames()[i] + " is not a number\n"; + } + if(std::isinf(rY[i])) + { + error_message += "State variable " + this->rGetStateVariableNames()[i] + " has become INFINITE\n"; + } + if(this->is_concentration[i] && rY[i] < 0) + { + error_message += "Concentration " + this->rGetStateVariableNames()[i] + " below 0\n"; + } + if(this->is_probability[i] && rY[i] < 0) + { + error_message += "Probability " + this->rGetStateVariableNames()[i] + " below 0\n"; + } + if(this->is_probability[i] && rY[i] > 1) + { + error_message += "Probability " + this->rGetStateVariableNames()[i] + " above 1\n"; + } + } + if (error_message != ""){ + EXCEPTION(DumpState(error_message)); + } + } + + double Dynamicbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLRushLarsenOpt::GetIIonic(const std::vector* pStateVariables) + { + // For state variable interpolation (SVI) we read in interpolated state variables, + // otherwise for ionic current interpolation (ICI) we use the state variables of this model (node). + if (!pStateVariables) pStateVariables = &rGetStateVariables(); + const std::vector& rY = *pStateVariables; + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -82.4202 + double var_chaste_interface__calcium_concentration__Cai_converted = rY[1]; + // Units: millimolar; Initial value: 0.000115001 + double var_chaste_interface__L_type_calcium_current__O = rY[11]; + // Units: dimensionless; Initial value: 9.30308e-19 + double var_chaste_interface__sodium_concentration__Nai = rY[18]; + // Units: micromolar; Initial value: 14237.1 + double var_chaste_interface__fast_sodium_current__O_Na = rY[19]; + // Units: dimensionless; Initial value: 7.13483e-07 + double var_chaste_interface__potassium_concentration__Ki = rY[27]; + // Units: micromolar; Initial value: 143720.0 + double var_chaste_interface__fast_transient_outward_potassium_current__ato_f = rY[28]; + // Units: dimensionless; Initial value: 0.00265563 + double var_chaste_interface__fast_transient_outward_potassium_current__ito_f = rY[29]; + // Units: dimensionless; Initial value: 0.999977 + double var_chaste_interface__slow_delayed_rectifier_potassium_current__nKs = rY[32]; + // Units: dimensionless; Initial value: 0.000262753 + double var_chaste_interface__ultra_rapidly_activating_delayed_rectifier_potassium_current__aur = rY[33]; + // Units: dimensionless; Initial value: 0.000417069 + double var_chaste_interface__ultra_rapidly_activating_delayed_rectifier_potassium_current__iur = rY[34]; + // Units: dimensionless; Initial value: 0.998543 + double var_chaste_interface__non_inactivating_steady_state_potassium_current__aKss = rY[35]; + // Units: dimensionless; Initial value: 0.000417069 + double var_chaste_interface__non_inactivating_steady_state_potassium_current__iKss = rY[36]; + // Units: dimensionless; Initial value: 1.0 + double var_chaste_interface__rapid_delayed_rectifier_potassium_current__O_K = rY[37]; + // Units: dimensionless; Initial value: 0.000175298 + + // Lookup table indexing + const bool _oob_0 = Dynamicbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLRushLarsenOpt_LookupTables::Instance()->CheckIndex0(var_chaste_interface__membrane__V); +// LCOV_EXCL_START + if (_oob_0) + EXCEPTION(DumpState("membrane_voltage outside lookup table range", rY)); +// LCOV_EXCL_STOP + const double* const _lt_0_row = Dynamicbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLRushLarsenOpt_LookupTables::Instance()->IndexTable0(var_chaste_interface__membrane__V); + + const double var_calcium_concentration__Cai = 1000 * var_chaste_interface__calcium_concentration__Cai_converted; // micromolar + const double var_calcium_pump_current__i_pCa = pow(var_calcium_concentration__Cai, 2) / (0.25 + pow(var_calcium_concentration__Cai, 2)); // picoA_per_picoF + const double var_L_type_calcium_current__i_CaL_converted = (-63 + var_chaste_interface__membrane__V) * HeartConfig::Instance()->GetCapacitance() * var_chaste_interface__L_type_calcium_current__O * mParameters[7]; // uA_per_cm2 + const double var_calcium_activated_chloride_current__i_ClCa = 2 * (40 + var_chaste_interface__membrane__V) * var_calcium_concentration__Cai / ((_lt_0_row[0]) * (10 + var_calcium_concentration__Cai)); // picoA_per_picoF + const double var_calcium_background_current__i_Cab = 0.00036699999999999998 * var_chaste_interface__membrane__V - 0.0047112379481865285 * log(mParameters[4] / var_calcium_concentration__Cai); // picoA_per_picoF + const double var_fast_transient_outward_potassium_current__E_K = 25.674321243523316 * log(mParameters[5] / var_chaste_interface__potassium_concentration__Ki); // millivolt + const double var_fast_transient_outward_potassium_current__i_Kto_f_converted = pow(var_chaste_interface__fast_transient_outward_potassium_current__ato_f, 3) * (-var_fast_transient_outward_potassium_current__E_K + var_chaste_interface__membrane__V) * HeartConfig::Instance()->GetCapacitance() * mParameters[16] * var_chaste_interface__fast_transient_outward_potassium_current__ito_f; // uA_per_cm2 + const double var_non_inactivating_steady_state_potassium_current__i_Kss_converted = (-var_fast_transient_outward_potassium_current__E_K + var_chaste_interface__membrane__V) * HeartConfig::Instance()->GetCapacitance() * var_chaste_interface__non_inactivating_steady_state_potassium_current__aKss * mParameters[12] * var_chaste_interface__non_inactivating_steady_state_potassium_current__iKss; // uA_per_cm2 + const double var_slow_delayed_rectifier_potassium_current__i_Ks_converted = pow(var_chaste_interface__slow_delayed_rectifier_potassium_current__nKs, 2) * (-var_fast_transient_outward_potassium_current__E_K + var_chaste_interface__membrane__V) * HeartConfig::Instance()->GetCapacitance() * mParameters[14]; // uA_per_cm2 + const double var_slow_transient_outward_potassium_current__i_Kto_s = 0; // picoA_per_picoF + const double var_fast_sodium_current__E_Na = 25.674321243523316 * log((mParameters[6] + 0.1111111111111111 * mParameters[5]) / (var_chaste_interface__sodium_concentration__Nai + 0.1111111111111111 * var_chaste_interface__potassium_concentration__Ki)); // millivolt + const double var_fast_sodium_current__i_Na_converted = (-var_fast_sodium_current__E_Na + var_chaste_interface__membrane__V) * HeartConfig::Instance()->GetCapacitance() * var_chaste_interface__fast_sodium_current__O_Na * mParameters[9]; // uA_per_cm2 + const double var_rapid_delayed_rectifier_potassium_current__i_Kr_converted = (-25.674321243523316 * log((mParameters[5] + 0.020408163265306124 * mParameters[6]) / (var_chaste_interface__potassium_concentration__Ki + 0.020408163265306124 * var_chaste_interface__sodium_concentration__Nai)) + var_chaste_interface__membrane__V) * HeartConfig::Instance()->GetCapacitance() * var_chaste_interface__rapid_delayed_rectifier_potassium_current__O_K * mParameters[13]; // uA_per_cm2 + const double var_sodium_background_current__i_Nab = 0.0025999999999999999 * var_chaste_interface__membrane__V - 0.0025999999999999999 * var_fast_sodium_current__E_Na; // picoA_per_picoF + const double var_sodium_calcium_exchange_current__i_NaCa_converted = (pow(var_chaste_interface__sodium_concentration__Nai, 3) * mParameters[4] * _lt_0_row[1] - pow(mParameters[6], 3) * var_calcium_concentration__Cai * _lt_0_row[2]) * HeartConfig::Instance()->GetCapacitance() * mParameters[15] / ((_lt_0_row[3]) * (1380 + mParameters[4]) * (669921875000000.0 + pow(mParameters[6], 3))); // uA_per_cm2 + const double var_sodium_potassium_pump_current__i_NaK = 0.88 * mParameters[5] / ((1 + 3043189.1166997822 * pow((1 / var_chaste_interface__sodium_concentration__Nai), 1.5)) * (1500 + mParameters[5]) * (1 + _lt_0_row[5] + 0.036499999999999998 * (-0.14285714285714285 + 0.14285714285714285 * exp(1.4858841010401188e-5 * mParameters[6])) * _lt_0_row[4])); // picoA_per_picoF + const double var_time_independent_potassium_current__i_K1_converted = (-var_fast_transient_outward_potassium_current__E_K + var_chaste_interface__membrane__V) * HeartConfig::Instance()->GetCapacitance() * mParameters[5] * mParameters[11] / ((1 + exp(0.089599999999999999 * var_chaste_interface__membrane__V - 0.089599999999999999 * var_fast_transient_outward_potassium_current__E_K)) * (210 + mParameters[5])); // uA_per_cm2 + const double var_ultra_rapidly_activating_delayed_rectifier_potassium_current__i_Kur = 0.16 * (-var_fast_transient_outward_potassium_current__E_K + var_chaste_interface__membrane__V) * var_chaste_interface__ultra_rapidly_activating_delayed_rectifier_potassium_current__aur * var_chaste_interface__ultra_rapidly_activating_delayed_rectifier_potassium_current__iur; // picoA_per_picoF + const double var_chaste_interface__i_ionic = HeartConfig::Instance()->GetCapacitance() * var_calcium_activated_chloride_current__i_ClCa + HeartConfig::Instance()->GetCapacitance() * var_calcium_background_current__i_Cab + HeartConfig::Instance()->GetCapacitance() * var_calcium_pump_current__i_pCa + HeartConfig::Instance()->GetCapacitance() * var_slow_transient_outward_potassium_current__i_Kto_s + HeartConfig::Instance()->GetCapacitance() * var_sodium_background_current__i_Nab + HeartConfig::Instance()->GetCapacitance() * var_sodium_potassium_pump_current__i_NaK + HeartConfig::Instance()->GetCapacitance() * var_ultra_rapidly_activating_delayed_rectifier_potassium_current__i_Kur + var_L_type_calcium_current__i_CaL_converted + var_fast_sodium_current__i_Na_converted + var_fast_transient_outward_potassium_current__i_Kto_f_converted + var_non_inactivating_steady_state_potassium_current__i_Kss_converted + var_rapid_delayed_rectifier_potassium_current__i_Kr_converted + var_slow_delayed_rectifier_potassium_current__i_Ks_converted + var_sodium_calcium_exchange_current__i_NaCa_converted + var_time_independent_potassium_current__i_K1_converted; // uA_per_cm2 + + const double i_ionic = var_chaste_interface__i_ionic; + EXCEPT_IF_NOT(!std::isnan(i_ionic)); + return i_ionic; + } + + void Dynamicbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLRushLarsenOpt::EvaluateEquations(double var_chaste_interface__environment__time, std::vector &rDY, std::vector &rAlphaOrTau, std::vector &rBetaOrInf) + { + std::vector& rY = rGetStateVariables(); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -82.4202 + double var_chaste_interface__calcium_concentration__Cai_converted = rY[1]; + // Units: millimolar; Initial value: 0.000115001 + double var_chaste_interface__calcium_concentration__Cass = rY[2]; + // Units: micromolar; Initial value: 0.115001 + double var_chaste_interface__calcium_concentration__CaJSR = rY[3]; + // Units: micromolar; Initial value: 1299.5 + double var_chaste_interface__calcium_concentration__CaNSR = rY[4]; + // Units: micromolar; Initial value: 1299.5 + double var_chaste_interface__calcium_fluxes__P_RyR = rY[5]; + // Units: dimensionless; Initial value: 0.0 + double var_chaste_interface__calcium_buffering__LTRPN_Ca = rY[6]; + // Units: micromolar; Initial value: 11.2684 + double var_chaste_interface__calcium_buffering__HTRPN_Ca = rY[7]; + // Units: micromolar; Initial value: 125.29 + double var_chaste_interface__ryanodine_receptors__P_O1 = rY[8]; + // Units: dimensionless; Initial value: 1.49102e-05 + double var_chaste_interface__ryanodine_receptors__P_O2 = rY[9]; + // Units: dimensionless; Initial value: 9.51726e-11 + double var_chaste_interface__ryanodine_receptors__P_C2 = rY[10]; + // Units: dimensionless; Initial value: 0.00016774 + double var_chaste_interface__L_type_calcium_current__O = rY[11]; + // Units: dimensionless; Initial value: 9.30308e-19 + double var_chaste_interface__L_type_calcium_current__C2 = rY[12]; + // Units: dimensionless; Initial value: 0.000124216 + double var_chaste_interface__L_type_calcium_current__C3 = rY[13]; + // Units: dimensionless; Initial value: 5.78679e-09 + double var_chaste_interface__L_type_calcium_current__C4 = rY[14]; + // Units: dimensionless; Initial value: 1.19816e-13 + double var_chaste_interface__L_type_calcium_current__I1 = rY[15]; + // Units: dimensionless; Initial value: 4.97923e-19 + double var_chaste_interface__L_type_calcium_current__I2 = rY[16]; + // Units: dimensionless; Initial value: 3.45847e-14 + double var_chaste_interface__L_type_calcium_current__I3 = rY[17]; + // Units: dimensionless; Initial value: 1.85106e-14 + double var_chaste_interface__sodium_concentration__Nai = rY[18]; + // Units: micromolar; Initial value: 14237.1 + double var_chaste_interface__fast_sodium_current__O_Na = rY[19]; + // Units: dimensionless; Initial value: 7.13483e-07 + double var_chaste_interface__fast_sodium_current__C_Na1 = rY[20]; + // Units: dimensionless; Initial value: 0.000279132 + double var_chaste_interface__fast_sodium_current__C_Na2 = rY[21]; + // Units: dimensionless; Initial value: 0.020752 + double var_chaste_interface__fast_sodium_current__I1_Na = rY[22]; + // Units: dimensionless; Initial value: 6.73345e-07 + double var_chaste_interface__fast_sodium_current__I2_Na = rY[23]; + // Units: dimensionless; Initial value: 1.55787e-09 + double var_chaste_interface__fast_sodium_current__IF_Na = rY[24]; + // Units: dimensionless; Initial value: 0.000153176 + double var_chaste_interface__fast_sodium_current__IC_Na2 = rY[25]; + // Units: dimensionless; Initial value: 0.0113879 + double var_chaste_interface__fast_sodium_current__IC_Na3 = rY[26]; + // Units: dimensionless; Initial value: 0.34278 + double var_chaste_interface__potassium_concentration__Ki = rY[27]; + // Units: micromolar; Initial value: 143720.0 + double var_chaste_interface__fast_transient_outward_potassium_current__ato_f = rY[28]; + // Units: dimensionless; Initial value: 0.00265563 + double var_chaste_interface__fast_transient_outward_potassium_current__ito_f = rY[29]; + // Units: dimensionless; Initial value: 0.999977 + double var_chaste_interface__slow_transient_outward_potassium_current__ato_s = rY[30]; + // Units: dimensionless; Initial value: 0.000417069 + double var_chaste_interface__slow_transient_outward_potassium_current__ito_s = rY[31]; + // Units: dimensionless; Initial value: 0.998543 + double var_chaste_interface__slow_delayed_rectifier_potassium_current__nKs = rY[32]; + // Units: dimensionless; Initial value: 0.000262753 + double var_chaste_interface__ultra_rapidly_activating_delayed_rectifier_potassium_current__aur = rY[33]; + // Units: dimensionless; Initial value: 0.000417069 + double var_chaste_interface__ultra_rapidly_activating_delayed_rectifier_potassium_current__iur = rY[34]; + // Units: dimensionless; Initial value: 0.998543 + double var_chaste_interface__non_inactivating_steady_state_potassium_current__aKss = rY[35]; + // Units: dimensionless; Initial value: 0.000417069 + double var_chaste_interface__non_inactivating_steady_state_potassium_current__iKss = rY[36]; + // Units: dimensionless; Initial value: 1.0 + double var_chaste_interface__rapid_delayed_rectifier_potassium_current__O_K = rY[37]; + // Units: dimensionless; Initial value: 0.000175298 + double var_chaste_interface__rapid_delayed_rectifier_potassium_current__C_K1 = rY[38]; + // Units: dimensionless; Initial value: 0.000992513 + double var_chaste_interface__rapid_delayed_rectifier_potassium_current__C_K2 = rY[39]; + // Units: dimensionless; Initial value: 0.000641229 + double var_chaste_interface__rapid_delayed_rectifier_potassium_current__I_K = rY[40]; + // Units: dimensionless; Initial value: 3.19129e-05 + + // Lookup table indexing + const bool _oob_0 = Dynamicbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLRushLarsenOpt_LookupTables::Instance()->CheckIndex0(var_chaste_interface__membrane__V); +// LCOV_EXCL_START + if (_oob_0) + EXCEPTION(DumpState("membrane_voltage outside lookup table range", rY , var_chaste_interface__environment__time)); +// LCOV_EXCL_STOP + const double* const _lt_0_row = Dynamicbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLRushLarsenOpt_LookupTables::Instance()->IndexTable0(var_chaste_interface__membrane__V); + + // Mathematics + double d_dt_chaste_interface_var_membrane__V; + const double d_dt_chaste_interface_var_non_inactivating_steady_state_potassium_current__iKss = 0; // 1 / millisecond + const double var_L_type_calcium_current__E_CaL = 63; // millivolt + const double var_L_type_calcium_current__Kpc_half = 20; // micromolar + const double var_L_type_calcium_current__Kpc_max = 0.23324; // per_millisecond + const double var_L_type_calcium_current__Kpcb = 0.00050000000000000001; // per_millisecond + const double var_L_type_calcium_current__C1 = 1 - var_chaste_interface__L_type_calcium_current__C2 - var_chaste_interface__L_type_calcium_current__C3 - var_chaste_interface__L_type_calcium_current__C4 - var_chaste_interface__L_type_calcium_current__I1 - var_chaste_interface__L_type_calcium_current__I2 - var_chaste_interface__L_type_calcium_current__I3 - var_chaste_interface__L_type_calcium_current__O; // dimensionless + const double var_L_type_calcium_current__i_CaL_max = 7; // picoA_per_picoF + const double var_calcium_background_current__g_Cab = 0.00036699999999999998; // milliS_per_microF + const double var_calcium_buffering__HTRPN_tot = 140; // micromolar + const double var_calcium_buffering__LTRPN_tot = 70; // micromolar + const double var_calcium_concentration__CMDN_tot = 50; // micromolar + const double var_calcium_concentration__CSQN_tot = 15000; // micromolar + const double var_calcium_concentration__Cai = 1000 * var_chaste_interface__calcium_concentration__Cai_converted; // micromolar + const double var_L_type_calcium_current__gamma = var_L_type_calcium_current__Kpc_max * var_chaste_interface__calcium_concentration__Cass / (var_L_type_calcium_current__Kpc_half + var_chaste_interface__calcium_concentration__Cass); // per_millisecond + const double var_calcium_concentration__Km_CMDN = 0.23799999999999999; // micromolar + const double var_calcium_concentration__Bi = 1 / (1 + var_calcium_concentration__CMDN_tot * var_calcium_concentration__Km_CMDN / pow((var_calcium_concentration__Cai + var_calcium_concentration__Km_CMDN), 2)); // dimensionless + const double var_calcium_concentration__Bss = 1 / (1 + var_calcium_concentration__CMDN_tot * var_calcium_concentration__Km_CMDN / pow((var_chaste_interface__calcium_concentration__Cass + var_calcium_concentration__Km_CMDN), 2)); // dimensionless + const double var_calcium_concentration__Km_CSQN = 800; // micromolar + const double var_calcium_concentration__BJSR = 1 / (1 + var_calcium_concentration__CSQN_tot * var_calcium_concentration__Km_CSQN / pow((var_chaste_interface__calcium_concentration__CaJSR + var_calcium_concentration__Km_CSQN), 2)); // dimensionless + const double var_calcium_fluxes__Km_up = 0.5; // micromolar + const double var_calcium_fluxes__k_minus_htrpn = 3.1999999999999999e-5; // per_millisecond + const double var_calcium_fluxes__k_minus_ltrpn = 0.019599999999999999; // per_millisecond + const double var_calcium_fluxes__k_plus_htrpn = 0.0023700000000000001; // per_micromolar_millisecond + const double d_dt_chaste_interface_var_calcium_buffering__HTRPN_Ca = -var_chaste_interface__calcium_buffering__HTRPN_Ca * var_calcium_fluxes__k_minus_htrpn + (-var_chaste_interface__calcium_buffering__HTRPN_Ca + var_calcium_buffering__HTRPN_tot) * var_calcium_concentration__Cai * var_calcium_fluxes__k_plus_htrpn; // micromolar / millisecond + const double var_calcium_fluxes__k_plus_ltrpn = 0.0327; // per_micromolar_millisecond + const double d_dt_chaste_interface_var_calcium_buffering__LTRPN_Ca = -var_chaste_interface__calcium_buffering__LTRPN_Ca * var_calcium_fluxes__k_minus_ltrpn + (-var_chaste_interface__calcium_buffering__LTRPN_Ca + var_calcium_buffering__LTRPN_tot) * var_calcium_concentration__Cai * var_calcium_fluxes__k_plus_ltrpn; // micromolar / millisecond + const double var_calcium_fluxes__J_trpn = -var_chaste_interface__calcium_buffering__HTRPN_Ca * var_calcium_fluxes__k_minus_htrpn - var_chaste_interface__calcium_buffering__LTRPN_Ca * var_calcium_fluxes__k_minus_ltrpn + (-var_chaste_interface__calcium_buffering__HTRPN_Ca + var_calcium_buffering__HTRPN_tot) * var_calcium_concentration__Cai * var_calcium_fluxes__k_plus_htrpn + (-var_chaste_interface__calcium_buffering__LTRPN_Ca + var_calcium_buffering__LTRPN_tot) * var_calcium_concentration__Cai * var_calcium_fluxes__k_plus_ltrpn; // micromolar_per_millisecond + const double var_calcium_fluxes__tau_tr = 20; // millisecond + const double var_calcium_fluxes__J_tr = (-var_chaste_interface__calcium_concentration__CaJSR + var_chaste_interface__calcium_concentration__CaNSR) / var_calcium_fluxes__tau_tr; // micromolar_per_millisecond + const double var_calcium_fluxes__tau_xfer = 8; // millisecond + const double var_calcium_fluxes__J_xfer = (-var_calcium_concentration__Cai + var_chaste_interface__calcium_concentration__Cass) / var_calcium_fluxes__tau_xfer; // micromolar_per_millisecond + const double var_calcium_fluxes__J_leak = (-var_calcium_concentration__Cai + var_chaste_interface__calcium_concentration__CaNSR) * mParameters[0]; // micromolar_per_millisecond + const double var_calcium_fluxes__J_up = pow(var_calcium_concentration__Cai, 2) * mParameters[2] / (pow(var_calcium_concentration__Cai, 2) + pow(var_calcium_fluxes__Km_up, 2)); // micromolar_per_millisecond + const double var_calcium_pump_current__Km_pCa = 0.5; // micromolar + const double var_calcium_pump_current__i_pCa_max = 1; // picoA_per_picoF + const double var_calcium_pump_current__i_pCa = pow(var_calcium_concentration__Cai, 2) * var_calcium_pump_current__i_pCa_max / (pow(var_calcium_concentration__Cai, 2) + pow(var_calcium_pump_current__Km_pCa, 2)); // picoA_per_picoF + const double var_fast_sodium_current__C_Na3 = 1 - var_chaste_interface__fast_sodium_current__C_Na1 - var_chaste_interface__fast_sodium_current__C_Na2 - var_chaste_interface__fast_sodium_current__I1_Na - var_chaste_interface__fast_sodium_current__I2_Na - var_chaste_interface__fast_sodium_current__IC_Na2 - var_chaste_interface__fast_sodium_current__IC_Na3 - var_chaste_interface__fast_sodium_current__IF_Na - var_chaste_interface__fast_sodium_current__O_Na; // dimensionless + const double var_membrane__Acap = 0.00015339999999999999; // cm2 + const double var_membrane__F = 96.5; // coulomb_per_millimole + const double var_membrane__R = 8.3140000000000001; // joule_per_mole_kelvin + const double var_membrane__T = 298; // kelvin + const double var_calcium_background_current__E_CaN = 0.5 * var_membrane__R * var_membrane__T * log(mParameters[4] / var_calcium_concentration__Cai) / var_membrane__F; // millivolt + const double var_L_type_calcium_current__Kpcf = _lt_0_row[6]; // per_millisecond + const double var_L_type_calcium_current__alpha = _lt_0_row[7]; // per_millisecond + const double var_L_type_calcium_current__beta = _lt_0_row[8]; // per_millisecond + const double d_dt_chaste_interface_var_L_type_calcium_current__C2 = -var_chaste_interface__L_type_calcium_current__C2 * var_L_type_calcium_current__beta + 2 * var_chaste_interface__L_type_calcium_current__C3 * var_L_type_calcium_current__beta + 4 * var_L_type_calcium_current__C1 * var_L_type_calcium_current__alpha - 3 * var_chaste_interface__L_type_calcium_current__C2 * var_L_type_calcium_current__alpha; // 1 / millisecond + const double d_dt_chaste_interface_var_L_type_calcium_current__C3 = 3 * var_chaste_interface__L_type_calcium_current__C2 * var_L_type_calcium_current__alpha + 3 * var_chaste_interface__L_type_calcium_current__C4 * var_L_type_calcium_current__beta - 2 * var_chaste_interface__L_type_calcium_current__C3 * var_L_type_calcium_current__alpha - 2 * var_chaste_interface__L_type_calcium_current__C3 * var_L_type_calcium_current__beta; // 1 / millisecond + const double d_dt_chaste_interface_var_L_type_calcium_current__C4 = -var_chaste_interface__L_type_calcium_current__C4 * var_L_type_calcium_current__alpha + 2 * var_chaste_interface__L_type_calcium_current__C3 * var_L_type_calcium_current__alpha + 4 * var_chaste_interface__L_type_calcium_current__O * var_L_type_calcium_current__beta + 0.0080000000000000002 * var_chaste_interface__L_type_calcium_current__I2 * var_L_type_calcium_current__beta - 3 * var_chaste_interface__L_type_calcium_current__C4 * var_L_type_calcium_current__beta - 0.002 * var_chaste_interface__L_type_calcium_current__C4 * var_L_type_calcium_current__Kpcf + 4 * var_chaste_interface__L_type_calcium_current__I3 * var_L_type_calcium_current__Kpcb * var_L_type_calcium_current__beta + 0.040000000000000001 * var_chaste_interface__L_type_calcium_current__I1 * var_L_type_calcium_current__Kpcb * var_L_type_calcium_current__beta - var_chaste_interface__L_type_calcium_current__C4 * var_L_type_calcium_current__Kpcf * var_L_type_calcium_current__gamma - 0.01 * var_chaste_interface__L_type_calcium_current__C4 * var_L_type_calcium_current__alpha * var_L_type_calcium_current__gamma; // 1 / millisecond + const double d_dt_chaste_interface_var_L_type_calcium_current__I1 = var_chaste_interface__L_type_calcium_current__O * var_L_type_calcium_current__gamma - var_chaste_interface__L_type_calcium_current__I1 * var_L_type_calcium_current__Kpcb + 0.001 * var_chaste_interface__L_type_calcium_current__I3 * var_L_type_calcium_current__alpha - 0.001 * var_chaste_interface__L_type_calcium_current__I1 * var_L_type_calcium_current__Kpcf + 0.01 * var_chaste_interface__L_type_calcium_current__C4 * var_L_type_calcium_current__alpha * var_L_type_calcium_current__gamma - 0.040000000000000001 * var_chaste_interface__L_type_calcium_current__I1 * var_L_type_calcium_current__Kpcf * var_L_type_calcium_current__beta; // 1 / millisecond + const double d_dt_chaste_interface_var_L_type_calcium_current__I2 = var_chaste_interface__L_type_calcium_current__I3 * var_L_type_calcium_current__Kpcb - var_chaste_interface__L_type_calcium_current__I2 * var_L_type_calcium_current__gamma + 0.001 * var_L_type_calcium_current__Kpcf * var_chaste_interface__L_type_calcium_current__O + 0.002 * var_chaste_interface__L_type_calcium_current__C4 * var_L_type_calcium_current__Kpcf - 0.001 * var_chaste_interface__L_type_calcium_current__I2 * var_L_type_calcium_current__alpha - 0.0080000000000000002 * var_chaste_interface__L_type_calcium_current__I2 * var_L_type_calcium_current__beta; // 1 / millisecond + const double d_dt_chaste_interface_var_L_type_calcium_current__I3 = var_chaste_interface__L_type_calcium_current__I2 * var_L_type_calcium_current__gamma - var_chaste_interface__L_type_calcium_current__I3 * var_L_type_calcium_current__Kpcb + 0.001 * var_chaste_interface__L_type_calcium_current__I1 * var_L_type_calcium_current__Kpcf - 0.001 * var_chaste_interface__L_type_calcium_current__I3 * var_L_type_calcium_current__alpha + var_chaste_interface__L_type_calcium_current__C4 * var_L_type_calcium_current__Kpcf * var_L_type_calcium_current__gamma - 4 * var_chaste_interface__L_type_calcium_current__I3 * var_L_type_calcium_current__Kpcb * var_L_type_calcium_current__beta; // 1 / millisecond + const double d_dt_chaste_interface_var_L_type_calcium_current__O = var_chaste_interface__L_type_calcium_current__C4 * var_L_type_calcium_current__alpha + var_chaste_interface__L_type_calcium_current__I1 * var_L_type_calcium_current__Kpcb - var_chaste_interface__L_type_calcium_current__O * var_L_type_calcium_current__gamma + 0.001 * var_chaste_interface__L_type_calcium_current__I2 * var_L_type_calcium_current__alpha - 4 * var_chaste_interface__L_type_calcium_current__O * var_L_type_calcium_current__beta - 0.001 * var_L_type_calcium_current__Kpcf * var_chaste_interface__L_type_calcium_current__O; // 1 / millisecond + const double var_L_type_calcium_current__i_CaL = (-var_L_type_calcium_current__E_CaL + var_chaste_interface__membrane__V) * var_chaste_interface__L_type_calcium_current__O * mParameters[7]; // picoA_per_picoF + const double d_dt_chaste_interface_var_calcium_fluxes__P_RyR = -0.040000000000000001 * var_chaste_interface__calcium_fluxes__P_RyR - 0.10000000000000001 * var_L_type_calcium_current__i_CaL * _lt_0_row[9] / var_L_type_calcium_current__i_CaL_max; // 1 / millisecond + const double var_calcium_background_current__i_Cab = (-var_calcium_background_current__E_CaN + var_chaste_interface__membrane__V) * var_calcium_background_current__g_Cab; // picoA_per_picoF + const double var_fast_sodium_current__alpha_Na11 = _lt_0_row[10]; // per_millisecond + const double var_fast_sodium_current__alpha_Na12 = _lt_0_row[11]; // per_millisecond + const double var_fast_sodium_current__alpha_Na13 = _lt_0_row[12]; // per_millisecond + const double var_fast_sodium_current__alpha_Na2 = 1 / (0.39395599999999997 + 0.188495 * exp(-0.42168674698795178 + 0.060240963855421679 * mParameters[10] - 0.060240963855421679 * var_chaste_interface__membrane__V)); // per_millisecond + const double var_fast_sodium_current__alpha_Na3 = _lt_0_row[13]; // per_millisecond + const double var_fast_sodium_current__alpha_Na4 = 0.001 * var_fast_sodium_current__alpha_Na2; // per_millisecond + const double var_fast_sodium_current__alpha_Na5 = 1.0526315789473684e-5 * var_fast_sodium_current__alpha_Na2; // per_millisecond + const double var_fast_sodium_current__beta_Na11 = _lt_0_row[14]; // per_millisecond + const double var_fast_sodium_current__beta_Na12 = _lt_0_row[15]; // per_millisecond + const double var_fast_sodium_current__beta_Na13 = _lt_0_row[16]; // per_millisecond + const double var_fast_sodium_current__beta_Na3 = 0.008539999999999999 + 2.0000000000000002e-5 * var_chaste_interface__membrane__V; // per_millisecond + const double d_dt_chaste_interface_var_fast_sodium_current__C_Na1 = var_chaste_interface__fast_sodium_current__C_Na2 * var_fast_sodium_current__alpha_Na12 + var_chaste_interface__fast_sodium_current__IF_Na * var_fast_sodium_current__alpha_Na3 + var_chaste_interface__fast_sodium_current__O_Na * var_fast_sodium_current__beta_Na13 - var_chaste_interface__fast_sodium_current__C_Na1 * var_fast_sodium_current__alpha_Na13 - var_chaste_interface__fast_sodium_current__C_Na1 * var_fast_sodium_current__beta_Na12 - var_chaste_interface__fast_sodium_current__C_Na1 * var_fast_sodium_current__beta_Na3; // 1 / millisecond + const double d_dt_chaste_interface_var_fast_sodium_current__C_Na2 = var_chaste_interface__fast_sodium_current__C_Na1 * var_fast_sodium_current__beta_Na12 + var_fast_sodium_current__C_Na3 * var_fast_sodium_current__alpha_Na11 + var_chaste_interface__fast_sodium_current__IC_Na2 * var_fast_sodium_current__alpha_Na3 - var_chaste_interface__fast_sodium_current__C_Na2 * var_fast_sodium_current__alpha_Na12 - var_chaste_interface__fast_sodium_current__C_Na2 * var_fast_sodium_current__beta_Na11 - var_chaste_interface__fast_sodium_current__C_Na2 * var_fast_sodium_current__beta_Na3; // 1 / millisecond + const double d_dt_chaste_interface_var_fast_sodium_current__IC_Na2 = var_chaste_interface__fast_sodium_current__C_Na2 * var_fast_sodium_current__beta_Na3 + var_chaste_interface__fast_sodium_current__IC_Na3 * var_fast_sodium_current__alpha_Na11 + var_chaste_interface__fast_sodium_current__IF_Na * var_fast_sodium_current__beta_Na12 - var_chaste_interface__fast_sodium_current__IC_Na2 * var_fast_sodium_current__alpha_Na12 - var_chaste_interface__fast_sodium_current__IC_Na2 * var_fast_sodium_current__alpha_Na3 - var_chaste_interface__fast_sodium_current__IC_Na2 * var_fast_sodium_current__beta_Na11; // 1 / millisecond + const double d_dt_chaste_interface_var_fast_sodium_current__IC_Na3 = var_fast_sodium_current__C_Na3 * var_fast_sodium_current__beta_Na3 + var_chaste_interface__fast_sodium_current__IC_Na2 * var_fast_sodium_current__beta_Na11 - var_chaste_interface__fast_sodium_current__IC_Na3 * var_fast_sodium_current__alpha_Na11 - var_chaste_interface__fast_sodium_current__IC_Na3 * var_fast_sodium_current__alpha_Na3; // 1 / millisecond + const double var_fast_sodium_current__beta_Na2 = var_fast_sodium_current__alpha_Na13 * var_fast_sodium_current__alpha_Na2 * var_fast_sodium_current__alpha_Na3 / (var_fast_sodium_current__beta_Na13 * var_fast_sodium_current__beta_Na3); // per_millisecond + const double d_dt_chaste_interface_var_fast_sodium_current__O_Na = var_chaste_interface__fast_sodium_current__C_Na1 * var_fast_sodium_current__alpha_Na13 + var_chaste_interface__fast_sodium_current__IF_Na * var_fast_sodium_current__beta_Na2 - var_chaste_interface__fast_sodium_current__O_Na * var_fast_sodium_current__alpha_Na2 - var_chaste_interface__fast_sodium_current__O_Na * var_fast_sodium_current__beta_Na13; // 1 / millisecond + const double var_fast_sodium_current__beta_Na4 = var_fast_sodium_current__alpha_Na3; // per_millisecond + const double d_dt_chaste_interface_var_fast_sodium_current__IF_Na = var_chaste_interface__fast_sodium_current__C_Na1 * var_fast_sodium_current__beta_Na3 + var_chaste_interface__fast_sodium_current__I1_Na * var_fast_sodium_current__beta_Na4 + var_chaste_interface__fast_sodium_current__IC_Na2 * var_fast_sodium_current__alpha_Na12 + var_chaste_interface__fast_sodium_current__O_Na * var_fast_sodium_current__alpha_Na2 - var_chaste_interface__fast_sodium_current__IF_Na * var_fast_sodium_current__alpha_Na3 - var_chaste_interface__fast_sodium_current__IF_Na * var_fast_sodium_current__alpha_Na4 - var_chaste_interface__fast_sodium_current__IF_Na * var_fast_sodium_current__beta_Na12 - var_chaste_interface__fast_sodium_current__IF_Na * var_fast_sodium_current__beta_Na2; // 1 / millisecond + const double var_fast_sodium_current__beta_Na5 = 0.02 * var_fast_sodium_current__alpha_Na3; // per_millisecond + const double d_dt_chaste_interface_var_fast_sodium_current__I1_Na = var_chaste_interface__fast_sodium_current__I2_Na * var_fast_sodium_current__beta_Na5 + var_chaste_interface__fast_sodium_current__IF_Na * var_fast_sodium_current__alpha_Na4 - var_chaste_interface__fast_sodium_current__I1_Na * var_fast_sodium_current__alpha_Na5 - var_chaste_interface__fast_sodium_current__I1_Na * var_fast_sodium_current__beta_Na4; // 1 / millisecond + const double d_dt_chaste_interface_var_fast_sodium_current__I2_Na = var_chaste_interface__fast_sodium_current__I1_Na * var_fast_sodium_current__alpha_Na5 - var_chaste_interface__fast_sodium_current__I2_Na * var_fast_sodium_current__beta_Na5; // 1 / millisecond + const double var_fast_transient_outward_potassium_current__alpha_a = 0.18064 * _lt_0_row[17]; // per_millisecond + const double var_fast_transient_outward_potassium_current__alpha_i = 0.00015200000000000001 * _lt_0_row[20] / (_lt_0_row[19]); // per_millisecond + const double var_fast_transient_outward_potassium_current__beta_a = 0.39560000000000001 * _lt_0_row[18]; // per_millisecond + const double var_fast_transient_outward_potassium_current__beta_i = 0.00095 * _lt_0_row[22] / (_lt_0_row[21]); // per_millisecond + const double var_membrane__VJSR = 1.1999999999999999e-7; // microlitre + const double var_membrane__VNSR = 2.0980000000000001e-6; // microlitre + const double var_membrane__Vmyo = 2.584e-5; // microlitre + const double d_dt_chaste_interface_var_calcium_concentration__CaNSR = (-var_calcium_fluxes__J_leak + var_calcium_fluxes__J_up) * var_membrane__Vmyo / var_membrane__VNSR - var_calcium_fluxes__J_tr * var_membrane__VJSR / var_membrane__VNSR; // micromolar / millisecond + const double var_membrane__Vss = 1.4849999999999999e-9; // microlitre + const double var_non_inactivating_steady_state_potassium_current__tau_Kss = _lt_0_row[32]; // millisecond + const double var_fast_transient_outward_potassium_current__E_K = var_membrane__R * var_membrane__T * log(mParameters[5] / var_chaste_interface__potassium_concentration__Ki) / var_membrane__F; // millivolt + const double var_fast_transient_outward_potassium_current__i_Kto_f = pow(var_chaste_interface__fast_transient_outward_potassium_current__ato_f, 3) * (-var_fast_transient_outward_potassium_current__E_K + var_chaste_interface__membrane__V) * mParameters[16] * var_chaste_interface__fast_transient_outward_potassium_current__ito_f; // picoA_per_picoF + const double var_non_inactivating_steady_state_potassium_current__i_Kss = (-var_fast_transient_outward_potassium_current__E_K + var_chaste_interface__membrane__V) * var_chaste_interface__non_inactivating_steady_state_potassium_current__aKss * mParameters[12] * var_chaste_interface__non_inactivating_steady_state_potassium_current__iKss; // picoA_per_picoF + const double var_rapid_delayed_rectifier_potassium_current__C_K0 = 1 - var_chaste_interface__rapid_delayed_rectifier_potassium_current__C_K1 - var_chaste_interface__rapid_delayed_rectifier_potassium_current__C_K2 - var_chaste_interface__rapid_delayed_rectifier_potassium_current__I_K - var_chaste_interface__rapid_delayed_rectifier_potassium_current__O_K; // dimensionless + const double var_rapid_delayed_rectifier_potassium_current__alpha_a0 = 0.022348 * _lt_0_row[27]; // per_millisecond + const double var_rapid_delayed_rectifier_potassium_current__alpha_a1 = _lt_0_row[23]; // per_millisecond + const double var_rapid_delayed_rectifier_potassium_current__alpha_i = _lt_0_row[24]; // per_millisecond + const double var_rapid_delayed_rectifier_potassium_current__beta_a0 = 0.047002000000000002 * _lt_0_row[28]; // per_millisecond + const double var_rapid_delayed_rectifier_potassium_current__beta_a1 = _lt_0_row[25]; // per_millisecond + const double var_rapid_delayed_rectifier_potassium_current__beta_i = _lt_0_row[26]; // per_millisecond + const double d_dt_chaste_interface_var_rapid_delayed_rectifier_potassium_current__I_K = var_chaste_interface__rapid_delayed_rectifier_potassium_current__O_K * var_rapid_delayed_rectifier_potassium_current__alpha_i - var_chaste_interface__rapid_delayed_rectifier_potassium_current__I_K * var_rapid_delayed_rectifier_potassium_current__beta_i; // 1 / millisecond + const double d_dt_chaste_interface_var_rapid_delayed_rectifier_potassium_current__O_K = var_chaste_interface__rapid_delayed_rectifier_potassium_current__C_K2 * var_rapid_delayed_rectifier_potassium_current__alpha_a1 + var_chaste_interface__rapid_delayed_rectifier_potassium_current__I_K * var_rapid_delayed_rectifier_potassium_current__beta_i - var_chaste_interface__rapid_delayed_rectifier_potassium_current__O_K * var_rapid_delayed_rectifier_potassium_current__alpha_i - var_chaste_interface__rapid_delayed_rectifier_potassium_current__O_K * var_rapid_delayed_rectifier_potassium_current__beta_a1; // 1 / millisecond + const double var_rapid_delayed_rectifier_potassium_current__kb = 0.036777999999999998; // per_millisecond + const double var_rapid_delayed_rectifier_potassium_current__kf = 0.023761000000000001; // per_millisecond + const double d_dt_chaste_interface_var_rapid_delayed_rectifier_potassium_current__C_K1 = var_rapid_delayed_rectifier_potassium_current__C_K0 * var_rapid_delayed_rectifier_potassium_current__alpha_a0 + var_chaste_interface__rapid_delayed_rectifier_potassium_current__C_K2 * var_rapid_delayed_rectifier_potassium_current__kb - var_chaste_interface__rapid_delayed_rectifier_potassium_current__C_K1 * var_rapid_delayed_rectifier_potassium_current__beta_a0 - var_chaste_interface__rapid_delayed_rectifier_potassium_current__C_K1 * var_rapid_delayed_rectifier_potassium_current__kf; // 1 / millisecond + const double d_dt_chaste_interface_var_rapid_delayed_rectifier_potassium_current__C_K2 = var_chaste_interface__rapid_delayed_rectifier_potassium_current__C_K1 * var_rapid_delayed_rectifier_potassium_current__kf + var_chaste_interface__rapid_delayed_rectifier_potassium_current__O_K * var_rapid_delayed_rectifier_potassium_current__beta_a1 - var_chaste_interface__rapid_delayed_rectifier_potassium_current__C_K2 * var_rapid_delayed_rectifier_potassium_current__alpha_a1 - var_chaste_interface__rapid_delayed_rectifier_potassium_current__C_K2 * var_rapid_delayed_rectifier_potassium_current__kb; // 1 / millisecond + const double var_calcium_fluxes__J_rel = (-var_chaste_interface__calcium_concentration__Cass + var_chaste_interface__calcium_concentration__CaJSR) * (var_chaste_interface__ryanodine_receptors__P_O1 + var_chaste_interface__ryanodine_receptors__P_O2) * var_chaste_interface__calcium_fluxes__P_RyR * mParameters[1]; // micromolar_per_millisecond + const double d_dt_chaste_interface_var_calcium_concentration__CaJSR = (-var_calcium_fluxes__J_rel + var_calcium_fluxes__J_tr) * var_calcium_concentration__BJSR; // micromolar / millisecond + const double d_dt_chaste_interface_var_calcium_concentration__Cass = (var_calcium_fluxes__J_rel * var_membrane__VJSR / var_membrane__Vss - var_calcium_fluxes__J_xfer * var_membrane__Vmyo / var_membrane__Vss - 0.5 * var_L_type_calcium_current__i_CaL * var_membrane__Acap * mParameters[8] / (var_membrane__F * var_membrane__Vss)) * var_calcium_concentration__Bss; // micromolar / millisecond + const double var_ryanodine_receptors__P_C1 = 1 - var_chaste_interface__ryanodine_receptors__P_C2 - var_chaste_interface__ryanodine_receptors__P_O1 - var_chaste_interface__ryanodine_receptors__P_O2; // dimensionless + const double var_ryanodine_receptors__k_minus_a = 0.071249999999999994; // per_millisecond + const double var_ryanodine_receptors__k_minus_b = 0.96499999999999997; // per_millisecond + const double var_ryanodine_receptors__k_minus_c = 0.00080000000000000004; // per_millisecond + const double var_ryanodine_receptors__k_plus_a = 0.0060749999999999997; // micromolar4_per_millisecond + const double var_ryanodine_receptors__k_plus_b = 0.0040499999999999998; // micromolar3_per_millisecond + const double var_ryanodine_receptors__k_plus_c = 0.0089999999999999993; // per_millisecond + const double d_dt_chaste_interface_var_ryanodine_receptors__P_C2 = var_chaste_interface__ryanodine_receptors__P_O1 * var_ryanodine_receptors__k_plus_c - var_chaste_interface__ryanodine_receptors__P_C2 * var_ryanodine_receptors__k_minus_c; // 1 / millisecond + const double var_ryanodine_receptors__m = 3; // dimensionless + const double d_dt_chaste_interface_var_ryanodine_receptors__P_O2 = -var_chaste_interface__ryanodine_receptors__P_O2 * var_ryanodine_receptors__k_minus_b + pow(var_chaste_interface__calcium_concentration__Cass, var_ryanodine_receptors__m) * var_chaste_interface__ryanodine_receptors__P_O1 * var_ryanodine_receptors__k_plus_b; // 1 / millisecond + const double var_ryanodine_receptors__n = 4; // dimensionless + const double d_dt_chaste_interface_var_ryanodine_receptors__P_O1 = var_chaste_interface__ryanodine_receptors__P_C2 * var_ryanodine_receptors__k_minus_c + var_chaste_interface__ryanodine_receptors__P_O2 * var_ryanodine_receptors__k_minus_b - var_chaste_interface__ryanodine_receptors__P_O1 * var_ryanodine_receptors__k_minus_a - var_chaste_interface__ryanodine_receptors__P_O1 * var_ryanodine_receptors__k_plus_c + pow(var_chaste_interface__calcium_concentration__Cass, var_ryanodine_receptors__n) * var_ryanodine_receptors__P_C1 * var_ryanodine_receptors__k_plus_a - pow(var_chaste_interface__calcium_concentration__Cass, var_ryanodine_receptors__m) * var_chaste_interface__ryanodine_receptors__P_O1 * var_ryanodine_receptors__k_plus_b; // 1 / millisecond + const double var_slow_delayed_rectifier_potassium_current__alpha_n = 4.8133299999999997e-6 * (26.5 + var_chaste_interface__membrane__V) / (_lt_0_row[30]); // per_millisecond + const double var_slow_delayed_rectifier_potassium_current__beta_n = 9.5333299999999997e-5 * _lt_0_row[29]; // per_millisecond + const double var_slow_delayed_rectifier_potassium_current__i_Ks = pow(var_chaste_interface__slow_delayed_rectifier_potassium_current__nKs, 2) * (-var_fast_transient_outward_potassium_current__E_K + var_chaste_interface__membrane__V) * mParameters[14]; // picoA_per_picoF + const double var_slow_transient_outward_potassium_current__ass = _lt_0_row[31]; // dimensionless + const double var_slow_transient_outward_potassium_current__g_Kto_s = 0; // milliS_per_microF + const double var_slow_transient_outward_potassium_current__iss = _lt_0_row[33]; // dimensionless + const double var_slow_transient_outward_potassium_current__i_Kto_s = (-var_fast_transient_outward_potassium_current__E_K + var_chaste_interface__membrane__V) * var_chaste_interface__slow_transient_outward_potassium_current__ato_s * var_slow_transient_outward_potassium_current__g_Kto_s * var_chaste_interface__slow_transient_outward_potassium_current__ito_s; // picoA_per_picoF + const double var_slow_transient_outward_potassium_current__tau_ta_s = _lt_0_row[34]; // millisecond + const double var_slow_transient_outward_potassium_current__tau_ti_s = _lt_0_row[35]; // millisecond + const double var_sodium_background_current__g_Nab = 0.0025999999999999999; // milliS_per_microF + const double var_sodium_calcium_exchange_current__K_mCa = 1380; // micromolar + const double var_sodium_calcium_exchange_current__K_mNa = 87500; // micromolar + const double var_sodium_calcium_exchange_current__eta = 0.34999999999999998; // dimensionless + const double var_sodium_calcium_exchange_current__k_sat = 0.10000000000000001; // dimensionless + const double var_fast_sodium_current__E_Na = var_membrane__R * var_membrane__T * log((mParameters[6] + 0.1111111111111111 * mParameters[5]) / (var_chaste_interface__sodium_concentration__Nai + 0.1111111111111111 * var_chaste_interface__potassium_concentration__Ki)) / var_membrane__F; // millivolt + const double var_fast_sodium_current__i_Na = (-var_fast_sodium_current__E_Na + var_chaste_interface__membrane__V) * var_chaste_interface__fast_sodium_current__O_Na * mParameters[9]; // picoA_per_picoF + const double var_rapid_delayed_rectifier_potassium_current__i_Kr = (-var_membrane__R * var_membrane__T * log((mParameters[5] + 0.020408163265306124 * mParameters[6]) / (var_chaste_interface__potassium_concentration__Ki + 0.020408163265306124 * var_chaste_interface__sodium_concentration__Nai)) / var_membrane__F + var_chaste_interface__membrane__V) * var_chaste_interface__rapid_delayed_rectifier_potassium_current__O_K * mParameters[13]; // picoA_per_picoF + const double var_sodium_background_current__i_Nab = (-var_fast_sodium_current__E_Na + var_chaste_interface__membrane__V) * var_sodium_background_current__g_Nab; // picoA_per_picoF + const double var_sodium_calcium_exchange_current__i_NaCa = (pow(var_chaste_interface__sodium_concentration__Nai, 3) * mParameters[4] * exp(var_membrane__F * var_chaste_interface__membrane__V * var_sodium_calcium_exchange_current__eta / (var_membrane__R * var_membrane__T)) - pow(mParameters[6], 3) * var_calcium_concentration__Cai * exp((-1 + var_sodium_calcium_exchange_current__eta) * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * mParameters[15] / ((1 + var_sodium_calcium_exchange_current__k_sat * exp((-1 + var_sodium_calcium_exchange_current__eta) * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * (pow(mParameters[6], 3) + pow(var_sodium_calcium_exchange_current__K_mNa, 3)) * (mParameters[4] + var_sodium_calcium_exchange_current__K_mCa)); // picoA_per_picoF + const double var_calcium_concentration__Cai_orig_deriv = (-var_calcium_fluxes__J_trpn - var_calcium_fluxes__J_up - 0.5 * (-2 * var_sodium_calcium_exchange_current__i_NaCa + var_calcium_background_current__i_Cab + var_calcium_pump_current__i_pCa) * var_membrane__Acap * mParameters[8] / (var_membrane__F * var_membrane__Vmyo) + var_calcium_fluxes__J_leak + var_calcium_fluxes__J_xfer) * var_calcium_concentration__Bi; // micromolar / millisecond + const double d_dt_chaste_interface_var_calcium_concentration__Cai_converted = 0.001 * var_calcium_concentration__Cai_orig_deriv; // millimolar / millisecond + const double var_sodium_potassium_pump_current__Km_Ko = 1500; // micromolar + const double var_sodium_potassium_pump_current__Km_Nai = 21000; // micromolar + const double var_sodium_potassium_pump_current__i_NaK_max = 0.88; // picoA_per_picoF + const double var_sodium_potassium_pump_current__sigma = -0.14285714285714285 + 0.14285714285714285 * exp(1.4858841010401188e-5 * mParameters[6]); // dimensionless + const double var_sodium_potassium_pump_current__f_NaK = 1 / (1 + 0.1245 * exp(-0.10000000000000001 * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T)) + 0.036499999999999998 * var_sodium_potassium_pump_current__sigma * exp(-var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))); // dimensionless + const double var_sodium_potassium_pump_current__i_NaK = mParameters[5] * var_sodium_potassium_pump_current__f_NaK * var_sodium_potassium_pump_current__i_NaK_max / ((1 + pow((var_sodium_potassium_pump_current__Km_Nai / var_chaste_interface__sodium_concentration__Nai), 1.5)) * (mParameters[5] + var_sodium_potassium_pump_current__Km_Ko)); // picoA_per_picoF + const double d_dt_chaste_interface_var_sodium_concentration__Nai = -(3 * var_sodium_calcium_exchange_current__i_NaCa + 3 * var_sodium_potassium_pump_current__i_NaK + var_fast_sodium_current__i_Na + var_sodium_background_current__i_Nab) * var_membrane__Acap * mParameters[8] * mParameters[3] / (var_membrane__F * var_membrane__Vmyo); // micromolar / millisecond + const double var_time_independent_potassium_current__i_K1 = (-var_fast_transient_outward_potassium_current__E_K + var_chaste_interface__membrane__V) * mParameters[5] * mParameters[11] / ((1 + exp(0.089599999999999999 * var_chaste_interface__membrane__V - 0.089599999999999999 * var_fast_transient_outward_potassium_current__E_K)) * (210 + mParameters[5])); // picoA_per_picoF + const double var_ultra_rapidly_activating_delayed_rectifier_potassium_current__g_Kur = 0.16; // milliS_per_microF + const double var_ultra_rapidly_activating_delayed_rectifier_potassium_current__i_Kur = (-var_fast_transient_outward_potassium_current__E_K + var_chaste_interface__membrane__V) * var_chaste_interface__ultra_rapidly_activating_delayed_rectifier_potassium_current__aur * var_ultra_rapidly_activating_delayed_rectifier_potassium_current__g_Kur * var_chaste_interface__ultra_rapidly_activating_delayed_rectifier_potassium_current__iur; // picoA_per_picoF + const double d_dt_chaste_interface_var_potassium_concentration__Ki = -(-2 * var_sodium_potassium_pump_current__i_NaK + var_fast_transient_outward_potassium_current__i_Kto_f + var_non_inactivating_steady_state_potassium_current__i_Kss + var_rapid_delayed_rectifier_potassium_current__i_Kr + var_slow_delayed_rectifier_potassium_current__i_Ks + var_slow_transient_outward_potassium_current__i_Kto_s + var_time_independent_potassium_current__i_K1 + var_ultra_rapidly_activating_delayed_rectifier_potassium_current__i_Kur) * var_membrane__Acap * mParameters[8] * mParameters[3] / (var_membrane__F * var_membrane__Vmyo); // micromolar / millisecond + const double var_ultra_rapidly_activating_delayed_rectifier_potassium_current__tau_aur = _lt_0_row[34]; // millisecond + const double var_ultra_rapidly_activating_delayed_rectifier_potassium_current__tau_iur = _lt_0_row[36]; // millisecond + + if (mSetVoltageDerivativeToZero) + { + d_dt_chaste_interface_var_membrane__V = 0.0; + } + else + { + const double var_calcium_activated_chloride_current__E_Cl = -40; // millivolt + const double var_calcium_activated_chloride_current__Km_Cl = 10; // micromolar + const double var_calcium_activated_chloride_current__g_ClCa = 10; // milliS_per_microF + const double var_calcium_activated_chloride_current__O_ClCa = 0.20000000000000001 / (_lt_0_row[0]); // dimensionless + const double var_calcium_activated_chloride_current__i_ClCa = (-var_calcium_activated_chloride_current__E_Cl + var_chaste_interface__membrane__V) * var_calcium_activated_chloride_current__O_ClCa * var_calcium_activated_chloride_current__g_ClCa * var_calcium_concentration__Cai / (var_calcium_activated_chloride_current__Km_Cl + var_calcium_concentration__Cai); // picoA_per_picoF + const double var_membrane__i_stim_converted = GetIntracellularAreaStimulus(var_chaste_interface__environment__time); // uA_per_cm2 + const double var_membrane__i_stim = var_membrane__i_stim_converted / HeartConfig::Instance()->GetCapacitance(); // picoA_per_picoF + d_dt_chaste_interface_var_membrane__V = -var_L_type_calcium_current__i_CaL - var_calcium_activated_chloride_current__i_ClCa - var_calcium_background_current__i_Cab - var_calcium_pump_current__i_pCa - var_fast_sodium_current__i_Na - var_fast_transient_outward_potassium_current__i_Kto_f - var_membrane__i_stim - var_non_inactivating_steady_state_potassium_current__i_Kss - var_rapid_delayed_rectifier_potassium_current__i_Kr - var_slow_delayed_rectifier_potassium_current__i_Ks - var_slow_transient_outward_potassium_current__i_Kto_s - var_sodium_background_current__i_Nab - var_sodium_calcium_exchange_current__i_NaCa - var_sodium_potassium_pump_current__i_NaK - var_time_independent_potassium_current__i_K1 - var_ultra_rapidly_activating_delayed_rectifier_potassium_current__i_Kur; // millivolt / millisecond + } + + rDY[0] = d_dt_chaste_interface_var_membrane__V; + rDY[1] = d_dt_chaste_interface_var_calcium_concentration__Cai_converted; + rDY[2] = d_dt_chaste_interface_var_calcium_concentration__Cass; + rDY[3] = d_dt_chaste_interface_var_calcium_concentration__CaJSR; + rDY[4] = d_dt_chaste_interface_var_calcium_concentration__CaNSR; + rDY[5] = d_dt_chaste_interface_var_calcium_fluxes__P_RyR; + rDY[6] = d_dt_chaste_interface_var_calcium_buffering__LTRPN_Ca; + rDY[7] = d_dt_chaste_interface_var_calcium_buffering__HTRPN_Ca; + rDY[8] = d_dt_chaste_interface_var_ryanodine_receptors__P_O1; + rDY[9] = d_dt_chaste_interface_var_ryanodine_receptors__P_O2; + rDY[10] = d_dt_chaste_interface_var_ryanodine_receptors__P_C2; + rDY[11] = d_dt_chaste_interface_var_L_type_calcium_current__O; + rDY[12] = d_dt_chaste_interface_var_L_type_calcium_current__C2; + rDY[13] = d_dt_chaste_interface_var_L_type_calcium_current__C3; + rDY[14] = d_dt_chaste_interface_var_L_type_calcium_current__C4; + rDY[15] = d_dt_chaste_interface_var_L_type_calcium_current__I1; + rDY[16] = d_dt_chaste_interface_var_L_type_calcium_current__I2; + rDY[17] = d_dt_chaste_interface_var_L_type_calcium_current__I3; + rDY[18] = d_dt_chaste_interface_var_sodium_concentration__Nai; + rDY[19] = d_dt_chaste_interface_var_fast_sodium_current__O_Na; + rDY[20] = d_dt_chaste_interface_var_fast_sodium_current__C_Na1; + rDY[21] = d_dt_chaste_interface_var_fast_sodium_current__C_Na2; + rDY[22] = d_dt_chaste_interface_var_fast_sodium_current__I1_Na; + rDY[23] = d_dt_chaste_interface_var_fast_sodium_current__I2_Na; + rDY[24] = d_dt_chaste_interface_var_fast_sodium_current__IF_Na; + rDY[25] = d_dt_chaste_interface_var_fast_sodium_current__IC_Na2; + rDY[26] = d_dt_chaste_interface_var_fast_sodium_current__IC_Na3; + rDY[27] = d_dt_chaste_interface_var_potassium_concentration__Ki; + rAlphaOrTau[28] = var_fast_transient_outward_potassium_current__alpha_a; + rBetaOrInf[28] = var_fast_transient_outward_potassium_current__beta_a; + rAlphaOrTau[29] = var_fast_transient_outward_potassium_current__alpha_i; + rBetaOrInf[29] = var_fast_transient_outward_potassium_current__beta_i; + rAlphaOrTau[30] = var_slow_transient_outward_potassium_current__tau_ta_s; + rBetaOrInf[30] = var_slow_transient_outward_potassium_current__ass; + rAlphaOrTau[31] = var_slow_transient_outward_potassium_current__tau_ti_s; + rBetaOrInf[31] = var_slow_transient_outward_potassium_current__iss; + rAlphaOrTau[32] = var_slow_delayed_rectifier_potassium_current__alpha_n; + rBetaOrInf[32] = var_slow_delayed_rectifier_potassium_current__beta_n; + rAlphaOrTau[33] = var_ultra_rapidly_activating_delayed_rectifier_potassium_current__tau_aur; + rBetaOrInf[33] = var_slow_transient_outward_potassium_current__ass; + rAlphaOrTau[34] = var_ultra_rapidly_activating_delayed_rectifier_potassium_current__tau_iur; + rBetaOrInf[34] = var_slow_transient_outward_potassium_current__iss; + rAlphaOrTau[35] = var_non_inactivating_steady_state_potassium_current__tau_Kss; + rBetaOrInf[35] = var_slow_transient_outward_potassium_current__ass; + rDY[36] = d_dt_chaste_interface_var_non_inactivating_steady_state_potassium_current__iKss; + rDY[37] = d_dt_chaste_interface_var_rapid_delayed_rectifier_potassium_current__O_K; + rDY[38] = d_dt_chaste_interface_var_rapid_delayed_rectifier_potassium_current__C_K1; + rDY[39] = d_dt_chaste_interface_var_rapid_delayed_rectifier_potassium_current__C_K2; + rDY[40] = d_dt_chaste_interface_var_rapid_delayed_rectifier_potassium_current__I_K; + } + void Dynamicbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLRushLarsenOpt::ComputeOneStepExceptVoltage(const std::vector &rDY, const std::vector &rAlphaOrTau, const std::vector &rBetaOrInf) + { + + std::vector& rY = rGetStateVariables(); + + rY[1] += mDt * rDY[1]; + rY[2] += mDt * rDY[2]; + rY[3] += mDt * rDY[3]; + rY[4] += mDt * rDY[4]; + rY[5] += mDt * rDY[5]; + rY[6] += mDt * rDY[6]; + rY[7] += mDt * rDY[7]; + rY[8] += mDt * rDY[8]; + rY[9] += mDt * rDY[9]; + rY[10] += mDt * rDY[10]; + rY[11] += mDt * rDY[11]; + rY[12] += mDt * rDY[12]; + rY[13] += mDt * rDY[13]; + rY[14] += mDt * rDY[14]; + rY[15] += mDt * rDY[15]; + rY[16] += mDt * rDY[16]; + rY[17] += mDt * rDY[17]; + rY[18] += mDt * rDY[18]; + rY[19] += mDt * rDY[19]; + rY[20] += mDt * rDY[20]; + rY[21] += mDt * rDY[21]; + rY[22] += mDt * rDY[22]; + rY[23] += mDt * rDY[23]; + rY[24] += mDt * rDY[24]; + rY[25] += mDt * rDY[25]; + rY[26] += mDt * rDY[26]; + rY[27] += mDt * rDY[27]; + { + const double tau_inv = rAlphaOrTau[28] + rBetaOrInf[28]; + const double y_inf = rAlphaOrTau[28] / tau_inv; + rY[28] = y_inf + (rY[28] - y_inf)*exp(-mDt*tau_inv); + } + { + const double tau_inv = rAlphaOrTau[29] + rBetaOrInf[29]; + const double y_inf = rAlphaOrTau[29] / tau_inv; + rY[29] = y_inf + (rY[29] - y_inf)*exp(-mDt*tau_inv); + } + rY[30] = rBetaOrInf[30] + (rY[30] - rBetaOrInf[30])*exp(-mDt/rAlphaOrTau[30]); + rY[31] = rBetaOrInf[31] + (rY[31] - rBetaOrInf[31])*exp(-mDt/rAlphaOrTau[31]); + { + const double tau_inv = rAlphaOrTau[32] + rBetaOrInf[32]; + const double y_inf = rAlphaOrTau[32] / tau_inv; + rY[32] = y_inf + (rY[32] - y_inf)*exp(-mDt*tau_inv); + } + rY[33] = rBetaOrInf[33] + (rY[33] - rBetaOrInf[33])*exp(-mDt/rAlphaOrTau[33]); + rY[34] = rBetaOrInf[34] + (rY[34] - rBetaOrInf[34])*exp(-mDt/rAlphaOrTau[34]); + rY[35] = rBetaOrInf[35] + (rY[35] - rBetaOrInf[35])*exp(-mDt/rAlphaOrTau[35]); + rY[36] += mDt * rDY[36]; + rY[37] += mDt * rDY[37]; + rY[38] += mDt * rDY[38]; + rY[39] += mDt * rDY[39]; + rY[40] += mDt * rDY[40]; + } + + std::vector Dynamicbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLRushLarsenOpt::ComputeDerivedQuantities(double var_chaste_interface__environment__time, const std::vector & rY) + { + // Inputs: + // Time units: millisecond + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -82.4202 + double var_chaste_interface__calcium_concentration__Cai_converted = rY[1]; + // Units: millimolar; Initial value: 0.000115001 + double var_chaste_interface__calcium_concentration__Cass = rY[2]; + // Units: micromolar; Initial value: 0.115001 + double var_chaste_interface__calcium_concentration__CaJSR = rY[3]; + // Units: micromolar; Initial value: 1299.5 + double var_chaste_interface__calcium_fluxes__P_RyR = rY[5]; + // Units: dimensionless; Initial value: 0.0 + double var_chaste_interface__ryanodine_receptors__P_O1 = rY[8]; + // Units: dimensionless; Initial value: 1.49102e-05 + double var_chaste_interface__ryanodine_receptors__P_O2 = rY[9]; + // Units: dimensionless; Initial value: 9.51726e-11 + double var_chaste_interface__L_type_calcium_current__O = rY[11]; + // Units: dimensionless; Initial value: 9.30308e-19 + double var_chaste_interface__sodium_concentration__Nai = rY[18]; + // Units: micromolar; Initial value: 14237.1 + double var_chaste_interface__fast_sodium_current__O_Na = rY[19]; + // Units: dimensionless; Initial value: 7.13483e-07 + double var_chaste_interface__potassium_concentration__Ki = rY[27]; + // Units: micromolar; Initial value: 143720.0 + double var_chaste_interface__fast_transient_outward_potassium_current__ato_f = rY[28]; + // Units: dimensionless; Initial value: 0.00265563 + double var_chaste_interface__fast_transient_outward_potassium_current__ito_f = rY[29]; + // Units: dimensionless; Initial value: 0.999977 + double var_chaste_interface__slow_delayed_rectifier_potassium_current__nKs = rY[32]; + // Units: dimensionless; Initial value: 0.000262753 + double var_chaste_interface__non_inactivating_steady_state_potassium_current__aKss = rY[35]; + // Units: dimensionless; Initial value: 0.000417069 + double var_chaste_interface__non_inactivating_steady_state_potassium_current__iKss = rY[36]; + // Units: dimensionless; Initial value: 1.0 + double var_chaste_interface__rapid_delayed_rectifier_potassium_current__O_K = rY[37]; + // Units: dimensionless; Initial value: 0.000175298 + + + // Mathematics + const double var_L_type_calcium_current__E_CaL = 63; // millivolt + const double var_calcium_concentration__Cai = 1000 * var_chaste_interface__calcium_concentration__Cai_converted; // micromolar + const double var_membrane__F = 96.5; // coulomb_per_millimole + const double var_membrane__R = 8.3140000000000001; // joule_per_mole_kelvin + const double var_membrane__T = 298; // kelvin + const double var_L_type_calcium_current__i_CaL = (-var_L_type_calcium_current__E_CaL + var_chaste_interface__membrane__V) * var_chaste_interface__L_type_calcium_current__O * mParameters[7]; // picoA_per_picoF + const double var_L_type_calcium_current__i_CaL_converted = HeartConfig::Instance()->GetCapacitance() * var_L_type_calcium_current__i_CaL; // uA_per_cm2 + const double var_membrane__i_stim_converted = GetIntracellularAreaStimulus(var_chaste_interface__environment__time); // uA_per_cm2 + const double var_fast_transient_outward_potassium_current__E_K = var_membrane__R * var_membrane__T * log(mParameters[5] / var_chaste_interface__potassium_concentration__Ki) / var_membrane__F; // millivolt + const double var_fast_transient_outward_potassium_current__i_Kto_f = pow(var_chaste_interface__fast_transient_outward_potassium_current__ato_f, 3) * (-var_fast_transient_outward_potassium_current__E_K + var_chaste_interface__membrane__V) * mParameters[16] * var_chaste_interface__fast_transient_outward_potassium_current__ito_f; // picoA_per_picoF + const double var_fast_transient_outward_potassium_current__i_Kto_f_converted = HeartConfig::Instance()->GetCapacitance() * var_fast_transient_outward_potassium_current__i_Kto_f; // uA_per_cm2 + const double var_non_inactivating_steady_state_potassium_current__i_Kss = (-var_fast_transient_outward_potassium_current__E_K + var_chaste_interface__membrane__V) * var_chaste_interface__non_inactivating_steady_state_potassium_current__aKss * mParameters[12] * var_chaste_interface__non_inactivating_steady_state_potassium_current__iKss; // picoA_per_picoF + const double var_non_inactivating_steady_state_potassium_current__i_Kss_converted = HeartConfig::Instance()->GetCapacitance() * var_non_inactivating_steady_state_potassium_current__i_Kss; // uA_per_cm2 + const double var_calcium_fluxes__J_rel = (-var_chaste_interface__calcium_concentration__Cass + var_chaste_interface__calcium_concentration__CaJSR) * (var_chaste_interface__ryanodine_receptors__P_O1 + var_chaste_interface__ryanodine_receptors__P_O2) * var_chaste_interface__calcium_fluxes__P_RyR * mParameters[1]; // micromolar_per_millisecond + const double var_slow_delayed_rectifier_potassium_current__i_Ks = pow(var_chaste_interface__slow_delayed_rectifier_potassium_current__nKs, 2) * (-var_fast_transient_outward_potassium_current__E_K + var_chaste_interface__membrane__V) * mParameters[14]; // picoA_per_picoF + const double var_slow_delayed_rectifier_potassium_current__i_Ks_converted = HeartConfig::Instance()->GetCapacitance() * var_slow_delayed_rectifier_potassium_current__i_Ks; // uA_per_cm2 + const double var_sodium_calcium_exchange_current__K_mCa = 1380; // micromolar + const double var_sodium_calcium_exchange_current__K_mNa = 87500; // micromolar + const double var_sodium_calcium_exchange_current__eta = 0.34999999999999998; // dimensionless + const double var_sodium_calcium_exchange_current__k_sat = 0.10000000000000001; // dimensionless + const double var_fast_sodium_current__E_Na = var_membrane__R * var_membrane__T * log((mParameters[6] + 0.1111111111111111 * mParameters[5]) / (var_chaste_interface__sodium_concentration__Nai + 0.1111111111111111 * var_chaste_interface__potassium_concentration__Ki)) / var_membrane__F; // millivolt + const double var_fast_sodium_current__i_Na = (-var_fast_sodium_current__E_Na + var_chaste_interface__membrane__V) * var_chaste_interface__fast_sodium_current__O_Na * mParameters[9]; // picoA_per_picoF + const double var_fast_sodium_current__i_Na_converted = HeartConfig::Instance()->GetCapacitance() * var_fast_sodium_current__i_Na; // uA_per_cm2 + const double var_rapid_delayed_rectifier_potassium_current__i_Kr = (-var_membrane__R * var_membrane__T * log((mParameters[5] + 0.020408163265306124 * mParameters[6]) / (var_chaste_interface__potassium_concentration__Ki + 0.020408163265306124 * var_chaste_interface__sodium_concentration__Nai)) / var_membrane__F + var_chaste_interface__membrane__V) * var_chaste_interface__rapid_delayed_rectifier_potassium_current__O_K * mParameters[13]; // picoA_per_picoF + const double var_rapid_delayed_rectifier_potassium_current__i_Kr_converted = HeartConfig::Instance()->GetCapacitance() * var_rapid_delayed_rectifier_potassium_current__i_Kr; // uA_per_cm2 + const double var_sodium_calcium_exchange_current__i_NaCa = (pow(var_chaste_interface__sodium_concentration__Nai, 3) * mParameters[4] * exp(var_membrane__F * var_chaste_interface__membrane__V * var_sodium_calcium_exchange_current__eta / (var_membrane__R * var_membrane__T)) - pow(mParameters[6], 3) * var_calcium_concentration__Cai * exp((-1 + var_sodium_calcium_exchange_current__eta) * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * mParameters[15] / ((1 + var_sodium_calcium_exchange_current__k_sat * exp((-1 + var_sodium_calcium_exchange_current__eta) * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * (pow(mParameters[6], 3) + pow(var_sodium_calcium_exchange_current__K_mNa, 3)) * (mParameters[4] + var_sodium_calcium_exchange_current__K_mCa)); // picoA_per_picoF + const double var_sodium_calcium_exchange_current__i_NaCa_converted = HeartConfig::Instance()->GetCapacitance() * var_sodium_calcium_exchange_current__i_NaCa; // uA_per_cm2 + const double var_time_independent_potassium_current__i_K1 = (-var_fast_transient_outward_potassium_current__E_K + var_chaste_interface__membrane__V) * mParameters[5] * mParameters[11] / ((1 + exp(0.089599999999999999 * var_chaste_interface__membrane__V - 0.089599999999999999 * var_fast_transient_outward_potassium_current__E_K)) * (210 + mParameters[5])); // picoA_per_picoF + const double var_time_independent_potassium_current__i_K1_converted = HeartConfig::Instance()->GetCapacitance() * var_time_independent_potassium_current__i_K1; // uA_per_cm2 + + std::vector dqs(12); + dqs[0] = var_calcium_fluxes__J_rel; + dqs[1] = var_chaste_interface__calcium_concentration__Cai_converted; + dqs[2] = var_L_type_calcium_current__i_CaL_converted; + dqs[3] = var_fast_sodium_current__i_Na_converted; + dqs[4] = var_time_independent_potassium_current__i_K1_converted; + dqs[5] = var_non_inactivating_steady_state_potassium_current__i_Kss_converted; + dqs[6] = var_rapid_delayed_rectifier_potassium_current__i_Kr_converted; + dqs[7] = var_slow_delayed_rectifier_potassium_current__i_Ks_converted; + dqs[8] = var_sodium_calcium_exchange_current__i_NaCa_converted; + dqs[9] = var_membrane__i_stim_converted; + dqs[10] = var_fast_transient_outward_potassium_current__i_Kto_f_converted; + dqs[11] = var_chaste_interface__environment__time; + return dqs; + } + +template<> +void OdeSystemInformation::Initialise(void) +{ + this->mSystemName = "bondarenko_2004_apical"; + this->mFreeVariableName = "time"; + this->mFreeVariableUnits = "millisecond"; + + // rY[0]: + this->mVariableNames.push_back("membrane_voltage"); + this->mVariableUnits.push_back("millivolt"); + this->mInitialConditions.push_back(-82.4202); + + // rY[1]: + this->mVariableNames.push_back("cytosolic_calcium_concentration"); + this->mVariableUnits.push_back("millimolar"); + this->mInitialConditions.push_back(0.000115001); + + // rY[2]: + this->mVariableNames.push_back("dyadic_space_calcium_concentration"); + this->mVariableUnits.push_back("micromolar"); + this->mInitialConditions.push_back(0.115001); + + // rY[3]: + this->mVariableNames.push_back("JSR_calcium_concentration"); + this->mVariableUnits.push_back("micromolar"); + this->mInitialConditions.push_back(1299.5); + + // rY[4]: + this->mVariableNames.push_back("calcium_concentration__CaNSR"); + this->mVariableUnits.push_back("micromolar"); + this->mInitialConditions.push_back(1299.5); + + // rY[5]: + this->mVariableNames.push_back("calcium_fluxes__P_RyR"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.0); + + // rY[6]: + this->mVariableNames.push_back("calcium_buffering__LTRPN_Ca"); + this->mVariableUnits.push_back("micromolar"); + this->mInitialConditions.push_back(11.2684); + + // rY[7]: + this->mVariableNames.push_back("calcium_buffering__HTRPN_Ca"); + this->mVariableUnits.push_back("micromolar"); + this->mInitialConditions.push_back(125.29); + + // rY[8]: + this->mVariableNames.push_back("ryanodine_receptors__P_O1"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(1.49102e-05); + + // rY[9]: + this->mVariableNames.push_back("ryanodine_receptors__P_O2"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(9.51726e-11); + + // rY[10]: + this->mVariableNames.push_back("ryanodine_receptors__P_C2"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.00016774); + + // rY[11]: + this->mVariableNames.push_back("L_type_calcium_current__O"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(9.30308e-19); + + // rY[12]: + this->mVariableNames.push_back("L_type_calcium_current__C2"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.000124216); + + // rY[13]: + this->mVariableNames.push_back("L_type_calcium_current__C3"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(5.78679e-09); + + // rY[14]: + this->mVariableNames.push_back("L_type_calcium_current__C4"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(1.19816e-13); + + // rY[15]: + this->mVariableNames.push_back("L_type_calcium_current__I1"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(4.97923e-19); + + // rY[16]: + this->mVariableNames.push_back("L_type_calcium_current__I2"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(3.45847e-14); + + // rY[17]: + this->mVariableNames.push_back("L_type_calcium_current__I3"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(1.85106e-14); + + // rY[18]: + this->mVariableNames.push_back("cytosolic_sodium_concentration"); + this->mVariableUnits.push_back("micromolar"); + this->mInitialConditions.push_back(14237.1); + + // rY[19]: + this->mVariableNames.push_back("fast_sodium_current__O_Na"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(7.13483e-07); + + // rY[20]: + this->mVariableNames.push_back("fast_sodium_current__C_Na1"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.000279132); + + // rY[21]: + this->mVariableNames.push_back("fast_sodium_current__C_Na2"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.020752); + + // rY[22]: + this->mVariableNames.push_back("fast_sodium_current__I1_Na"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(6.73345e-07); + + // rY[23]: + this->mVariableNames.push_back("fast_sodium_current__I2_Na"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(1.55787e-09); + + // rY[24]: + this->mVariableNames.push_back("fast_sodium_current__IF_Na"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.000153176); + + // rY[25]: + this->mVariableNames.push_back("fast_sodium_current__IC_Na2"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.0113879); + + // rY[26]: + this->mVariableNames.push_back("fast_sodium_current__IC_Na3"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.34278); + + // rY[27]: + this->mVariableNames.push_back("cytosolic_potassium_concentration"); + this->mVariableUnits.push_back("micromolar"); + this->mInitialConditions.push_back(143720.0); + + // rY[28]: + this->mVariableNames.push_back("fast_transient_outward_potassium_current__ato_f"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.00265563); + + // rY[29]: + this->mVariableNames.push_back("fast_transient_outward_potassium_current__ito_f"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.999977); + + // rY[30]: + this->mVariableNames.push_back("slow_transient_outward_potassium_current__ato_s"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.000417069); + + // rY[31]: + this->mVariableNames.push_back("slow_transient_outward_potassium_current__ito_s"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.998543); + + // rY[32]: + this->mVariableNames.push_back("slow_delayed_rectifier_potassium_current__nKs"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.000262753); + + // rY[33]: + this->mVariableNames.push_back("ultra_rapidly_activating_delayed_rectifier_potassium_current__aur"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.000417069); + + // rY[34]: + this->mVariableNames.push_back("ultra_rapidly_activating_delayed_rectifier_potassium_current__iur"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.998543); + + // rY[35]: + this->mVariableNames.push_back("non_inactivating_steady_state_potassium_current__aKss"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.000417069); + + // rY[36]: + this->mVariableNames.push_back("non_inactivating_steady_state_potassium_current__iKss"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(1.0); + + // rY[37]: + this->mVariableNames.push_back("rapid_delayed_rectifier_potassium_current__O_K"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.000175298); + + // rY[38]: + this->mVariableNames.push_back("rapid_delayed_rectifier_potassium_current__C_K1"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.000992513); + + // rY[39]: + this->mVariableNames.push_back("rapid_delayed_rectifier_potassium_current__C_K2"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.000641229); + + // rY[40]: + this->mVariableNames.push_back("rapid_delayed_rectifier_potassium_current__I_K"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(3.19129e-05); + + // mParameters[0]: + this->mParameterNames.push_back("SR_leak_current_max"); + this->mParameterUnits.push_back("per_millisecond"); + + // mParameters[1]: + this->mParameterNames.push_back("SR_release_current_max"); + this->mParameterUnits.push_back("per_millisecond"); + + // mParameters[2]: + this->mParameterNames.push_back("SR_uptake_current_max"); + this->mParameterUnits.push_back("micromolar_per_millisecond"); + + // mParameters[3]: + this->mParameterNames.push_back("concentration_clamp_onoff"); + this->mParameterUnits.push_back("dimensionless"); + + // mParameters[4]: + this->mParameterNames.push_back("extracellular_calcium_concentration"); + this->mParameterUnits.push_back("micromolar"); + + // mParameters[5]: + this->mParameterNames.push_back("extracellular_potassium_concentration"); + this->mParameterUnits.push_back("micromolar"); + + // mParameters[6]: + this->mParameterNames.push_back("extracellular_sodium_concentration"); + this->mParameterUnits.push_back("micromolar"); + + // mParameters[7]: + this->mParameterNames.push_back("membrane_L_type_calcium_current_conductance"); + this->mParameterUnits.push_back("milliS_per_microF"); + + // mParameters[8]: + this->mParameterNames.push_back("membrane_capacitance"); + this->mParameterUnits.push_back("microF_per_cm2"); + + // mParameters[9]: + this->mParameterNames.push_back("membrane_fast_sodium_current_conductance"); + this->mParameterUnits.push_back("milliS_per_microF"); + + // mParameters[10]: + this->mParameterNames.push_back("membrane_fast_sodium_current_shift_inactivation"); + this->mParameterUnits.push_back("millivolt"); + + // mParameters[11]: + this->mParameterNames.push_back("membrane_inward_rectifier_potassium_current_conductance"); + this->mParameterUnits.push_back("milliS_per_microF"); + + // mParameters[12]: + this->mParameterNames.push_back("membrane_non_inactivating_steady_state_potassium_current_conductance"); + this->mParameterUnits.push_back("milliS_per_microF"); + + // mParameters[13]: + this->mParameterNames.push_back("membrane_rapid_delayed_rectifier_potassium_current_conductance"); + this->mParameterUnits.push_back("milliS_per_microF"); + + // mParameters[14]: + this->mParameterNames.push_back("membrane_slow_delayed_rectifier_potassium_current_conductance"); + this->mParameterUnits.push_back("milliS_per_microF"); + + // mParameters[15]: + this->mParameterNames.push_back("membrane_sodium_calcium_exchanger_current_conductance"); + this->mParameterUnits.push_back("picoA_per_picoF"); + + // mParameters[16]: + this->mParameterNames.push_back("membrane_transient_outward_current_conductance"); + this->mParameterUnits.push_back("milliS_per_microF"); + + // Derived Quantity index [0]: + this->mDerivedQuantityNames.push_back("SR_release_current"); + this->mDerivedQuantityUnits.push_back("micromolar_per_millisecond"); + + // Derived Quantity index [1]: + this->mDerivedQuantityNames.push_back("cytosolic_calcium_concentration"); + this->mDerivedQuantityUnits.push_back("millimolar"); + + // Derived Quantity index [2]: + this->mDerivedQuantityNames.push_back("membrane_L_type_calcium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [3]: + this->mDerivedQuantityNames.push_back("membrane_fast_sodium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [4]: + this->mDerivedQuantityNames.push_back("membrane_inward_rectifier_potassium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [5]: + this->mDerivedQuantityNames.push_back("membrane_non_inactivating_steady_state_potassium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [6]: + this->mDerivedQuantityNames.push_back("membrane_rapid_delayed_rectifier_potassium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [7]: + this->mDerivedQuantityNames.push_back("membrane_slow_delayed_rectifier_potassium_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [8]: + this->mDerivedQuantityNames.push_back("membrane_sodium_calcium_exchanger_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [9]: + this->mDerivedQuantityNames.push_back("membrane_stimulus_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [10]: + this->mDerivedQuantityNames.push_back("membrane_transient_outward_current"); + this->mDerivedQuantityUnits.push_back("uA_per_cm2"); + + // Derived Quantity index [11]: + this->mDerivedQuantityNames.push_back("time"); + this->mDerivedQuantityUnits.push_back("millisecond"); + + this->mInitialised = true; +} + +// Serialization for Boost >= 1.36 +#include "SerializationExportWrapperForCpp.hpp" +CHASTE_CLASS_EXPORT(Dynamicbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLRushLarsenOpt) +extern "C" +{ + AbstractCardiacCellInterface* MakeCardiacCell( + boost::shared_ptr pSolver, + boost::shared_ptr pStimulus) + { + return new Dynamicbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLRushLarsenOpt(pSolver, pStimulus); + } + +} diff --git a/chaste_codegen/tests/numerical/baseline/RLopt/dynamic_bondarenko_szigeti_bett_kim_rasmusson_2004_apical.hpp b/chaste_codegen/tests/numerical/baseline/RLopt/dynamic_bondarenko_szigeti_bett_kim_rasmusson_2004_apical.hpp new file mode 100644 index 00000000..07d17da5 --- /dev/null +++ b/chaste_codegen/tests/numerical/baseline/RLopt/dynamic_bondarenko_szigeti_bett_kim_rasmusson_2004_apical.hpp @@ -0,0 +1,90 @@ +#ifndef DYNAMICBONDARENKO_SZIGETI_BETT_KIM_RASMUSSON_2004_APICALFROMCELLMLRUSHLARSENOPT_HPP_ +#define DYNAMICBONDARENKO_SZIGETI_BETT_KIM_RASMUSSON_2004_APICALFROMCELLMLRUSHLARSENOPT_HPP_ + +//! @file +//! +//! This source file was generated from CellML by chaste_codegen version (version omitted as unimportant) +//! +//! Model: bondarenko_2004_apical +//! +//! Processed by chaste_codegen: https://github.com/ModellingWebLab/chaste-codegen +//! (translator: chaste_codegen, model type: RushLarsenOpt) +//! on (date omitted as unimportant) +//! +//! + +#include "ChasteSerialization.hpp" +#include +#include "AbstractDynamicallyLoadableEntity.hpp" +#include "AbstractStimulusFunction.hpp" +#include "AbstractRushLarsenCardiacCell.hpp" + +class Dynamicbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLRushLarsenOpt : public AbstractRushLarsenCardiacCell, public AbstractDynamicallyLoadableEntity +{ + friend class boost::serialization::access; + template + void serialize(Archive & archive, const unsigned int version) + { + archive & boost::serialization::base_object(*this); + archive & boost::serialization::base_object(*this); + } + + // + // Settable parameters and readable variables + // + +private: + static AbstractRushLarsenCardiacCell* CreateMethod(boost::shared_ptr p_solver, boost::shared_ptr p_stimulus); + static bool registered; +private: +const bool is_concentration[41] = {false, true, true, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, false, false, false, false, false, false, false, false, true, false, false, false, false, false, false, false, false, false, false, false, false, false}; +const bool is_probability[41] = {false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false}; +public: + + boost::shared_ptr UseCellMLDefaultStimulus(); + double GetIntracellularCalciumConcentration(); + Dynamicbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLRushLarsenOpt(boost::shared_ptr /* unused; should be empty */, boost::shared_ptr pIntracellularStimulus); + ~Dynamicbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLRushLarsenOpt(); + void VerifyStateVariables(); + AbstractLookupTableCollection* GetLookupTableCollection(); + double GetIIonic(const std::vector* pStateVariables=NULL); + void EvaluateEquations(double var_chaste_interface__environment__time, std::vector &rDY, std::vector &rAlphaOrTau, std::vector &rBetaOrInf); + void ComputeOneStepExceptVoltage(const std::vector &rDY, const std::vector &rAlphaOrTau, const std::vector &rBetaOrInf); + + std::vector ComputeDerivedQuantities(double var_chaste_interface__environment__time, const std::vector & rY); +}; + +// Needs to be included last +#include "SerializationExportWrapper.hpp" +CHASTE_CLASS_EXPORT(Dynamicbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLRushLarsenOpt) + +namespace boost +{ + namespace serialization + { + template + inline void save_construct_data( + Archive & ar, const Dynamicbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLRushLarsenOpt * t, const unsigned int fileVersion) + { + const boost::shared_ptr p_solver = t->GetSolver(); + const boost::shared_ptr p_stimulus = t->GetStimulusFunction(); + ar << p_solver; + ar << p_stimulus; + } + + template + inline void load_construct_data( + Archive & ar, Dynamicbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLRushLarsenOpt * t, const unsigned int fileVersion) + { + boost::shared_ptr p_solver; + boost::shared_ptr p_stimulus; + ar >> p_solver; + ar >> p_stimulus; + ::new(t)Dynamicbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLRushLarsenOpt(p_solver, p_stimulus); + } + + } + +} + +#endif // DYNAMICBONDARENKO_SZIGETI_BETT_KIM_RASMUSSON_2004_APICALFROMCELLMLRUSHLARSENOPT_HPP_ \ No newline at end of file diff --git a/chaste_codegen/tests/numerical/baseline/RLopt/hodgkin_huxley_squid_axon_model_1952_modified.cpp b/chaste_codegen/tests/numerical/baseline/RLopt/hodgkin_huxley_squid_axon_model_1952_modified.cpp new file mode 100644 index 00000000..c1662264 --- /dev/null +++ b/chaste_codegen/tests/numerical/baseline/RLopt/hodgkin_huxley_squid_axon_model_1952_modified.cpp @@ -0,0 +1,544 @@ +//! @file +//! +//! This source file was generated from CellML by chaste_codegen version (version omitted as unimportant) +//! +//! Model: hodgkin_huxley_squid_axon_model_1952_modified +//! +//! Processed by chaste_codegen: https://github.com/ModellingWebLab/chaste-codegen +//! (translator: chaste_codegen, model type: RushLarsenOpt) +//! on (date omitted as unimportant) +//! +//! + +#include "hodgkin_huxley_squid_axon_model_1952_modified.hpp" +#include +#include +#include +#include +#include "Exception.hpp" +#include "OdeSystemInformation.hpp" +#include "RegularStimulus.hpp" +#include "HeartConfig.hpp" +#include "IsNan.hpp" +#include "MathsCustomFunctions.hpp" + + + +class Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLRushLarsenOpt_LookupTables : public AbstractLookupTableCollection +{ +public: + static Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLRushLarsenOpt_LookupTables* Instance() + { + if (mpInstance.get() == NULL) + { + mpInstance.reset(new Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLRushLarsenOpt_LookupTables); + } + return mpInstance.get(); + } + + void FreeMemory() + { + + if (_lookup_table_0) + { + delete[] _lookup_table_0; + _lookup_table_0 = NULL; + } + + mNeedsRegeneration.assign(mNeedsRegeneration.size(), true); + } + + // Row lookup methods + // using linear-interpolation + + double* _lookup_0_row(unsigned i, double _factor_) + { + for (unsigned j=0; j<6; j++) + { + const double y1 = _lookup_table_0[i][j]; + const double y2 = _lookup_table_0[i+1][j]; + _lookup_table_0_row[j] = y1 + (y2-y1)*_factor_; + } + return _lookup_table_0_row; + } + + + const double * IndexTable0(double var_chaste_interface__membrane__V) + { + const double _offset_0 = var_chaste_interface__membrane__V - mTableMins[0]; + const double _offset_0_over_table_step = _offset_0 * mTableStepInverses[0]; + const unsigned _table_index_0 = (unsigned)(_offset_0_over_table_step); + const double _factor_0 = _offset_0_over_table_step - _table_index_0; + const double* const _lt_0_row = Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLRushLarsenOpt_LookupTables::Instance()->_lookup_0_row(_table_index_0, _factor_0); + return _lt_0_row; + } + + +// LCOV_EXCL_START + bool CheckIndex0(double& var_chaste_interface__membrane__V) + { + bool _oob_0 = false; + if (var_chaste_interface__membrane__V>mTableMaxs[0] || var_chaste_interface__membrane__V= -9.9999999999999995e-8) && (6.5 + 0.10000000000000001 * var_chaste_interface__membrane__V <= 9.9999999999999995e-8)) ? (0.42499999999999999 + 0.0050000000000000001 * var_chaste_interface__membrane__V) : (-0.099999999999999992 * (6.5 + 0.10000000000000001 * var_chaste_interface__membrane__V) / (-1 + exp(-6.5 - 0.10000000000000001 * var_chaste_interface__membrane__V)))); + }; + const double var_chaste_interface__membrane__V = mTableMins[0] + i*mTableSteps[0]; + double val = f(var_chaste_interface__membrane__V); + //Expressions which are part of a piecewise could be inf / nan, this is generally accptable, due to the piecewise, however occasionally interpolation of the lookup table from a nan/inf version can give problems. + //To avoid this values stored in the table are intrpolated. Occurances of this to at most 2 per expression. + if (!std::isfinite(val) && _lookup_table_0_num_misshit_piecewise[0] < 2){ + double left = f(var_chaste_interface__membrane__V - mTableSteps[0]); + double right = f(var_chaste_interface__membrane__V + mTableSteps[0]); + val = (left + right) / 2.0; + // count and limit number of misshits + _lookup_table_0_num_misshit_piecewise[0] +=1; + } + else if (!std::isfinite(val) && _lookup_table_0_num_misshit_piecewise[0] >= 2){ + EXCEPTION("Lookup table 0 at ["<= -9.9999999999999995e-8) && (5 + 0.10000000000000001 * var_chaste_interface__membrane__V <= 9.9999999999999995e-8)) ? (3.5 + 0.050000000000000003 * var_chaste_interface__membrane__V) : (-(5 + 0.10000000000000001 * var_chaste_interface__membrane__V) / (-1 + exp(-5 - 0.10000000000000001 * var_chaste_interface__membrane__V)))); + }; + const double var_chaste_interface__membrane__V = mTableMins[0] + i*mTableSteps[0]; + double val = f(var_chaste_interface__membrane__V); + //Expressions which are part of a piecewise could be inf / nan, this is generally accptable, due to the piecewise, however occasionally interpolation of the lookup table from a nan/inf version can give problems. + //To avoid this values stored in the table are intrpolated. Occurances of this to at most 2 per expression. + if (!std::isfinite(val) && _lookup_table_0_num_misshit_piecewise[4] < 2){ + double left = f(var_chaste_interface__membrane__V - mTableSteps[0]); + double right = f(var_chaste_interface__membrane__V + mTableSteps[0]); + val = (left + right) / 2.0; + // count and limit number of misshits + _lookup_table_0_num_misshit_piecewise[4] +=1; + } + else if (!std::isfinite(val) && _lookup_table_0_num_misshit_piecewise[4] >= 2){ + EXCEPTION("Lookup table 4 at ["< mpInstance; + + // Row lookup methods memory + double _lookup_table_0_row[6]; + + // Lookup tables + double (*_lookup_table_0)[6]; + int _lookup_table_0_num_misshit_piecewise[6] = {0}; + +}; + +std::shared_ptr Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLRushLarsenOpt_LookupTables::mpInstance; + + + boost::shared_ptr Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLRushLarsenOpt::UseCellMLDefaultStimulus() + { + // Use the default stimulus specified by CellML metadata + const double var_chaste_interface__membrane__stim_amplitude = -20; // microA_per_cm2 + const double var_chaste_interface__membrane__stim_duration = 0.5; // millisecond + const double var_chaste_interface__membrane__stim_period = 1000; // millisecond + const double var_chaste_interface__membrane__stim_start = 10; // millisecond + boost::shared_ptr p_cellml_stim(new RegularStimulus( + -fabs(var_chaste_interface__membrane__stim_amplitude), + var_chaste_interface__membrane__stim_duration, + var_chaste_interface__membrane__stim_period, + var_chaste_interface__membrane__stim_start + )); + mpIntracellularStimulus = p_cellml_stim; + return p_cellml_stim; + } + + Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLRushLarsenOpt::Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLRushLarsenOpt(boost::shared_ptr /* unused; should be empty */, boost::shared_ptr pIntracellularStimulus) + : AbstractRushLarsenCardiacCell( + 4, + 0, + pIntracellularStimulus) + { + // Time units: millisecond + // + this->mpSystemInfo = OdeSystemInformation::Instance(); + Init(); + + // We have a default stimulus specified in the CellML file metadata + this->mHasDefaultStimulusFromCellML = true; + + this->mParameters[0] = 1; // (var_membrane__Cm) [microF_per_cm2] + this->mParameters[1] = 120; // (var_sodium_channel__g_Na) [milliS_per_cm2] + this->mParameters[2] = 0.29999999999999999; // (var_leakage_current__g_L) [milliS_per_cm2] + this->mParameters[3] = 36; // (var_potassium_channel__g_K) [milliS_per_cm2] + } + + Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLRushLarsenOpt::~Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLRushLarsenOpt() + { + } + + AbstractLookupTableCollection* Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLRushLarsenOpt::GetLookupTableCollection() + { + return Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLRushLarsenOpt_LookupTables::Instance(); + } + + void Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLRushLarsenOpt::VerifyStateVariables() + { + std::vector& rY = rGetStateVariables(); + std::string error_message = ""; + + for (unsigned i=0; i < 4; i++) + { + if(std::isnan(rY[i])) + { + error_message += "State variable " + this->rGetStateVariableNames()[i] + " is not a number\n"; + } + if(std::isinf(rY[i])) + { + error_message += "State variable " + this->rGetStateVariableNames()[i] + " has become INFINITE\n"; + } + if(this->is_concentration[i] && rY[i] < 0) + { + error_message += "Concentration " + this->rGetStateVariableNames()[i] + " below 0\n"; + } + if(this->is_probability[i] && rY[i] < 0) + { + error_message += "Probability " + this->rGetStateVariableNames()[i] + " below 0\n"; + } + if(this->is_probability[i] && rY[i] > 1) + { + error_message += "Probability " + this->rGetStateVariableNames()[i] + " above 1\n"; + } + } + if (error_message != ""){ + EXCEPTION(DumpState(error_message)); + } + } + + double Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLRushLarsenOpt::GetIIonic(const std::vector* pStateVariables) + { + // For state variable interpolation (SVI) we read in interpolated state variables, + // otherwise for ionic current interpolation (ICI) we use the state variables of this model (node). + if (!pStateVariables) pStateVariables = &rGetStateVariables(); + const std::vector& rY = *pStateVariables; + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -75.0 + double var_chaste_interface__sodium_channel_m_gate__m = rY[1]; + // Units: dimensionless; Initial value: 0.05 + double var_chaste_interface__sodium_channel_h_gate__h = rY[2]; + // Units: dimensionless; Initial value: 0.6 + double var_chaste_interface__potassium_channel_n_gate__n = rY[3]; + // Units: dimensionless; Initial value: 0.325 + + + const double var_leakage_current__i_L = (64.387 + var_chaste_interface__membrane__V) * mParameters[2]; // microA_per_cm2 + const double var_potassium_channel__i_K = pow(var_chaste_interface__potassium_channel_n_gate__n, 4) * (87 + var_chaste_interface__membrane__V) * mParameters[3]; // microA_per_cm2 + const double var_sodium_channel__i_Na = pow(var_chaste_interface__sodium_channel_m_gate__m, 3) * (-40 + var_chaste_interface__membrane__V) * mParameters[1] * var_chaste_interface__sodium_channel_h_gate__h; // microA_per_cm2 + const double var_chaste_interface__i_ionic = var_leakage_current__i_L + var_potassium_channel__i_K + var_sodium_channel__i_Na; // uA_per_cm2 + + const double i_ionic = var_chaste_interface__i_ionic; + EXCEPT_IF_NOT(!std::isnan(i_ionic)); + return i_ionic; + } + + void Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLRushLarsenOpt::EvaluateEquations(double var_chaste_interface__environment__time, std::vector &rDY, std::vector &rAlphaOrTau, std::vector &rBetaOrInf) + { + std::vector& rY = rGetStateVariables(); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -75.0 + double var_chaste_interface__sodium_channel_m_gate__m = rY[1]; + // Units: dimensionless; Initial value: 0.05 + double var_chaste_interface__sodium_channel_h_gate__h = rY[2]; + // Units: dimensionless; Initial value: 0.6 + double var_chaste_interface__potassium_channel_n_gate__n = rY[3]; + // Units: dimensionless; Initial value: 0.325 + + // Lookup table indexing + const bool _oob_0 = Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLRushLarsenOpt_LookupTables::Instance()->CheckIndex0(var_chaste_interface__membrane__V); +// LCOV_EXCL_START + if (_oob_0) + EXCEPTION(DumpState("membrane_voltage outside lookup table range", rY , var_chaste_interface__environment__time)); +// LCOV_EXCL_STOP + const double* const _lt_0_row = Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLRushLarsenOpt_LookupTables::Instance()->IndexTable0(var_chaste_interface__membrane__V); + + // Mathematics + double d_dt_chaste_interface_var_membrane__V; + const double var_potassium_channel_n_gate__B = -0.10000000000000001; // per_millivolt + const double var_potassium_channel_n_gate__A = -0.01 / var_potassium_channel_n_gate__B; // per_millisecond + const double var_potassium_channel_n_gate__beta_n = 0.125 * _lt_0_row[1]; // per_millisecond + const double var_potassium_channel_n_gate__v0 = -65; // millivolt + const double var_potassium_channel_n_gate__U = (-var_potassium_channel_n_gate__v0 + var_chaste_interface__membrane__V) * var_potassium_channel_n_gate__B; // dimensionless + const double var_potassium_channel_n_gate__alpha_n = (((var_potassium_channel_n_gate__U >= -9.9999999999999995e-8) && (var_potassium_channel_n_gate__U <= 9.9999999999999995e-8)) ? ((1 - 0.5 * var_potassium_channel_n_gate__U) * var_potassium_channel_n_gate__A) : (var_potassium_channel_n_gate__A * var_potassium_channel_n_gate__U / (-1 + exp(var_potassium_channel_n_gate__U)))); // per_millisecond + const double var_sodium_channel_h_gate__alpha_h = 0.070000000000000007 * _lt_0_row[2]; // per_millisecond + const double var_sodium_channel_h_gate__beta_h = 1 / (_lt_0_row[3]); // per_millisecond + const double var_sodium_channel_m_gate__B = -0.10000000000000001; // per_millivolt + const double var_sodium_channel_m_gate__A = -0.10000000000000001 / var_sodium_channel_m_gate__B; // per_millisecond + const double var_sodium_channel_m_gate__beta_m = 4 * _lt_0_row[5]; // per_millisecond + const double var_sodium_channel_m_gate__v0 = -50; // millivolt + const double var_sodium_channel_m_gate__U = (-var_sodium_channel_m_gate__v0 + var_chaste_interface__membrane__V) * var_sodium_channel_m_gate__B; // dimensionless + const double var_sodium_channel_m_gate__alpha_m = (((var_sodium_channel_m_gate__U >= -9.9999999999999995e-8) && (var_sodium_channel_m_gate__U <= 9.9999999999999995e-8)) ? ((1 - 0.5 * var_sodium_channel_m_gate__U) * var_sodium_channel_m_gate__A) : (var_sodium_channel_m_gate__A * var_sodium_channel_m_gate__U / (-1 + exp(var_sodium_channel_m_gate__U)))); // per_millisecond + + if (mSetVoltageDerivativeToZero) + { + d_dt_chaste_interface_var_membrane__V = 0.0; + } + else + { + const double var_membrane__E_R = -75; // millivolt + const double var_leakage_current__E_L = 10.613 + var_membrane__E_R; // millivolt + const double var_leakage_current__i_L = (-var_leakage_current__E_L + var_chaste_interface__membrane__V) * mParameters[2]; // microA_per_cm2 + const double var_membrane__i_Stim = GetIntracellularAreaStimulus(var_chaste_interface__environment__time); // microA_per_cm2 + const double var_potassium_channel__E_K = -12 + var_membrane__E_R; // millivolt + const double var_potassium_channel__i_K = pow(var_chaste_interface__potassium_channel_n_gate__n, 4) * (-var_potassium_channel__E_K + var_chaste_interface__membrane__V) * mParameters[3]; // microA_per_cm2 + const double var_sodium_channel__E_Na = 115 + var_membrane__E_R; // millivolt + const double var_sodium_channel__i_Na = pow(var_chaste_interface__sodium_channel_m_gate__m, 3) * (-var_sodium_channel__E_Na + var_chaste_interface__membrane__V) * mParameters[1] * var_chaste_interface__sodium_channel_h_gate__h; // microA_per_cm2 + d_dt_chaste_interface_var_membrane__V = (-var_leakage_current__i_L - var_membrane__i_Stim - var_potassium_channel__i_K - var_sodium_channel__i_Na) / mParameters[0]; // millivolt / millisecond + } + + rDY[0] = d_dt_chaste_interface_var_membrane__V; + rAlphaOrTau[1] = var_sodium_channel_m_gate__alpha_m; + rBetaOrInf[1] = var_sodium_channel_m_gate__beta_m; + rAlphaOrTau[2] = var_sodium_channel_h_gate__alpha_h; + rBetaOrInf[2] = var_sodium_channel_h_gate__beta_h; + rAlphaOrTau[3] = var_potassium_channel_n_gate__alpha_n; + rBetaOrInf[3] = var_potassium_channel_n_gate__beta_n; + } + void Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLRushLarsenOpt::ComputeOneStepExceptVoltage(const std::vector &rDY, const std::vector &rAlphaOrTau, const std::vector &rBetaOrInf) + { + + std::vector& rY = rGetStateVariables(); + + { + const double tau_inv = rAlphaOrTau[1] + rBetaOrInf[1]; + const double y_inf = rAlphaOrTau[1] / tau_inv; + rY[1] = y_inf + (rY[1] - y_inf)*exp(-mDt*tau_inv); + } + { + const double tau_inv = rAlphaOrTau[2] + rBetaOrInf[2]; + const double y_inf = rAlphaOrTau[2] / tau_inv; + rY[2] = y_inf + (rY[2] - y_inf)*exp(-mDt*tau_inv); + } + { + const double tau_inv = rAlphaOrTau[3] + rBetaOrInf[3]; + const double y_inf = rAlphaOrTau[3] / tau_inv; + rY[3] = y_inf + (rY[3] - y_inf)*exp(-mDt*tau_inv); + } + } + + std::vector Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLRushLarsenOpt::ComputeDerivedQuantities(double var_chaste_interface__environment__time, const std::vector & rY) + { + // Inputs: + // Time units: millisecond + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + // Units: millivolt; Initial value: -75.0 + double var_chaste_interface__sodium_channel_m_gate__m = rY[1]; + // Units: dimensionless; Initial value: 0.05 + double var_chaste_interface__sodium_channel_h_gate__h = rY[2]; + // Units: dimensionless; Initial value: 0.6 + double var_chaste_interface__potassium_channel_n_gate__n = rY[3]; + // Units: dimensionless; Initial value: 0.325 + + + // Mathematics + const double var_membrane__E_R = -75; // millivolt + const double var_leakage_current__E_L = 10.613 + var_membrane__E_R; // millivolt + const double var_leakage_current__i_L = (-var_leakage_current__E_L + var_chaste_interface__membrane__V) * mParameters[2]; // microA_per_cm2 + const double var_membrane__i_Stim = GetIntracellularAreaStimulus(var_chaste_interface__environment__time); // microA_per_cm2 + const double var_potassium_channel__E_K = -12 + var_membrane__E_R; // millivolt + const double var_potassium_channel__i_K = pow(var_chaste_interface__potassium_channel_n_gate__n, 4) * (-var_potassium_channel__E_K + var_chaste_interface__membrane__V) * mParameters[3]; // microA_per_cm2 + const double var_sodium_channel__E_Na = 115 + var_membrane__E_R; // millivolt + const double var_sodium_channel__i_Na = pow(var_chaste_interface__sodium_channel_m_gate__m, 3) * (-var_sodium_channel__E_Na + var_chaste_interface__membrane__V) * mParameters[1] * var_chaste_interface__sodium_channel_h_gate__h; // microA_per_cm2 + + std::vector dqs(5); + dqs[0] = var_sodium_channel__i_Na; + dqs[1] = var_leakage_current__i_L; + dqs[2] = var_potassium_channel__i_K; + dqs[3] = var_membrane__i_Stim; + dqs[4] = var_chaste_interface__environment__time; + return dqs; + } + +template<> +void OdeSystemInformation::Initialise(void) +{ + this->mSystemName = "hodgkin_huxley_squid_axon_model_1952_modified"; + this->mFreeVariableName = "time"; + this->mFreeVariableUnits = "millisecond"; + + // rY[0]: + this->mVariableNames.push_back("membrane_voltage"); + this->mVariableUnits.push_back("millivolt"); + this->mInitialConditions.push_back(-75.0); + + // rY[1]: + this->mVariableNames.push_back("sodium_channel_m_gate__m"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.05); + + // rY[2]: + this->mVariableNames.push_back("sodium_channel_h_gate__h"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.6); + + // rY[3]: + this->mVariableNames.push_back("potassium_channel_n_gate__n"); + this->mVariableUnits.push_back("dimensionless"); + this->mInitialConditions.push_back(0.325); + + // mParameters[0]: + this->mParameterNames.push_back("membrane_capacitance"); + this->mParameterUnits.push_back("microF_per_cm2"); + + // mParameters[1]: + this->mParameterNames.push_back("membrane_fast_sodium_current_conductance"); + this->mParameterUnits.push_back("milliS_per_cm2"); + + // mParameters[2]: + this->mParameterNames.push_back("membrane_leakage_current_conductance"); + this->mParameterUnits.push_back("milliS_per_cm2"); + + // mParameters[3]: + this->mParameterNames.push_back("membrane_potassium_current_conductance"); + this->mParameterUnits.push_back("milliS_per_cm2"); + + // Derived Quantity index [0]: + this->mDerivedQuantityNames.push_back("membrane_fast_sodium_current"); + this->mDerivedQuantityUnits.push_back("microA_per_cm2"); + + // Derived Quantity index [1]: + this->mDerivedQuantityNames.push_back("membrane_leakage_current"); + this->mDerivedQuantityUnits.push_back("microA_per_cm2"); + + // Derived Quantity index [2]: + this->mDerivedQuantityNames.push_back("membrane_potassium_current"); + this->mDerivedQuantityUnits.push_back("microA_per_cm2"); + + // Derived Quantity index [3]: + this->mDerivedQuantityNames.push_back("membrane_stimulus_current"); + this->mDerivedQuantityUnits.push_back("microA_per_cm2"); + + // Derived Quantity index [4]: + this->mDerivedQuantityNames.push_back("time"); + this->mDerivedQuantityUnits.push_back("millisecond"); + + this->mInitialised = true; +} + +// Serialization for Boost >= 1.36 +#include "SerializationExportWrapperForCpp.hpp" +CHASTE_CLASS_EXPORT(Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLRushLarsenOpt) + diff --git a/chaste_codegen/tests/numerical/baseline/RLopt/hodgkin_huxley_squid_axon_model_1952_modified.hpp b/chaste_codegen/tests/numerical/baseline/RLopt/hodgkin_huxley_squid_axon_model_1952_modified.hpp new file mode 100644 index 00000000..106cc8a2 --- /dev/null +++ b/chaste_codegen/tests/numerical/baseline/RLopt/hodgkin_huxley_squid_axon_model_1952_modified.hpp @@ -0,0 +1,86 @@ +#ifndef CELLHODGKIN_HUXLEY_SQUID_AXON_MODEL_1952_MODIFIEDFROMCELLMLRUSHLARSENOPT_HPP_ +#define CELLHODGKIN_HUXLEY_SQUID_AXON_MODEL_1952_MODIFIEDFROMCELLMLRUSHLARSENOPT_HPP_ + +//! @file +//! +//! This source file was generated from CellML by chaste_codegen version (version omitted as unimportant) +//! +//! Model: hodgkin_huxley_squid_axon_model_1952_modified +//! +//! Processed by chaste_codegen: https://github.com/ModellingWebLab/chaste-codegen +//! (translator: chaste_codegen, model type: RushLarsenOpt) +//! on (date omitted as unimportant) +//! +//! + +#include "ChasteSerialization.hpp" +#include +#include "AbstractStimulusFunction.hpp" +#include "AbstractRushLarsenCardiacCell.hpp" + +class Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLRushLarsenOpt : public AbstractRushLarsenCardiacCell +{ + friend class boost::serialization::access; + template + void serialize(Archive & archive, const unsigned int version) + { + archive & boost::serialization::base_object(*this); + + } + + // + // Settable parameters and readable variables + // + + +private: +const bool is_concentration[4] = {false, false, false, false}; +const bool is_probability[4] = {false, false, false, false}; +public: + + boost::shared_ptr UseCellMLDefaultStimulus(); + Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLRushLarsenOpt(boost::shared_ptr /* unused; should be empty */, boost::shared_ptr pIntracellularStimulus); + ~Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLRushLarsenOpt(); + void VerifyStateVariables(); + AbstractLookupTableCollection* GetLookupTableCollection(); + double GetIIonic(const std::vector* pStateVariables=NULL); + void EvaluateEquations(double var_chaste_interface__environment__time, std::vector &rDY, std::vector &rAlphaOrTau, std::vector &rBetaOrInf); + void ComputeOneStepExceptVoltage(const std::vector &rDY, const std::vector &rAlphaOrTau, const std::vector &rBetaOrInf); + + std::vector ComputeDerivedQuantities(double var_chaste_interface__environment__time, const std::vector & rY); +}; + +// Needs to be included last +#include "SerializationExportWrapper.hpp" +CHASTE_CLASS_EXPORT(Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLRushLarsenOpt) + +namespace boost +{ + namespace serialization + { + template + inline void save_construct_data( + Archive & ar, const Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLRushLarsenOpt * t, const unsigned int fileVersion) + { + const boost::shared_ptr p_solver = t->GetSolver(); + const boost::shared_ptr p_stimulus = t->GetStimulusFunction(); + ar << p_solver; + ar << p_stimulus; + } + + template + inline void load_construct_data( + Archive & ar, Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLRushLarsenOpt * t, const unsigned int fileVersion) + { + boost::shared_ptr p_solver; + boost::shared_ptr p_stimulus; + ar >> p_solver; + ar >> p_stimulus; + ::new(t)Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLRushLarsenOpt(p_solver, p_stimulus); + } + + } + +} + +#endif // CELLHODGKIN_HUXLEY_SQUID_AXON_MODEL_1952_MODIFIEDFROMCELLMLRUSHLARSENOPT_HPP_ \ No newline at end of file diff --git a/chaste_codegen/tests/numerical/freeze_baseline.py b/chaste_codegen/tests/numerical/freeze_baseline.py new file mode 100755 index 00000000..22da21d6 --- /dev/null +++ b/chaste_codegen/tests/numerical/freeze_baseline.py @@ -0,0 +1,103 @@ +#!/usr/bin/env python3 +"""Snapshots this repo's `master`-branch reference-model corpus into a permanent local +directory (baseline/), once. + +This is the one and only place `master` is ever read from `git`. generate_refcheck_harness.py +never touches git at all - it only reads from this frozen snapshot. That's deliberate: the +whole point of this harness is to compare current-branch renderings against a *fixed* basis +that does not silently drift if this repo's master branch gets new commits later. Re-run this +script explicitly (with --force) only when you actually want to move the baseline forward to a +newer master - never as a side effect of the normal generate-and-test loop. + +Only each model's default (unsuffixed) rendering is frozen (see is_default_reference()) - +sibling variant files (a legacy `.cpp_python36` rendering, or a `--sympy_X_Y`/`--python_X_Y` +suffixed file on branches that have them) are skipped, since generate_refcheck_harness.py never +reads them as a baseline either. +""" + +import argparse +import shutil +import subprocess +import sys +from pathlib import Path +from typing import List + +REPO_ROOT = Path(__file__).resolve().parents[3] +REFS_REL_PATH = "chaste_codegen/data/tests/chaste_reference_models" +BASELINE_DIR = Path(__file__).resolve().parent / "baseline" + +# Only each model's default (unsuffixed) rendering belongs in the baseline - the fixed basis +# generate_refcheck_harness.py diffs every current-branch variant against. Sibling variant +# files - a legacy `.cpp_python36` rendering, a `--sympy_X_Y`/`--python_X_Y`-suffixed file on +# branches that have them, or any other alternate rendering of the same model - are excluded up +# front rather than freezing dead weight into baseline/. +DEFAULT_REFERENCE_EXTENSIONS = {".c", ".cpp", ".h", ".hpp", ".txt"} + + +def is_default_reference(path: str) -> bool: + name = Path(path) + return name.suffix in DEFAULT_REFERENCE_EXTENSIONS and "--" not in name.stem + + +def run_git(args: List[str]) -> str: + result = subprocess.run(["git", "-C", str(REPO_ROOT)] + args, + capture_output=True, text=True) + if result.returncode != 0: + print(f"Error: git {' '.join(args)} failed:\n{result.stderr}", file=sys.stderr) + sys.exit(1) + return result.stdout + + +def main() -> None: + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("--force", action="store_true", + help="Overwrite an existing frozen baseline (moves it to a newer master).") + args = parser.parse_args() + + if BASELINE_DIR.exists() and not args.force: + print(f"Error: a frozen baseline already exists at {BASELINE_DIR}.", file=sys.stderr) + print("This baseline is meant to stay fixed - it is not refreshed automatically.", + file=sys.stderr) + print("Pass --force if you really want to move it forward to master's current state.", + file=sys.stderr) + sys.exit(1) + + commit = run_git(["rev-parse", "master"]).strip() + print(f"Freezing chaste_codegen baseline from master commit {commit} ...") + + file_list = run_git(["ls-tree", "-r", "--name-only", "master", "--", REFS_REL_PATH]) + all_paths = [line for line in file_list.splitlines() if line] + if not all_paths: + print(f"Error: no files found under {REFS_REL_PATH} on master.", file=sys.stderr) + sys.exit(1) + + paths = [path for path in all_paths if is_default_reference(path)] + skipped = len(all_paths) - len(paths) + + if BASELINE_DIR.exists(): + shutil.rmtree(BASELINE_DIR) + + count = 0 + for path in paths: + rel = Path(path).relative_to(REFS_REL_PATH) + content = run_git(["show", f"master:{path}"]) + dest = BASELINE_DIR / rel + dest.parent.mkdir(parents=True, exist_ok=True) + dest.write_text(content) + count += 1 + + (BASELINE_DIR / "FROZEN_AT_COMMIT.txt").write_text( + f"{commit}\n\nThis directory is a permanent, fixed snapshot of\n" + f"{REFS_REL_PATH}\nfrom this repo's master branch at the commit above.\n" + f"generate_refcheck_harness.py reads baseline content only from here, never from git,\n" + f"so this basis will not change unless freeze_baseline.py --force is run again.\n" + f"Only default (unsuffixed) reference renderings are included - sibling variants " + f"(e.g. `.cpp_python36`, `--sympy_X_Y`/`--python_X_Y`) are skipped; see " + f"is_default_reference() in freeze_baseline.py.\n" + ) + + print(f"Froze {count} files into {BASELINE_DIR} ({skipped} sibling variant file(s) skipped)") + + +if __name__ == "__main__": + main() diff --git a/chaste_codegen/tests/numerical/generate_refcheck_harness.py b/chaste_codegen/tests/numerical/generate_refcheck_harness.py new file mode 100755 index 00000000..a66f76ec --- /dev/null +++ b/chaste_codegen/tests/numerical/generate_refcheck_harness.py @@ -0,0 +1,606 @@ +#!/usr/bin/env python3 +"""Creates a Chaste numerical cross-check harness from the reference model +corpus in this repository. + +This generates one standalone Chaste project under +/projects/RefCheck___/ +for every "case" (scheme, model) found in the reference model corpus, and for +every "variant" rendering of it (e.g. sympy_X_Y variants), plus one more per +case for that model's rendering in the frozen baseline/ snapshot - the fixed +basis every other variant is compared against. +Each project contains: + - the reference .hpp/.cpp for that one case variant (scheme, model, variant). + - one CxxTest runner that constructs the generated cell, runs it, and writes a + .dat file into a shared case (scheme, model) output folder. + +Each case variant (scheme, model, variant) gets its own project rather than +grouping several into one shared library to sidestep name collisions during +linking. For example, some scheme pairs (e.g. Cvode vs. Cvode_with_jacobian) +reuse the same class name for the same model. Also, every dynamically-loadable +model defines an identical global `MakeCardiacCell` factory function regardless +of which scheme/model it is. + +The central CodegenRefCheck/ project has no generated cell code of its own. It +numerically diffs every variant's .dat output against its model's baseline via +Chaste's existing CompareCellModelResults helper. + +See run_all.sh for the full generate -> configure -> build -> test sequence, or +README.md for the manual steps. +""" + +import os +import re +import shutil +import sys +from collections import defaultdict +from dataclasses import dataclass, field +from pathlib import Path +from typing import Dict, List, Optional, Tuple + +import jinja2 + +# Name of the hand-written compare project. +REFCHECK_PROJECT = "CodegenRefCheck" + +# Every generated case project directory starts with this prefix. +PROJECT_PREFIX = "RefCheck_" + +# Path to this numerical test harness. +NUMERICAL_TESTS_DIR = Path(__file__).resolve().parent + +# Path to chaste-codegen repo root. +REPO_ROOT = NUMERICAL_TESTS_DIR.parents[2] + +# Path to the reference-model corpus on the current branch. +REFS_DIR = REPO_ROOT / "chaste_codegen" / "data" / "tests" / "chaste_reference_models" + +# Current frozen snapshot of the baseline reference-model corpus, written by freeze_baseline.py. +BASELINE_DIR = NUMERICAL_TESTS_DIR / "baseline" + +# The CodegenRefCheck/ project template. +REFCHECK_PROJECT_TEMPLATE_DIR = NUMERICAL_TESTS_DIR / REFCHECK_PROJECT + +# Path to Chaste source. +CHASTE_SOURCE_DIR = Path(os.environ.get("CHASTE_SOURCE_DIR", str(REPO_ROOT.parent / "Chaste"))).resolve() +PROJECTS_DIR = CHASTE_SOURCE_DIR / "projects" + +# Explicit allow-list: RL_C (plain C) and RL_labview (LabVIEW text) are excluded. +SCHEMES = [ + "Normal", + "Opt", + "BE", + "BEopt", + "Cvode", + "Cvode_opt", + "Cvode_with_jacobian", + "Cvode_opt_with_jacobian", + "CVODE_DATA_CLAMP", + "CVODE_DATA_CLAMP_OPT", + "GRL1", + "GRL1Opt", + "GRL2", + "GRL2Opt", + "RL", + "RLopt", +] + +# A "variant" identifies which rendering of a given "case" (scheme, model) is being tested: +# - baseline: the frozen snapshot. +# - default: the unsuffixed reference files. +# - sympy_X_Y: the sympy-version suffixed renderings. +# - python_X_Y: the python-version suffixed renderings. +# The dict keys below are used in filenames and the CamelCase forms in identifiers. +VARIANT_VARNAME = { + "default": "Default", + "sympy_1_11": "Sympy111", + "sympy_1_13": "Sympy113", + "sympy_1_14": "Sympy114", + "python_3_11": "Python311", + "baseline": "Baseline", +} + +# Separator between model name and variant tag in reference-model filenames. +VARIANT_SEP = "--" + +# Skip synthetic fixtures in reference model corpus that chaste_codegen uses to +# test one specific feature (piecewise handling, non-state-variable voltage, etc.) +# rather than real cardiac models. +# TODO: find a way to test these as well. +MODEL_NAME_PREFIXES_TO_SKIP = ("test_",) + +# Cases (scheme, model) written against an old Chaste heart API that no longer +# compiles against modern Chaste. +# TODO: fix or remove these from the reference-model corpus. +COMPILE_INCOMPATIBLE_CASES = { + # error: "AbstractGeneralizedRushLarsenCardiacCell is not a direct base" of the generated + # class - AbstractCardiacCellWithModifiers/AbstractGeneralizedRushLarsenCardiacCell's + # inheritance relationship has changed since this fixture was generated. + ("GRL1", "dynamic_matsuoka_model_2003"), +} + +# Models generated with --use-model-factory need ModelFactory.hpp/.cpp from ApPredict. +# The script will error if they can't be found. +MODEL_FACTORY_INCLUDE = '#include "ModelFactory.hpp"' +MODEL_FACTORY_FILES = ("ModelFactory.hpp", "ModelFactory.cpp") +MODEL_FACTORY_DIR = Path( + os.environ.get("MODEL_FACTORY_DIR", str(PROJECTS_DIR / "ApPredict" / "src" / "fortests")) +) + +# Preamble for every CMakeLists.txt this script writes. +AUTOGENERATED_HEADER = ( + "# AUTOGENERATED by chaste_codegen/tests/numerical/generate_refcheck_harness.py (chaste-codegen repo)\n" + "# Do not hand-edit; rerun the generator instead.\n" +) + +# Matches a class declaration, to parse the generated cell's class name. +CLASS_RE = re.compile(r"^class\s+(\w+)", re.MULTILINE) + +# Matches every local #include in order. +SELF_INCLUDE_RE = re.compile(r'^#include "([^"]+)\.hpp"', re.MULTILINE) + +# Create a Jinja env wired to the templates in this numerical test harness. +_JINJA_ENV = jinja2.Environment( + loader=jinja2.FileSystemLoader(str(NUMERICAL_TESTS_DIR / "templates")), + keep_trailing_newline=True, + trim_blocks=True, + lstrip_blocks=True, + undefined=jinja2.StrictUndefined, +) + +# Renders one CxxTest runner for each case variant (see render_test_file()). +VARIANT_RUNNER_TEMPLATE = _JINJA_ENV.get_template("variant_runner.hpp") + +# Renders the central compare project's RefCheckManifest.hpp, a +# (scheme, model, variant, hasBaseline) table that TestRefCheckCompareAll uses. +REFCHECK_MANIFEST_TEMPLATE = _JINJA_ENV.get_template("refcheck_manifest.hpp") + + +def extract_self_include(cpp_text: str, hpp_dir: Path) -> Optional[Tuple[str, str, str]]: + """Find a generated .cpp's own paired .hpp header, by reading the .cpp's own #include. + + Returns (stem, hpp_text, class_name) - the header's name without ".hpp", its content, and the + generated cell class it declares - or None if no local #include resolves to a header + declaring a class this .cpp defines. Headers are looked up in hpp_dir. + + Deriving the stem from the .cpp's own filename instead would be simpler, but doesn't work: + + - Variant .cpp files have no paired .hpp at all. A `--sympy_1_14.cpp` shares the + unsuffixed `.hpp`; there are no `--sympy_X_Y.hpp`/`--python_X_Y.hpp` files anywhere + in the corpus. The #include line is the only thing naming the right header. + - The stem is a compile-time contract, not just a lookup key. write_tuple_project() copies + the pair into the project as `.hpp`/`.cpp`, so the header must land under the + name the .cpp asks for or the project won't build. + - A few .cpp files name a header that does not exist under that name anywhere, e.g. + `Normal/dynamic_beeler_reuter_model_1977.cpp` includes "beeler_reuter_model_1977.hpp" + while the file on disk is `dynamic_beeler_reuter_model_1977.hpp` (likewise + `Normal/fox_mcharg_gilmour_2002_console_script.cpp` and the `aslanidi_Purkinje_model_2009` + files under `Normal/` and `Opt/`). A filename-derived stem finds a plausible header for + these, but the copied .cpp still includes a name nothing provides. + + This function checks each local #include in turn, confirming the class it declares is + actually the one defined in the .cpp. The first #include isn't necessarily the right one. + """ + # Check local includes in order. + for stem in SELF_INCLUDE_RE.findall(cpp_text): + hpp_path = hpp_dir / f"{stem}.hpp" + if not hpp_path.is_file(): + continue + hpp_text = hpp_path.read_text() + # Check that the class declared in the .hpp is actually defined in the .cpp. + match = CLASS_RE.search(hpp_text) + if match is None: + continue + class_name = match.group(1) + if re.search(re.escape(class_name) + r"::", cpp_text): + return stem, hpp_text, class_name + return None + + +def parse_construction_flags(hpp_text: str, class_name: str, label: str) -> Tuple[bool, bool]: + """Work out how class_name must be instantiated, from its declaration in hpp_text. + + Returns (needs_empty_solver, needs_cvode_guard): whether the constructor wants a dummy ODE + solver (its solver argument is marked unused), and whether the whole header is behind + #ifdef CHASTE_CVODE. class_name comes from extract_self_include(), which has already located + it in this same text; label is only used for the warning message. + """ + ctor_match = re.search(re.escape(class_name) + r"\s*\(([^;]*)\)\s*;", hpp_text) + ctor_args = ctor_match.group(1) if ctor_match else "" + if ctor_match is None: + print( + f" WARNING: could not find constructor declaration for {label} " + f"(class {class_name}); assuming a real solver is wanted.", + file=sys.stderr, + ) + needs_empty_solver = "unused" in ctor_args + needs_cvode_guard = hpp_text.lstrip().startswith("#ifdef CHASTE_CVODE") + return needs_empty_solver, needs_cvode_guard + + +@dataclass +class TupleProject: + """Everything needed to write one (scheme, model, variant) tuple's Chaste project.""" + + # Name of the generated project directory: PROJECT_PREFIX, then scheme, model, and this + # tuple's VARIANT_VARNAME value. + project_name: str + # Name (without ".hpp") the .cpp expects its own header under - see extract_self_include(). + header_stem: str + # Contents of the reference .hpp/.cpp pair, copied into the project verbatim. + hpp_text: str + cpp_text: str + # The generated cell class the runner instantiates, declared in hpp_text. + class_name: str + # Whether the constructor wants a dummy ODE solver, and whether the header is CVODE-only. + needs_empty_solver: bool + needs_cvode_guard: bool + # Output folder shared by every variant of this case, "CodegenRefCheck//". + output_folder: str + # This tuple's raw variant ("default", "baseline", "sympy_1_14", ...) - written as the + # literal basename WriteToFile() gives the generated .dat file, so TestRefCheckCompareAll + # can find it again by that same value via RefCheckEntry.variant. + variant: str + + +def render_test_file(tp: TupleProject) -> str: + """Render the CxxTest runner that constructs tp's cell, simulates it, and writes its .dat.""" + ident = f"Test_{tp.project_name}" + guard = re.sub(r"[^A-Za-z0-9_]", "_", ident).upper() + return VARIANT_RUNNER_TEMPLATE.render( + guard=guard, + ident=ident, + class_name=tp.class_name, + header_stem=tp.header_stem, + needs_empty_solver=tp.needs_empty_solver, + needs_cvode_guard=tp.needs_cvode_guard, + output_folder=tp.output_folder, + variant_basename=tp.variant, + ) + + +class TupleSkipped(Exception): + """One (scheme, model, variant) tuple could not be generated; the message says why. + + Carries the reason rather than reporting it, because only the caller knows whether the tuple + is a baseline or a variant, and so which part of the report the reason belongs in. + """ + + +def write_file(path: Path, content: str) -> None: + """Write content to path, creating any missing parent directories first.""" + path.parent.mkdir(parents=True, exist_ok=True) + path.write_text(content) + + +def ensure_model_factory(project_name: str, cpp_text: str) -> None: + """Copy ModelFactory.hpp/.cpp from MODEL_FACTORY_DIR into a project if it turns out to need + them (detected by the generated .cpp itself #include-ing ModelFactory.hpp). Their presence is + a precondition of the whole run, so they are known to be there by the time this is called.""" + if MODEL_FACTORY_INCLUDE not in cpp_text: + return + dest_dir = PROJECTS_DIR / project_name / "src" / "fortests" + for name in MODEL_FACTORY_FILES: + write_file(dest_dir / name, (MODEL_FACTORY_DIR / name).read_text()) + + +def write_tuple_project(tp: TupleProject) -> str: + """Create a complete, standalone Chaste project for exactly one (scheme, model, variant) + tuple: its project and test CMakeLists.txt, one src .hpp/.cpp pair (plus ModelFactory if the + .cpp needs it), and one test runner. Isolating each tuple in its own project/library + sidesteps every cross-tuple symbol collision (see module docstring) without needing any + custom (non-macro) CMake linking logic. + + Returns the name of the generated ctest test.""" + proj_dir = PROJECTS_DIR / tp.project_name + write_file( + proj_dir / "CMakeLists.txt", + AUTOGENERATED_HEADER + f"find_package(Chaste COMPONENTS heart)\nchaste_do_project({tp.project_name})\n", + ) + write_file( + proj_dir / "test" / "CMakeLists.txt", + AUTOGENERATED_HEADER + f"chaste_do_test_project({tp.project_name})\n", + ) + write_file(proj_dir / "src" / f"{tp.header_stem}.hpp", tp.hpp_text) + write_file(proj_dir / "src" / f"{tp.header_stem}.cpp", tp.cpp_text) + ensure_model_factory(tp.project_name, tp.cpp_text) + + test_filename = f"Test_{tp.project_name}.hpp" + write_file(proj_dir / "test" / test_filename, render_test_file(tp)) + write_file(proj_dir / "test" / "CodegenTestPack.txt", test_filename + "\n") + return f"Test_{tp.project_name}" + + +def build_tuple_project( + cpp_path: Path, + label: str, + project_name: str, + output_folder: str, + variant: str, +) -> str: + """Resolve one reference .cpp's header, then write its complete Chaste project. + + The same steps serve both the frozen baseline and the current branch's variants; only which + corpus cpp_path comes from differs, and its own directory is where its header is resolved. + Returns the name of the generated ctest test, or raises TupleSkipped with the reason this + tuple could not be generated. + """ + cpp_text = cpp_path.read_text() + self_include = extract_self_include(cpp_text, cpp_path.parent) + if self_include is None: + raise TupleSkipped( + f"self-include unresolved - no local #include target exists in " + f"{cpp_path.parent.name}/ (broken fixture)" + ) + header_stem, hpp_text, class_name = self_include + needs_empty_solver, needs_cvode_guard = parse_construction_flags(hpp_text, class_name, label) + return write_tuple_project( + TupleProject( + project_name=project_name, + header_stem=header_stem, + hpp_text=hpp_text, + cpp_text=cpp_text, + class_name=class_name, + needs_empty_solver=needs_empty_solver, + needs_cvode_guard=needs_cvode_guard, + output_folder=output_folder, + variant=variant, + ) + ) + + +def clean_projects_dir() -> None: + """Remove all generated projects from previous runs (any PROJECTS_DIR + subdirectory whose name starts with PROJECT_PREFIX) so each run starts from + a clean slate. Does not touch CodegenRefCheck/ itself, which is staged fresh + by stage_codegen_ref_check_project() instead.""" + if not PROJECTS_DIR.is_dir(): + return + for child in PROJECTS_DIR.iterdir(): + if child.is_dir() and child.name.startswith(PROJECT_PREFIX): + shutil.rmtree(child) + + +def stage_codegen_ref_check_project() -> None: + """Copy the CodegenRefCheck/ project template (TestRefCheckCompareAll.hpp + CMakeLists.txt) + wholesale into /projects/, fresh each run. The rest of the + CodegenRefCheck/ project is auto-generated by the rest of this script.""" + dest = PROJECTS_DIR / REFCHECK_PROJECT + if dest.exists(): + shutil.rmtree(dest) + shutil.copytree(REFCHECK_PROJECT_TEMPLATE_DIR, dest) + (dest / "src").mkdir(exist_ok=True) + (dest / "src" / ".gitkeep").touch() + + +@dataclass +class GenerationReport: + """What one generator run produced and what it left out. + + Accumulated across generate_case_projects(), then consumed by write_compare_project() (which + needs the tuple table and the test names) and write_report() (which needs the counts and the + reasons).""" + + # Number of cases (scheme, model) found in the reference-model corpus. + cases_found: int = 0 + # (scheme, model, variant, has_baseline) per generated variant runner, excluding baselines. + # Rendered into RefCheckManifest.hpp and read back by TestRefCheckCompareAll. + manifest_entries: List[Tuple[str, str, str, bool]] = field(default_factory=list) + # Names of every generated ctest test, used for the compare project's DEPENDS list. + test_names: List[str] = field(default_factory=list) + # Why each case (scheme, model) has no baseline to compare against. Keyed by case rather + # than a flat list so that "cases with no baseline" is a count of cases, not of messages. + no_baseline: Dict[Tuple[str, str], str] = field(default_factory=dict) + # Human-readable reasons, one per line, for everything else not fully generated. + skipped: List[str] = field(default_factory=list) + unknown_variants: List[str] = field(default_factory=list) + + +def discover_cases() -> Tuple[Dict[Tuple[str, str], Dict[str, Path]], List[str]]: + """Scan the reference-model corpus for every (scheme, model, variant) tuple. + + Returns (cases, skipped): cases maps each case (scheme, model) to {variant: cpp_path}, and + skipped collects a reason per file deliberately left out. + """ + cases: Dict[Tuple[str, str], Dict[str, Path]] = defaultdict(dict) + skipped: List[str] = [] + + for scheme in SCHEMES: + scheme_dir = REFS_DIR / scheme + if not scheme_dir.is_dir(): + print(f"WARNING: scheme directory not found, skipping: {scheme_dir}", file=sys.stderr) + continue + for cpp_path in sorted(scheme_dir.glob("*.cpp")): + name = cpp_path.stem + if VARIANT_SEP in name: + model, variant = name.split(VARIANT_SEP, 1) + else: + # The unsuffixed .cpp is the "default" variant. + model, variant = name, "default" + if model.startswith(MODEL_NAME_PREFIXES_TO_SKIP): + skipped.append(f"{scheme}/{cpp_path.name}: synthetic codegen-feature fixture, not a cardiac model") + continue + cases[(scheme, model)][variant] = cpp_path + + return cases, skipped + + +def generate_case_projects(cases: Dict[Tuple[str, str], Dict[str, Path]], report: GenerationReport) -> None: + """Write one standalone Chaste project per (scheme, model, variant) tuple, plus one more per + case for its frozen baseline rendering, recording into report what was generated and what + was left out.""" + for (scheme, model), variants in sorted(cases.items()): + if (scheme, model) in COMPILE_INCOMPATIBLE_CASES: + report.skipped.append(f"{scheme}/{model}: excluded, known incompatible with current Chaste heart API.") + continue + + # Every variant of this case writes its .dat here, for TestRefCheckCompareAll to diff. + output_folder = f"CodegenRefCheck/{scheme}/{model}" + + # The model as rendered in the fixed baseline snapshot, if it is in there at all. + baseline_cpp_path = BASELINE_DIR / scheme / f"{model}.cpp" + has_baseline = baseline_cpp_path.is_file() + if not has_baseline: + report.no_baseline[(scheme, model)] = "no baseline (not in the snapshot)." + else: + try: + report.test_names.append( + build_tuple_project( + baseline_cpp_path, + f"{scheme}/{model} (baseline)", + f"{PROJECT_PREFIX}{scheme}_{model}_{VARIANT_VARNAME['baseline']}", + output_folder, + "baseline", + ) + ) + except TupleSkipped as reason: + has_baseline = False + report.no_baseline[(scheme, model)] = f"baseline .cpp {reason}" + + for variant, cpp_path in sorted(variants.items()): + # variant: "default" (the unsuffixed rendering) or a version-suffix tag. Kept in this + # raw form all the way to TupleProject.variant (-> the .dat filename) and to + # report.manifest_entries (-> RefCheckEntry.variant, read back by + # TestRefCheckCompareAll). short_variant is a display-only derivative of it, used + # just for project_name. + short_variant = VARIANT_VARNAME.get(variant) + if short_variant is None: + report.unknown_variants.append( + f"{scheme}/{model}{VARIANT_SEP}{variant}: unrecognised variant tag, skipped" + ) + continue + + label = f"{scheme}/{cpp_path.name}" + try: + test_name = build_tuple_project( + cpp_path, + label, + f"{PROJECT_PREFIX}{scheme}_{model}_{short_variant}", + output_folder, + variant, + ) + except TupleSkipped as reason: + report.skipped.append(f"{label}: {reason}") + continue + report.test_names.append(test_name) + report.manifest_entries.append((scheme, model, variant, has_baseline)) + + +def write_compare_project(report: GenerationReport) -> None: + """Write the generated parts of the central CodegenRefCheck/ compare project: the manifest + header listing every tuple, and the CMakeLists.txt wiring TestRefCheckCompareAll up to run + after all of them.""" + test_dir = PROJECTS_DIR / REFCHECK_PROJECT / "test" + write_file( + test_dir / "RefCheckManifest.hpp", + REFCHECK_MANIFEST_TEMPLATE.render(manifest_entries=report.manifest_entries), + ) + write_file(test_dir / "CodegenTestPack.txt", "TestRefCheckCompareAll.hpp\n") + + depends_list = ";".join(sorted(report.test_names)) + write_file( + test_dir / "CMakeLists.txt", + AUTOGENERATED_HEADER + + f""" +chaste_do_test_project({REFCHECK_PROJECT}) + +# TestRefCheckCompareAll only makes sense after every RefCheck* tuple-runner test (each in its +# own sibling RefCheck___ project) has written its .dat output; ctest does +# not order tests by default, so this dependency must be explicit. +set_tests_properties(TestRefCheckCompareAll PROPERTIES DEPENDS "{depends_list}") +""", + ) + + +def write_report(report: GenerationReport) -> None: + """Write generated_manifest.md, the human-readable account of what this run generated and + skipped, and echo the headline counts to stdout.""" + cases_generated = {(scheme, model) for scheme, model, _, _ in report.manifest_entries} + cases_with_baseline = { + (scheme, model) for scheme, model, _, has_baseline in report.manifest_entries if has_baseline + } + + lines = [ + "# CodegenRefCheck generated manifest", + "", + f"Source repo (this checkout): `{REPO_ROOT}`", + f"Target Chaste checkout: `{CHASTE_SOURCE_DIR}`", + "", + f"- Cases (scheme, model) found: {report.cases_found}", + f"- Tuples generated (variant runners, excluding baseline): {len(report.manifest_entries)}", + f"- Cases with a baseline: {len(cases_with_baseline)}", + f"- Cases with NO baseline: {len(report.no_baseline)}", + f"- Skipped files: {len(report.skipped)}", + f"- Unknown variant tags skipped: {len(report.unknown_variants)}", + f"- Generated projects: {len(report.test_names)}", + "", + ] + no_baseline_entries = [ + f"{scheme}/{model}: {reason}" for (scheme, model), reason in sorted(report.no_baseline.items()) + ] + for heading, entries in ( + ("No baseline", no_baseline_entries), + ("Skipped", report.skipped), + ("Unknown variant tags", report.unknown_variants), + ): + if entries: + lines += [f"## {heading}", ""] + [f"- {entry}" for entry in entries] + [""] + write_file(PROJECTS_DIR / REFCHECK_PROJECT / "generated_manifest.md", "\n".join(lines)) + + print( + f"Generated {len(report.test_names)} projects ({len(report.manifest_entries)} variant-runner tuples " + f"+ baselines) across {len(cases_generated)} " + f"(scheme, model) cases; {len(report.no_baseline)} without a baseline, " + f"{len(report.skipped)} files skipped, {len(report.unknown_variants)} unknown variant tags skipped." + ) + print(f"Materialised into {PROJECTS_DIR}") + print(f"See {PROJECTS_DIR / REFCHECK_PROJECT / 'generated_manifest.md'} for details.") + + +def main() -> None: + """Regenerate the whole harness from scratch. + + - Wipe all previously generated case variant Chaste projects. + - Stage a fresh CodegenRefCheck/ comparison project. + - Discover every (scheme, model, variant) tuple in the current + reference-model corpus. + - Write one standalone Chaste project per case variant, and one per case + for its rendering in the frozen baseline. + - Write the manifest, the compare-project CMakeLists.txt, and a + human-readable generated_manifest.md summarising what was generated.""" + clean_projects_dir() + stage_codegen_ref_check_project() + + cases, skipped = discover_cases() + report = GenerationReport(cases_found=len(cases), skipped=skipped) + generate_case_projects(cases, report) + write_compare_project(report) + write_report(report) + + +if __name__ == "__main__": + if not REFS_DIR.is_dir(): + print(f"Error: reference model directory not found: {REFS_DIR}", file=sys.stderr) + sys.exit(1) + if not BASELINE_DIR.is_dir(): + print( + f"Error: no frozen baseline found at {BASELINE_DIR}.\n" f"Run freeze_baseline.py once first.", + file=sys.stderr, + ) + sys.exit(1) + if not (CHASTE_SOURCE_DIR / "CMakeLists.txt").is_file(): + print( + f"Error: CHASTE_SOURCE_DIR ({CHASTE_SOURCE_DIR}) doesn't look like Chaste. " + f"Set CHASTE_SOURCE_DIR to a Chaste checkout.", + file=sys.stderr, + ) + sys.exit(1) + if not all((MODEL_FACTORY_DIR / name).is_file() for name in MODEL_FACTORY_FILES): + print( + f"Error: ModelFactory.hpp/.cpp not found in {MODEL_FACTORY_DIR}.\n" + f"Models generated with --use-model-factory need them. Clone the ApPredict project " + f"(https://github.com/Chaste/ApPredict) into {PROJECTS_DIR}, or set MODEL_FACTORY_DIR " + f"to a checkout that has them.", + file=sys.stderr, + ) + sys.exit(1) + main() diff --git a/chaste_codegen/tests/numerical/run_all.sh b/chaste_codegen/tests/numerical/run_all.sh new file mode 100755 index 00000000..87a9d938 --- /dev/null +++ b/chaste_codegen/tests/numerical/run_all.sh @@ -0,0 +1,36 @@ +#!/usr/bin/env bash +set -euo pipefail + +script_dir="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)" +repo_root="$(cd -- "${script_dir}/../../.." && pwd)" + +# Chaste checkout to build/test against - defaults to a sibling checkout, matching the +# convention Chaste's own local-dev/common.sh uses in the other direction +# (CHASTE_CODEGEN_SOURCE_DIR defaulting to ../chaste-codegen). +CHASTE_SOURCE_DIR="${CHASTE_SOURCE_DIR:-${repo_root}/../Chaste}" +if [[ ! -f "${CHASTE_SOURCE_DIR}/CMakeLists.txt" ]]; then + echo "Error: CHASTE_SOURCE_DIR ('${CHASTE_SOURCE_DIR}') doesn't look like a Chaste checkout." >&2 + echo "Set CHASTE_SOURCE_DIR to one." >&2 + exit 1 +fi +CHASTE_BUILD_DIR="${CHASTE_BUILD_DIR:-${CHASTE_SOURCE_DIR}/build}" +CHASTE_TEST_OUTPUT="${CHASTE_TEST_OUTPUT:-${CHASTE_SOURCE_DIR}/output}" + +if ! [[ "${NCORES:-}" =~ ^[1-9][0-9]*$ ]]; then + NCORES=4 +fi + +export CHASTE_SOURCE_DIR +python3 "${script_dir}/generate_refcheck_harness.py" + +if [[ ! -f "${CHASTE_BUILD_DIR}/CMakeCache.txt" ]]; then + echo "Error: Chaste build not configured at '${CHASTE_BUILD_DIR}'." >&2 + echo "Configure it first (e.g. Chaste's local-dev/configure.sh, or plain cmake)." >&2 + exit 1 +fi + +cmake "${CHASTE_SOURCE_DIR}" -B "${CHASTE_BUILD_DIR}" >/dev/null # pick up newly-generated projects +cmake --build "${CHASTE_BUILD_DIR}" --target Codegen --parallel "${NCORES}" + +mkdir -p "${CHASTE_TEST_OUTPUT}" +CHASTE_TEST_OUTPUT="${CHASTE_TEST_OUTPUT}" ctest --test-dir "${CHASTE_BUILD_DIR}" -j"${NCORES}" -V -L Codegen -R '^Test_RefCheck|^TestRefCheckCompareAll' --output-on-failure diff --git a/chaste_codegen/tests/numerical/templates/refcheck_manifest.hpp b/chaste_codegen/tests/numerical/templates/refcheck_manifest.hpp new file mode 100644 index 00000000..d91f374e --- /dev/null +++ b/chaste_codegen/tests/numerical/templates/refcheck_manifest.hpp @@ -0,0 +1,29 @@ +// AUTOGENERATED by chaste_codegen/tests/numerical/generate_refcheck_harness.py (chaste-codegen repo) +// Do not hand-edit; rerun the generator instead. +#ifndef REFCHECKMANIFEST_HPP_ +#define REFCHECKMANIFEST_HPP_ + +#include +#include + +struct RefCheckEntry +{ + std::string scheme; + std::string model; + // Which rendering of (scheme, model) this is: "default", "baseline", + // or a version-suffix tag (e.g. "sympy_1_14"). Doubles as the .dat + // file's basename this tuple's runner wrote - see TestRefCheckCompareAll. + std::string variant; + bool hasBaseline; +}; + +inline std::vector GetRefCheckManifest() +{ + std::vector entries; +{% for scheme, model, variant, has_baseline in manifest_entries %} + entries.push_back(RefCheckEntry{"{{ scheme }}", "{{ model }}", "{{ variant }}", {{ "true" if has_baseline else "false" }}}); +{% endfor %} + return entries; +} + +#endif // REFCHECKMANIFEST_HPP_ diff --git a/chaste_codegen/tests/numerical/templates/variant_runner.hpp b/chaste_codegen/tests/numerical/templates/variant_runner.hpp new file mode 100644 index 00000000..11fc56ec --- /dev/null +++ b/chaste_codegen/tests/numerical/templates/variant_runner.hpp @@ -0,0 +1,75 @@ +// AUTOGENERATED by chaste_codegen/tests/numerical/generate_refcheck_harness.py +// Do not hand-edit; rerun the generator instead. +#ifndef {{ guard }}_HPP_ +#define {{ guard }}_HPP_ + +#include +#include + +#include "AbstractCardiacCellInterface.hpp" +#include "AbstractStimulusFunction.hpp" +#include "AbstractUntemplatedParameterisedSystem.hpp" +#include "EulerIvpOdeSolver.hpp" +#include "OdeSolution.hpp" +#include "SimpleStimulus.hpp" +#include "{{ header_stem }}.hpp" +#ifdef CHASTE_CVODE +#include "AbstractCvodeSystem.hpp" +#endif + +// This test must run sequentially (never in parallel), like other codegen tests. +#include "FakePetscSetup.hpp" + +class {{ ident }} : public CxxTest::TestSuite +{ +public: + void TestRunAndWrite() + { +{% if needs_cvode_guard %} +#ifdef CHASTE_CVODE +{% endif %} +{% if needs_empty_solver %} + boost::shared_ptr p_solver; // unused by this scheme; must stay empty +{% else %} + boost::shared_ptr p_solver(new EulerIvpOdeSolver); +{% endif %} + boost::shared_ptr p_stimulus(new SimpleStimulus(-25.5, 2.0, 50.0)); + boost::shared_ptr p_cell(new {{ class_name }}(p_solver, p_stimulus)); + + double end_time = 700.0; // ms, fallback if the model has no SuggestedCycleLength attribute + AbstractUntemplatedParameterisedSystem* p_system = + dynamic_cast(p_cell.get()); + if (p_system != NULL) + { + if (p_system->HasAttribute("SuggestedCycleLength")) + { + end_time = p_system->GetAttribute("SuggestedCycleLength"); + } + if (p_system->HasAttribute("SuggestedForwardEulerTimestep")) + { + double dt = p_system->GetAttribute("SuggestedForwardEulerTimestep"); + if (dt > 0.0) + { + p_cell->SetTimestep(dt); + } + } + } +#ifdef CHASTE_CVODE + AbstractCvodeSystem* p_cvode_system = dynamic_cast(p_cell.get()); + if (p_cvode_system != NULL) + { + p_cvode_system->SetMaxSteps(1000); + } +#endif + + OdeSolution solution = p_cell->Compute(0.0, end_time, 1.0); + solution.WriteToFile("{{ output_folder }}", "{{ variant_basename }}", "ms", 10, false); +{% if needs_cvode_guard %} +#else + TS_TRACE("Skipped: this model requires CHASTE_CVODE, which is not enabled in this build."); +#endif +{% endif %} + } +}; + +#endif // {{ guard }}_HPP_